Skip to content

Conversation

@jbonofre
Copy link
Member

@jbonofre jbonofre commented Apr 2, 2024

Rationale for this change

An ODBC driver uses the Open Database Connectivity (ODBC) interface that allow applications to access data in DBMS like environment using SQL.
As Arrow Flight provides JDBC and ADBC drivers, similarly Arrow Flight can provide ODBC driver.

What changes are included in this PR?

This PR adds an ODBC driver implementation.

Are these changes tested?

This ODBC driver is coming from a production system (SGA) that is tested/ran for a while.

Are there any user-facing changes?

No change, but new user option to use Arrow Flight.

@jbonofre jbonofre requested a review from lidavidm as a code owner April 2, 2024 05:59
@jbonofre jbonofre marked this pull request as draft April 2, 2024 05:59
@github-actions
Copy link

github-actions bot commented Apr 2, 2024

Thanks for opening a pull request!

If this is not a minor PR. Could you open an issue for this pull request on GitHub? https://github.com/apache/arrow/issues/new/choose

Opening GitHub issues ahead of time contributes to the Openness of the Apache Arrow project.

Then could you also rename the pull request title in the following format?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

In the case of PARQUET issues on JIRA the title also supports:

PARQUET-${JIRA_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

See also:

@jbonofre
Copy link
Member Author

jbonofre commented Apr 2, 2024

@ianmcook @lidavidm @assignUser as discussed during the community meetings, here's the ODBC driver PR draft.

This PR includes:

  • sources files with legal fixes (I'm checking whoami source dual license/MIT, eventually alternatives)
  • build convenient files (like Brewfile)

I'm still working on:

  • finalize Arrow update (the original code was using Arrow 9.x)
  • finalize the build and cleanup the CMakeLists.txt files

I will also create a GH Issue to track this addition.

Copy link
Member

@jduo jduo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this @jbonofre !

Some of the code in odbc_impl should be updated to use the same naming conventions as the arrow project (eg ODBCConnection -> odbc_connection).

This covers the flightsql-odbc repo, but there is additional code needed for the ODBC entry points to build a functional driver. That was in warpdrive, but that code isn't Apache-compatible.

Need to add the license for whereami to the Arrow project itself.

Are the separate brewfile and vcpkg.json necessary or can this utilize the ones already at the top-level?

Should the top-level CMakeLists now include the driver build? Or is that on hold as part of the donation process?

@github-actions github-actions bot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Apr 4, 2024
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@assignUser
Copy link
Member

finalize Arrow update (the original code was using Arrow 9.x)

I fear I can't really help on that front but once that's done I'd be happy to continue working on the CMake!

@jbonofre
Copy link
Member Author

jbonofre commented Apr 5, 2024

Hi @jduo !

Some of the code in odbc_impl should be updated to use the same naming conventions as the arrow project (eg ODBCConnection -> odbc_connection).

Yes, I'm doing that (that's why the PR is still a draft).

This covers the flightsql-odbc repo, but there is additional code needed for the ODBC entry points to build a functional driver. That was in warpdrive, but that code isn't Apache-compatible.

Yes, locally I fixed/updated it, but I'm looking for alternative.

Need to add the license for whereami to the Arrow project itself.

I'm checking if we can't find an alternative, else I will update NOTICE file.

Are the separate brewfile and vcpkg.json necessary or can this utilize the ones already at the top-level?

Yes, that's the plan, I'm doing in two steps: fixing the build and integrating in the Arrow ecosystem.

Should the top-level CMakeLists now include the driver build? Or is that on hold as part of the donation process?

Agree, same the same as for brewfile/vcpkg.json: I'm doing that in two steps.

I will push new changes to this PR and "remove" the draft state as soon as it's clean to review (build ok, etc).

@jbonofre
Copy link
Member Author

jbonofre commented Apr 5, 2024

finalize Arrow update (the original code was using Arrow 9.x)

I fear I can't really help on that front but once that's done I'd be happy to continue working on the CMake!

No worries, I'm working on it :) I will keep you posted when good for review (when I will remove the draft flag).

@jduo
Copy link
Member

jduo commented Apr 10, 2024

This covers the flightsql-odbc repo, but there is additional code needed for the ODBC entry points to build a functional driver. That was in warpdrive, but that code isn't Apache-compatible.

Yes, locally I fixed/updated it, but I'm looking for alternative.

There was another group that did some work to build a full driver from flightsql-odbc. I haven't seen it though, but they've mentioned it here:
#30622 (comment)

@lidavidm
Copy link
Member

lidavidm commented Jul 2, 2024

Following up here - do you want any help?

@jduo
Copy link
Member

jduo commented Jul 16, 2024

@jbonofre checking in on this. Were you still continuing work on this? Did you need help?
Thanks

@jbonofre
Copy link
Member Author

@jduo yes, I'm back on it (sorry I was busy on Iceberg and ASF stuff). Let me do a new rebase/build/update and I will ping you for review/help.

Thanks ! And sorry again for delay :/

@jbonofre
Copy link
Member Author

jbonofre commented Sep 3, 2024

@lidavidm @jduo hey guys. I'm very very sorry to have been quiet for long. Between vacation and ASF tasks, I was not able to be active enough on Arrow. I'm now back and resuming my work on Arrow, including ODBC.

@lidavidm
Copy link
Member

lidavidm commented Sep 3, 2024

No worries! Glad to see you back around :)

@rpourzand
Copy link

Hey @jbonofre we're excited about the AFS ODBC driver! We want to start using it as soon as we can for a project we're working on and was wondering whether you had a sense of timing where it might be ready to be in someone's hands for development. We would be happy to be early adopters :)

@jduo
Copy link
Member

jduo commented Sep 4, 2024

Thanks @jbonofre . We're around if you need assistance moving this forward.

@jduo
Copy link
Member

jduo commented Oct 1, 2024

Hi @jbonofre , just checking in on if we can help to move this forward.

@jbonofre
Copy link
Member Author

jbonofre commented Oct 2, 2024

Hey @jduo
I started the recase. I will push this.
Would you have time for a Quick sync ?
Thanks !

@aiguofer
Copy link
Contributor

aiguofer commented Oct 2, 2024

I'm curious, does this version of the driver allow passing arbitrary parameters? I tried using the Dremio ODBC driver but it can't seem to be able to set arbitrary parameters. I have the following in a custom PowerBI connector:

        // This record contains all of the connection string properties we
        // will set for this ODBC driver. The 'Driver' field is required for
        // all ODBC connections. Other properties will vary between ODBC drivers,
        // but generally take Server and Database properties. Note that
        // credential related properties will be set separately.
        ConnectionString = [
            Driver = "Arrow Flight SQL ODBC Driver",
            host = server,
            port = 443,
            environmentId = "200532"
        ],

But i get the following error: ODBC: ERROR [HY000] [Apache Arrow][Flight SQL] (100) Flight returned invalid argument error, with message: environmentId is a required connection parameter

For our use-case we need to be able to pass various parameters as extra headers, which is supported by both ADBC and JDBC.

@jduo
Copy link
Member

jduo commented Oct 2, 2024

I'm curious, does this version of the driver allow passing arbitrary parameters? I tried using the Dremio ODBC driver but it can't seem to be able to set arbitrary parameters. I have the following in a custom PowerBI connector:

        // This record contains all of the connection string properties we
        // will set for this ODBC driver. The 'Driver' field is required for
        // all ODBC connections. Other properties will vary between ODBC drivers,
        // but generally take Server and Database properties. Note that
        // credential related properties will be set separately.
        ConnectionString = [
            Driver = "Arrow Flight SQL ODBC Driver",
            host = server,
            port = 443,
            environmentId = "200532"
        ],

But i get the following error: ODBC: ERROR [HY000] [Apache Arrow][Flight SQL] (100) Flight returned invalid argument error, with message: environmentId is a required connection parameter

For our use-case we need to be able to pass various parameters as extra headers, which is supported by both ADBC and JDBC.

Last I tried, it supported this. I believe it lower-cases headers though (the C++ grpc client itself requires this) -- is your server looking for environmentId case-insensitively?

@jduo
Copy link
Member

jduo commented Oct 2, 2024

Hey @jduo I started the recase. I will push this. Would you have time for a Quick sync ? Thanks !

Hi @jbonofre , yes we can have a chat. Will send meeting info offline.

@aiguofer
Copy link
Contributor

aiguofer commented Oct 2, 2024

Last I tried, it supported this. I believe it lower-cases headers though (the C++ grpc client itself requires this) -- is your server looking for environmentId case-insensitively?

Yeah it's case-insensitive. I also tried setting environmentid in all lower-case and still get the same error

@aiguofer
Copy link
Contributor

aiguofer commented Oct 2, 2024

Interesting, I do see:

TEST(PopulateCallOptionsTest, GenericOption) {
  FlightSqlConnection connection(odbcabstraction::V_3);
  connection.SetClosed(false);

  Connection::ConnPropertyMap properties;
  properties["Foo"] = "Bar";
  auto options = connection.PopulateCallOptions(properties);
  auto headers = options.headers;
  ASSERT_EQ(1, headers.size());

  // Header name must be lower-case because gRPC will crash if it is not lower-case.
  ASSERT_EQ("foo", headers[0].first);

  // Header value should preserve case.
  ASSERT_EQ("Bar", headers[0].second);
}

Maybe there's a bug with call options not getting set correctly for the HANDSHAKE request? I remember that being an issue with the JDBC driver: #33946

@CurtHagenlocher
Copy link
Contributor

Last I tried, it supported this. I believe it lower-cases headers though (the C++ grpc client itself requires this)

This is actually part of the HTTP/2 spec.

alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Sep 25, 2025
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Sep 25, 2025
Addresses comment apache#40939 (comment)
* add include cstring
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Sep 29, 2025
* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Sep 29, 2025
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Oct 2, 2025
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Oct 2, 2025
Addresses comment apache#40939 (comment)
Replace boost::optional with std::optional in ODBC codebase
justing-bq added a commit to Bit-Quill/arrow that referenced this pull request Oct 3, 2025
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/flight_sql/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_ssl_config.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/add_property_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/common.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/add_property_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/window.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_descriptor.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/utils.cc
alinaliBQ pushed a commit to Bit-Quill/arrow that referenced this pull request Oct 7, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/flight_sql/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_ssl_config.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/add_property_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/common.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/add_property_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/window.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_descriptor.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/utils.cc

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch
justing-bq added a commit to Bit-Quill/arrow that referenced this pull request Oct 9, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/flight_sql/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_ssl_config.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/add_property_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/common.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/add_property_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/window.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_descriptor.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/utils.cc

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc.def
^	cpp/src/arrow/flight/sql/odbc/odbc_api.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/main.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/address_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/diagnostics.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/parse_table_types_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_trust_store.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util_test.cc
justing-bq added a commit to Bit-Quill/arrow that referenced this pull request Oct 10, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/flight_sql/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_ssl_config.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/add_property_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/common.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/add_property_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/window.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_descriptor.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/utils.cc

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc.def
^	cpp/src/arrow/flight/sql/odbc/odbc_api.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/main.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/address_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/diagnostics.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/parse_table_types_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_trust_store.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util_test.cc
alinaliBQ pushed a commit to Bit-Quill/arrow that referenced this pull request Oct 16, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/flight_sql/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_ssl_config.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/add_property_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.cc
^	cpp/src/arrow/flight/sql/odbc/flight_sql/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/common.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/add_property_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/custom_window.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/window.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_descriptor.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/include/odbcabstraction/utils.h
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbcabstraction/utils.cc

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

^ Conflicts:
^	cpp/src/arrow/flight/sql/odbc/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc.def
^	cpp/src/arrow/flight/sql/odbc/odbc_api.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/CMakeLists.txt
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/binary_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/boolean_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/date_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/decimal_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/main.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/primitive_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/string_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/time_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/timestamp_array_accessor_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/accessors/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/address_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/diagnostics.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_auth_method.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_driver.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_tables_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_get_type_info_reader.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_accessors.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_column.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_columns.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_tables.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_statement_get_type_info.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_stream_chunk_buffer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/get_info_cache.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_descriptor.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_environment.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_handle.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/parse_table_types_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/record_batch_transformer_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/result_set_metadata.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_dsn.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_trust_store.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/types.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util_test.cc

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions
justing-bq added a commit to Bit-Quill/arrow that referenced this pull request Oct 23, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures
incrypto32 pushed a commit to incrypto32/arrow that referenced this pull request Oct 23, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures
justing-bq added a commit to Bit-Quill/arrow that referenced this pull request Oct 23, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures
alinaliBQ pushed a commit to Bit-Quill/arrow that referenced this pull request Oct 28, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures

Resolve ODBC CI Build Errors

* Fix `ConfigDSNW` not found error

* Fix `TestFreeNullHandles` test

`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.

Define New Base Test Fixtures

Skip tests without connecting/disconnecting

Address general test code review comments

* Use RAII helper for allocating and freeing env/conn handles

Avoids duplicated code

Move test helper functions to anonymous namespace

Add `[[nodiscard]]` for ODBC APIs

Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186

Remove `using List=` in test suite definitions

Use static_cast for `SQLWCHAR` in type info test

Use static_cast for `SQLWCHAR` in tables test

* use mutable arrays for places where characters cannot be const

Use static_cast for `SQLWCHAR` in columns test

Update comment

Use static_cast for `SQLWCHAR` in SQLGetInfo test

* Address Justin's comments

* Add fix for skipping the allocation of handles
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Oct 29, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures

Resolve ODBC CI Build Errors

* Fix `ConfigDSNW` not found error

* Fix `TestFreeNullHandles` test

`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.

Define New Base Test Fixtures

Skip tests without connecting/disconnecting

Address general test code review comments

* Use RAII helper for allocating and freeing env/conn handles

Avoids duplicated code

Move test helper functions to anonymous namespace

Add `[[nodiscard]]` for ODBC APIs

Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186

Remove `using List=` in test suite definitions

Use static_cast for `SQLWCHAR` in type info test

Use static_cast for `SQLWCHAR` in tables test

* use mutable arrays for places where characters cannot be const

Use static_cast for `SQLWCHAR` in columns test

Update comment

Use static_cast for `SQLWCHAR` in SQLGetInfo test

* Address Justin's comments

* Add fix for skipping the allocation of handles
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Oct 29, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures

Resolve ODBC CI Build Errors

* Fix `ConfigDSNW` not found error

* Fix `TestFreeNullHandles` test

`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.

Define New Base Test Fixtures

Skip tests without connecting/disconnecting

Address general test code review comments

* Use RAII helper for allocating and freeing env/conn handles

Avoids duplicated code

Move test helper functions to anonymous namespace

Add `[[nodiscard]]` for ODBC APIs

Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186

Remove `using List=` in test suite definitions

Use static_cast for `SQLWCHAR` in type info test

Use static_cast for `SQLWCHAR` in tables test

* use mutable arrays for places where characters cannot be const

Use static_cast for `SQLWCHAR` in columns test

Update comment

Use static_cast for `SQLWCHAR` in SQLGetInfo test

* Address Justin's comments

* Add fix for skipping the allocation of handles
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Nov 8, 2025
Addresses comment apache#40939 (comment)
Replace boost::optional with std::optional in ODBC codebase

apache#48084
justing-bq pushed a commit to Bit-Quill/arrow that referenced this pull request Nov 12, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures

Resolve ODBC CI Build Errors

* Fix `ConfigDSNW` not found error

* Fix `TestFreeNullHandles` test

`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.

Define New Base Test Fixtures

Skip tests without connecting/disconnecting

Address general test code review comments

* Use RAII helper for allocating and freeing env/conn handles

Avoids duplicated code

Move test helper functions to anonymous namespace

Add `[[nodiscard]]` for ODBC APIs

Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186

Remove `using List=` in test suite definitions

Use static_cast for `SQLWCHAR` in type info test

Use static_cast for `SQLWCHAR` in tables test

* use mutable arrays for places where characters cannot be const

Use static_cast for `SQLWCHAR` in columns test

Update comment

Use static_cast for `SQLWCHAR` in SQLGetInfo test

* Address Justin's comments

* Add fix for skipping the allocation of handles
justing-bq pushed a commit to Bit-Quill/arrow that referenced this pull request Nov 14, 2025
Co-authored-by: alinalibq <[email protected]>
Co-authored-by: rscales <[email protected]>
Co-authored-by: justing-bq <[email protected]>
Co-authored-by: vic-tsang <[email protected]>

ODBC commits squashed into 1 to make rebasing to main easier.

 Add initial framework for odbc dll

- Add ARROW_FLIGHT_SQL_ODBC option. If we set `ARROW_FLIGHT_SQL_ODBC=ON`, the flightsql odbc folder will be built
- Add odbc api layer for entry_point.cc
- builds odbc dll file, with ODBC APIs exported in odbc.def

Address James' comments

Fix `odbcabstraction` build errors and partially fix `flightsql_odbc` errors

Fix boost-variant not found error
- Adding dependencies from odbc/vcpkg.json to cpp/vcpkg.json

- Fix whereami.cc and .h dependency; ported lates code

Update whereami.cc

- use `long` instead of `int64`. Fixed namespace issues.

- PR CI fix: Add `parquet-testing` back

Partial build fix for `flight_sql` folder

- Replaced `namespace arrow` and `namespace odbcabstraction` with `using namespace ...`

- fix flight_sql_connection.cc

Fix `util::nullopt` to use `std::nullopt`

- fix std::optional

- fix BufferReader

- Fix GetSchema

- fix json_converter.cc

- partial fix configuration.h

-  partial fix get_info_cache.cc

- Fix winsock build error

- Comment out `flight_sql` files that cannot build
   - Comment out configuration and unit tests
   - Comment out get info cache and system trust store

Create initial odbc tests folder

Implement SQLAllocEnv

Fix cmake build

Implement SQLFreeEnv

Fix rest of build errors from `flightsql-odbc`

- Fix get info errors

- Fix for configuration window

  - added odbcinst library

- Fix system trust store

- unit test fixes

   - Add dependency of ARROW_COMPUTE. `arrow/compute/api.h` is used in
     `flight_sql`. Adding `ARROW_COMPUTE=ON` during build fixed run time unit
     tests failures.

Implement SQLAllocConnect and SQLFreeConnect

Fix build issue from static flight sql driver

Lint and code style fixes

Re-add deleted submodule parquet-testing

clang-format lint fix

cpplint lint fix

Exclude whereami in rat exclude list

C++/CLI lint fix

Update parquet-testing to match commit from `main`

Address Kou's comments

ODBC directory lint fixes

Catching the lint fixes outside of `flightsql-odbc` code

Fix build warnings that get treated as error

Implement SQLSetEnvAttr and SQLGetEnvAttr

Implement use of ExecuteWithDiagnostics

Doxygen Error Fixes and Address comments from Kou and James

Address comments from Kou

- Updates License.txt
- Update cmake toolchain
- Move whereami to `vendored`
- Use string_view instead of NOLINT std::string

Remove `whereami.cc` from arrow util build

We are building whereami.cc as part of odbc

Fix include headers to replace <> with ""

Address comments from James

Implement SQLGetDiagField

SQLDriverConnect, SQLConnect and SQLDisconnect

Implement stubs for SQLGetInfo, SQLGetDiagField and SQLGetDiagRec

Separate RegisterDsn and UnregisterDsn from windows build

Update code to save driver value from connection string

Add ReadMes for ODBC and tests

Fix test issues with string_view

Address code reviews

Update entry_points.cc to fix build issue

Remove Dremio references

Use emplace properly

Address comment from Rob and add SQLDisconnect test case

Add odbc.def and cmd file to rat_exclude

Nit - remove duplicate lines

Accidentally committed the change during git rebase

Nit - remove usage of nullptr

DSN window implementation

Add licenses to `.cmd` and `.def` files

Implement SQLGetDiagRec

Build ODBC in Windows Workflow

Tests are skipped for now.

Updates for SQLGetDiagFieldW

Enable Driver Logging

Add todo to update logging system later

Add logs

Implement ODBC API with debug logging

Enable mock test

* Add todo for noauth validation

* mock server with token auth

Add tests

* run same test with both modes

* Enable ODBC tests in workflow

* Switch current test cases to use FlightSQLODBCTestBase

So the tests can be skipped when `TEST_CONNECT_STR` is not set.

* Change tests to run on both mock and remote modes

Wrap usage of TEST_CONNECT_STR where possible

* Rename test fixtures and make connection string functions virtual

* Fix lint issue

* Attempt to enable ODBC build on Windows platforms

* Attempt to fix clang64 and MinGW errors

* Attempt to register ODBC

* Address James' comments

Use constant string for token

* use ServerMiddleware to validate token

Fix connection issues to DBT Labs

PopulateCallOptions before making a connection

Fix dsn window bug with advance properties

Fix seg fault issue from empty string

Implement SQLAllocStmt

Follow-up DBT Labs connection fix

Implement SQLGetDiag Rec and Field for statement

Unicode support for DSN ODBC APIs

* Let compiler append `W` to ODBC APIs where applicable.

Initialize Kernel functions

As per changes from apache#46261, we need to initialize Kernel library explicitly to get the functions registered

Implement SQLSetConnectAttr and SQLGetConnectAttr

ODBC Test Segfault Fix

* Move `connection_test.cc` to last in `CMakeLists.txt`, this resolves the seg fault. The seg fault was not reproducible on my local environment, even when I use the msys2 shell.
* Rename test executable to flight_sql_odbc_test

SQLExecDirect implementation

* SQLGetStmtAttr stub implementation

* Fix missing break statement in SQLGetDiagRec

* Run ShutdownProtobufLibrary as part of test environment

* Add comment for apacheGH-46889

* Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

Implement SQLGetInfo

SQLGetInfo Workflow Fixes

SQLFetch & SQLGetData Implementation

SQLGetStmtAttr stub implementation

Stub call for SQLGetStmtAttr

Enable statement handle allocation

Implement SQLExecDirect - test hang issue

Update odbc_api.cc

Run `ShutdownProtobufLibrary` after all ODBC tests

Resolves test hanging problem

Fix missing break statement in SQLGetDiagRec

Add tests

Lint fixes

Run ShutdownProtobufLibrary as part of test environment

Add debug messages

Draft code

Remove drafts

Add comment

Add comment for apacheGH-46889

Update statement test headers

Pass call options to executed prepared statement

`call_options_` contains the authentication token which is needed

SQLFetch & SQLGetData initial impl

EVERYTHING before this commit is for SQLExecDirect

SQLFetch and SQLGetData TestSQLExecDirectSimpleQuery test

Make GetData() return SQLRETURN

`TestSQLExecDirectDataQuery` for remote and mock servers

Remove unneeded test case

Add more data types

* Add SQL_GUID in getCTypeForSQLType

* Add data types in query

* Add checks for columns 1 to 25

* Update statement_test.cc

Add varbinary test

* Implement SQLNumResultCols

Will leave tests for later

* Implement SQLRowCount

* Implement SQLMoreResults

* Work on date retrieval fix

The `TestSQLExecDirectDataQuery` checks for date is not working.

* Fix date retrieval error by importing fix from Paul

* imported fix from dremio/flightsql-odbc@d44d862, an Apache-Licensed repository

* Add more checks for get data

* Add more tests

* Continue work on float truncation test

* Disable float truncation test

* Address comments from James

- do not return errors for invalid rowCountPtr and columnCountPtr
- add static cast for columnCount
- Add tests with SQL_C_DEFAULT as target type
- Add test checks for indicator
- Fix SQL_NUMERIC, SQL_BIT, SQL_FLOAT target type

* Fix build issues in CI

* More fix for CI

* Add test for invalid buffer length

SQLPrepare & SQLExecute Implementation

* Add tests
* Address comments from Rob

Code Style fixes

* Move ifdefs outside of test cases

* use `stmt`

* Move logs to first line

* fix test for `SQL_DRIVER_HSTMT`

* Use camel case for tests

Implement SQLGetStmtAttr and SQLSetStmtAttr

SQLBindCol Implementation

* SQL_UNBIND implementation + tests

* Add tests for `SQL_ATTR_ROW_ARRAY_SIZE`

* Add check for `SQL_ATTR_ROWS_FETCHED_PTR`

Enable TestCloseConnectionWithOpenStatement test case

SQLFetchScroll Implementation

* Add checks for SQL_ATTR_ROWS_FETCHED_PTR

* SQLFetchScroll is supposed to return the number of rows fetched using SQL_ATTR_ROWS_FETCHED_PTR

SQLExtendedFetch Implementation

* Implement rowCountPtr and rowStatusArray for SQLExtendedFetch

* Add tests for SQLExtendedFetch

* `SQLExtendedFetch` doesn't return `SQL_SUCCESS_WITH_INFO` for error state 22002.

* Add tests for `SQL_ROWSET_SIZE`

* Address comments from James

apacheGH-46584 Iterate endpoint

* use suggestion from James for one-liner change to return `Status::OK` directly

* fix for iterating endpoints, it is based on JDBC's fix for the same bug

* save value of `FlightClientOptions`

* Use `TestFlightServer`

Add `arrow_flight_sql_shared` to enable usages for `TestFlightServer`

* Fix build errors from missing `gmock`

* Add checks for array data

Update flight_sql_stream_chunk_buffer_test.cc

Add `FlightStreamChunkBufferTest` unit test

Draft test with `FlightSQLODBCMockEndpointTestBase`

* Reference apacheGH-47117 and Clean up code

* Add driver and DSN to built-in properties to not pass driver/dsn as attributes to server

* Allow `=` in values inside connection strings, fixes connectivity problems

* Address comments from Rob

SQLColumns Implementation

* Initial impl for SQLColumns

* Add test for SQLColumns

* Add columns test with all supported column types

- mock server doesn't support schema

* Address comments from James

- Test different data type return value for SQLColumns
- Add todo comment for SQLDescribeCol tests

---------

Co-authored-by: rscales <[email protected]>

Fix bug of DSN not read properly

* Fix reading DSN bug

Use a simpler, more robust way to load the DSN

SQLColAttribute implementation

* SQLColAttribute initial impl

* Switch to use `GetAttributeSQLWCHAR` to be unicode-compatible

* Add SQLColAttribute tests and fix bugs in `flightsql-odbc` impl

* Fixed bug with incorrect column count. It was returning column count + 1.
* Fixed bug with incorrect numPrecRadix. It was returning SQL_NO_TOTAL (maps to -4) for non-numeric columns, but the correct value is 0.
* Fixed bug with unsigned column to return true for unsigned columns (non-numeric columns or unsigned numeric columns) and false for signed columns (numeric columns)
* Fixed bug with incorrect non-concise data type return value for date time type types. The correct return is SQL_DATETIME for all date time types

* Address comments from James

* use const for `ConvertToWString`
* add nullptr check in odbc_api.cc layer
* Add support for `SQL_COLUMN_LENGTH`, `SQL_COLUMN_PRECISION`, and `SQL_COLUMN_SCALE`. The driver will return the same values for ODBC2 and ODBC3.
* Add tests for ODBC v2 SQLColAttributes values
* I converted tests that can be run on remote servers where possible

* Address comment from Rob

Implement SQLTables

Use C++ 20 standard for ODBC

* Add support for building with C++20

* Upgrade spdlogs version as an attempt to fix build issues

* Fix issue of missing unique_ptr definition

Add tests for SQLMoreResults

Implement SQLNativeSql

Add diagnostic records

* remove `SQLErrors`, as the driver manager is supposed to map `SQLErrors` to `SQLGetDiagRec`

Implement tests for SQLNumResultCols

SQLCloseCursor Implementation

* fix error state to return the correct state 24000.

* add tests for SQLCloseCursor and SQLFreeStmt(SQL_CLOSE)

Add SQLColumns and SQLColAttribute tests with nullptr

* Modify SQLTables test to run on both mock and remote
* reorder error msg alphabetically

Implement tests for SQLRowCount

Fix merge conflicts

Adjust searchable return value

based on apacheGH-46920 fix

Fix `getCTypeForSQLType` return for interval types

- Fix `getCTypeForSQLType` function to return the correct `C type` for interval SQL data types. Previously the function was checking for interval `C type` and returning interval `SQL type`, which was the opposite of the intended functionality.

SQLGetTypeInfo implementation

* Add tests for SQLGetTypeInfo

* fix bug of createParams returning empty string instead of null
* fix bug of non-concise data type being returned for datetime/interval
* fix bug of longvarchar not converted to wlongvarchar when driver has unicode enabled

* Address comments from James and add checks

*  test SQL_ALL_TYPES in ODBC 2.x.
*  test SQL_TYPE_* in ODBC 2.x, the driver manager reports invalid data type error.
*  test SQL_* datetime in ODBC 3.x for backwards compatibility.
*  add check for valid/invalid data type.

Fix segfault issue from empty metadata

* Use empty map in bug fix

* Address comments from James

Implement SQLDescribeCol

Add SQLError Tests

* add test to free null handles. Without handle value initialization, segfault error was seen

Move `SQLGetDiagField` and `SQLGetDiagRec` tests to `errors_test.cc`

* Address comments from James

* Add ODBC Ver 2 tests

* update test name to indicate if error handling is from driver manager.
* add tests for warnings.

* fix lint errors.
* remove SQL_ATTR_APP_ROW_DESC that is not applicable to Environment Attribute.

Add tests for SQLGetFunctions

* Using `SQL_FUNC_EXISTS` macro fixed the issue of `api_exists` not read correctly

* Fix SQLGetTypeInfo naming for ODBC ver 2 tests

* Add more tests

Add unsupported API checks.
Add `TestSQLGetFunctionsODBCVer2`.
Add `TestSQLGetFunctionsCheckSingleAPI`.

* Update reset value

* Add SQLDescribeCol function check

Add additional SQLDescribeCol test cases

Add Descriptor support in SQLAllocHandle and SQLFreeHandle

* Descriptor allocation initial impl

* Add descriptor handle tests

* Add diagnostic error test for descriptor handle

* the error is from driver manager as our driver doesn't have descriptor-specific APIs implemented yet

* Add SQLGetDescField test from driver manager

* Add doxygen doc comment

Fix connection issues servers that require data in handshake

* revert back to passing empty string in handshake

Fix bug of system trust store not loaded properly

* Bug: system trust store has default value of "true" regardless of "encryption" value.
* But if encryption is set to false, system trust store cannot be used, so system trust store should be saved as false if user does not enable encryption.
* It may confuse the user if they see encryption is set to false but system trust store is set to true. In this case, the driver will not do system trust store verification. The DSN window should reflect this accurately.

CPack ODBC Windows msi installer

Add ARROW_FLIGHT_SQL_ODBC_INSTALLER environment variable to enable creation of Windows installer.

* Use CPack + WiX to create a `msi` installer.
* run command `cpack` under the build directory to generate the installer.

Register ODBC Driver on Windows in installer

* In `wxs`, cannot use `package`, need to use `fragment` instead

* Use component as feature will automatically be generated

* Set Patch version + add installer instructions

Use Arrow logo banner

* replaces default banner with Arrow logo banner

Indicate Driver Company and Version on Driver Manager

* use versioninfo.rc.in template

* use `1 VERSIONINFO` for it to work properly

* Set version variables

* Add `.rc` to gitignore

* Add `@` variables to rc template

Return nameLengthPtr value as length in characters

Allow spaces while parsing Table Type

mac changes

added changes to build in MacOS

Enable ODBC build on Windows Glib & Ruby workflows

* Fix `boost::get` issue on GLib workflow

* Fix GLib build issue with conflicts

Compile entry_points.cc before odbc_api.cc due to conflict from sql.h and flight/types.h.

Fix build warnings treated as error on Windows

SQLDescribeCol expects `bufCharLen` to be of type `SQLSMALLINT`, so build warnings occur when `bufCharLen` is set to `SQLINTEGER`.

Add more types for Array Conversion

Set column attribute SQL_DESC_TYPE_NAME

[Refactor] Remove reference of `Configuration` in odbc_connection.cc

Remove reference of `Configuration` in odbc_connection.cc which is in library `odbcabstraction`. The reasoning is that `Configuration` is in `arrow_odbc_spi_impl` and this is a library that `odbcabstraction` depends on. I moved the logic for reading DSN values into `odbc_api.cc` instead, since that is a place that will result in no conflicts. The ODBC driver now does not save the DSN value in the connection string if the DSN value is put after Driver value.

* Address comments from James

Simply logic to check for first key value pair only

Add TODO for non-UTC time zone support

* Currently, the driver only supports UTC time zone

Replace `spdlogs` with Arrow's Internal Logging

* Add logging README

* register kernel function conditionally

   * Resolves errors of kernel function already registered

Logging files are not supported since GLOG is not enabled on Windows in Arrow repo. We can work + test on log file support on macOS/Linux phase

Remove  `RUN_ALL_TESTS` as they are not needed

Previously, tests on Windows were not being run due to apache#47434. So we added  `RUN_ALL_TESTS`  as a workaround in early May, before apache#47434 was raised.
Now that apache#47434 is resolved, we can remove  `RUN_ALL_TESTS` as they are not needed.

Other changes:
* Renamed `arrow_odbc_spi_impl_test` to `odbc_spi_impl_test` so the test executable will be  `arrow_odbc_spi_impl_test.exe` instead of  `arrow_arrow_odbc_spi_impl_test.exe`

Fix Function & Variable Naming

Fix member variable naming

Address code review comments for Arrow#40939

* Reword comment on null check

Addresses comment apache#40939 (comment)

* Use `std::memcpy` instead of `memcpy`

Addresses comment apache#40939 (comment)
* add include cstring

* Remove warpdrive mentions

* Fix lint

* Address Justin's comments

Combine utils and define utils namespace

Use arrow::flight::sql::odbc namespace

Update namespaces driver::flight_sql and driver::odbcabstraction to arrow::flight::sql::odbc.

Fix seg fault from register log

PR to keep apache-odbc in sync with arrow main branch.

I found that, if the driver registers logs before compute kernel registration, segfault somehow occurs at when register kernel function is being used. I am not sure the root cause, but registering the logs after compute kernel registration seems to resolve the issue.

Refactor odbcabstraction and odbc_impl

flight_sql is renamed to odbc_impl. The files inside odbcabstraction have been moved to odbc_impl and odbcabstraction is removed.

Replace boost::variant with std::variant

* Remove `boost-optional` and `boost-variant` dependencies from vcpkg.json

* Replace boost::variant with std::variant

Fix EXPECT_EQ() to have expected on the left and actual on the right

Code style naming convention

Remove underscores in test names

Sync arrow_flight_testing changes from Arrow::main branch

Fix test failure due to typo

Fix `FlightSQLODBCRemoteTestBase.TestSQLExecDirectDataQueryDefaultType` test failure due to typo
The precision should be 38 in the original code. I think it got changed to 0 by accident somewhere.

Disable tests with `DISABLED_`

* Enable `TestSQLGetInfoDriverHdesc`

We missed this test before, enabling the test now

* Disable tests with `DISABLED_`

Fix test assertions

Define Test Fixtures

* Connect/disconnect in SetUp/TearDown
* Define Test Fixtures

Resolve ODBC CI Build Errors

* Fix `ConfigDSNW` not found error

* Fix `TestFreeNullHandles` test

`ConnectionTest` sets up the handles, so the `this->...` handles will not be null at beginning of test.

Define New Base Test Fixtures

Skip tests without connecting/disconnecting

Address general test code review comments

* Use RAII helper for allocating and freeing env/conn handles

Avoids duplicated code

Move test helper functions to anonymous namespace

Add `[[nodiscard]]` for ODBC APIs

Addresses community comment:
https://github.com/apache/arrow/pull/47763/files#r2450014186

Remove `using List=` in test suite definitions

Use static_cast for `SQLWCHAR` in type info test

Use static_cast for `SQLWCHAR` in tables test

* use mutable arrays for places where characters cannot be const

Use static_cast for `SQLWCHAR` in columns test

Update comment

Use static_cast for `SQLWCHAR` in SQLGetInfo test

* Address Justin's comments

* Add fix for skipping the allocation of handles

^ Conflicts:
^	.github/workflows/cpp.yml
^	cpp/src/arrow/flight/sql/odbc/odbc_api.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/attribute_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/config/configuration.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/encoding_utils.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/flight_sql_connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/main.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/spi/connection.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/system_dsn.h
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/ui/dsn_configuration_window.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.cc
^	cpp/src/arrow/flight/sql/odbc/odbc_impl/util.h
^	cpp/src/arrow/flight/sql/odbc/tests/connection_test.cc
^	cpp/src/arrow/flight/sql/odbc/tests/odbc_test_suite.cc
alinaliBQ added a commit to Bit-Quill/arrow that referenced this pull request Nov 14, 2025
Addresses comment apache#40939 (comment)
Replace boost::optional with std::optional in ODBC codebase

apache#48084

Fix lint
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.