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
66
67
//! 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 18 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 = ();
//!
//! // Do not apply any timeout.
//! let timeout_sec = None;
//!
//! // Execute query and create result set
//! let cursor = connection
//! .execute("SELECT * FROM MyTable", parameters, timeout_sec)?
//! .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(())
//! }
//! ```
// 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 ;