1

C API を使用して名前付き SQLite3:memory:データベースを接続することは可能ですか? もちろんありますがsqlite3_open、クエリで使用する名前を設定するにはどうすればよいですか? また、ステートメントを実行してアタッチすることもできATTACH DATABASEますが、DB ポインターを取得するにはどうすればよいでしょうか。

バックグラウンド:

仮想テーブルを使用して、一連の外部ファイルへの SQLite インターフェイスを駆動しています。私は主にSQLiteを使用して、適切なSQLクエリとPythonなどの既存のドライバーにアクセスしています。open_myfiles特定のディレクトリ内のファイルに基づいて、現在すべての仮想テーブルを作成する関数を定義しました。アプリケーションが実行するだけSELECT open_myfiles('/path/to/tables')で、データベースには正しい仮想テーブルが取り込まれます。

しかし、私は改善を試みています。現在、仮想テーブルは現在のデータベースに永続化されており、複数のディレクトリをロードすることは困難です。:memory:より良いアプローチは、各ディレクトリを個別の名前付きデータベースとしてアタッチすることだと思い ます。

4

2 に答える 2

0

いくつかの調査の後、C api データベース ptr と接続されたデータベースの間に明確な接続がないことがわかりました。最初のアプローチを変更する必要がありましたが、他の誰かがこれに遭遇した場合に備えて、これを解決する方法を次に示します。

拡張機能のロード時に仮想テーブル モジュールを登録する代わりに、open_myfiles関数の呼び出しごとに仮想テーブル モジュールを登録します。モジュールの登録に加えて、この関数ATTACH DATABASE ':memory:' AS 'mymod'は仮想テーブルをそれぞれの名前空間に配置するためにも実行されます (CREATE VIRTUAL TABLE修飾名でも機能することが判明しました)。

全体として、非常にうまく機能します。これが他の誰かに役立つことを願っています!

于 2012-07-18T12:32:39.570 に答える