2012-07-17 26 views
1

是否可以使用C API附加一個指定的SQLite3 :memory:數據庫?當然有sqlite3_open,但是如何設置要在查詢中使用的名稱?另外,我可以通過執行ATTACH DATABASE語句來附加它,但是如何獲取它的數據庫指針呢?從C API添加一個指定的內存數據庫

背景:

我使用虛擬表驅動的SQLite接口,一組外部文件。我使用SQLite主要是爲了獲得體面的SQL查詢和現有的驅動程序,例如蟒蛇。我已經定義了一個函數open_myfiles,它目前基於給定目錄中的文件創建所有虛擬表。應用程序只需執行SELECT open_myfiles('/path/to/tables'),並在數據庫中填入正確的虛擬表。

但是,我正在嘗試改進。目前,虛擬表被持久化到當前數據庫,並且很難加載多個目錄。我認爲更好的方法是將每個目錄作爲單獨的名爲:memory:的數據庫。

回答

0

經過一番研究,我發現C api數據庫ptr和附加數據庫之間沒有明確的聯繫。我不得不修改我最初的方法,這是我解決它的方法,以防其他人絆倒在這裏。

除了在擴展負載上註冊虛擬表模塊,我爲每次調用open_myfiles函數註冊一個虛擬表模塊。除了註冊模塊外,該功能還執行ATTACH DATABASE ':memory:' AS 'mymod'將虛擬表放入其各自的名稱空間(CREATE VIRTUAL TABLE也適用於限定名稱,事實證明)。

總而言之,它工作得很好。我希望這可以幫助別人!

相關問題