wjones127 commented on code in PR #428:
URL: https://github.com/apache/arrow-adbc/pull/428#discussion_r1100780974


##########
adbc.h:
##########
@@ -1183,7 +1204,11 @@ AdbcStatusCode AdbcStatementExecutePartitions(struct 
AdbcStatement* statement,
 ///   driver.
 ///
 /// Although drivers may choose any name for this function, the
-/// recommended name is "AdbcDriverInit".
+/// recommended name is "AdbcDriverInit". If you use the recommended
+/// name, then driver managers will be able to automatically find
+/// the entrypoint function. Drivers may also expose the same function
+/// under a unique symbol so that multiple drivers can be statically
+/// linked into a single binary without any conflicts.

Review Comment:
   In what I've implemented so far, the only non-mangled symbol Rust drivers 
exposed is `AdbcDriverInit` (or whatever they implementor chooses to call it). 
So "native Rust drivers" aren't treated any different from those implemented in 
other languages. Does that answer your question? I'm not sure I fully 
understood it.
   
   If a Rust application decided to statically link an AdbcDriver that was 
packaged as a Rust crate (either because it is implemented in Rust or else we 
wrapped another implementation into a crate), they would do something like:
   
   ```rust
   use sqlite_adbc_driver::AdbcDriverInit;
   use arrow_adbc::driver_manager::AdbcDriver;
   
   let driver = AdbcDriver::load_from_init(AdbcDriverInit, ADBC_VERSION_1_0_0);
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to