mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-06 15:49:35 +03:00
Merge in the latest trunk changes.
FossilOrigin-Name: 5ed31c8279a4f465b982df5dc20cefc286928b93
This commit is contained in:
@@ -3591,9 +3591,6 @@ int sqlite3Fts3Init(sqlite3 *db){
|
|||||||
rc = sqlite3Fts3InitAux(db);
|
rc = sqlite3Fts3InitAux(db);
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
|
|
||||||
rc = sqlite3Fts3InitTok(db);
|
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
|
||||||
|
|
||||||
sqlite3Fts3SimpleTokenizerModule(&pSimple);
|
sqlite3Fts3SimpleTokenizerModule(&pSimple);
|
||||||
sqlite3Fts3PorterTokenizerModule(&pPorter);
|
sqlite3Fts3PorterTokenizerModule(&pPorter);
|
||||||
|
|
||||||
@@ -3647,9 +3644,13 @@ int sqlite3Fts3Init(sqlite3 *db){
|
|||||||
db, "fts4", &fts3Module, (void *)pHash, 0
|
db, "fts4", &fts3Module, (void *)pHash, 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
if( rc==SQLITE_OK ){
|
||||||
|
rc = sqlite3Fts3InitTok(db, (void *)pHash);
|
||||||
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* An error has occurred. Delete the hash table and return the error code. */
|
/* An error has occurred. Delete the hash table and return the error code. */
|
||||||
assert( rc!=SQLITE_OK );
|
assert( rc!=SQLITE_OK );
|
||||||
if( pHash ){
|
if( pHash ){
|
||||||
|
|||||||
@@ -550,7 +550,7 @@ int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
|
|||||||
int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
|
int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
|
||||||
|
|
||||||
/* fts3_tokenize_vtab.c */
|
/* fts3_tokenize_vtab.c */
|
||||||
int sqlite3Fts3InitTok(sqlite3*);
|
int sqlite3Fts3InitTok(sqlite3*, Fts3Hash *);
|
||||||
|
|
||||||
/* fts3_unicode2.c (functions generated by parsing unicode text files) */
|
/* fts3_unicode2.c (functions generated by parsing unicode text files) */
|
||||||
#ifdef SQLITE_ENABLE_FTS4_UNICODE61
|
#ifdef SQLITE_ENABLE_FTS4_UNICODE61
|
||||||
|
|||||||
@@ -875,6 +875,7 @@ static int fts3ExprBalance(Fts3Expr **pp, int nMaxDepth){
|
|||||||
p = apLeaf[i];
|
p = apLeaf[i];
|
||||||
p->pParent = 0;
|
p->pParent = 0;
|
||||||
}else{
|
}else{
|
||||||
|
assert( pFree!=0 );
|
||||||
pFree->pRight = p;
|
pFree->pRight = p;
|
||||||
pFree->pLeft = apLeaf[i];
|
pFree->pLeft = apLeaf[i];
|
||||||
pFree->pLeft->pParent = pFree;
|
pFree->pLeft->pParent = pFree;
|
||||||
|
|||||||
@@ -75,28 +75,22 @@ struct Fts3tokCursor {
|
|||||||
** Query FTS for the tokenizer implementation named zName.
|
** Query FTS for the tokenizer implementation named zName.
|
||||||
*/
|
*/
|
||||||
static int fts3tokQueryTokenizer(
|
static int fts3tokQueryTokenizer(
|
||||||
sqlite3 *db,
|
Fts3Hash *pHash,
|
||||||
const char *zName,
|
const char *zName,
|
||||||
const sqlite3_tokenizer_module **pp
|
const sqlite3_tokenizer_module **pp,
|
||||||
|
char **pzErr
|
||||||
){
|
){
|
||||||
int rc;
|
sqlite3_tokenizer_module *p;
|
||||||
sqlite3_stmt *pStmt;
|
int nName = (int)strlen(zName);
|
||||||
const char *zSql = "SELECT fts3_tokenizer(?)";
|
|
||||||
|
|
||||||
*pp = 0;
|
p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
|
||||||
rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
|
if( !p ){
|
||||||
if( rc!=SQLITE_OK ){
|
*pzErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
|
||||||
return rc;
|
return SQLITE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
|
*pp = p;
|
||||||
if( SQLITE_ROW==sqlite3_step(pStmt) ){
|
return SQLITE_OK;
|
||||||
if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
|
|
||||||
memcpy((void*)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sqlite3_finalize(pStmt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -163,7 +157,7 @@ static int fts3tokDequoteArray(
|
|||||||
*/
|
*/
|
||||||
static int fts3tokConnectMethod(
|
static int fts3tokConnectMethod(
|
||||||
sqlite3 *db, /* Database connection */
|
sqlite3 *db, /* Database connection */
|
||||||
void *pUnused, /* Unused */
|
void *pHash, /* Hash table of tokenizers */
|
||||||
int argc, /* Number of elements in argv array */
|
int argc, /* Number of elements in argv array */
|
||||||
const char * const *argv, /* xCreate/xConnect argument array */
|
const char * const *argv, /* xCreate/xConnect argument array */
|
||||||
sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */
|
sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */
|
||||||
@@ -175,7 +169,6 @@ static int fts3tokConnectMethod(
|
|||||||
int rc;
|
int rc;
|
||||||
char **azDequote = 0;
|
char **azDequote = 0;
|
||||||
int nDequote;
|
int nDequote;
|
||||||
UNUSED_PARAMETER(pUnused);
|
|
||||||
|
|
||||||
rc = sqlite3_declare_vtab(db, FTS3_TOK_SCHEMA);
|
rc = sqlite3_declare_vtab(db, FTS3_TOK_SCHEMA);
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
@@ -190,14 +183,11 @@ static int fts3tokConnectMethod(
|
|||||||
}else{
|
}else{
|
||||||
zModule = azDequote[0];
|
zModule = azDequote[0];
|
||||||
}
|
}
|
||||||
rc = fts3tokQueryTokenizer(db, zModule, &pMod);
|
rc = fts3tokQueryTokenizer((Fts3Hash*)pHash, zModule, &pMod, pzErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rc!=SQLITE_OK ){
|
assert( (rc==SQLITE_OK)==(pMod!=0) );
|
||||||
*pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
|
if( rc==SQLITE_OK ){
|
||||||
}else if( pMod==0 ){
|
|
||||||
rc = SQLITE_ERROR;
|
|
||||||
}else{
|
|
||||||
const char * const *azArg = (const char * const *)&azDequote[1];
|
const char * const *azArg = (const char * const *)&azDequote[1];
|
||||||
rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok);
|
rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok);
|
||||||
}
|
}
|
||||||
@@ -429,7 +419,7 @@ static int fts3tokRowidMethod(
|
|||||||
** Register the fts3tok module with database connection db. Return SQLITE_OK
|
** Register the fts3tok module with database connection db. Return SQLITE_OK
|
||||||
** if successful or an error code if sqlite3_create_module() fails.
|
** if successful or an error code if sqlite3_create_module() fails.
|
||||||
*/
|
*/
|
||||||
int sqlite3Fts3InitTok(sqlite3 *db){
|
int sqlite3Fts3InitTok(sqlite3 *db, Fts3Hash *pHash){
|
||||||
static const sqlite3_module fts3tok_module = {
|
static const sqlite3_module fts3tok_module = {
|
||||||
0, /* iVersion */
|
0, /* iVersion */
|
||||||
fts3tokConnectMethod, /* xCreate */
|
fts3tokConnectMethod, /* xCreate */
|
||||||
@@ -457,7 +447,7 @@ int sqlite3Fts3InitTok(sqlite3 *db){
|
|||||||
};
|
};
|
||||||
int rc; /* Return code */
|
int rc; /* Return code */
|
||||||
|
|
||||||
rc = sqlite3_create_module(db, "fts3tokenize", &fts3tok_module, 0);
|
rc = sqlite3_create_module(db, "fts3tokenize", &fts3tok_module, (void*)pHash);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
28
magic.txt
Normal file
28
magic.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# This file contains suggested magic(5) text for the unix file(1)
|
||||||
|
# utility for recognizing SQLite3 databases.
|
||||||
|
#
|
||||||
|
# When SQLite is used as an application file format, it is desirable to
|
||||||
|
# have file(1) recognize the database file as being with the specific
|
||||||
|
# application. You can set the application_id for a database file
|
||||||
|
# using:
|
||||||
|
#
|
||||||
|
# PRAGMA application_id = INTEGER;
|
||||||
|
#
|
||||||
|
# INTEGER can be any signed 32-bit integer. That integer is written as
|
||||||
|
# a 4-byte big-endian integer into offset 68 of the database header.
|
||||||
|
#
|
||||||
|
# The Monotone application used "PRAGMA user_version=1598903374;" to set
|
||||||
|
# its identifier long before "PRAGMA application_id" became available.
|
||||||
|
# The user_version is very similar to application_id except that it is
|
||||||
|
# stored at offset 68 instead of offset 60. The application_id pragma
|
||||||
|
# is preferred. The rule using offset 60 for Monotone is for historical
|
||||||
|
# compatibility only.
|
||||||
|
#
|
||||||
|
0 string =SQLite\ format\ 3
|
||||||
|
>68 belong =0x0f055111 Fossil repository -
|
||||||
|
>68 belong =0x0f055112 Fossil checkout -
|
||||||
|
>68 belong =0x0f055113 Fossil global configuration -
|
||||||
|
>68 belong =0x42654462 Bentley Systems BeSQLite Database -
|
||||||
|
>68 belong =0x42654c6e Bentley Systems Localization File -
|
||||||
|
>60 belong =0x5f4d544e Monotone source repository -
|
||||||
|
>0 string =SQLite SQLite3 database
|
||||||
92
manifest
92
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Free\sup\sbits\sof\swsFlags\sfor\sreuse.\s\sInstall\sthe\sORDER\sBY\soptimization\ninfrastructure\sfor\sthe\sNGQP.
|
C Merge\sin\sthe\slatest\strunk\schanges.
|
||||||
D 2013-05-10T02:00:35.314
|
D 2013-05-10T02:11:40.008
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in ce81671efd6223d19d4c8c6b88ac2c4134427111
|
F Makefile.in ce81671efd6223d19d4c8c6b88ac2c4134427111
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -55,11 +55,11 @@ F ext/fts3/README.content fdc666a70d5257a64fee209f97cf89e0e6e32b51
|
|||||||
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
||||||
F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
|
F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
|
||||||
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
||||||
F ext/fts3/fts3.c 5c3d44d16701cc4bc81ebf0bb9d5bff136d42de0
|
F ext/fts3/fts3.c 4bc160e6ff9ab5456b600f389f8941485ea5082f
|
||||||
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
||||||
F ext/fts3/fts3Int.h 23ea0a2bb7258d2539376ed60220cce28ba25765
|
F ext/fts3/fts3Int.h 0b167bed9e63151635620a4f639bc62ac6012cba
|
||||||
F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd
|
F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd
|
||||||
F ext/fts3/fts3_expr.c 44b4a3c4983ddbf1958c4a40468efb4ff2e0549a
|
F ext/fts3/fts3_expr.c 193d6fc156d744ab548a2ed06c31869e54dac739
|
||||||
F ext/fts3/fts3_hash.c 8dd2d06b66c72c628c2732555a32bc0943114914
|
F ext/fts3/fts3_hash.c 8dd2d06b66c72c628c2732555a32bc0943114914
|
||||||
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
F ext/fts3/fts3_hash.h 39cf6874dc239d6b4e30479b1975fe5b22a3caaf
|
||||||
F ext/fts3/fts3_icu.c e319e108661147bcca8dd511cd562f33a1ba81b5
|
F ext/fts3/fts3_icu.c e319e108661147bcca8dd511cd562f33a1ba81b5
|
||||||
@@ -67,7 +67,7 @@ F ext/fts3/fts3_porter.c a465b49fcb8249a755792f87516eff182efa42b3
|
|||||||
F ext/fts3/fts3_snippet.c 5fcfcafff46a2a3a63b8e59fcb51987d01c74695
|
F ext/fts3/fts3_snippet.c 5fcfcafff46a2a3a63b8e59fcb51987d01c74695
|
||||||
F ext/fts3/fts3_term.c a521f75132f9a495bdca1bdd45949b3191c52763
|
F ext/fts3/fts3_term.c a521f75132f9a495bdca1bdd45949b3191c52763
|
||||||
F ext/fts3/fts3_test.c f9a1a1702db1bfad3e2d0064746eeb808f125489
|
F ext/fts3/fts3_test.c f9a1a1702db1bfad3e2d0064746eeb808f125489
|
||||||
F ext/fts3/fts3_tokenize_vtab.c a29f126b9e6c6a6f1021a8f7440bf125e68af1f9
|
F ext/fts3/fts3_tokenize_vtab.c 011170fe9eba5ff062f1a31d3188e00267716706
|
||||||
F ext/fts3/fts3_tokenizer.c bbdc731bc91338050675c6d1da9ab82147391e16
|
F ext/fts3/fts3_tokenizer.c bbdc731bc91338050675c6d1da9ab82147391e16
|
||||||
F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
|
F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
|
||||||
F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
|
F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
|
||||||
@@ -112,6 +112,7 @@ F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
|
|||||||
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
|
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
|
||||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||||
|
F magic.txt 3f820e18c43504b25da40ff4b4cdb66dc4c4907e
|
||||||
F main.mk 1b25be82452366abc27cc9ab2acf3244a773d5a1
|
F main.mk 1b25be82452366abc27cc9ab2acf3244a773d5a1
|
||||||
F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
|
F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
|
||||||
F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
|
F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
|
||||||
@@ -137,7 +138,7 @@ F src/backup.c b266767351ae2d847716c56fcb2a1fea7c761c03
|
|||||||
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
|
||||||
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
||||||
F src/btree.c 480a6d255cc4f066029daf23dd54acf152cd0e13
|
F src/btree.c 480a6d255cc4f066029daf23dd54acf152cd0e13
|
||||||
F src/btree.h d9490cd37aaeb530a41b07f06e1262950b1be916
|
F src/btree.h 6fa8a3ff2483d0bb64a9f0105a8cedeac9e00cca
|
||||||
F src/btreeInt.h eecc84f02375b2bb7a44abbcbbe3747dde73edb2
|
F src/btreeInt.h eecc84f02375b2bb7a44abbcbbe3747dde73edb2
|
||||||
F src/build.c 083da8466fd7e481cb8bd5264398f537507f6176
|
F src/build.c 083da8466fd7e481cb8bd5264398f537507f6176
|
||||||
F src/callback.c d7e46f40c3cf53c43550b7da7a1d0479910b62cc
|
F src/callback.c d7e46f40c3cf53c43550b7da7a1d0479910b62cc
|
||||||
@@ -158,7 +159,7 @@ F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
|||||||
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
|
||||||
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
|
||||||
F src/loadext.c c48f7f3f170e502fe0cc20748e03c6e0b5a016c2
|
F src/loadext.c c48f7f3f170e502fe0cc20748e03c6e0b5a016c2
|
||||||
F src/main.c de47c3e6b68f512b9e64ba2533ee4eecc9d501c1
|
F src/main.c 7531758e3167006f55cd65678d9c72a3c1a6759a
|
||||||
F src/malloc.c fe085aa851b666b7c375c1ff957643dc20a04bf6
|
F src/malloc.c fe085aa851b666b7c375c1ff957643dc20a04bf6
|
||||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||||
F src/mem1.c 437c7c4af964895d4650f29881df63535caaa1fa
|
F src/mem1.c 437c7c4af964895d4650f29881df63535caaa1fa
|
||||||
@@ -175,42 +176,42 @@ F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30
|
|||||||
F src/os.c b4ad71336fd96f97776f75587cd9e8218288f5be
|
F src/os.c b4ad71336fd96f97776f75587cd9e8218288f5be
|
||||||
F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
|
||||||
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
|
||||||
F src/os_unix.c 5a214c5431fd005dbb3b8bbaaa306433e8e9b48f
|
F src/os_unix.c 5e0b0ca7594f6707a3ed155528a3ba3318c95e15
|
||||||
F src/os_win.c 673b3e3d1fa3040d8d95a7f1f5e0e553aed56cfb
|
F src/os_win.c 4e2bf0760409aef35e298ff725054e94d834e1a3
|
||||||
F src/pager.c 4a9160d268977e56ae2df90182050ab30fca715d
|
F src/pager.c 49e23f9898113ddfe90942bdf1c1ef57955d0921
|
||||||
F src/pager.h 5cb78b8e1adfd5451e600be7719f5a99d87ac3b1
|
F src/pager.h 5cb78b8e1adfd5451e600be7719f5a99d87ac3b1
|
||||||
F src/parse.y 9708365594eea519cdc8504dee425c0a41c79502
|
F src/parse.y 9708365594eea519cdc8504dee425c0a41c79502
|
||||||
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
||||||
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
|
||||||
F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9
|
F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9
|
||||||
F src/pragma.c 3eacf001cbf4becbd494f8d82d08fdf1648cf8cb
|
F src/pragma.c 8779308bc1ea1901c4bc94dfe9a83d436f73f52c
|
||||||
F src/prepare.c 743e484233c51109666d402f470523553b41797c
|
F src/prepare.c 743e484233c51109666d402f470523553b41797c
|
||||||
F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
|
F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
|
||||||
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
|
F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
|
||||||
F src/resolve.c 83cc2d942ee216bc56956c6e6fadb691c1727fa1
|
F src/resolve.c 83cc2d942ee216bc56956c6e6fadb691c1727fa1
|
||||||
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
|
||||||
F src/select.c 6bfbe11e2fef81c5e18d30513ab6c69f171667eb
|
F src/select.c a4641882279becc200f2680f55f3e89d4e7c7f78
|
||||||
F src/shell.c 5d527e5d08f05ec2c43ff194ea44bf62b974f4c9
|
F src/shell.c 2109d54f67c815a100abd7dc6a6e25eddb3b97eb
|
||||||
F src/sqlite.h.in 5a5a22a9b192d81a9e5dee00274e3a0484c4afb1
|
F src/sqlite.h.in 5a5a22a9b192d81a9e5dee00274e3a0484c4afb1
|
||||||
F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
|
F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
|
||||||
F src/sqlite3ext.h d936f797812c28b81b26ed18345baf8db28a21a5
|
F src/sqlite3ext.h d936f797812c28b81b26ed18345baf8db28a21a5
|
||||||
F src/sqliteInt.h b4411cfc1c7803cdf393975d5420b4da0d8dd1c4
|
F src/sqliteInt.h fab5580c75a16dced398bdd249c0409c9441b466
|
||||||
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
||||||
F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
|
F src/status.c bedc37ec1a6bb9399944024d63f4c769971955a9
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
F src/tclsqlite.c 2ecec9937e69bc17560ad886da35195daa7261b8
|
F src/tclsqlite.c 2ecec9937e69bc17560ad886da35195daa7261b8
|
||||||
F src/test1.c 2b0ec224983403312a4d1db8546e1e1c45694251
|
F src/test1.c ab9dd4fc486a2542f57a2ca17d74fc7f28dfd05a
|
||||||
F src/test2.c 29e7154112f7448d64204e8d31179cf497ecf425
|
F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
|
||||||
F src/test3.c 96aed72a8e1d542fed127e3e8350ae357712fa82
|
F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
|
||||||
F src/test4.c cea2c55110241e4674e66d476d29c914627999f5
|
F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
|
||||||
F src/test5.c a6d1ac55ac054d0b2b8f37b5e655b6c92645a013
|
F src/test5.c a6d1ac55ac054d0b2b8f37b5e655b6c92645a013
|
||||||
F src/test6.c a437f76f9874d2563352a7e6cd0d43217663c220
|
F src/test6.c a437f76f9874d2563352a7e6cd0d43217663c220
|
||||||
F src/test7.c f4b894b7931f8cf9f5cbf37cfa0727703f526a40
|
F src/test7.c 126b886b53f0358b92aba9b81d3fcbfbe9a93cd6
|
||||||
F src/test8.c f7e729e3e1973f68e6d98f5aa65046e3e2cb0bad
|
F src/test8.c 7ee77ea522ae34aa691dfe407139dec80d4fc039
|
||||||
F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60
|
F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60
|
||||||
F src/test_async.c 0612a752896fad42d55c3999a5122af10dcf22ad
|
F src/test_async.c 21e11293a2f72080eda70e1124e9102044531cd8
|
||||||
F src/test_autoext.c 5c95b5d435eaa09d6c0e7d90371c5ca8cd567701
|
F src/test_autoext.c 5c95b5d435eaa09d6c0e7d90371c5ca8cd567701
|
||||||
F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de
|
F src/test_backup.c 3875e899222b651e18b662f86e0e50daa946344e
|
||||||
F src/test_btree.c 5b89601dcb42a33ba8b820a6b763cc9cb48bac16
|
F src/test_btree.c 5b89601dcb42a33ba8b820a6b763cc9cb48bac16
|
||||||
F src/test_config.c 95bb33e9dcaa340a296c0bf0e0ba3d1a1c8004c0
|
F src/test_config.c 95bb33e9dcaa340a296c0bf0e0ba3d1a1c8004c0
|
||||||
F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094
|
F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094
|
||||||
@@ -219,37 +220,37 @@ F src/test_fs.c 8f786bfd0ad48030cf2a06fb1f050e9c60a150d7
|
|||||||
F src/test_func.c 3a8dd37c08ab43b76d38eea2836e34a3897bf170
|
F src/test_func.c 3a8dd37c08ab43b76d38eea2836e34a3897bf170
|
||||||
F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
|
F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
|
||||||
F src/test_init.c 3cbad7ce525aec925f8fda2192d576d47f0d478a
|
F src/test_init.c 3cbad7ce525aec925f8fda2192d576d47f0d478a
|
||||||
F src/test_intarray.c 07ddcebe4097d400ffca362770f1d883c112387a
|
F src/test_intarray.c 87847c71c3c36889c0bcc9c4baf9d31881665d61
|
||||||
F src/test_intarray.h b999bb18d090b8d9d9c49d36ec37ef8f341fe169
|
F src/test_intarray.h b999bb18d090b8d9d9c49d36ec37ef8f341fe169
|
||||||
F src/test_journal.c f5c0a05b7b3d5930db769b5ee6c3766dc2221a64
|
F src/test_journal.c f5c0a05b7b3d5930db769b5ee6c3766dc2221a64
|
||||||
F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
|
F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
|
||||||
F src/test_malloc.c 6982a357a6a6c24f281b91c89303a5c31075c392
|
F src/test_malloc.c 2855429b8232107b3296409be2a8eb68345290c2
|
||||||
F src/test_multiplex.c 0decc630b683979cb32d4b965efd90b6e55a786e
|
F src/test_multiplex.c 5d691eeb6cb6aa7888da28eba5e62a9a857d3c0f
|
||||||
F src/test_multiplex.h 9b63b95f07acedee425fdfe49a47197c9bf5f9d8
|
F src/test_multiplex.h 9b63b95f07acedee425fdfe49a47197c9bf5f9d8
|
||||||
F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e
|
F src/test_mutex.c 293042d623ebba969160f471a82aa1551626454f
|
||||||
F src/test_onefile.c 0396f220561f3b4eedc450cef26d40c593c69a25
|
F src/test_onefile.c 0396f220561f3b4eedc450cef26d40c593c69a25
|
||||||
F src/test_osinst.c 90a845c8183013d80eccb1f29e8805608516edba
|
F src/test_osinst.c 90a845c8183013d80eccb1f29e8805608516edba
|
||||||
F src/test_pcache.c a5cd24730cb43c5b18629043314548c9169abb00
|
F src/test_pcache.c a5cd24730cb43c5b18629043314548c9169abb00
|
||||||
F src/test_quota.c 1ec82e02fd3643899e9a5de9684515e84641c91f
|
F src/test_quota.c 30c64f0ef84734f2231a686df41ed882b0c59bc0
|
||||||
F src/test_quota.h 8761e463b25e75ebc078bd67d70e39b9c817a0cb
|
F src/test_quota.h 8761e463b25e75ebc078bd67d70e39b9c817a0cb
|
||||||
F src/test_rtree.c aba603c949766c4193f1068b91c787f57274e0d9
|
F src/test_rtree.c 1d764c352b5348bb2869ff5f54aff8eadcb96041
|
||||||
F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0
|
F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0
|
||||||
F src/test_server.c 2f99eb2837dfa06a4aacf24af24c6affdf66a84f
|
F src/test_server.c 2f99eb2837dfa06a4aacf24af24c6affdf66a84f
|
||||||
F src/test_sqllog.c c1c1bbedbcaf82b93d83e4f9dd990e62476a680e
|
F src/test_sqllog.c c1c1bbedbcaf82b93d83e4f9dd990e62476a680e
|
||||||
F src/test_stat.c d1569c7a4839f13e80187e2c26b2ab4da2d03935
|
F src/test_stat.c d1569c7a4839f13e80187e2c26b2ab4da2d03935
|
||||||
F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd
|
F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd
|
||||||
F src/test_syscall.c 7e8293e4e6971b0f44c7f7f37b1315a8cc9f6018
|
F src/test_syscall.c 437abc86e3b37facc8531b7d14d42fddb50f3677
|
||||||
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
||||||
F src/test_thread.c e286f2173563f2a1747c24bcda6b9d030bf4f4e4
|
F src/test_thread.c 1e133a40b50e9c035b00174035b846e7eef481cb
|
||||||
F src/test_vfs.c 8e6087a8b3dcc260282074b0efba14b76311120c
|
F src/test_vfs.c 8e6087a8b3dcc260282074b0efba14b76311120c
|
||||||
F src/test_vfstrace.c 34b544e80ba7fb77be15395a609c669df2e660a2
|
F src/test_vfstrace.c 34b544e80ba7fb77be15395a609c669df2e660a2
|
||||||
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
||||||
F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
|
F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
|
||||||
F src/trigger.c cd95ac64efa60e39faf9b5597443192ff27a22fa
|
F src/trigger.c cd95ac64efa60e39faf9b5597443192ff27a22fa
|
||||||
F src/update.c a2a5631d618cbe240fc83725fa9e95c56ae0084c
|
F src/update.c 4c0c6864c4349ba292042e984a56d15985b57f4e
|
||||||
F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
|
F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
|
||||||
F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9
|
F src/util.c f566b5138099a2df8533b190d0dcc74b7dfbe0c9
|
||||||
F src/vacuum.c 2727bdd08847fcb6b2d2da6d14f018910e8645d3
|
F src/vacuum.c ddf21cc9577c4cb459d08bee9863a78ec000c5bb
|
||||||
F src/vdbe.c 5f0047130f80c7fd0bc41bc51a653b5542c4fbd5
|
F src/vdbe.c 5f0047130f80c7fd0bc41bc51a653b5542c4fbd5
|
||||||
F src/vdbe.h b52887278cb173e66188da84dfab216bea61119d
|
F src/vdbe.h b52887278cb173e66188da84dfab216bea61119d
|
||||||
F src/vdbeInt.h c1e830268b75f04a2901dd895b51a637a26c7045
|
F src/vdbeInt.h c1e830268b75f04a2901dd895b51a637a26c7045
|
||||||
@@ -261,9 +262,9 @@ F src/vdbesort.c 4fad64071ae120c25f39dcac572d716b9cadeb7f
|
|||||||
F src/vdbetrace.c 3ad1b4e92b60c082a02ac563da4a2735cc7d297c
|
F src/vdbetrace.c 3ad1b4e92b60c082a02ac563da4a2735cc7d297c
|
||||||
F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
|
F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
|
||||||
F src/wal.c 436bfceb141b9423c45119e68e444358ee0ed35d
|
F src/wal.c 436bfceb141b9423c45119e68e444358ee0ed35d
|
||||||
F src/wal.h a4d3da523d55a226a0b28e9058ef88d0a8051887
|
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||||
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
|
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
|
||||||
F src/where.c 2be67c1a1a018b1de91f08e48baa02db13652e40
|
F src/where.c 4816e3ec624c96b5169f0cc83dbb5cf459ce3fd1
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
|
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
|
||||||
@@ -292,7 +293,7 @@ F test/attach2.test e54436ed956d3d88bdee61221da59bf3935a0966
|
|||||||
F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e
|
F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e
|
||||||
F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
|
F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
|
||||||
F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0
|
F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0
|
||||||
F test/auth.test 1b21145e888130d60a03db0cb829d59df8f29266
|
F test/auth.test 4a4c3b034fff7750513520defa910f376c96ab49
|
||||||
F test/auth2.test a2a371aa6df15f8b0c8109b33d3d7f0f73e4c9aa
|
F test/auth2.test a2a371aa6df15f8b0c8109b33d3d7f0f73e4c9aa
|
||||||
F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5
|
F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5
|
||||||
F test/autoinc.test bd30d372d00045252f6c2e41b5f41455e1975acf
|
F test/autoinc.test bd30d372d00045252f6c2e41b5f41455e1975acf
|
||||||
@@ -513,7 +514,7 @@ F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0
|
|||||||
F test/fts3shared.test 8bb266521d7c5495c0ae522bb4d376ad5387d4a2
|
F test/fts3shared.test 8bb266521d7c5495c0ae522bb4d376ad5387d4a2
|
||||||
F test/fts3snippet.test 8e956051221a34c7daeb504f023cb54d5fa5a8b2
|
F test/fts3snippet.test 8e956051221a34c7daeb504f023cb54d5fa5a8b2
|
||||||
F test/fts3sort.test 95be0b19d7e41c44b29014f13ea8bddd495fd659
|
F test/fts3sort.test 95be0b19d7e41c44b29014f13ea8bddd495fd659
|
||||||
F test/fts3tok1.test 05ff5c57098282bacba7192507702b17f4061295
|
F test/fts3tok1.test 4d9e7401679dc71f6b2f76416309b923210bfdbe
|
||||||
F test/fts3tok_err.test 41e5413139c2ef536ffadfcd1584ee50b1665ec0
|
F test/fts3tok_err.test 41e5413139c2ef536ffadfcd1584ee50b1665ec0
|
||||||
F test/fts4aa.test 95f448fb02c4a976968b08d1b4ce134e720946ae
|
F test/fts4aa.test 95f448fb02c4a976968b08d1b4ce134e720946ae
|
||||||
F test/fts4check.test 66fa274cab2b615f2fb338b257713aba8fad88a8
|
F test/fts4check.test 66fa274cab2b615f2fb338b257713aba8fad88a8
|
||||||
@@ -677,7 +678,7 @@ F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0
|
|||||||
F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16
|
F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16
|
||||||
F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
|
F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
|
||||||
F test/permutations.test 3d0bab9c49c1ec08b868059e30a3e1956f2162e2
|
F test/permutations.test 3d0bab9c49c1ec08b868059e30a3e1956f2162e2
|
||||||
F test/pragma.test 60d29cd3d8098a2c20bf4c072810f99e3bf2757a
|
F test/pragma.test 5e7de6c32a5d764f09437d2025f07e4917b9e178
|
||||||
F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947
|
F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947
|
||||||
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
|
F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
|
||||||
F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301
|
F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301
|
||||||
@@ -722,10 +723,11 @@ F test/select6.test e76bd10a56988f15726c097a5d5a7966fe82d3b2
|
|||||||
F test/select7.test dad6f00f0d49728a879d6eb6451d4752db0b0abe
|
F test/select7.test dad6f00f0d49728a879d6eb6451d4752db0b0abe
|
||||||
F test/select8.test 391de11bdd52339c30580dabbbbe97e3e9a3c79d
|
F test/select8.test 391de11bdd52339c30580dabbbbe97e3e9a3c79d
|
||||||
F test/select9.test c0ca3cd87a8ebb04de2cb1402c77df55d911a0ea
|
F test/select9.test c0ca3cd87a8ebb04de2cb1402c77df55d911a0ea
|
||||||
F test/selectA.test 06d1032fa9009314c95394f2ca2e60d9f7ae8532
|
F test/selectA.test 99cf21df033b93033ea4f34aba14a500f48f04fe
|
||||||
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
|
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
|
||||||
F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977
|
F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977
|
||||||
F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394
|
F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394
|
||||||
|
F test/selectE.test fc02a1eb04c8eb537091482644b7d778ae8759b7
|
||||||
F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
|
F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
|
||||||
F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746
|
F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746
|
||||||
F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
|
F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
|
||||||
@@ -971,7 +973,7 @@ F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
|
|||||||
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
||||||
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
||||||
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
||||||
F test/wal.test 0b4837cd5e9283c116d30810a6859bed7425a95e
|
F test/wal.test e6dcf26e3e5cce2adb2f2f57eda53bc2c54c580c
|
||||||
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
||||||
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
||||||
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
||||||
@@ -1005,7 +1007,7 @@ F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
|
|||||||
F test/where7.test 5c566388f0cc318b0032ce860f4ac5548e3c265a
|
F test/where7.test 5c566388f0cc318b0032ce860f4ac5548e3c265a
|
||||||
F test/where8.test d9f889e62dccddb9d790b0c84dfc7861e03a162c
|
F test/where8.test d9f889e62dccddb9d790b0c84dfc7861e03a162c
|
||||||
F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
|
F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
|
||||||
F test/where9.test 0157862ccf0cfdf1a4622cdf697e5e2f09a8de44
|
F test/where9.test 1b4387c6eacc9a32b28b4d837c27f857c785d0d8
|
||||||
F test/whereA.test 24c234263c8fe358f079d5e57d884fb569d2da0a
|
F test/whereA.test 24c234263c8fe358f079d5e57d884fb569d2da0a
|
||||||
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
|
||||||
F test/whereC.test 13ff5ec0dba407c0e0c075980c75b3275a6774e5
|
F test/whereC.test 13ff5ec0dba407c0e0c075980c75b3275a6774e5
|
||||||
@@ -1040,7 +1042,7 @@ F tool/omittest.tcl 4665982e95a6e5c1bd806cf7bc3dea95be422d77
|
|||||||
F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
|
F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
|
||||||
F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
|
F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
|
||||||
F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5
|
F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5
|
||||||
F tool/showdb.c acd24ea035a3bd2ffe266f1ef8a161812c29b2f0
|
F tool/showdb.c 525ecc443578647703051308ad50a93de6ba2c4b
|
||||||
F tool/showjournal.c b62cecaab86a4053d944c276bb5232e4d17ece02
|
F tool/showjournal.c b62cecaab86a4053d944c276bb5232e4d17ece02
|
||||||
F tool/showwal.c 3f7f7da5ec0cba51b1449a75f700493377da57b5
|
F tool/showwal.c 3f7f7da5ec0cba51b1449a75f700493377da57b5
|
||||||
F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe
|
F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe
|
||||||
@@ -1060,7 +1062,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||||
P 3c2e83a4a2c5e85202162feeb37ef7a3911c05a3
|
P 82d50e198025a2fdb8ee733edb8419d388ee5362 cf5c3642247fdd34d87f0368594cd7b8f081636a
|
||||||
R fe9c54bd236af22a2f9e27cec8708db5
|
R bed3d93321566d3c8fda15cb3370678a
|
||||||
U drh
|
U drh
|
||||||
Z c9a2e102e5146d5a293863d252ad4424
|
Z 9d7433ee1472cd0008b2ab99b16fa998
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
82d50e198025a2fdb8ee733edb8419d388ee5362
|
5ed31c8279a4f465b982df5dc20cefc286928b93
|
||||||
@@ -140,6 +140,7 @@ int sqlite3BtreeNewDb(Btree *p);
|
|||||||
#define BTREE_TEXT_ENCODING 5
|
#define BTREE_TEXT_ENCODING 5
|
||||||
#define BTREE_USER_VERSION 6
|
#define BTREE_USER_VERSION 6
|
||||||
#define BTREE_INCR_VACUUM 7
|
#define BTREE_INCR_VACUUM 7
|
||||||
|
#define BTREE_APPLICATION_ID 8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Values that may be OR'd together to form the second argument of an
|
** Values that may be OR'd together to form the second argument of an
|
||||||
|
|||||||
104
src/main.c
104
src/main.c
@@ -1029,6 +1029,110 @@ void sqlite3RollbackAll(sqlite3 *db, int tripCode){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Return a static string containing the name corresponding to the error code
|
||||||
|
** specified in the argument.
|
||||||
|
*/
|
||||||
|
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \
|
||||||
|
defined(SQLITE_DEBUG_OS_TRACE)
|
||||||
|
const char *sqlite3ErrName(int rc){
|
||||||
|
const char *zName = 0;
|
||||||
|
int i, origRc = rc;
|
||||||
|
for(i=0; i<2 && zName==0; i++, rc &= 0xff){
|
||||||
|
switch( rc ){
|
||||||
|
case SQLITE_OK: zName = "SQLITE_OK"; break;
|
||||||
|
case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
|
||||||
|
case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break;
|
||||||
|
case SQLITE_PERM: zName = "SQLITE_PERM"; break;
|
||||||
|
case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
|
||||||
|
case SQLITE_ABORT_ROLLBACK: zName = "SQLITE_ABORT_ROLLBACK"; break;
|
||||||
|
case SQLITE_BUSY: zName = "SQLITE_BUSY"; break;
|
||||||
|
case SQLITE_BUSY_RECOVERY: zName = "SQLITE_BUSY_RECOVERY"; break;
|
||||||
|
case SQLITE_LOCKED: zName = "SQLITE_LOCKED"; break;
|
||||||
|
case SQLITE_LOCKED_SHAREDCACHE: zName = "SQLITE_LOCKED_SHAREDCACHE";break;
|
||||||
|
case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
|
||||||
|
case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
|
||||||
|
case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break;
|
||||||
|
case SQLITE_READONLY_CANTLOCK: zName = "SQLITE_READONLY_CANTLOCK"; break;
|
||||||
|
case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break;
|
||||||
|
case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
|
||||||
|
case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
|
||||||
|
case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break;
|
||||||
|
case SQLITE_IOERR_SHORT_READ: zName = "SQLITE_IOERR_SHORT_READ"; break;
|
||||||
|
case SQLITE_IOERR_WRITE: zName = "SQLITE_IOERR_WRITE"; break;
|
||||||
|
case SQLITE_IOERR_FSYNC: zName = "SQLITE_IOERR_FSYNC"; break;
|
||||||
|
case SQLITE_IOERR_DIR_FSYNC: zName = "SQLITE_IOERR_DIR_FSYNC"; break;
|
||||||
|
case SQLITE_IOERR_TRUNCATE: zName = "SQLITE_IOERR_TRUNCATE"; break;
|
||||||
|
case SQLITE_IOERR_FSTAT: zName = "SQLITE_IOERR_FSTAT"; break;
|
||||||
|
case SQLITE_IOERR_UNLOCK: zName = "SQLITE_IOERR_UNLOCK"; break;
|
||||||
|
case SQLITE_IOERR_RDLOCK: zName = "SQLITE_IOERR_RDLOCK"; break;
|
||||||
|
case SQLITE_IOERR_DELETE: zName = "SQLITE_IOERR_DELETE"; break;
|
||||||
|
case SQLITE_IOERR_BLOCKED: zName = "SQLITE_IOERR_BLOCKED"; break;
|
||||||
|
case SQLITE_IOERR_NOMEM: zName = "SQLITE_IOERR_NOMEM"; break;
|
||||||
|
case SQLITE_IOERR_ACCESS: zName = "SQLITE_IOERR_ACCESS"; break;
|
||||||
|
case SQLITE_IOERR_CHECKRESERVEDLOCK:
|
||||||
|
zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break;
|
||||||
|
case SQLITE_IOERR_LOCK: zName = "SQLITE_IOERR_LOCK"; break;
|
||||||
|
case SQLITE_IOERR_CLOSE: zName = "SQLITE_IOERR_CLOSE"; break;
|
||||||
|
case SQLITE_IOERR_DIR_CLOSE: zName = "SQLITE_IOERR_DIR_CLOSE"; break;
|
||||||
|
case SQLITE_IOERR_SHMOPEN: zName = "SQLITE_IOERR_SHMOPEN"; break;
|
||||||
|
case SQLITE_IOERR_SHMSIZE: zName = "SQLITE_IOERR_SHMSIZE"; break;
|
||||||
|
case SQLITE_IOERR_SHMLOCK: zName = "SQLITE_IOERR_SHMLOCK"; break;
|
||||||
|
case SQLITE_IOERR_SHMMAP: zName = "SQLITE_IOERR_SHMMAP"; break;
|
||||||
|
case SQLITE_IOERR_SEEK: zName = "SQLITE_IOERR_SEEK"; break;
|
||||||
|
case SQLITE_IOERR_DELETE_NOENT: zName = "SQLITE_IOERR_DELETE_NOENT";break;
|
||||||
|
case SQLITE_IOERR_MMAP: zName = "SQLITE_IOERR_MMAP"; break;
|
||||||
|
case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break;
|
||||||
|
case SQLITE_CORRUPT_VTAB: zName = "SQLITE_CORRUPT_VTAB"; break;
|
||||||
|
case SQLITE_NOTFOUND: zName = "SQLITE_NOTFOUND"; break;
|
||||||
|
case SQLITE_FULL: zName = "SQLITE_FULL"; break;
|
||||||
|
case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break;
|
||||||
|
case SQLITE_CANTOPEN_NOTEMPDIR: zName = "SQLITE_CANTOPEN_NOTEMPDIR";break;
|
||||||
|
case SQLITE_CANTOPEN_ISDIR: zName = "SQLITE_CANTOPEN_ISDIR"; break;
|
||||||
|
case SQLITE_CANTOPEN_FULLPATH: zName = "SQLITE_CANTOPEN_FULLPATH"; break;
|
||||||
|
case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break;
|
||||||
|
case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break;
|
||||||
|
case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break;
|
||||||
|
case SQLITE_TOOBIG: zName = "SQLITE_TOOBIG"; break;
|
||||||
|
case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break;
|
||||||
|
case SQLITE_CONSTRAINT_UNIQUE: zName = "SQLITE_CONSTRAINT_UNIQUE"; break;
|
||||||
|
case SQLITE_CONSTRAINT_TRIGGER: zName = "SQLITE_CONSTRAINT_TRIGGER";break;
|
||||||
|
case SQLITE_CONSTRAINT_FOREIGNKEY:
|
||||||
|
zName = "SQLITE_CONSTRAINT_FOREIGNKEY"; break;
|
||||||
|
case SQLITE_CONSTRAINT_CHECK: zName = "SQLITE_CONSTRAINT_CHECK"; break;
|
||||||
|
case SQLITE_CONSTRAINT_PRIMARYKEY:
|
||||||
|
zName = "SQLITE_CONSTRAINT_PRIMARYKEY"; break;
|
||||||
|
case SQLITE_CONSTRAINT_NOTNULL: zName = "SQLITE_CONSTRAINT_NOTNULL";break;
|
||||||
|
case SQLITE_CONSTRAINT_COMMITHOOK:
|
||||||
|
zName = "SQLITE_CONSTRAINT_COMMITHOOK"; break;
|
||||||
|
case SQLITE_CONSTRAINT_VTAB: zName = "SQLITE_CONSTRAINT_VTAB"; break;
|
||||||
|
case SQLITE_CONSTRAINT_FUNCTION:
|
||||||
|
zName = "SQLITE_CONSTRAINT_FUNCTION"; break;
|
||||||
|
case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break;
|
||||||
|
case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break;
|
||||||
|
case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break;
|
||||||
|
case SQLITE_AUTH: zName = "SQLITE_AUTH"; break;
|
||||||
|
case SQLITE_FORMAT: zName = "SQLITE_FORMAT"; break;
|
||||||
|
case SQLITE_RANGE: zName = "SQLITE_RANGE"; break;
|
||||||
|
case SQLITE_NOTADB: zName = "SQLITE_NOTADB"; break;
|
||||||
|
case SQLITE_ROW: zName = "SQLITE_ROW"; break;
|
||||||
|
case SQLITE_NOTICE: zName = "SQLITE_NOTICE"; break;
|
||||||
|
case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break;
|
||||||
|
case SQLITE_NOTICE_RECOVER_ROLLBACK:
|
||||||
|
zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break;
|
||||||
|
case SQLITE_WARNING: zName = "SQLITE_WARNING"; break;
|
||||||
|
case SQLITE_DONE: zName = "SQLITE_DONE"; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( zName==0 ){
|
||||||
|
static char zBuf[50];
|
||||||
|
sqlite3_snprintf(sizeof(zBuf), zBuf, "SQLITE_UNKNOWN(%d)", origRc);
|
||||||
|
zName = zBuf;
|
||||||
|
}
|
||||||
|
return zName;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Return a static string that describes the kind of error specified in the
|
** Return a static string that describes the kind of error specified in the
|
||||||
** argument.
|
** argument.
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#ifndef SQLITE_OMIT_WAL
|
#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3152,6 +3152,8 @@ static int unixRead(
|
|||||||
unixFile *pFile = (unixFile *)id;
|
unixFile *pFile = (unixFile *)id;
|
||||||
int got;
|
int got;
|
||||||
assert( id );
|
assert( id );
|
||||||
|
assert( offset>=0 );
|
||||||
|
assert( amt>0 );
|
||||||
|
|
||||||
/* If this is a database file (not a journal, master-journal or temp
|
/* If this is a database file (not a journal, master-journal or temp
|
||||||
** file), the bytes in the locking range should never be read or written. */
|
** file), the bytes in the locking range should never be read or written. */
|
||||||
|
|||||||
208
src/os_win.c
208
src/os_win.c
@@ -1523,7 +1523,7 @@ static int getLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if( 0 == dwLen ){
|
if( 0 == dwLen ){
|
||||||
sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", lastErrno, lastErrno);
|
sqlite3_snprintf(nBuf, zBuf, "OsError 0x%lx (%lu)", lastErrno, lastErrno);
|
||||||
}else{
|
}else{
|
||||||
/* copy a maximum of nBuf chars to output buffer */
|
/* copy a maximum of nBuf chars to output buffer */
|
||||||
sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
|
sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
|
||||||
@@ -1566,7 +1566,7 @@ static int winLogErrorAtLine(
|
|||||||
for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){}
|
for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){}
|
||||||
zMsg[i] = 0;
|
zMsg[i] = 0;
|
||||||
sqlite3_log(errcode,
|
sqlite3_log(errcode,
|
||||||
"os_win.c:%d: (%d) %s(%s) - %s",
|
"os_win.c:%d: (%lu) %s(%s) - %s",
|
||||||
iLine, lastErrno, zFunc, zPath, zMsg
|
iLine, lastErrno, zFunc, zPath, zMsg
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -2027,6 +2027,8 @@ static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
|
|||||||
DWORD dwRet; /* Value returned by SetFilePointer() */
|
DWORD dwRet; /* Value returned by SetFilePointer() */
|
||||||
DWORD lastErrno; /* Value returned by GetLastError() */
|
DWORD lastErrno; /* Value returned by GetLastError() */
|
||||||
|
|
||||||
|
OSTRACE(("SEEK file=%p, offset=%lld\n", pFile->h, iOffset));
|
||||||
|
|
||||||
upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
|
upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
|
||||||
lowerBits = (LONG)(iOffset & 0xffffffff);
|
lowerBits = (LONG)(iOffset & 0xffffffff);
|
||||||
|
|
||||||
@@ -2044,9 +2046,11 @@ static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
|
|||||||
pFile->lastErrno = lastErrno;
|
pFile->lastErrno = lastErrno;
|
||||||
winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
|
winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
|
||||||
"seekWinFile", pFile->zPath);
|
"seekWinFile", pFile->zPath);
|
||||||
|
OSTRACE(("SEEK file=%p, rc=SQLITE_IOERR_SEEK\n", pFile->h));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSTRACE(("SEEK file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
@@ -2063,9 +2067,11 @@ static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
|
|||||||
pFile->lastErrno = osGetLastError();
|
pFile->lastErrno = osGetLastError();
|
||||||
winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
|
winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
|
||||||
"seekWinFile", pFile->zPath);
|
"seekWinFile", pFile->zPath);
|
||||||
|
OSTRACE(("SEEK file=%p, rc=SQLITE_IOERR_SEEK\n", pFile->h));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSTRACE(("SEEK file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -2094,8 +2100,8 @@ static int winClose(sqlite3_file *id){
|
|||||||
#ifndef SQLITE_OMIT_WAL
|
#ifndef SQLITE_OMIT_WAL
|
||||||
assert( pFile->pShm==0 );
|
assert( pFile->pShm==0 );
|
||||||
#endif
|
#endif
|
||||||
OSTRACE(("CLOSE %d\n", pFile->h));
|
|
||||||
assert( pFile->h!=NULL && pFile->h!=INVALID_HANDLE_VALUE );
|
assert( pFile->h!=NULL && pFile->h!=INVALID_HANDLE_VALUE );
|
||||||
|
OSTRACE(("CLOSE file=%p\n", pFile->h));
|
||||||
|
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
rc = winUnmapfile(pFile);
|
rc = winUnmapfile(pFile);
|
||||||
@@ -2121,11 +2127,11 @@ static int winClose(sqlite3_file *id){
|
|||||||
sqlite3_free(pFile->zDeleteOnClose);
|
sqlite3_free(pFile->zDeleteOnClose);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed"));
|
|
||||||
if( rc ){
|
if( rc ){
|
||||||
pFile->h = NULL;
|
pFile->h = NULL;
|
||||||
}
|
}
|
||||||
OpenCounter(-1);
|
OpenCounter(-1);
|
||||||
|
OSTRACE(("CLOSE file=%p, rc=%s\n", pFile->h, rc ? "ok" : "failed"));
|
||||||
return rc ? SQLITE_OK
|
return rc ? SQLITE_OK
|
||||||
: winLogError(SQLITE_IOERR_CLOSE, osGetLastError(),
|
: winLogError(SQLITE_IOERR_CLOSE, osGetLastError(),
|
||||||
"winClose", pFile->zPath);
|
"winClose", pFile->zPath);
|
||||||
@@ -2151,8 +2157,10 @@ static int winRead(
|
|||||||
|
|
||||||
assert( id!=0 );
|
assert( id!=0 );
|
||||||
assert( amt>0 );
|
assert( amt>0 );
|
||||||
|
assert( offset>=0 );
|
||||||
SimulateIOError(return SQLITE_IOERR_READ);
|
SimulateIOError(return SQLITE_IOERR_READ);
|
||||||
OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
|
OSTRACE(("READ file=%p, buffer=%p, amount=%d, offset=%lld, lock=%d\n",
|
||||||
|
pFile->h, pBuf, amt, offset, pFile->locktype));
|
||||||
|
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
/* Deal with as much of this read request as possible by transfering
|
/* Deal with as much of this read request as possible by transfering
|
||||||
@@ -2160,6 +2168,7 @@ static int winRead(
|
|||||||
if( offset<pFile->mmapSize ){
|
if( offset<pFile->mmapSize ){
|
||||||
if( offset+amt <= pFile->mmapSize ){
|
if( offset+amt <= pFile->mmapSize ){
|
||||||
memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], amt);
|
memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], amt);
|
||||||
|
OSTRACE(("READ-MMAP file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}else{
|
}else{
|
||||||
int nCopy = (int)(pFile->mmapSize - offset);
|
int nCopy = (int)(pFile->mmapSize - offset);
|
||||||
@@ -2173,6 +2182,7 @@ static int winRead(
|
|||||||
|
|
||||||
#if SQLITE_OS_WINCE
|
#if SQLITE_OS_WINCE
|
||||||
if( seekWinFile(pFile, offset) ){
|
if( seekWinFile(pFile, offset) ){
|
||||||
|
OSTRACE(("READ file=%p, rc=SQLITE_FULL\n", pFile->h));
|
||||||
return SQLITE_FULL;
|
return SQLITE_FULL;
|
||||||
}
|
}
|
||||||
while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
|
while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
|
||||||
@@ -2186,6 +2196,7 @@ static int winRead(
|
|||||||
DWORD lastErrno;
|
DWORD lastErrno;
|
||||||
if( retryIoerr(&nRetry, &lastErrno) ) continue;
|
if( retryIoerr(&nRetry, &lastErrno) ) continue;
|
||||||
pFile->lastErrno = lastErrno;
|
pFile->lastErrno = lastErrno;
|
||||||
|
OSTRACE(("READ file=%p, rc=SQLITE_IOERR_READ\n", pFile->h));
|
||||||
return winLogError(SQLITE_IOERR_READ, pFile->lastErrno,
|
return winLogError(SQLITE_IOERR_READ, pFile->lastErrno,
|
||||||
"winRead", pFile->zPath);
|
"winRead", pFile->zPath);
|
||||||
}
|
}
|
||||||
@@ -2193,9 +2204,11 @@ static int winRead(
|
|||||||
if( nRead<(DWORD)amt ){
|
if( nRead<(DWORD)amt ){
|
||||||
/* Unread parts of the buffer must be zero-filled */
|
/* Unread parts of the buffer must be zero-filled */
|
||||||
memset(&((char*)pBuf)[nRead], 0, amt-nRead);
|
memset(&((char*)pBuf)[nRead], 0, amt-nRead);
|
||||||
|
OSTRACE(("READ file=%p, rc=SQLITE_IOERR_SHORT_READ\n", pFile->h));
|
||||||
return SQLITE_IOERR_SHORT_READ;
|
return SQLITE_IOERR_SHORT_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSTRACE(("READ file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2218,7 +2231,8 @@ static int winWrite(
|
|||||||
SimulateIOError(return SQLITE_IOERR_WRITE);
|
SimulateIOError(return SQLITE_IOERR_WRITE);
|
||||||
SimulateDiskfullError(return SQLITE_FULL);
|
SimulateDiskfullError(return SQLITE_FULL);
|
||||||
|
|
||||||
OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
|
OSTRACE(("WRITE file=%p, buffer=%p, amount=%d, offset=%lld, lock=%d\n",
|
||||||
|
pFile->h, pBuf, amt, offset, pFile->locktype));
|
||||||
|
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
/* Deal with as much of this write request as possible by transfering
|
/* Deal with as much of this write request as possible by transfering
|
||||||
@@ -2226,6 +2240,7 @@ static int winWrite(
|
|||||||
if( offset<pFile->mmapSize ){
|
if( offset<pFile->mmapSize ){
|
||||||
if( offset+amt <= pFile->mmapSize ){
|
if( offset+amt <= pFile->mmapSize ){
|
||||||
memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt);
|
memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt);
|
||||||
|
OSTRACE(("WRITE-MMAP file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}else{
|
}else{
|
||||||
int nCopy = (int)(pFile->mmapSize - offset);
|
int nCopy = (int)(pFile->mmapSize - offset);
|
||||||
@@ -2288,13 +2303,16 @@ static int winWrite(
|
|||||||
if( rc ){
|
if( rc ){
|
||||||
if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
|
if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
|
||||||
|| ( pFile->lastErrno==ERROR_DISK_FULL )){
|
|| ( pFile->lastErrno==ERROR_DISK_FULL )){
|
||||||
|
OSTRACE(("WRITE file=%p, rc=SQLITE_FULL\n", pFile->h));
|
||||||
return SQLITE_FULL;
|
return SQLITE_FULL;
|
||||||
}
|
}
|
||||||
|
OSTRACE(("WRITE file=%p, rc=SQLITE_IOERR_WRITE\n", pFile->h));
|
||||||
return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno,
|
return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno,
|
||||||
"winWrite", pFile->zPath);
|
"winWrite", pFile->zPath);
|
||||||
}else{
|
}else{
|
||||||
logIoerr(nRetry);
|
logIoerr(nRetry);
|
||||||
}
|
}
|
||||||
|
OSTRACE(("WRITE file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2307,9 +2325,9 @@ static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
|
|||||||
DWORD lastErrno;
|
DWORD lastErrno;
|
||||||
|
|
||||||
assert( pFile );
|
assert( pFile );
|
||||||
|
|
||||||
OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte));
|
|
||||||
SimulateIOError(return SQLITE_IOERR_TRUNCATE);
|
SimulateIOError(return SQLITE_IOERR_TRUNCATE);
|
||||||
|
OSTRACE(("TRUNCATE file=%p, size=%lld, lock=%d\n",
|
||||||
|
pFile->h, nByte, pFile->locktype));
|
||||||
|
|
||||||
/* If the user has configured a chunk-size for this file, truncate the
|
/* If the user has configured a chunk-size for this file, truncate the
|
||||||
** file so that it consists of an integer number of chunks (i.e. the
|
** file so that it consists of an integer number of chunks (i.e. the
|
||||||
@@ -2341,7 +2359,7 @@ static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok"));
|
OSTRACE(("TRUNCATE file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2381,13 +2399,14 @@ static int winSync(sqlite3_file *id, int flags){
|
|||||||
|| (flags&0x0F)==SQLITE_SYNC_FULL
|
|| (flags&0x0F)==SQLITE_SYNC_FULL
|
||||||
);
|
);
|
||||||
|
|
||||||
OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype));
|
|
||||||
|
|
||||||
/* Unix cannot, but some systems may return SQLITE_FULL from here. This
|
/* Unix cannot, but some systems may return SQLITE_FULL from here. This
|
||||||
** line is to test that doing so does not cause any problems.
|
** line is to test that doing so does not cause any problems.
|
||||||
*/
|
*/
|
||||||
SimulateDiskfullError( return SQLITE_FULL );
|
SimulateDiskfullError( return SQLITE_FULL );
|
||||||
|
|
||||||
|
OSTRACE(("SYNC file=%p, flags=%x, lock=%d\n",
|
||||||
|
pFile->h, flags, pFile->locktype));
|
||||||
|
|
||||||
#ifndef SQLITE_TEST
|
#ifndef SQLITE_TEST
|
||||||
UNUSED_PARAMETER(flags);
|
UNUSED_PARAMETER(flags);
|
||||||
#else
|
#else
|
||||||
@@ -2406,9 +2425,11 @@ static int winSync(sqlite3_file *id, int flags){
|
|||||||
rc = osFlushFileBuffers(pFile->h);
|
rc = osFlushFileBuffers(pFile->h);
|
||||||
SimulateIOError( rc=FALSE );
|
SimulateIOError( rc=FALSE );
|
||||||
if( rc ){
|
if( rc ){
|
||||||
|
OSTRACE(("SYNC file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}else{
|
}else{
|
||||||
pFile->lastErrno = osGetLastError();
|
pFile->lastErrno = osGetLastError();
|
||||||
|
OSTRACE(("SYNC file=%p, rc=SQLITE_IOERR_FSYNC\n", pFile->h));
|
||||||
return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno,
|
return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno,
|
||||||
"winSync", pFile->zPath);
|
"winSync", pFile->zPath);
|
||||||
}
|
}
|
||||||
@@ -2423,7 +2444,10 @@ static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
|
|
||||||
assert( id!=0 );
|
assert( id!=0 );
|
||||||
|
assert( pSize!=0 );
|
||||||
SimulateIOError(return SQLITE_IOERR_FSTAT);
|
SimulateIOError(return SQLITE_IOERR_FSTAT);
|
||||||
|
OSTRACE(("SIZE file=%p, pSize=%p\n", pFile->h, pSize));
|
||||||
|
|
||||||
#if SQLITE_OS_WINRT
|
#if SQLITE_OS_WINRT
|
||||||
{
|
{
|
||||||
FILE_STANDARD_INFO info;
|
FILE_STANDARD_INFO info;
|
||||||
@@ -2452,6 +2476,8 @@ static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
OSTRACE(("SIZE file=%p, pSize=%p, *pSize=%lld, rc=%s\n",
|
||||||
|
pFile->h, pSize, *pSize, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2493,6 +2519,7 @@ static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
|
|||||||
*/
|
*/
|
||||||
static int getReadLock(winFile *pFile){
|
static int getReadLock(winFile *pFile){
|
||||||
int res;
|
int res;
|
||||||
|
OSTRACE(("READ-LOCK file=%p, lock=%d\n", pFile->h, pFile->locktype));
|
||||||
if( isNT() ){
|
if( isNT() ){
|
||||||
#if SQLITE_OS_WINCE
|
#if SQLITE_OS_WINCE
|
||||||
/*
|
/*
|
||||||
@@ -2518,6 +2545,7 @@ static int getReadLock(winFile *pFile){
|
|||||||
pFile->lastErrno = osGetLastError();
|
pFile->lastErrno = osGetLastError();
|
||||||
/* No need to log a failure to lock */
|
/* No need to log a failure to lock */
|
||||||
}
|
}
|
||||||
|
OSTRACE(("READ-LOCK file=%p, rc=%s\n", pFile->h, sqlite3ErrName(res)));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2527,6 +2555,7 @@ static int getReadLock(winFile *pFile){
|
|||||||
static int unlockReadLock(winFile *pFile){
|
static int unlockReadLock(winFile *pFile){
|
||||||
int res;
|
int res;
|
||||||
DWORD lastErrno;
|
DWORD lastErrno;
|
||||||
|
OSTRACE(("READ-UNLOCK file=%p, lock=%d\n", pFile->h, pFile->locktype));
|
||||||
if( isNT() ){
|
if( isNT() ){
|
||||||
res = winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
|
res = winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
|
||||||
}
|
}
|
||||||
@@ -2540,6 +2569,7 @@ static int unlockReadLock(winFile *pFile){
|
|||||||
winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno,
|
winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno,
|
||||||
"unlockReadLock", pFile->zPath);
|
"unlockReadLock", pFile->zPath);
|
||||||
}
|
}
|
||||||
|
OSTRACE(("READ-UNLOCK file=%p, rc=%s\n", pFile->h, sqlite3ErrName(res)));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2578,14 +2608,15 @@ static int winLock(sqlite3_file *id, int locktype){
|
|||||||
DWORD lastErrno = NO_ERROR;
|
DWORD lastErrno = NO_ERROR;
|
||||||
|
|
||||||
assert( id!=0 );
|
assert( id!=0 );
|
||||||
OSTRACE(("LOCK %d %d was %d(%d)\n",
|
OSTRACE(("LOCK file=%p, oldLock=%d(%d), newLock=%d\n",
|
||||||
pFile->h, locktype, pFile->locktype, pFile->sharedLockByte));
|
pFile->h, pFile->locktype, pFile->sharedLockByte, locktype));
|
||||||
|
|
||||||
/* If there is already a lock of this type or more restrictive on the
|
/* If there is already a lock of this type or more restrictive on the
|
||||||
** OsFile, do nothing. Don't use the end_lock: exit path, as
|
** OsFile, do nothing. Don't use the end_lock: exit path, as
|
||||||
** sqlite3OsEnterMutex() hasn't been called yet.
|
** sqlite3OsEnterMutex() hasn't been called yet.
|
||||||
*/
|
*/
|
||||||
if( pFile->locktype>=locktype ){
|
if( pFile->locktype>=locktype ){
|
||||||
|
OSTRACE(("LOCK-HELD file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2613,7 +2644,8 @@ static int winLock(sqlite3_file *id, int locktype){
|
|||||||
** If you are using this code as a model for alternative VFSes, do not
|
** If you are using this code as a model for alternative VFSes, do not
|
||||||
** copy this retry logic. It is a hack intended for Windows only.
|
** copy this retry logic. It is a hack intended for Windows only.
|
||||||
*/
|
*/
|
||||||
OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt));
|
OSTRACE(("LOCK-PENDING-FAIL file=%p, count=%d, rc=%s\n",
|
||||||
|
pFile->h, cnt, sqlite3ErrName(res)));
|
||||||
if( cnt ) sqlite3_win32_sleep(1);
|
if( cnt ) sqlite3_win32_sleep(1);
|
||||||
}
|
}
|
||||||
gotPendingLock = res;
|
gotPendingLock = res;
|
||||||
@@ -2658,14 +2690,12 @@ static int winLock(sqlite3_file *id, int locktype){
|
|||||||
if( locktype==EXCLUSIVE_LOCK && res ){
|
if( locktype==EXCLUSIVE_LOCK && res ){
|
||||||
assert( pFile->locktype>=SHARED_LOCK );
|
assert( pFile->locktype>=SHARED_LOCK );
|
||||||
res = unlockReadLock(pFile);
|
res = unlockReadLock(pFile);
|
||||||
OSTRACE(("unreadlock = %d\n", res));
|
|
||||||
res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0,
|
res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0,
|
||||||
SHARED_SIZE, 0);
|
SHARED_SIZE, 0);
|
||||||
if( res ){
|
if( res ){
|
||||||
newLocktype = EXCLUSIVE_LOCK;
|
newLocktype = EXCLUSIVE_LOCK;
|
||||||
}else{
|
}else{
|
||||||
lastErrno = osGetLastError();
|
lastErrno = osGetLastError();
|
||||||
OSTRACE(("error-code = %d\n", lastErrno));
|
|
||||||
getReadLock(pFile);
|
getReadLock(pFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2683,12 +2713,14 @@ static int winLock(sqlite3_file *id, int locktype){
|
|||||||
if( res ){
|
if( res ){
|
||||||
rc = SQLITE_OK;
|
rc = SQLITE_OK;
|
||||||
}else{
|
}else{
|
||||||
OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h,
|
OSTRACE(("LOCK-FAIL file=%p, wanted=%d, got=%d\n",
|
||||||
locktype, newLocktype));
|
pFile->h, locktype, newLocktype));
|
||||||
pFile->lastErrno = lastErrno;
|
pFile->lastErrno = lastErrno;
|
||||||
rc = SQLITE_BUSY;
|
rc = SQLITE_BUSY;
|
||||||
}
|
}
|
||||||
pFile->locktype = (u8)newLocktype;
|
pFile->locktype = (u8)newLocktype;
|
||||||
|
OSTRACE(("LOCK file=%p, lock=%d, rc=%s\n",
|
||||||
|
pFile->h, pFile->locktype, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2702,20 +2734,23 @@ static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
|
|||||||
winFile *pFile = (winFile*)id;
|
winFile *pFile = (winFile*)id;
|
||||||
|
|
||||||
SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
|
SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
|
||||||
|
OSTRACE(("TEST-WR-LOCK file=%p, pResOut=%p\n", pFile->h, pResOut));
|
||||||
|
|
||||||
assert( id!=0 );
|
assert( id!=0 );
|
||||||
if( pFile->locktype>=RESERVED_LOCK ){
|
if( pFile->locktype>=RESERVED_LOCK ){
|
||||||
rc = 1;
|
rc = 1;
|
||||||
OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc));
|
OSTRACE(("TEST-WR-LOCK file=%p, rc=%d (local)\n", pFile->h, rc));
|
||||||
}else{
|
}else{
|
||||||
rc = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS,RESERVED_BYTE, 0, 1, 0);
|
rc = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS,RESERVED_BYTE, 0, 1, 0);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0);
|
winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0);
|
||||||
}
|
}
|
||||||
rc = !rc;
|
rc = !rc;
|
||||||
OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc));
|
OSTRACE(("TEST-WR-LOCK file=%p, rc=%d (remote)\n", pFile->h, rc));
|
||||||
}
|
}
|
||||||
*pResOut = rc;
|
*pResOut = rc;
|
||||||
|
OSTRACE(("TEST-WR-LOCK file=%p, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n",
|
||||||
|
pFile->h, pResOut, *pResOut));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2736,8 +2771,8 @@ static int winUnlock(sqlite3_file *id, int locktype){
|
|||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
assert( pFile!=0 );
|
assert( pFile!=0 );
|
||||||
assert( locktype<=SHARED_LOCK );
|
assert( locktype<=SHARED_LOCK );
|
||||||
OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype,
|
OSTRACE(("UNLOCK file=%p, oldLock=%d(%d), newLock=%d\n",
|
||||||
pFile->locktype, pFile->sharedLockByte));
|
pFile->h, pFile->locktype, pFile->sharedLockByte, locktype));
|
||||||
type = pFile->locktype;
|
type = pFile->locktype;
|
||||||
if( type>=EXCLUSIVE_LOCK ){
|
if( type>=EXCLUSIVE_LOCK ){
|
||||||
winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
|
winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
|
||||||
@@ -2758,6 +2793,8 @@ static int winUnlock(sqlite3_file *id, int locktype){
|
|||||||
winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0);
|
winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0);
|
||||||
}
|
}
|
||||||
pFile->locktype = (u8)locktype;
|
pFile->locktype = (u8)locktype;
|
||||||
|
OSTRACE(("UNLOCK file=%p, lock=%d, rc=%s\n",
|
||||||
|
pFile->h, pFile->locktype, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2785,17 +2822,21 @@ static int getTempname(int nBuf, char *zBuf);
|
|||||||
*/
|
*/
|
||||||
static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
||||||
winFile *pFile = (winFile*)id;
|
winFile *pFile = (winFile*)id;
|
||||||
|
OSTRACE(("FCNTL file=%p, op=%d, pArg=%p\n", pFile->h, op, pArg));
|
||||||
switch( op ){
|
switch( op ){
|
||||||
case SQLITE_FCNTL_LOCKSTATE: {
|
case SQLITE_FCNTL_LOCKSTATE: {
|
||||||
*(int*)pArg = pFile->locktype;
|
*(int*)pArg = pFile->locktype;
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_LAST_ERRNO: {
|
case SQLITE_LAST_ERRNO: {
|
||||||
*(int*)pArg = (int)pFile->lastErrno;
|
*(int*)pArg = (int)pFile->lastErrno;
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_CHUNK_SIZE: {
|
case SQLITE_FCNTL_CHUNK_SIZE: {
|
||||||
pFile->szChunk = *(int *)pArg;
|
pFile->szChunk = *(int *)pArg;
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_SIZE_HINT: {
|
case SQLITE_FCNTL_SIZE_HINT: {
|
||||||
@@ -2810,20 +2851,25 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
|||||||
SimulateIOErrorBenign(0);
|
SimulateIOErrorBenign(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_PERSIST_WAL: {
|
case SQLITE_FCNTL_PERSIST_WAL: {
|
||||||
winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg);
|
winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg);
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
|
case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
|
||||||
winModeBit(pFile, WINFILE_PSOW, (int*)pArg);
|
winModeBit(pFile, WINFILE_PSOW, (int*)pArg);
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_VFSNAME: {
|
case SQLITE_FCNTL_VFSNAME: {
|
||||||
*(char**)pArg = sqlite3_mprintf("win32");
|
*(char**)pArg = sqlite3_mprintf("win32");
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_WIN32_AV_RETRY: {
|
case SQLITE_FCNTL_WIN32_AV_RETRY: {
|
||||||
@@ -2838,6 +2884,7 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
|||||||
}else{
|
}else{
|
||||||
a[1] = win32IoerrRetryDelay;
|
a[1] = win32IoerrRetryDelay;
|
||||||
}
|
}
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
case SQLITE_FCNTL_TEMPFILENAME: {
|
case SQLITE_FCNTL_TEMPFILENAME: {
|
||||||
@@ -2846,6 +2893,7 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
|||||||
getTempname(pFile->pVfs->mxPathname, zTFile);
|
getTempname(pFile->pVfs->mxPathname, zTFile);
|
||||||
*(char**)pArg = zTFile;
|
*(char**)pArg = zTFile;
|
||||||
}
|
}
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
@@ -2856,10 +2904,12 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
|
|||||||
}
|
}
|
||||||
*(i64*)pArg = pFile->mmapSizeMax;
|
*(i64*)pArg = pFile->mmapSizeMax;
|
||||||
if( newLimit>=0 ) pFile->mmapSizeMax = newLimit;
|
if( newLimit>=0 ) pFile->mmapSizeMax = newLimit;
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
OSTRACE(("FCNTL file=%p, rc=SQLITE_NOTFOUND\n", pFile->h));
|
||||||
return SQLITE_NOTFOUND;
|
return SQLITE_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3020,6 +3070,9 @@ static int winShmSystemLock(
|
|||||||
/* Access to the winShmNode object is serialized by the caller */
|
/* Access to the winShmNode object is serialized by the caller */
|
||||||
assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
|
assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
|
||||||
|
|
||||||
|
OSTRACE(("SHM-LOCK file=%p, lock=%d, offset=%d, size=%d\n",
|
||||||
|
pFile->hFile.h, lockType, ofst, nByte));
|
||||||
|
|
||||||
/* Release/Acquire the system-level lock */
|
/* Release/Acquire the system-level lock */
|
||||||
if( lockType==_SHM_UNLCK ){
|
if( lockType==_SHM_UNLCK ){
|
||||||
rc = winUnlockFile(&pFile->hFile.h, ofst, 0, nByte, 0);
|
rc = winUnlockFile(&pFile->hFile.h, ofst, 0, nByte, 0);
|
||||||
@@ -3037,11 +3090,9 @@ static int winShmSystemLock(
|
|||||||
rc = SQLITE_BUSY;
|
rc = SQLITE_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n",
|
OSTRACE(("SHM-LOCK file=%p, func=%s, errno=%lu, rc=%s\n",
|
||||||
pFile->hFile.h,
|
pFile->hFile.h, (lockType == _SHM_UNLCK) ? "winUnlockFile" :
|
||||||
rc==SQLITE_OK ? "ok" : "failed",
|
"winLockFile", pFile->lastErrno, sqlite3ErrName(rc)));
|
||||||
lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx",
|
|
||||||
pFile->lastErrno));
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -3061,6 +3112,8 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
|
|||||||
winShmNode *p;
|
winShmNode *p;
|
||||||
BOOL bRc;
|
BOOL bRc;
|
||||||
assert( winShmMutexHeld() );
|
assert( winShmMutexHeld() );
|
||||||
|
OSTRACE(("SHM-PURGE pid=%lu, deleteFlag=%d\n",
|
||||||
|
osGetCurrentProcessId(), deleteFlag));
|
||||||
pp = &winShmNodeList;
|
pp = &winShmNodeList;
|
||||||
while( (p = *pp)!=0 ){
|
while( (p = *pp)!=0 ){
|
||||||
if( p->nRef==0 ){
|
if( p->nRef==0 ){
|
||||||
@@ -3068,13 +3121,11 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
|
|||||||
if( p->mutex ) sqlite3_mutex_free(p->mutex);
|
if( p->mutex ) sqlite3_mutex_free(p->mutex);
|
||||||
for(i=0; i<p->nRegion; i++){
|
for(i=0; i<p->nRegion; i++){
|
||||||
bRc = osUnmapViewOfFile(p->aRegion[i].pMap);
|
bRc = osUnmapViewOfFile(p->aRegion[i].pMap);
|
||||||
OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
|
OSTRACE(("SHM-PURGE-UNMAP pid=%lu, region=%d, rc=%s\n",
|
||||||
(int)osGetCurrentProcessId(), i,
|
osGetCurrentProcessId(), i, bRc ? "ok" : "failed"));
|
||||||
bRc ? "ok" : "failed"));
|
|
||||||
bRc = osCloseHandle(p->aRegion[i].hMap);
|
bRc = osCloseHandle(p->aRegion[i].hMap);
|
||||||
OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
|
OSTRACE(("SHM-PURGE-CLOSE pid=%lu, region=%d, rc=%s\n",
|
||||||
(int)osGetCurrentProcessId(), i,
|
osGetCurrentProcessId(), i, bRc ? "ok" : "failed"));
|
||||||
bRc ? "ok" : "failed"));
|
|
||||||
}
|
}
|
||||||
if( p->hFile.h!=NULL && p->hFile.h!=INVALID_HANDLE_VALUE ){
|
if( p->hFile.h!=NULL && p->hFile.h!=INVALID_HANDLE_VALUE ){
|
||||||
SimulateIOErrorBenign(1);
|
SimulateIOErrorBenign(1);
|
||||||
@@ -3353,9 +3404,9 @@ static int winShmLock(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlite3_mutex_leave(pShmNode->mutex);
|
sqlite3_mutex_leave(pShmNode->mutex);
|
||||||
OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
|
OSTRACE(("SHM-LOCK pid=%lu, id=%d, sharedMask=%03x, exclMask=%03x, rc=%s\n",
|
||||||
p->id, (int)osGetCurrentProcessId(), p->sharedMask, p->exclMask,
|
osGetCurrentProcessId(), p->id, p->sharedMask, p->exclMask,
|
||||||
rc ? "failed" : "ok"));
|
sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3476,8 +3527,8 @@ static int winShmMap(
|
|||||||
NULL, PAGE_READWRITE, 0, nByte, NULL
|
NULL, PAGE_READWRITE, 0, nByte, NULL
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
|
OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n",
|
||||||
(int)osGetCurrentProcessId(), pShmNode->nRegion, nByte,
|
osGetCurrentProcessId(), pShmNode->nRegion, nByte,
|
||||||
hMap ? "ok" : "failed"));
|
hMap ? "ok" : "failed"));
|
||||||
if( hMap ){
|
if( hMap ){
|
||||||
int iOffset = pShmNode->nRegion*szRegion;
|
int iOffset = pShmNode->nRegion*szRegion;
|
||||||
@@ -3491,8 +3542,8 @@ static int winShmMap(
|
|||||||
0, iOffset - iOffsetShift, szRegion + iOffsetShift
|
0, iOffset - iOffsetShift, szRegion + iOffsetShift
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
|
OSTRACE(("SHM-MAP-MAP pid=%lu, region=%d, offset=%d, size=%d, rc=%s\n",
|
||||||
(int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset,
|
osGetCurrentProcessId(), pShmNode->nRegion, iOffset,
|
||||||
szRegion, pMap ? "ok" : "failed"));
|
szRegion, pMap ? "ok" : "failed"));
|
||||||
}
|
}
|
||||||
if( !pMap ){
|
if( !pMap ){
|
||||||
@@ -3535,9 +3586,16 @@ shmpage_out:
|
|||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
static int winUnmapfile(winFile *pFile){
|
static int winUnmapfile(winFile *pFile){
|
||||||
assert( pFile!=0 );
|
assert( pFile!=0 );
|
||||||
|
OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, hMap=%p, pMapRegion=%p, "
|
||||||
|
"mmapSize=%lld, mmapSizeActual=%lld, mmapSizeMax=%lld\n",
|
||||||
|
osGetCurrentProcessId(), pFile, pFile->hMap, pFile->pMapRegion,
|
||||||
|
pFile->mmapSize, pFile->mmapSizeActual, pFile->mmapSizeMax));
|
||||||
if( pFile->pMapRegion ){
|
if( pFile->pMapRegion ){
|
||||||
if( !osUnmapViewOfFile(pFile->pMapRegion) ){
|
if( !osUnmapViewOfFile(pFile->pMapRegion) ){
|
||||||
pFile->lastErrno = osGetLastError();
|
pFile->lastErrno = osGetLastError();
|
||||||
|
OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, pMapRegion=%p, "
|
||||||
|
"rc=SQLITE_IOERR_MMAP\n", osGetCurrentProcessId(), pFile,
|
||||||
|
pFile->pMapRegion));
|
||||||
return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno,
|
return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno,
|
||||||
"winUnmap1", pFile->zPath);
|
"winUnmap1", pFile->zPath);
|
||||||
}
|
}
|
||||||
@@ -3548,11 +3606,15 @@ static int winUnmapfile(winFile *pFile){
|
|||||||
if( pFile->hMap!=NULL ){
|
if( pFile->hMap!=NULL ){
|
||||||
if( !osCloseHandle(pFile->hMap) ){
|
if( !osCloseHandle(pFile->hMap) ){
|
||||||
pFile->lastErrno = osGetLastError();
|
pFile->lastErrno = osGetLastError();
|
||||||
|
OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, hMap=%p, rc=SQLITE_IOERR_MMAP\n",
|
||||||
|
osGetCurrentProcessId(), pFile, pFile->hMap));
|
||||||
return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno,
|
return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno,
|
||||||
"winUnmap2", pFile->zPath);
|
"winUnmap2", pFile->zPath);
|
||||||
}
|
}
|
||||||
pFile->hMap = NULL;
|
pFile->hMap = NULL;
|
||||||
}
|
}
|
||||||
|
OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, rc=SQLITE_OK\n",
|
||||||
|
osGetCurrentProcessId(), pFile));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3577,11 +3639,16 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
assert( nMap>=0 || pFd->nFetchOut==0 );
|
assert( nMap>=0 || pFd->nFetchOut==0 );
|
||||||
|
OSTRACE(("MAP-FILE pid=%lu, pFile=%p, size=%lld\n",
|
||||||
|
osGetCurrentProcessId(), pFd, nByte));
|
||||||
|
|
||||||
if( pFd->nFetchOut>0 ) return SQLITE_OK;
|
if( pFd->nFetchOut>0 ) return SQLITE_OK;
|
||||||
|
|
||||||
if( nMap<0 ){
|
if( nMap<0 ){
|
||||||
rc = winFileSize((sqlite3_file*)pFd, &nMap);
|
rc = winFileSize((sqlite3_file*)pFd, &nMap);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
|
OSTRACE(("MAP-FILE pid=%lu, pFile=%p, rc=SQLITE_IOERR_FSTAT\n",
|
||||||
|
osGetCurrentProcessId(), pFd));
|
||||||
return SQLITE_IOERR_FSTAT;
|
return SQLITE_IOERR_FSTAT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3619,6 +3686,8 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
|
|||||||
rc = winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno,
|
rc = winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno,
|
||||||
"winMapfile", pFd->zPath);
|
"winMapfile", pFd->zPath);
|
||||||
/* Log the error, but continue normal operation using xRead/xWrite */
|
/* Log the error, but continue normal operation using xRead/xWrite */
|
||||||
|
OSTRACE(("MAP-FILE-CREATE pid=%lu, pFile=%p, rc=SQLITE_IOERR_MMAP\n",
|
||||||
|
osGetCurrentProcessId(), pFd));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
assert( (nMap % winSysInfo.dwPageSize)==0 );
|
assert( (nMap % winSysInfo.dwPageSize)==0 );
|
||||||
@@ -3634,6 +3703,8 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
|
|||||||
pFd->lastErrno = osGetLastError();
|
pFd->lastErrno = osGetLastError();
|
||||||
winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno,
|
winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno,
|
||||||
"winMapfile", pFd->zPath);
|
"winMapfile", pFd->zPath);
|
||||||
|
OSTRACE(("MAP-FILE-MAP pid=%lu, pFile=%p, rc=SQLITE_IOERR_MMAP\n",
|
||||||
|
osGetCurrentProcessId(), pFd));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
pFd->pMapRegion = pNew;
|
pFd->pMapRegion = pNew;
|
||||||
@@ -3641,6 +3712,8 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
|
|||||||
pFd->mmapSizeActual = nMap;
|
pFd->mmapSizeActual = nMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSTRACE(("MAP-FILE pid=%lu, pFile=%p, rc=SQLITE_OK\n",
|
||||||
|
osGetCurrentProcessId(), pFd));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_MAX_MMAP_SIZE>0 */
|
#endif /* SQLITE_MAX_MMAP_SIZE>0 */
|
||||||
@@ -3655,7 +3728,7 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
|
|||||||
** value of *pp is undefined in this case.
|
** value of *pp is undefined in this case.
|
||||||
**
|
**
|
||||||
** If this function does return a pointer, the caller must eventually
|
** If this function does return a pointer, the caller must eventually
|
||||||
** release the reference by calling unixUnfetch().
|
** release the reference by calling winUnfetch().
|
||||||
*/
|
*/
|
||||||
static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
|
static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
@@ -3663,11 +3736,18 @@ static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
|
|||||||
#endif
|
#endif
|
||||||
*pp = 0;
|
*pp = 0;
|
||||||
|
|
||||||
|
OSTRACE(("FETCH pid=%lu, pFile=%p, offset=%lld, amount=%d, pp=%p\n",
|
||||||
|
osGetCurrentProcessId(), fd, iOff, nAmt, pp));
|
||||||
|
|
||||||
#if SQLITE_MAX_MMAP_SIZE>0
|
#if SQLITE_MAX_MMAP_SIZE>0
|
||||||
if( pFd->mmapSizeMax>0 ){
|
if( pFd->mmapSizeMax>0 ){
|
||||||
if( pFd->pMapRegion==0 ){
|
if( pFd->pMapRegion==0 ){
|
||||||
int rc = winMapfile(pFd, -1);
|
int rc = winMapfile(pFd, -1);
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ){
|
||||||
|
OSTRACE(("FETCH pid=%lu, pFile=%p, rc=%s\n",
|
||||||
|
osGetCurrentProcessId(), pFd, sqlite3ErrName(rc)));
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if( pFd->mmapSize >= iOff+nAmt ){
|
if( pFd->mmapSize >= iOff+nAmt ){
|
||||||
*pp = &((u8 *)pFd->pMapRegion)[iOff];
|
*pp = &((u8 *)pFd->pMapRegion)[iOff];
|
||||||
@@ -3675,14 +3755,17 @@ static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
OSTRACE(("FETCH pid=%lu, pFile=%p, pp=%p, *pp=%p, rc=SQLITE_OK\n",
|
||||||
|
osGetCurrentProcessId(), fd, pp, *pp));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** If the third argument is non-NULL, then this function releases a
|
** If the third argument is non-NULL, then this function releases a
|
||||||
** reference obtained by an earlier call to unixFetch(). The second
|
** reference obtained by an earlier call to winFetch(). The second
|
||||||
** argument passed to this function must be the same as the corresponding
|
** argument passed to this function must be the same as the corresponding
|
||||||
** argument that was passed to the unixFetch() invocation.
|
** argument that was passed to the winFetch() invocation.
|
||||||
**
|
**
|
||||||
** Or, if the third argument is NULL, then this function is being called
|
** Or, if the third argument is NULL, then this function is being called
|
||||||
** to inform the VFS layer that, according to POSIX, any existing mapping
|
** to inform the VFS layer that, according to POSIX, any existing mapping
|
||||||
@@ -3700,6 +3783,9 @@ static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){
|
|||||||
/* If p!=0, it must match the iOff value. */
|
/* If p!=0, it must match the iOff value. */
|
||||||
assert( p==0 || p==&((u8 *)pFd->pMapRegion)[iOff] );
|
assert( p==0 || p==&((u8 *)pFd->pMapRegion)[iOff] );
|
||||||
|
|
||||||
|
OSTRACE(("UNFETCH pid=%lu, pFile=%p, offset=%lld, p=%p\n",
|
||||||
|
osGetCurrentProcessId(), pFd, iOff, p));
|
||||||
|
|
||||||
if( p ){
|
if( p ){
|
||||||
pFd->nFetchOut--;
|
pFd->nFetchOut--;
|
||||||
}else{
|
}else{
|
||||||
@@ -3712,6 +3798,9 @@ static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){
|
|||||||
|
|
||||||
assert( pFd->nFetchOut>=0 );
|
assert( pFd->nFetchOut>=0 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
OSTRACE(("UNFETCH pid=%lu, pFile=%p, rc=SQLITE_OK\n",
|
||||||
|
osGetCurrentProcessId(), fd));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3808,6 +3897,7 @@ static int getTempname(int nBuf, char *zBuf){
|
|||||||
sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
|
sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
|
||||||
sqlite3_free(zMulti);
|
sqlite3_free(zMulti);
|
||||||
}else{
|
}else{
|
||||||
|
OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n"));
|
||||||
return SQLITE_IOERR_NOMEM;
|
return SQLITE_IOERR_NOMEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3821,6 +3911,7 @@ static int getTempname(int nBuf, char *zBuf){
|
|||||||
sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
|
sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
|
||||||
sqlite3_free(zUtf8);
|
sqlite3_free(zUtf8);
|
||||||
}else{
|
}else{
|
||||||
|
OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n"));
|
||||||
return SQLITE_IOERR_NOMEM;
|
return SQLITE_IOERR_NOMEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3833,6 +3924,7 @@ static int getTempname(int nBuf, char *zBuf){
|
|||||||
nTempPath = sqlite3Strlen30(zTempPath);
|
nTempPath = sqlite3Strlen30(zTempPath);
|
||||||
|
|
||||||
if( (nTempPath + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){
|
if( (nTempPath + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){
|
||||||
|
OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
|
||||||
return SQLITE_ERROR;
|
return SQLITE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3850,7 +3942,7 @@ static int getTempname(int nBuf, char *zBuf){
|
|||||||
zBuf[j] = 0;
|
zBuf[j] = 0;
|
||||||
zBuf[j+1] = 0;
|
zBuf[j+1] = 0;
|
||||||
|
|
||||||
OSTRACE(("TEMP FILENAME: %s\n", zBuf));
|
OSTRACE(("TEMP-FILENAME name=%s, rc=SQLITE_OK\n", zBuf));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3931,6 +4023,9 @@ static int winOpen(
|
|||||||
));
|
));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
OSTRACE(("OPEN name=%s, pFile=%p, flags=%x, pOutFlags=%p\n",
|
||||||
|
zUtf8Name, id, flags, pOutFlags));
|
||||||
|
|
||||||
/* Check the following statements are true:
|
/* Check the following statements are true:
|
||||||
**
|
**
|
||||||
** (a) Exactly one of the READWRITE and READONLY flags must be set, and
|
** (a) Exactly one of the READWRITE and READONLY flags must be set, and
|
||||||
@@ -3976,6 +4071,7 @@ static int winOpen(
|
|||||||
memset(zTmpname, 0, MAX_PATH+2);
|
memset(zTmpname, 0, MAX_PATH+2);
|
||||||
rc = getTempname(MAX_PATH+2, zTmpname);
|
rc = getTempname(MAX_PATH+2, zTmpname);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
|
OSTRACE(("OPEN name=%s, rc=%s", zUtf8Name, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
zUtf8Name = zTmpname;
|
zUtf8Name = zTmpname;
|
||||||
@@ -3991,11 +4087,13 @@ static int winOpen(
|
|||||||
/* Convert the filename to the system encoding. */
|
/* Convert the filename to the system encoding. */
|
||||||
zConverted = convertUtf8Filename(zUtf8Name);
|
zConverted = convertUtf8Filename(zUtf8Name);
|
||||||
if( zConverted==0 ){
|
if( zConverted==0 ){
|
||||||
|
OSTRACE(("OPEN name=%s, rc=SQLITE_IOERR_NOMEM", zUtf8Name));
|
||||||
return SQLITE_IOERR_NOMEM;
|
return SQLITE_IOERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( winIsDir(zConverted) ){
|
if( winIsDir(zConverted) ){
|
||||||
sqlite3_free(zConverted);
|
sqlite3_free(zConverted);
|
||||||
|
OSTRACE(("OPEN name=%s, rc=SQLITE_CANTOPEN_ISDIR", zUtf8Name));
|
||||||
return SQLITE_CANTOPEN_ISDIR;
|
return SQLITE_CANTOPEN_ISDIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4086,9 +4184,8 @@ static int winOpen(
|
|||||||
#endif
|
#endif
|
||||||
logIoerr(cnt);
|
logIoerr(cnt);
|
||||||
|
|
||||||
OSTRACE(("OPEN %d %s 0x%lx %s\n",
|
OSTRACE(("OPEN file=%p, name=%s, access=%lx, rc=%s\n", h, zUtf8Name,
|
||||||
h, zName, dwDesiredAccess,
|
dwDesiredAccess, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok"));
|
||||||
h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
|
|
||||||
|
|
||||||
if( h==INVALID_HANDLE_VALUE ){
|
if( h==INVALID_HANDLE_VALUE ){
|
||||||
pFile->lastErrno = lastErrno;
|
pFile->lastErrno = lastErrno;
|
||||||
@@ -4112,12 +4209,17 @@ static int winOpen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSTRACE(("OPEN file=%p, name=%s, access=%lx, pOutFlags=%p, *pOutFlags=%d, "
|
||||||
|
"rc=%s\n", h, zUtf8Name, dwDesiredAccess, pOutFlags, pOutFlags ?
|
||||||
|
*pOutFlags : 0, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok"));
|
||||||
|
|
||||||
#if SQLITE_OS_WINCE
|
#if SQLITE_OS_WINCE
|
||||||
if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
|
if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
|
||||||
&& (rc = winceCreateLock(zName, pFile))!=SQLITE_OK
|
&& (rc = winceCreateLock(zName, pFile))!=SQLITE_OK
|
||||||
){
|
){
|
||||||
osCloseHandle(h);
|
osCloseHandle(h);
|
||||||
sqlite3_free(zConverted);
|
sqlite3_free(zConverted);
|
||||||
|
OSTRACE(("OPEN-CE-LOCK name=%s, rc=%s\n", zName, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
if( isTemp ){
|
if( isTemp ){
|
||||||
@@ -4177,6 +4279,8 @@ static int winDelete(
|
|||||||
UNUSED_PARAMETER(syncDir);
|
UNUSED_PARAMETER(syncDir);
|
||||||
|
|
||||||
SimulateIOError(return SQLITE_IOERR_DELETE);
|
SimulateIOError(return SQLITE_IOERR_DELETE);
|
||||||
|
OSTRACE(("DELETE name=%s, syncDir=%d\n", zFilename, syncDir));
|
||||||
|
|
||||||
zConverted = convertUtf8Filename(zFilename);
|
zConverted = convertUtf8Filename(zFilename);
|
||||||
if( zConverted==0 ){
|
if( zConverted==0 ){
|
||||||
return SQLITE_IOERR_NOMEM;
|
return SQLITE_IOERR_NOMEM;
|
||||||
@@ -4262,7 +4366,7 @@ static int winDelete(
|
|||||||
logIoerr(cnt);
|
logIoerr(cnt);
|
||||||
}
|
}
|
||||||
sqlite3_free(zConverted);
|
sqlite3_free(zConverted);
|
||||||
OSTRACE(("DELETE \"%s\" %s\n", zFilename, (rc ? "failed" : "ok" )));
|
OSTRACE(("DELETE name=%s, rc=%s\n", zFilename, sqlite3ErrName(rc)));
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4282,8 +4386,12 @@ static int winAccess(
|
|||||||
UNUSED_PARAMETER(pVfs);
|
UNUSED_PARAMETER(pVfs);
|
||||||
|
|
||||||
SimulateIOError( return SQLITE_IOERR_ACCESS; );
|
SimulateIOError( return SQLITE_IOERR_ACCESS; );
|
||||||
|
OSTRACE(("ACCESS name=%s, flags=%x, pResOut=%p\n",
|
||||||
|
zFilename, flags, pResOut));
|
||||||
|
|
||||||
zConverted = convertUtf8Filename(zFilename);
|
zConverted = convertUtf8Filename(zFilename);
|
||||||
if( zConverted==0 ){
|
if( zConverted==0 ){
|
||||||
|
OSTRACE(("ACCESS name=%s, rc=SQLITE_IOERR_NOMEM\n", zFilename));
|
||||||
return SQLITE_IOERR_NOMEM;
|
return SQLITE_IOERR_NOMEM;
|
||||||
}
|
}
|
||||||
if( isNT() ){
|
if( isNT() ){
|
||||||
@@ -4334,6 +4442,8 @@ static int winAccess(
|
|||||||
assert(!"Invalid flags argument");
|
assert(!"Invalid flags argument");
|
||||||
}
|
}
|
||||||
*pResOut = rc;
|
*pResOut = rc;
|
||||||
|
OSTRACE(("ACCESS name=%s, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n",
|
||||||
|
zFilename, pResOut, *pResOut));
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2871,10 +2871,13 @@ static int readDbPage(PgHdr *pPg, u32 iFrame){
|
|||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef SQLITE_OMIT_WAL
|
||||||
if( iFrame ){
|
if( iFrame ){
|
||||||
/* Try to pull the page from the write-ahead log. */
|
/* Try to pull the page from the write-ahead log. */
|
||||||
rc = sqlite3WalReadFrame(pPager->pWal, iFrame, pgsz, pPg->pData);
|
rc = sqlite3WalReadFrame(pPager->pWal, iFrame, pgsz, pPg->pData);
|
||||||
}else{
|
}else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
|
i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
|
||||||
rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
|
rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
|
||||||
if( rc==SQLITE_IOERR_SHORT_READ ){
|
if( rc==SQLITE_IOERR_SHORT_READ ){
|
||||||
|
|||||||
@@ -1567,6 +1567,11 @@ void sqlite3Pragma(
|
|||||||
** PRAGMA [database.]user_version
|
** PRAGMA [database.]user_version
|
||||||
** PRAGMA [database.]user_version = <integer>
|
** PRAGMA [database.]user_version = <integer>
|
||||||
**
|
**
|
||||||
|
** PRAGMA [database.]freelist_count = <integer>
|
||||||
|
**
|
||||||
|
** PRAGMA [database.]application_id
|
||||||
|
** PRAGMA [database.]application_id = <integer>
|
||||||
|
**
|
||||||
** The pragma's schema_version and user_version are used to set or get
|
** The pragma's schema_version and user_version are used to set or get
|
||||||
** the value of the schema-version and user-version, respectively. Both
|
** the value of the schema-version and user-version, respectively. Both
|
||||||
** the schema-version and the user-version are 32-bit signed integers
|
** the schema-version and the user-version are 32-bit signed integers
|
||||||
@@ -1588,10 +1593,14 @@ void sqlite3Pragma(
|
|||||||
if( sqlite3StrICmp(zLeft, "schema_version")==0
|
if( sqlite3StrICmp(zLeft, "schema_version")==0
|
||||||
|| sqlite3StrICmp(zLeft, "user_version")==0
|
|| sqlite3StrICmp(zLeft, "user_version")==0
|
||||||
|| sqlite3StrICmp(zLeft, "freelist_count")==0
|
|| sqlite3StrICmp(zLeft, "freelist_count")==0
|
||||||
|
|| sqlite3StrICmp(zLeft, "application_id")==0
|
||||||
){
|
){
|
||||||
int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
|
int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
|
||||||
sqlite3VdbeUsesBtree(v, iDb);
|
sqlite3VdbeUsesBtree(v, iDb);
|
||||||
switch( zLeft[0] ){
|
switch( zLeft[0] ){
|
||||||
|
case 'a': case 'A':
|
||||||
|
iCookie = BTREE_APPLICATION_ID;
|
||||||
|
break;
|
||||||
case 'f': case 'F':
|
case 'f': case 'F':
|
||||||
iCookie = BTREE_FREE_PAGE_COUNT;
|
iCookie = BTREE_FREE_PAGE_COUNT;
|
||||||
break;
|
break;
|
||||||
|
|||||||
67
src/select.c
67
src/select.c
@@ -3260,6 +3260,69 @@ int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
|
|||||||
}
|
}
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
** Detect compound SELECT statements that use an ORDER BY clause with
|
||||||
|
** an alternative collating sequence.
|
||||||
|
**
|
||||||
|
** SELECT ... FROM t1 EXCEPT SELECT ... FROM t2 ORDER BY .. COLLATE ...
|
||||||
|
**
|
||||||
|
** These are rewritten as a subquery:
|
||||||
|
**
|
||||||
|
** SELECT * FROM (SELECT ... FROM t1 EXCEPT SELECT ... FROM t2)
|
||||||
|
** ORDER BY ... COLLATE ...
|
||||||
|
**
|
||||||
|
** This transformation is necessary because the multiSelectOrderBy() routine
|
||||||
|
** above that generates the code for a compound SELECT with an ORDER BY clause
|
||||||
|
** uses a merge algorithm that requires the same collating sequence on the
|
||||||
|
** result columns as on the ORDER BY clause. See ticket
|
||||||
|
** http://www.sqlite.org/src/info/6709574d2a
|
||||||
|
**
|
||||||
|
** This transformation is only needed for EXCEPT, INTERSECT, and UNION.
|
||||||
|
** The UNION ALL operator works fine with multiSelectOrderBy() even when
|
||||||
|
** there are COLLATE terms in the ORDER BY.
|
||||||
|
*/
|
||||||
|
static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){
|
||||||
|
int i;
|
||||||
|
Select *pNew;
|
||||||
|
Select *pX;
|
||||||
|
sqlite3 *db;
|
||||||
|
struct ExprList_item *a;
|
||||||
|
SrcList *pNewSrc;
|
||||||
|
Parse *pParse;
|
||||||
|
Token dummy;
|
||||||
|
|
||||||
|
if( p->pPrior==0 ) return WRC_Continue;
|
||||||
|
if( p->pOrderBy==0 ) return WRC_Continue;
|
||||||
|
for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){}
|
||||||
|
if( pX==0 ) return WRC_Continue;
|
||||||
|
a = p->pOrderBy->a;
|
||||||
|
for(i=p->pOrderBy->nExpr-1; i>=0; i--){
|
||||||
|
if( a[i].pExpr->flags & EP_Collate ) break;
|
||||||
|
}
|
||||||
|
if( i<0 ) return WRC_Continue;
|
||||||
|
|
||||||
|
/* If we reach this point, that means the transformation is required. */
|
||||||
|
|
||||||
|
pParse = pWalker->pParse;
|
||||||
|
db = pParse->db;
|
||||||
|
pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
|
||||||
|
if( pNew==0 ) return WRC_Abort;
|
||||||
|
memset(&dummy, 0, sizeof(dummy));
|
||||||
|
pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0,0);
|
||||||
|
if( pNewSrc==0 ) return WRC_Abort;
|
||||||
|
*pNew = *p;
|
||||||
|
p->pSrc = pNewSrc;
|
||||||
|
p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ALL, 0));
|
||||||
|
p->op = TK_SELECT;
|
||||||
|
p->pWhere = 0;
|
||||||
|
pNew->pGroupBy = 0;
|
||||||
|
pNew->pHaving = 0;
|
||||||
|
pNew->pOrderBy = 0;
|
||||||
|
p->pPrior = 0;
|
||||||
|
pNew->pLimit = 0;
|
||||||
|
pNew->pOffset = 0;
|
||||||
|
return WRC_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This routine is a Walker callback for "expanding" a SELECT statement.
|
** This routine is a Walker callback for "expanding" a SELECT statement.
|
||||||
@@ -3577,10 +3640,12 @@ static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
|
|||||||
static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
|
static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
|
||||||
Walker w;
|
Walker w;
|
||||||
memset(&w, 0, sizeof(w));
|
memset(&w, 0, sizeof(w));
|
||||||
w.xSelectCallback = selectExpander;
|
w.xSelectCallback = convertCompoundSelectToSubquery;
|
||||||
w.xExprCallback = exprWalkNoop;
|
w.xExprCallback = exprWalkNoop;
|
||||||
w.pParse = pParse;
|
w.pParse = pParse;
|
||||||
sqlite3WalkSelect(&w, pSelect);
|
sqlite3WalkSelect(&w, pSelect);
|
||||||
|
w.xSelectCallback = selectExpander;
|
||||||
|
sqlite3WalkSelect(&w, pSelect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
24
src/shell.c
24
src/shell.c
@@ -2278,8 +2278,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
|
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
|
||||||
"WHERE lower(tbl_name) LIKE shellstatic()"
|
"WHERE lower(tbl_name) LIKE shellstatic()"
|
||||||
" AND type!='meta' AND sql NOTNULL "
|
" AND type!='meta' AND sql NOTNULL "
|
||||||
"ORDER BY substr(type,2,1), "
|
"ORDER BY rowid",
|
||||||
" CASE type WHEN 'view' THEN rowid ELSE name END",
|
|
||||||
callback, &data, &zErrMsg);
|
callback, &data, &zErrMsg);
|
||||||
zShellStatic = 0;
|
zShellStatic = 0;
|
||||||
}
|
}
|
||||||
@@ -2290,8 +2289,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
" FROM sqlite_master UNION ALL"
|
" FROM sqlite_master UNION ALL"
|
||||||
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
|
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
|
||||||
"WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
|
"WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
|
||||||
"ORDER BY substr(type,2,1),"
|
"ORDER BY rowid",
|
||||||
" CASE type WHEN 'view' THEN rowid ELSE name END",
|
|
||||||
callback, &data, &zErrMsg
|
callback, &data, &zErrMsg
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2413,9 +2411,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
for(i=0; i<nPrintRow; i++){
|
for(i=0; i<nPrintRow; i++){
|
||||||
for(j=i; j<nRow; j+=nPrintRow){
|
for(j=i; j<nRow; j+=nPrintRow){
|
||||||
char *zSp = j<nPrintRow ? "" : " ";
|
char *zSp = j<nPrintRow ? "" : " ";
|
||||||
printf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
|
fprintf(p->out, "%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : "");
|
||||||
}
|
}
|
||||||
printf("\n");
|
fprintf(p->out, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
|
for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]);
|
||||||
@@ -2472,7 +2470,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
if( nArg==3 ){
|
if( nArg==3 ){
|
||||||
int opt = (int)strtol(azArg[2], 0, 0);
|
int opt = (int)strtol(azArg[2], 0, 0);
|
||||||
rc = sqlite3_test_control(testctrl, p->db, opt);
|
rc = sqlite3_test_control(testctrl, p->db, opt);
|
||||||
printf("%d (0x%08x)\n", rc, rc);
|
fprintf(p->out, "%d (0x%08x)\n", rc, rc);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Error: testctrl %s takes a single int option\n",
|
fprintf(stderr,"Error: testctrl %s takes a single int option\n",
|
||||||
azArg[1]);
|
azArg[1]);
|
||||||
@@ -2485,7 +2483,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
case SQLITE_TESTCTRL_PRNG_RESET:
|
case SQLITE_TESTCTRL_PRNG_RESET:
|
||||||
if( nArg==2 ){
|
if( nArg==2 ){
|
||||||
rc = sqlite3_test_control(testctrl);
|
rc = sqlite3_test_control(testctrl);
|
||||||
printf("%d (0x%08x)\n", rc, rc);
|
fprintf(p->out, "%d (0x%08x)\n", rc, rc);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
|
fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]);
|
||||||
}
|
}
|
||||||
@@ -2496,7 +2494,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
if( nArg==3 ){
|
if( nArg==3 ){
|
||||||
unsigned int opt = (unsigned int)integerValue(azArg[2]);
|
unsigned int opt = (unsigned int)integerValue(azArg[2]);
|
||||||
rc = sqlite3_test_control(testctrl, opt);
|
rc = sqlite3_test_control(testctrl, opt);
|
||||||
printf("%d (0x%08x)\n", rc, rc);
|
fprintf(p->out, "%d (0x%08x)\n", rc, rc);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Error: testctrl %s takes a single unsigned"
|
fprintf(stderr,"Error: testctrl %s takes a single unsigned"
|
||||||
" int option\n", azArg[1]);
|
" int option\n", azArg[1]);
|
||||||
@@ -2509,7 +2507,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
if( nArg==3 ){
|
if( nArg==3 ){
|
||||||
int opt = atoi(azArg[2]);
|
int opt = atoi(azArg[2]);
|
||||||
rc = sqlite3_test_control(testctrl, opt);
|
rc = sqlite3_test_control(testctrl, opt);
|
||||||
printf("%d (0x%08x)\n", rc, rc);
|
fprintf(p->out, "%d (0x%08x)\n", rc, rc);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Error: testctrl %s takes a single int option\n",
|
fprintf(stderr,"Error: testctrl %s takes a single int option\n",
|
||||||
azArg[1]);
|
azArg[1]);
|
||||||
@@ -2522,7 +2520,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
if( nArg==3 ){
|
if( nArg==3 ){
|
||||||
const char *opt = azArg[2];
|
const char *opt = azArg[2];
|
||||||
rc = sqlite3_test_control(testctrl, opt);
|
rc = sqlite3_test_control(testctrl, opt);
|
||||||
printf("%d (0x%08x)\n", rc, rc);
|
fprintf(p->out, "%d (0x%08x)\n", rc, rc);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
|
fprintf(stderr,"Error: testctrl %s takes a single char * option\n",
|
||||||
azArg[1]);
|
azArg[1]);
|
||||||
@@ -2567,7 +2565,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
}else
|
}else
|
||||||
|
|
||||||
if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
|
if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
|
||||||
printf("SQLite %s %s\n" /*extra-version-info*/,
|
fprintf(p->out, "SQLite %s %s\n" /*extra-version-info*/,
|
||||||
sqlite3_libversion(), sqlite3_sourceid());
|
sqlite3_libversion(), sqlite3_sourceid());
|
||||||
}else
|
}else
|
||||||
|
|
||||||
@@ -2577,7 +2575,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
|
|||||||
if( p->db ){
|
if( p->db ){
|
||||||
sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
|
sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName);
|
||||||
if( zVfsName ){
|
if( zVfsName ){
|
||||||
printf("%s\n", zVfsName);
|
fprintf(p->out, "%s\n", zVfsName);
|
||||||
sqlite3_free(zVfsName);
|
sqlite3_free(zVfsName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3097,6 +3097,12 @@ void sqlite3Error(sqlite3*, int, const char*,...);
|
|||||||
void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
|
void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
|
||||||
u8 sqlite3HexToInt(int h);
|
u8 sqlite3HexToInt(int h);
|
||||||
int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
|
int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
|
||||||
|
|
||||||
|
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) || \
|
||||||
|
defined(SQLITE_DEBUG_OS_TRACE)
|
||||||
|
const char *sqlite3ErrName(int);
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *sqlite3ErrStr(int);
|
const char *sqlite3ErrStr(int);
|
||||||
int sqlite3ReadSchema(Parse *pParse);
|
int sqlite3ReadSchema(Parse *pParse);
|
||||||
CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
|
CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
|
||||||
|
|||||||
100
src/test1.c
100
src/test1.c
@@ -113,82 +113,8 @@ int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb){
|
|||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern const char *sqlite3ErrName(int);
|
||||||
const char *sqlite3TestErrorName(int rc){
|
#define t1ErrorName sqlite3ErrName
|
||||||
const char *zName = 0;
|
|
||||||
int i;
|
|
||||||
for(i=0; i<2 && zName==0; i++, rc &= 0xff){
|
|
||||||
switch( rc ){
|
|
||||||
case SQLITE_OK: zName = "SQLITE_OK"; break;
|
|
||||||
case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
|
|
||||||
case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break;
|
|
||||||
case SQLITE_PERM: zName = "SQLITE_PERM"; break;
|
|
||||||
case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
|
|
||||||
case SQLITE_BUSY: zName = "SQLITE_BUSY"; break;
|
|
||||||
case SQLITE_LOCKED: zName = "SQLITE_LOCKED"; break;
|
|
||||||
case SQLITE_LOCKED_SHAREDCACHE: zName = "SQLITE_LOCKED_SHAREDCACHE";break;
|
|
||||||
case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
|
|
||||||
case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
|
|
||||||
case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
|
|
||||||
case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
|
|
||||||
case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break;
|
|
||||||
case SQLITE_NOTFOUND: zName = "SQLITE_NOTFOUND"; break;
|
|
||||||
case SQLITE_FULL: zName = "SQLITE_FULL"; break;
|
|
||||||
case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break;
|
|
||||||
case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break;
|
|
||||||
case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break;
|
|
||||||
case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break;
|
|
||||||
case SQLITE_TOOBIG: zName = "SQLITE_TOOBIG"; break;
|
|
||||||
case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break;
|
|
||||||
case SQLITE_CONSTRAINT_UNIQUE: zName = "SQLITE_CONSTRAINT_UNIQUE"; break;
|
|
||||||
case SQLITE_CONSTRAINT_TRIGGER: zName = "SQLITE_CONSTRAINT_TRIGGER";break;
|
|
||||||
case SQLITE_CONSTRAINT_FOREIGNKEY:
|
|
||||||
zName = "SQLITE_CONSTRAINT_FOREIGNKEY"; break;
|
|
||||||
case SQLITE_CONSTRAINT_CHECK: zName = "SQLITE_CONSTRAINT_CHECK"; break;
|
|
||||||
case SQLITE_CONSTRAINT_PRIMARYKEY:
|
|
||||||
zName = "SQLITE_CONSTRAINT_PRIMARYKEY"; break;
|
|
||||||
case SQLITE_CONSTRAINT_NOTNULL: zName = "SQLITE_CONSTRAINT_NOTNULL";break;
|
|
||||||
case SQLITE_CONSTRAINT_COMMITHOOK:
|
|
||||||
zName = "SQLITE_CONSTRAINT_COMMITHOOK"; break;
|
|
||||||
case SQLITE_CONSTRAINT_VTAB: zName = "SQLITE_CONSTRAINT_VTAB"; break;
|
|
||||||
case SQLITE_CONSTRAINT_FUNCTION: zName = "SQLITE_CONSTRAINT_FUNCTION";break;
|
|
||||||
case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break;
|
|
||||||
case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break;
|
|
||||||
case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break;
|
|
||||||
case SQLITE_AUTH: zName = "SQLITE_AUTH"; break;
|
|
||||||
case SQLITE_FORMAT: zName = "SQLITE_FORMAT"; break;
|
|
||||||
case SQLITE_RANGE: zName = "SQLITE_RANGE"; break;
|
|
||||||
case SQLITE_NOTADB: zName = "SQLITE_NOTADB"; break;
|
|
||||||
case SQLITE_ROW: zName = "SQLITE_ROW"; break;
|
|
||||||
case SQLITE_NOTICE: zName = "SQLITE_NOTICE"; break;
|
|
||||||
case SQLITE_WARNING: zName = "SQLITE_WARNING"; break;
|
|
||||||
case SQLITE_DONE: zName = "SQLITE_DONE"; break;
|
|
||||||
case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break;
|
|
||||||
case SQLITE_IOERR_SHORT_READ: zName = "SQLITE_IOERR_SHORT_READ"; break;
|
|
||||||
case SQLITE_IOERR_WRITE: zName = "SQLITE_IOERR_WRITE"; break;
|
|
||||||
case SQLITE_IOERR_FSYNC: zName = "SQLITE_IOERR_FSYNC"; break;
|
|
||||||
case SQLITE_IOERR_DIR_FSYNC: zName = "SQLITE_IOERR_DIR_FSYNC"; break;
|
|
||||||
case SQLITE_IOERR_TRUNCATE: zName = "SQLITE_IOERR_TRUNCATE"; break;
|
|
||||||
case SQLITE_IOERR_FSTAT: zName = "SQLITE_IOERR_FSTAT"; break;
|
|
||||||
case SQLITE_IOERR_UNLOCK: zName = "SQLITE_IOERR_UNLOCK"; break;
|
|
||||||
case SQLITE_IOERR_RDLOCK: zName = "SQLITE_IOERR_RDLOCK"; break;
|
|
||||||
case SQLITE_IOERR_DELETE: zName = "SQLITE_IOERR_DELETE"; break;
|
|
||||||
case SQLITE_IOERR_BLOCKED: zName = "SQLITE_IOERR_BLOCKED"; break;
|
|
||||||
case SQLITE_IOERR_NOMEM: zName = "SQLITE_IOERR_NOMEM"; break;
|
|
||||||
case SQLITE_IOERR_ACCESS: zName = "SQLITE_IOERR_ACCESS"; break;
|
|
||||||
case SQLITE_IOERR_CHECKRESERVEDLOCK:
|
|
||||||
zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break;
|
|
||||||
case SQLITE_IOERR_LOCK: zName = "SQLITE_IOERR_LOCK"; break;
|
|
||||||
case SQLITE_CORRUPT_VTAB: zName = "SQLITE_CORRUPT_VTAB"; break;
|
|
||||||
case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break;
|
|
||||||
case SQLITE_READONLY_CANTLOCK: zName = "SQLITE_READONLY_CANTLOCK"; break;
|
|
||||||
case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( zName==0 ) zName = "SQLITE_Unknown";
|
|
||||||
return zName;
|
|
||||||
}
|
|
||||||
#define t1ErrorName sqlite3TestErrorName
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Convert an sqlite3_stmt* into an sqlite3*. This depends on the
|
** Convert an sqlite3_stmt* into an sqlite3*. This depends on the
|
||||||
@@ -1733,7 +1659,7 @@ static int test_blob_read(
|
|||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(zBuf, nByte));
|
Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(zBuf, nByte));
|
||||||
}else{
|
}else{
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
}
|
}
|
||||||
Tcl_Free((char *)zBuf);
|
Tcl_Free((char *)zBuf);
|
||||||
|
|
||||||
@@ -1783,7 +1709,7 @@ static int test_blob_write(
|
|||||||
}
|
}
|
||||||
rc = sqlite3_blob_write(pBlob, zBuf, nBuf, iOffset);
|
rc = sqlite3_blob_write(pBlob, zBuf, nBuf, iOffset);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR);
|
return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR);
|
||||||
@@ -1809,7 +1735,7 @@ static int test_blob_reopen(
|
|||||||
|
|
||||||
rc = sqlite3_blob_reopen(pBlob, iRowid);
|
rc = sqlite3_blob_reopen(pBlob, iRowid);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR);
|
return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR);
|
||||||
@@ -2019,7 +1945,7 @@ static int test_create_function_v2(
|
|||||||
);
|
);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_ResetResult(interp);
|
Tcl_ResetResult(interp);
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -2695,7 +2621,7 @@ static int test_collate(
|
|||||||
if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;
|
if( sqlite3TestErrCode(interp, db, rc) ) return TCL_ERROR;
|
||||||
|
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -3253,7 +3179,7 @@ static int test_bind_text(
|
|||||||
rc = sqlite3_bind_text(pStmt, idx, value, bytes, SQLITE_TRANSIENT);
|
rc = sqlite3_bind_text(pStmt, idx, value, bytes, SQLITE_TRANSIENT);
|
||||||
if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR;
|
if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR;
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3301,7 +3227,7 @@ static int test_bind_text16(
|
|||||||
rc = sqlite3_bind_text16(pStmt, idx, (void *)value, bytes, xDel);
|
rc = sqlite3_bind_text16(pStmt, idx, (void *)value, bytes, xDel);
|
||||||
if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR;
|
if( sqlite3TestErrCode(interp, StmtToDb(pStmt), rc) ) return TCL_ERROR;
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4575,7 +4501,7 @@ static int test_busy_timeout(
|
|||||||
if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;
|
if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;
|
||||||
if( Tcl_GetInt(interp, argv[2], &ms) ) return TCL_ERROR;
|
if( Tcl_GetInt(interp, argv[2], &ms) ) return TCL_ERROR;
|
||||||
rc = sqlite3_busy_timeout(db, ms);
|
rc = sqlite3_busy_timeout(db, ms);
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5096,7 +5022,7 @@ static int file_control_chunksize_test(
|
|||||||
|
|
||||||
rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_CHUNK_SIZE, (void *)&nSize);
|
rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_CHUNK_SIZE, (void *)&nSize);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -5133,7 +5059,7 @@ static int file_control_sizehint_test(
|
|||||||
|
|
||||||
rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_SIZE_HINT, (void *)&nSize);
|
rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_SIZE_HINT, (void *)&nSize);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -5677,7 +5603,7 @@ static void xLogcallback(void *unused, int err, char *zMsg){
|
|||||||
Tcl_Obj *pNew = Tcl_DuplicateObj(logcallback.pObj);
|
Tcl_Obj *pNew = Tcl_DuplicateObj(logcallback.pObj);
|
||||||
Tcl_IncrRefCount(pNew);
|
Tcl_IncrRefCount(pNew);
|
||||||
Tcl_ListObjAppendElement(
|
Tcl_ListObjAppendElement(
|
||||||
0, pNew, Tcl_NewStringObj(sqlite3TestErrorName(err), -1)
|
0, pNew, Tcl_NewStringObj(sqlite3ErrName(err), -1)
|
||||||
);
|
);
|
||||||
Tcl_ListObjAppendElement(0, pNew, Tcl_NewStringObj(zMsg, -1));
|
Tcl_ListObjAppendElement(0, pNew, Tcl_NewStringObj(zMsg, -1));
|
||||||
Tcl_EvalObjEx(logcallback.pInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
|
Tcl_EvalObjEx(logcallback.pInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
|
||||||
|
|||||||
26
src/test2.c
26
src/test2.c
@@ -19,7 +19,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
extern const char *sqlite3TestErrorName(int rc);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Page size and reserved size used for testing.
|
** Page size and reserved size used for testing.
|
||||||
@@ -59,7 +59,7 @@ static int pager_open(
|
|||||||
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB,
|
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB,
|
||||||
pager_test_reiniter);
|
pager_test_reiniter);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3PagerSetCachesize(pPager, nPage);
|
sqlite3PagerSetCachesize(pPager, nPage);
|
||||||
@@ -91,7 +91,7 @@ static int pager_close(
|
|||||||
pPager = sqlite3TestTextToPtr(argv[1]);
|
pPager = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerClose(pPager);
|
rc = sqlite3PagerClose(pPager);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -118,7 +118,7 @@ static int pager_rollback(
|
|||||||
pPager = sqlite3TestTextToPtr(argv[1]);
|
pPager = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerRollback(pPager);
|
rc = sqlite3PagerRollback(pPager);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -145,12 +145,12 @@ static int pager_commit(
|
|||||||
pPager = sqlite3TestTextToPtr(argv[1]);
|
pPager = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0);
|
rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
rc = sqlite3PagerCommitPhaseTwo(pPager);
|
rc = sqlite3PagerCommitPhaseTwo(pPager);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -177,7 +177,7 @@ static int pager_stmt_begin(
|
|||||||
pPager = sqlite3TestTextToPtr(argv[1]);
|
pPager = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerOpenSavepoint(pPager, 1);
|
rc = sqlite3PagerOpenSavepoint(pPager, 1);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -205,7 +205,7 @@ static int pager_stmt_rollback(
|
|||||||
rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, 0);
|
rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, 0);
|
||||||
sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
|
sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -232,7 +232,7 @@ static int pager_stmt_commit(
|
|||||||
pPager = sqlite3TestTextToPtr(argv[1]);
|
pPager = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
|
rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_RELEASE, 0);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -325,7 +325,7 @@ static int page_get(
|
|||||||
rc = sqlite3PagerGet(pPager, pgno, &pPage);
|
rc = sqlite3PagerGet(pPager, pgno, &pPage);
|
||||||
}
|
}
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);
|
sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);
|
||||||
@@ -479,7 +479,7 @@ static int page_write(
|
|||||||
pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
|
pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3PagerWrite(pPage);
|
rc = sqlite3PagerWrite(pPage);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
pData = sqlite3PagerGetData(pPage);
|
pData = sqlite3PagerGetData(pPage);
|
||||||
@@ -528,7 +528,7 @@ static int fake_big_file(
|
|||||||
(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB), 0
|
(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB), 0
|
||||||
);
|
);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_AppendResult(interp, "open failed: ", sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, "open failed: ", sqlite3ErrName(rc), 0);
|
||||||
sqlite3_free(zFile);
|
sqlite3_free(zFile);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
@@ -538,7 +538,7 @@ static int fake_big_file(
|
|||||||
sqlite3OsCloseFree(fd);
|
sqlite3OsCloseFree(fd);
|
||||||
sqlite3_free(zFile);
|
sqlite3_free(zFile);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_AppendResult(interp, "write failed: ", sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, "write failed: ", sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
|
|||||||
16
src/test3.c
16
src/test3.c
@@ -19,7 +19,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
extern const char *sqlite3TestErrorName(int rc);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** A bogus sqlite3 connection structure for use in the btree
|
** A bogus sqlite3 connection structure for use in the btree
|
||||||
@@ -65,7 +65,7 @@ static int btree_open(
|
|||||||
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB);
|
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB);
|
||||||
sqlite3_free(zFilename);
|
sqlite3_free(zFilename);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3BtreeSetCacheSize(pBt, nCache);
|
sqlite3BtreeSetCacheSize(pBt, nCache);
|
||||||
@@ -95,7 +95,7 @@ static int btree_close(
|
|||||||
pBt = sqlite3TestTextToPtr(argv[1]);
|
pBt = sqlite3TestTextToPtr(argv[1]);
|
||||||
rc = sqlite3BtreeClose(pBt);
|
rc = sqlite3BtreeClose(pBt);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
nRefSqlite3--;
|
nRefSqlite3--;
|
||||||
@@ -132,7 +132,7 @@ static int btree_begin_transaction(
|
|||||||
rc = sqlite3BtreeBeginTrans(pBt, 1);
|
rc = sqlite3BtreeBeginTrans(pBt, 1);
|
||||||
sqlite3BtreeLeave(pBt);
|
sqlite3BtreeLeave(pBt);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -226,7 +226,7 @@ static int btree_cursor(
|
|||||||
sqlite3BtreeLeave(pBt);
|
sqlite3BtreeLeave(pBt);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
ckfree((char *)pCur);
|
ckfree((char *)pCur);
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3_snprintf(sizeof(zBuf), zBuf,"%p", pCur);
|
sqlite3_snprintf(sizeof(zBuf), zBuf,"%p", pCur);
|
||||||
@@ -261,7 +261,7 @@ static int btree_close_cursor(
|
|||||||
sqlite3BtreeLeave(pBt);
|
sqlite3BtreeLeave(pBt);
|
||||||
ckfree((char *)pCur);
|
ckfree((char *)pCur);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
@@ -295,7 +295,7 @@ static int btree_next(
|
|||||||
rc = sqlite3BtreeNext(pCur, &res);
|
rc = sqlite3BtreeNext(pCur, &res);
|
||||||
sqlite3BtreeLeave(pCur->pBtree);
|
sqlite3BtreeLeave(pCur->pBtree);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",res);
|
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",res);
|
||||||
@@ -330,7 +330,7 @@ static int btree_first(
|
|||||||
rc = sqlite3BtreeFirst(pCur, &res);
|
rc = sqlite3BtreeFirst(pCur, &res);
|
||||||
sqlite3BtreeLeave(pCur->pBtree);
|
sqlite3BtreeLeave(pCur->pBtree);
|
||||||
if( rc ){
|
if( rc ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), 0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",res);
|
sqlite3_snprintf(sizeof(zBuf),zBuf,"%d",res);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
extern const char *sqlite3TestErrorName(int rc);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Each thread is controlled by an instance of the following
|
** Each thread is controlled by an instance of the following
|
||||||
@@ -374,7 +374,7 @@ static int tcl_thread_result(
|
|||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
thread_wait(&threadset[i]);
|
thread_wait(&threadset[i]);
|
||||||
zName = sqlite3TestErrorName(threadset[i].rc);
|
zName = sqlite3ErrName(threadset[i].rc);
|
||||||
Tcl_AppendResult(interp, zName, 0);
|
Tcl_AppendResult(interp, zName, 0);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ static int tcl_client_colname(
|
|||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const char *sqlite3TestErrorName(int rc);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Usage: client_result ID
|
** Usage: client_result ID
|
||||||
@@ -405,7 +405,7 @@ static int tcl_client_result(
|
|||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
client_wait(&threadset[i]);
|
client_wait(&threadset[i]);
|
||||||
zName = sqlite3TestErrorName(threadset[i].rc);
|
zName = sqlite3ErrName(threadset[i].rc);
|
||||||
Tcl_AppendResult(interp, zName, 0);
|
Tcl_AppendResult(interp, zName, 0);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1300,7 +1300,7 @@ static sqlite3_module echoModuleV2 = {
|
|||||||
** Decode a pointer to an sqlite3 object.
|
** Decode a pointer to an sqlite3 object.
|
||||||
*/
|
*/
|
||||||
extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb);
|
extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb);
|
||||||
extern const char *sqlite3TestErrorName(int rc);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
static void moduleDestroy(void *p){
|
static void moduleDestroy(void *p){
|
||||||
sqlite3_free(p);
|
sqlite3_free(p);
|
||||||
@@ -1340,7 +1340,7 @@ static int register_echo_module(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
#include "sqlite3.h"
|
#include "sqlite3.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
/* From test1.c */
|
/* From main.c */
|
||||||
const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
|
|
||||||
struct TestAsyncGlobal {
|
struct TestAsyncGlobal {
|
||||||
@@ -60,7 +60,7 @@ static int testAsyncInit(
|
|||||||
|
|
||||||
rc = sqlite3async_initialize(zParent, isDefault);
|
rc = sqlite3async_initialize(zParent, isDefault);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3TestErrorName(rc), -1));
|
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1));
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
@@ -208,7 +208,7 @@ static int testAsyncControl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3TestErrorName(rc), -1));
|
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1));
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,11 @@
|
|||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
/* These functions are implemented in main.c. */
|
||||||
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/* These functions are implemented in test1.c. */
|
/* These functions are implemented in test1.c. */
|
||||||
int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
|
extern int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
|
||||||
const char *sqlite3TestErrorName(int);
|
|
||||||
|
|
||||||
static int backupTestCmd(
|
static int backupTestCmd(
|
||||||
ClientData clientData,
|
ClientData clientData,
|
||||||
@@ -70,7 +72,7 @@ static int backupTestCmd(
|
|||||||
Tcl_DeleteCommand(interp, zCmdName);
|
Tcl_DeleteCommand(interp, zCmdName);
|
||||||
|
|
||||||
rc = sqlite3_backup_finish(p);
|
rc = sqlite3_backup_finish(p);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +82,7 @@ static int backupTestCmd(
|
|||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
rc = sqlite3_backup_step(p, nPage);
|
rc = sqlite3_backup_step(p, nPage);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -278,7 +278,7 @@ int sqlite3_intarray_bind(
|
|||||||
extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb);
|
extern int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb);
|
||||||
extern void *sqlite3TestTextToPtr(const char*);
|
extern void *sqlite3TestTextToPtr(const char*);
|
||||||
extern int sqlite3TestMakePointerStr(Tcl_Interp*, char *zPtr, void*);
|
extern int sqlite3TestMakePointerStr(Tcl_Interp*, char *zPtr, void*);
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** sqlite3_intarray_create DB NAME
|
** sqlite3_intarray_create DB NAME
|
||||||
@@ -309,7 +309,7 @@ static int test_intarray_create(
|
|||||||
#endif
|
#endif
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
assert( pArray==0 );
|
assert( pArray==0 );
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), (char*)0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), (char*)0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
sqlite3TestMakePointerStr(interp, zPtr, pArray);
|
sqlite3TestMakePointerStr(interp, zPtr, pArray);
|
||||||
@@ -352,7 +352,7 @@ static int test_intarray_bind(
|
|||||||
}
|
}
|
||||||
rc = sqlite3_intarray_bind(pArray, n, a, sqlite3_free);
|
rc = sqlite3_intarray_bind(pArray, n, a, sqlite3_free);
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_AppendResult(interp, sqlite3TestErrorName(rc), (char*)0);
|
Tcl_AppendResult(interp, sqlite3ErrName(rc), (char*)0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -234,14 +234,14 @@ static int faultsimInstall(int install){
|
|||||||
#ifdef SQLITE_TEST
|
#ifdef SQLITE_TEST
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This function is implemented in test1.c. Returns a pointer to a static
|
** This function is implemented in main.c. Returns a pointer to a static
|
||||||
** buffer containing the symbolic SQLite error code that corresponds to
|
** buffer containing the symbolic SQLite error code that corresponds to
|
||||||
** the least-significant 8-bits of the integer passed as an argument.
|
** the least-significant 8-bits of the integer passed as an argument.
|
||||||
** For example:
|
** For example:
|
||||||
**
|
**
|
||||||
** sqlite3TestErrorName(1) -> "SQLITE_ERROR"
|
** sqlite3ErrName(1) -> "SQLITE_ERROR"
|
||||||
*/
|
*/
|
||||||
const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Transform pointers to text and back again
|
** Transform pointers to text and back again
|
||||||
@@ -1072,7 +1072,7 @@ static int test_db_config_lookaside(
|
|||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
int bufid;
|
int bufid;
|
||||||
static char azBuf[2][10000];
|
static char azBuf[2][10000];
|
||||||
int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
||||||
if( objc!=5 ){
|
if( objc!=5 ){
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "BUFID SIZE COUNT");
|
Tcl_WrongNumArgs(interp, 1, objv, "BUFID SIZE COUNT");
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
@@ -1126,7 +1126,7 @@ static int test_config_heap(
|
|||||||
rc = sqlite3_config(SQLITE_CONFIG_HEAP, zBuf, nByte, nMinAlloc);
|
rc = sqlite3_config(SQLITE_CONFIG_HEAP, zBuf, nByte, nMinAlloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1143,7 +1143,7 @@ static int test_config_error(
|
|||||||
Tcl_Obj *CONST objv[]
|
Tcl_Obj *CONST objv[]
|
||||||
){
|
){
|
||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
||||||
|
|
||||||
if( objc!=2 && objc!=1 ){
|
if( objc!=2 && objc!=1 ){
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "[DB]");
|
Tcl_WrongNumArgs(interp, 1, objv, "[DB]");
|
||||||
@@ -1192,7 +1192,7 @@ static int test_config_uri(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_config(SQLITE_CONFIG_URI, bOpenUri);
|
rc = sqlite3_config(SQLITE_CONFIG_URI, bOpenUri);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1221,7 +1221,7 @@ static int test_config_cis(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_config(SQLITE_CONFIG_COVERING_INDEX_SCAN, bUseCis);
|
rc = sqlite3_config(SQLITE_CONFIG_COVERING_INDEX_SCAN, bUseCis);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1335,7 +1335,7 @@ static int test_db_status(
|
|||||||
int i, op, resetFlag;
|
int i, op, resetFlag;
|
||||||
const char *zOpName;
|
const char *zOpName;
|
||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *zName;
|
const char *zName;
|
||||||
int op;
|
int op;
|
||||||
@@ -1401,7 +1401,7 @@ static int test_install_malloc_faultsim(
|
|||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
rc = faultsimInstall(isInstall);
|
rc = faultsimInstall(isInstall);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1419,7 +1419,7 @@ static int test_install_memsys3(
|
|||||||
const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
|
const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
|
||||||
rc = sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetMemsys3());
|
rc = sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetMemsys3());
|
||||||
#endif
|
#endif
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1183,7 +1183,7 @@ int sqlite3_multiplex_shutdown(void){
|
|||||||
/***************************** Test Code ***********************************/
|
/***************************** Test Code ***********************************/
|
||||||
#ifdef SQLITE_TEST
|
#ifdef SQLITE_TEST
|
||||||
#include <tcl.h>
|
#include <tcl.h>
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1212,7 +1212,7 @@ static int test_multiplex_initialize(
|
|||||||
|
|
||||||
/* Call sqlite3_multiplex_initialize() */
|
/* Call sqlite3_multiplex_initialize() */
|
||||||
rc = sqlite3_multiplex_initialize(zName, makeDefault);
|
rc = sqlite3_multiplex_initialize(zName, makeDefault);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1237,7 +1237,7 @@ static int test_multiplex_shutdown(
|
|||||||
|
|
||||||
/* Call sqlite3_multiplex_shutdown() */
|
/* Call sqlite3_multiplex_shutdown() */
|
||||||
rc = sqlite3_multiplex_shutdown();
|
rc = sqlite3_multiplex_shutdown();
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1355,7 +1355,7 @@ static int test_multiplex_control(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_file_control(db, Tcl_GetString(objv[2]), aSub[idx].op, pArg);
|
rc = sqlite3_file_control(db, Tcl_GetString(objv[2]), aSub[idx].op, pArg);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return (rc==SQLITE_OK) ? TCL_OK : TCL_ERROR;
|
return (rc==SQLITE_OK) ? TCL_OK : TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
/* defined in test1.c */
|
/* defined in main.c */
|
||||||
const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/* A countable mutex */
|
/* A countable mutex */
|
||||||
struct sqlite3_mutex {
|
struct sqlite3_mutex {
|
||||||
@@ -148,7 +148,7 @@ static int test_shutdown(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_shutdown();
|
rc = sqlite3_shutdown();
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ static int test_initialize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_initialize();
|
rc = sqlite3_initialize();
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ static int test_install_mutex_counters(
|
|||||||
g.isInstalled = isInstall;
|
g.isInstalled = isInstall;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,7 +354,7 @@ static int test_config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sqlite3_config(i);
|
rc = sqlite3_config(i);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1325,7 +1325,7 @@ struct TclQuotaCallback {
|
|||||||
Tcl_Obj *pScript; /* Script to be run */
|
Tcl_Obj *pScript; /* Script to be run */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1407,7 +1407,7 @@ static int test_quota_initialize(
|
|||||||
|
|
||||||
/* Call sqlite3_quota_initialize() */
|
/* Call sqlite3_quota_initialize() */
|
||||||
rc = sqlite3_quota_initialize(zName, makeDefault);
|
rc = sqlite3_quota_initialize(zName, makeDefault);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1430,7 +1430,7 @@ static int test_quota_shutdown(
|
|||||||
|
|
||||||
/* Call sqlite3_quota_shutdown() */
|
/* Call sqlite3_quota_shutdown() */
|
||||||
rc = sqlite3_quota_shutdown();
|
rc = sqlite3_quota_shutdown();
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
|
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -1485,7 +1485,7 @@ static int test_quota_set(
|
|||||||
/* Invoke sqlite3_quota_set() */
|
/* Invoke sqlite3_quota_set() */
|
||||||
rc = sqlite3_quota_set(zPattern, iLimit, xCallback, (void*)p, xDestroy);
|
rc = sqlite3_quota_set(zPattern, iLimit, xCallback, (void*)p, xDestroy);
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1511,7 +1511,7 @@ static int test_quota_file(
|
|||||||
/* Invoke sqlite3_quota_file() */
|
/* Invoke sqlite3_quota_file() */
|
||||||
rc = sqlite3_quota_file(zFilename);
|
rc = sqlite3_quota_file(zFilename);
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ static int register_cube_geom(
|
|||||||
UNUSED_PARAMETER(objv);
|
UNUSED_PARAMETER(objv);
|
||||||
#else
|
#else
|
||||||
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ static int register_cube_geom(
|
|||||||
}
|
}
|
||||||
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
||||||
rc = sqlite3_rtree_geometry_callback(db, "cube", cube_geom, (void *)&gHere);
|
rc = sqlite3_rtree_geometry_callback(db, "cube", cube_geom, (void *)&gHere);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
#endif
|
#endif
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
@@ -282,7 +282,7 @@ static int register_circle_geom(
|
|||||||
UNUSED_PARAMETER(objv);
|
UNUSED_PARAMETER(objv);
|
||||||
#else
|
#else
|
||||||
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
sqlite3 *db;
|
sqlite3 *db;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@@ -292,7 +292,7 @@ static int register_circle_geom(
|
|||||||
}
|
}
|
||||||
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
|
||||||
rc = sqlite3_rtree_geometry_callback(db, "circle", circle_geom, 0);
|
rc = sqlite3_rtree_geometry_callback(db, "circle", circle_geom, 0);
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_STATIC);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
|
||||||
#endif
|
#endif
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,8 +78,8 @@
|
|||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
#if SQLITE_OS_UNIX
|
#if SQLITE_OS_UNIX
|
||||||
|
|
||||||
/* From test1.c */
|
/* From main.c */
|
||||||
extern const char *sqlite3TestErrorName(int);
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -498,7 +498,7 @@ static int test_syscall_reset(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3TestErrorName(rc), -1));
|
Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3ErrName(rc), -1));
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,12 +60,14 @@ static Tcl_ObjCmdProc blocking_prepare_v2_proc;
|
|||||||
int Sqlitetest1_Init(Tcl_Interp *);
|
int Sqlitetest1_Init(Tcl_Interp *);
|
||||||
int Sqlite3_Init(Tcl_Interp *);
|
int Sqlite3_Init(Tcl_Interp *);
|
||||||
|
|
||||||
|
/* Functions from main.c */
|
||||||
|
extern const char *sqlite3ErrName(int);
|
||||||
|
|
||||||
/* Functions from test1.c */
|
/* Functions from test1.c */
|
||||||
void *sqlite3TestTextToPtr(const char *);
|
extern void *sqlite3TestTextToPtr(const char *);
|
||||||
const char *sqlite3TestErrorName(int);
|
extern int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
|
||||||
int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
|
extern int sqlite3TestMakePointerStr(Tcl_Interp *, char *, void *);
|
||||||
int sqlite3TestMakePointerStr(Tcl_Interp *, char *, void *);
|
extern int sqlite3TestErrCode(Tcl_Interp *, sqlite3 *, int);
|
||||||
int sqlite3TestErrCode(Tcl_Interp *, sqlite3 *, int);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Handler for events of type EvalEvent.
|
** Handler for events of type EvalEvent.
|
||||||
@@ -559,7 +561,7 @@ static int blocking_step_proc(
|
|||||||
pStmt = (sqlite3_stmt*)sqlite3TestTextToPtr(Tcl_GetString(objv[1]));
|
pStmt = (sqlite3_stmt*)sqlite3TestTextToPtr(Tcl_GetString(objv[1]));
|
||||||
rc = sqlite3_blocking_step(pStmt);
|
rc = sqlite3_blocking_step(pStmt);
|
||||||
|
|
||||||
Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), 0);
|
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), 0);
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,7 +608,7 @@ static int blocking_prepare_v2_proc(
|
|||||||
}
|
}
|
||||||
if( rc!=SQLITE_OK ){
|
if( rc!=SQLITE_OK ){
|
||||||
assert( pStmt==0 );
|
assert( pStmt==0 );
|
||||||
sprintf(zBuf, "%s ", (char *)sqlite3TestErrorName(rc));
|
sprintf(zBuf, "%s ", (char *)sqlite3ErrName(rc));
|
||||||
Tcl_AppendResult(interp, zBuf, sqlite3_errmsg(db), 0);
|
Tcl_AppendResult(interp, zBuf, sqlite3_errmsg(db), 0);
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,6 +208,7 @@ void sqlite3Update(
|
|||||||
}
|
}
|
||||||
if( j>=pTab->nCol ){
|
if( j>=pTab->nCol ){
|
||||||
if( sqlite3IsRowid(pChanges->a[i].zName) ){
|
if( sqlite3IsRowid(pChanges->a[i].zName) ){
|
||||||
|
j = -1;
|
||||||
chngRowid = 1;
|
chngRowid = 1;
|
||||||
pRowidExpr = pChanges->a[i].pExpr;
|
pRowidExpr = pChanges->a[i].pExpr;
|
||||||
}else{
|
}else{
|
||||||
@@ -220,7 +221,8 @@ void sqlite3Update(
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
|
rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
|
||||||
pTab->aCol[j].zName, db->aDb[iDb].zName);
|
j<0 ? "ROWID" : pTab->aCol[j].zName,
|
||||||
|
db->aDb[iDb].zName);
|
||||||
if( rc==SQLITE_DENY ){
|
if( rc==SQLITE_DENY ){
|
||||||
goto update_cleanup;
|
goto update_cleanup;
|
||||||
}else if( rc==SQLITE_IGNORE ){
|
}else if( rc==SQLITE_IGNORE ){
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
|
|||||||
BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */
|
BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */
|
||||||
BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */
|
BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */
|
||||||
BTREE_USER_VERSION, 0, /* Preserve the user version */
|
BTREE_USER_VERSION, 0, /* Preserve the user version */
|
||||||
|
BTREE_APPLICATION_ID, 0, /* Preserve the application id */
|
||||||
};
|
};
|
||||||
|
|
||||||
assert( 1==sqlite3BtreeIsInTrans(pTemp) );
|
assert( 1==sqlite3BtreeIsInTrans(pTemp) );
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
# define sqlite3WalExclusiveMode(y,z) 0
|
# define sqlite3WalExclusiveMode(y,z) 0
|
||||||
# define sqlite3WalHeapMemory(z) 0
|
# define sqlite3WalHeapMemory(z) 0
|
||||||
# define sqlite3WalFramesize(z) 0
|
# define sqlite3WalFramesize(z) 0
|
||||||
|
# define sqlite3WalFindFrame(x,y,z) 0
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define WAL_SAVEPOINT_NDATA 4
|
#define WAL_SAVEPOINT_NDATA 4
|
||||||
|
|||||||
@@ -4855,6 +4855,10 @@ static Bitmask codeOneLoopStart(
|
|||||||
** the "interesting" terms of z - terms that did not originate in the
|
** the "interesting" terms of z - terms that did not originate in the
|
||||||
** ON or USING clause of a LEFT JOIN, and terms that are usable as
|
** ON or USING clause of a LEFT JOIN, and terms that are usable as
|
||||||
** indices.
|
** indices.
|
||||||
|
**
|
||||||
|
** This optimization also only applies if the (x1 OR x2 OR ...) term
|
||||||
|
** is not contained in the ON clause of a LEFT JOIN.
|
||||||
|
** See ticket http://www.sqlite.org/src/info/f2369304e4
|
||||||
*/
|
*/
|
||||||
if( pWC->nTerm>1 ){
|
if( pWC->nTerm>1 ){
|
||||||
int iTerm;
|
int iTerm;
|
||||||
@@ -4876,7 +4880,7 @@ static Bitmask codeOneLoopStart(
|
|||||||
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
|
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
|
||||||
WhereInfo *pSubWInfo; /* Info for single OR-term scan */
|
WhereInfo *pSubWInfo; /* Info for single OR-term scan */
|
||||||
Expr *pOrExpr = pOrTerm->pExpr;
|
Expr *pOrExpr = pOrTerm->pExpr;
|
||||||
if( pAndExpr ){
|
if( pAndExpr && !ExprHasProperty(pOrExpr, EP_FromJoin) ){
|
||||||
pAndExpr->pLeft = pOrExpr;
|
pAndExpr->pLeft = pOrExpr;
|
||||||
pOrExpr = pAndExpr;
|
pOrExpr = pAndExpr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2368,6 +2368,29 @@ ifcapable trigger {
|
|||||||
} {1}
|
} {1}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ticket [0eb70d77cb05bb22720]: Invalid pointer passsed to the authorizer
|
||||||
|
# callback when updating a ROWID.
|
||||||
|
#
|
||||||
|
do_test auth-6.1 {
|
||||||
|
execsql {
|
||||||
|
CREATE TABLE t6(a,b,c,d,e,f,g,h);
|
||||||
|
INSERT INTO t6 VALUES(1,2,3,4,5,6,7,8);
|
||||||
|
}
|
||||||
|
} {}
|
||||||
|
set ::authargs [list]
|
||||||
|
proc auth {args} {
|
||||||
|
eval lappend ::authargs $args
|
||||||
|
return SQLITE_OK
|
||||||
|
}
|
||||||
|
do_test auth-6.2 {
|
||||||
|
execsql {UPDATE t6 SET rowID=rowID+100}
|
||||||
|
set ::authargs
|
||||||
|
} [list SQLITE_READ t6 ROWID main {} \
|
||||||
|
SQLITE_UPDATE t6 ROWID main {} \
|
||||||
|
]
|
||||||
|
do_test auth-6.3 {
|
||||||
|
execsql {SELECT rowid, * FROM t6}
|
||||||
|
} {101 1 2 3 4 5 6 7 8}
|
||||||
|
|
||||||
rename proc {}
|
rename proc {}
|
||||||
rename proc_real proc
|
rename proc_real proc
|
||||||
|
|||||||
@@ -106,15 +106,7 @@ do_catchsql_test 2.0 {
|
|||||||
CREATE VIRTUAL TABLE tX USING fts3tokenize(nosuchtokenizer);
|
CREATE VIRTUAL TABLE tX USING fts3tokenize(nosuchtokenizer);
|
||||||
} {1 {unknown tokenizer: nosuchtokenizer}}
|
} {1 {unknown tokenizer: nosuchtokenizer}}
|
||||||
|
|
||||||
proc fts3_tokenizer {args} { return 1 }
|
|
||||||
db function fts3_tokenizer -argcount 1 fts3_tokenizer
|
|
||||||
do_catchsql_test 2.1 {
|
do_catchsql_test 2.1 {
|
||||||
CREATE VIRTUAL TABLE tX USING fts3tokenize(simple);
|
|
||||||
} {1 {vtable constructor failed: tX}}
|
|
||||||
|
|
||||||
db close
|
|
||||||
sqlite3 db test.db
|
|
||||||
do_catchsql_test 2.2 {
|
|
||||||
CREATE VIRTUAL TABLE t4 USING fts3tokenize;
|
CREATE VIRTUAL TABLE t4 USING fts3tokenize;
|
||||||
SELECT * FROM t4;
|
SELECT * FROM t4;
|
||||||
} {1 {SQL logic error or missing database}}
|
} {1 {SQL logic error or missing database}}
|
||||||
|
|||||||
@@ -936,6 +936,16 @@ proc check_temp_store {} {
|
|||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Application_ID
|
||||||
|
#
|
||||||
|
do_test pragma-8.3.1 {
|
||||||
|
execsql {
|
||||||
|
PRAGMA application_id;
|
||||||
|
}
|
||||||
|
} {0}
|
||||||
|
do_test pragma-8.3.2 {
|
||||||
|
execsql {PRAGMA Application_ID(12345); PRAGMA application_id;}
|
||||||
|
} {12345}
|
||||||
|
|
||||||
# Test temp_store and temp_store_directory pragmas
|
# Test temp_store and temp_store_directory pragmas
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -281,13 +281,13 @@ do_test selectA-2.34 {
|
|||||||
do_test selectA-2.35 {
|
do_test selectA-2.35 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY b COLLATE NOCASE,a,c
|
ORDER BY y COLLATE NOCASE,x,z
|
||||||
}
|
}
|
||||||
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
||||||
do_test selectA-2.36 {
|
do_test selectA-2.36 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY b COLLATE NOCASE DESC,a,c
|
ORDER BY y COLLATE NOCASE DESC,x,z
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
|
||||||
do_test selectA-2.37 {
|
do_test selectA-2.37 {
|
||||||
@@ -311,7 +311,7 @@ do_test selectA-2.39 {
|
|||||||
do_test selectA-2.40 {
|
do_test selectA-2.40 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY c COLLATE BINARY DESC,a,b
|
ORDER BY z COLLATE BINARY DESC,x,y
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
||||||
do_test selectA-2.41 {
|
do_test selectA-2.41 {
|
||||||
@@ -602,7 +602,7 @@ do_test selectA-2.85 {
|
|||||||
do_test selectA-2.86 {
|
do_test selectA-2.86 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
||||||
ORDER BY b COLLATE NOCASE,a,c
|
ORDER BY y COLLATE NOCASE,x,z
|
||||||
}
|
}
|
||||||
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
||||||
do_test selectA-2.87 {
|
do_test selectA-2.87 {
|
||||||
@@ -632,7 +632,7 @@ do_test selectA-2.90 {
|
|||||||
do_test selectA-2.91 {
|
do_test selectA-2.91 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
||||||
ORDER BY c COLLATE BINARY DESC,a,b
|
ORDER BY z COLLATE BINARY DESC,x,y
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
||||||
do_test selectA-2.92 {
|
do_test selectA-2.92 {
|
||||||
@@ -893,13 +893,13 @@ do_test selectA-3.34 {
|
|||||||
do_test selectA-3.35 {
|
do_test selectA-3.35 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY b COLLATE NOCASE,a,c
|
ORDER BY y COLLATE NOCASE,x,z
|
||||||
}
|
}
|
||||||
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
||||||
do_test selectA-3.36 {
|
do_test selectA-3.36 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY b COLLATE NOCASE DESC,a,c
|
ORDER BY y COLLATE NOCASE DESC,x,z
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u hare m M abc e e hello d D {} C c 9.9 b B 1 a a}
|
||||||
do_test selectA-3.37 {
|
do_test selectA-3.37 {
|
||||||
@@ -923,7 +923,7 @@ do_test selectA-3.39 {
|
|||||||
do_test selectA-3.40 {
|
do_test selectA-3.40 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t1
|
||||||
ORDER BY c COLLATE BINARY DESC,a,b
|
ORDER BY z COLLATE BINARY DESC,x,y
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
||||||
do_test selectA-3.41 {
|
do_test selectA-3.41 {
|
||||||
@@ -1214,7 +1214,7 @@ do_test selectA-3.85 {
|
|||||||
do_test selectA-3.86 {
|
do_test selectA-3.86 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
||||||
ORDER BY b COLLATE NOCASE,a,c
|
ORDER BY y COLLATE NOCASE,x,z
|
||||||
}
|
}
|
||||||
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
} {1 a a 9.9 b B {} C c hello d D abc e e hare m M {} U u 5200000.0 X x -23 Y y mad Z z}
|
||||||
do_test selectA-3.87 {
|
do_test selectA-3.87 {
|
||||||
@@ -1244,7 +1244,7 @@ do_test selectA-3.90 {
|
|||||||
do_test selectA-3.91 {
|
do_test selectA-3.91 {
|
||||||
execsql {
|
execsql {
|
||||||
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
SELECT x,y,z FROM t2 UNION SELECT a,b,c FROM t3
|
||||||
ORDER BY c COLLATE BINARY DESC,a,b
|
ORDER BY z COLLATE BINARY DESC,x,y
|
||||||
}
|
}
|
||||||
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
} {mad Z z -23 Y y 5200000.0 X x {} U u abc e e {} C c 1 a a hare m M hello d D 9.9 b B}
|
||||||
do_test selectA-3.92 {
|
do_test selectA-3.92 {
|
||||||
|
|||||||
95
test/selectE.test
Normal file
95
test/selectE.test
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
# 2013-05-07
|
||||||
|
#
|
||||||
|
# The author disclaims copyright to this source code. In place of
|
||||||
|
# a legal notice, here is a blessing:
|
||||||
|
#
|
||||||
|
# May you do good and not evil.
|
||||||
|
# May you find forgiveness for yourself and forgive others.
|
||||||
|
# May you share freely, never taking more than you give.
|
||||||
|
#
|
||||||
|
#***********************************************************************
|
||||||
|
# This file implements regression tests for compound SELECT statements
|
||||||
|
# that have ORDER BY clauses with collating sequences that differ
|
||||||
|
# from the collating sequence used for comparison in the compound.
|
||||||
|
#
|
||||||
|
# Ticket 6709574d2a8d8b9be3a9cb1afbf4ff2de48ea4e7:
|
||||||
|
# drh added on 2013-05-06 15:21:16:
|
||||||
|
#
|
||||||
|
# In the code shown below (which is intended to be run from the
|
||||||
|
# sqlite3.exe command-line tool) the three SELECT statements should all
|
||||||
|
# generate the same answer. But the third one does not. It is as if the
|
||||||
|
# COLLATE clause on the ORDER BY somehow got pulled into the EXCEPT
|
||||||
|
# operator. Note that the ".print" commands are instructions to the
|
||||||
|
# sqlite3.exe shell program to output delimiter lines so that you can more
|
||||||
|
# easily tell where the output of one query ends and the next query
|
||||||
|
# begins.
|
||||||
|
#
|
||||||
|
# CREATE TABLE t1(a);
|
||||||
|
# INSERT INTO t1 VALUES('abc'),('def');
|
||||||
|
# CREATE TABLE t2(a);
|
||||||
|
# INSERT INTO t2 VALUES('DEF');
|
||||||
|
#
|
||||||
|
# SELECT a FROM t1 EXCEPT SELECT a FROM t2 ORDER BY a;
|
||||||
|
# .print -----
|
||||||
|
# SELECT a FROM (SELECT a FROM t1 EXCEPT SELECT a FROM t2)
|
||||||
|
# ORDER BY a COLLATE nocase;
|
||||||
|
# .print -----
|
||||||
|
# SELECT a FROM t1 EXCEPT SELECT a FROM t2 ORDER BY a COLLATE nocase;
|
||||||
|
#
|
||||||
|
# Bisecting shows that this problem was introduced in SQLite version 3.6.0
|
||||||
|
# by check-in [8bbfa97837a74ef] on 2008-06-15.
|
||||||
|
#
|
||||||
|
|
||||||
|
set testdir [file dirname $argv0]
|
||||||
|
source $testdir/tester.tcl
|
||||||
|
|
||||||
|
do_test selectE-1.0 {
|
||||||
|
db eval {
|
||||||
|
CREATE TABLE t1(a);
|
||||||
|
INSERT INTO t1 VALUES('abc'),('def'),('ghi');
|
||||||
|
CREATE TABLE t2(a);
|
||||||
|
INSERT INTO t2 VALUES('DEF'),('abc');
|
||||||
|
CREATE TABLE t3(a);
|
||||||
|
INSERT INTO t3 VALUES('def'),('jkl');
|
||||||
|
|
||||||
|
SELECT a FROM t1 EXCEPT SELECT a FROM t2
|
||||||
|
ORDER BY a COLLATE nocase;
|
||||||
|
}
|
||||||
|
} {def ghi}
|
||||||
|
do_test selectE-1.1 {
|
||||||
|
db eval {
|
||||||
|
SELECT a FROM t2 EXCEPT SELECT a FROM t3
|
||||||
|
ORDER BY a COLLATE nocase;
|
||||||
|
}
|
||||||
|
} {abc DEF}
|
||||||
|
do_test selectE-1.2 {
|
||||||
|
db eval {
|
||||||
|
SELECT a FROM t2 EXCEPT SELECT a FROM t3
|
||||||
|
ORDER BY a COLLATE binary;
|
||||||
|
}
|
||||||
|
} {DEF abc}
|
||||||
|
do_test selectE-1.3 {
|
||||||
|
db eval {
|
||||||
|
SELECT a FROM t2 EXCEPT SELECT a FROM t3
|
||||||
|
ORDER BY a;
|
||||||
|
}
|
||||||
|
} {DEF abc}
|
||||||
|
|
||||||
|
do_test selectE-2.1 {
|
||||||
|
db eval {
|
||||||
|
DELETE FROM t2;
|
||||||
|
DELETE FROM t3;
|
||||||
|
INSERT INTO t2 VALUES('ABC'),('def'),('GHI'),('jkl');
|
||||||
|
INSERT INTO t3 SELECT lower(a) FROM t2;
|
||||||
|
SELECT a COLLATE nocase FROM t2 EXCEPT SELECT a FROM t3
|
||||||
|
ORDER BY 1
|
||||||
|
}
|
||||||
|
} {}
|
||||||
|
do_test selectE-2.2 {
|
||||||
|
db eval {
|
||||||
|
SELECT a COLLATE nocase FROM t2 EXCEPT SELECT a FROM t3
|
||||||
|
ORDER BY 1 COLLATE binary
|
||||||
|
}
|
||||||
|
} {}
|
||||||
|
|
||||||
|
finish_test
|
||||||
@@ -1515,7 +1515,8 @@ do_test wal-23.3 {
|
|||||||
set nPage [expr 2+$AUTOVACUUM]
|
set nPage [expr 2+$AUTOVACUUM]
|
||||||
do_test wal-23.4 {
|
do_test wal-23.4 {
|
||||||
set ::log
|
set ::log
|
||||||
} [list SQLITE_NOTICE "recovered $nPage frames from WAL file $walfile"]
|
} [list SQLITE_NOTICE_RECOVER_WAL \
|
||||||
|
"recovered $nPage frames from WAL file $walfile"]
|
||||||
|
|
||||||
|
|
||||||
ifcapable autovacuum {
|
ifcapable autovacuum {
|
||||||
|
|||||||
@@ -893,4 +893,25 @@ do_test where9-8.3 {
|
|||||||
}
|
}
|
||||||
} {2 3 4 5 {} {} 5 55 3 4 5 6 2 4 5 55}
|
} {2 3 4 5 {} {} 5 55 3 4 5 6 2 4 5 55}
|
||||||
|
|
||||||
|
# Fix for ticket [f2369304e47167e3e644e2f1fe9736063391d7b7]
|
||||||
|
# Incorrect results when OR is used in the ON clause of a LEFT JOIN
|
||||||
|
#
|
||||||
|
do_test where9-9.1 {
|
||||||
|
db eval {
|
||||||
|
CREATE TABLE t91(x); INSERT INTO t91 VALUES(1);
|
||||||
|
CREATE TABLE t92(y INTEGER PRIMARY KEY,a,b);
|
||||||
|
INSERT INTO t92 VALUES(1,2,3);
|
||||||
|
SELECT 1 FROM t91 LEFT JOIN t92 ON a=2 OR b=3;
|
||||||
|
SELECT 2 FROM t91 LEFT JOIN t92 ON a=2 AND b=3;
|
||||||
|
SELECT 3 FROM t91 LEFT JOIN t92 ON (a=2 OR b=3) AND y IS NULL;
|
||||||
|
SELECT 4 FROM t91 LEFT JOIN t92 ON (a=2 AND b=3) AND y IS NULL;
|
||||||
|
CREATE TEMP TABLE x9 AS SELECT * FROM t91 LEFT JOIN t92 ON a=2 OR b=3;
|
||||||
|
SELECT 5 FROM x9 WHERE y IS NULL;
|
||||||
|
SELECT 6 FROM t91 LEFT JOIN t92 ON a=2 OR b=3 WHERE y IS NULL;
|
||||||
|
SELECT 7 FROM t91 LEFT JOIN t92 ON a=2 AND b=3 WHERE y IS NULL;
|
||||||
|
SELECT 8 FROM t91 LEFT JOIN t92 ON a=22 OR b=33 WHERE y IS NULL;
|
||||||
|
SELECT 9 FROM t91 LEFT JOIN t92 ON a=22 AND b=33 WHERE y IS NULL;
|
||||||
|
}
|
||||||
|
} {1 2 3 4 8 9}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ static void print_db_header(void){
|
|||||||
print_decode_line(aData, 56, 4, "Text encoding");
|
print_decode_line(aData, 56, 4, "Text encoding");
|
||||||
print_decode_line(aData, 60, 4, "User version");
|
print_decode_line(aData, 60, 4, "User version");
|
||||||
print_decode_line(aData, 64, 4, "Incremental-vacuum mode");
|
print_decode_line(aData, 64, 4, "Incremental-vacuum mode");
|
||||||
print_decode_line(aData, 68, 4, "meta[7]");
|
print_decode_line(aData, 68, 4, "Application ID");
|
||||||
print_decode_line(aData, 72, 4, "meta[8]");
|
print_decode_line(aData, 72, 4, "meta[8]");
|
||||||
print_decode_line(aData, 76, 4, "meta[9]");
|
print_decode_line(aData, 76, 4, "meta[9]");
|
||||||
print_decode_line(aData, 80, 4, "meta[10]");
|
print_decode_line(aData, 80, 4, "meta[10]");
|
||||||
|
|||||||
Reference in New Issue
Block a user