From a456e8a0fdeb53b7eec00bd02df7d36a8cfaf22a Mon Sep 17 00:00:00 2001 From: Keivan Beigi Date: Fri, 21 Nov 2014 14:19:08 -0800 Subject: [PATCH] updated System.Data.SQLite.dll to 1.0.94 --- src/Libraries/Sqlite/System.Data.SQLite.dll | Bin 203776 -> 273920 bytes src/Libraries/Sqlite/System.Data.SQLite.xml | 8871 ++++++++++++++++++- 2 files changed, 8520 insertions(+), 351 deletions(-) diff --git a/src/Libraries/Sqlite/System.Data.SQLite.dll b/src/Libraries/Sqlite/System.Data.SQLite.dll index 3bea57696c804e067fb53919f8f2934c11751aaf..1e7145a8d8be29c3968d1c5d8e0dd8a1d69facf4 100644 GIT binary patch literal 273920 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எ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 BGSystem.Data.SQLite + +

+ Defines a source code identifier custom attribute for an assembly + manifest. + + + + + Constructs an instance of this attribute class using the specified + source code identifier value. + + + The source code identifier value to use. + + + + + Gets the source code identifier value. + + + + + Defines a source code time-stamp custom attribute for an assembly + manifest. + + + + + Constructs an instance of this attribute class using the specified + source code time-stamp value. + + + The source code time-stamp value to use. + + + + + Gets the source code time-stamp value. + + This is the method signature for the SQLite core library logging callback @@ -38,11 +78,23 @@ This base class provides datatype conversion services for the SQLite provider. + + + The fallback default database type when one cannot be obtained from an + existing connection instance. + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + The fallback default database type name when one cannot be obtained from + an existing connection instance. + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). @@ -55,7 +107,7 @@ - An array of ISO8601 datetime formats we support conversion from + An array of ISO-8601 DateTime formats that we support parsing. @@ -77,7 +129,7 @@ - The default DateTime format for this instance + The default DateTime format for this instance. @@ -85,12 +137,18 @@ The default DateTimeKind for this instance. - + + + The default DateTime format string for this instance. + + + Initializes the conversion class The default date/time format to use for this instance The DateTimeKind to use. + The DateTime format string to use. @@ -128,7 +186,8 @@ - Converts a string into a DateTime, using the current DateTimeFormat specified for the connection when it was opened. + Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind, + and DateTimeFormatString specified for the connection when it was opened. Acceptable ISO8601 DateTime formats are: @@ -165,7 +224,9 @@ yyyyMMdd yy-MM-dd - If the string cannot be matched to one of the above formats, an exception will be thrown. + If the string cannot be matched to one of the above formats -OR- + the DateTimeFormatString if one was provided, an exception will + be thrown. The string containing either a long integer number of 100-nanosecond units since System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a @@ -173,9 +234,10 @@ culture, or an ISO8601-format string. A DateTime value - + - Converts a string into a DateTime, using the specified DateTimeFormat and DateTimeKind. + Converts a string into a DateTime, using the specified DateTimeFormat, + DateTimeKind and DateTimeFormatString. Acceptable ISO8601 DateTime formats are: @@ -212,7 +274,9 @@ yyyyMMdd yy-MM-dd - If the string cannot be matched to one of the above formats, an exception will be thrown. + If the string cannot be matched to one of the above formats -OR- + the DateTimeFormatString if one was provided, an exception will + be thrown. The string containing either a long integer number of 100-nanosecond units since System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a @@ -220,6 +284,7 @@ culture, or an ISO8601-format string. The SQLiteDateFormats to use. The DateTimeKind to use. + The DateTime format string to use. A DateTime value @@ -237,6 +302,36 @@ The DateTimeKind to use. A .NET DateTime + + + Converts the specified number of seconds from the Unix epoch into a + value. + + + The number of whole seconds since the Unix epoch. + + + Either Utc or Local time. + + + The new value. + + + + + Converts the specified number of ticks since the epoch into a + value. + + + The number of whole ticks since the epoch. + + + Either Utc or Local time. + + + The new value. + + Converts a DateTime struct to a JulianDay double @@ -252,21 +347,36 @@ The DateTime to convert The whole number of seconds since the Unix epoch - + - Returns the default DateTime format string to use for the specified - DateTimeKind. + Returns the DateTime format string to use for the specified DateTimeKind. + If is not null, it will be returned verbatim. The DateTimeKind to use. + The DateTime format string to use. - The default DateTime format string to use for the specified DateTimeKind. + The DateTime format string to use for the specified DateTimeKind. - Converts a DateTime to a string value, using the current DateTimeFormat specified for the connection when it was opened. + Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind, + and DateTimeFormatString specified for the connection when it was opened. + + The DateTime value to convert + Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a + Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time + string, a formatted date and time string in the current culture, or an ISO8601-format date/time string. + + + + Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind, + and DateTimeFormatString specified for the connection when it was opened. The DateTime value to convert + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time string, a formatted date and time string in the current culture, or an ISO8601-format date/time string. @@ -309,6 +419,75 @@ Separator character A string array of the split up elements + + + Splits the specified string into multiple strings based on a separator + and returns the result as an array of strings. + + + The string to split into pieces based on the separator character. If + this string is null, null will always be returned. If this string is + empty, an array of zero strings will always be returned. + + + The character used to divide the original string into sub-strings. + This character cannot be a backslash or a double-quote; otherwise, no + work will be performed and null will be returned. + + + If this parameter is non-zero, all double-quote characters will be + retained in the returned list of strings; otherwise, they will be + dropped. + + + Upon failure, this parameter will be modified to contain an appropriate + error message. + + + The new array of strings or null if the input string is null -OR- the + separator character is a backslash or a double-quote -OR- the string + contains an unbalanced backslash or double-quote character. + + + + + Queries and returns the string representation for an object, using the + specified (or current) format provider. + + + The object instance to return the string representation for. + + + The format provider to use -OR- null if the current format provider for + the thread should be used instead. + + + The string representation for the object instance -OR- null if the + object instance is also null. + + + + + Attempts to convert an arbitrary object to the Boolean data type. + Null object values are converted to false. Throws an exception + upon failure. + + + The object value to convert. + + + The format provider to use. + + + If non-zero, a string value will be converted using the + + method; otherwise, the + method will be used. + + + The converted boolean value. + + Convert a value to true or false. @@ -327,14 +506,6 @@ converted to a proper boolean value. - - - Determines the data type of a column in a statement - - The statement to retrieve information for - The column to retrieve type information on - The SQLiteType to receive the affinity for the given column - Converts a SQLiteType to a .NET Type object @@ -356,6 +527,57 @@ The DbType to get the size of + + + Determines the default database type name to be used when a + per-connection value is not available. + + + The connection context for type mappings, if any. + + + The default database type name to use. + + + + + If applicable, issues a trace log message warning about falling back to + the default database type name. + + + The database value type. + + + The flags associated with the parent connection object. + + + The textual name of the database type. + + + + + If applicable, issues a trace log message warning about falling back to + the default database value type. + + + The textual name of the database type. + + + The flags associated with the parent connection object. + + + The database value type. + + + + + For a given database value type, return the "closest-match" textual database type name. + + The connection context for custom type mappings, if any. + The database value type. + The flags associated with the parent connection object. + The type name or an empty string if it cannot be determined. + Convert a DbType to a Type @@ -370,13 +592,126 @@ The type to evaluate The SQLite type affinity for that type. - + + + Builds and returns a map containing the database column types + recognized by this provider. + + + A map containing the database column types recognized by this + provider. + + + + + Determines if a database type is considered to be a string. + + + The database type to check. + + + Non-zero if the database type is considered to be a string, zero + otherwise. + + + + + Determines and returns the runtime configuration setting string that + should be used in place of the specified object value. + + + The object value to convert to a string. + + + Either the string to use in place of the object value -OR- null if it + cannot be determined. + + + + + Determines the default value to be used when a + per-connection value is not available. + + + The connection context for type mappings, if any. + + + The default value to use. + + + + + Determines if the specified textual value appears to be a + value. + + + The textual value to inspect. + + + Non-zero if the text looks like a value, + zero otherwise. + + + + + Determines if the specified textual value appears to be an + value. + + + The textual value to inspect. + + + Non-zero if the text looks like an value, + zero otherwise. + + + - For a given type name, return a closest-match .NET type + Determines if the specified textual value appears to be a + value. - The name of the type to match + + The textual value to inspect. + + + Non-zero if the text looks like a value, + zero otherwise. + + + + + Determines if the specified textual value appears to be a + value. + + + The object instance configured with + the chosen format. + + + The textual value to inspect. + + + Non-zero if the text looks like a in the + configured format, zero otherwise. + + + + + For a given textual database type name, return the "closest-match" database type. + This method is called during query result processing; therefore, its performance + is critical. + + The connection context for custom type mappings, if any. + The textual name of the database type to match. + The flags associated with the parent connection object. The .NET DBType the text evaluates to. + + + The error code used for logging exceptions caught in user-provided + code. + + Sets the status of the memory usage tracking subsystem in the SQLite core library. By default, this is enabled. @@ -386,6 +721,12 @@ Non-zero to enable memory usage tracking, zero otherwise. A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + Attempts to free as much heap memory as possible for the database connection. + + A standard SQLite return code (i.e. zero for success and non-zero for failure). + Shutdown the SQLite engine so that it can be restarted with different config options. @@ -394,9 +735,11 @@ - Returns non-zero if a database connection is open. + Determines if the associated native connection handle is open. - + + Non-zero if a database connection is open. + @@ -434,6 +777,18 @@ + + + Returns the text of the last error issued by SQLite -OR- the specified default error text if + none is available from the SQLite core library. + + + The error text to return in the event that one is not available from the SQLite core library. + + + The error text. + + When pooling is enabled, force this connection to be disposed rather than returned to the pool @@ -467,12 +822,105 @@ - Resets a prepared statement so it can be executed again. If the error returned is SQLITE_SCHEMA, + Resets a prepared statement so it can be executed again. If the error returned is SQLITE_SCHEMA, transparently attempt to rebuild the SQL statement and throw an error if that was not possible. The statement to reset Returns -1 if the schema changed while resetting, 0 if the reset was sucessful or 6 (SQLITE_LOCKED) if the reset failed due to a lock + + + Attempts to interrupt the query currently executing on the associated + native database connection. + + + + + This function binds a user-defined functions to the connection. + + + The object instance containing + the metadata for the function to be bound. + + + The object instance that implements the + function to be bound. + + + The flags associated with the parent connection object. + + + + + Calls the native SQLite core library in order to create a disposable + module containing the implementation of a virtual table. + + + The module object to be used when creating the native disposable module. + + + The flags for the associated object instance. + + + + + Calls the native SQLite core library in order to cleanup the resources + associated with a module containing the implementation of a virtual table. + + + The module object previously passed to the + method. + + + The flags for the associated object instance. + + + + + Calls the native SQLite core library in order to declare a virtual table + in response to a call into the + or virtual table methods. + + + The virtual table module that is to be responsible for the virtual table + being declared. + + + The string containing the SQL statement describing the virtual table to + be declared. + + + Upon success, the contents of this parameter are undefined. Upon failure, + it should contain an appropriate error message. + + + A standard SQLite return code. + + + + + Calls the native SQLite core library in order to declare a virtual table + function in response to a call into the + or virtual table methods. + + + The virtual table module that is to be responsible for the virtual table + function being declared. + + + The number of arguments to the function being declared. + + + The name of the function being declared. + + + Upon success, the contents of this parameter are undefined. Upon failure, + it should contain an appropriate error message. + + + A standard SQLite return code. + + Enables or disabled extension loading by SQLite. @@ -502,15 +950,15 @@ - Returns the numeric result code for the most recent failed SQLite API call - associated with the database connection. + Returns the numeric result code for the most recent failed SQLite API call + associated with the database connection. Result code - Returns the extended numeric result code for the most recent failed SQLite API call - associated with the database connection. + Returns the extended numeric result code for the most recent failed SQLite API call + associated with the database connection. Extended result code @@ -519,8 +967,8 @@ Add a log message via the SQLite sqlite3_log interface. Error code to be logged with the message. - String to be logged. Unlike the SQLite sqlite3_log() - interface, this should be pre-formatted. Consider using the + String to be logged. Unlike the SQLite sqlite3_log() + interface, this should be pre-formatted. Consider using the String.Format() function. @@ -635,60 +1083,266 @@ This is not really a per-connection value, it is global to the process. + + + Returns non-zero if the underlying native connection handle is owned by this instance. + + + + + Returns non-zero if the given database connection is in autocommit mode. + Autocommit mode is on by default. Autocommit mode is disabled by a BEGIN + statement. Autocommit mode is re-enabled by a COMMIT or ROLLBACK. + + The opaque pointer returned to us by the sqlite provider - + The user-defined functions registered on this connection - + - Shutdown the SQLite engine so that it can be restarted with different config options. - We depend on auto initialization to recover. + The modules created using this connection. - Returns a result code - + - Enables or disabled extension loading by SQLite. + Constructs the object used to interact with the SQLite core library + using the UTF-8 text encoding. - - True to enable loading of extensions, false to disable. + + The DateTime format to be used when converting string values to a + DateTime and binding DateTime parameters. + + + The to be used when creating DateTime + values. + + + The format string to be used when parsing and formatting DateTime + values. + + + The native handle to be associated with the database connection. - - - - Loads a SQLite extension library from the named file. - - The name of the dynamic link library file containing the extension. + The fully qualified file name associated with . - - The name of the exported function used to initialize the extension. - If null, the default "sqlite3_extension_init" will be used. + + Non-zero if the newly created object instance will need to dispose + of when it is no longer needed. - - Enables or disabled extended result codes returned by SQLite - - - Gets the last SQLite error code - - - Gets the last SQLite extended error code - - - Add a log message via the SQLite sqlite3_log interface. + + + This method attempts to dispose of all the derived + object instances currently associated with the native database connection. + - + - Allows the setting of a logging callback invoked by SQLite when a - log event occurs. Only one callback may be set. If NULL is passed, - the logging callback is unregistered. + Attempts to interrupt the query currently executing on the associated + native database connection. + + + + + This function binds a user-defined function to the connection. + + + The object instance containing + the metadata for the function to be bound. + + + The object instance that implements the + function to be bound. + + + The flags associated with the parent connection object. + + + + + Attempts to free as much heap memory as possible for the database connection. + + A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + + Attempts to free N bytes of heap memory by deallocating non-essential memory + allocations held by the database library. Memory used to cache database pages + to improve performance is an example of non-essential memory. This is a no-op + returning zero if the SQLite core library was not compiled with the compile-time + option SQLITE_ENABLE_MEMORY_MANAGEMENT. Optionally, attempts to reset and/or + compact the Win32 native heap, if applicable. + + + The requested number of bytes to free. + + + Non-zero to attempt a heap reset. + + + Non-zero to attempt heap compaction. + + + The number of bytes actually freed. This value may be zero. + + + This value will be non-zero if the heap reset was successful. + + + The size of the largest committed free block in the heap, in bytes. + This value will be zero unless heap compaction is enabled. + + + A standard SQLite return code (i.e. zero for success and non-zero + for failure). + + + + + Shutdown the SQLite engine so that it can be restarted with different + configuration options. We depend on auto initialization to recover. + + Returns a standard SQLite result code. + + + + Shutdown the SQLite engine so that it can be restarted with different + configuration options. We depend on auto initialization to recover. + + + Non-zero to reset the database and temporary directories to their + default values, which should be null for both. This parameter has no + effect on non-Windows operating systems. + + Returns a standard SQLite result code. + + + + Determines if the associated native connection handle is open. + + + Non-zero if the associated native connection handle is open. + + + + + Calls the native SQLite core library in order to create a disposable + module containing the implementation of a virtual table. + + + The module object to be used when creating the native disposable module. + + + The flags for the associated object instance. + + + + + Calls the native SQLite core library in order to cleanup the resources + associated with a module containing the implementation of a virtual table. + + + The module object previously passed to the + method. + + + The flags for the associated object instance. + + + + + Calls the native SQLite core library in order to declare a virtual table + in response to a call into the + or virtual table methods. + + + The virtual table module that is to be responsible for the virtual table + being declared. + + + The string containing the SQL statement describing the virtual table to + be declared. + + + Upon success, the contents of this parameter are undefined. Upon failure, + it should contain an appropriate error message. + + + A standard SQLite return code. + + + + + Calls the native SQLite core library in order to declare a virtual table + function in response to a call into the + or virtual table methods. + + + The virtual table module that is to be responsible for the virtual table + function being declared. + + + The number of arguments to the function being declared. + + + The name of the function being declared. + + + Upon success, the contents of this parameter are undefined. Upon failure, + it should contain an appropriate error message. + + + A standard SQLite return code. + + + + + Enables or disabled extension loading by SQLite. + + + True to enable loading of extensions, false to disable. + + + + + Loads a SQLite extension library from the named file. + + + The name of the dynamic link library file containing the extension. + + + The name of the exported function used to initialize the extension. + If null, the default "sqlite3_extension_init" will be used. + + + + Enables or disabled extended result codes returned by SQLite + + + Gets the last SQLite error code + + + Gets the last SQLite extended error code + + + Add a log message via the SQLite sqlite3_log interface. + + + Add a log message via the SQLite sqlite3_log interface. + + + + Allows the setting of a logging callback invoked by SQLite when a + log event occurs. Only one callback may be set. If NULL is passed, + the logging callback is unregistered. The callback function to invoke. Returns a result code @@ -766,20 +1420,55 @@ initialized for the current process. - + Helper function to retrieve a column of data from an active statement. The statement being step()'d through + The flags associated with the connection. The column index to retrieve The type of data contained in the column. If Uninitialized, this function will retrieve the datatype information. Returns the data in the column + + + Returns non-zero if the underlying native connection handle is owned + by this instance. + + Alternate SQLite3 object, overriding many text behaviors to support UTF-16 (Unicode) + + + Constructs the object used to interact with the SQLite core library + using the UTF-8 text encoding. + + + The DateTime format to be used when converting string values to a + DateTime and binding DateTime parameters. + + + The to be used when creating DateTime + values. + + + The format string to be used when parsing and formatting DateTime + values. + + + The native handle to be associated with the database connection. + + + The fully qualified file name associated with . + + + Non-zero if the newly created object instance will need to dispose + of when it is no longer needed. + + Overrides SQLiteConvert.ToString() to marshal UTF-16 strings instead of UTF-8 @@ -847,6 +1536,19 @@ Disposes and finalizes the backup. + + + + + + + + Creates temporary tables on the connection so schema information can be queried. + + + The connection upon which to build the schema tables. + + The extra behavioral flags that can be applied to a connection. @@ -889,6 +1591,206 @@ interop assembly. + + + When binding parameter values with the + type, use the interop method that accepts an + value. + + + + + When binding parameter values, always bind them as though they were + plain text (i.e. no numeric, date/time, or other conversions should + be attempted). + + + + + When returning column values, always return them as though they were + plain text (i.e. no numeric, date/time, or other conversions should + be attempted). + + + + + Prevent this object instance from + loading extensions. + + + + + Prevent this object instance from + creating virtual table modules. + + + + + Skip binding any functions provided by other managed assemblies when + opening the connection. + + + + + Skip setting the logging related properties of the + object instance that was passed to + the method. + + + + + Enable logging of all virtual table module errors seen by the + method. + + + + + Enable logging of certain virtual table module exceptions that cannot + be easily discovered via other means. + + + + + Enable tracing of potentially important [non-fatal] error conditions + that cannot be easily reported through other means. + + + + + When binding parameter values, always use the invariant culture when + converting their values from strings. + + + + + When binding parameter values, always use the invariant culture when + converting their values to strings. + + + + + Disable using the connection pool by default. If the "Pooling" + connection string property is specified, its value will override + this flag. The precise outcome of combining this flag with the + flag is unspecified; however, + one of the flags will be in effect. + + + + + Enable using the connection pool by default. If the "Pooling" + connection string property is specified, its value will override + this flag. The precise outcome of combining this flag with the + flag is unspecified; however, + one of the flags will be in effect. + + + + + Enable using per-connection mappings between type names and + values. Also see the + , + , and + methods. These + per-connection mappings, when present, override the corresponding + global mappings. + + + + + Disable using global mappings between type names and + values. This may be useful in some very narrow + cases; however, if there are no per-connection type mappings, the + fallback defaults will be used for both type names and their + associated values. Therefore, use of this flag + is not recommended. + + + + + When the property is used, it + should return non-zero if there were ever any rows in the associated + result sets. + + + + + Enable "strict" transaction enlistment semantics. Setting this flag + will cause an exception to be thrown if an attempt is made to enlist + in a transaction with an unavailable or unsupported isolation level. + In the future, more extensive checks may be enabled by this flag as + well. + + + + + Enable mapping of unsupported transaction isolation levels to the + closest supported transaction isolation level. + + + + + When returning column values, attempt to detect the affinity of + textual values by checking if they fully conform to those of the + , + , + , + or types. + + + + + When returning column values, attempt to detect the type of + string values by checking if they fully conform to those of + the , + , + , + or types. + + + + + Skip querying runtime configuration settings for use by the + class, including the default + value and default database type name. + NOTE: If the + and/or + properties are not set explicitly nor set via their connection + string properties and repeated calls to determine these runtime + configuration settings are seen to be a problem, this flag + should be set. + + + + + When binding parameter values or returning column values, always + treat them as though they were plain text (i.e. no numeric, + date/time, or other conversions should be attempted). + + + + + When binding parameter values, always use the invariant culture when + converting their values to strings or from strings. + + + + + When binding parameter values or returning column values, always + treat them as though they were plain text (i.e. no numeric, + date/time, or other conversions should be attempted) and always + use the invariant culture when converting their values to strings. + + + + + When binding parameter values or returning column values, always + treat them as though they were plain text (i.e. no numeric, + date/time, or other conversions should be attempted) and always + use the invariant culture when converting their values to strings + or from strings. + + Enable all logging. @@ -899,11 +1801,25 @@ The default extra flags for new connections. + + + The default extra flags for new connections with all logging enabled. + + SQLite implementation of DbCommand. + + + The default connection string to be used when creating a temporary + connection to execute a command via the static + or + + methods. + + The command text this command is based on @@ -1001,6 +1917,19 @@ Whether or not the class is being explicitly or implicitly disposed + + + This method attempts to query the flags associated with the database + connection in use. If the database connection is disposed, the default + flags will be returned. + + + The command containing the databse connection to query the flags from. + + + The connection flags value. + + Clears and destroys all statements currently prepared @@ -1042,11 +1971,70 @@ The behavior the data reader should adopt Returns a SQLiteDataReader object + + + This method creates a new connection, executes the query using the given + execution type, closes the connection, and returns the results. If the + connection string is null, a temporary in-memory database connection will + be used. + + + The text of the command to be executed. + + + The execution type for the command. This is used to determine which method + of the command object to call, which then determines the type of results + returned, if any. + + + The connection string to the database to be opened, used, and closed. If + this parameter is null, a temporary in-memory databse will be used. + + + The SQL parameter values to be used when building the command object to be + executed, if any. + + + The results of the query -OR- null if no results were produced from the + given execution type. + + + + + This method creates a new connection, executes the query using the given + execution type and command behavior, closes the connection, and returns + the results. If the connection string is null, a temporary in-memory + database connection will be used. + + + The text of the command to be executed. + + + The execution type for the command. This is used to determine which method + of the command object to call, which then determines the type of results + returned, if any. + + + The command behavior flags for the command. + + + The connection string to the database to be opened, used, and closed. If + this parameter is null, a temporary in-memory databse will be used. + + + The SQL parameter values to be used when building the command object to be + executed, if any. + + + The results of the query -OR- null if no results were produced from the + given execution type. + + Overrides the default behavior to return a SQLiteDataReader specialization class - The flags to be associated with the reader + The flags to be associated with the reader. A SQLiteDataReader @@ -1064,14 +2052,29 @@ Execute the command and return the number of rows inserted/updated affected by it. - + The number of rows inserted/updated affected by it. + + + + Execute the command and return the number of rows inserted/updated affected by it. + + The flags to be associated with the reader. + The number of rows inserted/updated affected by it. Execute the command and return the first column of the first row of the resultset (if present), or null if no resultset was returned. - The first column of the first row of the first resultset from the query + The first column of the first row of the first resultset from the query. + + + + Execute the command and return the first column of the first row of the resultset + (if present), or null if no resultset was returned. + + The flags to be associated with the reader. + The first column of the first row of the first resultset from the query. @@ -1308,6 +2311,16 @@ The command associated with this event, if any. + + + The data reader associated with this event, if any. + + + + + The critical handle associated with this event, if any. + + Command or message text associated with this event, if any. @@ -1318,7 +2331,7 @@ Extra data associated with this event, if any. - + Constructs the object. @@ -1327,6 +2340,8 @@ with this event, if any. The transaction associated with this event, if any. The command associated with this event, if any. + The data reader associated with this event, if any. + The critical handle associated with this event, if any. The command or message text, if any. The extra data, if any. @@ -1352,7 +2367,12 @@ Data Source - This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7). + + This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7). + Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a + UNC path), each of the adjoining backslash characters must be doubled (e.g. "\\Network\Share\test.db" + would become "\\\\Network\Share\test.db"). + Y @@ -1388,8 +2408,15 @@ Unspecified - BaseSchemaName - Some base data classes in the framework (e.g. those that build SQL queries dynamically) + DateTimeFormatString + The exact DateTime format string to use for all formatting and parsing of all DateTime + values for this connection. + N + null + + + BaseSchemaName + Some base data classes in the framework (e.g. those that build SQL queries dynamically) assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting alternate schemas as well; however, SQLite does not fit into this model. Therefore, this value is used as a placeholder and removed prior to preparing any SQL statements that may contain it. @@ -1427,6 +2454,12 @@ + HexPassword + {hexPassword} - Must contain a sequence of zero or more hexadecimal encoded byte values without a leading "0x" prefix. Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection. + N + + + Enlist Y - Automatically enlist in distributed transactions
N - No automatic enlistment
N @@ -1434,7 +2467,14 @@
Pooling - True - Use connection pooling
False - Do not use connection pooling
+ + True - Use connection pooling.
+ False - Do not use connection pooling.

+ WARNING: When using the default connection pool implementation, + setting this property to True should be avoided by applications that make + use of COM (either directly or indirectly) due to possible deadlocks that + can occur during the finalization of some COM objects. +
N False
@@ -1519,6 +2559,13 @@
+ + + The "invalid value" for the enumeration used + by the property. This constant is shared + by this class and the SQLiteConnectionStringBuilder class. + + The default "stub" (i.e. placeholder) base schema name to use when @@ -1528,12 +2575,22 @@ be confused with the names of user objects). + + + The managed assembly containing this type. + + Object used to synchronize access to the static instance data for this class. + + + The extra connection flags to be used for all opened connections. + + Used to hold the active library version number of SQLite. @@ -1569,6 +2626,12 @@ Whether or not the connection is enlisted in a distrubuted transaction + + + The per-connection mappings between type names and + values. These mappings override the corresponding global mappings. + + The base SQLite object to interop with @@ -1597,6 +2660,27 @@ possible values. + + + The cached values for all settings that have been fetched on behalf + of this connection. This cache may be cleared by calling the + method. + + + + + The default databse type for this connection. This value will only + be used if the + flag is set. + + + + + The default databse type name for this connection. This value will only + be used if the + flag is set. + + Default command timeout @@ -1622,12 +2706,29 @@ The connection string to use. + + + Initializes the connection with a pre-existing native connection handle. + This constructor overload is intended to be used only by the private + method. + + + The native connection handle to use. + + + The file name corresponding to the native connection handle. + + + Non-zero if this instance owns the native connection handle and + should dispose of it when it is no longer needed. + + Initializes the connection with the specified connection string. - The connection string to use on. + The connection string to use. Non-zero to parse the connection string using the built-in (i.e. @@ -1647,12 +2748,31 @@ Raises the event.
- The connection associated with this event. + The connection associated with this event. If this parameter is not + null and the specified connection cannot raise events, then the + registered event handlers will not be invoked. A that contains the event data.
+ + + Creates and returns a new managed database connection handle. This + method is intended to be used by implementations of the + interface only. In theory, it + could be used by other classes; however, that usage is not supported. + + + This must be a native database connection handle returned by the + SQLite core library and it must remain valid and open during the + entire duration of the calling method. + + + The new managed database connection handle or null if it cannot be + created. + + Backs up the database, using the specified database connection as the @@ -1674,6 +2794,101 @@ should be performed. + + + Clears the per-connection cached settings. + + + The total number of per-connection settings cleared. + + + + + Queries and returns the value of the specified setting, using the + cached setting names and values for this connection, when available. + + + The name of the setting. + + + The value to be returned if the setting has not been set explicitly + or cannot be determined. + + + The value of the cached setting is stored here if found; otherwise, + the value of is stored here. + + + Non-zero if the cached setting was found; otherwise, zero. + + + + + Adds or sets the cached setting specified by + to the value specified by . + + + The name of the cached setting to add or replace. + + + The new value of the cached setting. + + + + + Clears the per-connection type mappings. + + + The total number of per-connection type mappings cleared. + + + + + Returns the per-connection type mappings. + + + The per-connection type mappings -OR- null if they are unavailable. + + + + + Adds a per-connection type mapping, possibly replacing one or more + that already exist. + + + The case-insensitive database type name (e.g. "MYDATE"). The value + of this parameter cannot be null. Using an empty string value (or + a string value consisting entirely of whitespace) for this parameter + is not recommended. + + + The value that should be associated with the + specified type name. + + + Non-zero if this mapping should be considered to be the primary one + for the specified . + + + A negative value if nothing was done. Zero if no per-connection type + mappings were replaced (i.e. it was a pure add operation). More than + zero if some per-connection type mappings were replaced. + + + + + Attempts to bind the specified object + instance to this connection. + + + The object instance containing + the metadata for the function to be bound. + + + The object instance that implements the + function to be bound. + + Creates a clone of the connection. All attached databases and user-defined functions are cloned. If the existing connection is open, the cloned connection @@ -1698,6 +2913,25 @@ The event data created for the raised event, if it was actually raised. + + + Determines and returns the fallback default isolation level when one cannot be + obtained from an existing connection instance. + + + The fallback default isolation level for this connection instance -OR- + if it cannot be determined. + + + + + Determines and returns the default isolation level for this connection instance. + + + The default isolation level for this connection instance -OR- + if it cannot be determined. + + OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection. @@ -1833,6 +3067,24 @@ Non-zero to make the conversion case-insensitive. The enumerated value upon success or null upon error. + + + Attempts to convert an input string into a byte value. + + + The string value to be converted. + + + The number styles to use for the conversion. + + + Upon sucess, this will contain the parsed byte value. + Upon failure, the value of this parameter is undefined. + + + Non-zero upon success; zero on failure. + + Enables or disabled extension loading. @@ -1861,6 +3113,86 @@ If null, the default "sqlite3_extension_init" will be used. + + + Creates a disposable module containing the implementation of a virtual + table. + + + The module object to be used when creating the disposable module. + + + + + Parses a string containing a sequence of zero or more hexadecimal + encoded byte values and returns the resulting byte array. The + "0x" prefix is not allowed on the input string. + + + The input string containing zero or more hexadecimal encoded byte + values. + + + A byte array containing the parsed byte values or null if an error + was encountered. + + + + + Creates and returns a string containing the hexadecimal encoded byte + values from the input array. + + + The input array of bytes. + + + The resulting string or null upon failure. + + + + + Parses a string containing a sequence of zero or more hexadecimal + encoded byte values and returns the resulting byte array. The + "0x" prefix is not allowed on the input string. + + + The input string containing zero or more hexadecimal encoded byte + values. + + + Upon failure, this will contain an appropriate error message. + + + A byte array containing the parsed byte values or null if an error + was encountered. + + + + + This method figures out what the default connection pool setting should + be based on the connection flags. When present, the "Pooling" connection + string property value always overrides the value returned by this method. + + + Non-zero if the connection pool should be enabled by default; otherwise, + zero. + + + + + Determines the transaction isolation level that should be used by + the caller, primarily based upon the one specified by the caller. + If mapping of transaction isolation levels is enabled, the returned + transaction isolation level may be significantly different than the + originally specified one. + + + The originally specified transaction isolation level. + + + The transaction isolation level that should be used. + + Opens the connection using the parameters found in the . @@ -1883,6 +3215,57 @@ returns. + + + Returns various global memory statistics for the SQLite core library via + a dictionary of key/value pairs. Currently, only the "MemoryUsed" and + "MemoryHighwater" keys are returned and they have values that correspond + to the values that could be obtained via the + and connection properties. + + + This dictionary will be populated with the global memory statistics. It + will be created if necessary. + + + + + Attempts to free as much heap memory as possible for this database connection. + + + + + Attempts to free N bytes of heap memory by deallocating non-essential memory + allocations held by the database library. Memory used to cache database pages + to improve performance is an example of non-essential memory. This is a no-op + returning zero if the SQLite core library was not compiled with the compile-time + option SQLITE_ENABLE_MEMORY_MANAGEMENT. Optionally, attempts to reset and/or + compact the Win32 native heap, if applicable. + + + The requested number of bytes to free. + + + Non-zero to attempt a heap reset. + + + Non-zero to attempt heap compaction. + + + The number of bytes actually freed. This value may be zero. + + + This value will be non-zero if the heap reset was successful. + + + The size of the largest committed free block in the heap, in bytes. + This value will be zero unless heap compaction is enabled. + + + A standard SQLite return code (i.e. zero for success and non-zero + for failure). + + Sets the status of the memory usage tracking subsystem in the SQLite core library. By default, this is enabled. @@ -1893,7 +3276,28 @@ A standard SQLite return code (i.e. zero for success and non-zero for failure). - Passes a shutdown request off to SQLite. + + Passes a shutdown request to the SQLite core library. Does not throw + an exception if the shutdown request fails. + + + A standard SQLite return code (i.e. zero for success and non-zero for + failure). + + + + + Passes a shutdown request to the SQLite core library. Throws an + exception if the shutdown request fails and the no-throw parameter + is non-zero. + + + Non-zero to reset the database and temporary directories to their + default values, which should be null for both. + + + When non-zero, throw an exception if the shutdown request fails. + Enables or disabled extended result codes returned by SQLite @@ -1957,6 +3361,18 @@ current interval to be queried and replace that negative value. Zero for success, non-zero for error. + + + Sets the chunk size for the primary file associated with this database + connection. + + + The new chunk size for the main database, in bytes. + + + Zero for success, non-zero for error. + + Removes one set of surrounding single -OR- double quotes from the string @@ -2136,6 +3552,13 @@ SQLiteConnection object occur. + + + This property is used to obtain or set the custom connection pool + implementation to use, if any. Setting this property to null will + cause the default connection pool implementation to be used. + + Returns the number of pool entries for the file name associated with this connection. @@ -2155,7 +3578,12 @@ Data Source - This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7). + + This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7). + Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a + UNC path), each of the adjoining backslash characters must be doubled (e.g. "\\Network\Share\test.db" + would become "\\\\Network\Share\test.db"). + Y @@ -2191,6 +3619,13 @@ Unspecified + DateTimeFormatString + The exact DateTime format string to use for all formatting and parsing of all DateTime + values for this connection. + N + null + + BaseSchemaName Some base data classes in the framework (e.g. those that build SQL queries dynamically) assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting @@ -2230,6 +3665,12 @@ + HexPassword + {hexPassword} - Must contain a sequence of zero or more hexadecimal encoded byte values without a leading "0x" prefix. Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection. + N + + + Enlist Y - Automatically enlist in distributed transactions
N - No automatic enlistment
N @@ -2237,7 +3678,14 @@
Pooling - True - Use connection pooling
False - Do not use connection pooling
+ + True - Use connection pooling.
+ False - Do not use connection pooling.

+ WARNING: When using the default connection pool implementation, + setting this property to True should be avoided by applications that + make use of COM (either directly or indirectly) due to possible + deadlocks that can occur during the finalization of some COM objects. +
N False
@@ -2352,6 +3800,24 @@ possible values.
+ + + Gets/sets the default database type for this connection. This value + will only be used when not null. + + + + + Gets/sets the default database type name for this connection. This + value will only be used when not null. + + + + + Returns non-zero if the underlying native connection handle is + owned by this instance. + + Returns the version of the underlying SQLite database engine @@ -2368,6 +3834,13 @@ this connection. + + + Returns non-zero if the given database connection is in autocommit mode. + Autocommit mode is on by default. Autocommit mode is disabled by a BEGIN + statement. Autocommit mode is re-enabled by a COMMIT or ROLLBACK. + + Returns the amount of memory (in bytes) currently in use by the SQLite core library. @@ -2387,7 +3860,7 @@ - Returns the version of the underlying SQLite database engine + Returns the version of the underlying SQLite core library. @@ -2397,11 +3870,71 @@ SQLite core library. + + + Returns a string containing the compile-time options used to + compile the SQLite core native library, delimited with spaces. + + + + + This method returns the version of the interop SQLite assembly + used. If the SQLite interop assembly is not in use or the + necessary information cannot be obtained for any reason, a null + value may be returned. + + + + + This method returns the string whose value contains the unique + identifier for the source checkout used to build the interop + assembly. If the SQLite interop assembly is not in use or the + necessary information cannot be obtained for any reason, a null + value may be returned. + + + + + Returns a string containing the compile-time options used to + compile the SQLite interop assembly, delimited with spaces. + + + + + This method returns the version of the managed components used + to interact with the SQLite core library. If the necessary + information cannot be obtained for any reason, a null value may + be returned. + + + + + This method returns the string whose value contains the unique + identifier for the source checkout used to build the managed + components currently executing. If the necessary information + cannot be obtained for any reason, a null value may be returned. + + + + + The extra connection flags to be used for all opened connections. + + Returns the state of the connection. + + + This event is raised whenever SQLite encounters an action covered by the + authorizer during query preparation. Changing the value of the + property will determine if + the specific action will be allowed, ignored, or denied. For the entire + duration of the event, the associated connection and statement objects + must not be modified, either directly or indirectly, by the called code. + + This event is raised whenever SQLite makes an update/delete/insert into the database on @@ -2450,6 +3983,15 @@ Use the default operating system's file flushing, SQLite does not explicitly flush the file buffers after writing + + + Raised when authorization is required to perform an action contained + within a SQL query. + + The connection performing the action. + A that contains the + event data. + Raised when a transaction is about to be committed. To roll back a transaction, set the @@ -2506,56 +4048,139 @@ process, rolling back any changes that have been made so far. - + - Whenever an update event is triggered on a connection, this enum will indicate - exactly what type of operation is being performed. + The data associated with a call into the authorizer. - + - A row is being deleted from the given database and table + The user-defined native data associated with this event. Currently, + this will always contain the value of . - + - A row is being inserted into the table. + The action code responsible for the current call into the authorizer. - + - A row is being updated in the table. + The first string argument for the current call into the authorizer. + The exact value will vary based on the action code, see the + enumeration for possible + values. - + - Passed during an Update callback, these event arguments detail the type of update operation being performed - on the given connection. + The second string argument for the current call into the authorizer. + The exact value will vary based on the action code, see the + enumeration for possible + values. - + - The name of the database being updated (usually "main" but can be any attached or temporary database) + The database name for the current call into the authorizer, if + applicable. - + - The name of the table being updated + The name of the inner-most trigger or view that is responsible for + the access attempt or a null value if this access attempt is directly + from top-level SQL code. - + - The type of update being performed (insert/update/delete) + The return code for the current call into the authorizer. - + - The RowId affected by this update. + Constructs an instance of this class with default property values. - + - Event arguments raised when a transaction is being committed + Constructs an instance of this class with specific property values. + + + The user-defined native data associated with this event. + + + The authorizer action code. + + + The first authorizer argument. + + + The second authorizer argument. + + + The database name, if applicable. + + + The name of the inner-most trigger or view that is responsible for + the access attempt or a null value if this access attempt is directly + from top-level SQL code. + + + The authorizer return code. + + + + + Whenever an update event is triggered on a connection, this enum will indicate + exactly what type of operation is being performed. + + + + + A row is being deleted from the given database and table + + + + + A row is being inserted into the table. + + + + + A row is being updated in the table. + + + + + Passed during an Update callback, these event arguments detail the type of update operation being performed + on the given connection. + + + + + The name of the database being updated (usually "main" but can be any attached or temporary database) + + + + + The name of the table being updated + + + + + The type of update being performed (insert/update/delete) + + + + + The RowId affected by this update. + + + + + Event arguments raised when a transaction is being committed @@ -2573,14 +4198,116 @@ SQL statement text as the statement first begins executing - + + + This interface represents a custom connection pool implementation + usable by System.Data.SQLite. + + + + + Counts the number of pool entries matching the specified file name. + + + The file name to match or null to match all files. + + + The pool entry counts for each matching file. + + + The total number of connections successfully opened from any pool. + + + The total number of connections successfully closed from any pool. + + + The total number of pool entries for all matching files. + + + + + Disposes of all pooled connections associated with the specified + database file name. + + + The database file name. + + + + + Disposes of all pooled connections. + + + + + Adds a connection to the pool of those associated with the + specified database file name. + + + The database file name. + + + The database connection handle. + + + The connection pool version at the point the database connection + handle was received from the connection pool. This is also the + connection pool version that the database connection handle was + created under. + + + + + Removes a connection from the pool of those associated with the + specified database file name with the intent of using it to + interact with the database. + + + The database file name. + + + The new maximum size of the connection pool for the specified + database file name. + + + The connection pool version associated with the returned database + connection handle, if any. + + + The database connection handle associated with the specified + database file name or null if it cannot be obtained. + + + + + This default method implementations in this class should not be used by + applications that make use of COM (either directly or indirectly) due + to possible deadlocks that can occur during finalization of some COM + objects. + + + + + This field is used to synchronize access to the private static data + in this class. + + + + + When this field is non-null, it will be used to provide the + implementation of all the connection pool methods; otherwise, + the default method implementations will be used. + + + - The connection pool object + The dictionary of connection pools, based on the normalized file + name of the SQLite database. - The default version number new pools will get + The default version number new pools will get. @@ -2599,60 +4326,147 @@ Counts the number of pool entries matching the specified file name. - The file name to match or null to match all files. - The pool entry counts for each matching file. - The total number of connections successfully opened from any pool. - The total number of connections successfully closed from any pool. - The total number of pool entries for all matching files. + + The file name to match or null to match all files. + + + The pool entry counts for each matching file. + + + The total number of connections successfully opened from any pool. + + + The total number of connections successfully closed from any pool. + + + The total number of pool entries for all matching files. + - + - Attempt to pull a pooled connection out of the queue for active duty + Disposes of all pooled connections associated with the specified + database file name. - The filename for a desired connection - The maximum size the connection pool for the filename can be - The pool version the returned connection will belong to - Returns NULL if no connections were available. Even if none are, the poolversion will still be a valid pool version + + The database file name. + - Clears out all pooled connections and rev's up the default pool version to force all old active objects - not in the pool to get discarded rather than returned to their pools. + Disposes of all pooled connections. - + + + Adds a connection to the pool of those associated with the + specified database file name. + + + The database file name. + + + The database connection handle. + + + The connection pool version at the point the database connection + handle was received from the connection pool. This is also the + connection pool version that the database connection handle was + created under. + + + - Clear a given pool for a given filename. Discards anything in the pool for the given file, and revs the pool - version so current active objects on the old version of the pool will get discarded rather than be returned to the pool. + Removes a connection from the pool of those associated with the + specified database file name with the intent of using it to + interact with the database. - The filename of the pool to clear + + The database file name. + + + The new maximum size of the connection pool for the specified + database file name. + + + The connection pool version associated with the returned database + connection handle, if any. + + + The database connection handle associated with the specified + database file name or null if it cannot be obtained. + - + - Return a connection to the pool for someone else to use. + This method is used to obtain a reference to the custom connection + pool implementation currently in use, if any. + + + The custom connection pool implementation or null if the default + connection pool implementation should be used. + + + + + This method is used to set the reference to the custom connection + pool implementation to use, if any. + + + The custom connection pool implementation to use or null if the + default connection pool implementation should be used. + + + + + We do not have to thread-lock anything in this function, because it + is only called by other functions above which already take the lock. + + + The pool queue to resize. + + + If a function intends to add to the pool, this is true, which + forces the resize to take one more than it needs from the pool. + + + + + Keeps track of connections made on a specified file. The PoolVersion + dictates whether old objects get returned to the pool or discarded + when no longer in use. + + + + + The queue of weak references to the actual database connection + handles. - The filename of the pool to use - The connection handle to pool - The pool version the handle was created under - - If the version numbers don't match between the connection and the pool, then the handle is discarded. - - + - We don't have to thread-lock anything in this function, because it's only called by other functions above - which already have a thread-safe lock. + This pool version associated with the database connection + handles in this pool queue. - The queue to resize - If a function intends to add to the pool, this is true, which forces the resize - to take one more than it needs from the pool - + - Keeps track of connections made on a specified file. The PoolVersion dictates whether old objects get - returned to the pool or discarded when no longer in use. + The maximum size of this pool queue. + + + Constructs a connection pool queue using the specified version + and maximum size. Normally, all the database connection + handles in this pool are associated with a single database file + name. + + + The initial pool version for this connection pool queue. + + + The initial maximum size for this connection pool queue. + + SQLite implementation of DbConnectionStringBuilder. @@ -2772,6 +4586,11 @@ Gets/sets the database encryption password + + + Gets/sets the database encryption hexadecimal password + + Gets/Sets the page size for the connection. @@ -2797,6 +4616,12 @@ Gets/Sets the DateTime kind for the connection. + + + Gets/sets the DateTime format string used for formatting + and parsing purposes. + + Gets/Sets the placeholder base schema name used for @@ -2813,6 +4638,16 @@ Sets the default isolation level for transactions on the connection. + + + Gets/sets the default database type for the connection. + + + + + Gets/sets the default type name for the connection. + + If enabled, use foreign key constraints @@ -2834,6 +4669,11 @@ full path before opening. + + + If enabled, skip using the configured shared connection flags. + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite @@ -2877,7 +4717,7 @@ - Used internally + Used internally by this provider @@ -2934,6 +4774,17 @@ A command was created using the connection. + + + A data reader was created using the connection. + + + + + An instance of a derived class has + been created to wrap a native resource. + + The connection is being closed. @@ -2944,20 +4795,42 @@ The connection was closed. - + - This implementation of SQLite for ADO.NET can process date/time fields in databases in only one of three formats. Ticks, ISO8601 - and JulianDay. + A command is being disposed. - - ISO8601 is more compatible, readable, fully-processable, but less accurate as it doesn't provide time down to fractions of a second. - JulianDay is the numeric format the SQLite uses internally and is arguably the most compatible with 3rd party tools. It is - not readable as text without post-processing. - Ticks less compatible with 3rd party tools that query the database, and renders the DateTime field unreadable as text without post-processing. + + + + A data reader is being disposed. + + + + + A data reader is being closed. + + + + + This implementation of SQLite for ADO.NET can process date/time fields in + databases in one of six formats. + + + ISO8601 format is more compatible, readable, fully-processable, but less + accurate as it does not provide time down to fractions of a second. + JulianDay is the numeric format the SQLite uses internally and is arguably + the most compatible with 3rd party tools. It is not readable as text + without post-processing. Ticks less compatible with 3rd party tools that + query the database, and renders the DateTime field unreadable as text + without post-processing. UnixEpoch is more compatible with Unix systems. + InvariantCulture allows the configured format for the invariant culture + format to be used and is human readable. CurrentCulture allows the + configured format for the current culture to be used and is also human + readable. - The preferred order of choosing a datetime format is JulianDay, ISO8601, and then Ticks. Ticks is mainly present for legacy - code support. - + The preferred order of choosing a DateTime format is JulianDay, ISO8601, + and then Ticks. Ticks is mainly present for legacy code support. + @@ -2996,17 +4869,17 @@ - - This enum determines how SQLite treats its journal file. - - - By default SQLite will create and delete the journal file when needed during a transaction. - However, for some computers running certain filesystem monitoring tools, the rapid - creation and deletion of the journal file can cause those programs to fail, or to interfere with SQLite. + + This enum determines how SQLite treats its journal file. + + + By default SQLite will create and delete the journal file when needed during a transaction. + However, for some computers running certain filesystem monitoring tools, the rapid + creation and deletion of the journal file can cause those programs to fail, or to interfere with SQLite. - If a program or virus scanner is interfering with SQLite's journal file, you may receive errors like "unable to open database file" - when starting a transaction. If this is happening, you may want to change the default journal mode to Persist. - + If a program or virus scanner is interfering with SQLite's journal file, you may receive errors like "unable to open database file" + when starting a transaction. If this is happening, you may want to change the default journal mode to Persist. + @@ -3087,161 +4960,501 @@ slower. - + - Struct used internally to determine the datatype of a column in a resultset + The requested command execution type. This controls which method of the + object will be called. - + - The DbType of the column, or DbType.Object if it cannot be determined + Do nothing. No method will be called. - + - The affinity of a column, used for expressions or when Type is DbType.Object + The command is not expected to return a result -OR- the result is not + needed. The or + method + will be called. - + - SQLite implementation of DbDataAdapter. + The command is expected to return a scalar result -OR- the result should + be limited to a scalar result. The + or method will + be called. - - - This class is just a shell around the DbDataAdapter. Nothing from DbDataAdapter is overridden here, just a few constructors are defined. - + - Default constructor. + The command is expected to return result. + The or + method will + be called. - + - Constructs a data adapter using the specified select command. + Use the default command execution type. Using this value is the same + as using the value. - The select command to associate with the adapter. - + - Constructs a data adapter with the supplied select command text and associated with the specified connection. + The action code responsible for the current call into the authorizer. - The select command text to associate with the data adapter. - The connection to associate with the select command. - + - Constructs a data adapter with the specified select command text, and using the specified database connection string. + No action is being performed. This value should not be used from + external code. - The select command text to use to construct a select command. - A connection string suitable for passing to a new SQLiteConnection, which is associated with the select command. - + - Raised by the underlying DbDataAdapter when a row is being updated + No longer used. - The event's specifics - + + + An index will be created. The action-specific arguments are the + index name and the table name. + + + + - Raised by DbDataAdapter after a row is updated + A table will be created. The action-specific arguments are the + table name and a null value. - The event's specifics - + - Row updating event handler + A temporary index will be created. The action-specific arguments + are the index name and the table name. - + - Row updated event handler + A temporary table will be created. The action-specific arguments + are the table name and a null value. - + - Gets/sets the select command for this DataAdapter + A temporary trigger will be created. The action-specific arguments + are the trigger name and the table name. - + - Gets/sets the insert command for this DataAdapter + A temporary view will be created. The action-specific arguments are + the view name and a null value. - + - Gets/sets the update command for this DataAdapter + A trigger will be created. The action-specific arguments are the + trigger name and the table name. - + - Gets/sets the delete command for this DataAdapter + A view will be created. The action-specific arguments are the view + name and a null value. - + - SQLite implementation of DbDataReader. + A DELETE statement will be executed. The action-specific arguments + are the table name and a null value. - + - Underlying command this reader is attached to + An index will be dropped. The action-specific arguments are the + index name and the table name. - + - Index of the current statement in the command being processed + A table will be dropped. The action-specific arguments are the tables + name and a null value. - + - Current statement being Read() + A temporary index will be dropped. The action-specific arguments are + the index name and the table name. - + - State of the current statement being processed. - -1 = First Step() executed, so the first Read() will be ignored - 0 = Actively reading - 1 = Finished reading - 2 = Non-row-returning statement, no records + A temporary table will be dropped. The action-specific arguments are + the table name and a null value. - + - Number of records affected by the insert/update statements executed on the command + A temporary trigger will be dropped. The action-specific arguments + are the trigger name and the table name. - + - Count of fields (columns) in the row-returning statement currently being processed + A temporary view will be dropped. The action-specific arguments are + the view name and a null value. - + - Maps the field (column) names to their corresponding indexes within the results. + A trigger will be dropped. The action-specific arguments are the + trigger name and the table name. - + - Datatypes of active fields (columns) in the current statement, used for type-restricting data + A view will be dropped. The action-specific arguments are the view + name and a null value. - + - The behavior of the datareader + An INSERT statement will be executed. The action-specific arguments + are the table name and a null value. - + - If set, then dispose of the command object when the reader is finished + A PRAGMA statement will be executed. The action-specific arguments + are the name of the PRAGMA and the new value or a null value. - + - If set, then raise an exception when the object is accessed after being disposed. + A table column will be read. The action-specific arguments are the + table name and the column name. - + + + A SELECT statement will be executed. The action-specific arguments + are both null values. + + + + + A transaction will be started, committed, or rolled back. The + action-specific arguments are the name of the operation (BEGIN, + COMMIT, or ROLLBACK) and a null value. + + + + + An UPDATE statement will be executed. The action-specific arguments + are the table name and the column name. + + + + + A database will be attached to the connection. The action-specific + arguments are the database file name and a null value. + + + + + A database will be detached from the connection. The action-specific + arguments are the database name and a null value. + + + + + The schema of a table will be altered. The action-specific arguments + are the database name and the table name. + + + + + An index will be deleted and then recreated. The action-specific + arguments are the index name and a null value. + + + + + A table will be analyzed to gathers statistics about it. The + action-specific arguments are the table name and a null value. + + + + + A virtual table will be created. The action-specific arguments are + the table name and the module name. + + + + + A virtual table will be dropped. The action-specific arguments are + the table name and the module name. + + + + + A SQL function will be called. The action-specific arguments are a + null value and the function name. + + + + + A savepoint will be created, released, or rolled back. The + action-specific arguments are the name of the operation (BEGIN, + RELEASE, or ROLLBACK) and the savepoint name. + + + + + A recursive query will be executed. The action-specific arguments + are two null values. + + + + + The return code for the current call into the authorizer. + + + + + The action will be allowed. + + + + + The overall action will be disallowed and an error message will be + returned from the query preparation method. + + + + + The specific action will be disallowed; however, the overall action + will continue. The exact effects of this return code vary depending + on the specific action, please refer to the SQLite core library + documentation for futher details. + + + + + Class used internally to determine the datatype of a column in a resultset + + + + + The DbType of the column, or DbType.Object if it cannot be determined + + + + + The affinity of a column, used for expressions or when Type is DbType.Object + + + + + Constructs a default instance of this type. + + + + + Constructs an instance of this type with the specified field values. + + + The type affinity to use for the new instance. + + + The database type to use for the new instance. + + + + + SQLite implementation of DbDataAdapter. + + + + + This class is just a shell around the DbDataAdapter. Nothing from + DbDataAdapter is overridden here, just a few constructors are defined. + + + Default constructor. + + + + + Constructs a data adapter using the specified select command. + + + The select command to associate with the adapter. + + + + + Constructs a data adapter with the supplied select command text and + associated with the specified connection. + + + The select command text to associate with the data adapter. + + + The connection to associate with the select command. + + + + + Constructs a data adapter with the specified select command text, + and using the specified database connection string. + + + The select command text to use to construct a select command. + + + A connection string suitable for passing to a new SQLiteConnection, + which is associated with the select command. + + + + + Constructs a data adapter with the specified select command text, + and using the specified database connection string. + + + The select command text to use to construct a select command. + + + A connection string suitable for passing to a new SQLiteConnection, + which is associated with the select command. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Raised by the underlying DbDataAdapter when a row is being updated + + The event's specifics + + + + Raised by DbDataAdapter after a row is updated + + The event's specifics + + + + Row updating event handler + + + + + Row updated event handler + + + + + Gets/sets the select command for this DataAdapter + + + + + Gets/sets the insert command for this DataAdapter + + + + + Gets/sets the update command for this DataAdapter + + + + + Gets/sets the delete command for this DataAdapter + + + + + SQLite implementation of DbDataReader. + + + + + Underlying command this reader is attached to + + + + + The flags pertaining to the associated connection (via the command). + + + + + Index of the current statement in the command being processed + + + + + Current statement being Read() + + + + + State of the current statement being processed. + -1 = First Step() executed, so the first Read() will be ignored + 0 = Actively reading + 1 = Finished reading + 2 = Non-row-returning statement, no records + + + + + Number of records affected by the insert/update statements executed on the command + + + + + Count of fields (columns) in the row-returning statement currently being processed + + + + + The number of calls to Step() that have returned true (i.e. the number of rows that + have been read in the current result set). + + + + + Maps the field (column) names to their corresponding indexes within the results. + + + + + Datatypes of active fields (columns) in the current statement, used for type-restricting data + + + + + The behavior of the datareader + + + + + If set, then dispose of the command object when the reader is finished + + + + + If set, then raise an exception when the object is accessed after being disposed. + + + An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified @@ -3292,20 +5505,26 @@
Returns a DbEnumerator object.
- + - SQLite is inherently un-typed. All datatypes in SQLite are natively strings. The definition of the columns of a table - and the affinity of returned types are all we have to go on to type-restrict data in the reader. - - This function attempts to verify that the type of data being requested of a column matches the datatype of the column. In - the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob) - to a set of known types that closely match that affinity. It's not an exact science, but its the best we can do. + Forces the connection flags cached by this data reader to be refreshed + from the underlying connection. - - This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity. - - The index of the column to type-check - The type we want to get out of the column + + + + SQLite is inherently un-typed. All datatypes in SQLite are natively strings. The definition of the columns of a table + and the affinity of returned types are all we have to go on to type-restrict data in the reader. + + This function attempts to verify that the type of data being requested of a column matches the datatype of the column. In + the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob) + to a set of known types that closely match that affinity. It's not an exact science, but its the best we can do. + + + This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity. + + The index of the column to type-check + The type we want to get out of the column @@ -3493,10 +5712,35 @@ True if the command was successful and a new resultset is available, False otherwise. - + + + This method attempts to query the database connection associated with + the data reader in use. If the underlying command or connection is + unavailable, a null value will be returned. + + + The connection object -OR- null if it is unavailable. + + + + + Retrieves the SQLiteType for a given column and row value. + + + The original SQLiteType structure, based only on the column. + + + The textual value of the column for a given row. + + + The SQLiteType structure. + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + The flags associated with the parent connection object. The index of the column to retrieve A SQLiteType structure @@ -3516,6 +5760,11 @@ Returns the number of columns in the current resultset
+ + + Returns the number of rows seen so far in the current result set. + + Returns the number of visible fields in the current resultset @@ -3626,9 +5875,9 @@ Optional detailed error message. Error message text for the return code. - + - Gets the associated SQLite return code for this exception as a + Gets the associated SQLite result code for this exception as a . This property returns the same underlying value as the property. @@ -3640,7 +5889,7 @@ this property overrides the property of the same name within the class. This property returns the same underlying value as the - property. + property. @@ -3651,6 +5900,12 @@ something of a misnomer.
+ + + The error code is unknown. This error code + is only used by the managed wrapper itself. + + Successful result @@ -3786,7 +6041,17 @@ File opened that is not a database file - + + + Notifications from sqlite3_log() + + + + + Warnings from sqlite3_log() + + + sqlite3_step() has another row ready @@ -3796,6 +6061,11 @@ sqlite3_step() has finished executing
+ + + Used to mask off extended result codes + + SQLite implementation of . @@ -3866,28 +6136,22 @@ - - This abstract class is designed to handle user-defined functions easily. An instance of the derived class is made for each - connection to the database. - - - Although there is one instance of a class derived from SQLiteFunction per database connection, the derived class has no access - to the underlying connection. This is necessary to deter implementers from thinking it would be a good idea to make database - calls during processing. + + This abstract class is designed to handle user-defined functions easily. An instance of the derived class is made for each + connection to the database. + + + Although there is one instance of a class derived from SQLiteFunction per database connection, the derived class has no access + to the underlying connection. This is necessary to deter implementers from thinking it would be a good idea to make database + calls during processing. - It is important to distinguish between a per-connection instance, and a per-SQL statement context. One instance of this class - services all SQL statements being stepped through on that connection, and there can be many. One should never store per-statement - information in member variables of user-defined function classes. + It is important to distinguish between a per-connection instance, and a per-SQL statement context. One instance of this class + services all SQL statements being stepped through on that connection, and there can be many. One should never store per-statement + information in member variables of user-defined function classes. - For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step. This data will - be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes. - - - - - The error code used for logging exceptions caught in user-provided - code. - + For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step. This data will + be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes. + @@ -3940,6 +6204,28 @@ Internal constructor, initializes the function's internal variables. + + + Constructs an instance of this class using the specified data-type + conversion parameters. + + + The DateTime format to be used when converting string values to a + DateTime and binding DateTime parameters. + + + The to be used when creating DateTime + values. + + + The format string to be used when parsing and formatting DateTime + values. + + + Non-zero to create a UTF-16 data-type conversion context; otherwise, + a UTF-8 data-type conversion context will be created. + + Disposes of any active contextData variables that were not automatically cleaned up. Sometimes this can happen if @@ -4104,7 +6390,27 @@ The base object on which the functions are to bind The flags associated with the parent connection object - Returns an array of functions which the connection object should retain until the connection is closed. + Returns a logical list of functions which the connection should retain until it is closed. + + + + This function binds a user-defined functions to a connection. + + + The object instance associated with the + that the function should be bound to. + + + The object instance containing + the metadata for the function to be bound. + + + The object instance that implements the + function to be bound. + + + The flags associated with the parent connection object. + @@ -4153,9 +6459,9 @@ An internal callback delegate declaration. - Raw context pointer for the user function - Count of arguments to the function - A pointer to the array of argument pointers + Raw native context pointer for the user function. + Total number of arguments to the user function. + Raw native pointer to the array of raw native argument pointers. @@ -4272,6 +6578,21 @@ Default constructor, initializes the internal variables for the function. + + + Constructs an instance of this class. + + + The name of the function, as seen by the SQLite core library. + + + The number of arguments that the function will accept. + + + The type of function being declared. This will either be Scalar, + Aggregate, or Collation. + + The function's name as it will be used in SQLite command text. @@ -4287,6 +6608,12 @@ The type of function this implementation will be. + + + The object instance that describes the class + containing the implementation for the associated function. + + This class provides key info for a given SQLite statement. @@ -5011,7 +7338,7 @@ - Returns true + Returns false @@ -5132,16 +7459,6 @@ Bind all parameters, making sure the caller didn't miss any - - - Attempts to convert an arbitrary object to the Boolean data type. - Null object values are converted to false. Throws a SQLiteException - upon failure. - - The object value to convert. - The format provider to use. - The converted boolean value. - Perform the bind operation for an individual parameter @@ -5196,61 +7513,92 @@ Gets the isolation level of the transaction. SQLite only supports Serializable transactions. - + - A strongly-typed resource class, for looking up localized strings, etc. + The file extension used for dynamic link libraries. - + - Returns the cached ResourceManager instance used by this class. + The file extension used for the XML configuration file. - + - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. + This is the name of the XML configuration file specific to the + System.Data.SQLite assembly. - - - Looks up a localized string similar to <?xml version="1.0" standalone="yes"?> - <DocumentElement> - <DataTypes> - <TypeName>smallint</TypeName> - <ProviderDbType>10</ProviderDbType> - <ColumnSize>5</ColumnSize> - <DataType>System.Int16</DataType> - <CreateFormat>smallint</CreateFormat> - <IsAutoIncrementable>false</IsAutoIncrementable> - <IsCaseSensitive>false</IsCaseSensitive> - <IsFixedLength>true</IsFixedLength> - <IsFixedPrecisionScale>true</IsFixedPrecisionScale> - <IsLong>false</IsLong> - <IsNullable>true</ [rest of string was truncated]";. - + + + This lock is used to protect the static _SQLiteNativeModuleFileName, + _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields. + - + - Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE. + This dictionary stores the mappings between processor architecture + names and platform names. These mappings are now used for two + purposes. First, they are used to determine if the assembly code + base should be used instead of the location, based upon whether one + or more of the named sub-directories exist within the assembly code + base. Second, they are used to assist in loading the appropriate + SQLite interop assembly into the current process. - - - Looks up a localized string similar to <?xml version="1.0" encoding="utf-8" ?> - <DocumentElement> - <MetaDataCollections> - <CollectionName>MetaDataCollections</CollectionName> - <NumberOfRestrictions>0</NumberOfRestrictions> - <NumberOfIdentifierParts>0</NumberOfIdentifierParts> - </MetaDataCollections> - <MetaDataCollections> - <CollectionName>DataSourceInformation</CollectionName> - <NumberOfRestrictions>0</NumberOfRestrictions> - <NumberOfIdentifierParts>0</NumberOfIdentifierParts> - </MetaDataCollections> - <MetaDataC [rest of string was truncated]";. - + + + For now, this method simply calls the Initialize method. + + + + + Attempts to initialize this class by pre-loading the native SQLite + library for the processor architecture of the current process. + + + + + Queries and returns the XML configuration file name for the assembly + containing the managed System.Data.SQLite components. + + + The XML configuration file name -OR- null if it cannot be determined + or does not exist. + + + + + Queries and returns the value of the specified setting, using the XML + configuration file and/or the environment variables for the current + process and/or the current system, when available. + + + The name of the setting. + + + The value to be returned if the setting has not been set explicitly + or cannot be determined. + + + The value of the setting -OR- the default value specified by + if it has not been set explicitly or + cannot be determined. By default, all references to existing + environment variables will be expanded to their corresponding values + within the value to be returned unless either the "No_Expand" or + "No_Expand_" environment variable is set [to + anything]. + + + + + Queries and returns the directory for the assembly currently being + executed. + + + The directory for the assembly currently being executed -OR- null if + it cannot be determined. + @@ -5271,34 +7619,36 @@ The native module handle upon success -OR- IntPtr.Zero on failure. - - - This lock is used to protect the static _SQLiteModule and - processorArchitecturePlatforms fields, below. - - - + - Stores the mappings between processor architecture names and platform - names. + The native module file name for the native SQLite library or null. - + The native module handle for the native SQLite library or the value IntPtr.Zero. - - - For now, this method simply calls the Initialize method. - - - + - Attempts to initialize this class by pre-loading the native SQLite - library for the processor architecture of the current process. + Searches for the native SQLite library in the directory containing + the assembly currently being executed as well as the base directory + for the current application domain. + + Upon success, this parameter will be modified to refer to the base + directory containing the native SQLite library. + + + Upon success, this parameter will be modified to refer to the name + of the immediate directory (i.e. the offset from the base directory) + containing the native SQLite library. + + + Non-zero (success) if the native SQLite library was found; otherwise, + zero (failure). + @@ -5330,8 +7680,7 @@ The processor architecture of the current process -OR- null if it - cannot be determined. Always returns an empty string when running on - the .NET Compact Framework. + cannot be determined. @@ -5346,12 +7695,12 @@ if it cannot be determined. - + Attempts to load the native SQLite library based on the specified directory and processor architecture. - + The base directory to use, null for default (the base directory of the current application domain). This directory should contain the processor architecture specific sub-directories. @@ -5361,10 +7710,5830 @@ processor architecture of the current process). This caller should almost always specify null for this parameter. + + The candidate native module file name to load will be stored here, + if necessary. + + + The native module handle as returned by LoadLibrary will be stored + here, if necessary. This value will be IntPtr.Zero if the call to + LoadLibrary fails. + - The native module handle as returned by LoadLibrary -OR- IntPtr.Zero - if the loading fails for any reason. + Non-zero if the native module was loaded successfully; otherwise, + zero. + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to <?xml version="1.0" standalone="yes"?> + <DocumentElement> + <DataTypes> + <TypeName>smallint</TypeName> + <ProviderDbType>10</ProviderDbType> + <ColumnSize>5</ColumnSize> + <DataType>System.Int16</DataType> + <CreateFormat>smallint</CreateFormat> + <IsAutoIncrementable>false</IsAutoIncrementable> + <IsCaseSensitive>false</IsCaseSensitive> + <IsFixedLength>true</IsFixedLength> + <IsFixedPrecisionScale>true</IsFixedPrecisionScale> + <IsLong>false</IsLong> + <IsNullable>true</ [rest of string was truncated]";. + + + + + Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE. + + + + + Looks up a localized string similar to <?xml version="1.0" encoding="utf-8" ?> + <DocumentElement> + <MetaDataCollections> + <CollectionName>MetaDataCollections</CollectionName> + <NumberOfRestrictions>0</NumberOfRestrictions> + <NumberOfIdentifierParts>0</NumberOfIdentifierParts> + </MetaDataCollections> + <MetaDataCollections> + <CollectionName>DataSourceInformation</CollectionName> + <NumberOfRestrictions>0</NumberOfRestrictions> + <NumberOfIdentifierParts>0</NumberOfIdentifierParts> + </MetaDataCollections> + <MetaDataC [rest of string was truncated]";. + + + + + This class represents a context from the SQLite core library that can + be passed to the sqlite3_result_*() and associated functions. + + + + + This interface represents a native handle provided by the SQLite core + library. + + + + + The native handle value. + + + + + The native context handle. + + + + + Constructs an instance of this class using the specified native + context handle. + + + The native context handle to use. + + + + + Sets the context result to NULL. + + + + + Sets the context result to the specified + value. + + + The value to use. + + + + + Sets the context result to the specified + value. + + + The value to use. + + + + + Sets the context result to the specified + value. + + + The value to use. + + + + + Sets the context result to the specified + value. + + + The value to use. This value will be + converted to the UTF-8 encoding prior to being used. + + + + + Sets the context result to the specified + value containing an error message. + + + The value containing the error message text. + This value will be converted to the UTF-8 encoding prior to being + used. + + + + + Sets the context result to the specified + value. + + + The value to use. + + + + + Sets the context result to contain the error code SQLITE_TOOBIG. + + + + + Sets the context result to contain the error code SQLITE_NOMEM. + + + + + Sets the context result to the specified array + value. + + + The array value to use. + + + + + Sets the context result to a BLOB of zeros of the specified size. + + + The number of zero bytes to use for the BLOB context result. + + + + + Sets the context result to the specified . + + + The to use. + + + + + Returns the underlying SQLite native handle associated with this + object instance. + + + + + This class represents a value from the SQLite core library that can be + passed to the sqlite3_value_*() and associated functions. + + + + + The native value handle. + + + + + Constructs an instance of this class using the specified native + value handle. + + + The native value handle to use. + + + + + Invalidates the native value handle, thereby preventing further + access to it from this object instance. + + + + + Converts a logical array of native pointers to native sqlite3_value + structures into a managed array of + object instances. + + + The number of elements in the logical array of native sqlite3_value + structures. + + + The native pointer to the logical array of native sqlite3_value + structures to convert. + + + The managed array of object instances or + null upon failure. + + + + + Gets and returns the type affinity associated with this value. + + + The type affinity associated with this value. + + + + + Gets and returns the number of bytes associated with this value, if + it refers to a UTF-8 encoded string. + + + The number of bytes associated with this value. The returned value + may be zero. + + + + + Gets and returns the associated with this + value. + + + The associated with this value. + + + + + Gets and returns the associated with + this value. + + + The associated with this value. + + + + + Gets and returns the associated with this + value. + + + The associated with this value. + + + + + Gets and returns the associated with this + value. + + + The associated with this value. The value is + converted from the UTF-8 encoding prior to being returned. + + + + + Gets and returns the array associated with this + value. + + + The array associated with this value. + + + + + Uses the native value handle to obtain and store the managed value + for this object instance, thus saving it for later use. The type + of the managed value is determined by the type affinity of the + native value. If the type affinity is not recognized by this + method, no work is done and false is returned. + + + Non-zero if the native value was persisted successfully. + + + + + Returns the underlying SQLite native handle associated with this + object instance. + + + + + Returns non-zero if the native SQLite value has been successfully + persisted as a managed value within this object instance (i.e. the + property may then be read successfully). + + + + + If the managed value for this object instance is available (i.e. it + has been previously persisted via the ) method, + that value is returned; otherwise, an exception is thrown. The + returned value may be null. + + + + + These are the allowed values for the operators that are part of a + constraint term in the WHERE clause of a query that uses a virtual + table. + + + + + This value represents the equality operator. + + + + + This value represents the greater than operator. + + + + + This value represents the less than or equal to operator. + + + + + This value represents the less than operator. + + + + + This value represents the greater than or equal to operator. + + + + + This value represents the MATCH operator. + + + + + This class represents the native sqlite3_index_constraint structure + from the SQLite core library. + + + + + Constructs an instance of this class using the specified native + sqlite3_index_constraint structure. + + + The native sqlite3_index_constraint structure to use. + + + + + Constructs an instance of this class using the specified field + values. + + + Column on left-hand side of constraint. + + + Constraint operator (). + + + True if this constraint is usable. + + + Used internally - + should ignore. + + + + + Column on left-hand side of constraint. + + + + + Constraint operator (). + + + + + True if this constraint is usable. + + + + + Used internally - + should ignore. + + + + + This class represents the native sqlite3_index_orderby structure from + the SQLite core library. + + + + + Constructs an instance of this class using the specified native + sqlite3_index_orderby structure. + + + The native sqlite3_index_orderby structure to use. + + + + + Constructs an instance of this class using the specified field + values. + + + Column number. + + + True for DESC. False for ASC. + + + + + Column number. + + + + + True for DESC. False for ASC. + + + + + This class represents the native sqlite3_index_constraint_usage + structure from the SQLite core library. + + + + + Constructs an instance of this class using the specified native + sqlite3_index_constraint_usage structure. + + + The native sqlite3_index_constraint_usage structure to use. + + + + + Constructs an instance of this class using the specified field + values. + + + If greater than 0, constraint is part of argv to xFilter. + + + Do not code a test for this constraint. + + + + + If greater than 0, constraint is part of argv to xFilter. + + + + + Do not code a test for this constraint. + + + + + This class represents the various inputs provided by the SQLite core + library to the method. + + + + + Constructs an instance of this class. + + + The number of instances to + pre-allocate space for. + + + The number of instances to + pre-allocate space for. + + + + + An array of object instances, + each containing information supplied by the SQLite core library. + + + + + An array of object instances, + each containing information supplied by the SQLite core library. + + + + + This class represents the various outputs provided to the SQLite core + library by the method. + + + + + Constructs an instance of this class. + + + The number of instances + to pre-allocate space for. + + + + + Determines if the native estimatedRows field can be used, based on + the available version of the SQLite core library. + + + Non-zero if the property is supported + by the SQLite core library. + + + + + An array of object + instances, each containing information to be supplied to the SQLite + core library. + + + + + Number used to help identify the selected index. This value will + later be provided to the + method. + + + + + String used to help identify the selected index. This value will + later be provided to the + method. + + + + + Non-zero if the index string must be freed by the SQLite core + library. + + + + + True if output is already ordered. + + + + + Estimated cost of using this index. Using a null value here + indicates that a default estimated cost value should be used. + + + + + Estimated number of rows returned. Using a null value here + indicates that a default estimated rows value should be used. + + + + + This class represents the various inputs and outputs used with the + method. + + + + + Constructs an instance of this class. + + + The number of (and + ) instances to + pre-allocate space for. + + + The number of instances to + pre-allocate space for. + + + + + Converts a native pointer to a native sqlite3_index_info structure + into a new object instance. + + + The native pointer to the native sqlite3_index_info structure to + convert. + + + Upon success, this parameter will be modified to contain the newly + created object instance. + + + + + Populates the outputs of a pre-allocated native sqlite3_index_info + structure using an existing object + instance. + + + The existing object instance containing + the output data to use. + + + The native pointer to the pre-allocated native sqlite3_index_info + structure. + + + + + The object instance containing + the inputs to the + method. + + + + + The object instance containing + the outputs from the + method. + + + + + This class represents a managed virtual table implementation. It is + not sealed and should be used as the base class for any user-defined + virtual table classes implemented in managed code. + + + + + The index within the array of strings provided to the + and + methods containing the + name of the module implementing this virtual table. + + + + + The index within the array of strings provided to the + and + methods containing the + name of the database containing this virtual table. + + + + + The index within the array of strings provided to the + and + methods containing the + name of the virtual table. + + + + + Constructs an instance of this class. + + + The original array of strings provided to the + and + methods. + + + + + This method should normally be used by the + method in order to + perform index selection based on the constraints provided by the + SQLite core library. + + + The object instance containing all the + data for the inputs and outputs relating to index selection. + + + Non-zero upon success. + + + + + Attempts to record the renaming of the virtual table associated + with this object instance. + + + The new name for the virtual table. + + + Non-zero upon success. + + + + + Disposes of this object instance. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is being called + from the finalizer. + + + + + Finalizes this object instance. + + + + + The original array of strings provided to the + and + methods. + + + + + The name of the module implementing this virtual table. + + + + + The name of the database containing this virtual table. + + + + + The name of the virtual table. + + + + + The object instance containing all the + data for the inputs and outputs relating to the most recent index + selection. + + + + + Returns the underlying SQLite native handle associated with this + object instance. + + + + + This class represents a managed virtual table cursor implementation. + It is not sealed and should be used as the base class for any + user-defined virtual table cursor classes implemented in managed code. + + + + + This value represents an invalid integer row sequence number. + + + + + The field holds the integer row sequence number for the current row + pointed to by this cursor object instance. + + + + + Constructs an instance of this class. + + + The object instance associated + with this object instance. + + + + + Constructs an instance of this class. + + + + + Attempts to persist the specified object + instances in order to make them available after the + method returns. + + + The array of object instances to be + persisted. + + + The number of object instances that were + successfully persisted. + + + + + This method should normally be used by the + method in order to + perform filtering of the result rows and/or to record the filtering + criteria provided by the SQLite core library. + + + Number used to help identify the selected index. + + + String used to help identify the selected index. + + + The values corresponding to each column in the selected index. + + + + + Determines the integer row sequence number for the current row. + + + The integer row sequence number for the current row -OR- zero if + it cannot be determined. + + + + + Adjusts the integer row sequence number so that it refers to the + next row. + + + + + Disposes of this object instance. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is being called + from the finalizer. + + + + + Finalizes this object instance. + + + + + The object instance associated + with this object instance. + + + + + Number used to help identify the selected index. This value will + be set via the method. + + + + + String used to help identify the selected index. This value will + be set via the method. + + + + + The values used to filter the rows returned via this cursor object + instance. This value will be set via the + method. + + + + + Returns the underlying SQLite native handle associated with this + object instance. + + + + + This interface represents a virtual table implementation written in + native code. + + + + + + This method is called to create a new instance of a virtual table + in response to a CREATE VIRTUAL TABLE statement. The db parameter + is a pointer to the SQLite database connection that is executing + the CREATE VIRTUAL TABLE statement. The pAux argument is the copy + of the client data pointer that was the fourth argument to the + sqlite3_create_module() or sqlite3_create_module_v2() call that + registered the virtual table module. The argv parameter is an + array of argc pointers to null terminated strings. The first + string, argv[0], is the name of the module being invoked. The + module name is the name provided as the second argument to + sqlite3_create_module() and as the argument to the USING clause of + the CREATE VIRTUAL TABLE statement that is running. The second, + argv[1], is the name of the database in which the new virtual table + is being created. The database name is "main" for the primary + database, or "temp" for TEMP database, or the name given at the + end of the ATTACH statement for attached databases. The third + element of the array, argv[2], is the name of the new virtual + table, as specified following the TABLE keyword in the CREATE + VIRTUAL TABLE statement. If present, the fourth and subsequent + strings in the argv[] array report the arguments to the module name + in the CREATE VIRTUAL TABLE statement. + + + The job of this method is to construct the new virtual table object + (an sqlite3_vtab object) and return a pointer to it in *ppVTab. + + + As part of the task of creating a new sqlite3_vtab structure, this + method must invoke sqlite3_declare_vtab() to tell the SQLite core + about the columns and datatypes in the virtual table. The + sqlite3_declare_vtab() API has the following prototype: + + + + int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable) + + + + The first argument to sqlite3_declare_vtab() must be the same + database connection pointer as the first parameter to this method. + The second argument to sqlite3_declare_vtab() must a + zero-terminated UTF-8 string that contains a well-formed CREATE + TABLE statement that defines the columns in the virtual table and + their data types. The name of the table in this CREATE TABLE + statement is ignored, as are all constraints. Only the column names + and datatypes matter. The CREATE TABLE statement string need not to + be held in persistent memory. The string can be deallocated and/or + reused as soon as the sqlite3_declare_vtab() routine returns. + + + + The native database connection handle. + + + The original native pointer value that was provided to the + sqlite3_create_module(), sqlite3_create_module_v2() or + sqlite3_create_disposable_module() functions. + + + The number of arguments from the CREATE VIRTUAL TABLE statement. + + + The array of string arguments from the CREATE VIRTUAL TABLE + statement. + + + Upon success, this parameter must be modified to point to the newly + created native sqlite3_vtab derived structure. + + + Upon failure, this parameter must be modified to point to the error + message, with the underlying memory having been obtained from the + sqlite3_malloc() function. + + + A standard SQLite return code. + + + + + + The xConnect method is very similar to xCreate. It has the same + parameters and constructs a new sqlite3_vtab structure just like + xCreate. And it must also call sqlite3_declare_vtab() like xCreate. + + + The difference is that xConnect is called to establish a new + connection to an existing virtual table whereas xCreate is called + to create a new virtual table from scratch. + + + The xCreate and xConnect methods are only different when the + virtual table has some kind of backing store that must be + initialized the first time the virtual table is created. The + xCreate method creates and initializes the backing store. The + xConnect method just connects to an existing backing store. + + + As an example, consider a virtual table implementation that + provides read-only access to existing comma-separated-value (CSV) + files on disk. There is no backing store that needs to be created + or initialized for such a virtual table (since the CSV files + already exist on disk) so the xCreate and xConnect methods will be + identical for that module. + + + Another example is a virtual table that implements a full-text + index. The xCreate method must create and initialize data + structures to hold the dictionary and posting lists for that index. + The xConnect method, on the other hand, only has to locate and use + an existing dictionary and posting lists that were created by a + prior xCreate call. + + + The xConnect method must return SQLITE_OK if it is successful in + creating the new virtual table, or SQLITE_ERROR if it is not + successful. If not successful, the sqlite3_vtab structure must not + be allocated. An error message may optionally be returned in *pzErr + if unsuccessful. Space to hold the error message string must be + allocated using an SQLite memory allocation function like + sqlite3_malloc() or sqlite3_mprintf() as the SQLite core will + attempt to free the space using sqlite3_free() after the error has + been reported up to the application. + + + The xConnect method is required for every virtual table + implementation, though the xCreate and xConnect pointers of the + sqlite3_module object may point to the same function the virtual + table does not need to initialize backing store. + + + + The native database connection handle. + + + The original native pointer value that was provided to the + sqlite3_create_module(), sqlite3_create_module_v2() or + sqlite3_create_disposable_module() functions. + + + The number of arguments from the CREATE VIRTUAL TABLE statement. + + + The array of string arguments from the CREATE VIRTUAL TABLE + statement. + + + Upon success, this parameter must be modified to point to the newly + created native sqlite3_vtab derived structure. + + + Upon failure, this parameter must be modified to point to the error + message, with the underlying memory having been obtained from the + sqlite3_malloc() function. + + + A standard SQLite return code. + + + + + + SQLite uses the xBestIndex method of a virtual table module to + determine the best way to access the virtual table. The xBestIndex + method has a prototype like this: + + + int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*); + + + The SQLite core communicates with the xBestIndex method by filling + in certain fields of the sqlite3_index_info structure and passing a + pointer to that structure into xBestIndex as the second parameter. + The xBestIndex method fills out other fields of this structure + which forms the reply. The sqlite3_index_info structure looks like + this: + + + struct sqlite3_index_info { + /* Inputs */ + const int nConstraint; /* Number of entries in aConstraint */ + const struct sqlite3_index_constraint { + int iColumn; /* Column on left-hand side of + * constraint */ + unsigned char op; /* Constraint operator */ + unsigned char usable; /* True if this constraint is usable */ + int iTermOffset; /* Used internally - xBestIndex should + * ignore */ + } *const aConstraint; /* Table of WHERE clause constraints */ + const int nOrderBy; /* Number of terms in the ORDER BY + * clause */ + const struct sqlite3_index_orderby { + int iColumn; /* Column number */ + unsigned char desc; /* True for DESC. False for ASC. */ + } *const aOrderBy; /* The ORDER BY clause */ + /* Outputs */ + struct sqlite3_index_constraint_usage { + int argvIndex; /* if greater than zero, constraint is + * part of argv to xFilter */ + unsigned char omit; /* Do not code a test for this + * constraint */ + } *const aConstraintUsage; + int idxNum; /* Number used to identify the index */ + char *idxStr; /* String, possibly obtained from + * sqlite3_malloc() */ + int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if + * true */ + int orderByConsumed; /* True if output is already ordered */ + double estimatedCost; /* Estimated cost of using this index */ + }; + + + In addition, there are some defined constants: + + + #define SQLITE_INDEX_CONSTRAINT_EQ 2 + #define SQLITE_INDEX_CONSTRAINT_GT 4 + #define SQLITE_INDEX_CONSTRAINT_LE 8 + #define SQLITE_INDEX_CONSTRAINT_LT 16 + #define SQLITE_INDEX_CONSTRAINT_GE 32 + #define SQLITE_INDEX_CONSTRAINT_MATCH 64 + + + The SQLite core calls the xBestIndex method when it is compiling a + query that involves a virtual table. In other words, SQLite calls + this method when it is running sqlite3_prepare() or the equivalent. + By calling this method, the SQLite core is saying to the virtual + table that it needs to access some subset of the rows in the + virtual table and it wants to know the most efficient way to do + that access. The xBestIndex method replies with information that + the SQLite core can then use to conduct an efficient search of the + virtual table. + + + While compiling a single SQL query, the SQLite core might call + xBestIndex multiple times with different settings in + sqlite3_index_info. The SQLite core will then select the + combination that appears to give the best performance. + + + Before calling this method, the SQLite core initializes an instance + of the sqlite3_index_info structure with information about the + query that it is currently trying to process. This information + derives mainly from the WHERE clause and ORDER BY or GROUP BY + clauses of the query, but also from any ON or USING clauses if the + query is a join. The information that the SQLite core provides to + the xBestIndex method is held in the part of the structure that is + marked as "Inputs". The "Outputs" section is initialized to zero. + + + The information in the sqlite3_index_info structure is ephemeral + and may be overwritten or deallocated as soon as the xBestIndex + method returns. If the xBestIndex method needs to remember any part + of the sqlite3_index_info structure, it should make a copy. Care + must be take to store the copy in a place where it will be + deallocated, such as in the idxStr field with needToFreeIdxStr set + to 1. + + + Note that xBestIndex will always be called before xFilter, since + the idxNum and idxStr outputs from xBestIndex are required inputs + to xFilter. However, there is no guarantee that xFilter will be + called following a successful xBestIndex. + + + The xBestIndex method is required for every virtual table + implementation. + + + 2.3.1 Inputs + + + The main thing that the SQLite core is trying to communicate to the + virtual table is the constraints that are available to limit the + number of rows that need to be searched. The aConstraint[] array + contains one entry for each constraint. There will be exactly + nConstraint entries in that array. + + + Each constraint will correspond to a term in the WHERE clause or in + a USING or ON clause that is of the form + + + column OP EXPR + + + Where "column" is a column in the virtual table, OP is an operator + like "=" or "<", and EXPR is an arbitrary expression. So, for + example, if the WHERE clause contained a term like this: + + + a = 5 + + + Then one of the constraints would be on the "a" column with + operator "=" and an expression of "5". Constraints need not have a + literal representation of the WHERE clause. The query optimizer + might make transformations to the WHERE clause in order to extract + as many constraints as it can. So, for example, if the WHERE clause + contained something like this: + + + x BETWEEN 10 AND 100 AND 999>y + + + The query optimizer might translate this into three separate + constraints: + + + x >= 10 + x <= 100 + y < 999 + + + For each constraint, the aConstraint[].iColumn field indicates + which column appears on the left-hand side of the constraint. The + first column of the virtual table is column 0. The rowid of the + virtual table is column -1. The aConstraint[].op field indicates + which operator is used. The SQLITE_INDEX_CONSTRAINT_* constants map + integer constants into operator values. Columns occur in the order + they were defined by the call to sqlite3_declare_vtab() in the + xCreate or xConnect method. Hidden columns are counted when + determining the column index. + + + The aConstraint[] array contains information about all constraints + that apply to the virtual table. But some of the constraints might + not be usable because of the way tables are ordered in a join. The + xBestIndex method must therefore only consider constraints that + have an aConstraint[].usable flag which is true. + + + In addition to WHERE clause constraints, the SQLite core also tells + the xBestIndex method about the ORDER BY clause. (In an aggregate + query, the SQLite core might put in GROUP BY clause information in + place of the ORDER BY clause information, but this fact should not + make any difference to the xBestIndex method.) If all terms of the + ORDER BY clause are columns in the virtual table, then nOrderBy + will be the number of terms in the ORDER BY clause and the + aOrderBy[] array will identify the column for each term in the + order by clause and whether or not that column is ASC or DESC. + + + 2.3.2 Outputs + + + Given all of the information above, the job of the xBestIndex + method it to figure out the best way to search the virtual table. + + + The xBestIndex method fills the idxNum and idxStr fields with + information that communicates an indexing strategy to the xFilter + method. The information in idxNum and idxStr is arbitrary as far as + the SQLite core is concerned. The SQLite core just copies the + information through to the xFilter method. Any desired meaning can + be assigned to idxNum and idxStr as long as xBestIndex and xFilter + agree on what that meaning is. + + + The idxStr value may be a string obtained from an SQLite memory + allocation function such as sqlite3_mprintf(). If this is the case, + then the needToFreeIdxStr flag must be set to true so that the + SQLite core will know to call sqlite3_free() on that string when it + has finished with it, and thus avoid a memory leak. + + + If the virtual table will output rows in the order specified by the + ORDER BY clause, then the orderByConsumed flag may be set to true. + If the output is not automatically in the correct order then + orderByConsumed must be left in its default false setting. This + will indicate to the SQLite core that it will need to do a separate + sorting pass over the data after it comes out of the virtual table. + + + The estimatedCost field should be set to the estimated number of + disk access operations required to execute this query against the + virtual table. The SQLite core will often call xBestIndex multiple + times with different constraints, obtain multiple cost estimates, + then choose the query plan that gives the lowest estimate. + + + The aConstraintUsage[] array contains one element for each of the + nConstraint constraints in the inputs section of the + sqlite3_index_info structure. The aConstraintUsage[] array is used + by xBestIndex to tell the core how it is using the constraints. + + + The xBestIndex method may set aConstraintUsage[].argvIndex entries + to values greater than one. Exactly one entry should be set to 1, + another to 2, another to 3, and so forth up to as many or as few as + the xBestIndex method wants. The EXPR of the corresponding + constraints will then be passed in as the argv[] parameters to + xFilter. + + + For example, if the aConstraint[3].argvIndex is set to 1, then when + xFilter is called, the argv[0] passed to xFilter will have the EXPR + value of the aConstraint[3] constraint. + + + By default, the SQLite core double checks all constraints on each + row of the virtual table that it receives. If such a check is + redundant, the xBestFilter method can suppress that double-check by + setting aConstraintUsage[].omit. + + + + The native pointer to the sqlite3_vtab derived structure. + + + The native pointer to the sqlite3_index_info structure. + + + A standard SQLite return code. + + + + + + This method releases a connection to a virtual table. Only the + sqlite3_vtab object is destroyed. The virtual table is not + destroyed and any backing store associated with the virtual table + persists. This method undoes the work of xConnect. + + + This method is a destructor for a connection to the virtual table. + Contrast this method with xDestroy. The xDestroy is a destructor + for the entire virtual table. + + + The xDisconnect method is required for every virtual table + implementation, though it is acceptable for the xDisconnect and + xDestroy methods to be the same function if that makes sense for + the particular virtual table. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + This method releases a connection to a virtual table, just like the + xDisconnect method, and it also destroys the underlying table + implementation. This method undoes the work of xCreate. + + + The xDisconnect method is called whenever a database connection + that uses a virtual table is closed. The xDestroy method is only + called when a DROP TABLE statement is executed against the virtual + table. + + + The xDestroy method is required for every virtual table + implementation, though it is acceptable for the xDisconnect and + xDestroy methods to be the same function if that makes sense for + the particular virtual table. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + The xOpen method creates a new cursor used for accessing (read + and/or writing) a virtual table. A successful invocation of this + method will allocate the memory for the sqlite3_vtab_cursor (or a + subclass), initialize the new object, and make *ppCursor point to + the new object. The successful call then returns SQLITE_OK. + + + For every successful call to this method, the SQLite core will + later invoke the xClose method to destroy the allocated cursor. + + + The xOpen method need not initialize the pVtab field of the + sqlite3_vtab_cursor structure. The SQLite core will take care of + that chore automatically. + + + A virtual table implementation must be able to support an arbitrary + number of simultaneously open cursors. + + + When initially opened, the cursor is in an undefined state. The + SQLite core will invoke the xFilter method on the cursor prior to + any attempt to position or read from the cursor. + + + The xOpen method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab derived structure. + + + Upon success, this parameter must be modified to point to the newly + created native sqlite3_vtab_cursor derived structure. + + + A standard SQLite return code. + + + + + + The xClose method closes a cursor previously opened by xOpen. The + SQLite core will always call xClose once for each cursor opened + using xOpen. + + + This method must release all resources allocated by the + corresponding xOpen call. The routine will not be called again even + if it returns an error. The SQLite core will not use the + sqlite3_vtab_cursor again after it has been closed. + + + The xClose method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + A standard SQLite return code. + + + + + + This method begins a search of a virtual table. The first argument + is a cursor opened by xOpen. The next two argument define a + particular search index previously chosen by xBestIndex. The + specific meanings of idxNum and idxStr are unimportant as long as + xFilter and xBestIndex agree on what that meaning is. + + + The xBestIndex function may have requested the values of certain + expressions using the aConstraintUsage[].argvIndex values of the + sqlite3_index_info structure. Those values are passed to xFilter + using the argc and argv parameters. + + + If the virtual table contains one or more rows that match the + search criteria, then the cursor must be left point at the first + row. Subsequent calls to xEof must return false (zero). If there + are no rows match, then the cursor must be left in a state that + will cause the xEof to return true (non-zero). The SQLite engine + will use the xColumn and xRowid methods to access that row content. + The xNext method will be used to advance to the next row. + + + This method must return SQLITE_OK if successful, or an sqlite error + code if an error occurs. + + + The xFilter method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + Number used to help identify the selected index. + + + The native pointer to the UTF-8 encoded string containing the + string used to help identify the selected index. + + + The number of native pointers to sqlite3_value structures specified + in . + + + An array of native pointers to sqlite3_value structures containing + filtering criteria for the selected index. + + + A standard SQLite return code. + + + + + + The xNext method advances a virtual table cursor to the next row of + a result set initiated by xFilter. If the cursor is already + pointing at the last row when this routine is called, then the + cursor no longer points to valid data and a subsequent call to the + xEof method must return true (non-zero). If the cursor is + successfully advanced to another row of content, then subsequent + calls to xEof must return false (zero). + + + This method must return SQLITE_OK if successful, or an sqlite error + code if an error occurs. + + + The xNext method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + A standard SQLite return code. + + + + + + The xEof method must return false (zero) if the specified cursor + currently points to a valid row of data, or true (non-zero) + otherwise. This method is called by the SQL engine immediately + after each xFilter and xNext invocation. + + + The xEof method is required for every virtual table implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + Non-zero if no more rows are available; zero otherwise. + + + + + + The SQLite core invokes this method in order to find the value for + the N-th column of the current row. N is zero-based so the first + column is numbered 0. The xColumn method may return its result back + to SQLite using one of the following interface: + + + sqlite3_result_blob() + sqlite3_result_double() + sqlite3_result_int() + sqlite3_result_int64() + sqlite3_result_null() + sqlite3_result_text() + sqlite3_result_text16() + sqlite3_result_text16le() + sqlite3_result_text16be() + sqlite3_result_zeroblob() + + + If the xColumn method implementation calls none of the functions + above, then the value of the column defaults to an SQL NULL. + + + To raise an error, the xColumn method should use one of the + result_text() methods to set the error message text, then return an + appropriate error code. The xColumn method must return SQLITE_OK on + success. + + + The xColumn method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + The native pointer to the sqlite3_context structure to be used + for returning the specified column value to the SQLite core + library. + + + The zero-based index corresponding to the column containing the + value to be returned. + + + A standard SQLite return code. + + + + + + A successful invocation of this method will cause *pRowid to be + filled with the rowid of row that the virtual table cursor pCur is + currently pointing at. This method returns SQLITE_OK on success. It + returns an appropriate error code on failure. + + + The xRowid method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the current row for the specified cursor. + + + A standard SQLite return code. + + + + + + All changes to a virtual table are made using the xUpdate method. + This one method can be used to insert, delete, or update. + + + The argc parameter specifies the number of entries in the argv + array. The value of argc will be 1 for a pure delete operation or + N+2 for an insert or replace or update where N is the number of + columns in the table. In the previous sentence, N includes any + hidden columns. + + + Every argv entry will have a non-NULL value in C but may contain + the SQL value NULL. In other words, it is always true that + argv[i]!=0 for i between 0 and argc-1. However, it might be the + case that sqlite3_value_type(argv[i])==SQLITE_NULL. + + + The argv[0] parameter is the rowid of a row in the virtual table + to be deleted. If argv[0] is an SQL NULL, then no deletion occurs. + + + The argv[1] parameter is the rowid of a new row to be inserted into + the virtual table. If argv[1] is an SQL NULL, then the + implementation must choose a rowid for the newly inserted row. + Subsequent argv[] entries contain values of the columns of the + virtual table, in the order that the columns were declared. The + number of columns will match the table declaration that the + xConnect or xCreate method made using the sqlite3_declare_vtab() + call. All hidden columns are included. + + + When doing an insert without a rowid (argc>1, argv[1] is an SQL + NULL), the implementation must set *pRowid to the rowid of the + newly inserted row; this will become the value returned by the + sqlite3_last_insert_rowid() function. Setting this value in all the + other cases is a harmless no-op; the SQLite engine ignores the + *pRowid return value if argc==1 or argv[1] is not an SQL NULL. + + + Each call to xUpdate will fall into one of cases shown below. Note + that references to argv[i] mean the SQL value held within the + argv[i] object, not the argv[i] object itself. + + + argc = 1 + + + The single row with rowid equal to argv[0] is deleted. No + insert occurs. + + + argc > 1 + argv[0] = NULL + + + A new row is inserted with a rowid argv[1] and column + values in argv[2] and following. If argv[1] is an SQL NULL, + the a new unique rowid is generated automatically. + + + argc > 1 + argv[0] ? NULL + argv[0] = argv[1] + + + The row with rowid argv[0] is updated with new values in + argv[2] and following parameters. + + + argc > 1 + argv[0] ? NULL + argv[0] ? argv[1] + + + The row with rowid argv[0] is updated with rowid argv[1] + and new values in argv[2] and following parameters. This + will occur when an SQL statement updates a rowid, as in + the statement: + + + UPDATE table SET rowid=rowid+1 WHERE ...; + + + The xUpdate method must return SQLITE_OK if and only if it is + successful. If a failure occurs, the xUpdate must return an + appropriate error code. On a failure, the pVTab->zErrMsg element + may optionally be replaced with error message text stored in memory + allocated from SQLite using functions such as sqlite3_mprintf() or + sqlite3_malloc(). + + + If the xUpdate method violates some constraint of the virtual table + (including, but not limited to, attempting to store a value of the + wrong datatype, attempting to store a value that is too large or + too small, or attempting to change a read-only value) then the + xUpdate must fail with an appropriate error code. + + + There might be one or more sqlite3_vtab_cursor objects open and in + use on the virtual table instance and perhaps even on the row of + the virtual table when the xUpdate method is invoked. The + implementation of xUpdate must be prepared for attempts to delete + or modify rows of the table out from other existing cursors. If the + virtual table cannot accommodate such changes, the xUpdate method + must return an error code. + + + The xUpdate method is optional. If the xUpdate pointer in the + sqlite3_module for a virtual table is a NULL pointer, then the + virtual table is read-only. + + + + The native pointer to the sqlite3_vtab derived structure. + + + The number of new or modified column values contained in + . + + + The array of native pointers to sqlite3_value structures containing + the new or modified column values, if any. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the row that was inserted, if any. + + + A standard SQLite return code. + + + + + + This method begins a transaction on a virtual table. This is method + is optional. The xBegin pointer of sqlite3_module may be NULL. + + + This method is always followed by one call to either the xCommit or + xRollback method. Virtual table transactions do not nest, so the + xBegin method will not be invoked more than once on a single + virtual table without an intervening call to either xCommit or + xRollback. Multiple calls to other methods can and likely will + occur in between the xBegin and the corresponding xCommit or + xRollback. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + This method signals the start of a two-phase commit on a virtual + table. This is method is optional. The xSync pointer of + sqlite3_module may be NULL. + + + This method is only invoked after call to the xBegin method and + prior to an xCommit or xRollback. In order to implement two-phase + commit, the xSync method on all virtual tables is invoked prior to + invoking the xCommit method on any virtual table. If any of the + xSync methods fail, the entire transaction is rolled back. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + This method causes a virtual table transaction to commit. This is + method is optional. The xCommit pointer of sqlite3_module may be + NULL. + + + A call to this method always follows a prior call to xBegin and + xSync. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + This method causes a virtual table transaction to rollback. This is + method is optional. The xRollback pointer of sqlite3_module may be + NULL. + + + A call to this method always follows a prior call to xBegin. + + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + + This method provides notification that the virtual table + implementation that the virtual table will be given a new name. If + this method returns SQLITE_OK then SQLite renames the table. If + this method returns an error code then the renaming is prevented. + + + The xRename method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab derived structure. + + + The number of arguments to the function being sought. + + + The name of the function being sought. + + + Upon success, this parameter must be modified to contain the + delegate responsible for implementing the specified function. + + + Upon success, this parameter must be modified to contain the + native user-data pointer associated with + . + + + Non-zero if the specified function was found; zero otherwise. + + + + + + This method provides notification that the virtual table + implementation that the virtual table will be given a new name. If + this method returns SQLITE_OK then SQLite renames the table. If + this method returns an error code then the renaming is prevented. + + + The xRename method is required for every virtual table + implementation. + + + + The native pointer to the sqlite3_vtab derived structure. + + + The native pointer to the UTF-8 encoded string containing the new + name for the virtual table. + + + A standard SQLite return code. + + + + + + These methods provide the virtual table implementation an + opportunity to implement nested transactions. They are always + optional and will only be called in SQLite version 3.7.7 and later. + + + When xSavepoint(X,N) is invoked, that is a signal to the virtual + table X that it should save its current state as savepoint N. A + subsequent call to xRollbackTo(X,R) means that the state of the + virtual table should return to what it was when xSavepoint(X,R) was + last called. The call to xRollbackTo(X,R) will invalidate all + savepoints with N>R; none of the invalided savepoints will be + rolled back or released without first being reinitialized by a call + to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints + where N>=M. + + + None of the xSavepoint(), xRelease(), or xRollbackTo() methods will + ever be called except in between calls to xBegin() and either + xCommit() or xRollback(). + + + + The native pointer to the sqlite3_vtab derived structure. + + + This is an integer identifier under which the the current state of + the virtual table should be saved. + + + A standard SQLite return code. + + + + + + These methods provide the virtual table implementation an + opportunity to implement nested transactions. They are always + optional and will only be called in SQLite version 3.7.7 and later. + + + When xSavepoint(X,N) is invoked, that is a signal to the virtual + table X that it should save its current state as savepoint N. A + subsequent call to xRollbackTo(X,R) means that the state of the + virtual table should return to what it was when xSavepoint(X,R) was + last called. The call to xRollbackTo(X,R) will invalidate all + savepoints with N>R; none of the invalided savepoints will be + rolled back or released without first being reinitialized by a call + to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints + where N>=M. + + + None of the xSavepoint(), xRelease(), or xRollbackTo() methods will + ever be called except in between calls to xBegin() and either + xCommit() or xRollback(). + + + + The native pointer to the sqlite3_vtab derived structure. + + + This is an integer used to indicate that any saved states with an + identifier greater than or equal to this should be deleted by the + virtual table. + + + A standard SQLite return code. + + + + + + These methods provide the virtual table implementation an + opportunity to implement nested transactions. They are always + optional and will only be called in SQLite version 3.7.7 and later. + + + When xSavepoint(X,N) is invoked, that is a signal to the virtual + table X that it should save its current state as savepoint N. A + subsequent call to xRollbackTo(X,R) means that the state of the + virtual table should return to what it was when xSavepoint(X,R) was + last called. The call to xRollbackTo(X,R) will invalidate all + savepoints with N>R; none of the invalided savepoints will be + rolled back or released without first being reinitialized by a call + to xSavepoint(). A call to xRelease(X,M) invalidates all savepoints + where N>=M. + + + None of the xSavepoint(), xRelease(), or xRollbackTo() methods will + ever be called except in between calls to xBegin() and either + xCommit() or xRollback(). + + + + The native pointer to the sqlite3_vtab derived structure. + + + This is an integer identifier used to specify a specific saved + state for the virtual table for it to restore itself back to, which + should also have the effect of deleting all saved states with an + integer identifier greater than this one. + + + A standard SQLite return code. + + + + + This interface represents a virtual table implementation written in + managed code. + + + + + This method is called in response to the + method. + + + The object instance associated with + the virtual table. + + + The native user-data pointer associated with this module, as it was + provided to the SQLite core library when the native module instance + was created. + + + The module name, database name, virtual table name, and all other + arguments passed to the CREATE VIRTUAL TABLE statement. + + + Upon success, this parameter must be modified to contain the + object instance associated with + the virtual table. + + + Upon failure, this parameter must be modified to contain an error + message. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated with + the virtual table. + + + The native user-data pointer associated with this module, as it was + provided to the SQLite core library when the native module instance + was created. + + + The module name, database name, virtual table name, and all other + arguments passed to the CREATE VIRTUAL TABLE statement. + + + Upon success, this parameter must be modified to contain the + object instance associated with + the virtual table. + + + Upon failure, this parameter must be modified to contain an error + message. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The object instance containing all the + data for the inputs and outputs relating to index selection. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + Upon success, this parameter must be modified to contain the + object instance associated + with the newly opened virtual table cursor. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Number used to help identify the selected index. + + + String used to help identify the selected index. + + + The values corresponding to each column in the selected index. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Non-zero if no more rows are available; zero otherwise. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + The object instance to be used for + returning the specified column value to the SQLite core library. + + + The zero-based index corresponding to the column containing the + value to be returned. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the current row for the specified cursor. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The array of object instances containing + the new or modified column values, if any. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the row that was inserted, if any. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The number of arguments to the function being sought. + + + The name of the function being sought. + + + Upon success, this parameter must be modified to contain the + object instance responsible for + implementing the specified function. + + + Upon success, this parameter must be modified to contain the + native user-data pointer associated with + . + + + Non-zero if the specified function was found; zero otherwise. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The new name for the virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer identifier under which the the current state of + the virtual table should be saved. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer used to indicate that any saved states with an + identifier greater than or equal to this should be deleted by the + virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer identifier used to specify a specific saved + state for the virtual table for it to restore itself back to, which + should also have the effect of deleting all saved states with an + integer identifier greater than this one. + + + A standard SQLite return code. + + + + + Returns non-zero if the schema for the virtual table has been + declared. + + + + + Returns the name of the module as it was registered with the SQLite + core library. + + + + + This class contains static methods that are used to allocate, + manipulate, and free native memory provided by the SQLite core library. + + + + + Allocates at least the specified number of bytes of native memory + via the SQLite core library sqlite3_malloc() function and returns + the resulting native pointer. + + + The number of bytes to allocate. + + + The native pointer that points to a block of memory of at least the + specified size -OR- if the memory could + not be allocated. + + + + + Gets and returns the actual size of the specified memory block that + was previously obtained from the method. + + + The native pointer to the memory block previously obtained from the + method. + + + The actual size, in bytes, of the memory block specified via the + native pointer. + + + + + Frees a memory block previously obtained from the + method. + + + The native pointer to the memory block previously obtained from the + method. + + + + + This class contains static methods that are used to deal with native + UTF-8 string pointers to be used with the SQLite core library. + + + + + This is the maximum possible length for the native UTF-8 encoded + strings used with the SQLite core library. + + + + + This is the object instance used to handle + conversions from/to UTF-8. + + + + + Converts the specified managed string into the UTF-8 encoding and + returns the array of bytes containing its representation in that + encoding. + + + The managed string to convert. + + + The array of bytes containing the representation of the managed + string in the UTF-8 encoding or null upon failure. + + + + + Converts the specified array of bytes representing a string in the + UTF-8 encoding and returns a managed string. + + + The array of bytes to convert. + + + The managed string or null upon failure. + + + + + Probes a native pointer to a string in the UTF-8 encoding for its + terminating NUL character, within the specified length limit. + + + The native NUL-terminated string pointer. + + + The maximum length of the native string, in bytes. + + + The length of the native string, in bytes -OR- zero if the length + could not be determined. + + + + + Converts the specified native NUL-terminated UTF-8 string pointer + into a managed string. + + + The native NUL-terminated UTF-8 string pointer. + + + The managed string or null upon failure. + + + + + Converts the specified native UTF-8 string pointer of the specified + length into a managed string. + + + The native UTF-8 string pointer. + + + The length of the native string, in bytes. + + + The managed string or null upon failure. + + + + + Converts the specified managed string into a native NUL-terminated + UTF-8 string pointer using memory obtained from the SQLite core + library. + + + The managed string to convert. + + + The native NUL-terminated UTF-8 string pointer or + upon failure. + + + + + Converts a logical array of native NUL-terminated UTF-8 string + pointers into an array of managed strings. + + + The number of elements in the logical array of native + NUL-terminated UTF-8 string pointers. + + + The native pointer to the logical array of native NUL-terminated + UTF-8 string pointers to convert. + + + The array of managed strings or null upon failure. + + + + + Converts an array of managed strings into an array of native + NUL-terminated UTF-8 string pointers. + + + The array of managed strings to convert. + + + The array of native NUL-terminated UTF-8 string pointers or null + upon failure. + + + + + This class contains static methods that are used to deal with native + pointers to memory blocks that logically contain arrays of bytes to be + used with the SQLite core library. + + + + + Converts a native pointer to a logical array of bytes of the + specified length into a managed byte array. + + + The native pointer to the logical array of bytes to convert. + + + The length, in bytes, of the logical array of bytes to convert. + + + The managed byte array or null upon failure. + + + + + Converts a managed byte array into a native pointer to a logical + array of bytes. + + + The managed byte array to convert. + + + The native pointer to a logical byte array or null upon failure. + + + + + This class contains static methods that are used to perform several + low-level data marshalling tasks between native and managed code. + + + + + Returns a new object instance based on the + specified object instance and an integer + offset. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location that the new + object instance should point to. + + + The new object instance. + + + + + Rounds up an integer size to the next multiple of the alignment. + + + The size, in bytes, to be rounded up. + + + The required alignment for the return value. + + + The size, in bytes, rounded up to the next multiple of the + alignment. This value may end up being the same as the original + size. + + + + + Determines the offset, in bytes, of the next structure member. + + + The offset, in bytes, of the current structure member. + + + The size, in bytes, of the current structure member. + + + The alignment, in bytes, of the next structure member. + + + The offset, in bytes, of the next structure member. + + + + + Reads a value from the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be read is located. + + + The value at the specified memory location. + + + + + Reads a value from the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + to be read is located. + + + The value at the specified memory location. + + + + + Reads an value from the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be read is located. + + + The value at the specified memory location. + + + + + Writes an value to the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be written is located. + + + The value to write. + + + + + Writes an value to the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be written is located. + + + The value to write. + + + + + Writes a value to the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be written is located. + + + The value to write. + + + + + Writes a value to the specified memory + location. + + + The object instance representing the base + memory location. + + + The integer offset from the base memory location where the + value to be written is located. + + + The value to write. + + + + + Generates a hash code value for the object. + + + The object instance used to calculate the hash code. + + + Non-zero if different object instances with the same value should + generate different hash codes, where applicable. This parameter + has no effect on the .NET Compact Framework. + + + The hash code value -OR- zero if the object is null. + + + + + This class represents a managed virtual table module implementation. + It is not sealed and must be used as the base class for any + user-defined virtual table module classes implemented in managed code. + + + + + The default version of the native sqlite3_module structure in use. + + + + + This field is used to store the native sqlite3_module structure + associated with this object instance. + + + + + This field is used to store the destructor delegate to be passed to + the SQLite core library via the sqlite3_create_disposable_module() + function. + + + + + This field is used to store a pointer to the native sqlite3_module + structure returned by the sqlite3_create_disposable_module + function. + + + + + This field is used to store the virtual table instances associated + with this module. The native pointer to the sqlite3_vtab derived + structure is used to key into this collection. + + + + + This field is used to store the virtual table cursor instances + associated with this module. The native pointer to the + sqlite3_vtab_cursor derived structure is used to key into this + collection. + + + + + This field is used to store the virtual table function instances + associated with this module. The case-insensitive function name + and the number of arguments (with -1 meaning "any") are used to + construct the string that is used to key into this collection. + + + + + Constructs an instance of this class. + + + The name of the module. This parameter cannot be null. + + + + + Calls the native SQLite core library in order to create a new + disposable module containing the implementation of a virtual table. + + + The native database connection pointer to use. + + + Non-zero upon success. + + + + + This method is called by the SQLite core library when the native + module associated with this object instance is being destroyed due + to its parent connection being closed. It may also be called by + the "vtshim" module if/when the sqlite3_dispose_module() function + is called. + + + The native user-data pointer associated with this module, as it was + provided to the SQLite core library when the native module instance + was created. + + + + + Creates and returns the native sqlite_module structure using the + configured (or default) + interface implementation. + + + The native sqlite_module structure using the configured (or + default) interface + implementation. + + + + + Creates and returns the native sqlite_module structure using the + specified interface + implementation. + + + The interface implementation to + use. + + + The native sqlite_module structure using the specified + interface implementation. + + + + + Creates a copy of the specified + object instance, + using default implementations for the contained delegates when + necessary. + + + The object + instance to copy. + + + The new object + instance. + + + + + Calls one of the virtual table initialization methods. + + + Non-zero to call the + method; otherwise, the + method will be called. + + + The native database connection handle. + + + The original native pointer value that was provided to the + sqlite3_create_module(), sqlite3_create_module_v2() or + sqlite3_create_disposable_module() functions. + + + The number of arguments from the CREATE VIRTUAL TABLE statement. + + + The array of string arguments from the CREATE VIRTUAL TABLE + statement. + + + Upon success, this parameter must be modified to point to the newly + created native sqlite3_vtab derived structure. + + + Upon failure, this parameter must be modified to point to the error + message, with the underlying memory having been obtained from the + sqlite3_malloc() function. + + + A standard SQLite return code. + + + + + Calls one of the virtual table finalization methods. + + + Non-zero to call the + method; otherwise, the + method will be + called. + + + The native pointer to the sqlite3_vtab derived structure. + + + A standard SQLite return code. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance to be used. + + + The native pointer to the sqlite3_vtab derived structure. + + + Non-zero if this error message should also be logged using the + class. + + + Non-zero if caught exceptions should be logged using the + class. + + + The error message. + + + Non-zero upon success. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance to be used. + + + The object instance used to + lookup the native pointer to the sqlite3_vtab derived structure. + + + Non-zero if this error message should also be logged using the + class. + + + Non-zero if caught exceptions should be logged using the + class. + + + The error message. + + + Non-zero upon success. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance to be used. + + + The native pointer to the sqlite3_vtab_cursor derived structure + used to get the native pointer to the sqlite3_vtab derived + structure. + + + Non-zero if this error message should also be logged using the + class. + + + Non-zero if caught exceptions should be logged using the + class. + + + The error message. + + + Non-zero upon success. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance to be used. + + + The object instance used to + lookup the native pointer to the sqlite3_vtab derived structure. + + + Non-zero if this error message should also be logged using the + class. + + + Non-zero if caught exceptions should be logged using the + class. + + + The error message. + + + Non-zero upon success. + + + + + Gets and returns the interface + implementation to be used when creating the native sqlite3_module + structure. Derived classes may override this method to supply an + alternate implementation for the + interface. + + + The interface implementation to + be used when populating the native sqlite3_module structure. If + the returned value is null, the private methods provided by the + class and relating to the + interface will be used to + create the necessary delegates. + + + + + Creates and returns the + interface implementation corresponding to the current + object instance. + + + The interface implementation + corresponding to the current object + instance. + + + + + Allocates a native sqlite3_vtab derived structure and returns a + native pointer to it. + + + A native pointer to a native sqlite3_vtab derived structure. + + + + + Zeros out the fields of a native sqlite3_vtab derived structure. + + + The native pointer to the native sqlite3_vtab derived structure to + zero. + + + + + Frees a native sqlite3_vtab structure using the provided native + pointer to it. + + + A native pointer to a native sqlite3_vtab derived structure. + + + + + Allocates a native sqlite3_vtab_cursor derived structure and + returns a native pointer to it. + + + A native pointer to a native sqlite3_vtab_cursor derived structure. + + + + + Frees a native sqlite3_vtab_cursor structure using the provided + native pointer to it. + + + A native pointer to a native sqlite3_vtab_cursor derived structure. + + + + + Reads and returns the native pointer to the sqlite3_vtab derived + structure based on the native pointer to the sqlite3_vtab_cursor + derived structure. + + + The object instance to be used. + + + The native pointer to the sqlite3_vtab_cursor derived structure + from which to read the native pointer to the sqlite3_vtab derived + structure. + + + The native pointer to the sqlite3_vtab derived structure -OR- + if it cannot be determined. + + + + + Reads and returns the native pointer to the sqlite3_vtab derived + structure based on the native pointer to the sqlite3_vtab_cursor + derived structure. + + + The native pointer to the sqlite3_vtab_cursor derived structure + from which to read the native pointer to the sqlite3_vtab derived + structure. + + + The native pointer to the sqlite3_vtab derived structure -OR- + if it cannot be determined. + + + + + Looks up and returns the object + instance based on the native pointer to the sqlite3_vtab derived + structure. + + + The native pointer to the sqlite3_vtab derived structure. + + + The object instance or null if + the corresponding one cannot be found. + + + + + Allocates and returns a native pointer to a sqlite3_vtab derived + structure and creates an association between it and the specified + object instance. + + + The object instance to be used + when creating the association. + + + The native pointer to a sqlite3_vtab derived structure or + if the method fails for any reason. + + + + + Looks up and returns the + object instance based on the native pointer to the + sqlite3_vtab_cursor derived structure. + + + The native pointer to the sqlite3_vtab derived structure. + + + The native pointer to the sqlite3_vtab_cursor derived structure. + + + The object instance or null + if the corresponding one cannot be found. + + + + + Allocates and returns a native pointer to a sqlite3_vtab_cursor + derived structure and creates an association between it and the + specified object instance. + + + The object instance to be + used when creating the association. + + + The native pointer to a sqlite3_vtab_cursor derived structure or + if the method fails for any reason. + + + + + Deterimines the key that should be used to identify and store the + object instance for the virtual table + (i.e. to be returned via the + method). + + + The number of arguments to the virtual table function. + + + The name of the virtual table function. + + + The object instance associated with + this virtual table function. + + + The string that should be used to identify and store the virtual + table function instance. This method cannot return null. If null + is returned from this method, the behavior is undefined. + + + + + Attempts to declare the schema for the virtual table using the + specified database connection. + + + The object instance to use when + declaring the schema of the virtual table. This parameter may not + be null. + + + The string containing the CREATE TABLE statement that completely + describes the schema for the virtual table. This parameter may not + be null. + + + Upon failure, this parameter must be modified to contain an error + message. + + + A standard SQLite return code. + + + + + Calls the native SQLite core library in order to declare a virtual + table function in response to a call into the + + or virtual table + methods. + + + The object instance to use when + declaring the schema of the virtual table. + + + The number of arguments to the function being declared. + + + The name of the function being declared. + + + Upon success, the contents of this parameter are undefined. Upon + failure, it should contain an appropriate error message. + + + A standard SQLite return code. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The native pointer to the sqlite3_vtab derived structure. + + + The error message. + + + Non-zero upon success. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance used to + lookup the native pointer to the sqlite3_vtab derived structure. + + + The error message. + + + Non-zero upon success. + + + + + Arranges for the specified error message to be placed into the + zErrMsg field of a sqlite3_vtab derived structure, freeing the + existing error message, if any. + + + The object instance used to + lookup the native pointer to the sqlite3_vtab derived structure. + + + The error message. + + + Non-zero upon success. + + + + + Modifies the specified object instance + to contain the specified estimated cost. + + + The object instance to modify. + + + The estimated cost value to use. Using a null value means that the + default value provided by the SQLite core library should be used. + + + Non-zero upon success. + + + + + Modifies the specified object instance + to contain the default estimated cost. + + + The object instance to modify. + + + Non-zero upon success. + + + + + Modifies the specified object instance + to contain the specified estimated rows. + + + The object instance to modify. + + + The estimated rows value to use. Using a null value means that the + default value provided by the SQLite core library should be used. + + + Non-zero upon success. + + + + + Modifies the specified object instance + to contain the default estimated rows. + + + The object instance to modify. + + + Non-zero upon success. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + This method is called in response to the + method. + + + The object instance associated with + the virtual table. + + + The native user-data pointer associated with this module, as it was + provided to the SQLite core library when the native module instance + was created. + + + The module name, database name, virtual table name, and all other + arguments passed to the CREATE VIRTUAL TABLE statement. + + + Upon success, this parameter must be modified to contain the + object instance associated with + the virtual table. + + + Upon failure, this parameter must be modified to contain an error + message. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated with + the virtual table. + + + The native user-data pointer associated with this module, as it was + provided to the SQLite core library when the native module instance + was created. + + + The module name, database name, virtual table name, and all other + arguments passed to the CREATE VIRTUAL TABLE statement. + + + Upon success, this parameter must be modified to contain the + object instance associated with + the virtual table. + + + Upon failure, this parameter must be modified to contain an error + message. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The object instance containing all the + data for the inputs and outputs relating to index selection. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + Upon success, this parameter must be modified to contain the + object instance associated + with the newly opened virtual table cursor. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Number used to help identify the selected index. + + + String used to help identify the selected index. + + + The values corresponding to each column in the selected index. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Non-zero if no more rows are available; zero otherwise. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + The object instance to be used for + returning the specified column value to the SQLite core library. + + + The zero-based index corresponding to the column containing the + value to be returned. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the current row for the specified cursor. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The array of object instances containing + the new or modified column values, if any. + + + Upon success, this parameter must be modified to contain the unique + integer row identifier for the row that was inserted, if any. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The number of arguments to the function being sought. + + + The name of the function being sought. + + + Upon success, this parameter must be modified to contain the + object instance responsible for + implementing the specified function. + + + Upon success, this parameter must be modified to contain the + native user-data pointer associated with + . + + + Non-zero if the specified function was found; zero otherwise. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + The new name for the virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer identifier under which the the current state of + the virtual table should be saved. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer used to indicate that any saved states with an + identifier greater than or equal to this should be deleted by the + virtual table. + + + A standard SQLite return code. + + + + + This method is called in response to the + method. + + + The object instance associated + with this virtual table. + + + This is an integer identifier used to specify a specific saved + state for the virtual table for it to restore itself back to, which + should also have the effect of deleting all saved states with an + integer identifier greater than this one. + + + A standard SQLite return code. + + + + + Disposes of this object instance. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is being + called from the finalizer. + + + + + Finalizes this object instance. + + + + + Returns or sets a boolean value indicating whether virtual table + errors should be logged using the class. + + + + + Returns or sets a boolean value indicating whether exceptions + caught in the + method, + the method, + the method, + the method, + and the method should be logged using the + class. + + + + + Returns or sets a boolean value indicating whether virtual table + errors should be logged using the class. + + + + + Returns or sets a boolean value indicating whether exceptions + caught in the + method, + method, and the + method should be logged using the + class. + + + + + Returns non-zero if the schema for the virtual table has been + declared. + + + + + Returns the name of the module as it was registered with the SQLite + core library. + + + + + This class implements the + interface by forwarding those method calls to the + object instance it contains. If the + contained object instance is null, all + the methods simply generate an + error. + + + + + This is the value that is always used for the "logErrors" + parameter to the various static error handling methods provided + by the class. + + + + + This is the value that is always used for the "logExceptions" + parameter to the various static error handling methods provided + by the class. + + + + + This is the error message text used when the contained + object instance is not available + for any reason. + + + + + The object instance used to provide + an implementation of the + interface. + + + + + Constructs an instance of this class. + + + The object instance used to provide + an implementation of the + interface. + + + + + Sets the table error message to one that indicates the native + module implementation is not available. + + + The native pointer to the sqlite3_vtab derived structure. + + + The value of . + + + + + Sets the table error message to one that indicates the native + module implementation is not available. + + + The native pointer to the sqlite3_vtab_cursor derived + structure. + + + The value of . + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + Disposes of this object instance. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is being + called from the finalizer. + + + + + Finalizes this object instance. + + + + + This class represents a virtual table cursor to be used with the + class. It is not sealed and may + be used as the base class for any user-defined virtual table cursor + class that wraps an object instance. + + + + + The instance provided when this cursor + was created. + + + + + This value will be non-zero if false has been returned from the + method. + + + + + Constructs an instance of this class. + + + The object instance associated + with this object instance. + + + The instance to expose as a virtual + table cursor. + + + + + Advances to the next row of the virtual table cursor using the + method of the + object instance. + + + Non-zero if the current row is valid; zero otherwise. If zero is + returned, no further rows are available. + + + + + Resets the virtual table cursor position, also invalidating the + current row, using the method of + the object instance. + + + + + Closes the virtual table cursor. This method must not throw any + exceptions. + + + + + Throws an if the virtual + table cursor has been closed. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is + being called from the finalizer. + + + + + Returns the value for the current row of the virtual table cursor + using the property of the + object instance. + + + + + Returns non-zero if the end of the virtual table cursor has been + seen (i.e. no more rows are available, including the current one). + + + + + Returns non-zero if the virtual table cursor is open. + + + + + This class implements a virtual table module that exposes an + object instance as a read-only virtual + table. It is not sealed and may be used as the base class for any + user-defined virtual table class that wraps an + object instance. The following short + example shows it being used to treat an array of strings as a table + data source: + + public static class Sample + { + public static void Main() + { + using (SQLiteConnection connection = new SQLiteConnection( + "Data Source=:memory:;")) + { + connection.Open(); + + connection.CreateModule(new SQLiteModuleEnumerable( + "sampleModule", new string[] { "one", "two", "three" })); + + using (SQLiteCommand command = connection.CreateCommand()) + { + command.CommandText = + "CREATE VIRTUAL TABLE t1 USING sampleModule;"; + + command.ExecuteNonQuery(); + } + + using (SQLiteCommand command = connection.CreateCommand()) + { + command.CommandText = "SELECT * FROM t1;"; + + using (SQLiteDataReader dataReader = command.ExecuteReader()) + { + while (dataReader.Read()) + Console.WriteLine(dataReader[0].ToString()); + } + } + + connection.Close(); + } + } + } + + + + + + This class implements a virtual table module that does nothing by + providing "empty" implementations for all of the + interface methods. The result + codes returned by these "empty" method implementations may be + controlled on a per-method basis by using and/or overriding the + , + , + , + , and + methods from within derived classes. + + + + + This field is used to store the + values to return, on a per-method basis, for all methods that are + part of the interface. + + + + + Constructs an instance of this class. + + + The name of the module. This parameter cannot be null. + + + + + Determines the default value to be + returned by methods of the + interface that lack an overridden implementation in all classes + derived from the class. + + + The value that should be returned + by all interface methods unless + a more specific result code has been set for that interface method. + + + + + Converts a value into a boolean + return value for use with the + method. + + + The value to convert. + + + The value. + + + + + Converts a value into a boolean + return value for use with the + method. + + + The value to convert. + + + The value. + + + + + Determines the value that should be + returned by the specified + interface method if it lack an overridden implementation. If no + specific value is available (or set) + for the specified method, the value + returned by the method will be + returned instead. + + + The name of the method. Currently, this method must be part of + the interface. + + + The value that should be returned + by the interface method. + + + + + Sets the value that should be + returned by the specified + interface method if it lack an overridden implementation. + + + The name of the method. Currently, this method must be part of + the interface. + + + The value that should be returned + by the interface method. + + + Non-zero upon success. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is + being called from the finalizer. + + + + + The CREATE TABLE statement used to declare the schema for the + virtual table. + + + + + The instance containing the backing data + for the virtual table. + + + + + Non-zero if different object instances with the same value should + generate different row identifiers, where applicable. This has no + effect on the .NET Compact Framework. + + + + + Constructs an instance of this class. + + + The name of the module. This parameter cannot be null. + + + The instance to expose as a virtual + table. This parameter cannot be null. + + + + + Constructs an instance of this class. + + + The name of the module. This parameter cannot be null. + + + The instance to expose as a virtual + table. This parameter cannot be null. + + + Non-zero if different object instances with the same value should + generate different row identifiers, where applicable. This + parameter has no effect on the .NET Compact Framework. + + + + + Determines the SQL statement used to declare the virtual table. + This method should be overridden in derived classes if they require + a custom virtual table schema. + + + The SQL statement used to declare the virtual table -OR- null if it + cannot be determined. + + + + + Sets the table error message to one that indicates the virtual + table cursor is of the wrong type. + + + The object instance. + + + The value of . + + + + + Sets the table error message to one that indicates the virtual + table cursor has no current row. + + + The object instance. + + + The value of . + + + + + Determines the string to return as the column value for the object + instance value. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + The object instance to return a string representation for. + + + The string representation of the specified object instance or null + upon failure. + + + + + Constructs an unique row identifier from two + values. The first value + must contain the row sequence number for the current row and the + second value must contain the hash code of the enumerator value + for the current row. + + + The integer row sequence number for the current row. + + + The hash code of the enumerator value for the current row. + + + The unique row identifier or zero upon failure. + + + + + Determines the unique row identifier for the current row. + + + The object instance + associated with the previously opened virtual table cursor to be + used. + + + The object instance to return a unique row identifier for. + + + The unique row identifier or zero upon failure. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is + being called from the finalizer. + + + + + This class represents a virtual table cursor to be used with the + class. It is not sealed and may + be used as the base class for any user-defined virtual table cursor + class that wraps an object instance. + + + + + The instance provided when this + cursor was created. + + + + + Constructs an instance of this class. + + + The object instance associated + with this object instance. + + + The instance to expose as a virtual + table cursor. + + + + + Closes the virtual table cursor. This method must not throw any + exceptions. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is + being called from the finalizer. + + + + + Returns the value for the current row of the virtual table cursor + using the property of the + object instance. + + + + + This class implements a virtual table module that exposes an + object instance as a read-only virtual + table. It is not sealed and may be used as the base class for any + user-defined virtual table class that wraps an + object instance. + + + + + The instance containing the backing + data for the virtual table. + + + + + Constructs an instance of this class. + + + The name of the module. This parameter cannot be null. + + + The instance to expose as a virtual + table. This parameter cannot be null. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + See the method. + + + + + Throws an if this object + instance has been disposed. + + + + + Disposes of this object instance. + + + Non-zero if this method is being called from the + method. Zero if this method is + being called from the finalizer. + +