Index: Doc/Extra/version.html
==================================================================
--- Doc/Extra/version.html
+++ Doc/Extra/version.html
@@ -46,10 +46,12 @@
1.0.87.0 - June XX, 2013 (release scheduled)
- Add all the necessary infrastructure to allow virtual tables to be implemented in managed code. Fix for [9a544991be].
- The DbType to type name translation needs to prioritize the Entity Framework type names. Fix for [47f4bac575].
- Add DateTimeFormatString connection string property to allow the DateTime format string used for all parsing and formatting to be overridden.
+ - Add NoFunctions connection flag to skip binding functions registered in the application domain.
+ - Add several data-types for compatibility purposes. Fix for [fe50b8c2e8].
- When reading a DateTime value, avoid unnecessary string conversions. Fix for [4d87fbc742].
- Modify the index introspection code so that it does not treat PRAGMA table_info "pk" column values as boolean. Fix for [f2c47a01eb].
- Disable use of the new connection string parsing algorithm when the No_SQLiteConnectionNewParser environment variable is set. Pursuant to [bbdda6eae2].
- Rename the ReturnCode property of the SQLiteException class to ResultCode. ** Potentially Incompatible Change **
Index: System.Data.SQLite/SQLite3.cs
==================================================================
--- System.Data.SQLite/SQLite3.cs
+++ System.Data.SQLite/SQLite3.cs
@@ -234,10 +234,14 @@
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
+ ///
+ /// Attempts to interrupt the query currently executing on the associated
+ /// native database connection.
+ ///
internal override void Cancel()
{
UnsafeNativeMethods.sqlite3_interrupt(_sql);
}
@@ -411,10 +415,16 @@
{
SQLiteErrorCode rc = UnsafeNativeMethods.sqlite3_shutdown();
return rc;
}
+ ///
+ /// Determines if the associated native connection handle is open.
+ ///
+ ///
+ /// Non-zero if the associated native connection handle is open.
+ ///
internal override bool IsOpen()
{
return (_sql != null) && !_sql.IsInvalid && !_sql.IsClosed;
}
@@ -476,13 +486,16 @@
if (n != SQLiteErrorCode.Ok) throw new SQLiteException(n, null);
_sql = new SQLiteConnectionHandle(db, true);
}
lock (_sql) { /* HACK: Force the SyncBlock to be "created" now. */ }
}
+
// Bind functions to this connection. If any previous functions of the same name
// were already bound, then the new bindings replace the old.
- _functionsArray = SQLiteFunction.BindFunctions(this, connectionFlags);
+ if ((connectionFlags & SQLiteConnectionFlags.NoFunctions) != SQLiteConnectionFlags.NoFunctions)
+ _functionsArray = SQLiteFunction.BindFunctions(this, connectionFlags);
+
SetTimeout(0);
GC.KeepAlive(_sql);
}
internal override void ClearPool()
Index: System.Data.SQLite/SQLite3_UTF16.cs
==================================================================
--- System.Data.SQLite/SQLite3_UTF16.cs
+++ System.Data.SQLite/SQLite3_UTF16.cs
@@ -191,11 +191,16 @@
if (n != SQLiteErrorCode.Ok) throw new SQLiteException(n, null);
_sql = new SQLiteConnectionHandle(db, true);
}
lock (_sql) { /* HACK: Force the SyncBlock to be "created" now. */ }
}
- _functionsArray = SQLiteFunction.BindFunctions(this, connectionFlags);
+
+ // Bind functions to this connection. If any previous functions of the same name
+ // were already bound, then the new bindings replace the old.
+ if ((connectionFlags & SQLiteConnectionFlags.NoFunctions) != SQLiteConnectionFlags.NoFunctions)
+ _functionsArray = SQLiteFunction.BindFunctions(this, connectionFlags);
+
SetTimeout(0);
GC.KeepAlive(_sql);
}
internal override void Bind_DateTime(SQLiteStatement stmt, SQLiteConnectionFlags flags, int index, DateTime dt)
Index: System.Data.SQLite/SQLiteBase.cs
==================================================================
--- System.Data.SQLite/SQLiteBase.cs
+++ System.Data.SQLite/SQLiteBase.cs
@@ -74,13 +74,15 @@
/// Shutdown the SQLite engine so that it can be restarted with different config options.
/// We depend on auto initialization to recover.
///
internal abstract SQLiteErrorCode Shutdown();
///
- /// Returns non-zero if a database connection is open.
+ /// Determines if the associated native connection handle is open.
///
- ///
+ ///
+ /// Non-zero if a database connection is open.
+ ///
internal abstract bool IsOpen();
///
/// Opens a database.
///
///
@@ -147,10 +149,15 @@
/// 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
internal abstract SQLiteErrorCode Reset(SQLiteStatement stmt);
+
+ ///
+ /// Attempts to interrupt the query currently executing on the associated
+ /// native database connection.
+ ///
internal abstract void Cancel();
internal abstract void Bind_Double(SQLiteStatement stmt, SQLiteConnectionFlags flags, int index, double value);
internal abstract void Bind_Int32(SQLiteStatement stmt, SQLiteConnectionFlags flags, int index, Int32 value);
internal abstract void Bind_UInt32(SQLiteStatement stmt, SQLiteConnectionFlags flags, int index, UInt32 value);
@@ -896,10 +903,16 @@
/// Prevent this object instance from
/// creating virtual table modules.
///
NoCreateModule = 0x400,
+ ///
+ /// Skip adding the any functions provided by other managed assemblies
+ /// when opening the connection.
+ ///
+ NoFunctions = 0x800,
+
///
/// When binding and returning column values, always treat them as though
/// they were plain text (i.e. no numeric, date/time, or other conversions
/// should be attempted).
///
Index: System.Data.SQLite/SQLiteConvert.cs
==================================================================
--- System.Data.SQLite/SQLiteConvert.cs
+++ System.Data.SQLite/SQLiteConvert.cs
@@ -1086,10 +1086,11 @@
new SQLiteDbTypeMapping("BIT", DbType.Boolean, true),
new SQLiteDbTypeMapping("BLOB", DbType.Binary, true),
new SQLiteDbTypeMapping("BOOL", DbType.Boolean, false),
new SQLiteDbTypeMapping("BOOLEAN", DbType.Boolean, false),
new SQLiteDbTypeMapping("CHAR", DbType.AnsiStringFixedLength, true),
+ new SQLiteDbTypeMapping("CLOB", DbType.String, false),
new SQLiteDbTypeMapping("COUNTER", DbType.Int64, false),
new SQLiteDbTypeMapping("CURRENCY", DbType.Decimal, false),
new SQLiteDbTypeMapping("DATE", DbType.DateTime, false),
new SQLiteDbTypeMapping("DATETIME", DbType.DateTime, true),
new SQLiteDbTypeMapping("DECIMAL", DbType.Decimal, true),
@@ -1117,13 +1118,15 @@
new SQLiteDbTypeMapping("MEMO", DbType.String, false),
new SQLiteDbTypeMapping("MONEY", DbType.Decimal, false),
new SQLiteDbTypeMapping("NCHAR", DbType.StringFixedLength, true),
new SQLiteDbTypeMapping("NOTE", DbType.String, false),
new SQLiteDbTypeMapping("NTEXT", DbType.String, false),
+ new SQLiteDbTypeMapping("NUMBER", DbType.Decimal, false),
new SQLiteDbTypeMapping("NUMERIC", DbType.Decimal, false),
new SQLiteDbTypeMapping("NVARCHAR", DbType.String, true),
new SQLiteDbTypeMapping("OLEOBJECT", DbType.Binary, false),
+ new SQLiteDbTypeMapping("RAW", DbType.Binary, false),
new SQLiteDbTypeMapping("REAL", DbType.Double, true),
new SQLiteDbTypeMapping("SINGLE", DbType.Single, true),
new SQLiteDbTypeMapping("SMALLDATE", DbType.DateTime, false),
new SQLiteDbTypeMapping("SMALLINT", DbType.Int16, true),
new SQLiteDbTypeMapping("SMALLUINT", DbType.UInt16, true),
@@ -1145,10 +1148,11 @@
new SQLiteDbTypeMapping("UNSIGNEDINTEGER16", DbType.UInt16, false),
new SQLiteDbTypeMapping("UNSIGNEDINTEGER32", DbType.UInt32, false),
new SQLiteDbTypeMapping("UNSIGNEDINTEGER64", DbType.UInt64, false),
new SQLiteDbTypeMapping("VARBINARY", DbType.Binary, false),
new SQLiteDbTypeMapping("VARCHAR", DbType.AnsiString, true),
+ new SQLiteDbTypeMapping("VARCHAR2", DbType.AnsiString, false),
new SQLiteDbTypeMapping("YESNO", DbType.Boolean, false)
});
}
///
Index: System.Data.SQLite/SQLiteFunction.cs
==================================================================
--- System.Data.SQLite/SQLiteFunction.cs
+++ System.Data.SQLite/SQLiteFunction.cs
@@ -466,11 +466,11 @@
//
// NOTE: This must be done to prevent the core SQLite library from
// using our (invalid) result.
//
- if (_base != null)
+ if ((_base != null) && _base.IsOpen())
_base.Cancel();
return 0;
}
@@ -513,11 +513,11 @@
//
// NOTE: This must be done to prevent the core SQLite library from
// using our (invalid) result.
//
- if (_base != null)
+ if ((_base != null) && _base.IsOpen())
_base.Cancel();
return 0;
}
Index: System.Data.SQLite/SQLiteModule.cs
==================================================================
--- System.Data.SQLite/SQLiteModule.cs
+++ System.Data.SQLite/SQLiteModule.cs
@@ -5878,10 +5878,34 @@
#endregion
///////////////////////////////////////////////////////////////////////
#region Function Declaration Helper Methods
+ ///
+ /// 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.
+ ///
protected virtual SQLiteErrorCode DeclareFunction(
SQLiteConnection connection,
int argumentCount,
string name,
ref string error
Index: Tests/basic.eagle
==================================================================
--- Tests/basic.eagle
+++ Tests/basic.eagle
@@ -1459,17 +1459,17 @@
###############################################################################
runTest {test data-1.27 {VARCHAR / NVARCHAR types with spaces} -body {
list [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
- TypeNameToDbType "VARCHAR"] \
+ TypeNameToDbType VARCHAR] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ TypeNameToDbType NVARCHAR] \
[object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
- TypeNameToDbType "NVARCHAR"] \
+ TypeNameToDbType VARCHAR(1)] \
[object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
- TypeNameToDbType "VARCHAR(1)"] \
- [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
- TypeNameToDbType "NVARCHAR(1)"] \
+ TypeNameToDbType NVARCHAR(1)] \
[object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
TypeNameToDbType "VARCHAR (1)"] \
[object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
TypeNameToDbType "NVARCHAR (1)"] \
} -constraints {eagle System.Data.SQLite} -result \
ADDED Tests/tkt-fe50b8c2e8.eagle
Index: Tests/tkt-fe50b8c2e8.eagle
==================================================================
--- /dev/null
+++ Tests/tkt-fe50b8c2e8.eagle
@@ -0,0 +1,46 @@
+###############################################################################
+#
+# tkt-fe50b8c2e8.eagle --
+#
+# Written by Joe Mistachkin.
+# Released to the public domain, use at your own risk!
+#
+###############################################################################
+
+package require Eagle
+package require Eagle.Library
+package require Eagle.Test
+
+runTestPrologue
+
+###############################################################################
+
+package require System.Data.SQLite.Test
+runSQLiteTestPrologue
+
+###############################################################################
+
+runTest {test tkt-fe50b8c2e8-1.1 {compatibility data types} -body {
+ list [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ TypeNameToDbType VARCHAR2] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ TypeNameToDbType CLOB] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ TypeNameToDbType NUMBER] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ TypeNameToDbType RAW] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ DbTypeToTypeName AnsiString] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ DbTypeToTypeName String] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ DbTypeToTypeName Decimal] \
+ [object invoke -flags +NonPublic System.Data.SQLite.SQLiteConvert \
+ DbTypeToTypeName Binary]
+} -constraints {eagle System.Data.SQLite} -result \
+{AnsiString String Decimal Binary VARCHAR NVARCHAR DECIMAL BLOB}}
+
+###############################################################################
+
+runSQLiteTestEpilogue
+runTestEpilogue
Index: Tests/vtab.eagle
==================================================================
--- Tests/vtab.eagle
+++ Tests/vtab.eagle
@@ -19,11 +19,11 @@
runSQLiteTestPrologue
###############################################################################
runTest {test vtab-1.1 {basic virtual table support} -setup {
- setupDb [set fileName vtab-1.1.db]
+ set fileName vtab-1.1.db
} -body {
set id [object invoke Interpreter.GetActive NextId]
set dataSource [file join [getDatabaseDirectory] $fileName]
set sql { \
@@ -98,20 +98,20 @@
object invoke _Dynamic${id}.Test${id} Main
} result] : [set result ""]}] $result
} -cleanup {
cleanupDb $fileName
- unset -nocomplain result code results errors sql dataSource id db fileName
+ unset -nocomplain result code results errors sql dataSource id fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite\
defineConstant.System.Data.SQLite.INTEROP_VIRTUAL_TABLE} -match regexp -result \
{^Ok System#CodeDom#Compiler#CompilerResults#\d+ \{\} 0 \{\}$}}
###############################################################################
runTest {test vtab-1.2 {IEnumerable virtual table} -setup {
- setupDb [set fileName vtab-1.2.db]
+ set fileName vtab-1.2.db
} -body {
set id [object invoke Interpreter.GetActive NextId]
set dataSource [file join [getDatabaseDirectory] $fileName]
set sql(1) { \
@@ -203,11 +203,11 @@
object invoke _Dynamic${id}.Test${id} GetList one two three 4 5.0
} result] : [set result ""]}] $result
} -cleanup {
cleanupDb $fileName
- unset -nocomplain result code results errors sql dataSource id db fileName
+ unset -nocomplain result code results errors sql dataSource id fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite\
defineConstant.System.Data.SQLite.INTEROP_VIRTUAL_TABLE} -match regexp -result \
[string map [list \n \r\n] {^Ok System#CodeDom#Compiler#CompilerResults#\d+\
\{\} 0 \{one two three 4 5.0 Error \{SQL logic error or missing database
@@ -214,11 +214,11 @@
virtual table "t\d+" is read-only\}\}$}]}
###############################################################################
runTest {test vtab-1.3 {IEnumerable virtual table} -setup {
- setupDb [set fileName vtab-1.3.db]
+ set fileName vtab-1.3.db
} -body {
set id [object invoke Interpreter.GetActive NextId]
set dataSource [file join [getDatabaseDirectory] $fileName]
set sql(1) { \
@@ -311,11 +311,11 @@
object invoke _Dynamic${id}.Test${id} GetList 1 2 3 4 5
} result] : [set result ""]}] $result
} -cleanup {
cleanupDb $fileName
- unset -nocomplain result code results errors sql dataSource id db fileName
+ unset -nocomplain result code results errors sql dataSource id fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite\
defineConstant.System.Data.SQLite.INTEROP_VIRTUAL_TABLE} -match regexp -result \
[string map [list \n \r\n] {^Ok System#CodeDom#Compiler#CompilerResults#\d+\
\{\} 0 \{1 2 3 4 5 Error \{SQL logic error or missing database
@@ -322,11 +322,264 @@
virtual table "t\d+" is read-only\}\}$}]}
###############################################################################
runTest {test vtab-1.4 {virtual table function support} -setup {
- setupDb [set fileName vtab-1.4.db]
+ set fileName vtab-1.4.db
+} -body {
+ set id [object invoke Interpreter.GetActive NextId]
+ set dataSource [file join [getDatabaseDirectory] $fileName]
+
+ set sql(1) { \
+ CREATE VIRTUAL TABLE t${id} USING mod${id}; \
+ }
+
+ set sql(2) { \
+ SELECT Base64(x, CAST('one' AS BLOB)) FROM t${id}; \
+ }
+
+ set sql(3) { \
+ SELECT Base64(x, CAST('one' AS BLOB), 'two') FROM t${id}; \
+ }
+
+ set sql(4) { \
+ SELECT Base65(x, CAST('one' AS BLOB)) FROM t${id}; \
+ }
+
+ unset -nocomplain results errors
+
+ set code [compileCSharpWith [subst {
+ using System;
+ using System.Data.SQLite;
+ using Eagle._Containers.Public;
+
+ namespace _Dynamic${id}
+ {
+ public class SQLiteFunction${id} : SQLiteFunction
+ {
+ public SQLiteFunction${id}()
+ : base(SQLiteDateFormats.Default, DateTimeKind.Unspecified,
+ null, false)
+ {
+ // do nothing.
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+
+ public override object Invoke(
+ object\[\] args
+ )
+ {
+ if (args == null)
+ return null;
+
+ if (args.Length != 2)
+ return new ArgumentException(String.Format(
+ "need exactly two arguments, got {0}", args.Length));
+
+ object arg = args\[1\];
+
+ if (arg == null)
+ return String.Empty;
+
+ Type type = arg.GetType();
+
+ if (type == typeof(DBNull))
+ return String.Empty;
+
+ if (type != typeof(byte\[\]))
+ return new ArgumentException(String.Format(
+ "argument must be byte array, got {0}", type));
+
+ return Convert.ToBase64String((byte\[\]) arg);
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+
+ public sealed class SQLiteModuleTest${id} : SQLiteModuleNoop
+ {
+ public SQLiteModuleTest${id}(string name)
+ : base(name)
+ {
+ // do nothing.
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+
+ public override SQLiteErrorCode Create(
+ SQLiteConnection connection,
+ IntPtr pClientData,
+ string\[\] arguments,
+ ref SQLiteVirtualTable table,
+ ref string error
+ )
+ {
+ SQLiteErrorCode rc = DeclareTable(
+ connection, "CREATE TABLE ignored(x);", ref error);
+
+ if (rc != SQLiteErrorCode.Ok)
+ return rc;
+
+ rc = DeclareFunction(connection, -1, "Base64", ref error);
+
+ if (rc != SQLiteErrorCode.Ok)
+ return rc;
+
+ table = new SQLiteVirtualTable(arguments);
+ return SQLiteErrorCode.Ok;
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+
+ public override SQLiteErrorCode Open(
+ SQLiteVirtualTable table,
+ ref SQLiteVirtualTableCursor cursor
+ )
+ {
+ cursor = new SQLiteVirtualTableCursor(table);
+ return SQLiteErrorCode.Ok;
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+
+ public override bool FindFunction(
+ SQLiteVirtualTable table,
+ int argumentCount,
+ string name,
+ ref SQLiteFunction function,
+ ref IntPtr pClientData
+ )
+ {
+ if (argumentCount != 2)
+ {
+ SetTableError(table, String.Format(
+ "no \\"{0}\\" functions accept {1} argument(s)",
+ base.Name, argumentCount));
+
+ return false;
+ }
+
+ if (!String.Equals(name, "Base64",
+ StringComparison.OrdinalIgnoreCase))
+ {
+ SetTableError(table, String.Format(
+ "no \\"{0}\\" functions are named \\"{1}\\"",
+ base.Name, name));
+
+ return false;
+ }
+
+ function = new SQLiteFunction${id}();
+ return true;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////
+
+ public static class Test${id}
+ {
+ public static StringList GetList()
+ {
+ StringList result = new StringList();
+
+ using (SQLiteConnection connection = new SQLiteConnection(
+ "Data Source=${dataSource};Flags=NoFunctions;"))
+ {
+ connection.Open();
+ connection.CreateModule(new SQLiteModuleTest${id}("mod${id}"));
+
+ try
+ {
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText = "[subst ${sql(1)}]";
+ result.Add(String.Format("{0}", command.ExecuteScalar()));
+ }
+ }
+ catch (Exception e)
+ {
+ result.Add(e.Message);
+ }
+
+ try
+ {
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText = "[subst ${sql(2)}]";
+ result.Add(String.Format("{0}", command.ExecuteScalar()));
+ }
+ }
+ catch (Exception e)
+ {
+ result.Add(e.Message);
+ }
+
+ try
+ {
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText = "[subst ${sql(3)}]";
+ result.Add(String.Format("{0}", command.ExecuteScalar()));
+ }
+ }
+ catch (Exception e)
+ {
+ result.Add(e.Message);
+ }
+
+ try
+ {
+ using (SQLiteCommand command = connection.CreateCommand())
+ {
+ command.CommandText = "[subst ${sql(4)}]";
+ result.Add(String.Format("{0}", command.ExecuteScalar()));
+ }
+ }
+ catch (Exception e)
+ {
+ result.Add(e.Message);
+ }
+
+ connection.Close();
+ }
+
+ return result;
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+
+ public static void Main()
+ {
+ // do nothing.
+ }
+ }
+ }
+ }] true true true results errors [list System.Data.SQLite.dll Eagle.dll]]
+
+ list $code $results \
+ [expr {[info exists errors] ? $errors : ""}] \
+ [expr {$code eq "Ok" ? [catch {
+ object invoke _Dynamic${id}.Test${id} GetList
+ } result] : [set result ""]}] $result
+} -cleanup {
+ cleanupDb $fileName
+
+ unset -nocomplain result code results errors sql dataSource id fileName
+} -constraints \
+{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite\
+defineConstant.System.Data.SQLite.INTEROP_VIRTUAL_TABLE} -match regexp -result \
+[string map [list \n \r\n] {^Ok System#CodeDom#Compiler#CompilerResults#\d+\
+\{\} 0 \{\{\} b25l \{SQL logic error or missing database
+unable to use function Base64 in the requested context\} \{SQL logic error or\
+missing database
+no such function: Base65\}\}$}]}
+
+###############################################################################
+
+runTest {test vtab-1.5 {virtual table function support} -setup {
+ set fileName vtab-1.5.db
} -body {
set id [object invoke Interpreter.GetActive NextId]
set dataSource [file join [getDatabaseDirectory] $fileName]
set sql(1) { \
@@ -562,19 +815,19 @@
object invoke _Dynamic${id}.Test${id} GetList
} result] : [set result ""]}] $result
} -cleanup {
cleanupDb $fileName
- unset -nocomplain result code results errors sql dataSource id db fileName
+ unset -nocomplain result code results errors sql dataSource id fileName
} -constraints \
{eagle monoBug28 command.sql compile.DATA SQLite System.Data.SQLite\
defineConstant.System.Data.SQLite.INTEROP_VIRTUAL_TABLE} -match regexp -result \
[string map [list \n \r\n] {^Ok System#CodeDom#Compiler#CompilerResults#\d+\
\{\} 0 \{\{\} b25l \{SQL logic error or missing database
-unable to use function Base64 in the requested context\} \{SQL logic error or\
-missing database
+(?:unable to use function Base64 in the requested context|need exactly one\
+argument, got 3)\} \{SQL logic error or missing database
no such function: Base65\}\}$}]}
###############################################################################
runSQLiteTestEpilogue
runTestEpilogue
Index: readme.htm
==================================================================
--- readme.htm
+++ readme.htm
@@ -191,10 +191,12 @@
- Add all the necessary infrastructure to allow virtual tables to be implemented in managed code. Fix for [9a544991be].
- The DbType to type name translation needs to prioritize the Entity Framework type names. Fix for [47f4bac575].
- Add DateTimeFormatString connection string property to allow the DateTime format string used for all parsing and formatting to be overridden.
+ - Add NoFunctions connection flag to skip binding functions registered in the application domain.
+ - Add several data-types for compatibility purposes. Fix for [fe50b8c2e8].
- When reading a DateTime value, avoid unnecessary string conversions. Fix for [4d87fbc742].
- Modify the index introspection code so that it does not treat PRAGMA table_info "pk" column values as boolean. Fix for [f2c47a01eb].
- Disable use of the new connection string parsing algorithm when the No_SQLiteConnectionNewParser environment variable is set. Pursuant to [bbdda6eae2].
- Rename the ReturnCode property of the SQLiteException class to ResultCode. ** Potentially Incompatible Change **
Index: www/news.wiki
==================================================================
--- www/news.wiki
+++ www/news.wiki
@@ -7,10 +7,12 @@
- Add all the necessary infrastructure to allow virtual tables to be implemented in managed code. Fix for [9a544991be].
- The DbType to type name translation needs to prioritize the Entity Framework type names. Fix for [47f4bac575].
- Add DateTimeFormatString connection string property to allow the DateTime format string used for all parsing and formatting to be overridden.
+ - Add NoFunctions connection flag to skip binding functions registered in the application domain.
+ - Add several data-types for compatibility purposes. Fix for [fe50b8c2e8].
- When reading a DateTime value, avoid unnecessary string conversions. Fix for [4d87fbc742].
- Modify the index introspection code so that it does not treat PRAGMA table_info "pk" column values as boolean. Fix for [f2c47a01eb].
- Disable use of the new connection string parsing algorithm when the No_SQLiteConnectionNewParser environment variable is set. Pursuant to [bbdda6eae2].
- Rename the ReturnCode property of the SQLiteException class to ResultCode. ** Potentially Incompatible Change **