diff --git a/Makefile b/Makefile index 5040081..d9756cc 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,9 @@ BUILD_FLAGS=-DEXTENSION_STATIC_BUILD=1 -DBUILD_TPCH_EXTENSION=1 -DBUILD_PARQUET_ CLIENT_FLAGS := # These flags will make DuckDB build the extension -EXTENSION_FLAGS=-DDUCKDB_OOT_EXTENSION_NAMES="odbc_scanner" -DDUCKDB_OOT_EXTENSION_ODBC_SCANNER_PATH="$(PROJ_DIR)" -DDUCKDB_OOT_EXTENSION_ODBC_SCANNER_SHOULD_LINK="TRUE" -DDUCKDB_OOT_EXTENSION_ODBC_SCANNER_INCLUDE_PATH="$(PROJ_DIR)src/include" +EXT_NAME="odbc_scanner" +EXT_NAME_UPPERCASE=$(shell echo $(EXT_NAME) | tr '[:lower:]' '[:upper:]') +EXTENSION_FLAGS=-DDUCKDB_EXTENSION_NAMES=${EXT_NAME} -DDUCKDB_EXTENSION_${EXT_NAME_UPPERCASE}_PATH="$(PROJ_DIR)" -DDUCKDB_EXTENSION_${EXT_NAME_UPPERCASE}_SHOULD_LINK="TRUE" -DDUCKDB_EXTENSION_${EXT_NAME_UPPERCASE}_LOAD_TESTS="FALSE" -DDUCKDB_EXTENSION_${EXT_NAME_UPPERCASE}_INCLUDE_PATH="$(PROJ_DIR)src/include" pull: git submodule init @@ -36,13 +38,13 @@ clean: # Main build debug: - mkdir -p build/debug && \ - cmake $(GENERATOR) $(FORCE_COLOR) $(EXTENSION_FLAGS) ${CLIENT_FLAGS} -DEXTENSION_STATIC_BUILD=1 -DCMAKE_BUILD_TYPE=Debug ${BUILD_FLAGS} -S ./duckdb/ -B build/debug && \ + mkdir -p build/debug && \ + cmake $(GENERATOR) $(FORCE_COLOR) $(EXTENSION_FLAGS) ${CLIENT_FLAGS} -DCMAKE_BUILD_TYPE=Debug ${BUILD_FLAGS} -S ./duckdb/ -B build/debug && \ cmake --build build/debug --config Debug release: mkdir -p build/release && \ - cmake $(GENERATOR) $(FORCE_COLOR) $(EXTENSION_FLAGS) ${CLIENT_FLAGS} -DEXTENSION_STATIC_BUILD=1 -DCMAKE_BUILD_TYPE=Release ${BUILD_FLAGS} -S ./duckdb/ -B build/release && \ + cmake $(GENERATOR) $(FORCE_COLOR) $(EXTENSION_FLAGS) ${CLIENT_FLAGS} -DCMAKE_BUILD_TYPE=Release ${BUILD_FLAGS} -S ./duckdb/ -B build/release && \ cmake --build build/release --config Release # Client build diff --git a/README.md b/README.md index 09efd71..7323d75 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ to the correct version of `unixodbc`. ```shell nix run .#build -./build/release/duckdb +./build/release/duckdb -unsigned ``` To use ODBC DSN's with driver paths managed by the `odbc-drivers-nix` flake run the generate nix apps. diff --git a/duckdb b/duckdb index 6b06ebe..a868375 160000 --- a/duckdb +++ b/duckdb @@ -1 +1 @@ -Subproject commit 6b06ebe56191031e57ed890f3bd3624a21c6870e +Subproject commit a868375e85b0297c2ad87b29e59463a9f9dac89e diff --git a/flake.nix b/flake.nix index 27ee8f8..c8957cb 100644 --- a/flake.nix +++ b/flake.nix @@ -30,14 +30,17 @@ stdenv = pkgs.llvmPackages_15.stdenv; # Define a helper function to conditionally include the db2-odbc-driver package as not all arch are supported - getDb2OdbcDriver = - if system == "aarch64-linux" || system == "aarch64-darwin" then null else pkgs.db2-odbc-driver {}; + isAarch64 = system == "aarch64-linux" || system == "aarch64-darwin"; + + getDb2OdbcDriver = if isAarch64 then null else pkgs.db2-odbc-driver; + getDb2OdbcDriverLibFile = if stdenv.isDarwin then "libdb2.dylib" else "libdb2.so"; + getDb2OdbcDriverPath = if isAarch64 then "" else "DB2_DRIVER_PATH=${getDb2OdbcDriver}/lib/${getDb2OdbcDriverLibFile}"; in rec { # packages exported by the flake packages = { - db2-odbc-driver = getDb2OdbcDriver; + db2-odbc-driver = if getDb2OdbcDriver != null then getDb2OdbcDriver {} else null; postgres-odbc-driver = pkgs.postgres-odbc-driver {}; }; @@ -65,7 +68,7 @@ generate-odbcinst-ini = { type = "app"; program = toString (pkgs.writeScript "generate-odbcinst-ini" '' - DB2_DRIVER_PATH=${packages.db2-odbc-driver}/lib/${if stdenv.isDarwin then "libdb2.dylib" else "libdb2.so"} \ + ${getDb2OdbcDriverPath} \ POSTGRES_DRIVER_PATH=${packages.postgres-odbc-driver}/lib/psqlodbca.so \ envsubst < ./templates/.odbcinst.ini.template > .odbcinst.ini ''); @@ -73,7 +76,7 @@ ls-odbc-driver-paths = { type = "app"; program = toString (pkgs.writeScript "ls-odbc-driver-paths" '' - echo "db2 ${packages.db2-odbc-driver}/lib/${if stdenv.isDarwin then "libdb2.dylib" else "libdb2.so"}" + ${if isAarch64 then "" else "echo \"db2 ${getDb2OdbcDriverPath}"} echo "postgres ${packages.postgres-odbc-driver}/lib/psqlodbca.so" ''); }; @@ -93,7 +96,7 @@ cmake ninja openssl - packages.db2-odbc-driver + getDb2OdbcDriver packages.postgres-odbc-driver ] )}:$PATH" @@ -118,7 +121,7 @@ cmake ninja openssl - packages.db2-odbc-driver + getDb2OdbcDriver packages.postgres-odbc-driver ] )}:$PATH" @@ -152,7 +155,7 @@ pkgs.unixODBC # psql cli pkgs.postgresql_15 - packages.db2-odbc-driver + getDb2OdbcDriver packages.postgres-odbc-driver ]; }; diff --git a/src/include/odbc_scanner_extension.hpp b/src/include/odbc_scanner_extension.hpp index ef4628f..887a099 100644 --- a/src/include/odbc_scanner_extension.hpp +++ b/src/include/odbc_scanner_extension.hpp @@ -3,7 +3,7 @@ #include "duckdb.hpp" namespace duckdb { -class Odbc_scannerExtension : public Extension { +class OdbcScannerExtension : public Extension { public: void Load(DuckDB &db) override; std::string Name() override; diff --git a/src/odbc_scanner_extension.cpp b/src/odbc_scanner_extension.cpp index 3b2ce7d..d2d6448 100644 --- a/src/odbc_scanner_extension.cpp +++ b/src/odbc_scanner_extension.cpp @@ -29,8 +29,8 @@ static void LoadInternal(DatabaseInstance &instance) { con.Commit(); } -void Odbc_scannerExtension::Load(DuckDB &db) { LoadInternal(*db.instance); } -std::string Odbc_scannerExtension::Name() { return "odbc_scanner"; } +void OdbcScannerExtension::Load(DuckDB &db) { LoadInternal(*db.instance); } +std::string OdbcScannerExtension::Name() { return "odbc_scanner"; } } // namespace duckdb extern "C" {