> Hick Gunter wrote:
> You can pass parameters to the xCreate function in the CREATE VIRTUAL TABLE
> statement, if the setting you desire remains unchanged during the lifetime of
> the table.
> CREATE VIRTUAL TABLE <name> USING <module> [ ( <parameter>,...) ];
> You can declare hidden fields in the call to sqlite3_declare_vtab() call
> within your xCreate function if the setting you desire are specific to a
> query. The constraint will be passed to your xBestIndex function, and (if the
> query plan is selected) the value will be passed to your xFilter function.
> CREATE VIRTUAL TABLE with_foo USING handle_foo;
> Sqlite3_declare_vtab(db_hanlde, "CREATE TABLE x ( ..., foo integer hidden,
> SELECT .... FROM with_foo wf .... WHERE wf.foo = 'bar';
I have to admit that I don't have much experience with the vtable concept. My
extensions consist of a set of functions that can be used in SQL statements.
During a single database connection the behaviour of the functions will be
deterministic, but the user should be able to set certain initialization
Dominique Devienne proposed in his answer to implement a vtable with a fixed
set of rows for the configuration parameters. That approach seems to be a bit
simpler to implement than a fully fledged vtable solution.
> Or, for "none of the above", create a user defined function that will handle
> storing/retrieving the settings and provide a C interface for your virtual
> table implementation to access them directly
> SELECT param('foo','bar') AS p;
> SELECT param('foo') AS foo;
Yes, that's the approach I already mentioned in my original post. Adding a C
interface is probably a good idea, too. However, setting parameters should be
possible without calling a C interface function, for example, if a user loads
the extension from the default SQLite shell coming with the SQLite distribution.
I would have preferred a more PRAGMA like syntax, but that could probably be
called "syntactic sugar" - a SELECT with a user-defined function will work and
the syntax is simple enough.
sqlite-users mailing list