Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C] Research Turbodbc/Arrowdantic for developing ODBC-wrapping driver #72

Open
lidavidm opened this issue Aug 19, 2022 · 4 comments
Open

Comments

@lidavidm
Copy link
Member

Arrowdantic: https://github.com/jorgecarleitao/arrowdantic/
Turbodbc: https://github.com/blue-yonder/turbodbc/

@pacman82
Copy link

Hi there 👋 . I am the author of arrow-odbc and a typo braught me here. A quick heads up:

Turbodbc:

  • Uses ODBC C Interface directly from C++ and fills arrow (C++ official implementation) arrays in C++.
  • pyarrow is backed by the C++ arrow implementation. Python C API is used for interfacing
  • For all things to work together, C++ ABI, Python C-API, boost version, arrow version must match. Somewhat frickle build process.
  • Scope: Complies with Python Database API Specification 2.0 (PEP 249)

Arrowdantic (at the best of my knowledge):

  • Uses ODBC from a Rust crate (odbc-api) which and fills arrow2(Rust crate) arrays directly in Rust
  • Provides Python bindings for arrow2.
  • Scope: More an alternative to pyarrow with built-in ODBC support

arrow-odbc

  • Uses ODBC from a Rust crate (odbc-api) which talks to Python via C-Interface.
  • Uses arrow (Rust crate, official implementation) and Arrow-C Interface to interface with pyarrow
  • Scope: Read and write pyarrow arrays with ODBC from and to databases.

Cheers,
Markus

@lidavidm
Copy link
Member Author

Hi, sorry for typosquatting 🙂

Thanks for the breakdown! The scope here would be lower level than any of these. I suppose I'm mostly curious about how each project achieves their speed objectives. Also, the plan would be to use nanoarrow to avoid bringing in dependencies on libarrow, Boost, or anything like that.

@pacman82
Copy link

Hi, sorry for typosquatting 🙂

I don't mind.

Also, the plan would be to use nanoarrow to avoid bringing in dependencies on libarrow, Boost, or anything like that.

Yeah, building that is a pain. Personally I would recommend using one of the Rust implementations (either arrow or arrow2), since Rust links everything static by default, and cargo is way more fun than any C/C++ based build system. You do you, though.

Cheers, Markus

@pacman82
Copy link

Yeah, building that is a pain

To clarify: I was referring the dependencies. I've no experience or knowledge about/with nanoarrow.

@lidavidm lidavidm added this to the 0.2.0 milestone Dec 13, 2022
@lidavidm lidavidm removed this from the ADBC Libraries 0.2.0 milestone Feb 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants