From 365ee4c3b0389e904054e651cbee693784b19c86 Mon Sep 17 00:00:00 2001 From: Chris Nuernberger Date: Tue, 27 Feb 2024 07:04:39 -0700 Subject: [PATCH] Adding ability to pass in the library instance. --- src/tmducken/duckdb.clj | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/tmducken/duckdb.clj b/src/tmducken/duckdb.clj index 3817d52..facdfeb 100644 --- a/src/tmducken/duckdb.clj +++ b/src/tmducken/duckdb.clj @@ -99,22 +99,26 @@ _unnamed [5 3]: this in. If not passed in, then the environment variable `DUCKDB_HOME` is checked. If neither is passed in then the library will be searched in the normal system library paths." - ([{:keys [duckdb-home]}] + ([{:keys [duckdb-home + lib-instance]}] (swap! initialize* (fn [is-init?] (when-not is-init? - (let [duckdb-home (or duckdb-home - (System/getenv "DUCKDB_HOME") - (str "/" com.sun.jna.Platform/RESOURCE_PREFIX)) - libpath (if-not (empty? duckdb-home) - (str (Paths/get duckdb-home - (into-array String [(System/mapLibraryName "duckdb")]))) - "duckdb")] - (if libpath - (log/infof "Attempting to load duckdb from \"%s\"" libpath) - (log/info "Attempting to load in-process duckdb")) - (duckdb-ffi/define-datatypes!) - (dt-ffi/library-singleton-set! duckdb-ffi/lib libpath))) + ;;Precompiled pathways will pass in the instance. + (if lib-instance + (dt-ffi/library-singleton-set-instance! duckdb-ffi/lib lib-instance) + (let [duckdb-home (or duckdb-home + (System/getenv "DUCKDB_HOME") + (str "/" com.sun.jna.Platform/RESOURCE_PREFIX)) + libpath (if-not (empty? duckdb-home) + (str (Paths/get duckdb-home + (into-array String [(System/mapLibraryName "duckdb")]))) + "duckdb")] + (if libpath + (log/infof "Attempting to load duckdb from \"%s\"" libpath) + (log/info "Attempting to load in-process duckdb")) + (duckdb-ffi/define-datatypes!) + (dt-ffi/library-singleton-set! duckdb-ffi/lib libpath)))) true))) ([] (initialize! nil)))