Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add support for extra diagnostics in the native interop assembly when compiled in the debug build configuration. Fix several tests to account for recent changes to the setupDb and cleanupDb test suite infrastructure procedures. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e8a0cf1336929125591fea5a3cb32d93 |
User & Date: | mistachkin 2012-10-08 09:11:50.255 |
Context
2012-10-08
| ||
12:17 | Simplify implementation and usage of the getAppDomainPreamble test suite infrastructure procedure. check-in: a6e4e7b517 user: mistachkin tags: trunk | |
09:11 | Add support for extra diagnostics in the native interop assembly when compiled in the debug build configuration. Fix several tests to account for recent changes to the setupDb and cleanupDb test suite infrastructure procedures. check-in: e8a0cf1336 user: mistachkin tags: trunk | |
2012-10-07
| ||
03:41 | Update Eagle in externals to the latest trunk. Always specify the stack size for threads created by the test suite. Allow the SQLite temporary directory used by the test suite to be easily overridden. check-in: bed252ba0c user: mistachkin tags: trunk | |
Changes
Changes to SQLite.Interop/props/SQLite.Interop.2005.vsprops.
︙ | ︙ | |||
35 36 37 38 39 40 41 | <UserMacro Name="INTEROP_RC_VERSION" Value="1,0,83,0" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_DEBUG_DEFINES" | | | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <UserMacro Name="INTEROP_RC_VERSION" Value="1,0,83,0" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_DEBUG_DEFINES" Value="INTEROP_DEBUG=3;INTEROP_TEST_EXTENSION=1" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_EXTRA_DEFINES" Value="INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1" PerformEnvironmentSet="true" /> |
︙ | ︙ |
Changes to SQLite.Interop/props/SQLite.Interop.2008.vsprops.
︙ | ︙ | |||
35 36 37 38 39 40 41 | <UserMacro Name="INTEROP_RC_VERSION" Value="1,0,83,0" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_DEBUG_DEFINES" | | | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <UserMacro Name="INTEROP_RC_VERSION" Value="1,0,83,0" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_DEBUG_DEFINES" Value="INTEROP_DEBUG=3;INTEROP_TEST_EXTENSION=1" PerformEnvironmentSet="true" /> <UserMacro Name="INTEROP_EXTRA_DEFINES" Value="INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1" PerformEnvironmentSet="true" /> |
︙ | ︙ |
Changes to SQLite.Interop/props/SQLite.Interop.2010.props.
︙ | ︙ | |||
10 11 12 13 14 15 16 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup Label="UserMacros"> <ConfigurationYear>2010</ConfigurationYear> <INTEROP_BUILD_NUMBER>083</INTEROP_BUILD_NUMBER> <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION> <INTEROP_MANIFEST_VERSION>1.0.83.0</INTEROP_MANIFEST_VERSION> <INTEROP_RC_VERSION>1,0,83,0</INTEROP_RC_VERSION> | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup Label="UserMacros"> <ConfigurationYear>2010</ConfigurationYear> <INTEROP_BUILD_NUMBER>083</INTEROP_BUILD_NUMBER> <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION> <INTEROP_MANIFEST_VERSION>1.0.83.0</INTEROP_MANIFEST_VERSION> <INTEROP_RC_VERSION>1,0,83,0</INTEROP_RC_VERSION> <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=3;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES> <INTEROP_EXTRA_DEFINES>INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1</INTEROP_EXTRA_DEFINES> <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES> <INTEROP_KEY_FILE>$(ProjectDir)..\System.Data.SQLite\System.Data.SQLite.snk</INTEROP_KEY_FILE> <INTEROP_NATIVE_NAME>SQLite.Interop</INTEROP_NATIVE_NAME> <INTEROP_MIXED_NAME>System.Data.SQLite</INTEROP_MIXED_NAME> </PropertyGroup> <ItemGroup> |
︙ | ︙ |
Changes to SQLite.Interop/props/SQLite.Interop.2012.props.
︙ | ︙ | |||
10 11 12 13 14 15 16 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup Label="UserMacros"> <ConfigurationYear>2012</ConfigurationYear> <INTEROP_BUILD_NUMBER>083</INTEROP_BUILD_NUMBER> <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION> <INTEROP_MANIFEST_VERSION>1.0.83.0</INTEROP_MANIFEST_VERSION> <INTEROP_RC_VERSION>1,0,83,0</INTEROP_RC_VERSION> | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup Label="UserMacros"> <ConfigurationYear>2012</ConfigurationYear> <INTEROP_BUILD_NUMBER>083</INTEROP_BUILD_NUMBER> <INTEROP_LINKER_VERSION>1.0</INTEROP_LINKER_VERSION> <INTEROP_MANIFEST_VERSION>1.0.83.0</INTEROP_MANIFEST_VERSION> <INTEROP_RC_VERSION>1,0,83,0</INTEROP_RC_VERSION> <INTEROP_DEBUG_DEFINES>INTEROP_DEBUG=3;INTEROP_TEST_EXTENSION=1</INTEROP_DEBUG_DEFINES> <INTEROP_EXTRA_DEFINES>INTEROP_EXTENSION_FUNCTIONS=1;INTEROP_CODEC=1</INTEROP_EXTRA_DEFINES> <INTEROP_ASSEMBLY_RESOURCES>/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp /ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp</INTEROP_ASSEMBLY_RESOURCES> <INTEROP_KEY_FILE>$(ProjectDir)..\System.Data.SQLite\System.Data.SQLite.snk</INTEROP_KEY_FILE> <INTEROP_NATIVE_NAME>SQLite.Interop</INTEROP_NATIVE_NAME> <INTEROP_MIXED_NAME>System.Data.SQLite</INTEROP_MIXED_NAME> </PropertyGroup> <ItemGroup> |
︙ | ︙ |
Changes to SQLite.Interop/src/win/interop.c.
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | extern int RegisterExtensionFunctions(sqlite3 *db); #endif #ifdef SQLITE_OS_WIN #if defined(INTEROP_CODEC) #include "crypt.c" #endif typedef void (*SQLITEUSERFUNC)(sqlite3_context *, int, sqlite3_value **); typedef void (*SQLITEFUNCFINAL)(sqlite3_context *); #if SQLITE_VERSION_NUMBER < 3007014 SQLITE_PRIVATE void * sqlite3DbMallocZero_interop(sqlite3 *db, int n) { void *p; if (db) { sqlite3_mutex_enter(db->mutex); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | extern int RegisterExtensionFunctions(sqlite3 *db); #endif #ifdef SQLITE_OS_WIN #if defined(INTEROP_CODEC) #include "crypt.c" #endif #define INTEROP_DEBUG_NONE (0x00) #define INTEROP_DEBUG_CLOSE (0x01) #define INTEROP_DEBUG_FINALIZE (0x02) #define INTEROP_DEBUG_OPEN (0x04) #define INTEROP_DEBUG_OPEN16 (0x08) #define INTEROP_DEBUG_PREPARE (0x10) #define INTEROP_DEBUG_PREPARE16 (0x20) #define INTEROP_DEBUG_RESET (0x40) typedef void (*SQLITEUSERFUNC)(sqlite3_context *, int, sqlite3_value **); typedef void (*SQLITEFUNCFINAL)(sqlite3_context *); #if defined(INTEROP_DEBUG) SQLITE_PRIVATE void sqlite3InteropDebug(const char *zFormat, ...){ va_list ap; /* Vararg list */ StrAccum acc; /* String accumulator */ char zMsg[SQLITE_PRINT_BUF_SIZE*3]; /* Complete log message */ va_start(ap, zFormat); sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0); acc.useMalloc = 0; sqlite3VXPrintf(&acc, 0, zFormat, ap); va_end(ap); #if SQLITE_VERSION_NUMBER >= 3007013 sqlite3_win32_write_debug(sqlite3StrAccumFinish(&acc), -1); #elif defined(SQLITE_WIN32_HAS_ANSI) OutputDebugStringA(sqlite3StrAccumFinish(&acc)); #elif defined(SQLITE_WIN32_HAS_WIDE) { LPWSTR zWideMsg = utf8ToUnicode(sqlite3StrAccumFinish(&acc)); if( zWideMsg ){ OutputDebugStringW(zWideMsg); sqlite3_free(zWideMsg); } } #else fprintf(stderr, "%s", sqlite3StrAccumFinish(&acc)); #endif } #endif #if SQLITE_VERSION_NUMBER < 3007014 SQLITE_PRIVATE void * sqlite3DbMallocZero_interop(sqlite3 *db, int n) { void *p; if (db) { sqlite3_mutex_enter(db->mutex); |
︙ | ︙ | |||
62 63 64 65 66 67 68 69 | their memory is freed and can be used for something else. The GC thread could potentially try and call finalize again on the statement after that memory was deallocated. BAD. So, what we need to do is make a copy of each statement, and call finalize() on the copy -- so that the original statement's memory is preserved, and marked as BAD, but we can still manage to finalize everything and forcibly close the database. Later when the GC gets around to calling finalize_interop() on the "bad" statement, we detect that and finish deallocating the pointer. */ SQLITE_API int WINAPI sqlite3_close_interop(sqlite3 *db) { #if SQLITE_VERSION_NUMBER >= 3007014 | > > > > > > | > > > > > > | | 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | their memory is freed and can be used for something else. The GC thread could potentially try and call finalize again on the statement after that memory was deallocated. BAD. So, what we need to do is make a copy of each statement, and call finalize() on the copy -- so that the original statement's memory is preserved, and marked as BAD, but we can still manage to finalize everything and forcibly close the database. Later when the GC gets around to calling finalize_interop() on the "bad" statement, we detect that and finish deallocating the pointer. */ SQLITE_API int WINAPI sqlite3_close_interop(sqlite3 *db) { int ret; #if SQLITE_VERSION_NUMBER >= 3007014 #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_CLOSE) sqlite3InteropDebug("sqlite3_close_interop(): calling sqlite3_close_v2(%p)...\n", db); #endif ret = sqlite3_close_v2(db); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_CLOSE) sqlite3InteropDebug("sqlite3_close_interop(): sqlite3_close_v2(%p) returned %d.\n", db, ret); #endif return ret; #else ret = sqlite3_close(db); if (ret == SQLITE_BUSY) { sqlite3_mutex_enter(db->mutex); if (!db->pVdbe) { |
︙ | ︙ | |||
123 124 125 126 127 128 129 130 131 132 133 | return ret; #endif } SQLITE_API int WINAPI sqlite3_open_interop(const char*filename, int flags, sqlite3 **ppdb) { int ret; ret = sqlite3_open_v2(filename, ppdb, flags, NULL); #if defined(INTEROP_EXTENSION_FUNCTIONS) | > > > > > > > > | > > > > > > | | > > > | | | | > > > > > > > > > > > > > > > > > > | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | return ret; #endif } SQLITE_API int WINAPI sqlite3_open_interop(const char*filename, int flags, sqlite3 **ppdb) { int ret; #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_OPEN) sqlite3InteropDebug("sqlite3_open_interop(): calling sqlite3_open_v2(\"%s\", %d, %p)...\n", filename, flags, ppdb); #endif ret = sqlite3_open_v2(filename, ppdb, flags, NULL); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_OPEN) sqlite3InteropDebug("sqlite3_open_interop(): sqlite3_open_v2(\"%s\", %d, %p) returned %d.\n", filename, flags, ppdb, ret); #endif #if defined(INTEROP_EXTENSION_FUNCTIONS) if (ret == SQLITE_OK) RegisterExtensionFunctions(*ppdb); #endif return ret; } SQLITE_API int WINAPI sqlite3_open16_interop(const char *filename, int flags, sqlite3 **ppdb) { int ret; #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_OPEN16) sqlite3InteropDebug("sqlite3_open16_interop(): calling sqlite3_open_interop(\"%s\", %d, %p)...\n", filename, flags, ppdb); #endif ret = sqlite3_open_interop(filename, flags, ppdb); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_OPEN16) sqlite3InteropDebug("sqlite3_open16_interop(): sqlite3_open_interop(\"%s\", %d, %p) returned %d.\n", filename, flags, ppdb, ret); #endif if ((ret == SQLITE_OK) && !DbHasProperty(*ppdb, 0, DB_SchemaLoaded)) ENC(*ppdb) = SQLITE_UTF16NATIVE; return ret; } SQLITE_API const char * WINAPI sqlite3_errmsg_interop(sqlite3 *db, int *plen) { const char *pval = sqlite3_errmsg(db); *plen = (pval != 0) ? strlen(pval) : 0; return pval; } SQLITE_API int WINAPI sqlite3_prepare_interop(sqlite3 *db, const char *sql, int nbytes, sqlite3_stmt **ppstmt, const char **pztail, int *plen) { int n; #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_PREPARE) sqlite3InteropDebug("sqlite3_prepare_interop(): calling sqlite3_prepare(%p, \"%s\", %d, %p)...\n", db, sql, nbytes, ppstmt); #endif n = sqlite3_prepare(db, sql, nbytes, ppstmt, pztail); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_PREPARE) sqlite3InteropDebug("sqlite3_prepare_interop(): sqlite3_prepare(%p, \"%s\", %d, %p) returned %d.\n", db, sql, nbytes, ppstmt, n); #endif *plen = (*pztail != 0) ? strlen(*pztail) : 0; return n; } SQLITE_API int WINAPI sqlite3_prepare16_interop(sqlite3 *db, const void *sql, int nchars, sqlite3_stmt **ppstmt, const void **pztail, int *plen) { int n; #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_PREPARE16) sqlite3InteropDebug("sqlite3_prepare_interop(): calling sqlite3_prepare16(%p, \"%s\", %d, %p)...\n", db, sql, nchars, ppstmt); #endif n = sqlite3_prepare16(db, sql, nchars * sizeof(wchar_t), ppstmt, pztail); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_PREPARE16) sqlite3InteropDebug("sqlite3_prepare_interop(): sqlite3_prepare16(%p, \"%s\", %d, %p) returned %d.\n", db, sql, nchars, ppstmt, n); #endif *plen = (*pztail != 0) ? wcslen((wchar_t *)*pztail) * sizeof(wchar_t) : 0; return n; } SQLITE_API int WINAPI sqlite3_bind_double_interop(sqlite3_stmt *stmt, int iCol, double *val) { |
︙ | ︙ | |||
243 244 245 246 247 248 249 250 | const void *pval = sqlite3_column_text16(stmt, iCol); *plen = (pval != 0) ? wcslen((wchar_t *)pval) * sizeof(wchar_t): 0; return pval; } SQLITE_API int WINAPI sqlite3_finalize_interop(sqlite3_stmt *stmt) { #if SQLITE_VERSION_NUMBER >= 3007014 | > > > > > > | > > > > > > | 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | const void *pval = sqlite3_column_text16(stmt, iCol); *plen = (pval != 0) ? wcslen((wchar_t *)pval) * sizeof(wchar_t): 0; return pval; } SQLITE_API int WINAPI sqlite3_finalize_interop(sqlite3_stmt *stmt) { int ret; #if SQLITE_VERSION_NUMBER >= 3007014 #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_FINALIZE) sqlite3InteropDebug("sqlite3_finalize_interop(): calling sqlite3_finalize(%p)...\n", stmt); #endif ret = sqlite3_finalize(stmt); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_FINALIZE) sqlite3InteropDebug("sqlite3_finalize_interop(): sqlite3_finalize(%p) returned %d.\n", stmt, ret); #endif return ret; #else Vdbe *p; int ret = SQLITE_OK; p = (Vdbe *)stmt; if (p) { |
︙ | ︙ | |||
276 277 278 279 280 281 282 283 | return ret; #endif } SQLITE_API int WINAPI sqlite3_reset_interop(sqlite3_stmt *stmt) { #if SQLITE_VERSION_NUMBER >= 3007014 | > > > > > > | | > > | > > | | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 | return ret; #endif } SQLITE_API int WINAPI sqlite3_reset_interop(sqlite3_stmt *stmt) { int ret; #if SQLITE_VERSION_NUMBER >= 3007014 #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_RESET) sqlite3InteropDebug("sqlite3_reset_interop(): calling sqlite3_reset(%p)...\n", stmt); #endif ret = sqlite3_reset(stmt); #if defined(INTEROP_DEBUG) && (INTEROP_DEBUG & INTEROP_DEBUG_RESET) sqlite3InteropDebug("sqlite3_reset_interop(): sqlite3_reset(%p) returned %d.\n", stmt, ret); #endif return ret; #else if (((Vdbe *)stmt)->magic == VDBE_MAGIC_DEAD) return SQLITE_SCHEMA; ret = sqlite3_reset(stmt); return ret; #endif } SQLITE_API int WINAPI sqlite3_create_function_interop(sqlite3 *psql, const char *zFunctionName, int nArg, int eTextRep, void *pvUser, SQLITEUSERFUNC func, SQLITEUSERFUNC funcstep, SQLITEFUNCFINAL funcfinal, int needCollSeq) { int n; if (eTextRep == SQLITE_UTF16) eTextRep = SQLITE_UTF16NATIVE; n = sqlite3_create_function(psql, zFunctionName, nArg, eTextRep, 0, func, funcstep, funcfinal); if (n == SQLITE_OK) { if (needCollSeq) { FuncDef *pFunc = sqlite3FindFunction(psql, zFunctionName, strlen(zFunctionName), nArg, eTextRep, 0); if( pFunc ) { pFunc->flags |= SQLITE_FUNC_NEEDCOLL; |
︙ | ︙ | |||
486 487 488 489 490 491 492 | } SQLITE_API int WINAPI sqlite3_cursor_rowid(sqlite3_stmt *pstmt, int cursor, sqlite_int64 *prowid) { Vdbe *p = (Vdbe *)pstmt; sqlite3 *db = (p == NULL) ? NULL : p->db; VdbeCursor *pC; | | | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 | } SQLITE_API int WINAPI sqlite3_cursor_rowid(sqlite3_stmt *pstmt, int cursor, sqlite_int64 *prowid) { Vdbe *p = (Vdbe *)pstmt; sqlite3 *db = (p == NULL) ? NULL : p->db; VdbeCursor *pC; int ret = SQLITE_OK; sqlite3_mutex_enter(db->mutex); while (1) { if (cursor < 0 || cursor >= p->nCursor) { ret = SQLITE_ERROR; |
︙ | ︙ | |||
585 586 587 588 589 590 591 | */ SQLITE_API int interop_test_extension_init( sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi ){ SQLITE_EXTENSION_INIT2(pApi) | | < | 691 692 693 694 695 696 697 698 699 700 701 | */ SQLITE_API int interop_test_extension_init( sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi ){ SQLITE_EXTENSION_INIT2(pApi) return sqlite3_create_function(db, "interopTest", -1, SQLITE_ANY, 0, interopTestFunc, 0, 0); } #endif |
Changes to SQLite.NET.Settings.targets.
︙ | ︙ | |||
166 167 168 169 170 171 172 | built interop DLL (i.e. "SQLite.Interop.dll")? By default, this is enabled. If this is disabled, the "well-known" extension functions will be unavailable. If this is enabled, it must also be enabled via the "INTEROP_EXTENSION_FUNCTIONS=1" preprocessor define being present in the "INTEROP_EXTRA_DEFINES" macro in the build properties file: | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > | 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | built interop DLL (i.e. "SQLite.Interop.dll")? By default, this is enabled. If this is disabled, the "well-known" extension functions will be unavailable. If this is enabled, it must also be enabled via the "INTEROP_EXTENSION_FUNCTIONS=1" preprocessor define being present in the "INTEROP_EXTRA_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20YY.[vs]props" for the corresponding version(s) of Visual Studio. --> <InteropExtensionFunctions Condition="'$(InteropExtensionFunctions)' == ''">true</InteropExtensionFunctions> <!-- NOTE: Enable the test extension from the custom built interop DLL (i.e. "SQLite.Interop.dll")? By default, this is enabled only in the Debug build configuration. If this is disabled, the test extension will be unavailable. If this is enabled, it must also be enabled via the "INTEROP_TEST_EXTENSION=1" preprocessor define being present in the "INTEROP_DEBUG_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20YY.[vs]props" for the corresponding version(s) of Visual Studio. --> <InteropTestExtension Condition="'$(InteropTestExtension)' == '' And '$(Configuration)' == 'Debug'">true</InteropTestExtension> <InteropTestExtension Condition="'$(InteropTestExtension)' == '' And '$(Configuration)' != 'Debug'">false</InteropTestExtension> <!-- NOTE: Enable exposing the CryptoAPI based codec from the custom built interop DLL (i.e. "SQLite.Interop.dll")? By default, this is enabled. If this is disabled, support for encrypted databases will be unavailable. If this is enabled, it must also be enabled via the "SQLITE_HAS_CODEC=1" preprocessor define being present in the "SQLITE_EXTRA_DEFINES" macro in the build properties file: "SQLite.Interop\props\sqlite3.[vs]props" AND via the "INTEROP_CODEC=1" preprocessor define being present in the "INTEROP_EXTRA_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20YY.[vs]props" both for the corresponding version(s) of Visual Studio. --> <InteropCodec Condition="'$(InteropCodec)' == ''">true</InteropCodec> <!-- NOTE: Enable extra diagnostics from the custom built interop DLL (i.e. "SQLite.Interop.dll")? By default, this is enabled in the Debug build configuration. If this is disabled, no extra diagnostics will be emitted. If this is enabled, it must also be enabled via the "INTEROP_DEBUG=XX" preprocessor define being present in the "INTEROP_DEBUG_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20YY.[vs]props" for the corresponding version(s) of Visual Studio where the XX is an integer value that represents a combination of one or more of the following bit flags values (i.e. to enable extra diagnostics for a particular native function call): INTEROP_DEBUG_CLOSE (0x01) INTEROP_DEBUG_FINALIZE (0x02) INTEROP_DEBUG_OPEN (0x04) INTEROP_DEBUG_OPEN16 (0x08) INTEROP_DEBUG_PREPARE (0x10) INTEROP_DEBUG_PREPARE16 (0x20) INTEROP_DEBUG_RESET (0x40) --> <InteropDebug Condition="'$(InteropDebug)' == '' And '$(Configuration)' == 'Debug'">true</InteropDebug> <InteropDebug Condition="'$(InteropDebug)' == '' And '$(Configuration)' != 'Debug'">false</InteropDebug> <!-- NOTE: Enable the use of native Windows APIs, when available? By default, this is enabled. If this is disabled, all features that require the use of native Windows APIs will be unavailable. --> <UseWindows Condition="'$(UseWindows)' == ''">true</UseWindows> </PropertyGroup> |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteDefineConstants.cs.
︙ | ︙ | |||
19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #if DEBUG "DEBUG", #endif #if INTEROP_CODEC "INTEROP_CODEC", #endif #if INTEROP_EXTENSION_FUNCTIONS "INTEROP_EXTENSION_FUNCTIONS", #endif #if INTEROP_TEST_EXTENSION "INTEROP_TEST_EXTENSION", | > > > > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #if DEBUG "DEBUG", #endif #if INTEROP_CODEC "INTEROP_CODEC", #endif #if INTEROP_DEBUG "INTEROP_DEBUG", #endif #if INTEROP_EXTENSION_FUNCTIONS "INTEROP_EXTENSION_FUNCTIONS", #endif #if INTEROP_TEST_EXTENSION "INTEROP_TEST_EXTENSION", |
︙ | ︙ |
Changes to System.Data.SQLite/System.Data.SQLite.Properties.targets.
︙ | ︙ | |||
134 135 136 137 138 139 140 141 142 143 | NOTE: Enable support (in the managed assemblies) for encrypted databases using the CryptoAPI based codec? --> <PropertyGroup Condition="'$(InteropCodec)' != 'false'"> <DefineConstants>$(DefineConstants);INTEROP_CODEC</DefineConstants> </PropertyGroup> <!-- NOTE: Enable various Trace.WriteLine statements included in the code, based on several criteria (see the "SQLite.NET.Settings.targets" | > > > > > > > > | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | NOTE: Enable support (in the managed assemblies) for encrypted databases using the CryptoAPI based codec? --> <PropertyGroup Condition="'$(InteropCodec)' != 'false'"> <DefineConstants>$(DefineConstants);INTEROP_CODEC</DefineConstants> </PropertyGroup> <!-- NOTE: Enable extra diagnostics from the custom built interop DLL (see the "SQLite.NET.Settings.targets" file for more information)? --> <PropertyGroup Condition="'$(InteropDebug)' != 'false'"> <DefineConstants>$(DefineConstants);INTEROP_DEBUG</DefineConstants> </PropertyGroup> <!-- NOTE: Enable various Trace.WriteLine statements included in the code, based on several criteria (see the "SQLite.NET.Settings.targets" file for more information)? --> <PropertyGroup Condition="'$(TraceConnection)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_CONNECTION</DefineConstants> </PropertyGroup> <PropertyGroup Condition="'$(TraceHandle)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_HANDLE</DefineConstants> |
︙ | ︙ |
Changes to Tests/backup.eagle.
︙ | ︙ | |||
78 79 80 81 82 83 84 | ############################################################################### for {set i 0} {$i < [llength $params(pages)]} {incr i} { set pages [lindex $params(pages) $i] set callback [lindex $params(callbacks) $i] runTest {test [appendArgs backup-1. $i] {BackupDatabase method} -setup { | | > > | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | ############################################################################### for {set i 0} {$i < [llength $params(pages)]} {incr i} { set pages [lindex $params(pages) $i] set callback [lindex $params(callbacks) $i] runTest {test [appendArgs backup-1. $i] {BackupDatabase method} -setup { setupDb [set fileName(1) :memory:] "" "" "" "" "" \ false false false true memDb setupDb [set fileName(2) [appendArgs backup-1. $i .db]] } -body { set id [object invoke Interpreter.GetActive NextId] set dataSource [file join [getDatabaseDirectory] $fileName(2)] sql execute $memDb { CREATE TABLE t1(x TEXT); |
︙ | ︙ |
Changes to Tests/basic.eagle.
︙ | ︙ | |||
1676 1677 1678 1679 1680 1681 1682 | System.Data.SQLite.UnsafeNativeMethods sqlite3_win32_set_directory 1 \ $directory(data)] lappend result [object invoke -flags +NonPublic \ System.Data.SQLite.UnsafeNativeMethods sqlite3_win32_set_directory 2 \ $directory(temp)] | | | 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 | System.Data.SQLite.UnsafeNativeMethods sqlite3_win32_set_directory 1 \ $directory(data)] lappend result [object invoke -flags +NonPublic \ System.Data.SQLite.UnsafeNativeMethods sqlite3_win32_set_directory 2 \ $directory(temp)] setupDb [set fileName data-1.33.db] "" "" "" "" "" false false false false sql execute $db "CREATE TABLE t1(x NOT NULL);" for {set i 1} {$i < 100} {incr i} { sql execute $db "INSERT INTO t1 (x) VALUES(?);" [list param1 String $i] } |
︙ | ︙ |
Changes to Tests/common.eagle.
︙ | ︙ | |||
353 354 355 356 357 358 359 360 361 362 363 364 365 366 | # the test interpreter created in the isolated application domain. # return [uplevel 1 [list subst [appendArgs $prefix { if {[hasRuntimeOption native]} then { object invoke Interpreter.GetActive AddRuntimeOption native } set ::path {$::path} set ::test_year {[getBuildYear]} set ::test_configuration {[getBuildConfiguration]} } $suffix]]] } proc tryCopyBuildFile { fileName } { | > | 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | # the test interpreter created in the isolated application domain. # return [uplevel 1 [list subst [appendArgs $prefix { if {[hasRuntimeOption native]} then { object invoke Interpreter.GetActive AddRuntimeOption native } set ::test_channel {$::test_channel} set ::path {$::path} set ::test_year {[getBuildYear]} set ::test_configuration {[getBuildConfiguration]} } $suffix]]] } proc tryCopyBuildFile { fileName } { |
︙ | ︙ | |||
629 630 631 632 633 634 635 | # return [expr {$fileName eq ":memory:" || \ [string range $fileName 0 12] eq "file::memory:"}] } proc setupDb { fileName {mode ""} {dateTimeFormat ""} {dateTimeKind ""} {flags ""} | | > | 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 | # return [expr {$fileName eq ":memory:" || \ [string range $fileName 0 12] eq "file::memory:"}] } proc setupDb { fileName {mode ""} {dateTimeFormat ""} {dateTimeKind ""} {flags ""} {extra ""} {qualify true} {delete true} {uri false} {temporary true} {varName db} } { # # NOTE: First, see if our caller has requested an in-memory database. # set isMemory [isMemoryDb $fileName] # # NOTE: For now, all test databases used by the test suite are placed into |
︙ | ︙ | |||
760 761 762 763 764 765 766 | # NOTE: Open the database connection now, placing the opaque handle value # into the variable specified by our caller. # set db [sql open -type SQLite [subst $connection]] # # NOTE: Configure the temporary directory for the newly opened database | | > | | > > > > > > | 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 | # NOTE: Open the database connection now, placing the opaque handle value # into the variable specified by our caller. # set db [sql open -type SQLite [subst $connection]] # # NOTE: Configure the temporary directory for the newly opened database # connection now unless the caller forbids it. # if {$temporary} then { sql execute $db [appendArgs \ "PRAGMA temp_store_directory = \"" [getTemporaryDirectory] "\";"] } # # NOTE: Always return the connection handle upon success. # return $db } proc getDbConnection { {varName db} } { # # NOTE: Refer to the specified variable (e.g. "db") in the context of our # caller. The handle to the database previously opened by [setupDb] # should be stored there. |
︙ | ︙ |
Changes to Tests/stress.eagle.
︙ | ︙ | |||
111 112 113 114 115 116 117 | # # NOTE: Make sure to remove any stale database from previous test runs. # cleanupFile $fileName(2) ############################################################################# | | | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # # NOTE: Make sure to remove any stale database from previous test runs. # cleanupFile $fileName(2) ############################################################################# setupDb $fileName(1) "" "" "" "" "" false false true true srcDb setupDb $fileName(2) ############################################################################# set workload(1) [list [list srcFileName dstFileName table count] { # # NOTE: Workload #1, CREATE TABLE statements. |
︙ | ︙ |
Changes to Tests/tkt-2ce0870fad.eagle.
︙ | ︙ | |||
39 40 41 42 43 44 45 46 47 48 49 50 51 52 | set fileName {[appendArgs tkt-2ce0870fad-1. $i .db]} # # NOTE: Keep track of whether or not the global test year and configuration # variables already exist in the primary application domain before the # test. If not, we will need to unset them after the test. # set hadTestYear {[info exists ::test_year]} set hadTestYearClrV2 {[info exists ::test_year_clr_v2]} set hadTestYearClrV4 {[info exists ::test_year_clr_v4]} set hadTestConfiguration {[info exists ::test_configuration]} }] -body { set appDomainId(3) [object invoke AppDomain.CurrentDomain Id] | > | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | set fileName {[appendArgs tkt-2ce0870fad-1. $i .db]} # # NOTE: Keep track of whether or not the global test year and configuration # variables already exist in the primary application domain before the # test. If not, we will need to unset them after the test. # set hadTestChannel {[info exists ::test_channel]} set hadTestYear {[info exists ::test_year]} set hadTestYearClrV2 {[info exists ::test_year_clr_v2]} set hadTestYearClrV4 {[info exists ::test_year_clr_v4]} set hadTestConfiguration {[info exists ::test_configuration]} }] -body { set appDomainId(3) [object invoke AppDomain.CurrentDomain Id] |
︙ | ︙ | |||
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | unset -nocomplain ::test_year_clr_v2 } if {!$hadTestYear} then { unset -nocomplain ::test_year } # # NOTE: If this is the primary application domain, skip unsetting the # loop variable because the surrounding [for] command still needs # it. # if {$i <= 1} then { unset -nocomplain i } unset -nocomplain assembly appDomainId db fileName hadTestConfiguration \ | > > > > | | 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | unset -nocomplain ::test_year_clr_v2 } if {!$hadTestYear} then { unset -nocomplain ::test_year } if {!$hadTestChannel} then { unset -nocomplain ::test_channel } # # NOTE: If this is the primary application domain, skip unsetting the # loop variable because the surrounding [for] command still needs # it. # if {$i <= 1} then { unset -nocomplain i } unset -nocomplain assembly appDomainId db fileName hadTestConfiguration \ hadTestYearClrV4 hadTestYearClrV2 hadTestYear hadTestChannel } -constraints {eagle monoBug28 command.sql compile.DATA\ compile.ISOLATED_INTERPRETERS SQLite System.Data.SQLite} -isolationLevel \ [expr {$i == 1 ? "AppDomain" : "Default"}] -match regexp -result \ {^\d+ \d+ True System#Data#SQLite#SQLiteConnection#\d+$}} } ############################################################################### |
︙ | ︙ |
Changes to Tests/tkt-ac47dd230a.eagle.
︙ | ︙ | |||
19 20 21 22 23 24 25 | runSQLiteTestPrologue ############################################################################### runTest {test tkt-ac47dd230a-1.1 {multiple AppDomains} -setup { for {set i 1} {$i < 3} {incr i} { set appDomain($i) [object invoke AppDomain CreateDomain \ | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | runSQLiteTestPrologue ############################################################################### runTest {test tkt-ac47dd230a-1.1 {multiple AppDomains} -setup { for {set i 1} {$i < 3} {incr i} { set appDomain($i) [object invoke AppDomain CreateDomain \ [appendArgs tkt-ac47dd230a-1.1. $i]] set result null set interpreterHelper($i) [object invoke -alias InterpreterHelper \ Create $appDomain($i) null Default Default null null null result] if {[string length $interpreterHelper($i)] == 0} then { error [object invoke $result ToString] |
︙ | ︙ |