From 84834015a61d768e1dca7107d8e9caac7c0c064d Mon Sep 17 00:00:00 2001 From: SoulStar Date: Wed, 31 Jul 2024 09:15:09 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E4=BF=AE=E6=94=B9=E4=B8=BASqlite?= =?UTF-8?q?=20-=20=E5=88=9D=E6=AD=A5=E5=8F=AF=E7=94=A8=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8A=9F=E8=83=BD=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dll/System.Data.SQLite.dll | Bin 0 -> 309760 bytes Dll/System.Data.SQLite.xml | 16380 ++++++++++++++++ .../HighWayIot.Repository.csproj | 36 +- HighWayIot.Repository/SqlSugarHelper.cs | 54 +- HighWayIot.Repository/app.config | 30 +- HighWayIot.Repository/packages.config | 10 - .../service/Impl/BaseContentServiceImpl.cs | 2 +- .../service/Impl/BaseHeartbeatServiceImpl.cs | 2 +- .../service/Impl/BaseStateServiceImpl.cs | 2 +- HighWayIot.TouchSocket/app.config | 2 +- HighWayIot/App.config | 2 +- RFIDSocket/App.config | 25 +- RFIDSocket/Program.cs | 3 + RFIDSocket/RFIDSocket.csproj | 4 + 14 files changed, 16427 insertions(+), 125 deletions(-) create mode 100644 Dll/System.Data.SQLite.dll create mode 100644 Dll/System.Data.SQLite.xml diff --git a/Dll/System.Data.SQLite.dll b/Dll/System.Data.SQLite.dll new file mode 100644 index 0000000000000000000000000000000000000000..052d3f9c8bd0f8caa62a952b61679790ed981dc9 GIT binary patch literal 309760 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�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
S!2=#H8w)x#7Ighs&~wLvUNjc;8Xpu;_bw0S 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%0A^OU`Ia{Ou(12^D=2uJiZ@8{k||CoaK6fp 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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 fallback default database type when one cannot be obtained from an + existing connection instance. + + + + + The format string for DateTime values when using the InvariantCulture or CurrentCulture formats. + + + + + The fallback default database type name when one cannot be obtained from + an existing connection instance. + + + + + The value for the Unix epoch (e.g. January 1, 1970 at midnight, in UTC). + + + + + The value of the OLE Automation epoch represented as a Julian day. This + field cannot be removed as the test suite relies upon it. + + + + + This is the minimum Julian Day value supported by this library + (148731163200000). + + + + + This is the maximum Julian Day value supported by this library + (464269060799000). + + + + + 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) + + + + Checks if the specified is within the + supported range for a Julian Day value. + + + The Julian Day value to check. + + + Non-zero if the specified Julian Day value is in the supported + range; otherwise, zero. + + + + + Converts a Julian Day value from a to an + . + + + The Julian Day value to convert. + + + The resulting Julian Day value. + + + + + Converts a Julian Day value from an to a + . + + + The Julian Day value to convert. + + + The resulting Julian Day value. + + + + + Converts a Julian Day value to a . + This method was translated from the "computeYMD" function in the + "date.c" file belonging to the SQLite core library. + + + The Julian Day value to convert. + + + The value to return in the event that the + Julian Day is out of the supported range. If this value is null, + an exception will be thrown instead. + + + A value that contains the year, month, and + day values that are closest to the specified Julian Day value. + + + + + Converts a Julian Day value to a . + This method was translated from the "computeHMS" function in the + "date.c" file belonging to the SQLite core library. + + + The Julian Day value to convert. + + + The value to return in the event that the + Julian Day value is out of the supported range. If this value is + null, an exception will be thrown instead. + + + A value that contains the hour, minute, and + second, and millisecond values that are closest to the specified + Julian Day value. + + + + + Converts a to a Julian Day value. + This method was translated from the "computeJD" function in + the "date.c" file belonging to the SQLite core library. + Since the range of Julian Day values supported by this method + includes all possible (valid) values of a + value, it should be extremely difficult for this method to + raise an exception or return an undefined result. + + + The value to convert. This value + will be within the range of + (00:00:00.0000000, January 1, 0001) to + (23:59:59.9999999, December + 31, 9999). + + + The nearest Julian Day value corresponding to the specified + value. + + + + + 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. + + + + Converts a string into a DateTime, using the DateTimeFormat, DateTimeKind, + and DateTimeFormatString specified for the connection when it was opened. + + The DateTime value to convert + The SQLiteDateFormats to use. + The DateTimeKind to use. + The DateTime format string to use. + Either a string containing the long integer number of 100-nanosecond units since System.DateTime.MinValue, a + Julian day double, an integer number of seconds since the Unix epoch, a culture-independent formatted date and time + string, a formatted date and time string in the current culture, or an ISO8601-format date/time string. + + + + 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. + + + + + Attempts to convert an arbitrary object to the Boolean data type. + Null object values are converted to false. Throws an exception + upon failure. + + + The object value to convert. + + + The format provider to use. + + + If non-zero, a string value will be converted using the + + method; otherwise, the + method will be used. + + + The converted boolean value. + + + + + Convert a value to true or false. + + A string or number representing true or false + + + + + Attempts to convert a into a . + + + The to convert, cannot be null. + + + The converted value. + + + The supported strings are "yes", "no", "y", "n", "on", "off", "0", "1", + as well as any prefix of the strings + and . All strings are treated in a + case-insensitive manner. + + + + + 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 default database type name to be used when a + per-connection value is not available. + + + The connection context for type mappings, if any. + + + The default database type name to use. + + + + + If applicable, issues a trace log message warning about falling back to + the default database type name. + + + The database value type. + + + The flags associated with the parent connection object. + + + The textual name of the database type. + + + + + If applicable, issues a trace log message warning about falling back to + the default database value type. + + + The textual name of the database type. + + + The flags associated with the parent connection object. + + + The database value type. + + + + + For a given database value type, return the "closest-match" textual database type name. + + The connection context for custom type mappings, if any. + The database value type. + The flags associated with the parent connection object. + The type name or an empty string if it cannot be determined. + + + + Convert a DbType to a Type + + 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. + + + + + Determines if a database type is considered to be a string. + + + The database type to check. + + + Non-zero if the database type is considered to be a string, zero + otherwise. + + + + + Determines and returns the runtime configuration setting string that + should be used in place of the specified object value. + + + The object value to convert to a string. + + + Either the string to use in place of the object value -OR- null if it + cannot be determined. + + + + + Determines the default value to be used when a + per-connection value is not available. + + + The connection context for type mappings, if any. + + + The default value to use. + + + + + Converts the object value, which is assumed to have originated + from a , to a string value. + + + The value to be converted to a string. + + + A null value will be returned if the original value is null -OR- + the original value is . Otherwise, + the original value will be converted to a string, using its + (possibly overridden) method and + then returned. + + + + + Determines if the specified textual value appears to be a + value. + + + The textual value to inspect. + + + Non-zero if the text looks like a value, + zero otherwise. + + + + + Determines if the specified textual value appears to be an + value. + + + The textual value to inspect. + + + Non-zero if the text looks like an value, + zero otherwise. + + + + + Determines if the specified textual value appears to be a + value. + + + The textual value to inspect. + + + Non-zero if the text looks like a value, + zero otherwise. + + + + + Determines if the specified textual value appears to be a + value. + + + The object instance configured with + the chosen format. + + + The textual value to inspect. + + + Non-zero if the text looks like a in the + configured format, zero otherwise. + + + + + For a given textual database type name, return the "closest-match" database type. + This method is called during query result processing; therefore, its performance + is critical. + + The connection context for custom type mappings, if any. + The textual name of the database type to match. + The flags associated with the parent connection object. + The .NET DBType the text evaluates to. + + + + The error code used for logging exceptions caught in user-provided + code. + + + + + Returns non-zero if this connection to the database is read-only. + + + + + 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. + + + + + Returns the fully qualified path and file name for the currently open + database, if any. + + + The name of the attached database to query. + + + The fully qualified path and file name for the currently open database, + if any. + + + + + 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 name of the VFS to use -OR- null to use the default VFS. + 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. + + + + Returns non-zero if the specified statement is read-only in nature. + + The statement to check. + True if the outer query is read-only. + + + + 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 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. + + + + + This function unbinds a user-defined function from the connection. + + + The object instance containing + the metadata for the function to be unbound. + + + The flags associated with the parent connection object. + + Non-zero if the function was unbound. + + + + 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 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 the logical list of functions associated with 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. + + + + + The opaque pointer returned to us by the sqlite provider + + + + + The user-defined functions registered on this connection + + + + + This is the name of the native library file that contains the + "vtshim" extension [wrapper]. + + + + + This is the flag indicate whether the native library file that + contains the "vtshim" extension must be dynamically loaded by + this class prior to use. + + + + + This is the name of the native entry point for the "vtshim" + extension [wrapper]. + + + + + 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. + + + + + Returns the number of times the method has been + called. + + + + + This method determines whether or not a + with a return code of should + be thrown after making a call into the SQLite core library. + + + Non-zero if a to be thrown. This method + will only return non-zero if the method was called + one or more times during a call into the SQLite core library (e.g. when + the sqlite3_prepare*() or sqlite3_step() APIs are used). + + + + + Resets the value of the field. + + + + + 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. + + + + + This function binds a user-defined function to the connection. + + + The object instance containing + the metadata for the function to be unbound. + + + The flags associated with the parent connection object. + + Non-zero if the function was unbound and removed. + + + + 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. + + + + + Returns the fully qualified path and file name for the currently open + database, if any. + + + The name of the attached database to query. + + + The fully qualified path and file name for the currently open database, + if any. + + + + + Has the sqlite3_errstr() core library API been checked for yet? + If so, is it present? + + + + + 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. + + + + Has the sqlite3_stmt_readonly() core library API been checked for yet? + If so, is it present? + + + + + Returns non-zero if the specified statement is read-only in nature. + + The statement to check. + True if the outer query is read-only. + + + + This field is used to keep track of whether or not the + "SQLite_ForceLogPrepare" environment variable has been queried. If so, + it will only be non-zero if the environment variable was present. + + + + + Determines if all calls to prepare a SQL query will be logged, + regardless of the flags for the associated connection. + + + Non-zero to log all calls to prepare a SQL query. + + + + + Determines the file name of the native library containing the native + "vtshim" extension -AND- whether it should be dynamically loaded by + this class. + + + This output parameter will be set to non-zero if the returned native + library file name should be dynamically loaded prior to attempting + the creation of native disposable extension modules. + + + The file name of the native library containing the native "vtshim" + extension -OR- null if it cannot be determined. + + + + + 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. + + + + + Returns the logical list of functions associated with this connection. + + + + + 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. + + + + + + + + + + Creates temporary tables on the connection so schema information can be queried. + + + The connection upon which to build the schema tables. + + + + + The extra behavioral flags that can be applied to a connection. + + + + + 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 the property is used, it + should return non-zero if there were ever any rows in the associated + result sets. + + + + + Enable "strict" transaction enlistment semantics. Setting this flag + will cause an exception to be thrown if an attempt is made to enlist + in a transaction with an unavailable or unsupported isolation level. + In the future, more extensive checks may be enabled by this flag as + well. + + + + + Enable mapping of unsupported transaction isolation levels to the + closest supported transaction isolation level. + + + + + When returning column values, attempt to detect the affinity of + textual values by checking if they fully conform to those of the + , + , + , + or types. + + + + + When returning column values, attempt to detect the type of + string values by checking if they fully conform to those of + the , + , + , + or types. + + + + + Skip querying runtime configuration settings for use by the + class, including the default + value and default database type name. + NOTE: If the + and/or + properties are not set explicitly nor set via their connection + string properties and repeated calls to determine these runtime + configuration settings are seen to be a problem, this flag + should be set. + + + + + When binding parameter values with the + type, take their into account as + well as that of the associated . + + + + + If an exception is caught when raising the + event, the transaction + should be rolled back. If this is not specified, the transaction + will continue the commit process instead. + + + + + If an exception is caught when raising the + event, the action should + should be denied. If this is not specified, the action will be + allowed instead. + + + + + If an exception is caught when raising the + event, the operation + should be interrupted. If this is not specified, the operation + will simply continue. + + + + + Attempt to unbind all functions provided by other managed assemblies + when closing the connection. + + + + + When returning column values as a , skip + verifying their affinity. + + + + + Enable using per-connection mappings between type names and + values. Also see the + , + , and + methods. + + + + + Enable using per-connection mappings between type names and + values. Also see the + , + , and + methods. + + + + + If the database type name has not been explicitly set for the + parameter specified, fallback to using the parameter name. + + + + + If the database type name has not been explicitly set for the + parameter specified, fallback to using the database type name + associated with the value. + + + + + 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. + + + + + Enables use of all per-connection value handling callbacks. + + + + + Enables use of all applicable + properties as fallbacks for the database type name. + + + + + Enable all logging. + + + + + The default extra flags for new connections. + + + + + The default extra flags for new connections with all logging enabled. + + + + + SQLite implementation of DbCommand. + + + + + The default connection string to be used when creating a temporary + connection to execute a command via the static + or + + methods. + + + + + The command text this command is based on + + + + + 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 + + + + + + Verifies that all SQL queries associated with the current command text + can be successfully compiled. A will be + raised if any errors occur. + + + + + 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 unless a data + reader is created, 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. + + + + This method resets all the prepared statements held by this instance + back to their initial states, ready to be re-executed. + + + + + This method resets all the prepared statements held by this instance + back to their initial states, ready to be re-executed. + + + Non-zero if the parameter bindings should be cleared as well. + + + If this is zero, a may be thrown for + any unsuccessful return codes from the native library; otherwise, a + will only be thrown if the connection + or its state is invalid. + + + + + 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. + + + + + + Cleans up resources (native and managed) associated with the current instance. + + + Zero when being disposed via garbage collection; otherwise, non-zero. + + + + + 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 + + + + + This class represents a single value to be returned + from the class via + its , + , + , + , + , + , + , + , + , + , + , + , + , + , or + method. If the value of the + associated public field of this class is null upon returning from the + callback, the null value will only be used if the return type for the + method called is not a value type. + If the value to be returned from the + method is unsuitable (e.g. null with a value type), an exception will + be thrown. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method -OR- null to + indicate an error. + + + + + The value to be returned from the + method. + + + + + The value to be returned from the + method. + + + + + This class represents the parameters that are provided + to the and + methods, with + the exception of the column index (provided separately). + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Constructs an instance of this class to pass into a user-defined + callback associated with the + method. + + + The value that was originally specified for the "dataOffset" + parameter to the or + methods. + + + The value that was originally specified for the "buffer" + parameter to the + method. + + + The value that was originally specified for the "bufferOffset" + parameter to the or + methods. + + + The value that was originally specified for the "length" + parameter to the or + methods. + + + + + Constructs an instance of this class to pass into a user-defined + callback associated with the + method. + + + The value that was originally specified for the "dataOffset" + parameter to the or + methods. + + + The value that was originally specified for the "buffer" + parameter to the + method. + + + The value that was originally specified for the "bufferOffset" + parameter to the or + methods. + + + The value that was originally specified for the "length" + parameter to the or + methods. + + + + + The value that was originally specified for the "dataOffset" + parameter to the or + methods. + + + + + The value that was originally specified for the "buffer" + parameter to the + method. + + + + + The value that was originally specified for the "buffer" + parameter to the + method. + + + + + The value that was originally specified for the "bufferOffset" + parameter to the or + methods. + + + + + The value that was originally specified for the "length" + parameter to the or + methods. + + + + + This class represents the parameters and return values for the + , + , + , + , + , + , + , + , + , + , + , + , + , + , and + methods. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Constructs a new instance of this class. Depending on the method + being called, the and/or + parameters may be null. + + + The name of the method that was + responsible for invoking this callback. + + + If the or + method is being called, + this object will contain the array related parameters for that + method. + + + This may be used by the callback to set the return value for the + called method. + + + + + The name of the method that was + responsible for invoking this callback. + + + + + If the or + method is being called, + this object will contain the array related parameters for that + method. + + + + + This may be used by the callback to set the return value for the + called method. + + + + + This represents a method that will be called in response to a request to + bind a parameter to a command. If an exception is thrown, it will cause + the parameter binding operation to fail -AND- it will continue to unwind + the call stack. + + + The instance in use. + + + The instance in use. + + + The flags associated with the instance + in use. + + + The instance being bound to the command. + + + The database type name associated with this callback. + + + The ordinal of the parameter being bound to the command. + + + The data originally used when registering this callback. + + + Non-zero if the default handling for the parameter binding call should + be skipped (i.e. the parameter should not be bound at all). Great care + should be used when setting this to non-zero. + + + + + This represents a method that will be called in response to a request + to read a value from a data reader. If an exception is thrown, it will + cause the data reader operation to fail -AND- it will continue to unwind + the call stack. + + + The instance in use. + + + The instance in use. + + + The flags associated with the instance + in use. + + + The parameter and return type data for the column being read from the + data reader. + + + The database type name associated with this callback. + + + The zero based index of the column being read from the data reader. + + + The data originally used when registering this callback. + + + Non-zero if the default handling for the data reader call should be + skipped. If this is set to non-zero and the necessary return value + is unavailable or unsuitable, an exception will be thrown. + + + + + This class represents the custom data type handling callbacks + for a single type name. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Provides the underlying storage for the + property. + + + + + Constructs an instance of this class. + + + The custom paramater binding callback. This parameter may be null. + + + The custom data reader value callback. This parameter may be null. + + + The extra data to pass into the parameter binding callback. This + parameter may be null. + + + The extra data to pass into the data reader value callback. This + parameter may be null. + + + + + Creates an instance of the class. + + + The custom paramater binding callback. This parameter may be null. + + + The custom data reader value callback. This parameter may be null. + + + The extra data to pass into the parameter binding callback. This + parameter may be null. + + + The extra data to pass into the data reader value callback. This + parameter may be null. + + + + + The database type name that the callbacks contained in this class + will apply to. This value may not be null. + + + + + The custom paramater binding callback. This value may be null. + + + + + The custom data reader value callback. This value may be null. + + + + + The extra data to pass into the parameter binding callback. This + value may be null. + + + + + The extra data to pass into the data reader value callback. This + value may be null. + + + + + This class represents the mappings between database type names + and their associated custom data type handling callbacks. + + + + + Constructs an (empty) instance of this class. + + + + + 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 + + + + Uri + + If specified, this must be a file name that starts with "file://", "file:", or "/". Any leading + "file://" or "file:" prefix will be stripped off and the resulting file name will be used to open + the database. + + N + null + + + FullUri + + If specified, this must be a URI in a format recognized by the SQLite core library (starting with + SQLite 3.7.7). It will be passed verbatim to the SQLite core library. + + N + null + + + Version + 3 + N + 3 + + + UseUTF16Encoding + + True - The UTF-16 encoding should be used. +
+ False - The UTF-8 encoding should be used. +
+ N + False +
+ + DefaultDbType + + This is the default to use when one cannot be determined based on the + column metadata and the configured type mappings. + + N + null + + + DefaultTypeName + + This is the default type name to use when one cannot be determined based on the column metadata + and the configured type mappings. + + N + null + + + NoDefaultFlags + + True - Do not combine the specified (or existing) connection flags with the value of the + property. +
+ False - Combine the specified (or existing) connection flags with the value of the + property. +
+ N + False +
+ + NoSharedFlags + + True - Do not combine the specified (or existing) connection flags with the value of the + property. +
+ False - Combine the specified (or existing) connection flags with the value of the + property. +
+ N + False +
+ + VfsName + + The name of the VFS to use when opening the database connection. + If this is not specified, the default VFS will be used. + + N + null + + + ZipVfsVersion + + If non-null, this is the "version" of ZipVFS to use. This requires + the System.Data.SQLite interop assembly -AND- primary managed assembly + to be compiled with the INTEROP_INCLUDE_ZIPVFS option; otherwise, this + property does nothing. The valid values are "v2" and "v3". Using + anyother value will cause an exception to be thrown. Please see the + ZipVFS documentation for more information on how to use this parameter. + + N + null + + + 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 + + If the argument N is positive then the suggested cache size is set to N. + If the argument N is negative, then the number of cache pages is adjusted + to use approximately abs(N*4096) bytes of memory. Backwards compatibility + note: The behavior of cache_size with a negative N was different in SQLite + versions prior to 3.7.10. In version 3.7.9 and earlier, the number of + pages in the cache was set to the absolute value of N. + + 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 + 4096 + + + 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 +
+ + BusyTimeout + {time in milliseconds}
Sets the busy timeout for the core library.
+ N + 0 +
+ + 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. 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 this journaling + mode is set, then the database file will very likely go corrupt. +
+ Truncate - Truncate the journal file to zero-length instead of + deleting it. +
+ Memory - 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 this journaling + mode is set, then the database file will very likely go corrupt. +
+ Wal - Use a write-ahead log instead of a rollback journal. +
+ 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 +
+ + PrepareRetries + + The maximum number of retries when preparing SQL to be executed. This + normally only applies to preparation errors resulting from the database + schema being changed. + + N + 3 + + + ProgressOps + + The approximate number of virtual machine instructions between progress + events. In order for progress events to actually fire, the event handler + must be added to the event as well. + + N + 0 + + + Recursive Triggers + + True - Enable the recursive trigger capability. + False - Disable the recursive trigger capability. + + N + False + +
+
+
+ + + The "invalid value" for the enumeration used + by the property. This constant is shared + by this class and the SQLiteConnectionStringBuilder class. + + + + + The default "stub" (i.e. placeholder) base schema name to use when + 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. + + + + + The extra connection flags to be used for all opened connections. + + + + + State of the current connection + + + + + The connection string + + + + + Nesting level of the transactions open on the connection + + + + + If this flag is non-zero, the method will have + no effect; however, the method will continue to + behave as normal. + + + + + 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 per-connection mappings between type names and optional callbacks + for parameter binding and value reading. + + + + + 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. + + + + + The cached values for all settings that have been fetched on behalf + of this connection. This cache may be cleared by calling the + method. + + + + + The default databse type for this connection. This value will only + be used if the + flag is set. + + + + + The default databse type name for this connection. This value will only + be used if the + flag is set. + + + + + The name of the VFS to be used when opening the database connection. + + + + + Default command timeout + + + + + The default busy timeout to use with the SQLite core library. This is + only used when opening a connection. + + + + + The maximum number of retries when preparing SQL to be executed. This + normally only applies to preparation errors resulting from the database + schema being changed. + + + + + The approximate number of virtual machine instructions between progress + events. In order for progress events to actually fire, the event handler + must be added to the event as + well. This value will only be used when opening the database. + + + + + 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 cached settings. + + + The total number of per-connection settings cleared. + + + + + Queries and returns the value of the specified setting, using the + cached setting names and values for this connection, when available. + + + The name of the setting. + + + The value to be returned if the setting has not been set explicitly + or cannot be determined. + + + The value of the cached setting is stored here if found; otherwise, + the value of is stored here. + + + Non-zero if the cached setting was found; otherwise, zero. + + + + + Adds or sets the cached setting specified by + to the value specified by . + + + The name of the cached setting to add or replace. + + + The new value of the cached setting. + + + + + Clears the per-connection type mappings. + + + The total number of per-connection type mappings cleared. + + + + + Returns the per-connection type mappings. + + + The per-connection type mappings -OR- null if they are unavailable. + + + + + Adds a per-connection type mapping, possibly replacing one or more + that already exist. + + + The case-insensitive database type name (e.g. "MYDATE"). The value + of this parameter cannot be null. Using an empty string value (or + a string value consisting entirely of whitespace) for this parameter + is not recommended. + + + The value that should be associated with the + specified type name. + + + Non-zero if this mapping should be considered to be the primary one + for the specified . + + + A negative value if nothing was done. Zero if no per-connection type + mappings were replaced (i.e. it was a pure add operation). More than + zero if some per-connection type mappings were replaced. + + + + + Clears the per-connection type callbacks. + + + The total number of per-connection type callbacks cleared. + + + + + Attempts to get the per-connection type callbacks for the specified + database type name. + + + The database type name. + + + Upon success, this parameter will contain the object holding the + callbacks for the database type name. Upon failure, this parameter + will be null. + + + Non-zero upon success; otherwise, zero. + + + + + Sets, resets, or clears the per-connection type callbacks for the + specified database type name. + + + The database type name. + + + The object holding the callbacks for the database type name. If + this parameter is null, any callbacks for the database type name + will be removed if they are present. + + + Non-zero if callbacks were set or removed; otherwise, zero. + + + + + 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. + + + + + Attempts to bind the specified object + instance to this connection. + + + The object instance containing + the metadata for the function to be bound. + + + A object instance that helps implement the + function to be bound. For scalar functions, this corresponds to the + type. For aggregate functions, + this corresponds to the type. For + collation functions, this corresponds to the + type. + + + A object instance that helps implement the + function to be bound. For aggregate functions, this corresponds to the + type. For other callback types, it + is not used and must be null. + + + + + Attempts to unbind the specified object + instance to this connection. + + + The object instance containing + the metadata for the function to be unbound. + + Non-zero if the function was unbound. + + + + This method unbinds all registered (known) functions -OR- all previously + bound user-defined functions from this connection. + + + Non-zero to unbind all registered (known) functions -OR- zero to unbind + all functions currently bound to the connection. + + + Non-zero if all the specified user-defined functions were unbound. + + + + + Parses a connection string into component parts using the custom + connection string parser. An exception may be thrown if the syntax + of the connection string is incorrect. + + + The connection string to parse. + + + Non-zero to parse the connection string using the algorithm provided + by the framework itself. This is not applicable when running on the + .NET Compact Framework. + + + Non-zero if names are allowed without values. + + + The list of key/value pairs corresponding to the parameters specified + within the connection string. + + + + + Disposes and finalizes the connection, if applicable. + + + + + Cleans up resources (native and managed) associated with the current instance. + + + Zero when being disposed via garbage collection; otherwise, non-zero. + + + + + 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 a connection string into component parts using the custom + connection string parser. An exception may be thrown if the syntax + of the connection string is incorrect. + + + The connection string to parse. + + + Non-zero if names are allowed without values. + + + The list of key/value pairs corresponding to the parameters specified + within 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. This is not applicable when running on + the .NET Compact Framework. + + 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. + + + + + Determines the transaction isolation level that should be used by + the caller, primarily based upon the one specified by the caller. + If mapping of transaction isolation levels is enabled, the returned + transaction isolation level may be significantly different than the + originally specified one. + + + The originally specified transaction isolation level. + + + The transaction isolation level that should be used. + + + + + Opens the connection using the parameters found in the . + + + + + 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. + + + + + Checks if this connection to the specified database should be considered + read-only. An exception will be thrown if the database name specified + via cannot be found. + + + The name of a database associated with this connection -OR- null for the + main database. + + + Non-zero if this connection to the specified database should be considered + read-only. + + + + + 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. + + + + Sets the chunk size for the primary file associated with this database + connection. + + + The new chunk size for the main database, in bytes. + + + Zero for success, non-zero for error. + + + + + Removes one set of surrounding single -OR- double quotes from the string + 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. + + + + + Determines the directory to be used when dealing with the "|DataDirectory|" + macro in a database file name. + + + The directory to use in place of the "|DataDirectory|" macro -OR- null if it + cannot be determined. + + + + + 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. Typically, this may include: + + + restrictionValues element index + usage + + + 0 + The database (or catalog) name, if applicable. + + + 1 + The schema name. This is not used by this provider. + + + 2 + The table name, if applicable. + + + 3 + + Depends on . + When "IndexColumns", it is the index name; otherwise, it is the column name. + + + + 4 + + Depends on . + When "IndexColumns", it is the column name; otherwise, it is not used. + + + + + 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 + + + For the complete list of supported connection string properties, + please see . + + + + + Returns the data source file name without extension or path. + + + + + Returns the fully qualified path and file name for the currently open + database, if any. + + + + + 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" + + + + + Gets/sets the default busy timeout to use with the SQLite core library. This is only used when + opening a connection. + + + + + The maximum number of retries when preparing SQL to be executed. This + normally only applies to preparation errors resulting from the database + schema being changed. + + + + + The approximate number of virtual machine instructions between progress + events. In order for progress events to actually fire, the event handler + must be added to the event as + well. This value will only be used when the underlying native progress + callback needs to be changed. + + + + + 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. + + + + + Gets/sets the default database type for this connection. This value + will only be used when not null. + + + + + Gets/sets the default database type name for this connection. This + value will only be used when not null. + + + + + Gets/sets the VFS name for this connection. This value will only be + used when opening the database. + + + + + 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. + + + + + The default connection flags to be used for all opened connections + when they are not present in the connection string. + + + + + The extra connection flags to be used for all opened connections. + + + + + Returns the state of the connection. + + + + + This event is raised periodically during long running queries. Changing + the value of the property will + determine if the operation in progress will continue or be interrupted. + 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 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 each time the number of virtual machine instructions is + approximately equal to the value of the + property. + + The connection performing the operation. + A that contains the + event data. + + + + 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 event data associated with progress reporting events. + + + + + The user-defined native data associated with this event. Currently, + this will always contain the value of . + + + + + The return code for the current call into the progress callback. + + + + + 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 progress return code. + + + + + 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. + + + + + Gets/sets the busy timeout to use with the SQLite core library. + + + + + Gets/sets the maximum number of retries when preparing SQL to be executed. + This normally only applies to preparation errors resulting from the database + schema being changed. + + + + + Gets/sets the approximate number of virtual machine instructions between + progress events. In order for progress events to actually fire, the event + handler must be added to the event + as well. + + + + + 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. + + + + + Gets/sets the default database type for the connection. + + + + + Gets/sets the default type name for the connection. + + + + + Gets/sets the VFS name for the connection. + + + + + If enabled, use foreign key constraints + + + + + Enable or disable the recursive trigger capability. + + + + + If non-null, this is the version of ZipVFS to use. This requires the + System.Data.SQLite interop assembly -AND- primary managed assembly to + be compiled with the INTEROP_INCLUDE_ZIPVFS option; otherwise, this + property does nothing. + + + + + 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. + + + + + If enabled, skip using the configured default connection flags. + + + + + If enabled, skip using the configured shared connection flags. + + + + + SQLite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types SQLite + 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. + + + + + A command is being disposed. + + + + + A data reader is being disposed. + + + + + A data reader is being closed. + + + + + A native resource was opened (i.e. obtained) from the pool. + + + + + A native resource was closed (i.e. released) to the pool. + + + + + 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 possible return codes for the progress callback. + + + + + The operation should continue. + + + + + The operation should be interrupted. + + + + + The return code for the current call into the authorizer. + + + + + The action will be allowed. + + + + + The overall action will be disallowed and an error message will be + returned from the query preparation method. + + + + + The specific action will be disallowed; however, the overall action + will continue. The exact effects of this return code vary depending + on the specific action, please refer to the SQLite core library + documentation for futher details. + + + + + Class used internally to determine the datatype of a column in a resultset + + + + + The DbType of the column, or DbType.Object if it cannot be determined + + + + + The affinity of a column, used for expressions or when Type is DbType.Object + + + + + Constructs a default instance of this type. + + + + + Constructs an instance of this type with the specified field values. + + + The type affinity to use for the new instance. + + + The database type to use for the new instance. + + + + + SQLite implementation of DbDataAdapter. + + + + + This class is just a shell around the DbDataAdapter. Nothing from + DbDataAdapter is overridden here, just a few constructors are defined. + + + Default constructor. + + + + + Constructs a data adapter using the specified select command. + + + The select command to associate with the adapter. + + + + + Constructs a data adapter with the supplied select command text and + associated with the specified connection. + + + The select command text to associate with the data adapter. + + + The connection to associate with the select command. + + + + + Constructs a data adapter with the specified select command text, + and using the specified database connection string. + + + The select command text to use to construct a select command. + + + A connection string suitable for passing to a new SQLiteConnection, + which is associated with the select command. + + + + + Constructs a data adapter with the specified select command text, + and using the specified database connection string. + + + The select command text to use to construct a select command. + + + A connection string suitable for passing to a new SQLiteConnection, + which is associated with the select command. + + + Non-zero to parse the connection string using the built-in (i.e. + framework provided) parser when opening the connection. + + + + + Cleans up resources (native and managed) associated with the current instance. + + + Zero when being disposed via garbage collection; otherwise, non-zero. + + + + + Raised by the underlying DbDataAdapter when a row is being updated + + The event's specifics + + + + Raised by DbDataAdapter after a row is updated + + The event's specifics + + + + Row updating event handler + + + + + Row updated event handler + + + + + Gets/sets the select command for this DataAdapter + + + + + Gets/sets the insert command for this DataAdapter + + + + + Gets/sets the update command for this DataAdapter + + + + + Gets/sets the delete command for this DataAdapter + + + + + SQLite implementation of DbDataReader. + + + + + Underlying command this reader is attached to + + + + + The flags pertaining to the associated connection (via the command). + + + + + Index of the current statement in the command being processed + + + + + Current statement being Read() + + + + + State of the current statement being processed. + -1 = First Step() executed, so the first Read() will be ignored + 0 = Actively reading + 1 = Finished reading + 2 = Non-row-returning statement, no records + + + + + Number of records affected by the insert/update statements executed on the command + + + + + Count of fields (columns) in the row-returning statement currently being processed + + + + + The number of calls to Step() that have returned true (i.e. the number of rows that + have been read in the current result set). + + + + + Maps the field (column) names to their corresponding indexes within the results. + + + + + Datatypes of active fields (columns) in the current statement, used for type-restricting data + + + + + The behavior of the datareader + + + + + If set, then dispose of the command object when the reader is finished + + + + + If set, then raise an exception when the object is accessed after being disposed. + + + + + An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified + + + + + 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. + + + + Forces the connection flags cached by this data reader to be refreshed + from the underlying connection. + + + + + This method is used to make sure the result set is open and a row is currently available. + + + + + 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 + + + + Invokes the data reader value callback configured for the database + type name associated with the specified column. If no data reader + value callback is available for the database type name, do nothing. + + + The index of the column being read. + + + The extra event data to pass into the callback. + + + Non-zero if the default handling for the data reader call should be + skipped. If this is set to non-zero and the necessary return value + is unavailable or unsuitable, an exception will be thrown. + + + + + Retrieves the column as a boolean value + + The index of the column. + bool + + + + Retrieves the column as a single byte value + + The index of the column. + byte + + + + Retrieves a column as an array of bytes (blob) + + The index of the column. + 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. + char + + + + Retrieves a column as an array of chars (blob) + + The index of the column. + 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. + string + + + + Retrieve the column as a date/time value + + The index of the column. + DateTime + + + + Retrieve the column as a decimal value + + The index of the column. + decimal + + + + Returns the column as a double + + The index of the column. + double + + + + Returns the .NET type of a given column + + The index of the column. + Type + + + + Returns a column as a float value + + The index of the column. + float + + + + Returns the column as a Guid + + The index of the column. + Guid + + + + Returns the column as a short + + The index of the column. + Int16 + + + + Retrieves the column as an int + + The index of the column. + Int32 + + + + Retrieves the column as a long + + The index of the column. + Int64 + + + + Retrieves the name of the column + + The index of the column. + string + + + + Returns the name of the database associated with the specified column. + + The index of the column. + string + + + + Returns the name of the table associated with the specified column. + + The index of the column. + string + + + + Returns the original name of the specified column. + + The index of the column. + 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. + string + + + + Retrieves the column as an object corresponding to the underlying datatype of the column + + The index of the column. + 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. + 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. + + + + + Retrieves the SQLiteType for a given column and row value. + + + The original SQLiteType structure, based only on the column. + + + The textual value of the column for a given row. + + + The SQLiteType structure. + + + + + Retrieves the SQLiteType for a given column, and caches it to avoid repetetive interop calls. + + The flags associated with the parent connection object. + The index of the column. + 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 rows seen so far in the current result set. + + + + + 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 + + + + + Returns the number of rows affected by the statement being executed. + The value returned may not be accurate for DDL statements. Also, it + will be -1 for any statement that does not modify the database (e.g. + SELECT). If an otherwise read-only statement modifies the database + indirectly (e.g. via a virtual table or user-defined function), the + value returned is undefined. + + + + + 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. + 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 + + + + + A file read operation failed. + + + + + A file read operation returned less data than requested. + + + + + A file write operation failed. + + + + + A file synchronization operation failed. + + + + + A directory synchronization operation failed. + + + + + A file truncate operation failed. + + + + + A file metadata operation failed. + + + + + A file unlock operation failed. + + + + + A file lock operation failed. + + + + + A file delete operation failed. + + + + + Not currently used. + + + + + Out-of-memory during a file operation. + + + + + A file existence/status operation failed. + + + + + A check for a reserved lock failed. + + + + + A file lock operation failed. + + + + + A file close operation failed. + + + + + A directory close operation failed. + + + + + A shared memory open operation failed. + + + + + A shared memory size operation failed. + + + + + A shared memory lock operation failed. + + + + + A shared memory map operation failed. + + + + + A file seek operation failed. + + + + + A file delete operation failed because it does not exist. + + + + + A file memory mapping operation failed. + + + + + The temporary directory path could not be obtained. + + + + + A path string conversion operation failed. + + + + + Reserved. + + + + + An attempt to authenticate failed. + + + + + A database table is locked in shared-cache mode. + + + + + A database file is locked due to a recovery operation. + + + + + A database file is locked due to snapshot semantics. + + + + + A database file cannot be opened because no temporary directory is available. + + + + + A database file cannot be opened because its path represents a directory. + + + + + A database file cannot be opened because its full path could not be obtained. + + + + + A database file cannot be opened because a path string conversion operation failed. + + + + + A virtual table is malformed. + + + + + A database file is read-only due to a recovery operation. + + + + + A database file is read-only because a lock could not be obtained. + + + + + A database file is read-only because it needs rollback processing. + + + + + A database file is read-only because it was moved while open. + + + + + An operation is being aborted due to rollback processing. + + + + + A CHECK constraint failed. + + + + + A commit hook produced a unsuccessful return code. + + + + + A FOREIGN KEY constraint failed. + + + + + Not currently used. + + + + + A NOT NULL constraint failed. + + + + + A PRIMARY KEY constraint failed. + + + + + The RAISE function was used by a trigger-program. + + + + + A UNIQUE constraint failed. + + + + + Not currently used. + + + + + A ROWID constraint failed. + + + + + Frames were recovered from the WAL log file. + + + + + Pages were recovered from the journal file. + + + + + An automatic index was created to process a query. + + + + + User authentication failed. + + + + + Success. Prevents the extension from unloading until the process + terminates. + + + + + SQLite implementation of . + + + SQLite implementation of . + + + + + Constructs a new instance. + + + + + Cleans up resources (native and managed) associated with the current instance. + + + + + Cleans up resources associated with the current 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 collating sequences + + + + + Current context of the current callback. Only valid during a callback + + + + + This static dictionary contains all the registered (known) user-defined + functions declared using the proper attributes. The contained dictionary + values are always null and are not currently used. + + + + + 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 + + + + Cleans up resources associated with the current instance. + + + + + 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 collating 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 collating 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 collating 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 + + + + Alternative method of registering a function. This method + does not require the specified type to be annotated with + . + + + The name of the function to register. + + + The number of arguments accepted by the function. + + + The type of SQLite function being resitered (e.g. scalar, + aggregate, or collating sequence). + + + The that actually implements the function. + This will only be used if the + and parameters are null. + + + The to be used for all calls into the + , + , + and virtual methods. + + + The to be used for all calls into the + virtual method. This + parameter is only necessary for aggregate functions. + + + + + Replaces a registered function, disposing of the associated (old) + value if necessary. + + + The attribute that describes the function to replace. + + + The new value to use. + + + Non-zero if an existing registered function was replaced; otherwise, + zero. + + + + + Creates a instance based on the specified + . + + + The containing the metadata about + the function to create. + + + The created function -OR- null if the function could not be created. + + + Non-zero if the function was created; otherwise, zero. + + + + + Called by the SQLiteBase derived classes, this method binds all registered (known) 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. + + + + Called by the SQLiteBase derived classes, this method unbinds all registered (known) + functions -OR- all previously bound user-defined functions from a connection. + + The base object from which the functions are to be unbound. + The flags associated with the parent connection object. + + Non-zero to unbind all registered (known) functions -OR- zero to unbind all functions + currently bound to the connection. + + Non-zero if all the specified user-defined functions were unbound. + + + + This function binds a user-defined function 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. + + + + + This function unbinds a user-defined functions from 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. + + Non-zero if the function was unbound. + + + + 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. + + + + + This type is used with the + method. + + + This is always the string literal "Invoke". + + + The arguments for the scalar function. + + + The result of the scalar function. + + + + + This type is used with the + method. + + + This is always the string literal "Step". + + + The arguments for the aggregate function. + + + The step number (one based). This is incrememted each time the + method is called. + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + + + This type is used with the + method. + + + This is always the string literal "Final". + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + The result of the aggregate function. + + + + + This type is used with the + method. + + + This is always the string literal "Compare". + + + The first string to compare. + + + The second strnig to compare. + + + A positive integer if the parameter is + greater than the parameter, a negative + integer if the parameter is less than + the parameter, or zero if they are + equal. + + + + + This class implements a SQLite function using a . + All the virtual methods of the class are + implemented using calls to the , + , , + and strongly typed delegate types + or via the method. + The arguments are presented in the same order they appear in + the associated methods with one exception: + the first argument is the name of the virtual method being implemented. + + + + + This error message is used by the overridden virtual methods when + a required property (e.g. + or ) has not been + set. + + + + + This error message is used by the overridden + method when the result does not have a type of . + + + + + Constructs an empty instance of this class. + + + + + Constructs an instance of this class using the specified + as the + implementation. + + + The to be used for all calls into the + , , and + virtual methods needed by the + base class. + + + The to be used for all calls into the + virtual methods needed by the + base class. + + + + + Returns the list of arguments for the method, + as an of . The first + argument is always the literal string "Invoke". + + + The original arguments received by the method. + + + Non-zero if the returned arguments are going to be used with the + type; otherwise, zero. + + + The arguments to pass to the configured . + + + + + Returns the list of arguments for the method, + as an of . The first + argument is always the literal string "Step". + + + The original arguments received by the method. + + + The step number (one based). This is incrememted each time the + method is called. + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + Non-zero if the returned arguments are going to be used with the + type; otherwise, zero. + + + The arguments to pass to the configured . + + + + + Updates the output arguments for the method, + using an of . The first + argument is always the literal string "Step". Currently, only the + parameter is updated. + + + The original arguments received by the method. + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + Non-zero if the returned arguments are going to be used with the + type; otherwise, zero. + + + The arguments to pass to the configured . + + + + + Returns the list of arguments for the method, + as an of . The first + argument is always the literal string "Final". + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + Non-zero if the returned arguments are going to be used with the + type; otherwise, zero. + + + The arguments to pass to the configured . + + + + + Returns the list of arguments for the method, + as an of . The first + argument is always the literal string "Compare". + + + The first string to compare. + + + The second strnig to compare. + + + Non-zero if the returned arguments are going to be used with the + type; otherwise, zero. + + + The arguments to pass to the configured . + + + + + This virtual method is the implementation for scalar functions. + See the method for more + details. + + + The arguments for the scalar function. + + + The result of the scalar function. + + + + + This virtual method is part of the implementation for aggregate + functions. See the method + for more details. + + + The arguments for the aggregate function. + + + The step number (one based). This is incrememted each time the + method is called. + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + + + This virtual method is part of the implementation for aggregate + functions. See the method + for more details. + + + A placeholder for implementers to store contextual data pertaining + to the current context. + + + The result of the aggregate function. + + + + + This virtual method is part of the implementation for collating + sequences. See the method + for more details. + + + The first string to compare. + + + The second strnig to compare. + + + A positive integer if the parameter is + greater than the parameter, a negative + integer if the parameter is less than + the parameter, or zero if they are + equal. + + + + + The to be used for all calls into the + , , and + virtual methods needed by the + base class. + + + + + The to be used for all calls into the + virtual methods needed by the + base class. + + + + + 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. + + + + + + Cleans up resources (native and managed) associated with the current instance. + + + Zero when being disposed via garbage collection; otherwise, non-zero. + + + + + 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. + + + + + Collating 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 collating 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. This sets the initial + , , and + properties to null. + + + 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. The value of + this property will not be used if either the or + property values are set to non-null. + + + + + The that refers to the implementation for the + associated function. If this property value is set to non-null, it will + be used instead of the property value. + + + + + The that refers to the implementation for the + associated function. If this property value is set to non-null, it will + be used instead of the property value. + + + + + 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. + + + + + This value represents an "unknown" . + + + + + The command associated with this parameter. + + + + + 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 + + + + + The database type name associated with this parameter, if any. + + + + + Constructor used when creating for use with a specific command. + + + The command associated with this parameter. + + + + + 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 + + + + The command associated with this parameter. + + + + + 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. + + + + + The database type name associated with this parameter, if any. + + + + + 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. + + + The read-only flag 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 + + + + + This method attempts to query the database connection associated with + the statement 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. + + + + + Invokes the parameter binding callback configured for the database + type name associated with the specified column. If no parameter + binding callback is available for the database type name, do + nothing. + + + The index of the column being read. + + + The instance being bound to the + command. + + + Non-zero if the default handling for the parameter binding call + should be skipped (i.e. the parameter should not be bound at all). + Great care should be used when setting this to non-zero. + + + + + 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. + + + + + This static class provides some methods that are shared between the + native library pre-loader and other classes. + + + + + This lock is used to protect the static field. + + + + + This type is only present when running on Mono. + + + + + Keeps track of whether we are running on Mono. Initially null, it is + set by the method on its first call. Later, it + is returned verbatim by the method. + + + + + Determines whether or not this assembly is running on Mono. + + + Non-zero if this assembly is running on Mono. + + + + + Determines if the current process is running on one of the Windows + [sub-]platforms. + + + Non-zero when running on Windows; otherwise, zero. + + + + + This is a wrapper around the + method. + On Mono, it has to call the method overload without the + parameter, due to a bug in Mono. + + + This is used for culture-specific formatting. + + + The format string. + + + An array the objects to format. + + + The resulting string. + + + + + This static class provides a thin wrapper around the native library + loading features of the underlying platform. + + + + + Attempts to load the specified native library file using the Win32 + API. + + + The file name of the native library to load. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + Attempts to load the specified native library file using the POSIX + API. + + + The file name of the native library to load. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + Attempts to load the specified native library file. + + + The file name of the native library to load. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + This delegate is used to wrap the concept of loading a native + library, based on a file name, and returning the loaded module + handle. + + + The file name of the native library to load. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + This class declares P/Invoke methods to call native POSIX APIs. + + + + + For use with dlopen(), bind function calls lazily. + + + + + For use with dlopen(), bind function calls immediately. + + + + + For use with dlopen(), make symbols globally available. + + + + + For use with dlopen(), opposite of RTLD_GLOBAL, and the default. + + + + + For use with dlopen(), the defaults used by this class. + + + + + This is the P/Invoke method that wraps the native Unix dlopen + function. See the POSIX documentation for full details on what it + does. + + + The name of the executable library. + + + This must be a combination of the individual bit flags RTLD_LAZY, + RTLD_NOW, RTLD_GLOBAL, and/or RTLD_LOCAL. + + + The native module handle upon success -OR- IntPtr.Zero on failure. + + + + + This class declares P/Invoke methods to call native Win32 APIs. + + + + + 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. + + + + + This class declares P/Invoke methods to call native SQLite APIs. + + + + + 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. + + + + + Combines two path strings. + + + The first path -OR- null. + + + The second path -OR- null. + + + The combined path string -OR- null if both of the original path + strings are null. + + + + + 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. + + + + + 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. + + + + + Determines the base file name (without any directory information) + for the native SQLite library to be pre-loaded by this class. + + + The base file name for the native SQLite library to be pre-loaded by + this class -OR- null if its value cannot be determined. + + + + + 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. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to <?xml version="1.0" standalone="yes"?> + <DocumentElement> + <DataTypes> + <TypeName>smallint</TypeName> + <ProviderDbType>10</ProviderDbType> + <ColumnSize>5</ColumnSize> + <DataType>System.Int16</DataType> + <CreateFormat>smallint</CreateFormat> + <IsAutoIncrementable>false</IsAutoIncrementable> + <IsCaseSensitive>false</IsCaseSensitive> + <IsFixedLength>true</IsFixedLength> + <IsFixedPrecisionScale>true</IsFixedPrecisionScale> + <IsLong>false</IsLong> + <IsNullable>true</ [rest of string was truncated]";. + + + + + Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE. + + + + + Looks up a localized string similar to <?xml version="1.0" encoding="utf-8" ?> + <DocumentElement> + <MetaDataCollections> + <CollectionName>MetaDataCollections</CollectionName> + <NumberOfRestrictions>0</NumberOfRestrictions> + <NumberOfIdentifierParts>0</NumberOfIdentifierParts> + </MetaDataCollections> + <MetaDataCollections> + <CollectionName>DataSourceInformation</CollectionName> + <NumberOfRestrictions>0</NumberOfRestrictions> + <NumberOfIdentifierParts>0</NumberOfIdentifierParts> + </MetaDataCollections> + <MetaDataC [rest of string was truncated]";. + + + + + This interface represents a virtual table implementation written in + native code. + + + + + + int (*xCreate)(sqlite3 *db, void *pAux, + int argc, char **argv, + sqlite3_vtab **ppVTab, + char **pzErr); + + + 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 xCreate method need not initialize the pModule, nRef, and zErrMsg + fields of the sqlite3_vtab object. The SQLite core will take care of + that chore. + + + The xCreate should 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. + + + If the xCreate method is omitted (left as a NULL pointer) then the + virtual table is an eponymous-only virtual table. New instances of + the virtual table cannot be created using CREATE VIRTUAL TABLE and the + virtual table can only be used via its module name. + Note that SQLite versions prior to 3.9.0 do not understand + eponymous-only virtual tables and will segfault if an attempt is made + to CREATE VIRTUAL TABLE on an eponymous-only virtual table because + the xCreate method was not checked for null. + + + If the xCreate method is the exact same pointer as the xConnect method, + that indicates that the virtual table does not need to initialize backing + store. Such a virtual table can be used as an eponymous virtual table + or as a named virtual table using CREATE VIRTUAL TABLE or both. + + + If a column datatype contains the special keyword "HIDDEN" + (in any combination of upper and lower case letters) then that keyword + it is omitted from the column datatype name and the column is marked + as a hidden column internally. + A hidden column differs from a normal column in three respects: + + + ]]> + ]]> Hidden columns are not listed in the dataset returned by + "PRAGMA table_info", + ]]> Hidden columns are not included in the expansion of a "*" + expression in the result set of a SELECT, and + ]]> Hidden columns are not included in the implicit column-list + used by an INSERT statement that lacks an explicit column-list. + ]]> + + + For example, if the following SQL is passed to sqlite3_declare_vtab(): + + + CREATE TABLE x(a HIDDEN VARCHAR(12), b INTEGER, c INTEGER Hidden); + + + Then the virtual table would be created with two hidden columns, + and with datatypes of "VARCHAR(12)" and "INTEGER". + + + An example use of hidden columns can be seen in the FTS3 virtual + table implementation, where every FTS virtual table + contains an FTS hidden column that is used to pass information from the + virtual table into FTS auxiliary functions and to the FTS MATCH operator. + + + A virtual table that contains hidden columns can be used like + a table-valued function in the FROM clause of a SELECT statement. + The arguments to the table-valued function become constraints on + the HIDDEN columns of the virtual table. + + + For example, the "generate_series" extension (located in the + ext/misc/series.c + file in the source tree) + implements an eponymous virtual table with the following schema: + + + CREATE TABLE generate_series( + value, + start HIDDEN, + stop HIDDEN, + step HIDDEN + ); + + + The sqlite3_module.xBestIndex method in the implementation of this + table checks for equality constraints against the HIDDEN columns, and uses + those as input parameters to determine the range of integer "value" outputs + to generate. Reasonable defaults are used for any unconstrained columns. + For example, to list all integers between 5 and 50: + + + SELECT value FROM generate_series(5,50); + + + The previous query is equivalent to the following: + + + SELECT value FROM generate_series WHERE start=5 AND stop=50; + + + Arguments on the virtual table name are matched to hidden columns + in order. The number of arguments can be less than the + number of hidden columns, in which case the latter hidden columns are + unconstrained. However, an error results if there are more arguments + than there are hidden columns in the virtual table. + + + + 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. + + + + + + int (*xConnect)(sqlite3*, void *pAux, + int argc, char **argv, + sqlite3_vtab **ppVTab, + char **pzErr); + + + 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. When xCreate and xConnect are the same, + the table is an eponymous virtual table. + + + 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 if 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 constrained. -1 for ROWID */ + 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 >0, 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 */ + ]]>/* Fields below are only available in SQLite 3.8.2 and later */]]> + sqlite3_int64 estimatedRows; /* Estimated number of rows returned */ + ]]>/* Fields below are only available in SQLite 3.9.0 and later */]]> + int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */ + ]]>/* Fields below are only available in SQLite 3.10.0 and later */]]> + sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */ + }; + + + Note the warnings on the "estimatedRows", "idxFlags", and colUsed fields. + These fields were added with SQLite versions 3.8.2, 3.9.0, and 3.10.0, respectively. + Any extension that reads or writes these fields must first check that the + version of the SQLite library in use is greater than or equal to appropriate + version - perhaps comparing the value returned from sqlite3_libversion_number() + against constants 3008002, 3009000, and/or 3010000. The result of attempting + to access these fields in an sqlite3_index_info structure created by an + older version of SQLite are undefined. + + + 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 + #define SQLITE_INDEX_CONSTRAINT_LIKE 65 /* 3.10.0 and later only */ + #define SQLITE_INDEX_CONSTRAINT_GLOB 66 /* 3.10.0 and later only */ + #define SQLITE_INDEX_CONSTRAINT_REGEXP 67 /* 3.10.0 and later only */ + #define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */ + + + 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. + + + 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. + + + In SQLite version 3.10.0 and later, the colUsed field is available + to indicate which fields of the virtual table are actually used by the + statement being prepared. If the lowest bit of colUsed is set, that + means that the first column is used. The second lowest bit corresponds + to the second column. And so forth. If the most significant bit of + colUsed is set, that means that one or more columns other than the + first 63 columns are used. If column usage information is needed by the + xFilter method, then the required bits must be encoded into either + the idxNum or idxStr output fields. + + + 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. + + + If the current version of SQLite is 3.8.2 or greater, the estimatedRows + field may be set to an estimate of the number of rows returned by the + proposed query plan. If this value is not explicitly set, the default + estimate of 25 rows is used. + + + If the current version of SQLite is 3.9.0 or greater, the idxFlags field + may be set to SQLITE_INDEX_SCAN_UNIQUE to indicate that the virtual table + will return only zero or one rows given the input constraints. Additional + bits of the idxFlags field might be understood in later versions of SQLite. + + + 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 zero. + 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. + + + + + + int (*xDisconnect)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xDestroy)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor); + + + 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. + + + + + + int (*xClose)(sqlite3_vtab_cursor*); + + + 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. + + + + + + int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr, + int argc, sqlite3_value **argv); + + + This method begins a search of a virtual table. + The first argument is a cursor opened by xOpen. + The next two arguments 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. + + + + + + int (*xNext)(sqlite3_vtab_cursor*); + + + 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. + + + + + + int (*xEof)(sqlite3_vtab_cursor*); + + + 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. + + + + + + int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int N); + + + 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. + + + + + + int (*xRowid)(sqlite3_vtab_cursor *pCur, sqlite_int64 *pRowid); + + + 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. + + + + + + int (*xUpdate)( + sqlite3_vtab *pVTab, + int argc, + sqlite3_value **argv, + sqlite_int64 *pRowid + ); + + + 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. + Not 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. + + + + + + int (*xBegin)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xSync)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xCommit)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xRollback)(sqlite3_vtab *pVTab); + + + 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. + + + + + + int (*xFindFunction)( + sqlite3_vtab *pVtab, + int nArg, + const char *zName, + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), + void **ppArg + ); + + + This method is called during sqlite3_prepare() to give the virtual + table implementation an opportunity to overload functions. + This method may be set to NULL in which case no overloading occurs. + + + When a function uses a column from a virtual table as its first + argument, this method is called to see if the virtual table would + like to overload the function. The first three parameters are inputs: + the virtual table, the number of arguments to the function, and the + name of the function. If no overloading is desired, this method + returns 0. To overload the function, this method writes the new + function implementation into *pxFunc and writes user data into *ppArg + and returns 1. + + + Note that infix functions (LIKE, GLOB, REGEXP, and MATCH) reverse + the order of their arguments. So "like(A,B)" is equivalent to "B like A". + For the form "B like A" the B term is considered the first argument + to the function. But for "like(A,B)" the A term is considered the + first argument. + + + The function pointer returned by this routine must be valid for + the lifetime of the sqlite3_vtab object given in the first parameter. + + + + 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. + + + + + + int (*xRename)(sqlite3_vtab *pVtab, const char *zNew); + + + 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. + + + + + + int (*xSavepoint)(sqlite3_vtab *pVtab, int); + int (*xRelease)(sqlite3_vtab *pVtab, int); + int (*xRollbackTo)(sqlite3_vtab *pVtab, int); + + + 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. + + + + + + int (*xSavepoint)(sqlite3_vtab *pVtab, int); + int (*xRelease)(sqlite3_vtab *pVtab, int); + int (*xRollbackTo)(sqlite3_vtab *pVtab, int); + + + 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. + + + + + + int (*xSavepoint)(sqlite3_vtab *pVtab, int); + int (*xRelease)(sqlite3_vtab *pVtab, int); + int (*xRollbackTo)(sqlite3_vtab *pVtab, int); + + + 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 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. + + + + + These are the allowed values for the index flags from the + method. + + + + + No special handling. This is the default. + + + + + This value indicates that the scan of the index will visit at + most one row. + + + + + 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 a default instance of this class. + + + + + 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. + + + + + Determines if the native flags 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. + + + + + Determines if the native flags 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 property has no effect if the SQLite core library is not at + least version 3.8.2. + + + + + The flags that should be used with this index. Using a null value + here indicates that a default flags value should be used. This + property has no effect if the SQLite core library is not at least + version 3.9.0. + + + + + + Indicates which columns of the virtual table may be required by the + current scan. Virtual table columns are numbered from zero in the + order in which they appear within the CREATE TABLE statement passed + to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62), + the corresponding bit is set within the bit mask if the column may + be required by SQLite. If the table has at least 64 columns and + any column to the right of the first 63 is required, then bit 63 of + colUsed is also set. In other words, column iCol may be required + if the expression + + + (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) + + + evaluates to non-zero. Using a null value here indicates that a + default flags value should be used. This property has no effect if + the SQLite core library is not at least version 3.10.0. + + + + + + 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. + + + + + Attempts to determine the structure sizes needed to create and + populate a native + + structure. + + + The size of the native + + structure is stored here. + + + The size of the native + + structure is stored here. + + + The size of the native + + structure is stored here. + + + The size of the native + + structure is stored here. + + + + + Attempts to allocate and initialize a native + + structure. + + + The number of instances to + pre-allocate space for. + + + The number of instances to + pre-allocate space for. + + + The newly allocated native + structure + -OR- if it could not be fully allocated. + + + + + Frees all the memory associated with a native + + structure. + + + The native pointer to the native sqlite3_index_info structure to + free. + + + + + 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. + + + Non-zero to include fields from the outputs portion of the native + structure; otherwise, the "output" fields will not be read. + + + 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. + + + Non-zero to include fields from the inputs portion of the native + structure; otherwise, the "input" fields will not be written. + + + + + 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 + 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 + 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. + + + + + Modifies the specified object instance + to contain the specified flags. + + + The object instance to modify. + + + The index flags 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 index flags. + + + 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 contains some virtual methods that may be useful for other + virtual table classes. It specifically does NOT implement any of the + interface methods. + + + + + 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. + + + + + 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. + + + + + Constructs an instance of this class. + + + The name of the module. 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 that the virtual table cursor should be. + + + 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 key column value + for the current row. + + + The integer row sequence number for the current row. + + + The hash code of the key column 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. + + + + + 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. + + + + + 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(); + } + } + } + + + + + + 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. + + + + + Sets the table error message to one that indicates the virtual + table cursor has no current row. + + + The object instance. + + + 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. + + + + + 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/HighWayIot.Repository/HighWayIot.Repository.csproj b/HighWayIot.Repository/HighWayIot.Repository.csproj index 6112e74..eb7eed9 100644 --- a/HighWayIot.Repository/HighWayIot.Repository.csproj +++ b/HighWayIot.Repository/HighWayIot.Repository.csproj @@ -13,6 +13,8 @@ 512 true + + true @@ -32,27 +34,6 @@ 4 - - ..\packages\BouncyCastle.Cryptography.2.3.1\lib\net461\BouncyCastle.Cryptography.dll - - - ..\packages\Google.Protobuf.3.26.1\lib\net45\Google.Protobuf.dll - - - ..\packages\K4os.Compression.LZ4.1.3.8\lib\net462\K4os.Compression.LZ4.dll - - - ..\packages\K4os.Compression.LZ4.Streams.1.3.8\lib\net462\K4os.Compression.LZ4.Streams.dll - - - ..\packages\K4os.Hash.xxHash.1.0.8\lib\net462\K4os.Hash.xxHash.dll - - - ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - - - ..\packages\MySql.Data.9.0.0\lib\net48\MySql.Data.dll - ..\HighWayIot.Library\Oracle.ManagedDataAccess.dll @@ -63,17 +44,9 @@ ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + - - ..\packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll - - - Z:\Desktop\日常代码\HighWayIot\HighWayIot.Library\System.Data.SQLite.dll - - - ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll - ..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll @@ -98,9 +71,6 @@ - - ..\packages\ZstdSharp.Port.0.8.0\lib\net462\ZstdSharp.dll - diff --git a/HighWayIot.Repository/SqlSugarHelper.cs b/HighWayIot.Repository/SqlSugarHelper.cs index 899f7da..aaea07a 100644 --- a/HighWayIot.Repository/SqlSugarHelper.cs +++ b/HighWayIot.Repository/SqlSugarHelper.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; namespace HighWayIot.Repository { - internal class SqlSugarHelper //不能是泛型类 + public class SqlSugarHelper //不能是泛型类 { private static LogHelper logHelper = LogHelper.Instance; @@ -21,12 +21,8 @@ namespace HighWayIot.Repository * Sqlite:获取debug路径下的数据库文件,不建议直接写死路径 * private static string sqliteConnStr = $"Data Source={Path.GetFullPath("data\\data.db")};Version=3"; */ - //private static string sqliteConnStr = "Data Source=Z:\\Desktop\\日常代码\\HighWayIot\\HighWayIot\\bin\\Debug\\data\\data.db;Version=3"; - /** - * Mysql - */ - private static string mysqlConnStr = "Data Source=127.0.0.1;Port=3306;Initial Catalog=rfid;uid=root;pwd=123456;Charset=utf8mb4;SslMode=none"; + private static string SqliteConnStr = @"DataSource=" + Environment.CurrentDirectory + "\\DataBase\\RFIDSql.db"; //private static string oracleConnStr = "Data Source=175.27.215.92/helowin;User ID=aucma_mes;Password=aucma"; #endregion @@ -36,24 +32,24 @@ namespace HighWayIot.Repository //用单例模式 public static SqlSugarScope Db = new SqlSugarScope( - // new List() - //{ - //new ConnectionConfig() - //{ - // ConfigId = "sqlite", - // ConnectionString = sqliteConnStr, - // DbType = DbType.Sqlite, - // InitKeyType = InitKeyType.Attribute, - // IsAutoCloseConnection = true - //}, + new List() + { new ConnectionConfig() { - ConfigId = "mysql", - ConnectionString = mysqlConnStr, - DbType = DbType.MySql, + ConfigId = "sqlite", + ConnectionString = SqliteConnStr, + DbType = SqlSugar.DbType.Sqlite, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true }, + //new ConnectionConfig() + //{ + // ConfigId = "mysql", + // ConnectionString = mysqlConnStr, + // DbType = DbType.MySql, + // InitKeyType = InitKeyType.Attribute, + // IsAutoCloseConnection = true + //}, //}, //new ConnectionConfig() //{ @@ -63,16 +59,16 @@ namespace HighWayIot.Repository // InitKeyType = InitKeyType.Attribute, // IsAutoCloseConnection = true //} - //}, - db => - { - //(A)全局生效配置点 - //调试SQL事件,可以删掉 - db.Aop.OnLogExecuting = (sql, pars) => - { - logHelper.SqlLog($"{sql};参数:{jsonChange.ModeToJson(pars)}"); - }; - }); + }, + db => + { + //(A)全局生效配置点 + //调试SQL事件,可以删掉 + db.Aop.OnLogExecuting = (sql, pars) => + { + logHelper.SqlLog($"{sql};参数:{jsonChange.ModeToJson(pars)}"); + }; + }); } } diff --git a/HighWayIot.Repository/app.config b/HighWayIot.Repository/app.config index 35ad80c..836792e 100644 --- a/HighWayIot.Repository/app.config +++ b/HighWayIot.Repository/app.config @@ -1,31 +1,13 @@  + + +
+ - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/HighWayIot.Repository/packages.config b/HighWayIot.Repository/packages.config index bccbf51..759d0ad 100644 --- a/HighWayIot.Repository/packages.config +++ b/HighWayIot.Repository/packages.config @@ -1,20 +1,10 @@  - - - - - - - - - - \ No newline at end of file diff --git a/HighWayIot.Repository/service/Impl/BaseContentServiceImpl.cs b/HighWayIot.Repository/service/Impl/BaseContentServiceImpl.cs index 3ce5168..6b6ca74 100644 --- a/HighWayIot.Repository/service/Impl/BaseContentServiceImpl.cs +++ b/HighWayIot.Repository/service/Impl/BaseContentServiceImpl.cs @@ -12,7 +12,7 @@ namespace HighWayIot.Repository.service.Impl public class BaseContentServiceImpl : IContentService { private LogHelper log = LogHelper.Instance; - Repository _repository => new Repository("mysql"); + Repository _repository => new Repository("sqlite"); public List GetContentInfos() { diff --git a/HighWayIot.Repository/service/Impl/BaseHeartbeatServiceImpl.cs b/HighWayIot.Repository/service/Impl/BaseHeartbeatServiceImpl.cs index 4da17a9..ee93f27 100644 --- a/HighWayIot.Repository/service/Impl/BaseHeartbeatServiceImpl.cs +++ b/HighWayIot.Repository/service/Impl/BaseHeartbeatServiceImpl.cs @@ -12,7 +12,7 @@ namespace HighWayIot.Repository.service.Impl public class BaseHeartbeatServiceImpl : IHeartbeatService { private LogHelper log = LogHelper.Instance; - Repository _repository => new Repository("mysql"); + Repository _repository => new Repository("sqlite"); public List GetHeartbeatInfos() { diff --git a/HighWayIot.Repository/service/Impl/BaseStateServiceImpl.cs b/HighWayIot.Repository/service/Impl/BaseStateServiceImpl.cs index cbaf529..bac6a5c 100644 --- a/HighWayIot.Repository/service/Impl/BaseStateServiceImpl.cs +++ b/HighWayIot.Repository/service/Impl/BaseStateServiceImpl.cs @@ -12,7 +12,7 @@ namespace HighWayIot.Repository.service.Impl public class BaseStateServiceImpl : IStateService { private LogHelper log = LogHelper.Instance; - Repository _repository => new Repository("mysql"); + Repository _repository => new Repository("sqlite"); public List GetStateInfos() { diff --git a/HighWayIot.TouchSocket/app.config b/HighWayIot.TouchSocket/app.config index decde4e..d720a62 100644 --- a/HighWayIot.TouchSocket/app.config +++ b/HighWayIot.TouchSocket/app.config @@ -12,7 +12,7 @@ - + diff --git a/HighWayIot/App.config b/HighWayIot/App.config index 86d46b7..4b24e62 100644 --- a/HighWayIot/App.config +++ b/HighWayIot/App.config @@ -15,7 +15,7 @@ - + diff --git a/RFIDSocket/App.config b/RFIDSocket/App.config index b9248c9..a84de04 100644 --- a/RFIDSocket/App.config +++ b/RFIDSocket/App.config @@ -5,30 +5,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/RFIDSocket/Program.cs b/RFIDSocket/Program.cs index abd71dc..a0d60b1 100644 --- a/RFIDSocket/Program.cs +++ b/RFIDSocket/Program.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; +using static Org.BouncyCastle.Math.EC.ECCurve; + namespace RFIDSocket { internal static class Program @@ -20,6 +22,7 @@ namespace RFIDSocket Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); logger.Info("初始化启动"); + Application.Run(new RFIDSocket()); } } diff --git a/RFIDSocket/RFIDSocket.csproj b/RFIDSocket/RFIDSocket.csproj index ac0bd8d..ff0c60d 100644 --- a/RFIDSocket/RFIDSocket.csproj +++ b/RFIDSocket/RFIDSocket.csproj @@ -63,6 +63,10 @@ ..\packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll + + False + ..\Dll\System.Data.SQLite.dll + ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll