Index: Doc/Extra/Core/lang_createtable.html
==================================================================
--- Doc/Extra/Core/lang_createtable.html
+++ Doc/Extra/Core/lang_createtable.html
@@ -354,10 +354,12 @@
A "CREATE TABLE ... AS SELECT" statement creates and populates a database
table based on the results of a SELECT statement. The table has the same
Index: Doc/Extra/Core/pragma.html
==================================================================
--- Doc/Extra/Core/pragma.html
+++ Doc/Extra/Core/pragma.html
@@ -223,10 +223,11 @@
read_uncommitted
- |
- reverse_unordered_selects
- schema_version
- secure_delete
short_column_names¹
- shrink_memory
@@ -449,10 +450,20 @@
'a' LIKE 'A' is false but 'a' LIKE 'a' is still true.
This pragma uses sqlite3_create_function() to overload the
LIKE and GLOB functions, which may override previous implementations
of LIKE and GLOB registered by the application.
+
+
+ PRAGMA cell_size_check
+ PRAGMA cell_size_check = boolean;
+ The cell_size_check pragma enables or disables additional sanity
+ checking on database b-tree pages as they are initially read from disk.
+ With cell size checking enabled, database corruption is detected earlier
+ and is less likely to "spread". However, there is a small performance
+ hit for doing the extra checks and so cell size checking is turned off
+ by default.
PRAGMA checkpoint_fullfsync
PRAGMA checkpoint_fullfsync = boolean;
Query or change the fullfsync flag for checkpoint operations.
Index: Doc/Extra/Provider/version.html
==================================================================
--- Doc/Extra/Provider/version.html
+++ Doc/Extra/Provider/version.html
@@ -43,19 +43,21 @@
Version History
1.0.98.0 - August XX, 2015 (release scheduled)
- - Updated to SQLite 3.8.11.
+ - Updated to SQLite 3.8.11.1.
- Add full support for Visual Studio 2015 and the .NET Framework 4.6.
- Implement the Substring method for LINQ using the "substr" core SQL function. ** Potentially Incompatible Change **
+ - Honor the second argument to Math.Round when using LINQ. ** Potentially Incompatible Change **
- Honor the pre-existing flags for connections during the Open method. Fix for [964063da16]. ** Potentially Incompatible Change **
- Remove errant semi-colons from the SQL used by LINQ to INSERT and then SELECT rows with composite primary keys. Fix for [9d353b0bd8].
- Change the base type for the SQLiteConnectionFlags enumeration to long integer. ** Potentially Incompatible Change **
- Add extended return codes to the SQLiteErrorCode enumeration. Pursuant to [71bedaca19]. ** Potentially Incompatible Change **
- Improve exception handling in all native callbacks implemented in the SQLiteConnection class.
- Add Progress event and ProgressOps connection string property to enable raising progress events during long-running queries.
+ - Add "Recursive Triggers" connection string property to enable or disable the recursive trigger capability. Pursuant to [3a82ee635b].
- Add NoDefaultFlags connection string property to prevent the default connection flags from being used. Pursuant to [964063da16].
- Add VfsName connection string property to allow a non-default VFS to be used by the SQLite core library.
- Add BusyTimeout connection string property to set the busy timeout to be used by the SQLite core library.
- Add UnbindFunction and UnbindAllFunctions methods to the SQLiteConnection class.
- Enable integration with the ZipVFS extension.
Index: Externals/Eagle/lib/Eagle1.0/vendor.eagle
==================================================================
--- Externals/Eagle/lib/Eagle1.0/vendor.eagle
+++ Externals/Eagle/lib/Eagle1.0/vendor.eagle
@@ -338,13 +338,14 @@
$test_overrides : [list binary_directory build_base_directory \
build_directory common_directory connection_flags database_directory \
datetime_format execute_on_setup release_version scratch_directory \
temporary_directory test_clr test_clr_v2 test_clr_v4 \
test_configuration test_configurations test_constraints test_machine \
- test_net_fx test_overrides test_platform test_suite test_year \
- test_years test_year_clr_v2 test_year_clr_v4 vendor_directory \
- vendor_test_directory]}] false
+ test_net_fx test_net_fx_2005 test_net_fx_2008 test_net_fx_2010 \
+ test_net_fx_2012 test_net_fx_2013 test_net_fx_2015 test_overrides \
+ test_platform test_suite test_year test_years test_year_clr_v2 \
+ test_year_clr_v4 vendor_directory vendor_test_directory]}] false
#
# NOTE: Set the name of the running test suite, if necessary.
#
if {![info exists test_suite]} then {
Index: SQLite.Interop/props/sqlite3.props
==================================================================
--- SQLite.Interop/props/sqlite3.props
+++ SQLite.Interop/props/sqlite3.props
@@ -7,12 +7,12 @@
* Released to the public domain, use at your own risk!
*
-->
- 3.8.11.0
- 3,8,11,0
+ 3.8.11.1
+ 3,8,11,1
_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;SQLITE_THREADSAFE=1;SQLITE_USE_URI=1;SQLITE_ENABLE_COLUMN_METADATA=1;SQLITE_ENABLE_STAT4=1;SQLITE_ENABLE_FTS3=1;SQLITE_ENABLE_FTS5=1;SQLITE_ENABLE_LOAD_EXTENSION=1;SQLITE_ENABLE_RTREE=1;SQLITE_SOUNDEX=1;SQLITE_ENABLE_MEMORY_MANAGEMENT=1
SQLITE_PLACEHOLDER=1;SQLITE_HAS_CODEC=1
SQLITE_OMIT_WAL=1
HAVE_ERRNO_H=1;SQLITE_MSVC_LOCALTIME_API=1
SQLITE_DEBUG=1;SQLITE_MEMDEBUG=1;SQLITE_ENABLE_EXPENSIVE_ASSERT=1
Index: SQLite.Interop/props/sqlite3.vsprops
==================================================================
--- SQLite.Interop/props/sqlite3.vsprops
+++ SQLite.Interop/props/sqlite3.vsprops
@@ -12,16 +12,16 @@
Version="8.00"
Name="sqlite3"
>
=1300 && !defined(_WIN32_WCE)
-# include
-# pragma intrinsic(_byteswap_ushort)
-# pragma intrinsic(_byteswap_ulong)
+#if defined(_MSC_VER) && _MSC_VER>=1300
+# if !defined(_WIN32_WCE)
+# include
+# pragma intrinsic(_byteswap_ushort)
+# pragma intrinsic(_byteswap_ulong)
+# else
+# include
+# endif
#endif
/*
** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
** 0 means mutexes are permanently disable and the library is never
@@ -70299,11 +70305,14 @@
** structure.
*/
SQLITE_API const void *SQLITE_STDCALL sqlite3_value_blob(sqlite3_value *pVal){
Mem *p = (Mem*)pVal;
if( p->flags & (MEM_Blob|MEM_Str) ){
- sqlite3VdbeMemExpandBlob(p);
+ if( sqlite3VdbeMemExpandBlob(p)!=SQLITE_OK ){
+ assert( p->flags==MEM_Null && p->z==0 );
+ return 0;
+ }
p->flags |= MEM_Blob;
return p->n ? p->z : 0;
}else{
return sqlite3_value_text(pVal);
}
@@ -70560,10 +70569,19 @@
sqlite3VdbeMemCopy(pCtx->pOut, pValue);
}
SQLITE_API void SQLITE_STDCALL sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n);
+}
+SQLITE_API int SQLITE_STDCALL sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){
+ Mem *pOut = pCtx->pOut;
+ assert( sqlite3_mutex_held(pOut->db->mutex) );
+ if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){
+ return SQLITE_TOOBIG;
+ }
+ sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n);
+ return SQLITE_OK;
}
SQLITE_API void SQLITE_STDCALL sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
pCtx->isError = errCode;
pCtx->fErrorOrAux = 1;
#ifdef SQLITE_DEBUG
@@ -71539,10 +71557,24 @@
if( rc==SQLITE_OK ){
sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
sqlite3_mutex_leave(p->db->mutex);
}
return rc;
+}
+SQLITE_API int SQLITE_STDCALL sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){
+ int rc;
+ Vdbe *p = (Vdbe *)pStmt;
+ sqlite3_mutex_enter(p->db->mutex);
+ if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){
+ rc = SQLITE_TOOBIG;
+ }else{
+ assert( (n & 0x7FFFFFFF)==n );
+ rc = sqlite3_bind_zeroblob(pStmt, i, n);
+ }
+ rc = sqlite3ApiExit(p->db, rc);
+ sqlite3_mutex_leave(p->db->mutex);
+ return rc;
}
/*
** Return the number of wildcards that can be potentially bound to.
** This routine is added to support DBD::SQLite.
@@ -74756,11 +74788,11 @@
assert( memIsValid(pRec) );
pRec->uTemp = serial_type = sqlite3VdbeSerialType(pRec, file_format);
len = sqlite3VdbeSerialTypeLen(serial_type);
if( pRec->flags & MEM_Zero ){
if( nData ){
- sqlite3VdbeMemExpandBlob(pRec);
+ if( sqlite3VdbeMemExpandBlob(pRec) ) goto no_mem;
}else{
nZero += pRec->u.nZero;
len -= pRec->u.nZero;
}
}
@@ -98641,20 +98673,18 @@
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
i64 n;
- sqlite3 *db = sqlite3_context_db_handle(context);
+ int rc;
assert( argc==1 );
UNUSED_PARAMETER(argc);
n = sqlite3_value_int64(argv[0]);
- testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
- testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
- if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
- sqlite3_result_error_toobig(context);
- }else{
- sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
+ if( n<0 ) n = 0;
+ rc = sqlite3_result_zeroblob64(context, n); /* IMP: R-00293-64994 */
+ if( rc ){
+ sqlite3_result_error_code(context, rc);
}
}
/*
** The replace() function. Three arguments are all strings: call
@@ -102720,11 +102750,11 @@
}else{
sqlite3TableLock(pParse, iDbDest, pDest->tnum, 1, pDest->zName);
sqlite3TableLock(pParse, iDbSrc, pSrc->tnum, 0, pSrc->zName);
}
for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
- u8 useSeekResult = 0;
+ u8 idxInsFlags = 0;
for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
}
assert( pSrcIdx );
sqlite3VdbeAddOp3(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc);
@@ -102755,16 +102785,19 @@
char *zColl = pSrcIdx->azColl[i];
assert( zColl!=0 );
if( sqlite3_stricmp("BINARY", zColl) ) break;
}
if( i==pSrcIdx->nColumn ){
- useSeekResult = OPFLAG_USESEEKRESULT;
+ idxInsFlags = OPFLAG_USESEEKRESULT;
sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
}
+ }
+ if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
+ idxInsFlags |= OPFLAG_NCHANGE;
}
sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
- sqlite3VdbeChangeP5(v, useSeekResult);
+ sqlite3VdbeChangeP5(v, idxInsFlags);
sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); VdbeCoverage(v);
sqlite3VdbeJumpHere(v, addr1);
sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
}
@@ -103221,10 +103254,12 @@
void(*)(void*), unsigned char);
int (*strglob)(const char*,const char*);
/* Version 3.8.11 and later */
sqlite3_value *(*value_dup)(const sqlite3_value*);
void (*value_free)(sqlite3_value*);
+ int (*result_zeroblob64)(sqlite3_context*,sqlite3_uint64);
+ int (*bind_zeroblob64)(sqlite3_stmt*, int, sqlite3_uint64);
};
/*
** The following macros redefine the API routines so that they are
** redirected through the global sqlite3_api structure.
@@ -103454,10 +103489,12 @@
#define sqlite3_result_text64 sqlite3_api->result_text64
#define sqlite3_strglob sqlite3_api->strglob
/* Version 3.8.11 and later */
#define sqlite3_value_dup sqlite3_api->value_dup
#define sqlite3_value_free sqlite3_api->value_free
+#define sqlite3_result_zeroblob64 sqlite3_api->result_zeroblob64
+#define sqlite3_bind_zeroblob64 sqlite3_api->bind_zeroblob64
#endif /* SQLITE_CORE */
#ifndef SQLITE_CORE
/* This case when the file really is being compiled as a loadable
** extension */
@@ -103863,11 +103900,13 @@
sqlite3_result_blob64,
sqlite3_result_text64,
sqlite3_strglob,
/* Version 3.8.11 and later */
(sqlite3_value*(*)(const sqlite3_value*))sqlite3_value_dup,
- sqlite3_value_free
+ sqlite3_value_free,
+ sqlite3_result_zeroblob64,
+ sqlite3_bind_zeroblob64
};
/*
** Attempt to load an SQLite extension library contained in the file
** zFile. The entry point is zProc. zProc may be 0 in which case a
@@ -105428,10 +105467,11 @@
returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
}else{
int size = sqlite3Atoi(zRight);
pDb->pSchema->cache_size = size;
sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
+ if( sqlite3ReadSchema(pParse) ) goto pragma_out;
}
break;
}
/*
@@ -138650,11 +138690,10 @@
** tokens or prefix tokens that cannot use a prefix-index. */
int bHaveIncr = 0;
int bIncrOk = (bOptOk
&& pCsr->bDesc==pTab->bDescIdx
&& p->nToken<=MAX_INCR_PHRASE_TOKENS && p->nToken>0
- && p->nToken<=MAX_INCR_PHRASE_TOKENS && p->nToken>0
#ifdef SQLITE_TEST
&& pTab->bNoIncrDoclist==0
#endif
);
for(i=0; bIncrOk==1 && inToken; i++){
@@ -156922,11 +156961,14 @@
*/
/* #include */
/* #include */
/* #include */
-/* #include */
+
+#if !defined(_WIN32)
+/* # include */
+#endif
/* #include "sqlite3.h" */
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU)
/************** Include sqlite3rbu.h in the middle of sqlite3rbu.c ***********/
@@ -157829,11 +157871,11 @@
int rc;
memset(pIter, 0, sizeof(RbuObjIter));
rc = prepareAndCollectError(p->dbRbu, &pIter->pTblIter, &p->zErrmsg,
"SELECT substr(name, 6) FROM sqlite_master "
- "WHERE type='table' AND name LIKE 'data_%'"
+ "WHERE type IN ('table', 'view') AND name LIKE 'data_%'"
);
if( rc==SQLITE_OK ){
rc = prepareAndCollectError(p->dbMain, &pIter->pIdxIter, &p->zErrmsg,
"SELECT name, rootpage, sql IS NULL OR substr(8, 6)=='UNIQUE' "
@@ -157881,12 +157923,13 @@
** RBU handle. If an error has already occurred when this function is
** called, it is a no-op.
*/
static int rbuMPrintfExec(sqlite3rbu *p, sqlite3 *db, const char *zFmt, ...){
va_list ap;
+ char *zSql;
va_start(ap, zFmt);
- char *zSql = sqlite3_vmprintf(zFmt, ap);
+ zSql = sqlite3_vmprintf(zFmt, ap);
if( p->rc==SQLITE_OK ){
if( zSql==0 ){
p->rc = SQLITE_NOMEM;
}else{
p->rc = sqlite3_exec(db, zSql, 0, 0, &p->zErrmsg);
@@ -159901,11 +159944,11 @@
int rnd;
char zRnd[64];
assert( p->rc==SQLITE_OK );
sqlite3_randomness(sizeof(int), (void*)&rnd);
- sprintf(zRnd, "rbu_vfs_%d", rnd);
+ sqlite3_snprintf(sizeof(zRnd), zRnd, "rbu_vfs_%d", rnd);
p->rc = sqlite3rbu_create_vfs(zRnd, 0);
if( p->rc==SQLITE_OK ){
sqlite3_vfs *pVfs = sqlite3_vfs_find(zRnd);
assert( pVfs );
p->zVfsName = pVfs->zName;
@@ -160786,11 +160829,11 @@
/*
** Close the dynamic library handle pHandle.
*/
static void rbuVfsDlClose(sqlite3_vfs *pVfs, void *pHandle){
sqlite3_vfs *pRealVfs = ((rbu_vfs*)pVfs)->pRealVfs;
- return pRealVfs->xDlClose(pRealVfs, pHandle);
+ pRealVfs->xDlClose(pRealVfs, pHandle);
}
#endif /* SQLITE_OMIT_LOAD_EXTENSION */
/*
** Populate the buffer pointed to by zBufOut with nByte bytes of
Index: SQLite.Interop/src/core/sqlite3.h
==================================================================
--- SQLite.Interop/src/core/sqlite3.h
+++ SQLite.Interop/src/core/sqlite3.h
@@ -109,13 +109,13 @@
**
** See also: [sqlite3_libversion()],
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.8.11"
+#define SQLITE_VERSION "3.8.11.1"
#define SQLITE_VERSION_NUMBER 3008011
-#define SQLITE_SOURCE_ID "2015-07-24 00:02:15 119883a21bdcab66c15d1e80f3da20addda328ad"
+#define SQLITE_SOURCE_ID "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
/*
** CAPI3REF: Run-Time Library Version Numbers
** KEYWORDS: sqlite3_version, sqlite3_sourceid
**
@@ -3560,10 +3560,11 @@
SQLITE_API int SQLITE_STDCALL sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
SQLITE_API int SQLITE_STDCALL sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
void(*)(void*), unsigned char encoding);
SQLITE_API int SQLITE_STDCALL sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
SQLITE_API int SQLITE_STDCALL sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
+SQLITE_API int SQLITE_STDCALL sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64);
/*
** CAPI3REF: Number Of SQL Parameters
** METHOD: sqlite3_stmt
**
@@ -4532,13 +4533,13 @@
** ^The sqlite3_result_blob() interface sets the result from
** an application-defined function to be the BLOB whose content is pointed
** to by the second parameter and which is N bytes long where N is the
** third parameter.
**
-** ^The sqlite3_result_zeroblob() interfaces set the result of
-** the application-defined function to be a BLOB containing all zero
-** bytes and N bytes in size, where N is the value of the 2nd parameter.
+** ^The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N)
+** interfaces set the result of the application-defined function to be
+** a BLOB containing all zero bytes and N bytes in size.
**
** ^The sqlite3_result_double() interface sets the result from
** an application-defined function to be a floating point value specified
** by its 2nd argument.
**
@@ -4649,10 +4650,11 @@
SQLITE_API void SQLITE_STDCALL sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
SQLITE_API void SQLITE_STDCALL sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
SQLITE_API void SQLITE_STDCALL sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
SQLITE_API void SQLITE_STDCALL sqlite3_result_value(sqlite3_context*, sqlite3_value*);
SQLITE_API void SQLITE_STDCALL sqlite3_result_zeroblob(sqlite3_context*, int n);
+SQLITE_API int SQLITE_STDCALL sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
/*
** CAPI3REF: Define New Collating Sequences
** METHOD: sqlite3
**
Index: SQLite.Interop/src/core/sqlite3ext.h
==================================================================
--- SQLite.Interop/src/core/sqlite3ext.h
+++ SQLite.Interop/src/core/sqlite3ext.h
@@ -268,10 +268,12 @@
void(*)(void*), unsigned char);
int (*strglob)(const char*,const char*);
/* Version 3.8.11 and later */
sqlite3_value *(*value_dup)(const sqlite3_value*);
void (*value_free)(sqlite3_value*);
+ int (*result_zeroblob64)(sqlite3_context*,sqlite3_uint64);
+ int (*bind_zeroblob64)(sqlite3_stmt*, int, sqlite3_uint64);
};
/*
** The following macros redefine the API routines so that they are
** redirected through the global sqlite3_api structure.
@@ -501,10 +503,12 @@
#define sqlite3_result_text64 sqlite3_api->result_text64
#define sqlite3_strglob sqlite3_api->strglob
/* Version 3.8.11 and later */
#define sqlite3_value_dup sqlite3_api->value_dup
#define sqlite3_value_free sqlite3_api->value_free
+#define sqlite3_result_zeroblob64 sqlite3_api->result_zeroblob64
+#define sqlite3_bind_zeroblob64 sqlite3_api->bind_zeroblob64
#endif /* SQLITE_CORE */
#ifndef SQLITE_CORE
/* This case when the file really is being compiled as a loadable
** extension */
Index: SQLite.Interop/src/ext/fts5.c
==================================================================
--- SQLite.Interop/src/ext/fts5.c
+++ SQLite.Interop/src/ext/fts5.c
@@ -2838,11 +2838,11 @@
Fts5ExprNearset *pNear; /* For FTS5_STRING - cluster of phrases */
/* Child nodes. For a NOT node, this array always contains 2 entries. For
** AND or OR nodes, it contains 2 or more entries. */
int nChild; /* Number of child nodes */
- Fts5ExprNode *apChild[0]; /* Array of child nodes */
+ Fts5ExprNode *apChild[1]; /* Array of child nodes */
};
#define Fts5NodeIsString(p) ((p)->eType==FTS5_TERM || (p)->eType==FTS5_STRING)
/*
@@ -4397,11 +4397,11 @@
nChild = 2;
if( pLeft->eType==eType ) nChild += pLeft->nChild-1;
if( pRight->eType==eType ) nChild += pRight->nChild-1;
}
- nByte = sizeof(Fts5ExprNode) + sizeof(Fts5ExprNode*)*nChild;
+ nByte = sizeof(Fts5ExprNode) + sizeof(Fts5ExprNode*)*(nChild-1);
pRet = (Fts5ExprNode*)sqlite3Fts5MallocZero(&pParse->rc, nByte);
if( pRet ){
pRet->eType = eType;
pRet->pNear = pNear;
@@ -9039,17 +9039,17 @@
assert( iLvl>=0 );
for(fts5MultiIterNew(p, pStruct, 0, 0, 0, 0, iLvl, nInput, &pIter);
fts5MultiIterEof(p, pIter)==0;
fts5MultiIterNext(p, pIter, 0, 0)
){
- Fts5SegIter *pSeg = &pIter->aSeg[ pIter->aFirst[1].iFirst ];
+ Fts5SegIter *pSegIter = &pIter->aSeg[ pIter->aFirst[1].iFirst ];
int nPos; /* position-list size field value */
int nTerm;
const u8 *pTerm;
/* Check for key annihilation. */
- if( pSeg->nPos==0 && (bOldest || pSeg->bDel==0) ) continue;
+ if( pSegIter->nPos==0 && (bOldest || pSegIter->bDel==0) ) continue;
pTerm = fts5MultiIterTerm(pIter, &nTerm);
if( nTerm!=term.n || memcmp(pTerm, term.p, nTerm) ){
if( pnRem && writer.nLeafWritten>nRem ){
break;
@@ -9064,15 +9064,15 @@
bRequireDoclistTerm = 1;
}
/* Append the rowid to the output */
/* WRITEPOSLISTSIZE */
- nPos = pSeg->nPos*2 + pSeg->bDel;
+ nPos = pSegIter->nPos*2 + pSegIter->bDel;
fts5WriteAppendRowid(p, &writer, fts5MultiIterRowid(pIter), nPos);
/* Append the position-list data to the output */
- fts5ChunkIterate(p, pSeg, (void*)&writer, fts5MergeChunkCallback);
+ fts5ChunkIterate(p, pSegIter, (void*)&writer, fts5MergeChunkCallback);
}
/* Flush the last leaf page to disk. Set the output segment b-tree height
** and last leaf page number at the same time. */
fts5WriteFinish(p, &writer, &pSeg->nHeight, &pSeg->pgnoLast);
@@ -13246,11 +13246,11 @@
sqlite3_context *pCtx, /* Function call context */
int nArg, /* Number of args */
sqlite3_value **apVal /* Function arguments */
){
assert( nArg==0 );
- sqlite3_result_text(pCtx, "fts5: 2015-07-16 20:17:57 e9bf275cd969eca6fb41384d3637528d6a19f819", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2015-07-24 23:28:05 db129149812cb4eadb4cd79ad293d14962d2638d", -1, SQLITE_TRANSIENT);
}
#ifdef _WIN32
__declspec(dllexport)
#endif
Index: Setup/updateFileInfo.tcl
==================================================================
--- Setup/updateFileInfo.tcl
+++ Setup/updateFileInfo.tcl
@@ -59,30 +59,36 @@
# NOTE: Grab the name of the file to be updated from the command line, if
# available; otherwise, use the default (i.e. "../www/downloads.wiki").
#
if {[info exists argv] && [llength $argv] > 0} then {
set updateFileName [lindex $argv 0]
-} else {
+}
+
+if {![info exists updateFileName] || \
+ [string length $updateFileName] == 0} then {
set updateFileName [file join $root www downloads.wiki]
}
#
# NOTE: Grab the directory containing the files referenced in the data of the
# file to be updated from the command line, if available; otherwise, use
# the default (i.e. "./Output").
#
if {[info exists argv] && [llength $argv] > 1} then {
- set directory [lindex $argv 1]
-} else {
- set directory [file join $path Output]
+ set outputDirectory [lindex $argv 1]
+}
+
+if {![info exists outputDirectory] || \
+ [string length $outputDirectory] == 0} then {
+ set outputDirectory [file join $path Output]
}
#
-# NOTE: Setup the regular expression pattern with the necessary captures. This
-# pattern is mostly non-greedy; however, at the end we need to match
-# exactly 40 hexadecimal characters. In theory, in Tcl, this could have
-# an undefined result due to the mixing of greedy and non-greedy
+# NOTE: Setup the regular expression patterns with the necessary captures.
+# These patterns are mostly non-greedy; however, at the end we need to
+# match exactly 40 hexadecimal characters. In theory, in Tcl, this could
+# have an undefined result due to the mixing of greedy and non-greedy
# quantifiers; however, in practice, this seems to work properly. Also,
# this pattern assumes a particular structure for the [HTML] file to be
# updated.
#
set pattern1 {(.*?).*?\((\d+?\.\d+?)\
MiB\).*?sha1: ([0-9A-F]{40})}
+set pattern3 {href="/downloads/(.*?)"}
+set pattern4 {\(sha1: ([0-9A-F]{40})\)}
+
#
# NOTE: Grab all the data from the file to be updated.
#
set data [readFile $updateFileName]
@@ -115,11 +124,11 @@
[regexp -all -inline -nocase -- $pattern $data] {
#
# NOTE: Get the fully qualified file name based on the configured
# directory.
#
- set fullFileName [file join $directory [file tail $fileName]]
+ set fullFileName [file join $outputDirectory [file tail $fileName]]
#
# NOTE: If the file does not exist, issue a warning and skip it.
#
if {![file exists $fullFileName]} then {
@@ -171,14 +180,39 @@
incr start [string length $fileHash]
}
}
}
+
+#
+# NOTE: Attempt to verify that each file name now has the correct SHA1 hash
+# associated with it on the page.
+#
+foreach {dummy3 fileName} [regexp -all -inline -nocase -- $pattern3 $data] \
+ {dummy4 fileHash} [regexp -all -inline -nocase -- $pattern4 $data] {
+ #
+ # NOTE: Get the fully qualified file name based on the configured
+ # directory.
+ #
+ set fullFileName [file join $outputDirectory [file tail $fileName]]
+
+ #
+ # NOTE: Make sure the file hash from the [modified] data matches the
+ # calculated hash for the file. If not, fail.
+ #
+ set fullFileHash [getFileHash $fullFileName]
+
+ if {$fileHash ne $fullFileHash} then {
+ puts stdout "ERROR: SHA1 hash mismatch for\
+ file \"$fullFileName\", have \"$fileHash\" (from data),\
+ need \"$fullFileHash\" (calculated)."
+ }
+}
#
# NOTE: Write the [modified] data to the file to be updated.
#
if {$count > 0} then {
writeFile $updateFileName $data
} else {
puts stdout "WARNING: No changes, update of \"$updateFileName\" skipped."
}
Index: System.Data.SQLite.Linq/SQL Generation/SqlGenerator.cs
==================================================================
--- System.Data.SQLite.Linq/SQL Generation/SqlGenerator.cs
+++ System.Data.SQLite.Linq/SQL Generation/SqlGenerator.cs
@@ -2959,10 +2959,11 @@
return result;
}
///
/// Round(numericExpression) -> Round(numericExpression, 0);
+ /// Round(numericExpression, N) -> Round(numericExpression, N);
///
///
///
///
private static ISqlFragment HandleCanonicalFunctionRound(SqlGenerator sqlgen, DbFunctionExpression e)
@@ -2969,14 +2970,23 @@
{
SqlBuilder result = new SqlBuilder();
result.Append("ROUND(");
- Debug.Assert(e.Arguments.Count == 1, "Round should have one argument");
+ Debug.Assert(e.Arguments.Count == 1 || e.Arguments.Count == 2, "Round should have one or two arguments");
result.Append(e.Arguments[0].Accept(sqlgen));
- result.Append(", 0)");
+ if (e.Arguments.Count == 2)
+ {
+ result.Append(", ");
+ result.Append(e.Arguments[1].Accept(sqlgen));
+ result.Append(")");
+ }
+ else
+ {
+ result.Append(", 0)");
+ }
return result;
}
///
Index: System.Data.SQLite/SQLiteConnection.cs
==================================================================
--- System.Data.SQLite/SQLiteConnection.cs
+++ System.Data.SQLite/SQLiteConnection.cs
@@ -167,11 +167,15 @@
/// N
/// 3
///
/// -
/// UseUTF16Encoding
- /// True
False
+ ///
+ /// True - The UTF-16 encoding should be used.
+ ///
+ /// False - The UTF-8 encoding should be used.
+ ///
/// N
/// False
///
/// -
/// DefaultDbType
@@ -199,11 +203,11 @@
///
/// False - Combine the specified (or existing) connection flags with the value of the
/// property.
///
/// N
- /// false
+ /// False
///
/// -
/// NoSharedFlags
///
/// True - Do not combine the specified (or existing) connection flags with the value of the
@@ -211,11 +215,11 @@
///
/// False - Combine the specified (or existing) connection flags with the value of the
/// property.
///
/// N
- /// false
+ /// False
///
/// -
/// VfsName
///
/// The name of the VFS to use when opening the database connection.
@@ -250,33 +254,47 @@
/// 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.
+ ///
+ /// 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.
+ ///
+ /// 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)
+ ///
+ /// 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.
+ /// 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
+ ///
+ /// True - Store GUID columns in binary form
+ ///
+ /// False - Store GUID columns as text
+ ///
/// N
/// True
///
/// -
/// Cache Size
@@ -284,11 +302,17 @@
/// N
/// 2000
///
/// -
/// Synchronous
- /// Normal - Normal file flushing behavior
Full - Full flushing after all writes Off - Underlying OS flushes I/O's
+ ///
+ /// Normal - Normal file flushing behavior
+ ///
+ /// Full - Full flushing after all writes
+ ///
+ /// Off - Underlying OS flushes I/O's
+ ///
/// N
/// Full
///
/// -
/// Page Size
@@ -296,23 +320,39 @@
/// N
/// 1024
///
/// -
/// Password
- /// {password} - Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.
+ ///
+ /// {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.
+ ///
+ /// {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
+ ///
+ /// Y - Automatically enlist in distributed transactions
+ ///
+ /// N - No automatic enlistment
+ ///
/// N
/// Y
///
/// -
/// Pooling
@@ -327,11 +367,15 @@
/// 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
+ ///
+ /// 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
@@ -339,11 +383,15 @@
/// 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
+ ///
+ /// 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
@@ -357,17 +405,41 @@
/// 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
+ ///
+ /// 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
+ ///
+ /// True - Open the database for read only access
+ ///
+ /// False - Open the database for normal read/write access
+ ///
/// N
/// False
///
/// -
/// Max Pool Size
@@ -403,11 +475,12 @@
/// True
///
/// -
/// ToFullPath
///
- /// True - Attempt to expand the data source file name to a fully qualified path before opening.
+ /// 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
///
@@ -429,10 +502,19 @@
/// 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
+ ///
///
///
public sealed partial class SQLiteConnection : DbConnection, ICloneable, IDisposable
{
#region Private Constants
@@ -484,10 +566,11 @@
private const bool DefaultUseUTF16Encoding = false;
private const bool DefaultToFullPath = true;
private const bool DefaultPooling = false; // TODO: Maybe promote this to static property?
private const bool DefaultLegacyFormat = false;
private const bool DefaultForeignKeys = false;
+ private const bool DefaultRecursiveTriggers = false;
private const bool DefaultEnlist = true;
private const bool DefaultSetDefaults = true;
internal const int DefaultPrepareRetries = 3;
private const string DefaultVfsName = null;
private const int DefaultProgressOps = 0;
@@ -1827,219 +1910,12 @@
///
/// The connection string containing the parameters for the connection
///
///
- ///
- ///
- /// Parameter
- /// Values
- /// Required
- /// Default
- ///
- /// -
- /// Data Source
- ///
- /// This may be a file name, the string ":memory:", or any supported URI (starting with SQLite 3.7.7).
- /// Starting with release 1.0.86.0, in order to use more than one consecutive backslash (e.g. for a
- /// UNC path), each of the adjoining backslash characters must be doubled (e.g. "\\Network\Share\test.db"
- /// would become "\\\\Network\Share\test.db").
- ///
- /// Y
- ///
- ///
- /// -
- /// Version
- /// 3
- /// N
- /// 3
- ///
- /// -
- /// UseUTF16Encoding
- /// True
False
- /// N
- /// False
- ///
- /// -
- /// DateTimeFormat
- ///
- /// Ticks - Use the value of DateTime.Ticks.
- /// ISO8601 - Use the ISO-8601 format. Uses the "yyyy-MM-dd HH:mm:ss.FFFFFFFK" format for UTC
- /// DateTime values and "yyyy-MM-dd HH:mm:ss.FFFFFFF" format for local DateTime values).
- /// JulianDay - The interval of time in days and fractions of a day since January 1, 4713 BC.
- /// UnixEpoch - The whole number of seconds since the Unix epoch (January 1, 1970).
- /// InvariantCulture - Any culture-independent string value that the .NET Framework can interpret as a valid DateTime.
- /// CurrentCulture - Any string value that the .NET Framework can interpret as a valid DateTime using the current culture.
- /// N
- /// ISO8601
- ///
- /// -
- /// DateTimeKind
- /// Unspecified - Not specified as either UTC or local time.
Utc - The time represented is UTC. Local - The time represented is local time.
- /// N
- /// Unspecified
- ///
- /// -
- /// DateTimeFormatString
- /// The exact DateTime format string to use for all formatting and parsing of all DateTime
- /// values for this connection.
- /// N
- /// null
- ///
- /// -
- /// BaseSchemaName
- /// Some base data classes in the framework (e.g. those that build SQL queries dynamically)
- /// assume that an ADO.NET provider cannot support an alternate catalog (i.e. database) without supporting
- /// alternate schemas as well; however, SQLite does not fit into this model. Therefore, this value is used
- /// as a placeholder and removed prior to preparing any SQL statements that may contain it.
- /// N
- /// sqlite_default_schema
- ///
- /// -
- /// BinaryGUID
- /// True - Store GUID columns in binary form
False - Store GUID columns as text
- /// N
- /// True
- ///
- /// -
- /// Cache Size
- /// {size in bytes}
- /// N
- /// 2000
- ///
- /// -
- /// Synchronous
- /// Normal - Normal file flushing behavior
Full - Full flushing after all writes Off - Underlying OS flushes I/O's
- /// N
- /// Full
- ///
- /// -
- /// Page Size
- /// {size in bytes}
- /// N
- /// 1024
- ///
- /// -
- /// Password
- /// {password} - Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.
- /// N
- ///
- ///
- /// -
- /// HexPassword
- /// {hexPassword} - Must contain a sequence of zero or more hexadecimal encoded byte values without a leading "0x" prefix. Using this parameter requires that the CryptoAPI based codec be enabled at compile-time for both the native interop assembly and the core managed assemblies; otherwise, using this parameter may result in an exception being thrown when attempting to open the connection.
- /// N
- ///
- ///
- /// -
- /// Enlist
- /// Y - Automatically enlist in distributed transactions
N - No automatic enlistment
- /// N
- /// Y
- ///
- /// -
- /// Pooling
- ///
- /// True - Use connection pooling.
- /// False - Do not use connection pooling.
- /// WARNING: When using the default connection pool implementation,
- /// setting this property to True should be avoided by applications that
- /// make use of COM (either directly or indirectly) due to possible
- /// deadlocks that can occur during the finalization of some COM objects.
- ///
- /// N
- /// False
- ///
- /// -
- /// FailIfMissing
- /// True - Don't create the database if it does not exist, throw an error instead
False - Automatically create the database if it does not exist
- /// N
- /// False
- ///
- /// -
- /// Max Page Count
- /// {size in pages} - Limits the maximum number of pages (limits the size) of the database
- /// N
- /// 0
- ///
- /// -
- /// Legacy Format
- /// True - Use the more compatible legacy 3.x database format
False - Use the newer 3.3x database format which compresses numbers more effectively
- /// N
- /// False
- ///
- /// -
- /// Default Timeout
- /// {time in seconds}
The default command timeout
- /// N
- /// 30
- ///
- /// -
- /// Journal Mode
- /// Delete - Delete the journal file after a commit
Persist - Zero out and leave the journal file on disk after a commit Off - Disable the rollback journal entirely
- /// N
- /// Delete
- ///
- /// -
- /// Read Only
- /// True - Open the database for read only access
False - Open the database for normal read/write access
- /// N
- /// False
- ///
- /// -
- /// Max Pool Size
- /// The maximum number of connections for the given connection string that can be in the connection pool
- /// N
- /// 100
- ///
- /// -
- /// Default IsolationLevel
- /// The default transaciton isolation level
- /// N
- /// Serializable
- ///
- /// -
- /// Foreign Keys
- /// Enable foreign key constraints
- /// N
- /// False
- ///
- /// -
- /// Flags
- /// Extra behavioral flags for the connection. See the enumeration for possible values.
- /// N
- /// Default
- ///
- /// -
- /// SetDefaults
- ///
- /// True - Apply the default connection settings to the opened database.
- /// False - Skip applying the default connection settings to the opened database.
- ///
- /// N
- /// True
- ///
- /// -
- /// ToFullPath
- ///
- /// True - Attempt to expand the data source file name to a fully qualified path before opening.
- /// False - Skip attempting to expand the data source file name to a fully qualified path before opening.
- ///
- /// N
- /// True
- ///
- /// -
- /// 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
- ///
- ///
+ /// For the complete list of supported connection string properties,
+ /// please see .
///
#if !PLATFORM_COMPACTFRAMEWORK
[RefreshProperties(RefreshProperties.All), DefaultValue("")]
[Editor("SQLite.Designer.SQLiteConnectionStringEditor, SQLite.Designer, Version=" + SQLite3.DesignerVersion + ", Culture=neutral, PublicKeyToken=db937bc2d44ff139", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
#endif
@@ -2970,10 +2846,18 @@
if (boolValue != DefaultForeignKeys)
{
cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "PRAGMA foreign_keys={0}", boolValue ? "ON" : "OFF");
cmd.ExecuteNonQuery();
}
+
+ strValue = FindKey(opts, "Recursive Triggers", DefaultRecursiveTriggers.ToString());
+ boolValue = SQLiteConvert.ToBoolean(strValue);
+ if (boolValue != DefaultRecursiveTriggers)
+ {
+ cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "PRAGMA recursive_triggers={0}", boolValue ? "ON" : "OFF");
+ cmd.ExecuteNonQuery();
+ }
}
}
if (_progressHandler != null)
_sql.SetProgressHook(_progressOps, _progressCallback);
Index: System.Data.SQLite/SQLiteConnectionStringBuilder.cs
==================================================================
--- System.Data.SQLite/SQLiteConnectionStringBuilder.cs
+++ System.Data.SQLite/SQLiteConnectionStringBuilder.cs
@@ -756,10 +756,30 @@
set
{
this["foreign keys"] = value;
}
}
+
+ ///
+ /// Enable or disable the recursive trigger capability.
+ ///
+ [DisplayName("Recursive Triggers")]
+ [Browsable(true)]
+ [DefaultValue(false)]
+ public bool RecursiveTriggers
+ {
+ get
+ {
+ object value;
+ TryGetValue("recursive triggers", out value);
+ return SQLiteConvert.ToBoolean(value);
+ }
+ set
+ {
+ this["recursive triggers"] = value;
+ }
+ }
///
/// 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
Index: Tests/basic.eagle
==================================================================
--- Tests/basic.eagle
+++ Tests/basic.eagle
@@ -1053,20 +1053,20 @@
DateTimeFormat DateTimeKind DateTimeFormatString \
BaseSchemaName "Journal Mode" "Default IsolationLevel" \
"Foreign Keys" Flags SetDefaults ToFullPath HexPassword \
DefaultDbType DefaultTypeName NoSharedFlags PrepareRetries \
ZipVfsVersion VfsName BusyTimeout ProgressOps \
- NoDefaultFlags]
+ NoDefaultFlags "Recursive Triggers"]
set values [list null 3 Normal True False \
True test.db test.db file:test.db 60 \
False True False True \
secret 4096 1024 8192 \
UnixEpoch Utc yyyy-MM-dd sqlite_schema \
Memory Serializable False \
Default False False 736563726574 String \
- TEXT True 20 v2 test 1000 2000 True]
+ TEXT True 20 v2 test 1000 2000 True True]
set propertyNames [list null Version SyncMode UseUTF16Encoding Pooling \
BinaryGUID DataSource Uri FullUri DefaultTimeout \
Enlist FailIfMissing LegacyFormat ReadOnly \
Password PageSize MaxPageCount CacheSize \
@@ -1073,11 +1073,12 @@
DateTimeFormat DateTimeKind DateTimeFormatString \
BaseSchemaName JournalMode DefaultIsolationLevel \
ForeignKeys Flags SetDefaults ToFullPath \
HexPassword DefaultDbType DefaultTypeName \
NoSharedFlags PrepareRetries ZipVfsVersion \
- VfsName BusyTimeout ProgressOps NoDefaultFlags]
+ VfsName BusyTimeout ProgressOps NoDefaultFlags \
+ RecursiveTriggers]
foreach key $keys value $values propertyName $propertyNames {
set code [catch {
object invoke _Dynamic${id}.Test${id} GetConnectionString \
$key $value $propertyName
@@ -1109,11 +1110,12 @@
Flags=(?:Default|LogCallbackException)\} 0 \{False, SetDefaults=False\} 0\
\{False, ToFullPath=False\} 0 {736563726574, HexPassword=736563726574} 0\
\{String, DefaultDbType=String\} 0 \{TEXT, DefaultTypeName=TEXT\} 0 \{True,\
NoSharedFlags=True\} 0 \{20, PrepareRetries=20\} 0 \{v2, ZipVfsVersion=v2\} 0\
\{test, VfsName=test\} 0 \{1000, BusyTimeout=1000\} 0 \{2000,\
-ProgressOps=2000\} 0 \{True, NoDefaultFlags=True\}$}}
+ProgressOps=2000\} 0 \{True, NoDefaultFlags=True\} 0 \{True, Recursive\
+Triggers=True\}$}}
###############################################################################
runTest {test data-1.18 {SQLiteConvert ToDateTime (Julian Day)} -body {
set dateTime [object invoke -create System.Data.SQLite.SQLiteConvert \
Index: Tests/linq.eagle
==================================================================
--- Tests/linq.eagle
+++ Tests/linq.eagle
@@ -54,10 +54,50 @@
} -cleanup {
unset -nocomplain code output error result
} -constraints {eagle monoToDo SQLite file_System.Data.SQLite.dll testExec\
file_System.Data.SQLite.Linq.dll file_testlinq.exe file_northwindEF.db} \
-result {0 {inserted 1 updated 1}}}
+
+###############################################################################
+
+runTest {test linq-1.2 {ROUND function with two arguments} -body {
+ #
+ # NOTE: Re-copy the reference database file used for this unit test to the
+ # build directory in case it has been changed by a previous test run.
+ #
+ file copy -force $northwindEfDbFile \
+ [file join [getBuildDirectory] [file tail $northwindEfDbFile]]
+
+ set result [list]
+ set output ""
+
+ set code [catch {
+ testClrExec $testLinqExeFile [list -eventflags Wait -directory \
+ [file dirname $testLinqExeFile] -nocarriagereturns -stdout output \
+ -success 0] -round
+ } error]
+
+ tlog "---- BEGIN STDOUT OUTPUT\n"
+ tlog $output
+ tlog "\n---- END STDOUT OUTPUT\n"
+
+ lappend result $code
+
+ if {$code == 0} then {
+ lappend result [string trim $output]
+ } else {
+ lappend result [string trim $error]
+ }
+
+ set result
+} -cleanup {
+ unset -nocomplain code output error result
+} -constraints {eagle monoToDo SQLite file_System.Data.SQLite.dll testExec\
+file_System.Data.SQLite.Linq.dll file_testlinq.exe file_northwindEF.db} \
+-result {0 {{ NewUnitPrice = 21.0 } { NewUnitPrice = 21.1 } { NewUnitPrice =\
+21.05 } { NewUnitPrice = 23.0 } { NewUnitPrice = 23.3 } { NewUnitPrice = 23.25\
+} { NewUnitPrice = 21.0 } { NewUnitPrice = 21.4 } { NewUnitPrice = 21.35 }}}}
###############################################################################
runSQLiteTestFilesEpilogue
runSQLiteTestEpilogue
Index: Tests/stress.eagle
==================================================================
--- Tests/stress.eagle
+++ Tests/stress.eagle
@@ -138,12 +138,17 @@
set ::eagle_tests(constraints) $::test_constraints
}
#############################################################################
- proc delayTest { {extra 0} } {
- after [expr {int((rand() * 1000) + $extra)}]
+ proc delayTest { base extra } {
+ if {$base < 0} then {
+ set base 1000
+ }
+ if {$base > 0 || $extra > 0} then {
+ after [expr {int((rand() * $base) + $extra)}]
+ }
}
#############################################################################
proc waitTest { indicator } {
@@ -154,13 +159,19 @@
}
#############################################################################
proc showTest { indicator } {
+ showTestWithDelay $indicator -1 $::count(2)
+ }
+
+ #############################################################################
+
+ proc showTestWithDelay { indicator base extra } {
tputs $::test_channel $indicator
append ::indicators $indicator
- delayTest $::count(2)
+ delayTest $base $extra
}
#############################################################################
proc doneTest { {indicator ""} } {
@@ -199,11 +210,11 @@
if {![info exists ::failures($indicator)]} then {
set ::failures($indicator) 0
}
incr ::failures($indicator)
- delayTest $::count(2)
+ delayTest -1 $::count(2)
}
}
#############################################################################
@@ -265,10 +276,22 @@
object dispose $ptr
}
#############################################################################
+ proc releaseMem { size } {
+ set nFree 0; set resetOk false; set nLargest 0
+
+ set code [object invoke \
+ System.Data.SQLite.SQLiteConnection ReleaseMemory \
+ $size true true nFree resetOk nLargest]
+
+ return [list $code $nFree $resetOk $nLargest]
+ }
+
+ #############################################################################
+
proc setupLogging { fileName } {
if {![info exists ::logListener]} then {
set ::logListener [object create -alias \
System.Diagnostics.TextWriterTraceListener $fileName]
}
@@ -310,15 +333,18 @@
#
# NOTE: Setup the default values for the tunable workload parameters. Any,
# all, or none of these may be overriden via the command line.
#
set count(0) 3; # Workload repeat count (i.e. total full runs).
- set count(1) 5; # Workload iteration count (i.e. within a run).
- set count(2) 200; # Workload iteration delay, in milliseconds.
+ set count(1) 5; # Workload iteration count (within a run).
+ set count(2) 200; # Workload iteration delay (milliseconds).
set count(3) 57; # Workload "small" data chunk size, in bytes.
set count(4) 10000; # Workload "big" data chunk size, in bytes.
set count(5) 209715200; # Maximum heap memory to exclude at one time.
+ set count(6) 15; # Workload auxiliary iteration count (within a run).
+ set count(7) 100; # Workload auxiliary iteration delay (milliseconds).
+ set count(8) 5000; # Workload auxiliary data value (for use by run).
set noWorkload [list]; # Workloads to be omitted from the run, by index.
set priorities [list]; # Dictionary of workload thread priorities.
set exitOnFail false; # Halt testing and exit process on test failure?
set coTaskMem true; # Use AllocCoTaskMem/FreeCoTaskMem for memory?
set noTrace false; # Disable SQLite trace logging to a file?
@@ -337,10 +363,13 @@
[list null MustHaveIntegerValue -1 -1 -count1 $count(1)] \
[list null MustHaveIntegerValue -1 -1 -count2 $count(2)] \
[list null MustHaveIntegerValue -1 -1 -count3 $count(3)] \
[list null MustHaveIntegerValue -1 -1 -count4 $count(4)] \
[list null MustHaveIntegerValue -1 -1 -count5 $count(5)] \
+ [list null MustHaveIntegerValue -1 -1 -count6 $count(6)] \
+ [list null MustHaveIntegerValue -1 -1 -count7 $count(7)] \
+ [list null MustHaveIntegerValue -1 -1 -count8 $count(8)] \
[list null MustHaveListValue -1 -1 -noWorkload $noWorkload] \
[list null MustHaveListValue -1 -1 -priorities $priorities] \
[list null MustHaveBooleanValue -1 -1 -exitOnFail $exitOnFail] \
[list null MustHaveBooleanValue -1 -1 -coTaskMem $coTaskMem] \
[list null MustHaveBooleanValue -1 -1 -noTrace $noTrace]] $argv
@@ -349,10 +378,13 @@
set count(1) $options(-count1,value)
set count(2) $options(-count2,value)
set count(3) $options(-count3,value)
set count(4) $options(-count4,value)
set count(5) $options(-count5,value)
+ set count(6) $options(-count6,value)
+ set count(7) $options(-count7,value)
+ set count(8) $options(-count8,value)
set noWorkload $options(-noWorkload,value)
set priorities $options(-priorities,value)
set exitOnFail $options(-exitOnFail,value)
set coTaskMem $options(-coTaskMem,value)
set noTrace $options(-noTrace,value)
@@ -429,10 +461,22 @@
tputs $test_channel [appendArgs \
"---- big chunk size is " $count(4) " byte(s)\n"]
tputs $test_channel [appendArgs \
"---- maximum excluded heap memory is " $count(5) " byte(s)\n"]
+
+ tputs $test_channel [appendArgs \
+ "---- workloads will have an auxiliary iteration count of " \
+ $count(6) \n]
+
+ tputs $test_channel [appendArgs \
+ "---- workloads will have an auxiliary iteration delay of " \
+ $count(7) " millisecond(s)\n"]
+
+ tputs $test_channel [appendArgs \
+ "---- workloads will have an auxiliary data value of " \
+ $count(8) \n]
tputs $test_channel [appendArgs \
"---- workloads to be skipped... " \
[expr {[llength $noWorkload] > 0 ? $noWorkload : "none"}] \n]
@@ -1124,11 +1168,11 @@
try {
for {set index 1} {$index <= $count1} {incr index} {
if {[catch {
set size [expr {int(min($maxSize, abs($count3 * $index * 5.0)))}]
set ptr [allocMem $size]; # throw
- useMem $ptr $size; delayTest $count2
+ useMem $ptr $size; delayTest -1 $count2
freeMem $ptr; unset -nocomplain ptr
showTest P
} error]} then {
if {[isExpectedError $error]} then {
showTest p
@@ -1333,10 +1377,70 @@
}
}
doneTest T
}] 0]
}]
+
+ #############################################################################
+ # WORKLOAD #21 (U) #
+ #############################################################################
+
+ set workload(21) [list \
+ [list srcFileName dstFileName table count1 count2 count3] {
+ #
+ # NOTE: Workload #21, rapidly try to release all non-essential memory.
+ #
+ waitTest U
+ lappend ::times(21) [lindex [time {
+ initTest U
+ for {set index 1} {$index <= $::count(6)} {incr index} {
+ if {[catch {
+ releaseMem -1
+ showTestWithDelay U 0 $::count(7)
+ } error]} then {
+ if {[isExpectedError $error]} then {
+ showTest u
+ } else {
+ failTest u $error
+ }
+ }
+ }
+ doneTest U
+ }] 0]
+ }]
+
+ #############################################################################
+ # WORKLOAD #22 (V) #
+ #############################################################################
+
+ set workload(22) [list \
+ [list srcFileName dstFileName table count1 count2 count3] {
+ #
+ # NOTE: Workload #22, rapidly try to change the default cache size.
+ #
+ waitTest V
+ lappend ::times(22) [lindex [time {
+ initTest V
+ setupWorkloadFileDb $dstFileName db
+ for {set index 1} {$index <= $::count(6)} {incr index} {
+ if {[catch {
+ sql execute $db [appendArgs \
+ "PRAGMA default_cache_size=" \
+ [expr {int(rand() * $::count(8))}] \;]
+ showTestWithDelay V 0 $::count(7)
+ } error]} then {
+ if {[isExpectedError $error]} then {
+ showTest v
+ } else {
+ failTest v $error
+ }
+ }
+ }
+ cleanupDb $dstFileName db false true false
+ doneTest V
+ }] 0]
+ }]
} -body {
set workloadNames(all) [array names workload]
tputs $test_channel [appendArgs \
"---- there are " [llength $workloadNames(all)] \
@@ -1494,15 +1598,17 @@
[cleanupThread $thread($index(0))]} then {
unset -nocomplain thread($index(0))
}
}
+ rename releaseMem ""
rename freeMem ""
rename useMem ""
rename allocMem ""
rename failTest ""
rename doneTest ""
+ rename showTestWithDelay ""
rename showTest ""
rename waitTest ""
rename delayTest ""
rename initTest ""
rename isExpectedError ""
Index: lib/System.Data.SQLite/common.eagle
==================================================================
--- lib/System.Data.SQLite/common.eagle
+++ lib/System.Data.SQLite/common.eagle
@@ -177,33 +177,47 @@
# NOTE: Use the specified test .NET Framework.
#
return $::test_net_fx
} else {
set year [getBuildYear]
-
- switch -exact -- $year {
- 2005 {
- return netFx20
- }
- 2008 {
- return netFx35
- }
- 2010 {
- return netFx40
- }
- 2012 {
- return netFx45
- }
- 2013 {
- return netFx451
- # return netFx452
- }
- 2015 {
- return netFx46
- }
- default {
- return netFx35; # TODO: Good "fallback" default?
+ set yearVarName [appendArgs ::test_net_fx_ $year]
+
+ if {[info exists $yearVarName] && \
+ [string length [set $yearVarName]] > 0} then {
+ #
+ # NOTE: Use the specified test .NET Framework, based on the build
+ # year.
+ #
+ return [set $yearVarName]
+ } else {
+ #
+ # NOTE: Fallback to the "well known" .NET Framework version that
+ # is most closely associated with a particular version of
+ # Visual Studio.
+ #
+ switch -exact -- $year {
+ 2005 {
+ return netFx20
+ }
+ 2008 {
+ return netFx35
+ }
+ 2010 {
+ return netFx40
+ }
+ 2012 {
+ return netFx45
+ }
+ 2013 {
+ return netFx451; # TODO: Or "netFx452"?
+ }
+ 2015 {
+ return netFx46
+ }
+ default {
+ return netFx35; # TODO: Good "fallback" default?
+ }
}
}
}
}
Index: readme.htm
==================================================================
--- readme.htm
+++ readme.htm
@@ -4,11 +4,11 @@
ADO.NET SQLite Data Provider
Version 1.0.98.0 - August XX, 2015 (release scheduled)
-Using SQLite 3.8.11
+Using SQLite 3.8.11.1
Originally written by Robert Simpson
Released to the public domain, use at your own risk!
Official provider website: https://system.data.sqlite.org/
Legacy versions: http://sqlite.phxsoftware.com/
@@ -210,19 +210,21 @@
1.0.98.0 - August XX, 2015 (release scheduled)
- - Updated to SQLite 3.8.11.
+ - Updated to SQLite 3.8.11.1.
- Add full support for Visual Studio 2015 and the .NET Framework 4.6.
- Implement the Substring method for LINQ using the "substr" core SQL function. ** Potentially Incompatible Change **
+ - Honor the second argument to Math.Round when using LINQ. ** Potentially Incompatible Change **
- Honor the pre-existing flags for connections during the Open method. Fix for [964063da16]. ** Potentially Incompatible Change **
- Remove errant semi-colons from the SQL used by LINQ to INSERT and then SELECT rows with composite primary keys. Fix for [9d353b0bd8].
- Change the base type for the SQLiteConnectionFlags enumeration to long integer. ** Potentially Incompatible Change **
- Add extended return codes to the SQLiteErrorCode enumeration. Pursuant to [71bedaca19]. ** Potentially Incompatible Change **
- Improve exception handling in all native callbacks implemented in the SQLiteConnection class.
- Add Progress event and ProgressOps connection string property to enable raising progress events during long-running queries.
+ - Add "Recursive Triggers" connection string property to enable or disable the recursive trigger capability. Pursuant to [3a82ee635b].
- Add NoDefaultFlags connection string property to prevent the default connection flags from being used. Pursuant to [964063da16].
- Add VfsName connection string property to allow a non-default VFS to be used by the SQLite core library.
- Add BusyTimeout connection string property to set the busy timeout to be used by the SQLite core library.
- Add UnbindFunction and UnbindAllFunctions methods to the SQLiteConnection class.
- Enable integration with the ZipVFS extension.
Index: testlinq/Program.cs
==================================================================
--- testlinq/Program.cs
+++ testlinq/Program.cs
@@ -187,10 +187,16 @@
}
}
return BinaryGuidTest2(value);
}
+#endif
+#if NET_40 || NET_45 || NET_451 || NET_46
+ case "round":
+ {
+ return RoundTest();
+ }
#endif
default:
{
Console.WriteLine("unknown test \"{0}\"", arg);
return 1;
@@ -786,10 +792,53 @@
}
Environment.SetEnvironmentVariable("SQLite_ForceLogPrepare", null);
Trace.Listeners.Remove(listener);
}
+
+#if NET_40 || NET_45 || NET_451 || NET_46
+ //
+ // NOTE: Used to test the ROUND fix (i.e. being able to properly handle
+ // the two argument form).
+ //
+ private static int RoundTest()
+ {
+ using (northwindEFEntities db = new northwindEFEntities())
+ {
+ bool once = false;
+
+ foreach (int[] i in new int[][] {
+ new int[] { 10503, 65 },
+ new int[] { 10503, 14 },
+ new int[] { 10635, 5 }
+ })
+ {
+ for (int j = 0; j < 3; j++)
+ {
+ int oid = i[0];
+ int pid = i[1];
+
+ var query = from o in db.OrderDetails
+ where o.OrderID == oid && o.ProductID == pid
+ select new { NewUnitPrice = Math.Round(o.UnitPrice, j) };
+
+ foreach (object o in query)
+ {
+ if (once)
+ Console.Write(' ');
+
+ Console.Write("{0}", o);
+
+ once = true;
+ }
+ }
+ }
+ }
+
+ return 0;
+ }
+#endif
private static int OldTests()
{
using (northwindEFEntities db = new northwindEFEntities())
{
Index: www/downloads.wiki
==================================================================
--- www/downloads.wiki
+++ www/downloads.wiki
@@ -481,12 +481,11 @@
This is the only setup package that is capable of installing the
design-time components for Visual Studio 2005.
However, if you do not require the design-time components, please
- consider downloading the associated
- Precompiled Binaries
+ consider downloading the associated "Precompiled Binaries"
instead.
(sha1: daa0f42621b93769755fb7a6546eddd3d56b8e72)
|
@@ -581,12 +580,11 @@
This is the only setup package that is capable of installing the
design-time components for Visual Studio 2008.
However, if you do not require the design-time components, please
- consider downloading the associated
- Precompiled Binaries
+ consider downloading the associated "Precompiled Binaries"
instead.
(sha1: 03d86dba982e89dadfd19fc9bce775dcab040632)
@@ -680,13 +678,12 @@
This is the only setup package that is capable of installing the
design-time components for Visual Studio 2010.
However, if you do not require the design-time components, please
- consider downloading the associated
- Precompiled Binaries
- instead.
+ consider downloading the associated "Precompiled Binaries"
+ instead.
(sha1: 182ae1db5c4747a4d24a8498a0c8ab14dfea3a55)
@@ -779,17 +776,16 @@
This is the only setup package that is capable of installing the
design-time components for Visual Studio 2012.
However, if you do not require the design-time components, please
- consider downloading the associated
- Precompiled Binaries
- instead.
+ consider downloading the associated "Precompiled Binaries"
+ instead.
- Using Entity Framework 6 design-time support may require installing the
- Visual Studio 2012 "flavor" of the
+ Using Entity Framework 6 design-time support may require
+ installing the Visual Studio 2012 "flavor" of the
Entity Framework 6 Tools for Visual Studio 2012 & 2013.
(sha1: ff9df099dce5e3f0d478e33f587a2866cae9c8ab)
@@ -885,17 +881,16 @@
This is the only setup package that is capable of installing the
design-time components for Visual Studio 2013.
However, if you do not require the design-time components, please
- consider downloading the associated
- Precompiled Binaries
- instead.
+ consider downloading the associated "Precompiled Binaries"
+ instead.
- Using Entity Framework 6 design-time support may require installing the
- Visual Studio 2013 "flavor" of the
+ Using Entity Framework 6 design-time support may require
+ installing the Visual Studio 2013 "flavor" of the
Entity Framework 6 Tools for Visual Studio 2012 & 2013.
(sha1: 15e31d48589c72d17e2269f72110c7e7a32cb6e3)
@@ -1091,11 +1086,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2005 SP1 runtime for x86 and the .NET
Framework 2.0 SP2 are required.
- (sha1: 0afeb372cb78ec87e661440151599b91df4b8546)
+ (sha1: cc734b0a7054a9a982667faaf6faf86c94f37b6f)
|
@@ -1109,11 +1104,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2005 SP1
runtime for x86 and the .NET Framework 2.0 SP2 are required.
- (sha1: 8f4acc7c21aa1c18f6caaf335182c1b524d458a1)
+ (sha1: 72574347632bf2aada0703142ccaac197135c1cc)
|
@@ -1134,11 +1129,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2005 SP1 runtime for x64 and the .NET
Framework 2.0 SP2 are required.
- (sha1: c1d1b139698b588e10db6254cb59172c0cac7ff0)
+ (sha1: 3214c23872b129b3d1d955708f5e755b73635cc8)
|
|
@@ -1152,11 +1147,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2005 SP1
runtime for x64 and the .NET Framework 2.0 SP2 are required.
- (sha1: 16f924ace19b1866757f055020b27e7d12aec004)
+ (sha1: 3c56ff6cc15dd0c0f2883fade40a0a352c205c87)
|
@@ -1177,11 +1172,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2008 SP1 runtime for x86 and the .NET
Framework 3.5 SP1 are required.
- (sha1: be8ccc073d46a733e2109092104545a7d30932cb)
+ (sha1: 68557106ccf5966c1b273e5d52e44203d0704d6e)
|
|
@@ -1195,11 +1190,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2008 SP1
runtime for x86 and the .NET Framework 3.5 SP1 are required.
- (sha1: 6ad84dfc749cad5a26dd277ed26ec2ab3dd6e7fb)
+ (sha1: 3b8e7799d1463458fa0dcf8ca35b28b57d30da9e)
|
@@ -1220,11 +1215,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2008 SP1 runtime for x64 and the .NET
Framework 3.5 SP1 are required.
- (sha1: 91124d0b9967b8417d03bf2e453a68c7ba8e3dc9)
+ (sha1: 8b3197f83606afe6cc288da72a69310d5f797362)
|
|
@@ -1238,11 +1233,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2008 SP1
runtime for x64 and the .NET Framework 3.5 SP1 are required.
- (sha1: 8ef4afdddb1b0de8b294392267c87dbcc5528120)
+ (sha1: e30e32261f5003ca588eaaea789a0a49e0b20a08)
|
@@ -1263,11 +1258,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2010 SP1 runtime for x86 and the .NET
Framework 4.0 are required.
- (sha1: 553fda6d6ed177cee668137d6bbe58af29eaa078)
+ (sha1: a6c4403b321b8bf64e4f6c629e1734564fc68646)
|
|
@@ -1281,11 +1276,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2010 SP1
runtime for x86 and the .NET Framework 4.0 are required.
- (sha1: 404a5c35683d78eba1fa4de78546a8e6dd0d7f74)
+ (sha1: b1cd74abb20dd6f724cb25d34fab302c981fc46a)
|
@@ -1306,11 +1301,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2010 SP1 runtime for x64 and the .NET
Framework 4.0 are required.
- (sha1: 3d12f81cebd56bbfc486697bf07c0c95448e67e0)
+ (sha1: 65d4f10bcdf5ce4bf6831de50740c174f879cb64)
|
|
@@ -1324,11 +1319,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2010 SP1
runtime for x64 and the .NET Framework 4.0 are required.
- (sha1: 50995dab87ba2cf0a8afd6a1ebd78c5ef3d71d39)
+ (sha1: d3de79ff9101c370def18a69f2cd0902ccbcaef3)
|
@@ -1340,20 +1335,20 @@
| |
sqlite-netFx45-binary-bundle-Win32-2012-1.0.97.0.zip
- (2.09 MiB)
+ (2.08 MiB)
|
|
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2012 Update 4 runtime for x86 and
the .NET Framework 4.5 are required.
- (sha1: df630c257106eecd6e901b49dd4939f10b2abb0e)
+ (sha1: 1adff0b8f1c8c855f047972ca7be1a6ea99eee5c)
|
|
@@ -1367,11 +1362,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2012
Update 4 runtime for x86 and the .NET Framework 4.5 are required.
- (sha1: 0be4dda13cc849059850918d54704d1f466f24f3)
+ (sha1: 7702faa724ec29a627ddea3cae5a69bd915320e2)
|
@@ -1392,11 +1387,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2012 Update 4 runtime for x64 and
the .NET Framework 4.5 are required.
- (sha1: a8aab51c076d4d6b605d968fd5d49219ef2ad074)
+ (sha1: e3d1c61f1d960b8535577fc62ebad8651cf39cc6)
|
|
@@ -1410,11 +1405,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2012
Update 4 runtime for x64 and the .NET Framework 4.5 are required.
- (sha1: 5660021666d3e1652259cad43bfad21c117bd0a9)
+ (sha1: a4959439e8caec0a886c7a2758c336f3927df9a2)
|
@@ -1426,20 +1421,20 @@
| |
sqlite-netFx451-binary-bundle-Win32-2013-1.0.97.0.zip
- (2.08 MiB)
+ (2.09 MiB)
|
|
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2013 Update 2 runtime for x86 and the
.NET Framework 4.5.1 are required.
- (sha1: a59cf2a937288cf97417d2ad4e3b91e16e85709f)
+ (sha1: 1969fdc760e2b35633b9c5f33df17a7d9a37c656)
|
|
@@ -1453,11 +1448,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2013
Update 2 runtime for x86 and the .NET Framework 4.5.1 are required.
- (sha1: 482c26ca4a69f6b36617867164997a8ae7a1d9ff)
+ (sha1: cc50caf9a77fe4559d58823849d953d8178603e9)
|
@@ -1478,11 +1473,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2013 Update 2 runtime for x64 and the
.NET Framework 4.5.1 are required.
- (sha1: 604abde66847e3fa9a5ccb6510a21335c066c581)
+ (sha1: c945cd9013326d90dcb1b7473088b2d3b4a95d47)
|
|
@@ -1496,11 +1491,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2013
Update 2 runtime for x64 and the .NET Framework 4.5.1 are required.
- (sha1: f7874685b635893906cc7fdedbc9616c8c94c3db)
+ (sha1: 6faf09655f805ba76ab0909ad0d4acf2b1a23712)
|
@@ -1607,11 +1602,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2005 SP1 runtime for x86 is statically
linked. The .NET Framework 2.0 SP2 is required.
- (sha1: 47d4eeea85541e364b93d5ce804479c1d7d70da2)
+ (sha1: 25577f16a03b9cebdf87de65590c8dcb10ec39c8)
|
|
@@ -1626,11 +1621,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2005 SP1
runtime for x86 is statically linked. The .NET Framework 2.0 SP2 is
required.
- (sha1: 98311f72a1c2f30c907ae6d57db9117b183814d1)
+ (sha1: 6a53f04340d0f577c0902087f9ae14c953331272)
@@ -1651,11 +1646,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2005 SP1 runtime for x64 is statically
linked. The .NET Framework 2.0 SP2 is required.
- (sha1: f1cfddbdd78eb2e0f8f3e07d70171a0e3b573f53)
+ (sha1: 1f15cd9479633f7698213f33280353a508674087)
|
|
@@ -1670,11 +1665,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2005 SP1
runtime for x64 is statically linked. The .NET Framework 2.0 SP2 is
required.
- (sha1: d417275b621c1567560bff6ba6ae162cb553f998)
+ (sha1: 712ae5e5d34b3eddd17b20d25ebe0764ea710272)
@@ -1695,11 +1690,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2008 SP1 runtime for x86 is statically
linked. The .NET Framework 3.5 SP1 is required.
- (sha1: d9fc1b8f6f223ee028f088c180b0c40e0d1c21c0)
+ (sha1: b307177dde284527d6daf8d7625376ee3db35d76)
|
|
@@ -1714,11 +1709,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2008 SP1
runtime for x86 is statically linked. The .NET Framework 3.5 SP1 is
required.
- (sha1: 72f12dfa8275e8b0bf30c1c22b9d4fbf9d37a8dd)
+ (sha1: b5a820573ede8ee2d39e7539349e972d973eb32f)
@@ -1730,20 +1725,20 @@
| |
sqlite-netFx35-static-binary-bundle-x64-2008-1.0.97.0.zip
- (2.21 MiB)
+ (2.20 MiB)
|
|
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2008 SP1 runtime for x64 is statically
linked. The .NET Framework 3.5 SP1 is required.
- (sha1: 0d8571821f8feed3e56e3e6455767558ccd309e5)
+ (sha1: bbad7b401adc4ca39d11ddb994272fa4fa34d563)
|
|
@@ -1758,11 +1753,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2008 SP1
runtime for x64 is statically linked. The .NET Framework 3.5 SP1 is
required.
- (sha1: 10a7bdd6691210e78945a616e2a16a1a63a74cb3)
+ (sha1: 1f1ad2fedbcb24a31ccd786282e2cec738e03064)
@@ -1783,11 +1778,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2010 SP1 runtime for x86 is statically
linked. The .NET Framework 4.0 is required.
- (sha1: b1639019c79a47b0644b64436b94cec4d0a8db9d)
+ (sha1: ddd78662fef2e9e9718bfcbd54c3a50b6668f5b7)
|
|
@@ -1802,11 +1797,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2010 SP1
runtime for x86 is statically linked. The .NET Framework 4.0 is
required.
- (sha1: 2939f91f78bd9f240c395f734b8a59e593568ef3)
+ (sha1: 4bc249674a5fa43372e7a4dfcf025eafee1436a4)
@@ -1827,11 +1822,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2010 SP1 runtime for x64 is statically
linked. The .NET Framework 4.0 is required.
- (sha1: c44bd06ccf6579edd3cdd2fc5143567e5f23e3c8)
+ (sha1: 5dc31fa8bb58e25196654407d877c26ef841c468)
|
|
@@ -1846,11 +1841,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2010 SP1
runtime for x64 is statically linked. The .NET Framework 4.0 is
required.
- (sha1: b0baf3c902118d8712bd42607ddfc0e0a1c22dd2)
+ (sha1: 7b07e8e6015a4d455cb8fd832b19c453972092c4)
@@ -1871,11 +1866,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2012 Update 4 runtime for x86 is
statically linked. The .NET Framework 4.5 is required.
- (sha1: 712d4525d6d6aa6bc0dd324aec28fd1c6be5e199)
+ (sha1: 241f027ddb2f5496f98ffea9d9abb6158b6dd97b)
|
|
@@ -1890,11 +1885,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2012
Update 4 runtime for x86 is statically linked. The .NET Framework 4.5
is required.
- (sha1: 67392a8395b8d150e504db23176b644712f34526)
+ (sha1: a0474dde94bcea51de93f1d944df44a728326f40)
@@ -1915,11 +1910,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2012 Update 4 runtime for x64 is
statically linked. The .NET Framework 4.5 is required.
- (sha1: 511ab1ba7388070bb20b966d67f80add487d241a)
+ (sha1: 8c2a819f4cb4ec30a8aa7559a4ec4fe86960f9ff)
|
|
@@ -1934,11 +1929,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2012
Update 4 runtime for x64 is statically linked. The .NET Framework 4.5
is required.
- (sha1: bd1a6abdedd130b90cb826d77432d4149326acca)
+ (sha1: 8e1505424513e9d3721172c582e3a8e900d88aab)
@@ -1959,11 +1954,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x86 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2013 Update 2 runtime for x86 is
statically linked. The .NET Framework 4.5.1 is required.
- (sha1: 479ef51145999822fbee9fcb1182a9a44bfbff86)
+ (sha1: c71a13e48be86edd5679fcda601991d97ddbf5d7)
|
|
@@ -1978,11 +1973,11 @@
This binary package contains all the binaries for the x86 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2013
Update 2 runtime for x86 is statically linked. The .NET Framework 4.5.1
is required.
- (sha1: 79a35b8a552e49350c3bdca2c13c463c1b666076)
+ (sha1: 62bad2092267770842b0da94e56d54bb21e14371)
@@ -2003,11 +1998,11 @@
This binary package features the mixed-mode assembly and contains all
the binaries for the x64 version of the System.Data.SQLite 1.0.97.0
(3.8.10.2) package. The Visual C++ 2013 Update 2 runtime for x64 is
statically linked. The .NET Framework 4.5.1 is required.
- (sha1: 0215f5024574c0192c27803201b8c6dcf97d7485)
+ (sha1: 7884b038ffe7c913f31104cdca418c2b96eedfde)
|
|
@@ -2022,11 +2017,11 @@
This binary package contains all the binaries for the x64 version of the
System.Data.SQLite 1.0.97.0 (3.8.10.2) package. The Visual C++ 2013
Update 2 runtime for x64 is statically linked. The .NET Framework 4.5.1
is required.
- (sha1: 009bb7b8d4dbf4c3497d35714b949697d8432a6d)
+ (sha1: 0640bb7f4013b5276b5c78a34c90dee82ca9af1d)
Index: www/news.wiki
==================================================================
--- www/news.wiki
+++ www/news.wiki
@@ -4,19 +4,21 @@
1.0.98.0 - August XX, 2015 (release scheduled)
- - Updated to [https://www.sqlite.org/draft/releaselog/3_8_11.html|SQLite 3.8.11].
+ - Updated to [https://www.sqlite.org/releaselog/3_8_11_1.html|SQLite 3.8.11.1].
- Add full support for Visual Studio 2015 and the .NET Framework 4.6.
- Implement the Substring method for LINQ using the "substr" core SQL function. ** Potentially Incompatible Change **
+ - Honor the second argument to Math.Round when using LINQ. ** Potentially Incompatible Change **
- Honor the pre-existing flags for connections during the Open method. Fix for [964063da16]. ** Potentially Incompatible Change **
- Remove errant semi-colons from the SQL used by LINQ to INSERT and then SELECT rows with composite primary keys. Fix for [9d353b0bd8].
- Change the base type for the SQLiteConnectionFlags enumeration to long integer. ** Potentially Incompatible Change **
- Add extended return codes to the SQLiteErrorCode enumeration. Pursuant to [71bedaca19]. ** Potentially Incompatible Change **
- Improve exception handling in all native callbacks implemented in the SQLiteConnection class.
- Add Progress event and ProgressOps connection string property to enable raising progress events during long-running queries.
+ - Add "Recursive Triggers" connection string property to enable or disable the recursive trigger capability. Pursuant to [3a82ee635b].
- Add NoDefaultFlags connection string property to prevent the default connection flags from being used. Pursuant to [964063da16].
- Add VfsName connection string property to allow a non-default VFS to be used by the SQLite core library.
- Add BusyTimeout connection string property to set the busy timeout to be used by the SQLite core library.
- Add UnbindFunction and UnbindAllFunctions methods to the SQLiteConnection class.
- Enable integration with the [http://www.hwaci.com/sw/sqlite/zipvfs.html|ZipVFS] extension.
|