1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
//! Fill Apache Arrow arrays from ODBC data sources.
//!
//! ## Usage
//!
//! ```no_run
//! use arrow_odbc::{odbc_api::{Environment, ConnectionOptions}, OdbcReaderBuilder};
//!
//! const CONNECTION_STRING: &str = "\
//! Driver={ODBC Driver 17 for SQL Server};\
//! Server=localhost;\
//! UID=SA;\
//! PWD=My@Test@Password1;\
//! ";
//!
//! fn main() -> Result<(), anyhow::Error> {
//! // Your application is fine if you spin up only one Environment.
//! let odbc_environment = Environment::new()?;
//!
//! // Connect with database.
//! let connection = odbc_environment.connect_with_connection_string(
//! CONNECTION_STRING,
//! ConnectionOptions::default()
//! )?;
//!
//! // This SQL statement does not require any arguments.
//! let parameters = ();
//!
//! // Execute query and create result set
//! let cursor = connection
//! .execute("SELECT * FROM MyTable", parameters)?
//! .expect("SELECT statement must produce a cursor");
//!
//! // Read result set as arrow batches. Infer Arrow types automatically using the meta
//! // information of `cursor`.
//! let arrow_record_batches = OdbcReaderBuilder::new().build(cursor)?;
//!
//! for batch in arrow_record_batches {
//! // ... process batch ...
//! }
//!
//! Ok(())
//! }
//! ```
mod date_time;
mod decimal;
mod error;
mod odbc_writer;
mod quirks;
mod reader;
mod schema;
// Rexport odbc_api and arrow to make it easier for downstream crates to depend to avoid version
// mismatches
pub use arrow;
pub use odbc_api;
pub use self::{
error::Error,
odbc_writer::{insert_into_table, insert_statement_from_schema, OdbcWriter, WriterError},
quirks::Quirks,
reader::{
BufferAllocationOptions, ColumnFailure, ConcurrentOdbcReader, OdbcReader, OdbcReaderBuilder,
},
schema::arrow_schema_from,
};