From 5e594b90eb2a3b077ee6b5889dd7bc1c07e12e1e Mon Sep 17 00:00:00 2001 From: sbohlen Date: Mon, 24 Feb 2014 21:09:26 -0500 Subject: [PATCH] update Spring.Web.Conversation.NHibernate tests to use SQLite 1.0.91.0 dynamic interop assembly resolution to handle running properly on both x86 and x64 processor architectures --- .../WebConversationStateTest/Web.Config | 2 +- .../web.config.net-2.0 | 2 +- ...onversation.NHibernate32.Tests.2010.csproj | 2 +- ....Web.Conversation.NHibernate32.Tests.build | 23 +- .../app.config | 2 +- .../lib/net/2.0/System.Data.SQLite.dll | Bin 270336 -> 278528 bytes .../lib/net/2.0/System.Data.SQLite.xml | 13100 ++++++++++++++++ .../lib/net/3.5/System.Data.SQLite.dll | Bin 270336 -> 278528 bytes .../lib/net/3.5/System.Data.SQLite.xml | 13100 ++++++++++++++++ .../lib/net/4.0/System.Data.SQLite.dll | Bin 270336 -> 268800 bytes .../lib/net/4.0/System.Data.SQLite.xml | 13100 ++++++++++++++++ .../lib/net/4.5/System.Data.SQLite.xml | 13100 ++++++++++++++++ .../WebConversationStateTest/Web.Config | 2 +- .../web.config.net-2.0 | 2 +- ....Web.Conversation.NHibernate33.Tests.build | 25 +- 15 files changed, 52429 insertions(+), 31 deletions(-) create mode 100644 test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/2.0/System.Data.SQLite.xml create mode 100644 test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/3.5/System.Data.SQLite.xml create mode 100644 test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.0/System.Data.SQLite.xml create mode 100644 test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.5/System.Data.SQLite.xml diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config index a65f6b5f..4ee454f7 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config @@ -92,7 +92,7 @@ - + diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 index 1a79b4d0..23effe6e 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 @@ -92,7 +92,7 @@ - + diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.2010.csproj b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.2010.csproj index cc96ddd4..3118b90b 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.2010.csproj +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.2010.csproj @@ -84,7 +84,7 @@ 3.5 - + False lib\net\2.0\System.Data.SQLite.dll diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.build b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.build index 3c701f45..996cb12a 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.build +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/Spring.Web.Conversation.NHibernate32.Tests.build @@ -92,25 +92,24 @@ - - - - + + - + - - - - - - - diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/app.config b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/app.config index 1e140443..5b14db35 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/app.config +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/app.config @@ -12,7 +12,7 @@ - + diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/2.0/System.Data.SQLite.dll b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/2.0/System.Data.SQLite.dll index 3cc39cfce4af34a5f874bc47d68d67e411047c5a..2414373e789054b320e61856f75dd7b051a61796 100644 GIT binary patch literal 278528 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 RKor@q`18M?{rvv) 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®@-Qe660Hi_W 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 + + + System.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 + function for use with sqlite3_log() and the SQLITE_CONFIG_LOG. + + WARNING: This delegate is used more-or-less directly by native code, do + not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET + + + + + This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement + a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. + + + + + This base class provides datatype conversion services for the SQLite provider. + + + + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). + + + + + The value of the OLE Automation epoch represented as a Julian day. + + + + + An array of ISO-8601 DateTime formats that we support parsing. + + + + + The internal default format for UTC DateTime values when converting + to a string. + + + + + The internal default format for local DateTime values when converting + to a string. + + + + + An UTF-8 Encoding instance, so we can convert strings to and from UTF-8 + + + + + The default DateTime format for this instance. + + + + + 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. + + + + Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character. + + The string to convert to UTF-8 + A byte array containing the converted string plus an extra 0 terminating byte at the end of the array. + + + + Convert a DateTime to a UTF-8 encoded, zero-terminated byte array. + + + This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the + string result. + + The DateTime to convert. + The UTF-8 encoded string, including a 0 terminating byte at the end of the array. + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + 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: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + A DateTime value + + + + Converts a string into a DateTime, using the specified DateTimeFormat, + DateTimeKind and DateTimeFormatString. + + + Acceptable ISO8601 DateTime formats are: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. + A DateTime value + + + + Converts a julianday value into a DateTime + + The value to convert + A .NET DateTime + + + + Converts a julianday value into a DateTime + + The value to convert + 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 + + The DateTime to convert + The JulianDay value the Datetime represents + + + + Converts a DateTime struct to the whole number of seconds since the + Unix epoch. + + The DateTime to convert + The whole number of seconds since the Unix epoch + + + + 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 DateTime format string to use for the specified DateTimeKind. + + + + + 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. + + + + Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime. + + + This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls + ToDateTime() on the string to return a DateTime. + + A pointer to the UTF-8 encoded string + The length in bytes of the string + The parsed DateTime value + + + + Smart method of splitting a string. Skips quoted elements, removes the quotes. + + + This split function works somewhat like the String.Split() function in that it breaks apart a string into + pieces and returns the pieces as an array. The primary differences are: + + Only one character can be provided as a separator character + Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed. + + Thus, if splitting the following string looking for a comma:
+ One,Two, "Three, Four", Five
+
+ The resulting array would contain
+ [0] One
+ [1] Two
+ [2] Three, Four
+ [3] Five
+
+ Note that the leading and trailing spaces were removed from each item during the split. +
+ Source string to split apart + 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. + + + + + Convert a value to true or false. + + A string or number representing true or false + + + + + Convert a string to true or false. + + A string representing true or false + + + "yes", "no", "y", "n", "0", "1", "on", "off" as well as Boolean.FalseString and Boolean.TrueString will all be + converted to a proper boolean value. + + + + + Converts a SQLiteType to a .NET Type object + + The SQLiteType to convert + Returns a .NET Type object + + + + For a given intrinsic type, return a DbType + + The native type to convert + The corresponding (closest match) DbType + + + + Returns the ColumnSize for the given DbType + + The DbType to get the size of + + + + + Determines the type name for the given database value type. + + 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 + + The DbType to convert from + The closest-match .NET type + + + + For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types. + + 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. + + + + + For a given type name, return a closest-match .NET type + + The connection context for custom type mappings, if any. + The name of the 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + 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. + We depend on auto initialization to recover. + + + + + Determines if the associated native connection handle is open. + + + Non-zero if a database connection is open. + + + + + Opens a database. + + + Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection + to bind all attributed user-defined functions and collating sequences to the new connection. + + The filename of the database to open. SQLite automatically creates it if it doesn't exist. + The flags associated with the parent connection object + The open flags to use when creating the connection + The maximum size of the pool for the given filename + If true, the connection can be pulled from the connection pool + + + + Closes the currently-open database. + + + After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated + memory associated with the user-defined functions and collating sequences tied to the closed connection. + + Non-zero if the operation is allowed to throw exceptions, zero otherwise. + + + + Sets the busy timeout on the connection. SQLiteCommand will call this before executing any command. + + The number of milliseconds to wait before returning SQLITE_BUSY + + + + Returns the text of the last error issued by SQLite + + + + + + 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 + + + + + When pooling is enabled, returns the number of pool entries matching the current file name. + + The number of pool entries matching the current file name. + + + + Prepares a SQL statement for execution. + + The source connection preparing the command. Can be null for any caller except LINQ + The SQL command text to prepare + The previous statement in a multi-statement command, or null if no previous statement exists + The timeout to wait before aborting the prepare + The remainder of the statement that was not processed. Each call to prepare parses the + SQL up to to either the end of the text or to the first semi-colon delimiter. The remaining text is returned + here for a subsequent call to Prepare() until all the text has been processed. + Returns an initialized SQLiteStatement. + + + + Steps through a prepared statement. + + The SQLiteStatement to step through + True if a row was returned, False if not. + + + + 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. + + + 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 extened result codes returned by SQLite + + true to enable extended result codes, false to disable. + + + + + 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. + + Extended result code + + + + 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.Format() function. + + + + + Checks if the SQLite core library has been initialized in the current process. + + + Non-zero if the SQLite core library has been initialized in the current process, + zero otherwise. + + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy or negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Returns the error message for the specified SQLite return code using + the internal static lookup table. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the error message for the specified SQLite return code using + the sqlite3_errstr() function, falling back to the internal lookup + table if necessary. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns a string representing the active version of SQLite + + + + + Returns an integer representing the active version of SQLite + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of changes the last executing insert/update caused. + + + + + Returns the amount of memory (in bytes) currently in use by the SQLite core library. This is not really a per-connection + value, it is global to the process. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + 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 + + + + + The modules created using this connection. + + + + + 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. + + + + + This method attempts to dispose of all the derived + object instances currently associated with the native database connection. + + + + + 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 + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy, negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + initialized for the current process. + + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + 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 + + A pointer to a UTF-16 string + The length (IN BYTES) of the string + A .NET string + + + + Represents a single SQL backup in SQLite. + + + + + The underlying SQLite object this backup is bound to. + + + + + The actual backup handle. + + + + + The destination database for the backup. + + + + + The destination database name for the backup. + + + + + The source database for the backup. + + + + + The source database name for the backup. + + + + + The last result from the StepBackup method of the SQLite3 class. + This is used to determine if the call to the FinishBackup method of + the SQLite3 class should throw an exception when it receives a non-Ok + return code from the core SQLite library. + + + + + Initializes the backup. + + The base SQLite object. + The backup handle. + The destination database for the backup. + The destination database name for the backup. + The source database for the backup. + The source database name for the backup. + + + + Disposes and finalizes the backup. + + + + + The extra behavioral flags that can be applied to a connection. + + + + + No extra flags. + + + + + Enable logging of all SQL statements to be prepared. + + + + + Enable logging of all bound parameter types and raw values. + + + + + Enable logging of all bound parameter strongly typed values. + + + + + Enable logging of all exceptions caught from user-provided + managed code called from native code via delegates. + + + + + Enable logging of backup API errors. + + + + + Skip adding the extension functions provided by the native + 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 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. + + + + + The default extra flags for new connections. + + + + + 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 + + + + + The connection the command is associated with + + + + + The version of the connection the command is associated with + + + + + Indicates whether or not a DataReader is active on the command. + + + + + The timeout for the command, kludged because SQLite doesn't support per-command timeout values + + + + + Designer support + + + + + Used by DbDataAdapter to determine updating behavior + + + + + The collection of parameters for the command + + + + + The SQL command text, broken into individual SQL statements as they are executed + + + + + Unprocessed SQL text that has not been executed + + + + + Transaction associated with this command + + + + + Constructs a new SQLiteCommand + + + Default constructor + + + + + Initializes the command with the given command text + + The SQL command text + + + + Initializes the command with the given SQL command text and attach the command to the specified + connection. + + The SQL command text + The connection to associate with the command + + + + Initializes the command and associates it with the specified connection. + + The connection to associate with the command + + + + Initializes a command with the given SQL, connection and transaction + + The SQL command text + The connection to associate with the command + The transaction the command should be associated with + + + + Disposes of the command and clears all member variables + + 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 + + + + + Builds an array of prepared statements for each complete SQL statement in the command text + + + + + Not implemented + + + + + Forwards to the local CreateParameter() function + + + + + + Create a new parameter + + + + + + This function ensures there are no active readers, that we have a valid connection, + that the connection is open, that all statements are prepared and all parameters are assigned + in preparation for allocating a data reader. + + + + + Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements + + 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. + A SQLiteDataReader + + + + Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class + + A SQLiteDataReader + + + + Called by the SQLiteDataReader when the data reader is closed. + + + + + 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. + + + + 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. + + + + Does nothing. Commands are prepared as they are executed the first time, and kept in prepared state afterwards. + + + + + Clones a command, including all its parameters + + A new SQLiteCommand with the same commandtext, connection and parameters + + + + The SQL command text associated with the command + + + + + The amount of time to wait for the connection to become available before erroring out + + + + + The type of the command. SQLite only supports CommandType.Text + + + + + The connection associated with this command + + + + + Forwards to the local Connection property + + + + + Returns the SQLiteParameterCollection for the given command + + + + + Forwards to the local Parameters property + + + + + The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the + command's underlying connection. + + + + + Forwards to the local Transaction property + + + + + Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. + + + + + Determines if the command is visible at design time. Defaults to True. + + + + + SQLite implementation of DbCommandBuilder. + + + + + Default constructor + + + + + Initializes the command builder and associates it with the specified data adapter. + + + + + + Minimal amount of parameter processing. Primarily sets the DbType for the parameter equal to the provider type in the schema + + The parameter to use in applying custom behaviors to a row + The row to apply the parameter to + The type of statement + Whether the application of the parameter is part of a WHERE clause + + + + Returns a valid named parameter + + The name of the parameter + Error + + + + Returns a named parameter for the given ordinal + + The i of the parameter + Error + + + + Returns a placeholder character for the specified parameter i. + + The index of the parameter to provide a placeholder for + Returns a named parameter + + + + Sets the handler for receiving row updating events. Used by the DbCommandBuilder to autogenerate SQL + statements that may not have previously been generated. + + A data adapter to receive events on. + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + + Places brackets around an identifier + + The identifier to quote + The bracketed identifier + + + + Removes brackets around an identifier + + The quoted (bracketed) identifier + The undecorated identifier + + + + Override helper, which can help the base command builder choose the right keys for the given query + + + + + + + Gets/sets the DataAdapter for this CommandBuilder + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Event data for connection event handlers. + + + + + The type of event being raised. + + + + + The associated 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. + + + + + Command or message text associated with this event, if any. + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + The type of event being raised. + The base associated + 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. + + + + Raised when an event pertaining to a connection occurs. + + The connection involved. + Extra information about the event. + + + + SQLite implentation of DbConnection. + + + The property can contain the following parameter(s), delimited with a semi-colon: + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + The default "stub" (i.e. placeholder) base schema name to use when + returning column schema information. Used as the initial value of + the BaseSchemaName property. This should start with "sqlite_*" + because those names are reserved for use by SQLite (i.e. they cannot + 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. + + + + + State of the current connection + + + + + The connection string + + + + + Nesting level of the transactions open on the connection + + + + + If set, then the connection is currently being disposed. + + + + + The default isolation level for new transactions + + + + + 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 + + + + + The database filename minus path and extension + + + + + Temporary password storage, emptied after the database has been opened + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. + + + + + The extra behavioral flags for this connection, if any. See the + enumeration for a list of + possible values. + + + + + Default command timeout + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Constructs a new SQLiteConnection object + + + Default constructor + + + + + Initializes the connection with the specified connection string. + + 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. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Clones the settings and connection string from an existing connection. If the existing connection is already open, this + function will open its own connection, enumerate any attached databases of the original connection, and automatically + attach to them. + + The connection to copy the settings from. + + + + Raises the 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 + destination. + + The destination database connection. + The destination database name. + The source database name. + + The number of pages to copy or negative to copy all remaining pages. + + + The method to invoke between each step of the backup process. This + parameter may be null (i.e. no callbacks will be performed). + + + The number of milliseconds to sleep after encountering a locking error + during the backup process. A value less than zero means that no sleep + should be performed. + + + + + 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 + will also be opened. + + + + + + Creates a database file. This just creates a zero-byte file which SQLite + will turn into a database when the file is opened properly. + + The file to create + + + + Raises the state change event when the state of the connection changes + + The new connection state. If this is different + from the previous state, the event is + raised. + 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. + + This parameter is ignored. + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection. + + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is false, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already active on the connection. + + Supported isolation levels are Serializable, ReadCommitted and Unspecified. + + Unspecified will use the default isolation level specified in the connection string. If no isolation level is specified in the + connection string, Serializable is used. + Serializable transactions are the default. In this mode, the engine gets an immediate lock on the database, and no other threads + may begin a transaction. Other threads may read from the database, but not write. + With a ReadCommitted isolation level, locks are deferred and elevated as needed. It is possible for multiple threads to start + a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread + has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached. + + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already + active on the connection. + + Returns the new transaction object. + + + + Forwards to the local function + + Supported isolation levels are Unspecified, Serializable, and ReadCommitted + + + + + This method is not implemented; however, the + event will still be raised. + + + + + + When the database connection is closed, all commands linked to this connection are automatically reset. + + + + + Clears the connection pool associated with the connection. Any other active connections using the same database file + will be discarded instead of returned to the pool when they are closed. + + + + + + Clears all connection pools. Any active connections will be discarded instead of sent to the pool when they are closed. + + + + + Create a new and associate it with this connection. + + Returns a new command object already assigned to this connection. + + + + Forwards to the local function. + + + + + + Parses the connection string into component parts using the custom + connection string parser. + + The connection string to parse + An array of key-value pairs representing each parameter of the connection string + + + + Parses a connection string using the built-in (i.e. framework provided) + connection string parser class and returns the key/value pairs. An + exception may be thrown if the connection string is invalid or cannot be + parsed. When compiled for the .NET Compact Framework, the custom + connection string parser is always used instead because the framework + provided one is unavailable there. + + + The connection string to parse. + + + Non-zero to throw an exception if any connection string values are not of + the type. + + The list of key/value pairs. + + + + Manual distributed transaction enlistment support + + The distributed transaction to enlist in + + + + Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value + + The list to look in + The key to find + The default value to return if the key is not found + The value corresponding to the specified key, or the default value if not found. + + + + Attempts to convert the string value to an enumerated value of the specified type. + + The enumerated type to convert the string value to. + The string value to be converted. + 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. + + + True to enable loading of extensions, false to disable. + + + + + Loads a SQLite extension library from the named dynamic link library file. + + + The name of the dynamic link library file containing the extension. + + + + + Loads a SQLite extension library from the named dynamic link library 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. + + + + + 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. + + + + + Opens the connection using the parameters found in the . + + + + + Opens the connection using the parameters found in the and then returns it. + + The current connection object. + + + + This method causes any pending database operation to abort and return at + its earliest opportunity. This routine is typically called in response + to a user action such as pressing "Cancel" or Ctrl-C where the user wants + a long query operation to halt immediately. It is safe to call this + routine from any thread. However, it is not safe to call this routine + with a database connection that is closed or might close before this method + 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + Non-zero to enable memory usage tracking, zero otherwise. + A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + + 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 + + + Enables or disabled extended result codes returned by SQLite + + + Enables or disabled extended result codes returned by SQLite + + + Add a log message via the SQLite sqlite3_log interface. + + + Add a log message via the SQLite sqlite3_log interface. + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Queries or modifies the number of retries or the retry interval (in milliseconds) for + certain I/O operations that may fail due to anti-virus software. + + The number of times to retry the I/O operation. A negative value + will cause the current count to be queried and replace that negative value. + The number of milliseconds to wait before retrying the I/O + operation. This number is multiplied by the number of retry attempts so far to come + up with the final number of milliseconds to wait. A negative value will cause the + current interval to be queried and replace that negative value. + Zero for success, non-zero for error. + + + + Removes one set of surrounding single -OR- double quotes from the string + value and returns the resulting string value. If the string is null, empty, + or contains quotes that are not balanced, nothing is done and the original + string value will be returned. + + The string value to process. + + The string value, modified to remove one set of surrounding single -OR- + double quotes, if applicable. + + + + + Expand the filename of the data source, resolving the |DataDirectory| + macro as appropriate. + + The database filename to expand + + Non-zero if the returned file name should be converted to a full path + (except when using the .NET Compact Framework). + + The expanded path and filename of the filename + + + + The following commands are used to extract schema information out of the database. Valid schema types are: + + + MetaDataCollections + + + DataSourceInformation + + + Catalogs + + + Columns + + + ForeignKeys + + + Indexes + + + IndexColumns + + + Tables + + + Views + + + ViewColumns + + + + + Returns the MetaDataCollections schema + + A DataTable of the MetaDataCollections schema + + + + Returns schema information of the specified collection + + The schema collection to retrieve + A DataTable of the specified collection + + + + Retrieves schema information using the specified constraint(s) for the specified collection + + The collection to retrieve + The restrictions to impose + A DataTable of the specified collection + + + + Builds a MetaDataCollections schema datatable + + DataTable + + + + Builds a DataSourceInformation datatable + + DataTable + + + + Build a Columns schema + + The catalog (attached database) to query, can be null + The table to retrieve schema information for, must not be null + The column to retrieve schema information for, can be null + DataTable + + + + Returns index information for the given database and catalog + + The catalog (attached database) to query, can be null + The name of the index to retrieve information for, can be null + The table to retrieve index information for, can be null + DataTable + + + + Retrieves table schema information for the database and catalog + + The catalog (attached database) to retrieve tables on + The table to retrieve, can be null + The table type, can be null + DataTable + + + + Retrieves view schema information for the database + + The catalog (attached database) to retrieve views on + The view name, can be null + DataTable + + + + Retrieves catalog (attached databases) schema information for the database + + The catalog to retrieve, can be null + DataTable + + + + Returns the base column information for indexes in a database + + The catalog to retrieve indexes for (can be null) + The table to restrict index information by (can be null) + The index to restrict index information by (can be null) + The source column to restrict index information by (can be null) + A DataTable containing the results + + + + Returns detailed column information for a specified view + + The catalog to retrieve columns for (can be null) + The view to restrict column information by (can be null) + The source column to restrict column information by (can be null) + A DataTable containing the results + + + + Retrieves foreign key information from the specified set of filters + + An optional catalog to restrict results on + An optional table to restrict results on + An optional foreign key name to restrict results on + A DataTable with the results of the query + + + + Static variable to store the connection event handlers to call. + + + + + This event is raised whenever the database is opened or closed. + + + + + This event is raised when events related to the lifecycle of a + 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. + + + + + The connection string containing the parameters for the connection + + + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + Returns the data source file name without extension or path. + + + + + Returns the string "main". + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + This can also be set in the ConnectionString with "Default Timeout" + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Gets/sets the extra behavioral flags for this connection. See the + enumeration for a list of + possible values. + + + + + Returns non-zero if the underlying native connection handle is + owned by this instance. + + + + + Returns the version of the underlying SQLite database engine + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on + 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. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + + + + + Returns a string containing the define constants (i.e. compile-time + options) used to compile the core managed assembly, delimited with + spaces. + + + + + Returns the version of the underlying SQLite core library. + + + + + This method returns the string whose value is the same as the + SQLITE_SOURCE_ID C preprocessor macro used when compiling the + 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. + + + + + 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 + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is committing a transaction. + Return non-zero to trigger a rollback. + + + + + This event is raised whenever SQLite statement first begins executing on + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is rolling back a transaction. + + + + + Returns the instance. + + + + + The I/O file cache flushing behavior for the connection + + + + + Normal file flushing at critical sections of the code + + + + + Full file flushing after every write operation + + + + + 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 + rollbackTrans boolean value to true. + + The connection committing the transaction + Event arguments on the transaction + + + + Raised when data is inserted, updated and deleted on a given connection + + The connection committing the transaction + The event parameters which triggered the event + + + + Raised when a statement first begins executing on a given connection + + The connection executing the statement + Event arguments of the trace + + + + Raised between each backup step. + + + The source database connection. + + + The source database name. + + + The destination database connection. + + + The destination database name. + + + The number of pages copied with each step. + + + The number of pages remaining to be copied. + + + The total number of pages in the source database. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True to continue with the backup process or false to halt the backup + process, rolling back any changes that have been made so far. + + + + + The data associated with a call into the authorizer. + + + + + The user-defined native data associated with this event. Currently, + this will always contain the value of . + + + + + The action code responsible for the current call into the authorizer. + + + + + 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. + + + + + 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 database name for the current call into the authorizer, 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 return code for the current call into the authorizer. + + + + + Constructs an instance of this class with default property values. + + + + + 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 + + + + + Set to true to abort the transaction and trigger a rollback + + + + + Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text + + + + + 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 dictionary of connection pools, based on the normalized file + name of the SQLite database. + + + + + The default version number new pools will get. + + + + + The number of connections successfully opened from any pool. + This value is incremented by the Remove method. + + + + + The number of connections successfully closed from any pool. + This value is incremented by the Add method. + + + + + 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 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. + + + + + This pool version associated with the database connection + handles in this pool queue. + + + + + 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. + + + + + Properties of this class + + + + + Constructs a new instance of the class + + + Default constructor + + + + + Constructs a new instance of the class using the specified connection string. + + The connection string to parse + + + + Private initializer, which assigns the connection string and resets the builder + + The connection string to assign + + + + Helper function for retrieving values from the connectionstring + + The keyword to retrieve settings for + The resulting parameter value + Returns true if the value was found and returned + + + + Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties() + + The hashtable to fill with property descriptors + + + + Gets/Sets the default version of the SQLite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library. + + + + + Gets/Sets the synchronization mode (file flushing) of the connection string. Default is "Normal". + + + + + Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding. + + + + + Gets/Sets whether or not to use connection pooling. The default is "False" + + + + + Gets/Sets whethor not to store GUID's in binary format. The default is True + which saves space in the database. + + + + + Gets/Sets the filename to open on the connection string. + + + + + An alternate to the data source property + + + + + An alternate to the data source property that uses the SQLite URI syntax. + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + + + + + Determines whether or not the connection will automatically participate + in the current distributed transaction (if one exists) + + + + + If set to true, will throw an exception if the database specified in the connection + string does not exist. If false, the database will be created automatically. + + + + + If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger + database sizes. + + + + + When enabled, the database will be opened for read-only access and writing will be disabled. + + + + + Gets/sets the database encryption password + + + + + Gets/sets the database encryption hexadecimal password + + + + + Gets/Sets the page size for the connection. + + + + + Gets/Sets the maximum number of pages the database may hold + + + + + Gets/Sets the cache size for the connection. + + + + + Gets/Sets the DateTime format for the connection. + + + + + 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 + .NET Framework compatibility purposes. + + + + + Determines how SQLite handles the transaction journal file. + + + + + Sets the default isolation level for transactions on the connection. + + + + + If enabled, use foreign key constraints + + + + + Gets/Sets the extra behavioral flags. + + + + + If enabled, apply the default connection settings to opened databases. + + + + + If enabled, attempt to resolve the provided data source file name to a + full path before opening. + + + + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite + understands. The DateTime extension to the spec is for internal use only. + + + + + Not used + + + + + All integers in SQLite default to Int64 + + + + + All floating point numbers in SQLite default to double + + + + + The default data type of SQLite is text + + + + + Typically blob types are only seen when returned from a function + + + + + Null types can be returned from functions + + + + + Used internally by this provider + + + + + Used internally by this provider + + + + + These are the event types associated with the + + delegate (and its corresponding event) and the + class. + + + + + Not used. + + + + + Not used. + + + + + The connection is being opened. + + + + + The connection string has been parsed. + + + + + The connection was opened. + + + + + The method was called on the + connection. + + + + + A transaction was created using the connection. + + + + + The connection was enlisted into a transaction. + + + + + 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. + + + + + The connection was 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. + + + + + Use the value of DateTime.Ticks. This value is not recommended and is not well supported with LINQ. + + + + + Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and + "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values). + + + + + The interval of time in days and fractions of a day since January 1, 4713 BC. + + + + + The whole number of seconds since the Unix epoch (January 1, 1970). + + + + + Any culture-independent string value that the .NET Framework can interpret as a valid DateTime. + + + + + Any string value that the .NET Framework can interpret as a valid DateTime using the current culture. + + + + + The default format for this provider. + + + + + 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. + + + + + The default mode, this causes SQLite to use the existing journaling mode for the database. + + + + + SQLite will create and destroy the journal file as-needed. + + + + + When this is set, SQLite will keep the journal file even after a transaction has completed. It's contents will be erased, + and the journal re-used as often as needed. If it is deleted, it will be recreated the next time it is needed. + + + + + This option disables the rollback journal entirely. Interrupted transactions or a program crash can cause database + corruption in this mode! + + + + + SQLite will truncate the journal file to zero-length instead of deleting it. + + + + + SQLite will store the journal in volatile RAM. This saves disk I/O but at the expense of database safety and integrity. + If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the + database file will very likely go corrupt. + + + + + SQLite uses a write-ahead log instead of a rollback journal to implement transactions. The WAL journaling mode is persistent; + after being set it stays in effect across multiple database connections and after closing and reopening the database. A database + in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later. + + + + + Possible values for the "synchronous" database setting. This setting determines + how often the database engine calls the xSync method of the VFS. + + + + + Use the default "synchronous" database setting. Currently, this should be + the same as using the FULL mode. + + + + + The database engine continues without syncing as soon as it has handed + data off to the operating system. If the application running SQLite + crashes, the data will be safe, but the database might become corrupted + if the operating system crashes or the computer loses power before that + data has been written to the disk surface. + + + + + The database engine will still sync at the most critical moments, but + less often than in FULL mode. There is a very small (though non-zero) + chance that a power failure at just the wrong time could corrupt the + database in NORMAL mode. + + + + + The database engine will use the xSync method of the VFS to ensure that + all content is safely written to the disk surface prior to continuing. + This ensures that an operating system crash or power failure will not + corrupt the database. FULL synchronous is very safe, but it is also + slower. + + + + + The requested command execution type. This controls which method of the + object will be called. + + + + + Do nothing. No method will be called. + + + + + The command is not expected to return a result -OR- the result is not + needed. The or + method + will be called. + + + + + 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. + + + + + The command is expected to return result. + The or + method will + be called. + + + + + Use the default command execution type. Using this value is the same + as using the value. + + + + + The action code responsible for the current call into the authorizer. + + + + + No action is being performed. This value should not be used from + external code. + + + + + No longer used. + + + + + An index will be created. The action-specific arguments are the + index name and the table name. + + + + + + A table will be created. The action-specific arguments are the + table name and a null value. + + + + + A temporary index will be created. The action-specific arguments + are the index name and the table name. + + + + + A temporary table will be created. The action-specific arguments + are the table name and a null value. + + + + + A temporary trigger will be created. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be created. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be created. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be created. The action-specific arguments are the view + name and a null value. + + + + + A DELETE statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + An index will be dropped. The action-specific arguments are the + index name and the table name. + + + + + A table will be dropped. The action-specific arguments are the tables + name and a null value. + + + + + A temporary index will be dropped. The action-specific arguments are + the index name and the table name. + + + + + A temporary table will be dropped. The action-specific arguments are + the table name and a null value. + + + + + A temporary trigger will be dropped. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be dropped. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be dropped. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be dropped. The action-specific arguments are the view + name and a null value. + + + + + An INSERT statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + A PRAGMA statement will be executed. The action-specific arguments + are the name of the PRAGMA and the new value or a null value. + + + + + 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 + + + + + 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 + + + + + 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 + + + + + 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 + + + + + Matches the version of the connection. + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. Matches the base schema name used by the + associated connection. + + + + + Internal constructor, initializes the datareader and sets up to begin executing statements + + The SQLiteCommand this data reader is for + The expected behavior of the data reader + + + + Dispose of all resources used by this datareader. + + + + + + Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified. + + + + + Throw an error if the datareader is closed + + + + + Throw an error if a row is not loaded + + + + + Enumerator support + + 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. + + + 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 + + + + Retrieves the column as a boolean value + + The index of the column to retrieve + bool + + + + Retrieves the column as a single byte value + + The index of the column to retrieve + byte + + + + Retrieves a column as an array of bytes (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the bytes into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of bytes written into the array + + To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned. + + + + + Returns the column as a single character + + The index of the column to retrieve + char + + + + Retrieves a column as an array of chars (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the characters into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of characters written into the array + + To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned. + + + + + Retrieves the name of the back-end datatype of the column + + The index of the column to retrieve + string + + + + Retrieve the column as a date/time value + + The index of the column to retrieve + DateTime + + + + Retrieve the column as a decimal value + + The index of the column to retrieve + decimal + + + + Returns the column as a double + + The index of the column to retrieve + double + + + + Returns the .NET type of a given column + + The index of the column to retrieve + Type + + + + Returns a column as a float value + + The index of the column to retrieve + float + + + + Returns the column as a Guid + + The index of the column to retrieve + Guid + + + + Returns the column as a short + + The index of the column to retrieve + Int16 + + + + Retrieves the column as an int + + The index of the column to retrieve + Int32 + + + + Retrieves the column as a long + + The index of the column to retrieve + Int64 + + + + Retrieves the name of the column + + The index of the column to retrieve + string + + + + Retrieves the i of a column, given its name + + The name of the column to retrieve + The int i of the column + + + + Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done + to gather the necessary information so it can be represented in an ADO.NET manner. + + Returns a DataTable containing the schema information for the active SELECT statement being processed. + + + + Retrieves the column as a string + + The index of the column to retrieve + string + + + + Retrieves the column as an object corresponding to the underlying datatype of the column + + The index of the column to retrieve + object + + + + Retreives the values of multiple columns, up to the size of the supplied array + + The array to fill with values from the columns in the current resultset + The number of columns retrieved + + + + Returns a collection containing all the column names and values for the + current row of data in the current resultset, if any. If there is no + current row or no current resultset, an exception may be thrown. + + + The collection containing the column name and value information for the + current row of data in the current resultset or null if this information + cannot be obtained. + + + + + Returns True if the specified column is null + + The index of the column to retrieve + True or False + + + + Moves to the next resultset in multiple row-returning SQL command. + + 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. + + + + + 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 data reader containing the databse connection to query the flags from. + + + The connection flags value. + + + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + + The index of the column to retrieve + A SQLiteType structure + + + + Reads the next row from the resultset + + True if a new row was successfully loaded and is ready for processing + + + + Not implemented. Returns 0 + + + + + Returns the number of columns in the current resultset + + + + + Returns the number of visible fields in the current resultset + + + + + Returns True if the resultset has rows that can be fetched + + + + + Returns True if the data reader is closed + + + + + Retrieve the count of records affected by an update/insert command. Only valid once the data reader is closed! + + + + + Indexer to retrieve data from a column given its name + + The name of the column to retrieve data for + The value contained in the column + + + + Indexer to retrieve data from a column given its i + + The index of the column to retrieve + The value contained in the column + + + + SQLite exception class. + + + + + Private constructor for use with serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Public constructor for generating a SQLite exception given the error + code and message. + + + The SQLite return code to report. + + + Message text to go along with the return code message text. + + + + + Public constructor that uses the base class constructor for the error + message. + + Error message text. + + + + Public constructor that uses the default base class constructor. + + + + + Public constructor that uses the base class constructor for the error + message and inner exception. + + Error message text. + The original (inner) exception. + + + + Adds extra information to the serialized object data specific to this + class type. This is only used for serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Returns the error message for the specified SQLite return code. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the composite error message based on the SQLite return code + and the optional detailed error message. + + The SQLite return code. + Optional detailed error message. + Error message text for the return code. + + + + Gets the associated SQLite result code for this exception as a + . This property returns the same + underlying value as the property. + + + + + Gets the associated SQLite return code for this exception as an + . For desktop versions of the .NET Framework, + this property overrides the property of the same name within the + + class. This property returns the same underlying value as the + property. + + + + + SQLite error codes. Actually, this enumeration represents a return code, + which may also indicate success in one of several ways (e.g. SQLITE_OK, + SQLITE_ROW, and SQLITE_DONE). Therefore, the name of this enumeration is + something of a misnomer. + + + + + The error code is unknown. This error code + is only used by the managed wrapper itself. + + + + + Successful result + + + + + SQL error or missing database + + + + + Internal logic error in SQLite + + + + + Access permission denied + + + + + Callback routine requested an abort + + + + + The database file is locked + + + + + A table in the database is locked + + + + + A malloc() failed + + + + + Attempt to write a readonly database + + + + + Operation terminated by sqlite3_interrupt() + + + + + Some kind of disk I/O error occurred + + + + + The database disk image is malformed + + + + + Unknown opcode in sqlite3_file_control() + + + + + Insertion failed because database is full + + + + + Unable to open the database file + + + + + Database lock protocol error + + + + + Database is empty + + + + + The database schema changed + + + + + String or BLOB exceeds size limit + + + + + Abort due to constraint violation + + + + + Data type mismatch + + + + + Library used incorrectly + + + + + Uses OS features not supported on host + + + + + Authorization denied + + + + + Auxiliary database format error + + + + + 2nd parameter to sqlite3_bind out of range + + + + + File opened that is not a database file + + + + + Notifications from sqlite3_log() + + + + + Warnings from sqlite3_log() + + + + + sqlite3_step() has another row ready + + + + + sqlite3_step() has finished executing + + + + + Used to mask off extended result codes + + + + + SQLite implementation of . + + + SQLite implementation of . + + + + + Constructs a new instance. + + + + + Static instance member which returns an instanced class. + + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Will provide a object in .NET 3.5. + + The class or interface type to query for. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. This event is provided for backward compatibility only. + New code should use the class instead. + + + + + 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. + + 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 base connection this function is attached to + + + + + Internal array used to keep track of aggregate function context data + + + + + The connection flags associated with this object (this should be the + same value as the flags associated with the parent connection object). + + + + + Holds a reference to the callback function for user functions + + + + + Holds a reference to the callbakc function for stepping in an aggregate function + + + + + Holds a reference to the callback function for finalizing an aggregate function + + + + + Holds a reference to the callback function for collation sequences + + + + + Current context of the current callback. Only valid during a callback + + + + + This static list contains all the user-defined functions declared using the proper attributes. + + + + + 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 + someone closes the connection while a DataReader is open. + + + + + Placeholder for a user-defined disposal routine + + True if the object is being disposed explicitly + + + + Scalar functions override this method to do their magic. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The arguments for the command to process + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + Aggregate functions override this method to do their magic. + + + Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible. + + The arguments for the command to process + The 1-based step number. This is incrememted each time the step method is called. + A placeholder for implementers to store contextual data pertaining to the current context. + + + + Aggregate functions override this method to finish their aggregate processing. + + + If you implemented your aggregate function properly, + you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have + all the information you need in there to figure out what to return. + NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will + be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value + if that is the case. + + Your own assigned contextData, provided for you so you can return your final results. + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + + User-defined collation sequences override this method to provide a custom string sorting algorithm. + + The first string to compare + The second strnig to compare + 1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2 + + + + Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The number of arguments + A pointer to the array of arguments + An object array of the arguments once they've been converted to .NET values + + + + Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context. + + The context the return value applies to + The parameter to return to SQLite + + + + Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method. + WARNING: Must not throw exceptions. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method. + WARNING: Must not throw exceptions. + + + This function takes care of doing the lookups and getting the important information put together to call the Step() function. + That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so + binary searches can be done to find the data. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method. + WARNING: Must not throw exceptions. + + A raw context pointer + + + + Using reflection, enumerate all assemblies in the current appdomain looking for classes that + have a SQLiteFunctionAttribute attribute, and registering them accordingly. + + + + + Manual method of registering a function. The type must still have the SQLiteFunctionAttributes in order to work + properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported. + + The type of the function to register + + + + Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection. + It is done this way so that all user-defined functions will access the database using the same encoding scheme + as the connection (UTF-8 or UTF-16). + + + The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to + all the wrapped callback functions. The interop function uses it to map CDecl callbacks to StdCall callbacks. + + The base object on which the functions are to bind + The flags associated with the parent connection object + 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. + + + + + Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert + strings and DateTime's into the current connection's encoding schema. + + + + + Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call. + + + User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays. + + + + + Obtains the collating sequence in effect for the given function. + + + + + + The type of user-defined function to declare + + + + + Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc. + + + + + Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data. + Examples include SUM(), COUNT(), AVG(), etc. + + + + + Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is + sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting + in a user-defined manner. + + + + + An internal callback delegate declaration. + + 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. + + + + An internal final callback delegate declaration. + + Raw context pointer for the user function + + + + Internal callback delegate for implementing collation sequences + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. + + + + The type of collating sequence + + + + + The built-in BINARY collating sequence + + + + + The built-in NOCASE collating sequence + + + + + The built-in REVERSE collating sequence + + + + + A custom user-defined collating sequence + + + + + The encoding type the collation sequence uses + + + + + The collation sequence is UTF8 + + + + + The collation sequence is UTF16 little-endian + + + + + The collation sequence is UTF16 big-endian + + + + + A struct describing the collating sequence a function is executing in + + + + + The name of the collating sequence + + + + + The type of collating sequence + + + + + The text encoding of the collation sequence + + + + + Context of the function that requested the collating sequence + + + + + Calls the base collating sequence to compare two strings + + The first string to compare + The second string to compare + -1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2 + + + + Calls the base collating sequence to compare two character arrays + + The first array to compare + The second array to compare + -1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2 + + + + A simple custom attribute to enable us to easily find user-defined functions in + the loaded assemblies and initialize them in SQLite as connections are made. + + + + + 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. + + + + + The number of arguments this function expects. -1 if the number of arguments is variable. + + + + + 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. + + Providing key information for a given statement is non-trivial :( + + + + + + This function does all the nasty work at determining what keys need to be returned for + a given statement. + + + + + + + + Make sure all the subqueries are open and ready and sync'd with the current rowid + of the table they're supporting + + + + + Release any readers on any subqueries + + + + + Append all the columns we've added to the original query to the schema + + + + + + How many additional columns of keyinfo we're holding + + + + + Used to support CommandBehavior.KeyInfo + + + + + A single sub-query for a given table/database. + + + + + Event data for logging event handlers. + + + + + The error code. The type of this object value should be + or . + + + + + SQL statement text as the statement first begins executing + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + Should be null. + + The error code. The type of this object value should be + or . + + The error message, if any. + The extra data, if any. + + + + Raised when a log event occurs. + + The current connection + Event arguments of the trace + + + + Manages the SQLite custom logging functionality and the associated + callback for the whole process. + + + + + Object used to synchronize access to the static instance data + for this class. + + + + + Member variable to store the AppDomain.DomainUnload event handler. + + + + + The default log event handler. + + + + + The log callback passed to native SQLite engine. This must live + as long as the SQLite library has a pointer to it. + + + + + The base SQLite object to interop with. + + + + + This will be non-zero if logging is currently enabled. + + + + + Initializes the SQLite logging facilities. + + + + + Handles the AppDomain being unloaded. + + Should be null. + The data associated with this event. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The SQLite error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The integer error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + + The error code. The type of this object value should be + System.Int32 or SQLiteErrorCode. + + The message to be logged. + + + + Creates and initializes the default log event handler. + + + + + Adds the default log event handler to the list of handlers. + + + + + Removes the default log event handler from the list of handlers. + + + + + Internal proxy function that calls any registered application log + event handlers. + + WARNING: This method is used more-or-less directly by native code, + do not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + Default logger. Currently, uses the Trace class (i.e. sends events + to the current trace listeners, if any). + + Should be null. + The data associated with this event. + + + + Member variable to store the application log handler to call. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. + + + + + If this property is true, logging is enabled; otherwise, logging is + disabled. When logging is disabled, no logging events will fire. + + + + + MetaDataCollections specific to SQLite + + + + + Returns a list of databases attached to the connection + + + + + Returns column information for the specified table + + + + + Returns index information for the optionally-specified table + + + + + Returns base columns for the given index + + + + + Returns the tables in the given catalog + + + + + Returns user-defined views in the given catalog + + + + + Returns underlying column information on the given view + + + + + Returns foreign key information for the given catalog + + + + + Returns the triggers on the database + + + + + SQLite implementation of DbParameter. + + + + + The data type of the parameter + + + + + The version information for mapping the parameter + + + + + The value of the data in the parameter + + + + + The source column for the parameter + + + + + The column name + + + + + The data size, unused by SQLite + + + + + Default constructor + + + + + Constructs a named parameter given the specified parameter name + + The parameter name + + + + Constructs a named parameter given the specified parameter name and initial value + + The parameter name + The initial value of the parameter + + + + Constructs a named parameter of the specified type + + The parameter name + The datatype of the parameter + + + + Constructs a named parameter of the specified type and source column reference + + The parameter name + The data type + The source column + + + + Constructs a named parameter of the specified type, source column and row version + + The parameter name + The data type + The source column + The row version information + + + + Constructs an unnamed parameter of the specified data type + + The datatype of the parameter + + + + Constructs an unnamed parameter of the specified data type and sets the initial value + + The datatype of the parameter + The initial value of the parameter + + + + Constructs an unnamed parameter of the specified data type and source column + + The datatype of the parameter + The source column + + + + Constructs an unnamed parameter of the specified data type, source column and row version + + The data type + The source column + The row version information + + + + Constructs a named parameter of the specified type and size + + The parameter name + The data type + The size of the parameter + + + + Constructs a named parameter of the specified type, size and source column + + The name of the parameter + The data type + The size of the parameter + The source column + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + The source column + The row version information + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + Ignored + The source column + The row version information + The initial value to assign the parameter + + + + Constructs a named parameter, yet another flavor + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + The source column + The row version information + Whether or not this parameter is for comparing NULL's + The intial value to assign the parameter + + + + Constructs an unnamed parameter of the specified type and size + + The data type + The size of the parameter + + + + Constructs an unnamed parameter of the specified type, size, and source column + + The data type + The size of the parameter + The source column + + + + Constructs an unnamed parameter of the specified type, size, source column and row version + + The data type + The size of the parameter + The source column + The row version information + + + + Resets the DbType of the parameter so it can be inferred from the value + + + + + Clones a parameter + + A new, unassociated SQLiteParameter + + + + Whether or not the parameter can contain a null value + + + + + Returns the datatype of the parameter + + + + + Supports only input parameters + + + + + Returns the parameter name + + + + + Returns the size of the parameter + + + + + Gets/sets the source column + + + + + Used by DbCommandBuilder to determine the mapping for nullable fields + + + + + Gets and sets the row version + + + + + Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given. + + + + + SQLite implementation of DbParameterCollection. + + + + + The underlying command to which this collection belongs + + + + + The internal array of parameters in this collection + + + + + Determines whether or not all parameters have been bound to their statement(s) + + + + + Initializes the collection + + The command to which the collection belongs + + + + Retrieves an enumerator for the collection + + An enumerator for the underlying array + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + The source column + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a named/unnamed parameter and its value to the parameter collection. + + Name of the parameter, or null to indicate an unnamed parameter + The initial value of the parameter + Returns the SQLiteParameter object created during the call. + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Clears the array and resets the collection + + + + + Determines if the named parameter exists in the collection + + The name of the parameter to check + True if the parameter is in the collection + + + + Determines if the parameter exists in the collection + + The SQLiteParameter to check + True if the parameter is in the collection + + + + Not implemented + + + + + + + Retrieve a parameter by name from the collection + + The name of the parameter to fetch + A DbParameter object + + + + Retrieves a parameter by its index in the collection + + The index of the parameter to retrieve + A DbParameter object + + + + Returns the index of a parameter given its name + + The name of the parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Returns the index of a parameter + + The parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Inserts a parameter into the array at the specified location + + The zero-based index to insert the parameter at + The parameter to insert + + + + Removes a parameter from the collection + + The parameter to remove + + + + Removes a parameter from the collection given its name + + The name of the parameter to remove + + + + Removes a parameter from the collection given its index + + The zero-based parameter index to remove + + + + Re-assign the named parameter to a new parameter object + + The name of the parameter to replace + The new parameter + + + + Re-assign a parameter at the specified index + + The zero-based index of the parameter to replace + The new parameter + + + + Un-binds all parameters from their statements + + + + + This function attempts to map all parameters in the collection to all statements in a Command. + Since named parameters may span multiple statements, this function makes sure all statements are bound + to the same named parameter. Unnamed parameters are bound in sequence. + + + + + Returns false + + + + + Returns false + + + + + Returns false + + + + + Returns null + + + + + Returns a count of parameters in the collection + + + + + Overloaded to specialize the return value of the default indexer + + Name of the parameter to get/set + The specified named SQLite parameter + + + + Overloaded to specialize the return value of the default indexer + + The index of the parameter to get/set + The specified SQLite parameter + + + + Represents a single SQL statement in SQLite. + + + + + The underlying SQLite object this statement is bound to + + + + + The command text of this SQL statement + + + + + The actual statement pointer + + + + + An index from which unnamed parameters begin + + + + + Names of the parameters as SQLite understands them to be + + + + + Parameters for this statement + + + + + Command this statement belongs to (if any) + + + + + The flags associated with the parent connection object. + + + + + Initializes the statement and attempts to get all information about parameters in the statement + + The base SQLite object + The flags associated with the parent connection object + The statement + The command text for this statement + The previous command in a multi-statement command + + + + Disposes and finalizes the statement + + + + + If the underlying database connection is open, fetches the number of changed rows + resulting from the most recent query; otherwise, does nothing. + + + The number of changes when true is returned. + Undefined if false is returned. + + Non-zero if the number of changed rows was fetched. + + + + Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to + this statement, and if so, keeps a reference to the parameter so it can be bound later. + + The parameter name to map + The parameter to assign it + + + + 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 + + The index of the parameter to bind + The parameter we're binding + + + + SQLite implementation of DbTransaction. + + + + + The connection to which this transaction is bound + + + + + Constructs the transaction object, binding it to the supplied connection + + The connection to open a transaction on + TRUE to defer the writelock, or FALSE to lock immediately + + + + Disposes the transaction. If it is currently active, any changes are rolled back. + + + + + Commits the current transaction. + + + + + Rolls back the active transaction. + + + + + Returns the underlying connection to which this transaction applies. + + + + + Forwards to the local Connection property + + + + + Gets the isolation level of the transaction. SQLite only supports Serializable transactions. + + + + + 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]";. + + + + + The file extension used for dynamic link libraries. + + + + + The file extension used for the XML configuration file. + + + + + This is the name of the XML configuration file specific to the + System.Data.SQLite assembly. + + + + + This lock is used to protect the static _SQLiteNativeModuleFileName, + _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields. + + + + + 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. + + + + + 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. + + + + + The name of the environment variable containing the processor + architecture of the current process. + + + + + This is the P/Invoke method that wraps the native Win32 LoadLibrary + function. See the MSDN documentation for full details on what it + does. + + + The name of the executable library. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + 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. + + + + + 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). + + + + + Queries and returns the base directory of the current application + domain. + + + The base directory for the current application domain -OR- null if it + cannot be determined. + + + + + Determines if the dynamic link library file name requires a suffix + and adds it if necessary. + + + The original dynamic link library file name to inspect. + + + The dynamic link library file name, possibly modified to include an + extension. + + + + + Queries and returns the processor architecture of the current + process. + + + The processor architecture of the current process -OR- null if it + cannot be determined. + + + + + Given the processor architecture, returns the name of the platform. + + + The processor architecture to be translated to a platform name. + + + The platform name for the specified processor architecture -OR- null + 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. + + + The requested processor architecture, null for default (the + 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. + + + Non-zero if the native module was loaded successfully; otherwise, + zero. + + + + + 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. + + +
+
diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/3.5/System.Data.SQLite.dll b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/3.5/System.Data.SQLite.dll index 3cc39cfce4af34a5f874bc47d68d67e411047c5a..2414373e789054b320e61856f75dd7b051a61796 100644 GIT binary patch literal 278528 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 RKor@q`18M?{rvv) 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®@-Qe660Hi_W z+74XkI49HnSqZ@td^M07%9&)-SA)`u2JPN4Ii3Bqf`}8aYkYMc_X`Y!jT{<+i!ZI~ z4pS;$vIJ{`+p4i4XOJR{%fy4RUL%$q>2TbFHO{TQT2U%2<7O)M;=qnp(NQk13m-00 z@J}4NwhVR&ABX{Z^kw-z*bnVUDQ1)41J<|>4A_GT=st){uM=14LIrD-s^K-9OxBOQ z$oUvXt)8bMbKPthXdxgpd=eImS-#_01deK<1`L@lhj?XNYmH?QFoml1Ndci;m>jq= z6%Ycs$#MF7>(mZ(va~yl2lQ$7xdOS1=rE^$zURr=>8qCq(p?%~fDRB(j|60}n0B zw3OuzTam|JDI0vaFMJS-M9k50}e1NY$e#8iYQ6< zC+f08P>9_5peoQ_+{F(Lq1X%mU`QRVas!25{xk%YkGd%pxm6;6PXyCrIRG{#R?0$k zx|1V{3IEUuu!*f#;mc}LNC%hPg|1QiWtxRz1K+C;|3sEc9>*q4ttfXinlnM%_>#d! zbH-c^=5Ef@sauKm@&_Ff}eK=5B zakV>JDsA9$BR4Qec5rew)pCEs0b^7$!9_OF?#O7c%T&xR74?rqU{4TSBx-;)xHnSH z;YK88+ac2OvZ$cT;Non`w7`!Svrt4--xx0}t*xwZNk(mG8Yq%R2sbr|L75N0m|d5U zH#j>g7DJYfAZjcO3HgVy=x=;1aM9DlT83&2T!)U@IsT=bLM^I7v;r#Nf?G<&8O(EP z^eXKbvR+kn3aNa=e9uAB&;iF?J=p-_%(*|HLWNSQ(p+!8#cD5ch%*fiPkeM=H`62m z-cm3O@9MV*(pW>1;tJW1q<~(qA+(MeHgd;nc|&f1OR|7&eE?EdTo0pcfd`X8cw%ZV zRAx180Ysk0@-u1d7m{eCfd#R|35adVoknGnbS8J-gip^dkK&T3l$Fo1qajcy5RJRK zMf_nE3AHp3A2EyEy*jJ``-iz~RUwQTROT|jT8-=KwsCxG_8Lg}LFhtP zF*^EE#r_rg;zihEss7M2r%q3tIx#VE;_$u4Pfr{^dGE1vhtHn4_rAm9XOE4am^gj% z+{E$w-eYOBP!mrK8p}sibL*|j?~bmYI*R{}AZK!K1}9K83$BhV5c13fO3rD`3Pg9B+oVX~N9~ z&@0F)gKJ4ZL{4yGb}NX{v^JsyHK?hCjJ8QNCKl-zOAVNaE&_P)33C{J24b-5pMuNte(KxNnsoti&MQ zOxu8{K;-hc`;*UO3uTTPaNc?fEjo1!SG;&(NU_f@w?B05Bni~0ntM&T65P)Q?v5bdXixsJXU;X(bBNA z%LR%fJY{h@m9Rgc-(HW(;Q&Bssj|)+4pAbY%7dONpoAz<#x4w9mZY>QL&aC*WhODp zBqI5!S2RM7z^NEmIygcCDhogIC$k#$VRNBe(DZ_P<~mts0x;qfd??}F;GhmfH%mnm z5Xt+x3!1Y~1LZJFvI_5$L}}W8i^7Qvu@>x|P%*`!pVMB!D8)>WIi8Qcn5vY30~_@E z)p=b71fSOcWJOl1Q^{8!fbw^17^Ui1E3(~edtnVUo+yr#NL{jx+UCR}bDs#sCx5uu z-Ng}*6ArN1&kbkG^I3RRCMdB%f6z+6{&9nsvVpJJCAd;xghdzwg@mHO=OZdMRG5IV zlG3b4O22O)Zk3eF$3cThY%4`P-~zu+!JPvXi6I53&~0f7WqZHR8V34`$aIdb9W={f zP<1<3keLq~G)rCnqMe}NjKeh@zI-3_qHXWWenJ;AF&mv*hCu^w+luneXu8Gf$_}{n< z2Lw>5xeMKoYzzPx-^HZy=RnKmO&eF(P>H3UPgv`XE;RRGC@K zyTk=>&8i@pFDAbJxshly#4hMivG(IOti9lS>R1uNJB1(^({?4g0y=ifQ`V2LK<>%F z$u|KnHQ!K$c)>uf_eUUH%od@V)aD8hc;ywR`%uTi$LIA1II>+j`iUWNV*AlDK(LzKIqHbH2GIb4ePh>A(nNz2vbi9TigxYCzNHra%3_&xEnAXSrNRmVKXivhXc0!>@xfY#yKmZv(6ZgQkbS@TUA7HyJGEM z!n4kj@=CanQ3Rc1>k1pI`FLR>i%ZmfhM93ns%UmsKs8#5qlXO&)l-ibxeo$ROMwGx zD!TzOA0bWS;aA%tHc1wW3A776lH^%@@F;c(A3MFE(s)|*u}C-P1kNp#sCTA@EFelI zNpqs&z8sun#fL<)>m*)F%htGq&{tDa1LE6Y3AGL3=dd5YaW)Ay$7h%2Ds+TFgf7Xq zNJ2{@U%)s+ryDpKb_-~a)1HoCRSy%EO@&8e;fwY&!wD6>2=cW?XXqee@sMsK&AwEE z-U!1Y>IO2nTqwbs=1fzGaZaO9Cz5q)%}V^aC^?}mrDxMle{lC(@p*DKrhzOBN^+?{kw3HLCCRU;~;UIBJm@gWqPI_s|1-SwZnF@)Li!MFS>77eh zt58^QTF+T~AWmHDwPcDA_IBXwBAoatkFI3EDFGaEQ^BO}2q6Y4V*nR(k3)_jO;HS< zI>}>?p|?w&Ue*aF2O{l^lPw*w15eK%0c%swsWU)h`SQIM2yO0xA6Z((9~u^fA8A#{ zZN*)`9BYp1ezX)c#@x4oZ7cpeY^L$=u*u`!f;o?W_nTGxyWc>&F-HteD0u%KF>SB| z;A1ygQ^OA)e7r{t&JNg=9MW*OK+>|NjDHoRjNmjt0nY}?@r`XE)WLq2#I%hoW=+a6 zzq!4-0n0%B8ut9~aS4>Uiuxtg(RM3HsiVCT^4T9-Pxf9$=@R~##WmzDNqv^ep^ZH1 zym6>TfSU?h#d!;3x;LZ+)3ISp$1!8NDo8h7#DM8QsN*QgR0Nx*4;!wihb?;4F`FN~ zXhzMvnK3E+CV~7BOa>28aB!=FsA@RyWyFgZ27$f{`8-|FkjAhPhc1a6+}S`!Ss5_V zQAQXWI|$uuo-s$wd+=7^IaQ6YuV>6Ls;F_c|I?t+iGEUM9If)n zJhr;P9(S_!QD6XVbaPfXK7F5-T&5f|r^4_Fb36>6GAGfSmY$F{II4IYt?Y@XNNb5S zX*H3itrK^gpD{ZY#z{M7z=c9ghbhG1V;sqiuFM70o<|#QPKeQIv}AVjNn8;ZoCQ~6 z2I(>rNDbTTn*k=LG4nEiyEMiy;WGm>CehCx(#8Z@I&0p6_ZVU7=B!)7ghlYv6GDxUrJ+48#FC@vXAbknv>A-wwmjhC z3Ki)g>|v)1VOINGSmrZ~$xMbZnM2fa^I#5={!`{r;Bf-)h#Jo!CRn|RCD`{Q-uTc3 zLOKJaQP7vPuzfxtyXE>V2)wURMn>@(Wn^r7bjHaULO!u8K?MWxIM>hP7)u&8K!HDc zrs%Uhvc!lX#@QuV;>~1=AOT89%127aM=;q@3Szf3%g=Mh|A#Vrl4aORl!jPK**qdW z$7QqM@;N}$cBqw9Z?1`wx4c$KlxYb^D;=Q;j+U+aHMfJ+FQXa=O5WsPrKUnXB{2v4 zx621E?@s1L^TioVLe53+w{CVuadR-5C8r(5>zjdO39~awG50!He4VR#c8(;VYP5Y&Dl=-*&m?a55*Fm*#midtGTC(`^GT z)%9&8C01s_>4?-IslSz>G*PE5N^AsADopruE=bFY4oQ7@MD$;3fmF-PWDak9@Csq- zm0E|Ynd+=XNp0Oe_2{sju?4FyzjoOXKv+j#@m|2QM&EcFKJ?^z^I*pmyJsO9$H?{e zIjx?sQg6l?H5sLuOhbfCA&ui-0W`T-zQYBs9s}CCK&$F%9G~V8$Dx)4d2wmm7R|9N z`k)rg_C`cyu7N+h_Bn^D4pTYie3&z|4QL0@0?3)m$fpWT`-82pSI(NoYfz0xP;N=a z*D&U`=DAnQbHr>-`Z(5HO6i64;pQqWg!{49LZfyN|7M zZWODE6>V8(Jx*1usfLp|=x|SbkOHf~9xYYQVFm4(!~T5f`eO>q69$eX!mqiv8AG&i zY3&jl${$!yEnD^}csU%mX?46DPX(jWd1gQOJOFB#TNDnhqp*+~e1p*3;vk8%8(j^A z0|#gUlbNQKyo3?ciYJ|L?4&-9j@0B<2w@~e`jknorfWkjXLF_`?I;B}4AUAXeN|B# z2Tsw7(uUHFn=??xAsVUl3$R?#JS|WfxG7MQUb(Kk{4+|AN*_s?<;xUu3Q8ej(anMxdp-4ZJfuC= zB}XRrWb7(nF?~;1$HG(8lzY_4fY7ly!0kLn#4(|N#yp4+*V`pKqKCxoaD;UawXX4u zZT~${$$L0b;)QMvn(cF9KHMx0lsYJzG9)WA>dB}!gL+(5q)@I0t}}-Vb-mCCo&zjt zF?<;tHRh?a0xKz4M?qY0&bY=&2c$P0H~9(SqSJ->gzy&R(UKtE$O&j9Q>t>z81?3d z-rVM+<^K#k6YLg;Z~+X5>$}c~)@RHKl<*MS$LUcf`w(1M>-24;(y0CVhf9(odybZV z=v#XHjkOdZE;7rM7!`JoPGL8f-&o7>B~P&%^`LEY!uZdzFT%q9FkyWZ&w0TT$bWSE zCB(^AMT!0SDxkkG&26eWsX#vhG3*o|3bZ5WNkrc5bueFbauzUa8MKE_;K(vsMT|YL z1vB6n)r=4!AlyY}N|GHznKDYacvxbu@01Kvr^jtQw(Ya1>yKEM7*!OydFjcl5o=HU zV6DA2{?PWLX`wlFs&1#i6X&mQM$qEDzG!u7m%}lI5NG0PjEy2%l}QRc(-(`S&U$$i z4@>6Vs6*x%DF&}=gpa>DEs;G{gjSR}VWhh_n{;dt4v6KIF$pP?Caa{6c?7iMms&vT zx};wd3RE?W>drW7lUvNA1XWUHfx2pAVxzEqKh4J158TT(qgfE@q(bLlQgh)4?&sQe zEhd!#if*c!q#@1$m6C`*lS``_=41PIq1#rgt}Wdf-=t4x6sQ>!32f3K)gBeWs+#(} znZ+5D*lrbZ4ZYR~bj%65I^-bb3Q>hEjvJ@Gn>$^}5r|>R5?$A4WP>U)j_x-PU~AgP`J5ba>&lH5EAU3gkK=sSjBUp;^L8|^ zg-Nu1Q|q=v9{(uUb@O`rAvjfrxLyO6FA0AjpP-RWCD|$W{wm`bXgqW5R1nEUo3Tgb z%+6)eQAafTRx3jdHF7Rr?y8BPW)-=e>y?Hj)p-XaH$ctaR_&U57rZsvjJeh{jn<~G zU(eSF)WDCVXGA-ynW42aZ=^K`Q&@XgafqWkzyMX)bD#n`Pq<3VzGUtrf+w16$sE5P zH88hH%RLFM@kR7-PIk*C1i#dq6z67`P|@IKpGp~1s6mqgM))qL#oQ04#NF5*h~lOL z@#z%W^JlizTv2*OFp-AXw_l69jVUiL*)TMde9?&9Xq9_dK8%awPrb&uwA935wm(!!ODZ+f>{#s27Z?CK~{mxpR*#67h` zv-yD^ZYXYG&I01ni?*COPy$Z7oIV5!C{7Q(8x%%dm|TJ&vUKaIi~~)frW2{>033-c z5~+yzgEwQN=+763wA!e`v6Kp7k_Odv3P!d2~NAvox)T1_--Jg9L}u)mQuXh zl#MCWp!TS75)HM@cxw)RzeSx&$K@jpCy&$8!|1;-7vtr1wm5?v zWn{%so+wYGGml4&=x|X-x;k9BlquJlLoT=VS`Ei}mZ~c1D~dB}J=dgwQE1WEspO|j zmP>sJLt(1Vt9USlLQm9CY>X>lxqvLMnjcnP-qD#oen43`-D$N+)NW^)VdLl51rQ5K?skwVa5zLmh7&tx%`a_Q)=@ zY}n#{YP~BckprGb;+psa@%HFtaV0ZCBTQi^(%!>%yK%P>|4bK8a~WWRPI1x$w|uCI ztzmTLaJ&a~ohM6$ZSLhPD@}Q8=+1Z>WRqH^1^)KELwe?hhH605h?8#3-SJl59V?f? z%GYusEc?{<;HO|zg?t39;JfZkEh%%AhGYZui63mpXpmuJ!FZ z$o`EtqZiT?w}*8VQ?uk6P|c1~QiYOk^3lhXr&ar=XgK~Bxr#;F`1Dh&CPE7PQH_#X zLu*-2{fD*;dS3fc;8!;+b)%RbQ`Mp!Wun*BA4RXe%%gvV^C~m>o*zwbB$;Y*Z%G@Sk{mFy6WI$bgKhhNQ~134lX=|9*{ft-e}9)C3}v`_L7%87VyuI;?6 zS6bxkgS}B(WGmE9x%DpmXLGB03g4W;jl$m1siT90Y7vL4yXpj7Z6OT#rf0(qr*Qzu z$)>SKb!fvpYs`KJVRNpzovex`r7J_0K@sMk`-3`xauc!<;5Gz!X@UFqdVD>F7>{Rj z+d?-C(nz6WaSSDR2>Kl2^P*bvAi1bxdtBM*?1GWY5L2i*t?lj8%?Is=J%%}Q!GH(F zAHxql<8(6Jn3MR&1K~*7$9}bhLL1h_xn*u?uvL`Xc>(n%aQGhK8(lb2<3@#_W8nex zM^OH8>6I4{*cy+rPcmgc5AbuVWFGU!gX$M$ELX5jup0;`)6;`hN<29!2i6cr*Nzxl^8g*_+WXVZ9kY zSC-+MrR>epuIX0EWj24|;Wq^46cmdeY=BzRAMBHu1KwmifuEx6NdU*8-(lVkBj8C; z-klgK2M0iZ;{O|f-gF1R*BN*sHdBW%Fbt#vd!xg*ql}iiUCP`JTU_&RhgPA>Ll41W z5$=x|Lk6tNU)siFMcgIf{-`|~1rLm4CmApY-k_NPEAd&#_UWNlVSl_lEx}nVDe*WQ zB=gieFJv_tq|X8d-qy0r^p<#S-d9Qs^E-zSk6JAN7x6M=jb84)crI^_(HlUfn8K4I z&?8%JtR`gO8MLm)&kXJoX()rb)?aeW-JjyFGVdSFqct8XdkoM|3ro+SH{L*-ME-eL zlH{KgfrLnh2yam0}boBhc$oI&CeGj*E^A__RY5!JGVJ6pj-Mo)MW zv~uWrWn;8++x1F@v}9+OGva2vsn3HtfAKQ0zU=(RON4!3KXg`Rg<`X*bvR7@+^`nX zDelIA@f7gxpffje4)hk`JSZY#MWz{`NSsF8(TUkl`dmQk?3e9uRq1U+-X@Fgg_-?v zPai!?)FCOn%x&>Jrt&-keI{P1&5v=yIO!zB5wHn5o4C-X5#m7x9-rVD&gf9X2&6QZ zIss!DceL;+#HIi=bpbl~bZdp06P^gssbE4U-Z)Hddpe6z=tbF3rh|>B z1{XOYTp3=<9OLy#1Hc)(U!sj zTpaYVrmUAKUcHq!P6s~-ZML0>I~jedk7!sAQ&L-_@N@@!AXN8im@M)U%!gHOuG1#9 zQ>D2K>PnxcFY*vW&Xd6HA;dE=>Af>E%c+V;vrrWe0v;)E3%qiSric z0gGDB;4I4aNcGDx+ybdEUbxM)BECD>ql32Ln=_vNa9c8`B{6OOQJk85zQs*=9|0O~ zz|<{aMkB;%I$h;FQQ#c-Psz3WC%`{=6xYRAO5LkO=$pq=eY9XIV7a-&2jE{Z#Vh1B zK&DesGFV?&d&7PTxjip&yESbN`nj!<`G^1iK&C?-5V=c@F0!8qOuE^Z2CG))t*gj5LDU&3drjQL;CL9+o zhxhTxWc5BcrnC^BkvCJ2d!o6=opCf68DVjTzPBE`gv1iNXL*pRGE?;)MXZlnv*tOm z47`G56JmUr*FY+86L80Z8qPSDrz>T!2Sp*Tc1yT}2N>!6Ve5(0Y|ss(9D2x-ZX|wL zA`X?gox8lF=!34L6xf2EvLMf-+3#qH)&ah&hE(ce+!?gjtZrgD_sZzhNJ}kxs_8JG z^MlFM6ev zMo=F<5`@wmx%w0J+MGGGUCu>;^%7bx%5IstP5aT4al{|~ZYuhTE_un_9ONDU6X)r>h$(o2^6Jli$u@&oM62 zO{*5))Y$x)H?sWS9EG7-KF0O`P;tQLTGS+>H&Iz<0?GR#HX3Iuk^eEFbK`>&>Z9}+ z&%r27by@XqdL^KB)4%ApeZ$S+ZKfuapjet@*2>~(`H&RsCuOhoNUs5!G zoS#u2sg=OcnqA!K22LwisLegCO1!4q9W;mH2BT*a&aZqXPNE0wkHGLfW zxm+&3V58*`wX3Ox-NH&HG5CB(!Pi-D&20^Kd@j zatJNq$sVy7FuTZ*Cl+AK`HJh1u_}F3~&9 zO=@lvS$OtSY`7yN?!+$L1ZZWCib-yok%4l%$P7^P^|zVKjog01pZ-Xu?{PY^p6cb* zC^O8KdGIRA%L&YKSO&-I-9Zt*j^c(pGdf1401M;3WUgKu08S4jbNqS~&%~_E(XiXr z@{dP3&EM>cA3Wg(xILh9n97Jh3&bqvn%GmyA$CbiIKaLyPPrrDu@fF;56}OB(m2w1 z%hc|vcsME`_Cz%}sG^MmGTNa?`(u+U3&}k!)1zW})tCodh$jQxXU5#v-FBfnV6Iz* zJZ>Qu5O+rBt<62-0#ovum%C!enxsj#$SqQi5_2>*0cs%Zq*}!ouR4&zc;wlAX@O<+ z?4+Jwdqj*pd=@3gQIcv5Tjm}g z-O(w?M@mULJIyV0V$;sNh&(3&C{xvKFA@^p)?s<>k8<0=g`Ml!^%T#Ge<;u3qgd2~ z6sJBu#sLvN@iy%8DO)DQ;^jL7sE>ogUIf&1hY-#*cpvf3ImRbW@#K0m!;^S6P{-xO zR@xr*{-}hp@@3Zvcu()a@2LFD=3n#F9Z8VncLd#$%(4iv6P_RDK>9nKM=+G=s?85GbibV=n0KzE zD?ef+;E&MBu?!PUoW zgspKxJufH@?LXy1Nx!3BO4YrbRyLq=Xu5Aku&hV06K*>0f)RQS zBi0iO@p0410R8p>cZghNG_@2S4$@B##IMCu?$fEu+!Zjn)^(G|(6lvT2Y*rzqvz^D z-FsX0+g!J)&s`6qzJ5Dt!{CD!J0m`Cc5!7zhqX+f>OIPE%`R#Q(RWu&kLs6MIB0yH z6WzqP!&)1M>?#$Dqvrv)OVD#aP8dAQE6Wq4(&(ss4tU~~$y$R~KPPTeTHG~o0bUFquLS4>jBVp%$D$lCqcbBDeNhxZwP&0l!4zDg3^Zg(hj z3V3|5L>SdTdS|F`Wud6~7iWlS{!4tZ1j>Z_{EO)r0U6(n-@8D{{3fY>$CjVA;-}xJ ze59awP+c%PqkPjx1D7S}6E;sd6_67XSGEZsN#^=D_-Pn$Y#ak8iDc{;hS~hsf<3~g zGoS3hX{Wv>>!YQBZ#Me}@hG&TV}hh;YPh5(>doYE&aUG*Iw~1zAE=H^&@P)cZ1A@l zY%5sIMMY2R;kl!NZpfr-wI@}VSJbo`IoDNdWyxP})EuyPI-shFyM6*LEEgGgOoIL= zb+2VG)%uBBb@fvp=D9pfe$NpQnOHRkmB*{Il3b1#_xv7B_d4VxKle+wXc^=O{c$G` zx{M?BBtBoeu5WxKcvM5!YgXA`#F~TE1=k(V|G5@K@4a{X9=X#?GAp2m!EN6hG3KT8|`VT1Svzo8KJAi%f=z%2t$Z9Y*IY zPUGMI;z(rblT2BH-zBOxbxG1~-KkzHrhvOy6g`@TDrA0;cF1*Z1_W$DMJ)+{A7(mY z+MZYd3>#tV%7`gsSVq4Y#C5Gi?h_5~V#GhR7F{dUw$0}Atz_B{+co$#-qNlYI~gT zLBEJb9^p1FB1m-eCA82VdHq_Rk|L+KS&J5p@y2yo9rOhG{Lc(9o%ByGR{;r_WAtZJ zLc6=`KBSRW;c4jdB}@M@pn4e`xkUBN+o|U2AJ*%lvswJoc+74 zW3zJ}v1?HIu!3;du8Ozv7^;T!#gQgW54957aa!A5`{K88Rg(y@RW5drap@TU&qoj(%7;{T+9h{;rYswgW>uMmpMtf}!4#uE8sK z53U{PLb<^!r`-py{ZCvsf0VoVkGyp37}#jv(butKxW8k^;CniE3~av0$5tnjk0YHF0o*y`>l@XL`FSu$ibQv?a`9%V{`F#Jt(e@n&I(HzU zeMit~_U_pP{sa7a@oNVP1~y-A?;0_9VGaQG(Sf^ycFvVN0)znch-vG`3~ikrJl~IJ z&u${G9ic!PKwu}ZJGixbaPvC@M|(#)5k3tF`=VeF1$&}kZxq}a1^ah~Eev->;em}F z>4hx^Bkh6ofh2;2B!o1Hz%kT~nZ*kkK*b9T0ZK{PjW}{ysDJlJfFbtp=D&9SyJ2L9 zBm}#I-Tf%l$C`L|+BfmQ_zwH-wr{q^^d9@}weOvLqfv=Yl*RljoE2d{?&;%fdhu(2Zj;wm zkHg}1*H@1seARA@>;a^5PY{2k+C!JBc#K@nb*Sq+q@K@b6xfV%|Ndy@Z_ONINOd zf|Nam-t^{B0Xe)s#5&vpIV%0LmD7kb^*GujVgJXb^J)TA#!g&&{Y3P*HX8b<%%6cbIiluWH$!WxnO6_HY=`mTx zk1ZVq1bNh9E?Xy5$0dy$NSrlpD&2#8wxMljk;8sC{ybW_55L{VV3TuejZHBG&b;-- z9!SW|kF;S~Gei;k+)y7@zLh{j{p}qFGSh&Pjp+sDgYet?4TRduL3=y6RQv88T>viy zJ%)VvrC{*UF0POb7a!Qb(vTcVzy9GamoePMs$6wwyuBkpM*%ttuw-@&4iUcJY2Psf z8Pr87`f@+u8XQ6*n1}EW2;Mdl<15Xq?+8HouHy zZ1Q1Ht<#`dCrfu4l<71m(+MR7kB9j{!Ol&VyXjqc1V}@3Cp!VO>4d~Ho!xx&@X^c1 zPCokh=;vb>9|L?0^09}HxA3u-kGJx1BOVy@`Su;X6qq07ct1`AoOBbkb(+x!caZB1 zo)=zp8d8T5Bm=K)gQqz?M+Z-Ljevij2D2q+M`U306NmuMpTM{W7bW{BgXj4;ByHh| zN++4{xCGG?n%sJjDNjj}r@%i4&kSsSve$GT00aD7|L}o6((xcLVNvxUt+ zKnu_zJ_!ka072*wOvktsn2&eeLC8AqARKrcLYxrb`M3lhWbi2|B~=DDzY2!kHn=#r z`Kf`;Pg6(e$M68LI#otv;7zv`+gW2#NZXYp+)|)UUOgW>On-5SrL z$=7`6i39%%20kvtHBL}|4{2LpMOt3)o=2!8p%OxuBy)Fm#5{9~3R zyG8=oMYbx)8Yn?qgI8`C=@xrws27Rs`-(N4P@Fwq8Ddr!79>HDBGa;0p( zFG|~VX`4~n2VL3+k=8c?O%(e7`F<#^?E@pdgIA&`@`2L!!7C)uU*qEo{UhCN1RY4h zJbVGec{Tv=K;+rp0ooeCJcJ$9Z2Tkf^&f!#+;MBLs z$is`3gl0E?vR(M~UxG9~N+bu;*mpVYQ!?#S2vSc4re7p&;3bhQjciHeGa9k4F9VhB z{kzFS(d>6QRa1DN70%a-^4yZ=XXN>1V&DZnKG%5z`Na?)`}lYpAN%<@z{fBjH}QeO z&+ilk00CIhJJA=$|JUg7CGGbmEFoHTSVAvh(y0MIPg(_Wf)NK;4@m28w-x^e6+hc; z@cg^M9xv@5w6V|X>mOjXZ%R=Y_yo&BiV;hpyhBmj(}_9WDx!2eSZu1pN%gfvRi{!`|v^V+PpKz`)jC3OEqlK2RAD4|9i8|8i%6bN78bP!T0>CFOpb zI6272VLt9-+WV1D&ZIit(BS5OX6h?^yo$$`3AK#fSal>ydJ-@kGx!z^=Kw`}M;o5I z4{!(=Tzk-uDQ`#8kT4Sz=z{5lf6A`k-!I&l1oWLjm~nm3&xk^@YiMGaWi)JHP;yeg z=U9q3VUV)b$%m|+?_lTw?Mop#O!D_+iF}VE)`$*|b0}E(9-a)tjj;uJ0mbt?CIFMi zfr>lg55T2FiVTx<+j_eZ9Xikt21f?9HDVdh)(992E8QwX+PW2FxqF9UncF%IoD}5O z0eCP{`ga)dC6NoT3Fxrx9KtY>qb+m6xP>E51}5~Qh>qlW_Kp;Rf;s9lk`k^O$QV3~ z?Z6bK!-OH*!r<1?JtMuEHn4TDy{n5k2mCZmYIi-r`lnY4P3W9!TY}x^Wo`}%WLpO% zqF``7Dp96jKhUN&o+pb;j(}d+7=KTrs53~9wGKR zxOE%y+BrW8FA`*-q9754wZL+C((55@fldb(=?55Gq|8LapidNBKgoJRgp%xgR5^$=DBhz87;#19(cipR1?D~I_w)@88j z56knIQq8fhK$7@8cB{Y3c?8aLJ-A9YY4o>BKwCromh+Li;AiPJ9gyA-REQ1j4%Gf) z$`JkqZ!i%%1F&|nB?9GI4d5b`=Aj$dK#vRby1-80j-x>@ zebN`IBMe8C0Q|yG09%GFvte*Vg2W#C6m`f42a`? z38Zi-33up6PiO*Bi%s+-6FWEu{SXs8xM1Ip+4qxpbJ_+@DkAXil>rW%9NcZoyo-H8 zx4XeXkJ%&K0f+=4ozM)2fC03$dtmEDVBqIPcjTOr z$c9uKv=J~y^~*75@CsH5TOPs+#(VGzmKx*qF5(5660Hy=*A9RMAdQva@|8jq8Y7lE z)D=GzprETvFD+Ec-BdPhWhj40)XKYi;oTHwmZpXXzWk2yXT_;`$uC;6bovX$rK5+5Z#Xyt4*_*m!TSw1%Tcpo1hL};{|0$FH=bTN&6196Slssso&w$L9Z0aN_Qh7F9FHmTwf$PBKkXMWb>P%2SL1j z6UrHk6-v5qY7_V9>pmFYL*UKyzqa);4QSJ>uY)ka_r6X6j z+8&m|Tc4xIfsgl3x&lr3HQ}uS@4(geZIM6Wn1dxd2u;R@?5ut?zLu;x$D4{$~sdPX_-= zf`3J|0LgqJ1)`>(nbaom#MmH&M0Jn|+IfZ9uSoVQ0{+(({I7$`10t>m;xp)HNE&@b z0sQ)Iq3gl(L&N<5>XqG)t|WN`(Sh5uc;yC{h%&Fb)K~k3teGP1DparDAj<=(gIiz2 zR))6r>h9itoBj%6V6+Qkcm=+3=vcdlbg>}8+LFuyUw{{$dqSe84Fg8Ty2uK}B@Z4+ z#=)%tzQC333$8!L`be)Y5;H&Vbjht(!qBT4g3a_D%0(fptrt1EtrrKMGa5h`))_ED zZV%=FMkYgQCs%5R`*Enff2W23vKM}}9n#&P9nA9(%K<$o!50?9D`*8Ml2k;2(~kat zkU;++`p?7qhFT&)yL|x3ib}+peZLB|it+C$G5V3-g&)QF03h-?_%{cOvXDU`MTl^S2X0O0rZGQB^P(LO#OKqa#~>N$eKKAD@`HbR;R7%I z`G0@#o8N!xeUrD3K7Zj8@16XKFC04iv!ieO{zD)8yJxC@TKv#Y{TC1aizmK0en;P5 z{mXa0@A&dh-P^h6*?-&L82!>eKKsivw?6#KAN|)K{?q$T{Nrza{uj@G^Te<9?|JFq z*AG59^y10?W^DCqpZL~qzyGV3j_!TspZwon+WC#Pz5nUX|FC~$Ex7MnpZdh;p9ljT z*!t97!a|4^+Iv#vONCmoQOFx0599f4&_>TL{)0Ifz;yuG*VPSrr-TOi;R(`rf*lC# zfO8r)UpKarKxDl@?jgMU>>K2?bx3r(FX=Wd;{#h??lIU!!@tcfDpDIZ6&4S|!#38{ z4bJ-_RvET((LT0ofpKo(f}0F%eFdAiNZk4g;ARC*EZ=?Iu#R5r?L!WBcsX$&X`|)| zgNQmVMnq1w$FQ+sOzm5`)l|}g=$wWV+8o^aMhDgoitO(0rmc-;kOmKaNBa)gDjl%q z2DbiOdq0ML=o?|9d(56T&}KU-?rH1nW{()c)^}lG5sijc*TB|a3-I3scWFBS-G-3E z8{FI71z$mbKdi?cz$n6C3IX827C^_YZpg2fXtU#glz;^Ym4*KSCtxzqod#9`_iY2u z^>CH+4Rv>8IOvYM)5EA?!!LB8A|S(B?#7CzQ>I%vNmxFGyrl7}pE@gpscUtg=5A5vj)L8+BFc{G|K?fjK zAU){orY<%3T&joaeNQ(z9%kV*aKn94`WQf?&pmoz;JL+}W(Sr6CK3~VXZKsN>kdB5 zzTu!m6*hvBV4>K^xdRD;Yv3CTX9zQC&>CJc8vE+S5HKj-3A+ow*VQ>O5@Ef|} z$P{vUIS4S$KKy#oIGmd(MV%6Q3zi8MJRbdET7&Na>0yvSB@LxPa69TW2zT@Ve_J=8 zwISe+xW)fq4*drJLMOCjf$qlco9 z-8FKdP^%X!<^Q+6>x*&XIODsQBR0p~!7XXHOHH~&(9jgjuD!O`6qEo5f`ki{Gc;|H z$a;5tIPuws?c-0>s{T`2MdG22`cgG{KuR7frBb7|Qu+9BKyw!XJ&Thn{U4P=KHtf-FDJS=B=c)&D^(GX)e~q?y6X9 z*1gI$^XOu+Qudz`7YeoKMRj*j%%^ijKNUDmsbr_|?$s*EO=XWPqijs9(-9(eaR0ui zPR$nf6!v2!;6#Ew3jiO4-(0d1r7eT~pgVEQK$rB;dI#9X{E^h)hKa}m;{`d!Vvtqc z1jq`c_c}$QLjy+i88DFI0E!T9JCor~b(@>Xk)>ssrjnX+H6HEN}1^2BU}kmR)2 z^oXkvamm>;l@MnIalW}fC^u{MZRSdk_E6^nb$5ihqLnUXO1YA42N}ytdyBId8ci{u zoUVK4%GJ3DhU13{7Zya+_VO~lR#Ts}Rd{7}jou(lJELpI=b{FPiKy>rAG8uehm23s zY%b?z{7lx)ryXIrc{LOmAXpyTfS`40C9J9eQNxp*F7B&UtHN)BKqGXl^iU7FPu)-` zQvD(Dp+1Wkk>~pmpFF-0cujGvc5b$|SoiPxsHj#I6qhAOwlD*YDVixU;~>A|7|N0D zYiq!?;J<`B6dq7Y)ilW)ou4WZo4(Nm?y#=l2!HDknE?d?+$PqlRGGo_`!PGeiC9t% z6Zg9MpTGoX-IvD=*C=mH7!z1NjOhfJbRvc;u+YRPs+lx4<7R53OeAw%6I%sG@v9I5 z5U;19xnFUC#7Ro1t*dZQ5e#tEH{?2h6&D3vJ94}s%vu%SlG!{h%tjNu(yIsNUNKj$ z7V2KL;Ys2%=SA~$Eof{*v2sH`a;{vdm_=dM#eD6o2+T&UhR9Wk!CizEN;RE^M&}Bm z3Z;Khc^5lZAs#&tTRl!LDBX@wt6=$8w*SuW4B%jUl$97KrmzYFNAKbv0;Kd1Vrf{n z3OzC)8^8mFl?kd}0zxMxdns(T-hDEb468{DjSmeC#V5954TgQUb#;8maO1MZH^55S zHnJhs!7vXYktw)}a&V(WyAgII^g9}zcjfqB0}z1iB3z(&gcp)x5(H}8fap64#*8Hk zLNieDXDr2tD3mq<*flXYq#Zm3!lBg3DqELHjHCg|dXg9*jsiuHcsuVIoxgEuKzipd zpi_us6cS{yjfqXMvG56y4~+Nn5at0m(j0mK4@@@ppem?tfwW%vf|ss@hX(D;3_ADxe&OHx4Y>P8I6mOTMNSU(~lAg#zGc|R)Qkn&+1L8z1yqj=k#MUKTL=VQ7vX)X3 z%bwjpYV3ak&SS8`#A9Tlmu`7F%w1Lm6ib-msa!0pD6ut$h|Nn&eE?MI=|1qtj1$n% zFc&Xj9t`&tCKPLRZG@tgTC|`^>)P-kh&rLqu{!}?6{l;2%3v2gyhu{&Zh~HGK>xc4 zS#rqeP8pqVqoC2bpE_7{t#yfAyynVIBDjp?<_IW;5ou$Hz z)zP#hz~8(Q_)@?Jm_oJQP$I)~DE@4(xFEPsm8-!vbH3r%>XmY_H@EIwWV}gsBV3yH zkdF86&s3mhoC*|jPBqYhc~8?)fMRP83Mo=k9Z{%%5~54hs}SS+tBdoDQ-UK$*G9t( zlR28!L?zGlS8}LPtH`lBEY1ojB7J#xrBe**OX&D z-_f49dZ6OXH5l_35~yf~ji3$=eW7+>u~IqeHL?5P2z7MWCurKhRFL5lSZn9Ozuy|= z40|iQfyo6z88mR#0FhA1hJl8kN&U|pn1sD2@D`e)UZ~Y7#oBpJ#CxO(wqCluV1Htk z8de`jks@}_bS#)7v2-1j>?I@D#Oukp+8~A5j1?rrJ^IN|elJfP-3?w%pgd}L6B7#&Mv!eO`0Q3P5SxXK6MqRLm-#g&AZW){ z!4R<;E#V5rhd88SE^&zUr%*c4J=ETi)LY*T`OvKJ7hyQQkUT2t^W_H3D2-&4*h|~f zgyd6PY(jUti!2#(Y~lEKJ{}}wN_Q2ARg%rMz~shEhV*u4jP6$3*Gkp^)CW z2EcI-ZHPoRi6AIt?~ShZ$g~Hcg-l49i|M%7Et8d#00u{xwJtsqgBNujuCBz9 z2QG!U;*I@v(BXL*8Q_-k1Oz}0Y(w3UKw#=#h5`<`V^Xq7 zu*!aL6!V1oE}1CVWjjH>k9QKFUhpu2m$Ni51IYHMDKQCE2Srq4GKH7a&ZU=t9vNd7 z(61~9wBaL|i~2x&Gj03he02Z@bXdw3Lej^|x&SjywMjX$l2n=|WU;fN4yh-S8+(iE z{~!n7spWF-QLpa7Y6R>0XLP}jrWnlmYC_O(7+(+LI|Ap{YY)ZN&|QR8l;L(mQ5jkj z;#g+kT%mIamVZQvAw;+h{~%&2AtJnof0UtjG~|(d-HyES{_wmiJjcTG>hQdVXS%G~ zn3(M^!IB1};EQkr;W*KTuLe#@m}Ka}f_W+qnuf`V%R7CyhC8xOA9`3@_b_bZ!y^zG zNy>0HJfUmpkj{>YhBU%9l9Z&e);FPZ&Q&hZTpvW4dl$=UW|-~HT+#w65ZZVx1;dt z;c0b47oWO`!?LX|f3LE*oJVlbiit=Oz%B<)^#t&d3_2!BtYapi>~*$bX@TPlfWa}3 zdrO^F%mwunSz^7mUDvh-zMn6aTv7DhY%1{6rCioYc_lmLdzO>Wh#(WByj(G@wA++r zr?=aw?WwexO6{~VJ1y5dUf8EHL&~N`7AouJJ}A7Jwnf*>J<~^$Pwy|7%r%eJYiG+K zY_n9Whi*jdJPJ?J>1K0b=Z+l>G^cCxUK!@| zQC*826BXe#071K~YiJ3HxQ>%csa|zrWn9KnsTk6WO=EK=Q`qg+yc!$^7#Ltc=X=f?-VSRm$At>EuvSQCxr6vVV-9O?E2F)9^zHi` zoKI-{?Fa5_&0o<~duR7{?PkGW5C8R_jMY=$Z!Dc3XC^+J`HE%9TX~qqQAe%Z&`#}8 zB;<<|+zp4H&GIR3HK(?V?B7vd7SLWF-U?WCz{LH?xXaMo3N`U{ZXK`1M}H39tp^V9 z3#Xfq&b^Q3@yESygK+qRqU4ZG|p^?pVO$3zn`^J+kw9Za@8(!^Jq8P4m620{+^cFT`&na>*ya= zYkZ!;=;}*-Rl7iOKe#gLjP|c$xjWfAlG|UiZbIg0tNZFbA$z&>`wz&!d8+}oaa7xY zXL_%^FrK#3*V{XRfxVXdPNKdiv~kpT7;W + + + System.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 + function for use with sqlite3_log() and the SQLITE_CONFIG_LOG. + + WARNING: This delegate is used more-or-less directly by native code, do + not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET + + + + + This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement + a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. + + + + + This base class provides datatype conversion services for the SQLite provider. + + + + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). + + + + + The value of the OLE Automation epoch represented as a Julian day. + + + + + An array of ISO-8601 DateTime formats that we support parsing. + + + + + The internal default format for UTC DateTime values when converting + to a string. + + + + + The internal default format for local DateTime values when converting + to a string. + + + + + An UTF-8 Encoding instance, so we can convert strings to and from UTF-8 + + + + + The default DateTime format for this instance. + + + + + 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. + + + + Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character. + + The string to convert to UTF-8 + A byte array containing the converted string plus an extra 0 terminating byte at the end of the array. + + + + Convert a DateTime to a UTF-8 encoded, zero-terminated byte array. + + + This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the + string result. + + The DateTime to convert. + The UTF-8 encoded string, including a 0 terminating byte at the end of the array. + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + 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: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + A DateTime value + + + + Converts a string into a DateTime, using the specified DateTimeFormat, + DateTimeKind and DateTimeFormatString. + + + Acceptable ISO8601 DateTime formats are: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. + A DateTime value + + + + Converts a julianday value into a DateTime + + The value to convert + A .NET DateTime + + + + Converts a julianday value into a DateTime + + The value to convert + 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 + + The DateTime to convert + The JulianDay value the Datetime represents + + + + Converts a DateTime struct to the whole number of seconds since the + Unix epoch. + + The DateTime to convert + The whole number of seconds since the Unix epoch + + + + 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 DateTime format string to use for the specified DateTimeKind. + + + + + 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. + + + + Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime. + + + This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls + ToDateTime() on the string to return a DateTime. + + A pointer to the UTF-8 encoded string + The length in bytes of the string + The parsed DateTime value + + + + Smart method of splitting a string. Skips quoted elements, removes the quotes. + + + This split function works somewhat like the String.Split() function in that it breaks apart a string into + pieces and returns the pieces as an array. The primary differences are: + + Only one character can be provided as a separator character + Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed. + + Thus, if splitting the following string looking for a comma:
+ One,Two, "Three, Four", Five
+
+ The resulting array would contain
+ [0] One
+ [1] Two
+ [2] Three, Four
+ [3] Five
+
+ Note that the leading and trailing spaces were removed from each item during the split. +
+ Source string to split apart + 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. + + + + + Convert a value to true or false. + + A string or number representing true or false + + + + + Convert a string to true or false. + + A string representing true or false + + + "yes", "no", "y", "n", "0", "1", "on", "off" as well as Boolean.FalseString and Boolean.TrueString will all be + converted to a proper boolean value. + + + + + Converts a SQLiteType to a .NET Type object + + The SQLiteType to convert + Returns a .NET Type object + + + + For a given intrinsic type, return a DbType + + The native type to convert + The corresponding (closest match) DbType + + + + Returns the ColumnSize for the given DbType + + The DbType to get the size of + + + + + Determines the type name for the given database value type. + + 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 + + The DbType to convert from + The closest-match .NET type + + + + For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types. + + 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. + + + + + For a given type name, return a closest-match .NET type + + The connection context for custom type mappings, if any. + The name of the 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + 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. + We depend on auto initialization to recover. + + + + + Determines if the associated native connection handle is open. + + + Non-zero if a database connection is open. + + + + + Opens a database. + + + Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection + to bind all attributed user-defined functions and collating sequences to the new connection. + + The filename of the database to open. SQLite automatically creates it if it doesn't exist. + The flags associated with the parent connection object + The open flags to use when creating the connection + The maximum size of the pool for the given filename + If true, the connection can be pulled from the connection pool + + + + Closes the currently-open database. + + + After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated + memory associated with the user-defined functions and collating sequences tied to the closed connection. + + Non-zero if the operation is allowed to throw exceptions, zero otherwise. + + + + Sets the busy timeout on the connection. SQLiteCommand will call this before executing any command. + + The number of milliseconds to wait before returning SQLITE_BUSY + + + + Returns the text of the last error issued by SQLite + + + + + + 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 + + + + + When pooling is enabled, returns the number of pool entries matching the current file name. + + The number of pool entries matching the current file name. + + + + Prepares a SQL statement for execution. + + The source connection preparing the command. Can be null for any caller except LINQ + The SQL command text to prepare + The previous statement in a multi-statement command, or null if no previous statement exists + The timeout to wait before aborting the prepare + The remainder of the statement that was not processed. Each call to prepare parses the + SQL up to to either the end of the text or to the first semi-colon delimiter. The remaining text is returned + here for a subsequent call to Prepare() until all the text has been processed. + Returns an initialized SQLiteStatement. + + + + Steps through a prepared statement. + + The SQLiteStatement to step through + True if a row was returned, False if not. + + + + 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. + + + 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 extened result codes returned by SQLite + + true to enable extended result codes, false to disable. + + + + + 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. + + Extended result code + + + + 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.Format() function. + + + + + Checks if the SQLite core library has been initialized in the current process. + + + Non-zero if the SQLite core library has been initialized in the current process, + zero otherwise. + + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy or negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Returns the error message for the specified SQLite return code using + the internal static lookup table. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the error message for the specified SQLite return code using + the sqlite3_errstr() function, falling back to the internal lookup + table if necessary. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns a string representing the active version of SQLite + + + + + Returns an integer representing the active version of SQLite + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of changes the last executing insert/update caused. + + + + + Returns the amount of memory (in bytes) currently in use by the SQLite core library. This is not really a per-connection + value, it is global to the process. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + 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 + + + + + The modules created using this connection. + + + + + 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. + + + + + This method attempts to dispose of all the derived + object instances currently associated with the native database connection. + + + + + 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 + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy, negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + initialized for the current process. + + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + 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 + + A pointer to a UTF-16 string + The length (IN BYTES) of the string + A .NET string + + + + Represents a single SQL backup in SQLite. + + + + + The underlying SQLite object this backup is bound to. + + + + + The actual backup handle. + + + + + The destination database for the backup. + + + + + The destination database name for the backup. + + + + + The source database for the backup. + + + + + The source database name for the backup. + + + + + The last result from the StepBackup method of the SQLite3 class. + This is used to determine if the call to the FinishBackup method of + the SQLite3 class should throw an exception when it receives a non-Ok + return code from the core SQLite library. + + + + + Initializes the backup. + + The base SQLite object. + The backup handle. + The destination database for the backup. + The destination database name for the backup. + The source database for the backup. + The source database name for the backup. + + + + Disposes and finalizes the backup. + + + + + The extra behavioral flags that can be applied to a connection. + + + + + No extra flags. + + + + + Enable logging of all SQL statements to be prepared. + + + + + Enable logging of all bound parameter types and raw values. + + + + + Enable logging of all bound parameter strongly typed values. + + + + + Enable logging of all exceptions caught from user-provided + managed code called from native code via delegates. + + + + + Enable logging of backup API errors. + + + + + Skip adding the extension functions provided by the native + 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 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. + + + + + The default extra flags for new connections. + + + + + 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 + + + + + The connection the command is associated with + + + + + The version of the connection the command is associated with + + + + + Indicates whether or not a DataReader is active on the command. + + + + + The timeout for the command, kludged because SQLite doesn't support per-command timeout values + + + + + Designer support + + + + + Used by DbDataAdapter to determine updating behavior + + + + + The collection of parameters for the command + + + + + The SQL command text, broken into individual SQL statements as they are executed + + + + + Unprocessed SQL text that has not been executed + + + + + Transaction associated with this command + + + + + Constructs a new SQLiteCommand + + + Default constructor + + + + + Initializes the command with the given command text + + The SQL command text + + + + Initializes the command with the given SQL command text and attach the command to the specified + connection. + + The SQL command text + The connection to associate with the command + + + + Initializes the command and associates it with the specified connection. + + The connection to associate with the command + + + + Initializes a command with the given SQL, connection and transaction + + The SQL command text + The connection to associate with the command + The transaction the command should be associated with + + + + Disposes of the command and clears all member variables + + 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 + + + + + Builds an array of prepared statements for each complete SQL statement in the command text + + + + + Not implemented + + + + + Forwards to the local CreateParameter() function + + + + + + Create a new parameter + + + + + + This function ensures there are no active readers, that we have a valid connection, + that the connection is open, that all statements are prepared and all parameters are assigned + in preparation for allocating a data reader. + + + + + Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements + + 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. + A SQLiteDataReader + + + + Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class + + A SQLiteDataReader + + + + Called by the SQLiteDataReader when the data reader is closed. + + + + + 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. + + + + 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. + + + + Does nothing. Commands are prepared as they are executed the first time, and kept in prepared state afterwards. + + + + + Clones a command, including all its parameters + + A new SQLiteCommand with the same commandtext, connection and parameters + + + + The SQL command text associated with the command + + + + + The amount of time to wait for the connection to become available before erroring out + + + + + The type of the command. SQLite only supports CommandType.Text + + + + + The connection associated with this command + + + + + Forwards to the local Connection property + + + + + Returns the SQLiteParameterCollection for the given command + + + + + Forwards to the local Parameters property + + + + + The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the + command's underlying connection. + + + + + Forwards to the local Transaction property + + + + + Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. + + + + + Determines if the command is visible at design time. Defaults to True. + + + + + SQLite implementation of DbCommandBuilder. + + + + + Default constructor + + + + + Initializes the command builder and associates it with the specified data adapter. + + + + + + Minimal amount of parameter processing. Primarily sets the DbType for the parameter equal to the provider type in the schema + + The parameter to use in applying custom behaviors to a row + The row to apply the parameter to + The type of statement + Whether the application of the parameter is part of a WHERE clause + + + + Returns a valid named parameter + + The name of the parameter + Error + + + + Returns a named parameter for the given ordinal + + The i of the parameter + Error + + + + Returns a placeholder character for the specified parameter i. + + The index of the parameter to provide a placeholder for + Returns a named parameter + + + + Sets the handler for receiving row updating events. Used by the DbCommandBuilder to autogenerate SQL + statements that may not have previously been generated. + + A data adapter to receive events on. + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + + Places brackets around an identifier + + The identifier to quote + The bracketed identifier + + + + Removes brackets around an identifier + + The quoted (bracketed) identifier + The undecorated identifier + + + + Override helper, which can help the base command builder choose the right keys for the given query + + + + + + + Gets/sets the DataAdapter for this CommandBuilder + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Event data for connection event handlers. + + + + + The type of event being raised. + + + + + The associated 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. + + + + + Command or message text associated with this event, if any. + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + The type of event being raised. + The base associated + 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. + + + + Raised when an event pertaining to a connection occurs. + + The connection involved. + Extra information about the event. + + + + SQLite implentation of DbConnection. + + + The property can contain the following parameter(s), delimited with a semi-colon: + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + The default "stub" (i.e. placeholder) base schema name to use when + returning column schema information. Used as the initial value of + the BaseSchemaName property. This should start with "sqlite_*" + because those names are reserved for use by SQLite (i.e. they cannot + 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. + + + + + State of the current connection + + + + + The connection string + + + + + Nesting level of the transactions open on the connection + + + + + If set, then the connection is currently being disposed. + + + + + The default isolation level for new transactions + + + + + 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 + + + + + The database filename minus path and extension + + + + + Temporary password storage, emptied after the database has been opened + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. + + + + + The extra behavioral flags for this connection, if any. See the + enumeration for a list of + possible values. + + + + + Default command timeout + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Constructs a new SQLiteConnection object + + + Default constructor + + + + + Initializes the connection with the specified connection string. + + 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. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Clones the settings and connection string from an existing connection. If the existing connection is already open, this + function will open its own connection, enumerate any attached databases of the original connection, and automatically + attach to them. + + The connection to copy the settings from. + + + + Raises the 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 + destination. + + The destination database connection. + The destination database name. + The source database name. + + The number of pages to copy or negative to copy all remaining pages. + + + The method to invoke between each step of the backup process. This + parameter may be null (i.e. no callbacks will be performed). + + + The number of milliseconds to sleep after encountering a locking error + during the backup process. A value less than zero means that no sleep + should be performed. + + + + + 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 + will also be opened. + + + + + + Creates a database file. This just creates a zero-byte file which SQLite + will turn into a database when the file is opened properly. + + The file to create + + + + Raises the state change event when the state of the connection changes + + The new connection state. If this is different + from the previous state, the event is + raised. + 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. + + This parameter is ignored. + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection. + + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is false, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already active on the connection. + + Supported isolation levels are Serializable, ReadCommitted and Unspecified. + + Unspecified will use the default isolation level specified in the connection string. If no isolation level is specified in the + connection string, Serializable is used. + Serializable transactions are the default. In this mode, the engine gets an immediate lock on the database, and no other threads + may begin a transaction. Other threads may read from the database, but not write. + With a ReadCommitted isolation level, locks are deferred and elevated as needed. It is possible for multiple threads to start + a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread + has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached. + + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already + active on the connection. + + Returns the new transaction object. + + + + Forwards to the local function + + Supported isolation levels are Unspecified, Serializable, and ReadCommitted + + + + + This method is not implemented; however, the + event will still be raised. + + + + + + When the database connection is closed, all commands linked to this connection are automatically reset. + + + + + Clears the connection pool associated with the connection. Any other active connections using the same database file + will be discarded instead of returned to the pool when they are closed. + + + + + + Clears all connection pools. Any active connections will be discarded instead of sent to the pool when they are closed. + + + + + Create a new and associate it with this connection. + + Returns a new command object already assigned to this connection. + + + + Forwards to the local function. + + + + + + Parses the connection string into component parts using the custom + connection string parser. + + The connection string to parse + An array of key-value pairs representing each parameter of the connection string + + + + Parses a connection string using the built-in (i.e. framework provided) + connection string parser class and returns the key/value pairs. An + exception may be thrown if the connection string is invalid or cannot be + parsed. When compiled for the .NET Compact Framework, the custom + connection string parser is always used instead because the framework + provided one is unavailable there. + + + The connection string to parse. + + + Non-zero to throw an exception if any connection string values are not of + the type. + + The list of key/value pairs. + + + + Manual distributed transaction enlistment support + + The distributed transaction to enlist in + + + + Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value + + The list to look in + The key to find + The default value to return if the key is not found + The value corresponding to the specified key, or the default value if not found. + + + + Attempts to convert the string value to an enumerated value of the specified type. + + The enumerated type to convert the string value to. + The string value to be converted. + 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. + + + True to enable loading of extensions, false to disable. + + + + + Loads a SQLite extension library from the named dynamic link library file. + + + The name of the dynamic link library file containing the extension. + + + + + Loads a SQLite extension library from the named dynamic link library 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. + + + + + 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. + + + + + Opens the connection using the parameters found in the . + + + + + Opens the connection using the parameters found in the and then returns it. + + The current connection object. + + + + This method causes any pending database operation to abort and return at + its earliest opportunity. This routine is typically called in response + to a user action such as pressing "Cancel" or Ctrl-C where the user wants + a long query operation to halt immediately. It is safe to call this + routine from any thread. However, it is not safe to call this routine + with a database connection that is closed or might close before this method + 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + Non-zero to enable memory usage tracking, zero otherwise. + A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + + 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 + + + Enables or disabled extended result codes returned by SQLite + + + Enables or disabled extended result codes returned by SQLite + + + Add a log message via the SQLite sqlite3_log interface. + + + Add a log message via the SQLite sqlite3_log interface. + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Queries or modifies the number of retries or the retry interval (in milliseconds) for + certain I/O operations that may fail due to anti-virus software. + + The number of times to retry the I/O operation. A negative value + will cause the current count to be queried and replace that negative value. + The number of milliseconds to wait before retrying the I/O + operation. This number is multiplied by the number of retry attempts so far to come + up with the final number of milliseconds to wait. A negative value will cause the + current interval to be queried and replace that negative value. + Zero for success, non-zero for error. + + + + Removes one set of surrounding single -OR- double quotes from the string + value and returns the resulting string value. If the string is null, empty, + or contains quotes that are not balanced, nothing is done and the original + string value will be returned. + + The string value to process. + + The string value, modified to remove one set of surrounding single -OR- + double quotes, if applicable. + + + + + Expand the filename of the data source, resolving the |DataDirectory| + macro as appropriate. + + The database filename to expand + + Non-zero if the returned file name should be converted to a full path + (except when using the .NET Compact Framework). + + The expanded path and filename of the filename + + + + The following commands are used to extract schema information out of the database. Valid schema types are: + + + MetaDataCollections + + + DataSourceInformation + + + Catalogs + + + Columns + + + ForeignKeys + + + Indexes + + + IndexColumns + + + Tables + + + Views + + + ViewColumns + + + + + Returns the MetaDataCollections schema + + A DataTable of the MetaDataCollections schema + + + + Returns schema information of the specified collection + + The schema collection to retrieve + A DataTable of the specified collection + + + + Retrieves schema information using the specified constraint(s) for the specified collection + + The collection to retrieve + The restrictions to impose + A DataTable of the specified collection + + + + Builds a MetaDataCollections schema datatable + + DataTable + + + + Builds a DataSourceInformation datatable + + DataTable + + + + Build a Columns schema + + The catalog (attached database) to query, can be null + The table to retrieve schema information for, must not be null + The column to retrieve schema information for, can be null + DataTable + + + + Returns index information for the given database and catalog + + The catalog (attached database) to query, can be null + The name of the index to retrieve information for, can be null + The table to retrieve index information for, can be null + DataTable + + + + Retrieves table schema information for the database and catalog + + The catalog (attached database) to retrieve tables on + The table to retrieve, can be null + The table type, can be null + DataTable + + + + Retrieves view schema information for the database + + The catalog (attached database) to retrieve views on + The view name, can be null + DataTable + + + + Retrieves catalog (attached databases) schema information for the database + + The catalog to retrieve, can be null + DataTable + + + + Returns the base column information for indexes in a database + + The catalog to retrieve indexes for (can be null) + The table to restrict index information by (can be null) + The index to restrict index information by (can be null) + The source column to restrict index information by (can be null) + A DataTable containing the results + + + + Returns detailed column information for a specified view + + The catalog to retrieve columns for (can be null) + The view to restrict column information by (can be null) + The source column to restrict column information by (can be null) + A DataTable containing the results + + + + Retrieves foreign key information from the specified set of filters + + An optional catalog to restrict results on + An optional table to restrict results on + An optional foreign key name to restrict results on + A DataTable with the results of the query + + + + Static variable to store the connection event handlers to call. + + + + + This event is raised whenever the database is opened or closed. + + + + + This event is raised when events related to the lifecycle of a + 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. + + + + + The connection string containing the parameters for the connection + + + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + Returns the data source file name without extension or path. + + + + + Returns the string "main". + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + This can also be set in the ConnectionString with "Default Timeout" + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Gets/sets the extra behavioral flags for this connection. See the + enumeration for a list of + possible values. + + + + + Returns non-zero if the underlying native connection handle is + owned by this instance. + + + + + Returns the version of the underlying SQLite database engine + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on + 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. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + + + + + Returns a string containing the define constants (i.e. compile-time + options) used to compile the core managed assembly, delimited with + spaces. + + + + + Returns the version of the underlying SQLite core library. + + + + + This method returns the string whose value is the same as the + SQLITE_SOURCE_ID C preprocessor macro used when compiling the + 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. + + + + + 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 + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is committing a transaction. + Return non-zero to trigger a rollback. + + + + + This event is raised whenever SQLite statement first begins executing on + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is rolling back a transaction. + + + + + Returns the instance. + + + + + The I/O file cache flushing behavior for the connection + + + + + Normal file flushing at critical sections of the code + + + + + Full file flushing after every write operation + + + + + 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 + rollbackTrans boolean value to true. + + The connection committing the transaction + Event arguments on the transaction + + + + Raised when data is inserted, updated and deleted on a given connection + + The connection committing the transaction + The event parameters which triggered the event + + + + Raised when a statement first begins executing on a given connection + + The connection executing the statement + Event arguments of the trace + + + + Raised between each backup step. + + + The source database connection. + + + The source database name. + + + The destination database connection. + + + The destination database name. + + + The number of pages copied with each step. + + + The number of pages remaining to be copied. + + + The total number of pages in the source database. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True to continue with the backup process or false to halt the backup + process, rolling back any changes that have been made so far. + + + + + The data associated with a call into the authorizer. + + + + + The user-defined native data associated with this event. Currently, + this will always contain the value of . + + + + + The action code responsible for the current call into the authorizer. + + + + + 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. + + + + + 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 database name for the current call into the authorizer, 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 return code for the current call into the authorizer. + + + + + Constructs an instance of this class with default property values. + + + + + 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 + + + + + Set to true to abort the transaction and trigger a rollback + + + + + Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text + + + + + 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 dictionary of connection pools, based on the normalized file + name of the SQLite database. + + + + + The default version number new pools will get. + + + + + The number of connections successfully opened from any pool. + This value is incremented by the Remove method. + + + + + The number of connections successfully closed from any pool. + This value is incremented by the Add method. + + + + + 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 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. + + + + + This pool version associated with the database connection + handles in this pool queue. + + + + + 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. + + + + + Properties of this class + + + + + Constructs a new instance of the class + + + Default constructor + + + + + Constructs a new instance of the class using the specified connection string. + + The connection string to parse + + + + Private initializer, which assigns the connection string and resets the builder + + The connection string to assign + + + + Helper function for retrieving values from the connectionstring + + The keyword to retrieve settings for + The resulting parameter value + Returns true if the value was found and returned + + + + Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties() + + The hashtable to fill with property descriptors + + + + Gets/Sets the default version of the SQLite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library. + + + + + Gets/Sets the synchronization mode (file flushing) of the connection string. Default is "Normal". + + + + + Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding. + + + + + Gets/Sets whether or not to use connection pooling. The default is "False" + + + + + Gets/Sets whethor not to store GUID's in binary format. The default is True + which saves space in the database. + + + + + Gets/Sets the filename to open on the connection string. + + + + + An alternate to the data source property + + + + + An alternate to the data source property that uses the SQLite URI syntax. + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + + + + + Determines whether or not the connection will automatically participate + in the current distributed transaction (if one exists) + + + + + If set to true, will throw an exception if the database specified in the connection + string does not exist. If false, the database will be created automatically. + + + + + If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger + database sizes. + + + + + When enabled, the database will be opened for read-only access and writing will be disabled. + + + + + Gets/sets the database encryption password + + + + + Gets/sets the database encryption hexadecimal password + + + + + Gets/Sets the page size for the connection. + + + + + Gets/Sets the maximum number of pages the database may hold + + + + + Gets/Sets the cache size for the connection. + + + + + Gets/Sets the DateTime format for the connection. + + + + + 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 + .NET Framework compatibility purposes. + + + + + Determines how SQLite handles the transaction journal file. + + + + + Sets the default isolation level for transactions on the connection. + + + + + If enabled, use foreign key constraints + + + + + Gets/Sets the extra behavioral flags. + + + + + If enabled, apply the default connection settings to opened databases. + + + + + If enabled, attempt to resolve the provided data source file name to a + full path before opening. + + + + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite + understands. The DateTime extension to the spec is for internal use only. + + + + + Not used + + + + + All integers in SQLite default to Int64 + + + + + All floating point numbers in SQLite default to double + + + + + The default data type of SQLite is text + + + + + Typically blob types are only seen when returned from a function + + + + + Null types can be returned from functions + + + + + Used internally by this provider + + + + + Used internally by this provider + + + + + These are the event types associated with the + + delegate (and its corresponding event) and the + class. + + + + + Not used. + + + + + Not used. + + + + + The connection is being opened. + + + + + The connection string has been parsed. + + + + + The connection was opened. + + + + + The method was called on the + connection. + + + + + A transaction was created using the connection. + + + + + The connection was enlisted into a transaction. + + + + + 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. + + + + + The connection was 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. + + + + + Use the value of DateTime.Ticks. This value is not recommended and is not well supported with LINQ. + + + + + Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and + "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values). + + + + + The interval of time in days and fractions of a day since January 1, 4713 BC. + + + + + The whole number of seconds since the Unix epoch (January 1, 1970). + + + + + Any culture-independent string value that the .NET Framework can interpret as a valid DateTime. + + + + + Any string value that the .NET Framework can interpret as a valid DateTime using the current culture. + + + + + The default format for this provider. + + + + + 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. + + + + + The default mode, this causes SQLite to use the existing journaling mode for the database. + + + + + SQLite will create and destroy the journal file as-needed. + + + + + When this is set, SQLite will keep the journal file even after a transaction has completed. It's contents will be erased, + and the journal re-used as often as needed. If it is deleted, it will be recreated the next time it is needed. + + + + + This option disables the rollback journal entirely. Interrupted transactions or a program crash can cause database + corruption in this mode! + + + + + SQLite will truncate the journal file to zero-length instead of deleting it. + + + + + SQLite will store the journal in volatile RAM. This saves disk I/O but at the expense of database safety and integrity. + If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the + database file will very likely go corrupt. + + + + + SQLite uses a write-ahead log instead of a rollback journal to implement transactions. The WAL journaling mode is persistent; + after being set it stays in effect across multiple database connections and after closing and reopening the database. A database + in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later. + + + + + Possible values for the "synchronous" database setting. This setting determines + how often the database engine calls the xSync method of the VFS. + + + + + Use the default "synchronous" database setting. Currently, this should be + the same as using the FULL mode. + + + + + The database engine continues without syncing as soon as it has handed + data off to the operating system. If the application running SQLite + crashes, the data will be safe, but the database might become corrupted + if the operating system crashes or the computer loses power before that + data has been written to the disk surface. + + + + + The database engine will still sync at the most critical moments, but + less often than in FULL mode. There is a very small (though non-zero) + chance that a power failure at just the wrong time could corrupt the + database in NORMAL mode. + + + + + The database engine will use the xSync method of the VFS to ensure that + all content is safely written to the disk surface prior to continuing. + This ensures that an operating system crash or power failure will not + corrupt the database. FULL synchronous is very safe, but it is also + slower. + + + + + The requested command execution type. This controls which method of the + object will be called. + + + + + Do nothing. No method will be called. + + + + + The command is not expected to return a result -OR- the result is not + needed. The or + method + will be called. + + + + + 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. + + + + + The command is expected to return result. + The or + method will + be called. + + + + + Use the default command execution type. Using this value is the same + as using the value. + + + + + The action code responsible for the current call into the authorizer. + + + + + No action is being performed. This value should not be used from + external code. + + + + + No longer used. + + + + + An index will be created. The action-specific arguments are the + index name and the table name. + + + + + + A table will be created. The action-specific arguments are the + table name and a null value. + + + + + A temporary index will be created. The action-specific arguments + are the index name and the table name. + + + + + A temporary table will be created. The action-specific arguments + are the table name and a null value. + + + + + A temporary trigger will be created. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be created. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be created. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be created. The action-specific arguments are the view + name and a null value. + + + + + A DELETE statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + An index will be dropped. The action-specific arguments are the + index name and the table name. + + + + + A table will be dropped. The action-specific arguments are the tables + name and a null value. + + + + + A temporary index will be dropped. The action-specific arguments are + the index name and the table name. + + + + + A temporary table will be dropped. The action-specific arguments are + the table name and a null value. + + + + + A temporary trigger will be dropped. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be dropped. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be dropped. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be dropped. The action-specific arguments are the view + name and a null value. + + + + + An INSERT statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + A PRAGMA statement will be executed. The action-specific arguments + are the name of the PRAGMA and the new value or a null value. + + + + + 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 + + + + + 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 + + + + + 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 + + + + + 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 + + + + + Matches the version of the connection. + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. Matches the base schema name used by the + associated connection. + + + + + Internal constructor, initializes the datareader and sets up to begin executing statements + + The SQLiteCommand this data reader is for + The expected behavior of the data reader + + + + Dispose of all resources used by this datareader. + + + + + + Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified. + + + + + Throw an error if the datareader is closed + + + + + Throw an error if a row is not loaded + + + + + Enumerator support + + 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. + + + 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 + + + + Retrieves the column as a boolean value + + The index of the column to retrieve + bool + + + + Retrieves the column as a single byte value + + The index of the column to retrieve + byte + + + + Retrieves a column as an array of bytes (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the bytes into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of bytes written into the array + + To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned. + + + + + Returns the column as a single character + + The index of the column to retrieve + char + + + + Retrieves a column as an array of chars (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the characters into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of characters written into the array + + To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned. + + + + + Retrieves the name of the back-end datatype of the column + + The index of the column to retrieve + string + + + + Retrieve the column as a date/time value + + The index of the column to retrieve + DateTime + + + + Retrieve the column as a decimal value + + The index of the column to retrieve + decimal + + + + Returns the column as a double + + The index of the column to retrieve + double + + + + Returns the .NET type of a given column + + The index of the column to retrieve + Type + + + + Returns a column as a float value + + The index of the column to retrieve + float + + + + Returns the column as a Guid + + The index of the column to retrieve + Guid + + + + Returns the column as a short + + The index of the column to retrieve + Int16 + + + + Retrieves the column as an int + + The index of the column to retrieve + Int32 + + + + Retrieves the column as a long + + The index of the column to retrieve + Int64 + + + + Retrieves the name of the column + + The index of the column to retrieve + string + + + + Retrieves the i of a column, given its name + + The name of the column to retrieve + The int i of the column + + + + Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done + to gather the necessary information so it can be represented in an ADO.NET manner. + + Returns a DataTable containing the schema information for the active SELECT statement being processed. + + + + Retrieves the column as a string + + The index of the column to retrieve + string + + + + Retrieves the column as an object corresponding to the underlying datatype of the column + + The index of the column to retrieve + object + + + + Retreives the values of multiple columns, up to the size of the supplied array + + The array to fill with values from the columns in the current resultset + The number of columns retrieved + + + + Returns a collection containing all the column names and values for the + current row of data in the current resultset, if any. If there is no + current row or no current resultset, an exception may be thrown. + + + The collection containing the column name and value information for the + current row of data in the current resultset or null if this information + cannot be obtained. + + + + + Returns True if the specified column is null + + The index of the column to retrieve + True or False + + + + Moves to the next resultset in multiple row-returning SQL command. + + 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. + + + + + 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 data reader containing the databse connection to query the flags from. + + + The connection flags value. + + + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + + The index of the column to retrieve + A SQLiteType structure + + + + Reads the next row from the resultset + + True if a new row was successfully loaded and is ready for processing + + + + Not implemented. Returns 0 + + + + + Returns the number of columns in the current resultset + + + + + Returns the number of visible fields in the current resultset + + + + + Returns True if the resultset has rows that can be fetched + + + + + Returns True if the data reader is closed + + + + + Retrieve the count of records affected by an update/insert command. Only valid once the data reader is closed! + + + + + Indexer to retrieve data from a column given its name + + The name of the column to retrieve data for + The value contained in the column + + + + Indexer to retrieve data from a column given its i + + The index of the column to retrieve + The value contained in the column + + + + SQLite exception class. + + + + + Private constructor for use with serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Public constructor for generating a SQLite exception given the error + code and message. + + + The SQLite return code to report. + + + Message text to go along with the return code message text. + + + + + Public constructor that uses the base class constructor for the error + message. + + Error message text. + + + + Public constructor that uses the default base class constructor. + + + + + Public constructor that uses the base class constructor for the error + message and inner exception. + + Error message text. + The original (inner) exception. + + + + Adds extra information to the serialized object data specific to this + class type. This is only used for serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Returns the error message for the specified SQLite return code. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the composite error message based on the SQLite return code + and the optional detailed error message. + + The SQLite return code. + Optional detailed error message. + Error message text for the return code. + + + + Gets the associated SQLite result code for this exception as a + . This property returns the same + underlying value as the property. + + + + + Gets the associated SQLite return code for this exception as an + . For desktop versions of the .NET Framework, + this property overrides the property of the same name within the + + class. This property returns the same underlying value as the + property. + + + + + SQLite error codes. Actually, this enumeration represents a return code, + which may also indicate success in one of several ways (e.g. SQLITE_OK, + SQLITE_ROW, and SQLITE_DONE). Therefore, the name of this enumeration is + something of a misnomer. + + + + + The error code is unknown. This error code + is only used by the managed wrapper itself. + + + + + Successful result + + + + + SQL error or missing database + + + + + Internal logic error in SQLite + + + + + Access permission denied + + + + + Callback routine requested an abort + + + + + The database file is locked + + + + + A table in the database is locked + + + + + A malloc() failed + + + + + Attempt to write a readonly database + + + + + Operation terminated by sqlite3_interrupt() + + + + + Some kind of disk I/O error occurred + + + + + The database disk image is malformed + + + + + Unknown opcode in sqlite3_file_control() + + + + + Insertion failed because database is full + + + + + Unable to open the database file + + + + + Database lock protocol error + + + + + Database is empty + + + + + The database schema changed + + + + + String or BLOB exceeds size limit + + + + + Abort due to constraint violation + + + + + Data type mismatch + + + + + Library used incorrectly + + + + + Uses OS features not supported on host + + + + + Authorization denied + + + + + Auxiliary database format error + + + + + 2nd parameter to sqlite3_bind out of range + + + + + File opened that is not a database file + + + + + Notifications from sqlite3_log() + + + + + Warnings from sqlite3_log() + + + + + sqlite3_step() has another row ready + + + + + sqlite3_step() has finished executing + + + + + Used to mask off extended result codes + + + + + SQLite implementation of . + + + SQLite implementation of . + + + + + Constructs a new instance. + + + + + Static instance member which returns an instanced class. + + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Will provide a object in .NET 3.5. + + The class or interface type to query for. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. This event is provided for backward compatibility only. + New code should use the class instead. + + + + + 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. + + 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 base connection this function is attached to + + + + + Internal array used to keep track of aggregate function context data + + + + + The connection flags associated with this object (this should be the + same value as the flags associated with the parent connection object). + + + + + Holds a reference to the callback function for user functions + + + + + Holds a reference to the callbakc function for stepping in an aggregate function + + + + + Holds a reference to the callback function for finalizing an aggregate function + + + + + Holds a reference to the callback function for collation sequences + + + + + Current context of the current callback. Only valid during a callback + + + + + This static list contains all the user-defined functions declared using the proper attributes. + + + + + 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 + someone closes the connection while a DataReader is open. + + + + + Placeholder for a user-defined disposal routine + + True if the object is being disposed explicitly + + + + Scalar functions override this method to do their magic. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The arguments for the command to process + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + Aggregate functions override this method to do their magic. + + + Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible. + + The arguments for the command to process + The 1-based step number. This is incrememted each time the step method is called. + A placeholder for implementers to store contextual data pertaining to the current context. + + + + Aggregate functions override this method to finish their aggregate processing. + + + If you implemented your aggregate function properly, + you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have + all the information you need in there to figure out what to return. + NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will + be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value + if that is the case. + + Your own assigned contextData, provided for you so you can return your final results. + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + + User-defined collation sequences override this method to provide a custom string sorting algorithm. + + The first string to compare + The second strnig to compare + 1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2 + + + + Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The number of arguments + A pointer to the array of arguments + An object array of the arguments once they've been converted to .NET values + + + + Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context. + + The context the return value applies to + The parameter to return to SQLite + + + + Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method. + WARNING: Must not throw exceptions. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method. + WARNING: Must not throw exceptions. + + + This function takes care of doing the lookups and getting the important information put together to call the Step() function. + That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so + binary searches can be done to find the data. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method. + WARNING: Must not throw exceptions. + + A raw context pointer + + + + Using reflection, enumerate all assemblies in the current appdomain looking for classes that + have a SQLiteFunctionAttribute attribute, and registering them accordingly. + + + + + Manual method of registering a function. The type must still have the SQLiteFunctionAttributes in order to work + properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported. + + The type of the function to register + + + + Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection. + It is done this way so that all user-defined functions will access the database using the same encoding scheme + as the connection (UTF-8 or UTF-16). + + + The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to + all the wrapped callback functions. The interop function uses it to map CDecl callbacks to StdCall callbacks. + + The base object on which the functions are to bind + The flags associated with the parent connection object + 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. + + + + + Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert + strings and DateTime's into the current connection's encoding schema. + + + + + Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call. + + + User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays. + + + + + Obtains the collating sequence in effect for the given function. + + + + + + The type of user-defined function to declare + + + + + Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc. + + + + + Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data. + Examples include SUM(), COUNT(), AVG(), etc. + + + + + Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is + sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting + in a user-defined manner. + + + + + An internal callback delegate declaration. + + 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. + + + + An internal final callback delegate declaration. + + Raw context pointer for the user function + + + + Internal callback delegate for implementing collation sequences + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. + + + + The type of collating sequence + + + + + The built-in BINARY collating sequence + + + + + The built-in NOCASE collating sequence + + + + + The built-in REVERSE collating sequence + + + + + A custom user-defined collating sequence + + + + + The encoding type the collation sequence uses + + + + + The collation sequence is UTF8 + + + + + The collation sequence is UTF16 little-endian + + + + + The collation sequence is UTF16 big-endian + + + + + A struct describing the collating sequence a function is executing in + + + + + The name of the collating sequence + + + + + The type of collating sequence + + + + + The text encoding of the collation sequence + + + + + Context of the function that requested the collating sequence + + + + + Calls the base collating sequence to compare two strings + + The first string to compare + The second string to compare + -1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2 + + + + Calls the base collating sequence to compare two character arrays + + The first array to compare + The second array to compare + -1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2 + + + + A simple custom attribute to enable us to easily find user-defined functions in + the loaded assemblies and initialize them in SQLite as connections are made. + + + + + 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. + + + + + The number of arguments this function expects. -1 if the number of arguments is variable. + + + + + 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. + + Providing key information for a given statement is non-trivial :( + + + + + + This function does all the nasty work at determining what keys need to be returned for + a given statement. + + + + + + + + Make sure all the subqueries are open and ready and sync'd with the current rowid + of the table they're supporting + + + + + Release any readers on any subqueries + + + + + Append all the columns we've added to the original query to the schema + + + + + + How many additional columns of keyinfo we're holding + + + + + Used to support CommandBehavior.KeyInfo + + + + + A single sub-query for a given table/database. + + + + + Event data for logging event handlers. + + + + + The error code. The type of this object value should be + or . + + + + + SQL statement text as the statement first begins executing + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + Should be null. + + The error code. The type of this object value should be + or . + + The error message, if any. + The extra data, if any. + + + + Raised when a log event occurs. + + The current connection + Event arguments of the trace + + + + Manages the SQLite custom logging functionality and the associated + callback for the whole process. + + + + + Object used to synchronize access to the static instance data + for this class. + + + + + Member variable to store the AppDomain.DomainUnload event handler. + + + + + The default log event handler. + + + + + The log callback passed to native SQLite engine. This must live + as long as the SQLite library has a pointer to it. + + + + + The base SQLite object to interop with. + + + + + This will be non-zero if logging is currently enabled. + + + + + Initializes the SQLite logging facilities. + + + + + Handles the AppDomain being unloaded. + + Should be null. + The data associated with this event. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The SQLite error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The integer error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + + The error code. The type of this object value should be + System.Int32 or SQLiteErrorCode. + + The message to be logged. + + + + Creates and initializes the default log event handler. + + + + + Adds the default log event handler to the list of handlers. + + + + + Removes the default log event handler from the list of handlers. + + + + + Internal proxy function that calls any registered application log + event handlers. + + WARNING: This method is used more-or-less directly by native code, + do not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + Default logger. Currently, uses the Trace class (i.e. sends events + to the current trace listeners, if any). + + Should be null. + The data associated with this event. + + + + Member variable to store the application log handler to call. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. + + + + + If this property is true, logging is enabled; otherwise, logging is + disabled. When logging is disabled, no logging events will fire. + + + + + MetaDataCollections specific to SQLite + + + + + Returns a list of databases attached to the connection + + + + + Returns column information for the specified table + + + + + Returns index information for the optionally-specified table + + + + + Returns base columns for the given index + + + + + Returns the tables in the given catalog + + + + + Returns user-defined views in the given catalog + + + + + Returns underlying column information on the given view + + + + + Returns foreign key information for the given catalog + + + + + Returns the triggers on the database + + + + + SQLite implementation of DbParameter. + + + + + The data type of the parameter + + + + + The version information for mapping the parameter + + + + + The value of the data in the parameter + + + + + The source column for the parameter + + + + + The column name + + + + + The data size, unused by SQLite + + + + + Default constructor + + + + + Constructs a named parameter given the specified parameter name + + The parameter name + + + + Constructs a named parameter given the specified parameter name and initial value + + The parameter name + The initial value of the parameter + + + + Constructs a named parameter of the specified type + + The parameter name + The datatype of the parameter + + + + Constructs a named parameter of the specified type and source column reference + + The parameter name + The data type + The source column + + + + Constructs a named parameter of the specified type, source column and row version + + The parameter name + The data type + The source column + The row version information + + + + Constructs an unnamed parameter of the specified data type + + The datatype of the parameter + + + + Constructs an unnamed parameter of the specified data type and sets the initial value + + The datatype of the parameter + The initial value of the parameter + + + + Constructs an unnamed parameter of the specified data type and source column + + The datatype of the parameter + The source column + + + + Constructs an unnamed parameter of the specified data type, source column and row version + + The data type + The source column + The row version information + + + + Constructs a named parameter of the specified type and size + + The parameter name + The data type + The size of the parameter + + + + Constructs a named parameter of the specified type, size and source column + + The name of the parameter + The data type + The size of the parameter + The source column + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + The source column + The row version information + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + Ignored + The source column + The row version information + The initial value to assign the parameter + + + + Constructs a named parameter, yet another flavor + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + The source column + The row version information + Whether or not this parameter is for comparing NULL's + The intial value to assign the parameter + + + + Constructs an unnamed parameter of the specified type and size + + The data type + The size of the parameter + + + + Constructs an unnamed parameter of the specified type, size, and source column + + The data type + The size of the parameter + The source column + + + + Constructs an unnamed parameter of the specified type, size, source column and row version + + The data type + The size of the parameter + The source column + The row version information + + + + Resets the DbType of the parameter so it can be inferred from the value + + + + + Clones a parameter + + A new, unassociated SQLiteParameter + + + + Whether or not the parameter can contain a null value + + + + + Returns the datatype of the parameter + + + + + Supports only input parameters + + + + + Returns the parameter name + + + + + Returns the size of the parameter + + + + + Gets/sets the source column + + + + + Used by DbCommandBuilder to determine the mapping for nullable fields + + + + + Gets and sets the row version + + + + + Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given. + + + + + SQLite implementation of DbParameterCollection. + + + + + The underlying command to which this collection belongs + + + + + The internal array of parameters in this collection + + + + + Determines whether or not all parameters have been bound to their statement(s) + + + + + Initializes the collection + + The command to which the collection belongs + + + + Retrieves an enumerator for the collection + + An enumerator for the underlying array + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + The source column + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a named/unnamed parameter and its value to the parameter collection. + + Name of the parameter, or null to indicate an unnamed parameter + The initial value of the parameter + Returns the SQLiteParameter object created during the call. + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Clears the array and resets the collection + + + + + Determines if the named parameter exists in the collection + + The name of the parameter to check + True if the parameter is in the collection + + + + Determines if the parameter exists in the collection + + The SQLiteParameter to check + True if the parameter is in the collection + + + + Not implemented + + + + + + + Retrieve a parameter by name from the collection + + The name of the parameter to fetch + A DbParameter object + + + + Retrieves a parameter by its index in the collection + + The index of the parameter to retrieve + A DbParameter object + + + + Returns the index of a parameter given its name + + The name of the parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Returns the index of a parameter + + The parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Inserts a parameter into the array at the specified location + + The zero-based index to insert the parameter at + The parameter to insert + + + + Removes a parameter from the collection + + The parameter to remove + + + + Removes a parameter from the collection given its name + + The name of the parameter to remove + + + + Removes a parameter from the collection given its index + + The zero-based parameter index to remove + + + + Re-assign the named parameter to a new parameter object + + The name of the parameter to replace + The new parameter + + + + Re-assign a parameter at the specified index + + The zero-based index of the parameter to replace + The new parameter + + + + Un-binds all parameters from their statements + + + + + This function attempts to map all parameters in the collection to all statements in a Command. + Since named parameters may span multiple statements, this function makes sure all statements are bound + to the same named parameter. Unnamed parameters are bound in sequence. + + + + + Returns false + + + + + Returns false + + + + + Returns false + + + + + Returns null + + + + + Returns a count of parameters in the collection + + + + + Overloaded to specialize the return value of the default indexer + + Name of the parameter to get/set + The specified named SQLite parameter + + + + Overloaded to specialize the return value of the default indexer + + The index of the parameter to get/set + The specified SQLite parameter + + + + Represents a single SQL statement in SQLite. + + + + + The underlying SQLite object this statement is bound to + + + + + The command text of this SQL statement + + + + + The actual statement pointer + + + + + An index from which unnamed parameters begin + + + + + Names of the parameters as SQLite understands them to be + + + + + Parameters for this statement + + + + + Command this statement belongs to (if any) + + + + + The flags associated with the parent connection object. + + + + + Initializes the statement and attempts to get all information about parameters in the statement + + The base SQLite object + The flags associated with the parent connection object + The statement + The command text for this statement + The previous command in a multi-statement command + + + + Disposes and finalizes the statement + + + + + If the underlying database connection is open, fetches the number of changed rows + resulting from the most recent query; otherwise, does nothing. + + + The number of changes when true is returned. + Undefined if false is returned. + + Non-zero if the number of changed rows was fetched. + + + + Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to + this statement, and if so, keeps a reference to the parameter so it can be bound later. + + The parameter name to map + The parameter to assign it + + + + 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 + + The index of the parameter to bind + The parameter we're binding + + + + SQLite implementation of DbTransaction. + + + + + The connection to which this transaction is bound + + + + + Constructs the transaction object, binding it to the supplied connection + + The connection to open a transaction on + TRUE to defer the writelock, or FALSE to lock immediately + + + + Disposes the transaction. If it is currently active, any changes are rolled back. + + + + + Commits the current transaction. + + + + + Rolls back the active transaction. + + + + + Returns the underlying connection to which this transaction applies. + + + + + Forwards to the local Connection property + + + + + Gets the isolation level of the transaction. SQLite only supports Serializable transactions. + + + + + 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]";. + + + + + The file extension used for dynamic link libraries. + + + + + The file extension used for the XML configuration file. + + + + + This is the name of the XML configuration file specific to the + System.Data.SQLite assembly. + + + + + This lock is used to protect the static _SQLiteNativeModuleFileName, + _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields. + + + + + 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. + + + + + 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. + + + + + The name of the environment variable containing the processor + architecture of the current process. + + + + + This is the P/Invoke method that wraps the native Win32 LoadLibrary + function. See the MSDN documentation for full details on what it + does. + + + The name of the executable library. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + 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. + + + + + 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). + + + + + Queries and returns the base directory of the current application + domain. + + + The base directory for the current application domain -OR- null if it + cannot be determined. + + + + + Determines if the dynamic link library file name requires a suffix + and adds it if necessary. + + + The original dynamic link library file name to inspect. + + + The dynamic link library file name, possibly modified to include an + extension. + + + + + Queries and returns the processor architecture of the current + process. + + + The processor architecture of the current process -OR- null if it + cannot be determined. + + + + + Given the processor architecture, returns the name of the platform. + + + The processor architecture to be translated to a platform name. + + + The platform name for the specified processor architecture -OR- null + 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. + + + The requested processor architecture, null for default (the + 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. + + + Non-zero if the native module was loaded successfully; otherwise, + zero. + + + + + 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. + + +
+
diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.0/System.Data.SQLite.dll b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.0/System.Data.SQLite.dll index 3cc39cfce4af34a5f874bc47d68d67e411047c5a..0e434fcc161df41f5795be0f3a642e96ce9d7e16 100644 GIT binary patch literal 268800 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 literal 270336 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®@-Qe660Hi_W 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 + + + System.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 + function for use with sqlite3_log() and the SQLITE_CONFIG_LOG. + + WARNING: This delegate is used more-or-less directly by native code, do + not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET + + + + + This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement + a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. + + + + + This base class provides datatype conversion services for the SQLite provider. + + + + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). + + + + + The value of the OLE Automation epoch represented as a Julian day. + + + + + An array of ISO-8601 DateTime formats that we support parsing. + + + + + The internal default format for UTC DateTime values when converting + to a string. + + + + + The internal default format for local DateTime values when converting + to a string. + + + + + An UTF-8 Encoding instance, so we can convert strings to and from UTF-8 + + + + + The default DateTime format for this instance. + + + + + 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. + + + + Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character. + + The string to convert to UTF-8 + A byte array containing the converted string plus an extra 0 terminating byte at the end of the array. + + + + Convert a DateTime to a UTF-8 encoded, zero-terminated byte array. + + + This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the + string result. + + The DateTime to convert. + The UTF-8 encoded string, including a 0 terminating byte at the end of the array. + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + 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: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + A DateTime value + + + + Converts a string into a DateTime, using the specified DateTimeFormat, + DateTimeKind and DateTimeFormatString. + + + Acceptable ISO8601 DateTime formats are: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. + A DateTime value + + + + Converts a julianday value into a DateTime + + The value to convert + A .NET DateTime + + + + Converts a julianday value into a DateTime + + The value to convert + 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 + + The DateTime to convert + The JulianDay value the Datetime represents + + + + Converts a DateTime struct to the whole number of seconds since the + Unix epoch. + + The DateTime to convert + The whole number of seconds since the Unix epoch + + + + 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 DateTime format string to use for the specified DateTimeKind. + + + + + 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. + + + + Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime. + + + This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls + ToDateTime() on the string to return a DateTime. + + A pointer to the UTF-8 encoded string + The length in bytes of the string + The parsed DateTime value + + + + Smart method of splitting a string. Skips quoted elements, removes the quotes. + + + This split function works somewhat like the String.Split() function in that it breaks apart a string into + pieces and returns the pieces as an array. The primary differences are: + + Only one character can be provided as a separator character + Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed. + + Thus, if splitting the following string looking for a comma:
+ One,Two, "Three, Four", Five
+
+ The resulting array would contain
+ [0] One
+ [1] Two
+ [2] Three, Four
+ [3] Five
+
+ Note that the leading and trailing spaces were removed from each item during the split. +
+ Source string to split apart + 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. + + + + + Convert a value to true or false. + + A string or number representing true or false + + + + + Convert a string to true or false. + + A string representing true or false + + + "yes", "no", "y", "n", "0", "1", "on", "off" as well as Boolean.FalseString and Boolean.TrueString will all be + converted to a proper boolean value. + + + + + Converts a SQLiteType to a .NET Type object + + The SQLiteType to convert + Returns a .NET Type object + + + + For a given intrinsic type, return a DbType + + The native type to convert + The corresponding (closest match) DbType + + + + Returns the ColumnSize for the given DbType + + The DbType to get the size of + + + + + Determines the type name for the given database value type. + + 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 + + The DbType to convert from + The closest-match .NET type + + + + For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types. + + 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. + + + + + For a given type name, return a closest-match .NET type + + The connection context for custom type mappings, if any. + The name of the 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + 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. + We depend on auto initialization to recover. + + + + + Determines if the associated native connection handle is open. + + + Non-zero if a database connection is open. + + + + + Opens a database. + + + Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection + to bind all attributed user-defined functions and collating sequences to the new connection. + + The filename of the database to open. SQLite automatically creates it if it doesn't exist. + The flags associated with the parent connection object + The open flags to use when creating the connection + The maximum size of the pool for the given filename + If true, the connection can be pulled from the connection pool + + + + Closes the currently-open database. + + + After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated + memory associated with the user-defined functions and collating sequences tied to the closed connection. + + Non-zero if the operation is allowed to throw exceptions, zero otherwise. + + + + Sets the busy timeout on the connection. SQLiteCommand will call this before executing any command. + + The number of milliseconds to wait before returning SQLITE_BUSY + + + + Returns the text of the last error issued by SQLite + + + + + + 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 + + + + + When pooling is enabled, returns the number of pool entries matching the current file name. + + The number of pool entries matching the current file name. + + + + Prepares a SQL statement for execution. + + The source connection preparing the command. Can be null for any caller except LINQ + The SQL command text to prepare + The previous statement in a multi-statement command, or null if no previous statement exists + The timeout to wait before aborting the prepare + The remainder of the statement that was not processed. Each call to prepare parses the + SQL up to to either the end of the text or to the first semi-colon delimiter. The remaining text is returned + here for a subsequent call to Prepare() until all the text has been processed. + Returns an initialized SQLiteStatement. + + + + Steps through a prepared statement. + + The SQLiteStatement to step through + True if a row was returned, False if not. + + + + 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. + + + 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 extened result codes returned by SQLite + + true to enable extended result codes, false to disable. + + + + + 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. + + Extended result code + + + + 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.Format() function. + + + + + Checks if the SQLite core library has been initialized in the current process. + + + Non-zero if the SQLite core library has been initialized in the current process, + zero otherwise. + + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy or negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Returns the error message for the specified SQLite return code using + the internal static lookup table. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the error message for the specified SQLite return code using + the sqlite3_errstr() function, falling back to the internal lookup + table if necessary. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns a string representing the active version of SQLite + + + + + Returns an integer representing the active version of SQLite + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of changes the last executing insert/update caused. + + + + + Returns the amount of memory (in bytes) currently in use by the SQLite core library. This is not really a per-connection + value, it is global to the process. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + 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 + + + + + The modules created using this connection. + + + + + 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. + + + + + This method attempts to dispose of all the derived + object instances currently associated with the native database connection. + + + + + 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 + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy, negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + initialized for the current process. + + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + 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 + + A pointer to a UTF-16 string + The length (IN BYTES) of the string + A .NET string + + + + Represents a single SQL backup in SQLite. + + + + + The underlying SQLite object this backup is bound to. + + + + + The actual backup handle. + + + + + The destination database for the backup. + + + + + The destination database name for the backup. + + + + + The source database for the backup. + + + + + The source database name for the backup. + + + + + The last result from the StepBackup method of the SQLite3 class. + This is used to determine if the call to the FinishBackup method of + the SQLite3 class should throw an exception when it receives a non-Ok + return code from the core SQLite library. + + + + + Initializes the backup. + + The base SQLite object. + The backup handle. + The destination database for the backup. + The destination database name for the backup. + The source database for the backup. + The source database name for the backup. + + + + Disposes and finalizes the backup. + + + + + The extra behavioral flags that can be applied to a connection. + + + + + No extra flags. + + + + + Enable logging of all SQL statements to be prepared. + + + + + Enable logging of all bound parameter types and raw values. + + + + + Enable logging of all bound parameter strongly typed values. + + + + + Enable logging of all exceptions caught from user-provided + managed code called from native code via delegates. + + + + + Enable logging of backup API errors. + + + + + Skip adding the extension functions provided by the native + 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 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. + + + + + The default extra flags for new connections. + + + + + 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 + + + + + The connection the command is associated with + + + + + The version of the connection the command is associated with + + + + + Indicates whether or not a DataReader is active on the command. + + + + + The timeout for the command, kludged because SQLite doesn't support per-command timeout values + + + + + Designer support + + + + + Used by DbDataAdapter to determine updating behavior + + + + + The collection of parameters for the command + + + + + The SQL command text, broken into individual SQL statements as they are executed + + + + + Unprocessed SQL text that has not been executed + + + + + Transaction associated with this command + + + + + Constructs a new SQLiteCommand + + + Default constructor + + + + + Initializes the command with the given command text + + The SQL command text + + + + Initializes the command with the given SQL command text and attach the command to the specified + connection. + + The SQL command text + The connection to associate with the command + + + + Initializes the command and associates it with the specified connection. + + The connection to associate with the command + + + + Initializes a command with the given SQL, connection and transaction + + The SQL command text + The connection to associate with the command + The transaction the command should be associated with + + + + Disposes of the command and clears all member variables + + 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 + + + + + Builds an array of prepared statements for each complete SQL statement in the command text + + + + + Not implemented + + + + + Forwards to the local CreateParameter() function + + + + + + Create a new parameter + + + + + + This function ensures there are no active readers, that we have a valid connection, + that the connection is open, that all statements are prepared and all parameters are assigned + in preparation for allocating a data reader. + + + + + Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements + + 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. + A SQLiteDataReader + + + + Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class + + A SQLiteDataReader + + + + Called by the SQLiteDataReader when the data reader is closed. + + + + + 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. + + + + 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. + + + + Does nothing. Commands are prepared as they are executed the first time, and kept in prepared state afterwards. + + + + + Clones a command, including all its parameters + + A new SQLiteCommand with the same commandtext, connection and parameters + + + + The SQL command text associated with the command + + + + + The amount of time to wait for the connection to become available before erroring out + + + + + The type of the command. SQLite only supports CommandType.Text + + + + + The connection associated with this command + + + + + Forwards to the local Connection property + + + + + Returns the SQLiteParameterCollection for the given command + + + + + Forwards to the local Parameters property + + + + + The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the + command's underlying connection. + + + + + Forwards to the local Transaction property + + + + + Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. + + + + + Determines if the command is visible at design time. Defaults to True. + + + + + SQLite implementation of DbCommandBuilder. + + + + + Default constructor + + + + + Initializes the command builder and associates it with the specified data adapter. + + + + + + Minimal amount of parameter processing. Primarily sets the DbType for the parameter equal to the provider type in the schema + + The parameter to use in applying custom behaviors to a row + The row to apply the parameter to + The type of statement + Whether the application of the parameter is part of a WHERE clause + + + + Returns a valid named parameter + + The name of the parameter + Error + + + + Returns a named parameter for the given ordinal + + The i of the parameter + Error + + + + Returns a placeholder character for the specified parameter i. + + The index of the parameter to provide a placeholder for + Returns a named parameter + + + + Sets the handler for receiving row updating events. Used by the DbCommandBuilder to autogenerate SQL + statements that may not have previously been generated. + + A data adapter to receive events on. + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + + Places brackets around an identifier + + The identifier to quote + The bracketed identifier + + + + Removes brackets around an identifier + + The quoted (bracketed) identifier + The undecorated identifier + + + + Override helper, which can help the base command builder choose the right keys for the given query + + + + + + + Gets/sets the DataAdapter for this CommandBuilder + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Event data for connection event handlers. + + + + + The type of event being raised. + + + + + The associated 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. + + + + + Command or message text associated with this event, if any. + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + The type of event being raised. + The base associated + 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. + + + + Raised when an event pertaining to a connection occurs. + + The connection involved. + Extra information about the event. + + + + SQLite implentation of DbConnection. + + + The property can contain the following parameter(s), delimited with a semi-colon: + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + The default "stub" (i.e. placeholder) base schema name to use when + returning column schema information. Used as the initial value of + the BaseSchemaName property. This should start with "sqlite_*" + because those names are reserved for use by SQLite (i.e. they cannot + 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. + + + + + State of the current connection + + + + + The connection string + + + + + Nesting level of the transactions open on the connection + + + + + If set, then the connection is currently being disposed. + + + + + The default isolation level for new transactions + + + + + 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 + + + + + The database filename minus path and extension + + + + + Temporary password storage, emptied after the database has been opened + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. + + + + + The extra behavioral flags for this connection, if any. See the + enumeration for a list of + possible values. + + + + + Default command timeout + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Constructs a new SQLiteConnection object + + + Default constructor + + + + + Initializes the connection with the specified connection string. + + 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. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Clones the settings and connection string from an existing connection. If the existing connection is already open, this + function will open its own connection, enumerate any attached databases of the original connection, and automatically + attach to them. + + The connection to copy the settings from. + + + + Raises the 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 + destination. + + The destination database connection. + The destination database name. + The source database name. + + The number of pages to copy or negative to copy all remaining pages. + + + The method to invoke between each step of the backup process. This + parameter may be null (i.e. no callbacks will be performed). + + + The number of milliseconds to sleep after encountering a locking error + during the backup process. A value less than zero means that no sleep + should be performed. + + + + + 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 + will also be opened. + + + + + + Creates a database file. This just creates a zero-byte file which SQLite + will turn into a database when the file is opened properly. + + The file to create + + + + Raises the state change event when the state of the connection changes + + The new connection state. If this is different + from the previous state, the event is + raised. + 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. + + This parameter is ignored. + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection. + + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is false, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already active on the connection. + + Supported isolation levels are Serializable, ReadCommitted and Unspecified. + + Unspecified will use the default isolation level specified in the connection string. If no isolation level is specified in the + connection string, Serializable is used. + Serializable transactions are the default. In this mode, the engine gets an immediate lock on the database, and no other threads + may begin a transaction. Other threads may read from the database, but not write. + With a ReadCommitted isolation level, locks are deferred and elevated as needed. It is possible for multiple threads to start + a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread + has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached. + + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already + active on the connection. + + Returns the new transaction object. + + + + Forwards to the local function + + Supported isolation levels are Unspecified, Serializable, and ReadCommitted + + + + + This method is not implemented; however, the + event will still be raised. + + + + + + When the database connection is closed, all commands linked to this connection are automatically reset. + + + + + Clears the connection pool associated with the connection. Any other active connections using the same database file + will be discarded instead of returned to the pool when they are closed. + + + + + + Clears all connection pools. Any active connections will be discarded instead of sent to the pool when they are closed. + + + + + Create a new and associate it with this connection. + + Returns a new command object already assigned to this connection. + + + + Forwards to the local function. + + + + + + Parses the connection string into component parts using the custom + connection string parser. + + The connection string to parse + An array of key-value pairs representing each parameter of the connection string + + + + Parses a connection string using the built-in (i.e. framework provided) + connection string parser class and returns the key/value pairs. An + exception may be thrown if the connection string is invalid or cannot be + parsed. When compiled for the .NET Compact Framework, the custom + connection string parser is always used instead because the framework + provided one is unavailable there. + + + The connection string to parse. + + + Non-zero to throw an exception if any connection string values are not of + the type. + + The list of key/value pairs. + + + + Manual distributed transaction enlistment support + + The distributed transaction to enlist in + + + + Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value + + The list to look in + The key to find + The default value to return if the key is not found + The value corresponding to the specified key, or the default value if not found. + + + + Attempts to convert the string value to an enumerated value of the specified type. + + The enumerated type to convert the string value to. + The string value to be converted. + 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. + + + True to enable loading of extensions, false to disable. + + + + + Loads a SQLite extension library from the named dynamic link library file. + + + The name of the dynamic link library file containing the extension. + + + + + Loads a SQLite extension library from the named dynamic link library 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. + + + + + 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. + + + + + Opens the connection using the parameters found in the . + + + + + Opens the connection using the parameters found in the and then returns it. + + The current connection object. + + + + This method causes any pending database operation to abort and return at + its earliest opportunity. This routine is typically called in response + to a user action such as pressing "Cancel" or Ctrl-C where the user wants + a long query operation to halt immediately. It is safe to call this + routine from any thread. However, it is not safe to call this routine + with a database connection that is closed or might close before this method + 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + Non-zero to enable memory usage tracking, zero otherwise. + A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + + 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 + + + Enables or disabled extended result codes returned by SQLite + + + Enables or disabled extended result codes returned by SQLite + + + Add a log message via the SQLite sqlite3_log interface. + + + Add a log message via the SQLite sqlite3_log interface. + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Queries or modifies the number of retries or the retry interval (in milliseconds) for + certain I/O operations that may fail due to anti-virus software. + + The number of times to retry the I/O operation. A negative value + will cause the current count to be queried and replace that negative value. + The number of milliseconds to wait before retrying the I/O + operation. This number is multiplied by the number of retry attempts so far to come + up with the final number of milliseconds to wait. A negative value will cause the + current interval to be queried and replace that negative value. + Zero for success, non-zero for error. + + + + Removes one set of surrounding single -OR- double quotes from the string + value and returns the resulting string value. If the string is null, empty, + or contains quotes that are not balanced, nothing is done and the original + string value will be returned. + + The string value to process. + + The string value, modified to remove one set of surrounding single -OR- + double quotes, if applicable. + + + + + Expand the filename of the data source, resolving the |DataDirectory| + macro as appropriate. + + The database filename to expand + + Non-zero if the returned file name should be converted to a full path + (except when using the .NET Compact Framework). + + The expanded path and filename of the filename + + + + The following commands are used to extract schema information out of the database. Valid schema types are: + + + MetaDataCollections + + + DataSourceInformation + + + Catalogs + + + Columns + + + ForeignKeys + + + Indexes + + + IndexColumns + + + Tables + + + Views + + + ViewColumns + + + + + Returns the MetaDataCollections schema + + A DataTable of the MetaDataCollections schema + + + + Returns schema information of the specified collection + + The schema collection to retrieve + A DataTable of the specified collection + + + + Retrieves schema information using the specified constraint(s) for the specified collection + + The collection to retrieve + The restrictions to impose + A DataTable of the specified collection + + + + Builds a MetaDataCollections schema datatable + + DataTable + + + + Builds a DataSourceInformation datatable + + DataTable + + + + Build a Columns schema + + The catalog (attached database) to query, can be null + The table to retrieve schema information for, must not be null + The column to retrieve schema information for, can be null + DataTable + + + + Returns index information for the given database and catalog + + The catalog (attached database) to query, can be null + The name of the index to retrieve information for, can be null + The table to retrieve index information for, can be null + DataTable + + + + Retrieves table schema information for the database and catalog + + The catalog (attached database) to retrieve tables on + The table to retrieve, can be null + The table type, can be null + DataTable + + + + Retrieves view schema information for the database + + The catalog (attached database) to retrieve views on + The view name, can be null + DataTable + + + + Retrieves catalog (attached databases) schema information for the database + + The catalog to retrieve, can be null + DataTable + + + + Returns the base column information for indexes in a database + + The catalog to retrieve indexes for (can be null) + The table to restrict index information by (can be null) + The index to restrict index information by (can be null) + The source column to restrict index information by (can be null) + A DataTable containing the results + + + + Returns detailed column information for a specified view + + The catalog to retrieve columns for (can be null) + The view to restrict column information by (can be null) + The source column to restrict column information by (can be null) + A DataTable containing the results + + + + Retrieves foreign key information from the specified set of filters + + An optional catalog to restrict results on + An optional table to restrict results on + An optional foreign key name to restrict results on + A DataTable with the results of the query + + + + Static variable to store the connection event handlers to call. + + + + + This event is raised whenever the database is opened or closed. + + + + + This event is raised when events related to the lifecycle of a + 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. + + + + + The connection string containing the parameters for the connection + + + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + Returns the data source file name without extension or path. + + + + + Returns the string "main". + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + This can also be set in the ConnectionString with "Default Timeout" + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Gets/sets the extra behavioral flags for this connection. See the + enumeration for a list of + possible values. + + + + + Returns non-zero if the underlying native connection handle is + owned by this instance. + + + + + Returns the version of the underlying SQLite database engine + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on + 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. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + + + + + Returns a string containing the define constants (i.e. compile-time + options) used to compile the core managed assembly, delimited with + spaces. + + + + + Returns the version of the underlying SQLite core library. + + + + + This method returns the string whose value is the same as the + SQLITE_SOURCE_ID C preprocessor macro used when compiling the + 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. + + + + + 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 + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is committing a transaction. + Return non-zero to trigger a rollback. + + + + + This event is raised whenever SQLite statement first begins executing on + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is rolling back a transaction. + + + + + Returns the instance. + + + + + The I/O file cache flushing behavior for the connection + + + + + Normal file flushing at critical sections of the code + + + + + Full file flushing after every write operation + + + + + 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 + rollbackTrans boolean value to true. + + The connection committing the transaction + Event arguments on the transaction + + + + Raised when data is inserted, updated and deleted on a given connection + + The connection committing the transaction + The event parameters which triggered the event + + + + Raised when a statement first begins executing on a given connection + + The connection executing the statement + Event arguments of the trace + + + + Raised between each backup step. + + + The source database connection. + + + The source database name. + + + The destination database connection. + + + The destination database name. + + + The number of pages copied with each step. + + + The number of pages remaining to be copied. + + + The total number of pages in the source database. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True to continue with the backup process or false to halt the backup + process, rolling back any changes that have been made so far. + + + + + The data associated with a call into the authorizer. + + + + + The user-defined native data associated with this event. Currently, + this will always contain the value of . + + + + + The action code responsible for the current call into the authorizer. + + + + + 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. + + + + + 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 database name for the current call into the authorizer, 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 return code for the current call into the authorizer. + + + + + Constructs an instance of this class with default property values. + + + + + 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 + + + + + Set to true to abort the transaction and trigger a rollback + + + + + Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text + + + + + 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 dictionary of connection pools, based on the normalized file + name of the SQLite database. + + + + + The default version number new pools will get. + + + + + The number of connections successfully opened from any pool. + This value is incremented by the Remove method. + + + + + The number of connections successfully closed from any pool. + This value is incremented by the Add method. + + + + + 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 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. + + + + + This pool version associated with the database connection + handles in this pool queue. + + + + + 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. + + + + + Properties of this class + + + + + Constructs a new instance of the class + + + Default constructor + + + + + Constructs a new instance of the class using the specified connection string. + + The connection string to parse + + + + Private initializer, which assigns the connection string and resets the builder + + The connection string to assign + + + + Helper function for retrieving values from the connectionstring + + The keyword to retrieve settings for + The resulting parameter value + Returns true if the value was found and returned + + + + Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties() + + The hashtable to fill with property descriptors + + + + Gets/Sets the default version of the SQLite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library. + + + + + Gets/Sets the synchronization mode (file flushing) of the connection string. Default is "Normal". + + + + + Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding. + + + + + Gets/Sets whether or not to use connection pooling. The default is "False" + + + + + Gets/Sets whethor not to store GUID's in binary format. The default is True + which saves space in the database. + + + + + Gets/Sets the filename to open on the connection string. + + + + + An alternate to the data source property + + + + + An alternate to the data source property that uses the SQLite URI syntax. + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + + + + + Determines whether or not the connection will automatically participate + in the current distributed transaction (if one exists) + + + + + If set to true, will throw an exception if the database specified in the connection + string does not exist. If false, the database will be created automatically. + + + + + If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger + database sizes. + + + + + When enabled, the database will be opened for read-only access and writing will be disabled. + + + + + Gets/sets the database encryption password + + + + + Gets/sets the database encryption hexadecimal password + + + + + Gets/Sets the page size for the connection. + + + + + Gets/Sets the maximum number of pages the database may hold + + + + + Gets/Sets the cache size for the connection. + + + + + Gets/Sets the DateTime format for the connection. + + + + + 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 + .NET Framework compatibility purposes. + + + + + Determines how SQLite handles the transaction journal file. + + + + + Sets the default isolation level for transactions on the connection. + + + + + If enabled, use foreign key constraints + + + + + Gets/Sets the extra behavioral flags. + + + + + If enabled, apply the default connection settings to opened databases. + + + + + If enabled, attempt to resolve the provided data source file name to a + full path before opening. + + + + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite + understands. The DateTime extension to the spec is for internal use only. + + + + + Not used + + + + + All integers in SQLite default to Int64 + + + + + All floating point numbers in SQLite default to double + + + + + The default data type of SQLite is text + + + + + Typically blob types are only seen when returned from a function + + + + + Null types can be returned from functions + + + + + Used internally by this provider + + + + + Used internally by this provider + + + + + These are the event types associated with the + + delegate (and its corresponding event) and the + class. + + + + + Not used. + + + + + Not used. + + + + + The connection is being opened. + + + + + The connection string has been parsed. + + + + + The connection was opened. + + + + + The method was called on the + connection. + + + + + A transaction was created using the connection. + + + + + The connection was enlisted into a transaction. + + + + + 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. + + + + + The connection was 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. + + + + + Use the value of DateTime.Ticks. This value is not recommended and is not well supported with LINQ. + + + + + Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and + "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values). + + + + + The interval of time in days and fractions of a day since January 1, 4713 BC. + + + + + The whole number of seconds since the Unix epoch (January 1, 1970). + + + + + Any culture-independent string value that the .NET Framework can interpret as a valid DateTime. + + + + + Any string value that the .NET Framework can interpret as a valid DateTime using the current culture. + + + + + The default format for this provider. + + + + + 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. + + + + + The default mode, this causes SQLite to use the existing journaling mode for the database. + + + + + SQLite will create and destroy the journal file as-needed. + + + + + When this is set, SQLite will keep the journal file even after a transaction has completed. It's contents will be erased, + and the journal re-used as often as needed. If it is deleted, it will be recreated the next time it is needed. + + + + + This option disables the rollback journal entirely. Interrupted transactions or a program crash can cause database + corruption in this mode! + + + + + SQLite will truncate the journal file to zero-length instead of deleting it. + + + + + SQLite will store the journal in volatile RAM. This saves disk I/O but at the expense of database safety and integrity. + If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the + database file will very likely go corrupt. + + + + + SQLite uses a write-ahead log instead of a rollback journal to implement transactions. The WAL journaling mode is persistent; + after being set it stays in effect across multiple database connections and after closing and reopening the database. A database + in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later. + + + + + Possible values for the "synchronous" database setting. This setting determines + how often the database engine calls the xSync method of the VFS. + + + + + Use the default "synchronous" database setting. Currently, this should be + the same as using the FULL mode. + + + + + The database engine continues without syncing as soon as it has handed + data off to the operating system. If the application running SQLite + crashes, the data will be safe, but the database might become corrupted + if the operating system crashes or the computer loses power before that + data has been written to the disk surface. + + + + + The database engine will still sync at the most critical moments, but + less often than in FULL mode. There is a very small (though non-zero) + chance that a power failure at just the wrong time could corrupt the + database in NORMAL mode. + + + + + The database engine will use the xSync method of the VFS to ensure that + all content is safely written to the disk surface prior to continuing. + This ensures that an operating system crash or power failure will not + corrupt the database. FULL synchronous is very safe, but it is also + slower. + + + + + The requested command execution type. This controls which method of the + object will be called. + + + + + Do nothing. No method will be called. + + + + + The command is not expected to return a result -OR- the result is not + needed. The or + method + will be called. + + + + + 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. + + + + + The command is expected to return result. + The or + method will + be called. + + + + + Use the default command execution type. Using this value is the same + as using the value. + + + + + The action code responsible for the current call into the authorizer. + + + + + No action is being performed. This value should not be used from + external code. + + + + + No longer used. + + + + + An index will be created. The action-specific arguments are the + index name and the table name. + + + + + + A table will be created. The action-specific arguments are the + table name and a null value. + + + + + A temporary index will be created. The action-specific arguments + are the index name and the table name. + + + + + A temporary table will be created. The action-specific arguments + are the table name and a null value. + + + + + A temporary trigger will be created. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be created. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be created. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be created. The action-specific arguments are the view + name and a null value. + + + + + A DELETE statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + An index will be dropped. The action-specific arguments are the + index name and the table name. + + + + + A table will be dropped. The action-specific arguments are the tables + name and a null value. + + + + + A temporary index will be dropped. The action-specific arguments are + the index name and the table name. + + + + + A temporary table will be dropped. The action-specific arguments are + the table name and a null value. + + + + + A temporary trigger will be dropped. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be dropped. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be dropped. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be dropped. The action-specific arguments are the view + name and a null value. + + + + + An INSERT statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + A PRAGMA statement will be executed. The action-specific arguments + are the name of the PRAGMA and the new value or a null value. + + + + + 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 + + + + + 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 + + + + + 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 + + + + + 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 + + + + + Matches the version of the connection. + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. Matches the base schema name used by the + associated connection. + + + + + Internal constructor, initializes the datareader and sets up to begin executing statements + + The SQLiteCommand this data reader is for + The expected behavior of the data reader + + + + Dispose of all resources used by this datareader. + + + + + + Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified. + + + + + Throw an error if the datareader is closed + + + + + Throw an error if a row is not loaded + + + + + Enumerator support + + 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. + + + 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 + + + + Retrieves the column as a boolean value + + The index of the column to retrieve + bool + + + + Retrieves the column as a single byte value + + The index of the column to retrieve + byte + + + + Retrieves a column as an array of bytes (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the bytes into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of bytes written into the array + + To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned. + + + + + Returns the column as a single character + + The index of the column to retrieve + char + + + + Retrieves a column as an array of chars (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the characters into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of characters written into the array + + To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned. + + + + + Retrieves the name of the back-end datatype of the column + + The index of the column to retrieve + string + + + + Retrieve the column as a date/time value + + The index of the column to retrieve + DateTime + + + + Retrieve the column as a decimal value + + The index of the column to retrieve + decimal + + + + Returns the column as a double + + The index of the column to retrieve + double + + + + Returns the .NET type of a given column + + The index of the column to retrieve + Type + + + + Returns a column as a float value + + The index of the column to retrieve + float + + + + Returns the column as a Guid + + The index of the column to retrieve + Guid + + + + Returns the column as a short + + The index of the column to retrieve + Int16 + + + + Retrieves the column as an int + + The index of the column to retrieve + Int32 + + + + Retrieves the column as a long + + The index of the column to retrieve + Int64 + + + + Retrieves the name of the column + + The index of the column to retrieve + string + + + + Retrieves the i of a column, given its name + + The name of the column to retrieve + The int i of the column + + + + Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done + to gather the necessary information so it can be represented in an ADO.NET manner. + + Returns a DataTable containing the schema information for the active SELECT statement being processed. + + + + Retrieves the column as a string + + The index of the column to retrieve + string + + + + Retrieves the column as an object corresponding to the underlying datatype of the column + + The index of the column to retrieve + object + + + + Retreives the values of multiple columns, up to the size of the supplied array + + The array to fill with values from the columns in the current resultset + The number of columns retrieved + + + + Returns a collection containing all the column names and values for the + current row of data in the current resultset, if any. If there is no + current row or no current resultset, an exception may be thrown. + + + The collection containing the column name and value information for the + current row of data in the current resultset or null if this information + cannot be obtained. + + + + + Returns True if the specified column is null + + The index of the column to retrieve + True or False + + + + Moves to the next resultset in multiple row-returning SQL command. + + 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. + + + + + 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 data reader containing the databse connection to query the flags from. + + + The connection flags value. + + + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + + The index of the column to retrieve + A SQLiteType structure + + + + Reads the next row from the resultset + + True if a new row was successfully loaded and is ready for processing + + + + Not implemented. Returns 0 + + + + + Returns the number of columns in the current resultset + + + + + Returns the number of visible fields in the current resultset + + + + + Returns True if the resultset has rows that can be fetched + + + + + Returns True if the data reader is closed + + + + + Retrieve the count of records affected by an update/insert command. Only valid once the data reader is closed! + + + + + Indexer to retrieve data from a column given its name + + The name of the column to retrieve data for + The value contained in the column + + + + Indexer to retrieve data from a column given its i + + The index of the column to retrieve + The value contained in the column + + + + SQLite exception class. + + + + + Private constructor for use with serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Public constructor for generating a SQLite exception given the error + code and message. + + + The SQLite return code to report. + + + Message text to go along with the return code message text. + + + + + Public constructor that uses the base class constructor for the error + message. + + Error message text. + + + + Public constructor that uses the default base class constructor. + + + + + Public constructor that uses the base class constructor for the error + message and inner exception. + + Error message text. + The original (inner) exception. + + + + Adds extra information to the serialized object data specific to this + class type. This is only used for serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Returns the error message for the specified SQLite return code. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the composite error message based on the SQLite return code + and the optional detailed error message. + + The SQLite return code. + Optional detailed error message. + Error message text for the return code. + + + + Gets the associated SQLite result code for this exception as a + . This property returns the same + underlying value as the property. + + + + + Gets the associated SQLite return code for this exception as an + . For desktop versions of the .NET Framework, + this property overrides the property of the same name within the + + class. This property returns the same underlying value as the + property. + + + + + SQLite error codes. Actually, this enumeration represents a return code, + which may also indicate success in one of several ways (e.g. SQLITE_OK, + SQLITE_ROW, and SQLITE_DONE). Therefore, the name of this enumeration is + something of a misnomer. + + + + + The error code is unknown. This error code + is only used by the managed wrapper itself. + + + + + Successful result + + + + + SQL error or missing database + + + + + Internal logic error in SQLite + + + + + Access permission denied + + + + + Callback routine requested an abort + + + + + The database file is locked + + + + + A table in the database is locked + + + + + A malloc() failed + + + + + Attempt to write a readonly database + + + + + Operation terminated by sqlite3_interrupt() + + + + + Some kind of disk I/O error occurred + + + + + The database disk image is malformed + + + + + Unknown opcode in sqlite3_file_control() + + + + + Insertion failed because database is full + + + + + Unable to open the database file + + + + + Database lock protocol error + + + + + Database is empty + + + + + The database schema changed + + + + + String or BLOB exceeds size limit + + + + + Abort due to constraint violation + + + + + Data type mismatch + + + + + Library used incorrectly + + + + + Uses OS features not supported on host + + + + + Authorization denied + + + + + Auxiliary database format error + + + + + 2nd parameter to sqlite3_bind out of range + + + + + File opened that is not a database file + + + + + Notifications from sqlite3_log() + + + + + Warnings from sqlite3_log() + + + + + sqlite3_step() has another row ready + + + + + sqlite3_step() has finished executing + + + + + Used to mask off extended result codes + + + + + SQLite implementation of . + + + SQLite implementation of . + + + + + Constructs a new instance. + + + + + Static instance member which returns an instanced class. + + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Will provide a object in .NET 3.5. + + The class or interface type to query for. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. This event is provided for backward compatibility only. + New code should use the class instead. + + + + + 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. + + 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 base connection this function is attached to + + + + + Internal array used to keep track of aggregate function context data + + + + + The connection flags associated with this object (this should be the + same value as the flags associated with the parent connection object). + + + + + Holds a reference to the callback function for user functions + + + + + Holds a reference to the callbakc function for stepping in an aggregate function + + + + + Holds a reference to the callback function for finalizing an aggregate function + + + + + Holds a reference to the callback function for collation sequences + + + + + Current context of the current callback. Only valid during a callback + + + + + This static list contains all the user-defined functions declared using the proper attributes. + + + + + 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 + someone closes the connection while a DataReader is open. + + + + + Placeholder for a user-defined disposal routine + + True if the object is being disposed explicitly + + + + Scalar functions override this method to do their magic. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The arguments for the command to process + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + Aggregate functions override this method to do their magic. + + + Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible. + + The arguments for the command to process + The 1-based step number. This is incrememted each time the step method is called. + A placeholder for implementers to store contextual data pertaining to the current context. + + + + Aggregate functions override this method to finish their aggregate processing. + + + If you implemented your aggregate function properly, + you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have + all the information you need in there to figure out what to return. + NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will + be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value + if that is the case. + + Your own assigned contextData, provided for you so you can return your final results. + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + + User-defined collation sequences override this method to provide a custom string sorting algorithm. + + The first string to compare + The second strnig to compare + 1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2 + + + + Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The number of arguments + A pointer to the array of arguments + An object array of the arguments once they've been converted to .NET values + + + + Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context. + + The context the return value applies to + The parameter to return to SQLite + + + + Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method. + WARNING: Must not throw exceptions. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method. + WARNING: Must not throw exceptions. + + + This function takes care of doing the lookups and getting the important information put together to call the Step() function. + That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so + binary searches can be done to find the data. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method. + WARNING: Must not throw exceptions. + + A raw context pointer + + + + Using reflection, enumerate all assemblies in the current appdomain looking for classes that + have a SQLiteFunctionAttribute attribute, and registering them accordingly. + + + + + Manual method of registering a function. The type must still have the SQLiteFunctionAttributes in order to work + properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported. + + The type of the function to register + + + + Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection. + It is done this way so that all user-defined functions will access the database using the same encoding scheme + as the connection (UTF-8 or UTF-16). + + + The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to + all the wrapped callback functions. The interop function uses it to map CDecl callbacks to StdCall callbacks. + + The base object on which the functions are to bind + The flags associated with the parent connection object + 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. + + + + + Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert + strings and DateTime's into the current connection's encoding schema. + + + + + Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call. + + + User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays. + + + + + Obtains the collating sequence in effect for the given function. + + + + + + The type of user-defined function to declare + + + + + Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc. + + + + + Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data. + Examples include SUM(), COUNT(), AVG(), etc. + + + + + Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is + sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting + in a user-defined manner. + + + + + An internal callback delegate declaration. + + 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. + + + + An internal final callback delegate declaration. + + Raw context pointer for the user function + + + + Internal callback delegate for implementing collation sequences + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. + + + + The type of collating sequence + + + + + The built-in BINARY collating sequence + + + + + The built-in NOCASE collating sequence + + + + + The built-in REVERSE collating sequence + + + + + A custom user-defined collating sequence + + + + + The encoding type the collation sequence uses + + + + + The collation sequence is UTF8 + + + + + The collation sequence is UTF16 little-endian + + + + + The collation sequence is UTF16 big-endian + + + + + A struct describing the collating sequence a function is executing in + + + + + The name of the collating sequence + + + + + The type of collating sequence + + + + + The text encoding of the collation sequence + + + + + Context of the function that requested the collating sequence + + + + + Calls the base collating sequence to compare two strings + + The first string to compare + The second string to compare + -1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2 + + + + Calls the base collating sequence to compare two character arrays + + The first array to compare + The second array to compare + -1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2 + + + + A simple custom attribute to enable us to easily find user-defined functions in + the loaded assemblies and initialize them in SQLite as connections are made. + + + + + 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. + + + + + The number of arguments this function expects. -1 if the number of arguments is variable. + + + + + 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. + + Providing key information for a given statement is non-trivial :( + + + + + + This function does all the nasty work at determining what keys need to be returned for + a given statement. + + + + + + + + Make sure all the subqueries are open and ready and sync'd with the current rowid + of the table they're supporting + + + + + Release any readers on any subqueries + + + + + Append all the columns we've added to the original query to the schema + + + + + + How many additional columns of keyinfo we're holding + + + + + Used to support CommandBehavior.KeyInfo + + + + + A single sub-query for a given table/database. + + + + + Event data for logging event handlers. + + + + + The error code. The type of this object value should be + or . + + + + + SQL statement text as the statement first begins executing + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + Should be null. + + The error code. The type of this object value should be + or . + + The error message, if any. + The extra data, if any. + + + + Raised when a log event occurs. + + The current connection + Event arguments of the trace + + + + Manages the SQLite custom logging functionality and the associated + callback for the whole process. + + + + + Object used to synchronize access to the static instance data + for this class. + + + + + Member variable to store the AppDomain.DomainUnload event handler. + + + + + The default log event handler. + + + + + The log callback passed to native SQLite engine. This must live + as long as the SQLite library has a pointer to it. + + + + + The base SQLite object to interop with. + + + + + This will be non-zero if logging is currently enabled. + + + + + Initializes the SQLite logging facilities. + + + + + Handles the AppDomain being unloaded. + + Should be null. + The data associated with this event. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The SQLite error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The integer error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + + The error code. The type of this object value should be + System.Int32 or SQLiteErrorCode. + + The message to be logged. + + + + Creates and initializes the default log event handler. + + + + + Adds the default log event handler to the list of handlers. + + + + + Removes the default log event handler from the list of handlers. + + + + + Internal proxy function that calls any registered application log + event handlers. + + WARNING: This method is used more-or-less directly by native code, + do not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + Default logger. Currently, uses the Trace class (i.e. sends events + to the current trace listeners, if any). + + Should be null. + The data associated with this event. + + + + Member variable to store the application log handler to call. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. + + + + + If this property is true, logging is enabled; otherwise, logging is + disabled. When logging is disabled, no logging events will fire. + + + + + MetaDataCollections specific to SQLite + + + + + Returns a list of databases attached to the connection + + + + + Returns column information for the specified table + + + + + Returns index information for the optionally-specified table + + + + + Returns base columns for the given index + + + + + Returns the tables in the given catalog + + + + + Returns user-defined views in the given catalog + + + + + Returns underlying column information on the given view + + + + + Returns foreign key information for the given catalog + + + + + Returns the triggers on the database + + + + + SQLite implementation of DbParameter. + + + + + The data type of the parameter + + + + + The version information for mapping the parameter + + + + + The value of the data in the parameter + + + + + The source column for the parameter + + + + + The column name + + + + + The data size, unused by SQLite + + + + + Default constructor + + + + + Constructs a named parameter given the specified parameter name + + The parameter name + + + + Constructs a named parameter given the specified parameter name and initial value + + The parameter name + The initial value of the parameter + + + + Constructs a named parameter of the specified type + + The parameter name + The datatype of the parameter + + + + Constructs a named parameter of the specified type and source column reference + + The parameter name + The data type + The source column + + + + Constructs a named parameter of the specified type, source column and row version + + The parameter name + The data type + The source column + The row version information + + + + Constructs an unnamed parameter of the specified data type + + The datatype of the parameter + + + + Constructs an unnamed parameter of the specified data type and sets the initial value + + The datatype of the parameter + The initial value of the parameter + + + + Constructs an unnamed parameter of the specified data type and source column + + The datatype of the parameter + The source column + + + + Constructs an unnamed parameter of the specified data type, source column and row version + + The data type + The source column + The row version information + + + + Constructs a named parameter of the specified type and size + + The parameter name + The data type + The size of the parameter + + + + Constructs a named parameter of the specified type, size and source column + + The name of the parameter + The data type + The size of the parameter + The source column + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + The source column + The row version information + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + Ignored + The source column + The row version information + The initial value to assign the parameter + + + + Constructs a named parameter, yet another flavor + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + The source column + The row version information + Whether or not this parameter is for comparing NULL's + The intial value to assign the parameter + + + + Constructs an unnamed parameter of the specified type and size + + The data type + The size of the parameter + + + + Constructs an unnamed parameter of the specified type, size, and source column + + The data type + The size of the parameter + The source column + + + + Constructs an unnamed parameter of the specified type, size, source column and row version + + The data type + The size of the parameter + The source column + The row version information + + + + Resets the DbType of the parameter so it can be inferred from the value + + + + + Clones a parameter + + A new, unassociated SQLiteParameter + + + + Whether or not the parameter can contain a null value + + + + + Returns the datatype of the parameter + + + + + Supports only input parameters + + + + + Returns the parameter name + + + + + Returns the size of the parameter + + + + + Gets/sets the source column + + + + + Used by DbCommandBuilder to determine the mapping for nullable fields + + + + + Gets and sets the row version + + + + + Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given. + + + + + SQLite implementation of DbParameterCollection. + + + + + The underlying command to which this collection belongs + + + + + The internal array of parameters in this collection + + + + + Determines whether or not all parameters have been bound to their statement(s) + + + + + Initializes the collection + + The command to which the collection belongs + + + + Retrieves an enumerator for the collection + + An enumerator for the underlying array + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + The source column + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a named/unnamed parameter and its value to the parameter collection. + + Name of the parameter, or null to indicate an unnamed parameter + The initial value of the parameter + Returns the SQLiteParameter object created during the call. + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Clears the array and resets the collection + + + + + Determines if the named parameter exists in the collection + + The name of the parameter to check + True if the parameter is in the collection + + + + Determines if the parameter exists in the collection + + The SQLiteParameter to check + True if the parameter is in the collection + + + + Not implemented + + + + + + + Retrieve a parameter by name from the collection + + The name of the parameter to fetch + A DbParameter object + + + + Retrieves a parameter by its index in the collection + + The index of the parameter to retrieve + A DbParameter object + + + + Returns the index of a parameter given its name + + The name of the parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Returns the index of a parameter + + The parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Inserts a parameter into the array at the specified location + + The zero-based index to insert the parameter at + The parameter to insert + + + + Removes a parameter from the collection + + The parameter to remove + + + + Removes a parameter from the collection given its name + + The name of the parameter to remove + + + + Removes a parameter from the collection given its index + + The zero-based parameter index to remove + + + + Re-assign the named parameter to a new parameter object + + The name of the parameter to replace + The new parameter + + + + Re-assign a parameter at the specified index + + The zero-based index of the parameter to replace + The new parameter + + + + Un-binds all parameters from their statements + + + + + This function attempts to map all parameters in the collection to all statements in a Command. + Since named parameters may span multiple statements, this function makes sure all statements are bound + to the same named parameter. Unnamed parameters are bound in sequence. + + + + + Returns false + + + + + Returns false + + + + + Returns false + + + + + Returns null + + + + + Returns a count of parameters in the collection + + + + + Overloaded to specialize the return value of the default indexer + + Name of the parameter to get/set + The specified named SQLite parameter + + + + Overloaded to specialize the return value of the default indexer + + The index of the parameter to get/set + The specified SQLite parameter + + + + Represents a single SQL statement in SQLite. + + + + + The underlying SQLite object this statement is bound to + + + + + The command text of this SQL statement + + + + + The actual statement pointer + + + + + An index from which unnamed parameters begin + + + + + Names of the parameters as SQLite understands them to be + + + + + Parameters for this statement + + + + + Command this statement belongs to (if any) + + + + + The flags associated with the parent connection object. + + + + + Initializes the statement and attempts to get all information about parameters in the statement + + The base SQLite object + The flags associated with the parent connection object + The statement + The command text for this statement + The previous command in a multi-statement command + + + + Disposes and finalizes the statement + + + + + If the underlying database connection is open, fetches the number of changed rows + resulting from the most recent query; otherwise, does nothing. + + + The number of changes when true is returned. + Undefined if false is returned. + + Non-zero if the number of changed rows was fetched. + + + + Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to + this statement, and if so, keeps a reference to the parameter so it can be bound later. + + The parameter name to map + The parameter to assign it + + + + 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 + + The index of the parameter to bind + The parameter we're binding + + + + SQLite implementation of DbTransaction. + + + + + The connection to which this transaction is bound + + + + + Constructs the transaction object, binding it to the supplied connection + + The connection to open a transaction on + TRUE to defer the writelock, or FALSE to lock immediately + + + + Disposes the transaction. If it is currently active, any changes are rolled back. + + + + + Commits the current transaction. + + + + + Rolls back the active transaction. + + + + + Returns the underlying connection to which this transaction applies. + + + + + Forwards to the local Connection property + + + + + Gets the isolation level of the transaction. SQLite only supports Serializable transactions. + + + + + 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]";. + + + + + The file extension used for dynamic link libraries. + + + + + The file extension used for the XML configuration file. + + + + + This is the name of the XML configuration file specific to the + System.Data.SQLite assembly. + + + + + This lock is used to protect the static _SQLiteNativeModuleFileName, + _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields. + + + + + 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. + + + + + 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. + + + + + The name of the environment variable containing the processor + architecture of the current process. + + + + + This is the P/Invoke method that wraps the native Win32 LoadLibrary + function. See the MSDN documentation for full details on what it + does. + + + The name of the executable library. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + 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. + + + + + 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). + + + + + Queries and returns the base directory of the current application + domain. + + + The base directory for the current application domain -OR- null if it + cannot be determined. + + + + + Determines if the dynamic link library file name requires a suffix + and adds it if necessary. + + + The original dynamic link library file name to inspect. + + + The dynamic link library file name, possibly modified to include an + extension. + + + + + Queries and returns the processor architecture of the current + process. + + + The processor architecture of the current process -OR- null if it + cannot be determined. + + + + + Given the processor architecture, returns the name of the platform. + + + The processor architecture to be translated to a platform name. + + + The platform name for the specified processor architecture -OR- null + 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. + + + The requested processor architecture, null for default (the + 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. + + + Non-zero if the native module was loaded successfully; otherwise, + zero. + + + + + 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. + + +
+
diff --git a/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.5/System.Data.SQLite.xml b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.5/System.Data.SQLite.xml new file mode 100644 index 00000000..6df7eb75 --- /dev/null +++ b/test/Spring/Spring.Web.Conversation.NHibernate32.Tests/lib/net/4.5/System.Data.SQLite.xml @@ -0,0 +1,13100 @@ + + + + System.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 + function for use with sqlite3_log() and the SQLITE_CONFIG_LOG. + + WARNING: This delegate is used more-or-less directly by native code, do + not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + This class implements SQLiteBase completely, and is the guts of the code that interop's SQLite with .NET + + + + + This internal class provides the foundation of SQLite support. It defines all the abstract members needed to implement + a SQLite data provider, and inherits from SQLiteConvert which allows for simple translations of string to and from SQLite. + + + + + This base class provides datatype conversion services for the SQLite provider. + + + + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). + + + + + The value of the OLE Automation epoch represented as a Julian day. + + + + + An array of ISO-8601 DateTime formats that we support parsing. + + + + + The internal default format for UTC DateTime values when converting + to a string. + + + + + The internal default format for local DateTime values when converting + to a string. + + + + + An UTF-8 Encoding instance, so we can convert strings to and from UTF-8 + + + + + The default DateTime format for this instance. + + + + + 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. + + + + Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character. + + The string to convert to UTF-8 + A byte array containing the converted string plus an extra 0 terminating byte at the end of the array. + + + + Convert a DateTime to a UTF-8 encoded, zero-terminated byte array. + + + This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the + string result. + + The DateTime to convert. + The UTF-8 encoded string, including a 0 terminating byte at the end of the array. + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + Converts a UTF-8 encoded IntPtr of the specified length into a .NET string + + The pointer to the memory where the UTF-8 string is encoded + The number of bytes to decode + A string containing the translated character(s) + + + + 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: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + A DateTime value + + + + Converts a string into a DateTime, using the specified DateTimeFormat, + DateTimeKind and DateTimeFormatString. + + + Acceptable ISO8601 DateTime formats are: + + THHmmssK + THHmmK + HH:mm:ss.FFFFFFFK + HH:mm:ssK + HH:mmK + yyyy-MM-dd HH:mm:ss.FFFFFFFK + yyyy-MM-dd HH:mm:ssK + yyyy-MM-dd HH:mmK + yyyy-MM-ddTHH:mm:ss.FFFFFFFK + yyyy-MM-ddTHH:mmK + yyyy-MM-ddTHH:mm:ssK + yyyyMMddHHmmssK + yyyyMMddHHmmK + yyyyMMddTHHmmssFFFFFFFK + THHmmss + THHmm + HH:mm:ss.FFFFFFF + HH:mm:ss + HH:mm + yyyy-MM-dd HH:mm:ss.FFFFFFF + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mm + yyyy-MM-ddTHH:mm:ss.FFFFFFF + yyyy-MM-ddTHH:mm + yyyy-MM-ddTHH:mm:ss + yyyyMMddHHmmss + yyyyMMddHHmm + yyyyMMddTHHmmssFFFFFFF + yyyy-MM-dd + yyyyMMdd + yy-MM-dd + + 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 + culture-independent formatted date and time string, a formatted date and time string in the current + culture, or an ISO8601-format string. + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. + A DateTime value + + + + Converts a julianday value into a DateTime + + The value to convert + A .NET DateTime + + + + Converts a julianday value into a DateTime + + The value to convert + 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 + + The DateTime to convert + The JulianDay value the Datetime represents + + + + Converts a DateTime struct to the whole number of seconds since the + Unix epoch. + + The DateTime to convert + The whole number of seconds since the Unix epoch + + + + 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 DateTime format string to use for the specified DateTimeKind. + + + + + 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. + + + + Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime. + + + This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls + ToDateTime() on the string to return a DateTime. + + A pointer to the UTF-8 encoded string + The length in bytes of the string + The parsed DateTime value + + + + Smart method of splitting a string. Skips quoted elements, removes the quotes. + + + This split function works somewhat like the String.Split() function in that it breaks apart a string into + pieces and returns the pieces as an array. The primary differences are: + + Only one character can be provided as a separator character + Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed. + + Thus, if splitting the following string looking for a comma:
+ One,Two, "Three, Four", Five
+
+ The resulting array would contain
+ [0] One
+ [1] Two
+ [2] Three, Four
+ [3] Five
+
+ Note that the leading and trailing spaces were removed from each item during the split. +
+ Source string to split apart + 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. + + + + + Convert a value to true or false. + + A string or number representing true or false + + + + + Convert a string to true or false. + + A string representing true or false + + + "yes", "no", "y", "n", "0", "1", "on", "off" as well as Boolean.FalseString and Boolean.TrueString will all be + converted to a proper boolean value. + + + + + Converts a SQLiteType to a .NET Type object + + The SQLiteType to convert + Returns a .NET Type object + + + + For a given intrinsic type, return a DbType + + The native type to convert + The corresponding (closest match) DbType + + + + Returns the ColumnSize for the given DbType + + The DbType to get the size of + + + + + Determines the type name for the given database value type. + + 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 + + The DbType to convert from + The closest-match .NET type + + + + For a given type, return the closest-match SQLite TypeAffinity, which only understands a very limited subset of types. + + 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. + + + + + For a given type name, return a closest-match .NET type + + The connection context for custom type mappings, if any. + The name of the 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + 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. + We depend on auto initialization to recover. + + + + + Determines if the associated native connection handle is open. + + + Non-zero if a database connection is open. + + + + + Opens a database. + + + Implementers should call SQLiteFunction.BindFunctions() and save the array after opening a connection + to bind all attributed user-defined functions and collating sequences to the new connection. + + The filename of the database to open. SQLite automatically creates it if it doesn't exist. + The flags associated with the parent connection object + The open flags to use when creating the connection + The maximum size of the pool for the given filename + If true, the connection can be pulled from the connection pool + + + + Closes the currently-open database. + + + After the database has been closed implemeters should call SQLiteFunction.UnbindFunctions() to deallocate all interop allocated + memory associated with the user-defined functions and collating sequences tied to the closed connection. + + Non-zero if the operation is allowed to throw exceptions, zero otherwise. + + + + Sets the busy timeout on the connection. SQLiteCommand will call this before executing any command. + + The number of milliseconds to wait before returning SQLITE_BUSY + + + + Returns the text of the last error issued by SQLite + + + + + + 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 + + + + + When pooling is enabled, returns the number of pool entries matching the current file name. + + The number of pool entries matching the current file name. + + + + Prepares a SQL statement for execution. + + The source connection preparing the command. Can be null for any caller except LINQ + The SQL command text to prepare + The previous statement in a multi-statement command, or null if no previous statement exists + The timeout to wait before aborting the prepare + The remainder of the statement that was not processed. Each call to prepare parses the + SQL up to to either the end of the text or to the first semi-colon delimiter. The remaining text is returned + here for a subsequent call to Prepare() until all the text has been processed. + Returns an initialized SQLiteStatement. + + + + Steps through a prepared statement. + + The SQLiteStatement to step through + True if a row was returned, False if not. + + + + 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. + + + 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 extened result codes returned by SQLite + + true to enable extended result codes, false to disable. + + + + + 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. + + Extended result code + + + + 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.Format() function. + + + + + Checks if the SQLite core library has been initialized in the current process. + + + Non-zero if the SQLite core library has been initialized in the current process, + zero otherwise. + + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy or negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Returns the error message for the specified SQLite return code using + the internal static lookup table. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the error message for the specified SQLite return code using + the sqlite3_errstr() function, falling back to the internal lookup + table if necessary. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns a string representing the active version of SQLite + + + + + Returns an integer representing the active version of SQLite + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of changes the last executing insert/update caused. + + + + + Returns the amount of memory (in bytes) currently in use by the SQLite core library. This is not really a per-connection + value, it is global to the process. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + 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 + + + + + The modules created using this connection. + + + + + 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. + + + + + This method attempts to dispose of all the derived + object instances currently associated with the native database connection. + + + + + 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 + + + + Creates a new SQLite backup object based on the provided destination + database connection. The source database connection is the one + associated with this object. The source and destination database + connections cannot be the same. + + The destination database connection. + The destination database name. + The source database name. + The newly created backup object. + + + + Copies up to N pages from the source database to the destination + database associated with the specified backup object. + + The backup object to use. + + The number of pages to copy, negative to copy all remaining pages. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True if there are more pages to be copied, false otherwise. + + + + + Returns the number of pages remaining to be copied from the source + database to the destination database associated with the specified + backup object. + + The backup object to check. + The number of pages remaining to be copied. + + + + Returns the total number of pages in the source database associated + with the specified backup object. + + The backup object to check. + The total number of pages in the source database. + + + + Destroys the backup object, rolling back any backup that may be in + progess. + + The backup object to destroy. + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + initialized for the current process. + + + + + Determines if the SQLite core library has been initialized for the + current process. + + + A boolean indicating whether or not the SQLite core library has been + 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 + + A pointer to a UTF-16 string + The length (IN BYTES) of the string + A .NET string + + + + Represents a single SQL backup in SQLite. + + + + + The underlying SQLite object this backup is bound to. + + + + + The actual backup handle. + + + + + The destination database for the backup. + + + + + The destination database name for the backup. + + + + + The source database for the backup. + + + + + The source database name for the backup. + + + + + The last result from the StepBackup method of the SQLite3 class. + This is used to determine if the call to the FinishBackup method of + the SQLite3 class should throw an exception when it receives a non-Ok + return code from the core SQLite library. + + + + + Initializes the backup. + + The base SQLite object. + The backup handle. + The destination database for the backup. + The destination database name for the backup. + The source database for the backup. + The source database name for the backup. + + + + Disposes and finalizes the backup. + + + + + The extra behavioral flags that can be applied to a connection. + + + + + No extra flags. + + + + + Enable logging of all SQL statements to be prepared. + + + + + Enable logging of all bound parameter types and raw values. + + + + + Enable logging of all bound parameter strongly typed values. + + + + + Enable logging of all exceptions caught from user-provided + managed code called from native code via delegates. + + + + + Enable logging of backup API errors. + + + + + Skip adding the extension functions provided by the native + 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 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. + + + + + The default extra flags for new connections. + + + + + 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 + + + + + The connection the command is associated with + + + + + The version of the connection the command is associated with + + + + + Indicates whether or not a DataReader is active on the command. + + + + + The timeout for the command, kludged because SQLite doesn't support per-command timeout values + + + + + Designer support + + + + + Used by DbDataAdapter to determine updating behavior + + + + + The collection of parameters for the command + + + + + The SQL command text, broken into individual SQL statements as they are executed + + + + + Unprocessed SQL text that has not been executed + + + + + Transaction associated with this command + + + + + Constructs a new SQLiteCommand + + + Default constructor + + + + + Initializes the command with the given command text + + The SQL command text + + + + Initializes the command with the given SQL command text and attach the command to the specified + connection. + + The SQL command text + The connection to associate with the command + + + + Initializes the command and associates it with the specified connection. + + The connection to associate with the command + + + + Initializes a command with the given SQL, connection and transaction + + The SQL command text + The connection to associate with the command + The transaction the command should be associated with + + + + Disposes of the command and clears all member variables + + 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 + + + + + Builds an array of prepared statements for each complete SQL statement in the command text + + + + + Not implemented + + + + + Forwards to the local CreateParameter() function + + + + + + Create a new parameter + + + + + + This function ensures there are no active readers, that we have a valid connection, + that the connection is open, that all statements are prepared and all parameters are assigned + in preparation for allocating a data reader. + + + + + Creates a new SQLiteDataReader to execute/iterate the array of SQLite prepared statements + + 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. + A SQLiteDataReader + + + + Overrides the default behavior of DbDataReader to return a specialized SQLiteDataReader class + + A SQLiteDataReader + + + + Called by the SQLiteDataReader when the data reader is closed. + + + + + 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. + + + + 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. + + + + Does nothing. Commands are prepared as they are executed the first time, and kept in prepared state afterwards. + + + + + Clones a command, including all its parameters + + A new SQLiteCommand with the same commandtext, connection and parameters + + + + The SQL command text associated with the command + + + + + The amount of time to wait for the connection to become available before erroring out + + + + + The type of the command. SQLite only supports CommandType.Text + + + + + The connection associated with this command + + + + + Forwards to the local Connection property + + + + + Returns the SQLiteParameterCollection for the given command + + + + + Forwards to the local Parameters property + + + + + The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the + command's underlying connection. + + + + + Forwards to the local Transaction property + + + + + Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. + + + + + Determines if the command is visible at design time. Defaults to True. + + + + + SQLite implementation of DbCommandBuilder. + + + + + Default constructor + + + + + Initializes the command builder and associates it with the specified data adapter. + + + + + + Minimal amount of parameter processing. Primarily sets the DbType for the parameter equal to the provider type in the schema + + The parameter to use in applying custom behaviors to a row + The row to apply the parameter to + The type of statement + Whether the application of the parameter is part of a WHERE clause + + + + Returns a valid named parameter + + The name of the parameter + Error + + + + Returns a named parameter for the given ordinal + + The i of the parameter + Error + + + + Returns a placeholder character for the specified parameter i. + + The index of the parameter to provide a placeholder for + Returns a named parameter + + + + Sets the handler for receiving row updating events. Used by the DbCommandBuilder to autogenerate SQL + statements that may not have previously been generated. + + A data adapter to receive events on. + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + Returns the automatically-generated SQLite command to delete rows from the database + + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + Returns the automatically-generated SQLite command to update rows in the database + + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + Returns the automatically-generated SQLite command to insert rows into the database + + + + + + + Places brackets around an identifier + + The identifier to quote + The bracketed identifier + + + + Removes brackets around an identifier + + The quoted (bracketed) identifier + The undecorated identifier + + + + Override helper, which can help the base command builder choose the right keys for the given query + + + + + + + Gets/sets the DataAdapter for this CommandBuilder + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Overridden to hide its property from the designer + + + + + Event data for connection event handlers. + + + + + The type of event being raised. + + + + + The associated 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. + + + + + Command or message text associated with this event, if any. + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + The type of event being raised. + The base associated + 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. + + + + Raised when an event pertaining to a connection occurs. + + The connection involved. + Extra information about the event. + + + + SQLite implentation of DbConnection. + + + The property can contain the following parameter(s), delimited with a semi-colon: + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + The default "stub" (i.e. placeholder) base schema name to use when + returning column schema information. Used as the initial value of + the BaseSchemaName property. This should start with "sqlite_*" + because those names are reserved for use by SQLite (i.e. they cannot + 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. + + + + + State of the current connection + + + + + The connection string + + + + + Nesting level of the transactions open on the connection + + + + + If set, then the connection is currently being disposed. + + + + + The default isolation level for new transactions + + + + + 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 + + + + + The database filename minus path and extension + + + + + Temporary password storage, emptied after the database has been opened + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. + + + + + The extra behavioral flags for this connection, if any. See the + enumeration for a list of + possible values. + + + + + Default command timeout + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Constructs a new SQLiteConnection object + + + Default constructor + + + + + Initializes the connection with the specified connection string. + + 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. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Clones the settings and connection string from an existing connection. If the existing connection is already open, this + function will open its own connection, enumerate any attached databases of the original connection, and automatically + attach to them. + + The connection to copy the settings from. + + + + Raises the 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 + destination. + + The destination database connection. + The destination database name. + The source database name. + + The number of pages to copy or negative to copy all remaining pages. + + + The method to invoke between each step of the backup process. This + parameter may be null (i.e. no callbacks will be performed). + + + The number of milliseconds to sleep after encountering a locking error + during the backup process. A value less than zero means that no sleep + should be performed. + + + + + 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 + will also be opened. + + + + + + Creates a database file. This just creates a zero-byte file which SQLite + will turn into a database when the file is opened properly. + + The file to create + + + + Raises the state change event when the state of the connection changes + + The new connection state. If this is different + from the previous state, the event is + raised. + 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. + + This parameter is ignored. + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + OBSOLETE. Creates a new SQLiteTransaction if one isn't already active on the connection. + + When TRUE, SQLite defers obtaining a write lock until a write operation is requested. + When FALSE, a writelock is obtained immediately. The default is false, but in a multi-threaded multi-writer + environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock. + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already active on the connection. + + Supported isolation levels are Serializable, ReadCommitted and Unspecified. + + Unspecified will use the default isolation level specified in the connection string. If no isolation level is specified in the + connection string, Serializable is used. + Serializable transactions are the default. In this mode, the engine gets an immediate lock on the database, and no other threads + may begin a transaction. Other threads may read from the database, but not write. + With a ReadCommitted isolation level, locks are deferred and elevated as needed. It is possible for multiple threads to start + a transaction in ReadCommitted mode, but if a thread attempts to commit a transaction while another thread + has a ReadCommitted lock, it may timeout or cause a deadlock on both threads until both threads' CommandTimeout's are reached. + + Returns a SQLiteTransaction object. + + + + Creates a new if one isn't already + active on the connection. + + Returns the new transaction object. + + + + Forwards to the local function + + Supported isolation levels are Unspecified, Serializable, and ReadCommitted + + + + + This method is not implemented; however, the + event will still be raised. + + + + + + When the database connection is closed, all commands linked to this connection are automatically reset. + + + + + Clears the connection pool associated with the connection. Any other active connections using the same database file + will be discarded instead of returned to the pool when they are closed. + + + + + + Clears all connection pools. Any active connections will be discarded instead of sent to the pool when they are closed. + + + + + Create a new and associate it with this connection. + + Returns a new command object already assigned to this connection. + + + + Forwards to the local function. + + + + + + Parses the connection string into component parts using the custom + connection string parser. + + The connection string to parse + An array of key-value pairs representing each parameter of the connection string + + + + Parses a connection string using the built-in (i.e. framework provided) + connection string parser class and returns the key/value pairs. An + exception may be thrown if the connection string is invalid or cannot be + parsed. When compiled for the .NET Compact Framework, the custom + connection string parser is always used instead because the framework + provided one is unavailable there. + + + The connection string to parse. + + + Non-zero to throw an exception if any connection string values are not of + the type. + + The list of key/value pairs. + + + + Manual distributed transaction enlistment support + + The distributed transaction to enlist in + + + + Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value + + The list to look in + The key to find + The default value to return if the key is not found + The value corresponding to the specified key, or the default value if not found. + + + + Attempts to convert the string value to an enumerated value of the specified type. + + The enumerated type to convert the string value to. + The string value to be converted. + 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. + + + True to enable loading of extensions, false to disable. + + + + + Loads a SQLite extension library from the named dynamic link library file. + + + The name of the dynamic link library file containing the extension. + + + + + Loads a SQLite extension library from the named dynamic link library 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. + + + + + 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. + + + + + Opens the connection using the parameters found in the . + + + + + Opens the connection using the parameters found in the and then returns it. + + The current connection object. + + + + This method causes any pending database operation to abort and return at + its earliest opportunity. This routine is typically called in response + to a user action such as pressing "Cancel" or Ctrl-C where the user wants + a long query operation to halt immediately. It is safe to call this + routine from any thread. However, it is not safe to call this routine + with a database connection that is closed or might close before this method + 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. + If this is disabled, memory usage tracking will not be performed. This is not really a per-connection value, it is + global to the process. + + Non-zero to enable memory usage tracking, zero otherwise. + A standard SQLite return code (i.e. zero for success and non-zero for failure). + + + + 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 + + + Enables or disabled extended result codes returned by SQLite + + + Enables or disabled extended result codes returned by SQLite + + + Add a log message via the SQLite sqlite3_log interface. + + + Add a log message via the SQLite sqlite3_log interface. + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Change the password (or assign a password) to an open database. + + + No readers or writers may be active for this process. The database must already be open + and if it already was password protected, the existing password must already have been supplied. + + The new password to assign to the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Sets the password for a password-protected database. A password-protected database is + unusable for any operation until the password has been set. + + The password for the database + + + + Queries or modifies the number of retries or the retry interval (in milliseconds) for + certain I/O operations that may fail due to anti-virus software. + + The number of times to retry the I/O operation. A negative value + will cause the current count to be queried and replace that negative value. + The number of milliseconds to wait before retrying the I/O + operation. This number is multiplied by the number of retry attempts so far to come + up with the final number of milliseconds to wait. A negative value will cause the + current interval to be queried and replace that negative value. + Zero for success, non-zero for error. + + + + Removes one set of surrounding single -OR- double quotes from the string + value and returns the resulting string value. If the string is null, empty, + or contains quotes that are not balanced, nothing is done and the original + string value will be returned. + + The string value to process. + + The string value, modified to remove one set of surrounding single -OR- + double quotes, if applicable. + + + + + Expand the filename of the data source, resolving the |DataDirectory| + macro as appropriate. + + The database filename to expand + + Non-zero if the returned file name should be converted to a full path + (except when using the .NET Compact Framework). + + The expanded path and filename of the filename + + + + The following commands are used to extract schema information out of the database. Valid schema types are: + + + MetaDataCollections + + + DataSourceInformation + + + Catalogs + + + Columns + + + ForeignKeys + + + Indexes + + + IndexColumns + + + Tables + + + Views + + + ViewColumns + + + + + Returns the MetaDataCollections schema + + A DataTable of the MetaDataCollections schema + + + + Returns schema information of the specified collection + + The schema collection to retrieve + A DataTable of the specified collection + + + + Retrieves schema information using the specified constraint(s) for the specified collection + + The collection to retrieve + The restrictions to impose + A DataTable of the specified collection + + + + Builds a MetaDataCollections schema datatable + + DataTable + + + + Builds a DataSourceInformation datatable + + DataTable + + + + Build a Columns schema + + The catalog (attached database) to query, can be null + The table to retrieve schema information for, must not be null + The column to retrieve schema information for, can be null + DataTable + + + + Returns index information for the given database and catalog + + The catalog (attached database) to query, can be null + The name of the index to retrieve information for, can be null + The table to retrieve index information for, can be null + DataTable + + + + Retrieves table schema information for the database and catalog + + The catalog (attached database) to retrieve tables on + The table to retrieve, can be null + The table type, can be null + DataTable + + + + Retrieves view schema information for the database + + The catalog (attached database) to retrieve views on + The view name, can be null + DataTable + + + + Retrieves catalog (attached databases) schema information for the database + + The catalog to retrieve, can be null + DataTable + + + + Returns the base column information for indexes in a database + + The catalog to retrieve indexes for (can be null) + The table to restrict index information by (can be null) + The index to restrict index information by (can be null) + The source column to restrict index information by (can be null) + A DataTable containing the results + + + + Returns detailed column information for a specified view + + The catalog to retrieve columns for (can be null) + The view to restrict column information by (can be null) + The source column to restrict column information by (can be null) + A DataTable containing the results + + + + Retrieves foreign key information from the specified set of filters + + An optional catalog to restrict results on + An optional table to restrict results on + An optional foreign key name to restrict results on + A DataTable with the results of the query + + + + Static variable to store the connection event handlers to call. + + + + + This event is raised whenever the database is opened or closed. + + + + + This event is raised when events related to the lifecycle of a + 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. + + + + + The connection string containing the parameters for the connection + + + + + Parameter + Values + Required + Default + + + Data Source + + 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 + + + + Version + 3 + N + 3 + + + UseUTF16Encoding + True
False
+ N + False +
+ + DateTimeFormat + + Ticks - Use the value of DateTime.Ticks.
+ ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC + DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
+ JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
+ UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
+ InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
+ CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
+ N + ISO8601 +
+ + DateTimeKind + Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC.
Local - The time represented is local time.
+ N + 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 + 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. + N + sqlite_default_schema + + + BinaryGUID + True - Store GUID columns in binary form
False - Store GUID columns as text
+ N + True +
+ + Cache Size + {size in bytes} + N + 2000 + + + Synchronous + Normal - Normal file flushing behavior
Full - Full flushing after all writes
Off - Underlying OS flushes I/O's
+ N + Full +
+ + Page Size + {size in bytes} + N + 1024 + + + Password + {password} - 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 + + + + 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 + Y +
+ + 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 +
+ + FailIfMissing + True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
+ N + False +
+ + Max Page Count + {size in pages} - Limits the maximum number of pages (limits the size) of the database + N + 0 + + + Legacy Format + True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
+ N + False +
+ + Default Timeout + {time in seconds}
The default command timeout
+ N + 30 +
+ + Journal Mode + Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit
Off - Disable the rollback journal entirely
+ N + Delete +
+ + Read Only + True - Open the database for read only access
False - Open the database for normal read/write access
+ N + False +
+ + Max Pool Size + The maximum number of connections for the given connection string that can be in the connection pool + N + 100 + + + Default IsolationLevel + The default transaciton isolation level + N + Serializable + + + Foreign Keys + Enable foreign key constraints + N + False + + + Flags + Extra behavioral flags for the connection. See the enumeration for possible values. + N + Default + + + SetDefaults + + True - Apply the default connection settings to the opened database.
+ False - Skip applying the default connection settings to the opened database. +
+ N + True +
+ + ToFullPath + + True - Attempt to expand the data source file name to a fully qualified path before opening.
+ False - Skip attempting to expand the data source file name to a fully qualified path before opening. +
+ N + True +
+
+
+
+ + + Returns the data source file name without extension or path. + + + + + Returns the string "main". + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + This can also be set in the ConnectionString with "Default Timeout" + + + + + Non-zero if the built-in (i.e. framework provided) connection string + parser should be used when opening the connection. + + + + + Gets/sets the extra behavioral flags for this connection. See the + enumeration for a list of + possible values. + + + + + Returns non-zero if the underlying native connection handle is + owned by this instance. + + + + + Returns the version of the underlying SQLite database engine + + + + + Returns the rowid of the most recent successful INSERT into the database from this connection. + + + + + Returns the number of rows changed by the last INSERT, UPDATE, or DELETE statement executed on + 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. + + + + + Returns the maximum amount of memory (in bytes) used by the SQLite core library since the high-water mark was last reset. + + + + + Returns a string containing the define constants (i.e. compile-time + options) used to compile the core managed assembly, delimited with + spaces. + + + + + Returns the version of the underlying SQLite core library. + + + + + This method returns the string whose value is the same as the + SQLITE_SOURCE_ID C preprocessor macro used when compiling the + 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. + + + + + 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 + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is committing a transaction. + Return non-zero to trigger a rollback. + + + + + This event is raised whenever SQLite statement first begins executing on + this connection. It only applies to the given connection. + + + + + This event is raised whenever SQLite is rolling back a transaction. + + + + + Returns the instance. + + + + + The I/O file cache flushing behavior for the connection + + + + + Normal file flushing at critical sections of the code + + + + + Full file flushing after every write operation + + + + + 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 + rollbackTrans boolean value to true. + + The connection committing the transaction + Event arguments on the transaction + + + + Raised when data is inserted, updated and deleted on a given connection + + The connection committing the transaction + The event parameters which triggered the event + + + + Raised when a statement first begins executing on a given connection + + The connection executing the statement + Event arguments of the trace + + + + Raised between each backup step. + + + The source database connection. + + + The source database name. + + + The destination database connection. + + + The destination database name. + + + The number of pages copied with each step. + + + The number of pages remaining to be copied. + + + The total number of pages in the source database. + + + Set to true if the operation needs to be retried due to database + locking issues; otherwise, set to false. + + + True to continue with the backup process or false to halt the backup + process, rolling back any changes that have been made so far. + + + + + The data associated with a call into the authorizer. + + + + + The user-defined native data associated with this event. Currently, + this will always contain the value of . + + + + + The action code responsible for the current call into the authorizer. + + + + + 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. + + + + + 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 database name for the current call into the authorizer, 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 return code for the current call into the authorizer. + + + + + Constructs an instance of this class with default property values. + + + + + 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 + + + + + Set to true to abort the transaction and trigger a rollback + + + + + Passed during an Trace callback, these event arguments contain the UTF-8 rendering of the SQL statement text + + + + + 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 dictionary of connection pools, based on the normalized file + name of the SQLite database. + + + + + The default version number new pools will get. + + + + + The number of connections successfully opened from any pool. + This value is incremented by the Remove method. + + + + + The number of connections successfully closed from any pool. + This value is incremented by the Add method. + + + + + 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 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. + + + + + This pool version associated with the database connection + handles in this pool queue. + + + + + 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. + + + + + Properties of this class + + + + + Constructs a new instance of the class + + + Default constructor + + + + + Constructs a new instance of the class using the specified connection string. + + The connection string to parse + + + + Private initializer, which assigns the connection string and resets the builder + + The connection string to assign + + + + Helper function for retrieving values from the connectionstring + + The keyword to retrieve settings for + The resulting parameter value + Returns true if the value was found and returned + + + + Fallback method for MONO, which doesn't implement DbConnectionStringBuilder.GetProperties() + + The hashtable to fill with property descriptors + + + + Gets/Sets the default version of the SQLite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library. + + + + + Gets/Sets the synchronization mode (file flushing) of the connection string. Default is "Normal". + + + + + Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding. + + + + + Gets/Sets whether or not to use connection pooling. The default is "False" + + + + + Gets/Sets whethor not to store GUID's in binary format. The default is True + which saves space in the database. + + + + + Gets/Sets the filename to open on the connection string. + + + + + An alternate to the data source property + + + + + An alternate to the data source property that uses the SQLite URI syntax. + + + + + Gets/sets the default command timeout for newly-created commands. This is especially useful for + commands used internally such as inside a SQLiteTransaction, where setting the timeout is not possible. + + + + + Determines whether or not the connection will automatically participate + in the current distributed transaction (if one exists) + + + + + If set to true, will throw an exception if the database specified in the connection + string does not exist. If false, the database will be created automatically. + + + + + If enabled, uses the legacy 3.xx format for maximum compatibility, but results in larger + database sizes. + + + + + When enabled, the database will be opened for read-only access and writing will be disabled. + + + + + Gets/sets the database encryption password + + + + + Gets/sets the database encryption hexadecimal password + + + + + Gets/Sets the page size for the connection. + + + + + Gets/Sets the maximum number of pages the database may hold + + + + + Gets/Sets the cache size for the connection. + + + + + Gets/Sets the DateTime format for the connection. + + + + + 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 + .NET Framework compatibility purposes. + + + + + Determines how SQLite handles the transaction journal file. + + + + + Sets the default isolation level for transactions on the connection. + + + + + If enabled, use foreign key constraints + + + + + Gets/Sets the extra behavioral flags. + + + + + If enabled, apply the default connection settings to opened databases. + + + + + If enabled, attempt to resolve the provided data source file name to a + full path before opening. + + + + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite + understands. The DateTime extension to the spec is for internal use only. + + + + + Not used + + + + + All integers in SQLite default to Int64 + + + + + All floating point numbers in SQLite default to double + + + + + The default data type of SQLite is text + + + + + Typically blob types are only seen when returned from a function + + + + + Null types can be returned from functions + + + + + Used internally by this provider + + + + + Used internally by this provider + + + + + These are the event types associated with the + + delegate (and its corresponding event) and the + class. + + + + + Not used. + + + + + Not used. + + + + + The connection is being opened. + + + + + The connection string has been parsed. + + + + + The connection was opened. + + + + + The method was called on the + connection. + + + + + A transaction was created using the connection. + + + + + The connection was enlisted into a transaction. + + + + + 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. + + + + + The connection was 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. + + + + + Use the value of DateTime.Ticks. This value is not recommended and is not well supported with LINQ. + + + + + Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC DateTime values and + "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values). + + + + + The interval of time in days and fractions of a day since January 1, 4713 BC. + + + + + The whole number of seconds since the Unix epoch (January 1, 1970). + + + + + Any culture-independent string value that the .NET Framework can interpret as a valid DateTime. + + + + + Any string value that the .NET Framework can interpret as a valid DateTime using the current culture. + + + + + The default format for this provider. + + + + + 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. + + + + + The default mode, this causes SQLite to use the existing journaling mode for the database. + + + + + SQLite will create and destroy the journal file as-needed. + + + + + When this is set, SQLite will keep the journal file even after a transaction has completed. It's contents will be erased, + and the journal re-used as often as needed. If it is deleted, it will be recreated the next time it is needed. + + + + + This option disables the rollback journal entirely. Interrupted transactions or a program crash can cause database + corruption in this mode! + + + + + SQLite will truncate the journal file to zero-length instead of deleting it. + + + + + SQLite will store the journal in volatile RAM. This saves disk I/O but at the expense of database safety and integrity. + If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the + database file will very likely go corrupt. + + + + + SQLite uses a write-ahead log instead of a rollback journal to implement transactions. The WAL journaling mode is persistent; + after being set it stays in effect across multiple database connections and after closing and reopening the database. A database + in WAL journaling mode can only be accessed by SQLite version 3.7.0 or later. + + + + + Possible values for the "synchronous" database setting. This setting determines + how often the database engine calls the xSync method of the VFS. + + + + + Use the default "synchronous" database setting. Currently, this should be + the same as using the FULL mode. + + + + + The database engine continues without syncing as soon as it has handed + data off to the operating system. If the application running SQLite + crashes, the data will be safe, but the database might become corrupted + if the operating system crashes or the computer loses power before that + data has been written to the disk surface. + + + + + The database engine will still sync at the most critical moments, but + less often than in FULL mode. There is a very small (though non-zero) + chance that a power failure at just the wrong time could corrupt the + database in NORMAL mode. + + + + + The database engine will use the xSync method of the VFS to ensure that + all content is safely written to the disk surface prior to continuing. + This ensures that an operating system crash or power failure will not + corrupt the database. FULL synchronous is very safe, but it is also + slower. + + + + + The requested command execution type. This controls which method of the + object will be called. + + + + + Do nothing. No method will be called. + + + + + The command is not expected to return a result -OR- the result is not + needed. The or + method + will be called. + + + + + 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. + + + + + The command is expected to return result. + The or + method will + be called. + + + + + Use the default command execution type. Using this value is the same + as using the value. + + + + + The action code responsible for the current call into the authorizer. + + + + + No action is being performed. This value should not be used from + external code. + + + + + No longer used. + + + + + An index will be created. The action-specific arguments are the + index name and the table name. + + + + + + A table will be created. The action-specific arguments are the + table name and a null value. + + + + + A temporary index will be created. The action-specific arguments + are the index name and the table name. + + + + + A temporary table will be created. The action-specific arguments + are the table name and a null value. + + + + + A temporary trigger will be created. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be created. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be created. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be created. The action-specific arguments are the view + name and a null value. + + + + + A DELETE statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + An index will be dropped. The action-specific arguments are the + index name and the table name. + + + + + A table will be dropped. The action-specific arguments are the tables + name and a null value. + + + + + A temporary index will be dropped. The action-specific arguments are + the index name and the table name. + + + + + A temporary table will be dropped. The action-specific arguments are + the table name and a null value. + + + + + A temporary trigger will be dropped. The action-specific arguments + are the trigger name and the table name. + + + + + A temporary view will be dropped. The action-specific arguments are + the view name and a null value. + + + + + A trigger will be dropped. The action-specific arguments are the + trigger name and the table name. + + + + + A view will be dropped. The action-specific arguments are the view + name and a null value. + + + + + An INSERT statement will be executed. The action-specific arguments + are the table name and a null value. + + + + + A PRAGMA statement will be executed. The action-specific arguments + are the name of the PRAGMA and the new value or a null value. + + + + + 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 + + + + + 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 + + + + + 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 + + + + + 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 + + + + + Matches the version of the connection. + + + + + The "stub" (i.e. placeholder) base schema name to use when returning + column schema information. Matches the base schema name used by the + associated connection. + + + + + Internal constructor, initializes the datareader and sets up to begin executing statements + + The SQLiteCommand this data reader is for + The expected behavior of the data reader + + + + Dispose of all resources used by this datareader. + + + + + + Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified. + + + + + Throw an error if the datareader is closed + + + + + Throw an error if a row is not loaded + + + + + Enumerator support + + 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. + + + 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 + + + + Retrieves the column as a boolean value + + The index of the column to retrieve + bool + + + + Retrieves the column as a single byte value + + The index of the column to retrieve + byte + + + + Retrieves a column as an array of bytes (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the bytes into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of bytes written into the array + + To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned. + + + + + Returns the column as a single character + + The index of the column to retrieve + char + + + + Retrieves a column as an array of chars (blob) + + The index of the column to retrieve + The zero-based index of where to begin reading the data + The buffer to write the characters into + The zero-based index of where to begin writing into the array + The number of bytes to retrieve + The actual number of characters written into the array + + To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned. + + + + + Retrieves the name of the back-end datatype of the column + + The index of the column to retrieve + string + + + + Retrieve the column as a date/time value + + The index of the column to retrieve + DateTime + + + + Retrieve the column as a decimal value + + The index of the column to retrieve + decimal + + + + Returns the column as a double + + The index of the column to retrieve + double + + + + Returns the .NET type of a given column + + The index of the column to retrieve + Type + + + + Returns a column as a float value + + The index of the column to retrieve + float + + + + Returns the column as a Guid + + The index of the column to retrieve + Guid + + + + Returns the column as a short + + The index of the column to retrieve + Int16 + + + + Retrieves the column as an int + + The index of the column to retrieve + Int32 + + + + Retrieves the column as a long + + The index of the column to retrieve + Int64 + + + + Retrieves the name of the column + + The index of the column to retrieve + string + + + + Retrieves the i of a column, given its name + + The name of the column to retrieve + The int i of the column + + + + Schema information in SQLite is difficult to map into .NET conventions, so a lot of work must be done + to gather the necessary information so it can be represented in an ADO.NET manner. + + Returns a DataTable containing the schema information for the active SELECT statement being processed. + + + + Retrieves the column as a string + + The index of the column to retrieve + string + + + + Retrieves the column as an object corresponding to the underlying datatype of the column + + The index of the column to retrieve + object + + + + Retreives the values of multiple columns, up to the size of the supplied array + + The array to fill with values from the columns in the current resultset + The number of columns retrieved + + + + Returns a collection containing all the column names and values for the + current row of data in the current resultset, if any. If there is no + current row or no current resultset, an exception may be thrown. + + + The collection containing the column name and value information for the + current row of data in the current resultset or null if this information + cannot be obtained. + + + + + Returns True if the specified column is null + + The index of the column to retrieve + True or False + + + + Moves to the next resultset in multiple row-returning SQL command. + + 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. + + + + + 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 data reader containing the databse connection to query the flags from. + + + The connection flags value. + + + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + + The index of the column to retrieve + A SQLiteType structure + + + + Reads the next row from the resultset + + True if a new row was successfully loaded and is ready for processing + + + + Not implemented. Returns 0 + + + + + Returns the number of columns in the current resultset + + + + + Returns the number of visible fields in the current resultset + + + + + Returns True if the resultset has rows that can be fetched + + + + + Returns True if the data reader is closed + + + + + Retrieve the count of records affected by an update/insert command. Only valid once the data reader is closed! + + + + + Indexer to retrieve data from a column given its name + + The name of the column to retrieve data for + The value contained in the column + + + + Indexer to retrieve data from a column given its i + + The index of the column to retrieve + The value contained in the column + + + + SQLite exception class. + + + + + Private constructor for use with serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Public constructor for generating a SQLite exception given the error + code and message. + + + The SQLite return code to report. + + + Message text to go along with the return code message text. + + + + + Public constructor that uses the base class constructor for the error + message. + + Error message text. + + + + Public constructor that uses the default base class constructor. + + + + + Public constructor that uses the base class constructor for the error + message and inner exception. + + Error message text. + The original (inner) exception. + + + + Adds extra information to the serialized object data specific to this + class type. This is only used for serialization. + + + Holds the serialized object data about the exception being thrown. + + + Contains contextual information about the source or destination. + + + + + Returns the error message for the specified SQLite return code. + + The SQLite return code. + The error message or null if it cannot be found. + + + + Returns the composite error message based on the SQLite return code + and the optional detailed error message. + + The SQLite return code. + Optional detailed error message. + Error message text for the return code. + + + + Gets the associated SQLite result code for this exception as a + . This property returns the same + underlying value as the property. + + + + + Gets the associated SQLite return code for this exception as an + . For desktop versions of the .NET Framework, + this property overrides the property of the same name within the + + class. This property returns the same underlying value as the + property. + + + + + SQLite error codes. Actually, this enumeration represents a return code, + which may also indicate success in one of several ways (e.g. SQLITE_OK, + SQLITE_ROW, and SQLITE_DONE). Therefore, the name of this enumeration is + something of a misnomer. + + + + + The error code is unknown. This error code + is only used by the managed wrapper itself. + + + + + Successful result + + + + + SQL error or missing database + + + + + Internal logic error in SQLite + + + + + Access permission denied + + + + + Callback routine requested an abort + + + + + The database file is locked + + + + + A table in the database is locked + + + + + A malloc() failed + + + + + Attempt to write a readonly database + + + + + Operation terminated by sqlite3_interrupt() + + + + + Some kind of disk I/O error occurred + + + + + The database disk image is malformed + + + + + Unknown opcode in sqlite3_file_control() + + + + + Insertion failed because database is full + + + + + Unable to open the database file + + + + + Database lock protocol error + + + + + Database is empty + + + + + The database schema changed + + + + + String or BLOB exceeds size limit + + + + + Abort due to constraint violation + + + + + Data type mismatch + + + + + Library used incorrectly + + + + + Uses OS features not supported on host + + + + + Authorization denied + + + + + Auxiliary database format error + + + + + 2nd parameter to sqlite3_bind out of range + + + + + File opened that is not a database file + + + + + Notifications from sqlite3_log() + + + + + Warnings from sqlite3_log() + + + + + sqlite3_step() has another row ready + + + + + sqlite3_step() has finished executing + + + + + Used to mask off extended result codes + + + + + SQLite implementation of . + + + SQLite implementation of . + + + + + Constructs a new instance. + + + + + Static instance member which returns an instanced class. + + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Creates and returns a new object. + + The new object. + + + + Will provide a object in .NET 3.5. + + The class or interface type to query for. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. This event is provided for backward compatibility only. + New code should use the class instead. + + + + + 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. + + 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 base connection this function is attached to + + + + + Internal array used to keep track of aggregate function context data + + + + + The connection flags associated with this object (this should be the + same value as the flags associated with the parent connection object). + + + + + Holds a reference to the callback function for user functions + + + + + Holds a reference to the callbakc function for stepping in an aggregate function + + + + + Holds a reference to the callback function for finalizing an aggregate function + + + + + Holds a reference to the callback function for collation sequences + + + + + Current context of the current callback. Only valid during a callback + + + + + This static list contains all the user-defined functions declared using the proper attributes. + + + + + 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 + someone closes the connection while a DataReader is open. + + + + + Placeholder for a user-defined disposal routine + + True if the object is being disposed explicitly + + + + Scalar functions override this method to do their magic. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The arguments for the command to process + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + Aggregate functions override this method to do their magic. + + + Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible. + + The arguments for the command to process + The 1-based step number. This is incrememted each time the step method is called. + A placeholder for implementers to store contextual data pertaining to the current context. + + + + Aggregate functions override this method to finish their aggregate processing. + + + If you implemented your aggregate function properly, + you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have + all the information you need in there to figure out what to return. + NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will + be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value + if that is the case. + + Your own assigned contextData, provided for you so you can return your final results. + You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or + you may return an Exception-derived class if you wish to return an error to SQLite. Do not actually throw the error, + just return it! + + + + + User-defined collation sequences override this method to provide a custom string sorting algorithm. + + The first string to compare + The second strnig to compare + 1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2 + + + + Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to. + + + Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available + to force them into a certain type. Therefore the only types you will ever see as parameters are + DBNull.Value, Int64, Double, String or byte[] array. + + The number of arguments + A pointer to the array of arguments + An object array of the arguments once they've been converted to .NET values + + + + Takes the return value from Invoke() and Final() and figures out how to return it to SQLite's context. + + The context the return value applies to + The parameter to return to SQLite + + + + Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method. + WARNING: Must not throw exceptions. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function. + WARNING: Must not throw exceptions. + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. Returns 0 if an exception is caught. + + + + The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method. + WARNING: Must not throw exceptions. + + + This function takes care of doing the lookups and getting the important information put together to call the Step() function. + That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so + binary searches can be done to find the data. + + A raw context pointer + Number of arguments passed in + A pointer to the array of arguments + + + + An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method. + WARNING: Must not throw exceptions. + + A raw context pointer + + + + Using reflection, enumerate all assemblies in the current appdomain looking for classes that + have a SQLiteFunctionAttribute attribute, and registering them accordingly. + + + + + Manual method of registering a function. The type must still have the SQLiteFunctionAttributes in order to work + properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported. + + The type of the function to register + + + + Called by SQLiteBase derived classes, this function binds all user-defined functions to a connection. + It is done this way so that all user-defined functions will access the database using the same encoding scheme + as the connection (UTF-8 or UTF-16). + + + The wrapper functions that interop with SQLite will create a unique cookie value, which internally is a pointer to + all the wrapped callback functions. The interop function uses it to map CDecl callbacks to StdCall callbacks. + + The base object on which the functions are to bind + The flags associated with the parent connection object + 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. + + + + + Returns a reference to the underlying connection's SQLiteConvert class, which can be used to convert + strings and DateTime's into the current connection's encoding schema. + + + + + Extends SQLiteFunction and allows an inherited class to obtain the collating sequence associated with a function call. + + + User-defined functions can call the GetCollationSequence() method in this class and use it to compare strings and char arrays. + + + + + Obtains the collating sequence in effect for the given function. + + + + + + The type of user-defined function to declare + + + + + Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc. + + + + + Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data. + Examples include SUM(), COUNT(), AVG(), etc. + + + + + Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is + sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting + in a user-defined manner. + + + + + An internal callback delegate declaration. + + 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. + + + + An internal final callback delegate declaration. + + Raw context pointer for the user function + + + + Internal callback delegate for implementing collation sequences + + Not used + Length of the string pv1 + Pointer to the first string to compare + Length of the string pv2 + Pointer to the second string to compare + Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater + than the second. + + + + The type of collating sequence + + + + + The built-in BINARY collating sequence + + + + + The built-in NOCASE collating sequence + + + + + The built-in REVERSE collating sequence + + + + + A custom user-defined collating sequence + + + + + The encoding type the collation sequence uses + + + + + The collation sequence is UTF8 + + + + + The collation sequence is UTF16 little-endian + + + + + The collation sequence is UTF16 big-endian + + + + + A struct describing the collating sequence a function is executing in + + + + + The name of the collating sequence + + + + + The type of collating sequence + + + + + The text encoding of the collation sequence + + + + + Context of the function that requested the collating sequence + + + + + Calls the base collating sequence to compare two strings + + The first string to compare + The second string to compare + -1 if s1 is less than s2, 0 if s1 is equal to s2, and 1 if s1 is greater than s2 + + + + Calls the base collating sequence to compare two character arrays + + The first array to compare + The second array to compare + -1 if c1 is less than c2, 0 if c1 is equal to c2, and 1 if c1 is greater than c2 + + + + A simple custom attribute to enable us to easily find user-defined functions in + the loaded assemblies and initialize them in SQLite as connections are made. + + + + + 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. + + + + + The number of arguments this function expects. -1 if the number of arguments is variable. + + + + + 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. + + Providing key information for a given statement is non-trivial :( + + + + + + This function does all the nasty work at determining what keys need to be returned for + a given statement. + + + + + + + + Make sure all the subqueries are open and ready and sync'd with the current rowid + of the table they're supporting + + + + + Release any readers on any subqueries + + + + + Append all the columns we've added to the original query to the schema + + + + + + How many additional columns of keyinfo we're holding + + + + + Used to support CommandBehavior.KeyInfo + + + + + A single sub-query for a given table/database. + + + + + Event data for logging event handlers. + + + + + The error code. The type of this object value should be + or . + + + + + SQL statement text as the statement first begins executing + + + + + Extra data associated with this event, if any. + + + + + Constructs the object. + + Should be null. + + The error code. The type of this object value should be + or . + + The error message, if any. + The extra data, if any. + + + + Raised when a log event occurs. + + The current connection + Event arguments of the trace + + + + Manages the SQLite custom logging functionality and the associated + callback for the whole process. + + + + + Object used to synchronize access to the static instance data + for this class. + + + + + Member variable to store the AppDomain.DomainUnload event handler. + + + + + The default log event handler. + + + + + The log callback passed to native SQLite engine. This must live + as long as the SQLite library has a pointer to it. + + + + + The base SQLite object to interop with. + + + + + This will be non-zero if logging is currently enabled. + + + + + Initializes the SQLite logging facilities. + + + + + Handles the AppDomain being unloaded. + + Should be null. + The data associated with this event. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The SQLite error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + The integer error code. + The message to be logged. + + + + Log a message to all the registered log event handlers without going + through the SQLite library. + + + The error code. The type of this object value should be + System.Int32 or SQLiteErrorCode. + + The message to be logged. + + + + Creates and initializes the default log event handler. + + + + + Adds the default log event handler to the list of handlers. + + + + + Removes the default log event handler from the list of handlers. + + + + + Internal proxy function that calls any registered application log + event handlers. + + WARNING: This method is used more-or-less directly by native code, + do not modify its type signature. + + + The extra data associated with this message, if any. + + + The error code associated with this message. + + + The message string to be logged. + + + + + Default logger. Currently, uses the Trace class (i.e. sends events + to the current trace listeners, if any). + + Should be null. + The data associated with this event. + + + + Member variable to store the application log handler to call. + + + + + This event is raised whenever SQLite raises a logging event. + Note that this should be set as one of the first things in the + application. + + + + + If this property is true, logging is enabled; otherwise, logging is + disabled. When logging is disabled, no logging events will fire. + + + + + MetaDataCollections specific to SQLite + + + + + Returns a list of databases attached to the connection + + + + + Returns column information for the specified table + + + + + Returns index information for the optionally-specified table + + + + + Returns base columns for the given index + + + + + Returns the tables in the given catalog + + + + + Returns user-defined views in the given catalog + + + + + Returns underlying column information on the given view + + + + + Returns foreign key information for the given catalog + + + + + Returns the triggers on the database + + + + + SQLite implementation of DbParameter. + + + + + The data type of the parameter + + + + + The version information for mapping the parameter + + + + + The value of the data in the parameter + + + + + The source column for the parameter + + + + + The column name + + + + + The data size, unused by SQLite + + + + + Default constructor + + + + + Constructs a named parameter given the specified parameter name + + The parameter name + + + + Constructs a named parameter given the specified parameter name and initial value + + The parameter name + The initial value of the parameter + + + + Constructs a named parameter of the specified type + + The parameter name + The datatype of the parameter + + + + Constructs a named parameter of the specified type and source column reference + + The parameter name + The data type + The source column + + + + Constructs a named parameter of the specified type, source column and row version + + The parameter name + The data type + The source column + The row version information + + + + Constructs an unnamed parameter of the specified data type + + The datatype of the parameter + + + + Constructs an unnamed parameter of the specified data type and sets the initial value + + The datatype of the parameter + The initial value of the parameter + + + + Constructs an unnamed parameter of the specified data type and source column + + The datatype of the parameter + The source column + + + + Constructs an unnamed parameter of the specified data type, source column and row version + + The data type + The source column + The row version information + + + + Constructs a named parameter of the specified type and size + + The parameter name + The data type + The size of the parameter + + + + Constructs a named parameter of the specified type, size and source column + + The name of the parameter + The data type + The size of the parameter + The source column + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + The source column + The row version information + + + + Constructs a named parameter of the specified type, size, source column and row version + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + Ignored + The source column + The row version information + The initial value to assign the parameter + + + + Constructs a named parameter, yet another flavor + + The name of the parameter + The data type + The size of the parameter + Only input parameters are supported in SQLite + Ignored + Ignored + The source column + The row version information + Whether or not this parameter is for comparing NULL's + The intial value to assign the parameter + + + + Constructs an unnamed parameter of the specified type and size + + The data type + The size of the parameter + + + + Constructs an unnamed parameter of the specified type, size, and source column + + The data type + The size of the parameter + The source column + + + + Constructs an unnamed parameter of the specified type, size, source column and row version + + The data type + The size of the parameter + The source column + The row version information + + + + Resets the DbType of the parameter so it can be inferred from the value + + + + + Clones a parameter + + A new, unassociated SQLiteParameter + + + + Whether or not the parameter can contain a null value + + + + + Returns the datatype of the parameter + + + + + Supports only input parameters + + + + + Returns the parameter name + + + + + Returns the size of the parameter + + + + + Gets/sets the source column + + + + + Used by DbCommandBuilder to determine the mapping for nullable fields + + + + + Gets and sets the row version + + + + + Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given. + + + + + SQLite implementation of DbParameterCollection. + + + + + The underlying command to which this collection belongs + + + + + The internal array of parameters in this collection + + + + + Determines whether or not all parameters have been bound to their statement(s) + + + + + Initializes the collection + + The command to which the collection belongs + + + + Retrieves an enumerator for the collection + + An enumerator for the underlying array + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + The source column + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + The size of the value + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter name + The data type + A SQLiteParameter object + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a parameter to the collection + + The parameter to add + A zero-based index of where the parameter is located in the array + + + + Adds a named/unnamed parameter and its value to the parameter collection. + + Name of the parameter, or null to indicate an unnamed parameter + The initial value of the parameter + Returns the SQLiteParameter object created during the call. + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Adds an array of parameters to the collection + + The array of parameters to add + + + + Clears the array and resets the collection + + + + + Determines if the named parameter exists in the collection + + The name of the parameter to check + True if the parameter is in the collection + + + + Determines if the parameter exists in the collection + + The SQLiteParameter to check + True if the parameter is in the collection + + + + Not implemented + + + + + + + Retrieve a parameter by name from the collection + + The name of the parameter to fetch + A DbParameter object + + + + Retrieves a parameter by its index in the collection + + The index of the parameter to retrieve + A DbParameter object + + + + Returns the index of a parameter given its name + + The name of the parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Returns the index of a parameter + + The parameter to find + -1 if not found, otherwise a zero-based index of the parameter + + + + Inserts a parameter into the array at the specified location + + The zero-based index to insert the parameter at + The parameter to insert + + + + Removes a parameter from the collection + + The parameter to remove + + + + Removes a parameter from the collection given its name + + The name of the parameter to remove + + + + Removes a parameter from the collection given its index + + The zero-based parameter index to remove + + + + Re-assign the named parameter to a new parameter object + + The name of the parameter to replace + The new parameter + + + + Re-assign a parameter at the specified index + + The zero-based index of the parameter to replace + The new parameter + + + + Un-binds all parameters from their statements + + + + + This function attempts to map all parameters in the collection to all statements in a Command. + Since named parameters may span multiple statements, this function makes sure all statements are bound + to the same named parameter. Unnamed parameters are bound in sequence. + + + + + Returns false + + + + + Returns false + + + + + Returns false + + + + + Returns null + + + + + Returns a count of parameters in the collection + + + + + Overloaded to specialize the return value of the default indexer + + Name of the parameter to get/set + The specified named SQLite parameter + + + + Overloaded to specialize the return value of the default indexer + + The index of the parameter to get/set + The specified SQLite parameter + + + + Represents a single SQL statement in SQLite. + + + + + The underlying SQLite object this statement is bound to + + + + + The command text of this SQL statement + + + + + The actual statement pointer + + + + + An index from which unnamed parameters begin + + + + + Names of the parameters as SQLite understands them to be + + + + + Parameters for this statement + + + + + Command this statement belongs to (if any) + + + + + The flags associated with the parent connection object. + + + + + Initializes the statement and attempts to get all information about parameters in the statement + + The base SQLite object + The flags associated with the parent connection object + The statement + The command text for this statement + The previous command in a multi-statement command + + + + Disposes and finalizes the statement + + + + + If the underlying database connection is open, fetches the number of changed rows + resulting from the most recent query; otherwise, does nothing. + + + The number of changes when true is returned. + Undefined if false is returned. + + Non-zero if the number of changed rows was fetched. + + + + Called by SQLiteParameterCollection, this function determines if the specified parameter name belongs to + this statement, and if so, keeps a reference to the parameter so it can be bound later. + + The parameter name to map + The parameter to assign it + + + + 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 + + The index of the parameter to bind + The parameter we're binding + + + + SQLite implementation of DbTransaction. + + + + + The connection to which this transaction is bound + + + + + Constructs the transaction object, binding it to the supplied connection + + The connection to open a transaction on + TRUE to defer the writelock, or FALSE to lock immediately + + + + Disposes the transaction. If it is currently active, any changes are rolled back. + + + + + Commits the current transaction. + + + + + Rolls back the active transaction. + + + + + Returns the underlying connection to which this transaction applies. + + + + + Forwards to the local Connection property + + + + + Gets the isolation level of the transaction. SQLite only supports Serializable transactions. + + + + + 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]";. + + + + + The file extension used for dynamic link libraries. + + + + + The file extension used for the XML configuration file. + + + + + This is the name of the XML configuration file specific to the + System.Data.SQLite assembly. + + + + + This lock is used to protect the static _SQLiteNativeModuleFileName, + _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields. + + + + + 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. + + + + + 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. + + + + + The name of the environment variable containing the processor + architecture of the current process. + + + + + This is the P/Invoke method that wraps the native Win32 LoadLibrary + function. See the MSDN documentation for full details on what it + does. + + + The name of the executable library. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + 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. + + + + + 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). + + + + + Queries and returns the base directory of the current application + domain. + + + The base directory for the current application domain -OR- null if it + cannot be determined. + + + + + Determines if the dynamic link library file name requires a suffix + and adds it if necessary. + + + The original dynamic link library file name to inspect. + + + The dynamic link library file name, possibly modified to include an + extension. + + + + + Queries and returns the processor architecture of the current + process. + + + The processor architecture of the current process -OR- null if it + cannot be determined. + + + + + Given the processor architecture, returns the name of the platform. + + + The processor architecture to be translated to a platform name. + + + The platform name for the specified processor architecture -OR- null + 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. + + + The requested processor architecture, null for default (the + 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. + + + Non-zero if the native module was loaded successfully; otherwise, + zero. + + + + + 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. + + +
+
diff --git a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config index e76ebbf6..6bcf3b02 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config +++ b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/Web.Config @@ -92,7 +92,7 @@ - + diff --git a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 index e76ebbf6..6bcf3b02 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 +++ b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Data/Spring/Conversation/WebConversationStateTest/web.config.net-2.0 @@ -92,7 +92,7 @@ - + diff --git a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Spring.Web.Conversation.NHibernate33.Tests.build b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Spring.Web.Conversation.NHibernate33.Tests.build index 076e249b..e1596f1a 100644 --- a/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Spring.Web.Conversation.NHibernate33.Tests.build +++ b/test/Spring/Spring.Web.Conversation.NHibernate33.Tests/Spring.Web.Conversation.NHibernate33.Tests.build @@ -95,25 +95,24 @@
- - - - + + - + - + - - - - - - -