Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d4aaa170f |
+4
-2
@@ -1744,7 +1744,8 @@ static int fts3CursorSeekStmt(Fts3Cursor *pCsr){
|
||||
}else{
|
||||
zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist);
|
||||
if( !zSql ) return SQLITE_NOMEM;
|
||||
rc = sqlite3_prepare_v3(p->db, zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0);
|
||||
sqlite3_db_config(p->db,SQLITE_DBCONFIG_PREPARE_FLAGS,SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
|
||||
sqlite3_free(zSql);
|
||||
}
|
||||
if( rc==SQLITE_OK ) pCsr->bSeekStmt = 1;
|
||||
@@ -3281,7 +3282,8 @@ static int fts3FilterMethod(
|
||||
);
|
||||
}
|
||||
if( zSql ){
|
||||
rc = sqlite3_prepare_v3(p->db,zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0);
|
||||
sqlite3_db_config(p->db,SQLITE_DBCONFIG_PREPARE_FLAGS,SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
|
||||
sqlite3_free(zSql);
|
||||
}else{
|
||||
rc = SQLITE_NOMEM;
|
||||
|
||||
@@ -407,8 +407,9 @@ static int fts3SqlStmt(
|
||||
if( !zSql ){
|
||||
rc = SQLITE_NOMEM;
|
||||
}else{
|
||||
rc = sqlite3_prepare_v3(p->db, zSql, -1, SQLITE_PREPARE_PERSISTENT,
|
||||
&pStmt, NULL);
|
||||
sqlite3_db_config(p->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
|
||||
sqlite3_free(zSql);
|
||||
assert( rc==SQLITE_OK || pStmt==0 );
|
||||
p->aStmt[eStmt] = pStmt;
|
||||
|
||||
@@ -728,8 +728,10 @@ static int fts5IndexPrepareStmt(
|
||||
){
|
||||
if( p->rc==SQLITE_OK ){
|
||||
if( zSql ){
|
||||
p->rc = sqlite3_prepare_v3(p->pConfig->db, zSql, -1,
|
||||
SQLITE_PREPARE_PERSISTENT, ppStmt, 0);
|
||||
sqlite3 *db = p->pConfig->db;
|
||||
sqlite3_db_config(db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
p->rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0);
|
||||
}else{
|
||||
p->rc = SQLITE_NOMEM;
|
||||
}
|
||||
@@ -778,8 +780,9 @@ static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){
|
||||
if( zSql==0 ){
|
||||
rc = SQLITE_NOMEM;
|
||||
}else{
|
||||
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
|
||||
SQLITE_PREPARE_PERSISTENT, &p->pDeleter, 0);
|
||||
sqlite3_db_config(pConfig->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &p->pDeleter, 0);
|
||||
sqlite3_free(zSql);
|
||||
}
|
||||
if( rc!=SQLITE_OK ){
|
||||
|
||||
@@ -883,8 +883,9 @@ static int fts5PrepareStatement(
|
||||
if( zSql==0 ){
|
||||
rc = SQLITE_NOMEM;
|
||||
}else{
|
||||
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
|
||||
SQLITE_PREPARE_PERSISTENT, &pRet, 0);
|
||||
sqlite3_db_config(pConfig->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pRet, 0);
|
||||
if( rc!=SQLITE_OK ){
|
||||
*pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db));
|
||||
}
|
||||
@@ -1020,8 +1021,9 @@ static int fts5FindRankFunction(Fts5Cursor *pCsr){
|
||||
char *zSql = sqlite3Fts5Mprintf(&rc, "SELECT %s", zRankArgs);
|
||||
if( zSql ){
|
||||
sqlite3_stmt *pStmt = 0;
|
||||
rc = sqlite3_prepare_v3(pConfig->db, zSql, -1,
|
||||
SQLITE_PREPARE_PERSISTENT, &pStmt, 0);
|
||||
sqlite3_db_config(pConfig->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pStmt, 0);
|
||||
sqlite3_free(zSql);
|
||||
assert( rc==SQLITE_OK || pCsr->pRankArgStmt==0 );
|
||||
if( rc==SQLITE_OK ){
|
||||
|
||||
@@ -136,8 +136,9 @@ static int fts5StorageGetStmt(
|
||||
if( zSql==0 ){
|
||||
rc = SQLITE_NOMEM;
|
||||
}else{
|
||||
rc = sqlite3_prepare_v3(pC->db, zSql, -1,
|
||||
SQLITE_PREPARE_PERSISTENT, &p->aStmt[eStmt], 0);
|
||||
sqlite3_db_config(pC->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(pC->db, zSql, -1, &p->aStmt[eStmt], 0);
|
||||
sqlite3_free(zSql);
|
||||
if( rc!=SQLITE_OK && pzErrMsg ){
|
||||
*pzErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pC->db));
|
||||
|
||||
+3
-2
@@ -3361,8 +3361,9 @@ static int rtreeSqlInit(
|
||||
for(i=0; i<N_STATEMENT && rc==SQLITE_OK; i++){
|
||||
char *zSql = sqlite3_mprintf(azSql[i], zDb, zPrefix);
|
||||
if( zSql ){
|
||||
rc = sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_PERSISTENT,
|
||||
appStmt[i], 0);
|
||||
sqlite3_db_config(db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
rc = sqlite3_prepare_v2(db, zSql, -1, appStmt[i], 0);
|
||||
}else{
|
||||
rc = SQLITE_NOMEM;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
C Incorporate\srecent\strunk\schanges.
|
||||
D 2017-06-28T15:56:58.652
|
||||
C Instead\sof\sthe\snew\ssqlite3_prepare_v3()\sinterface,\sprovide\sthe\nSQLITE_DBCONFIG_PREPARE_FLAGS\sinterface\swhich\ssets\sthe\sflags\son\sthe\ssingle\nnext\scall\sto\ssqlite3_prepare_v2()\sor\sits\scousins.
|
||||
D 2017-06-28T17:29:06.215
|
||||
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||
F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc
|
||||
@@ -70,7 +70,7 @@ F ext/fts3/README.content fdc666a70d5257a64fee209f97cf89e0e6e32b51
|
||||
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
||||
F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
|
||||
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
||||
F ext/fts3/fts3.c 6c5543ce771db11d27793fb696564ef5e977116671353a0d5c22056aba73055e
|
||||
F ext/fts3/fts3.c 45ea4573f1bfecd4a246b547e22e6b79e20dd7d0f9c81d4e5023ff7d7d44b059
|
||||
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
||||
F ext/fts3/fts3Int.h eb2502000148e80913b965db3e59f29251266d0a
|
||||
F ext/fts3/fts3_aux.c 9edc3655fcb287f0467d0a4b886a01c6185fe9f1
|
||||
@@ -88,7 +88,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
|
||||
F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
|
||||
F ext/fts3/fts3_unicode.c 525a3bd9a7564603c5c061b7de55403a565307758a94600e8a2f6b00d1c40d9d
|
||||
F ext/fts3/fts3_unicode2.c cc04fc672bfd42b1e650398cb0bf71f64f9aae032cfe75bbcfe75b9cf966029c
|
||||
F ext/fts3/fts3_write.c a3f7bf869622d1d0aa66661ba71d88e6f9646d69a2c335f40a0addf25974db47
|
||||
F ext/fts3/fts3_write.c 6422e0ef762d9ae740aeee154a5490e2e6f67a15c9acf79c6c20519d45ca8490
|
||||
F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
|
||||
F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
|
||||
F ext/fts3/tool/fts3cov.sh c331d006359456cf6f8f953e37f2b9c7d568f3863f00bb5f7eb87fea4ac01b73
|
||||
@@ -105,9 +105,9 @@ F ext/fts5/fts5_buffer.c 1dd1ec0446b3acfc2d7d407eb894762a461613e2695273f48e449bf
|
||||
F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857
|
||||
F ext/fts5/fts5_expr.c f2825f714d91bbe62ab5820aee9ad12e0c94205b2a01725eaa9072415ae9ff1c
|
||||
F ext/fts5/fts5_hash.c 32be400cf761868c9db33efe81a06eb19a17c5402ad477ee9efb51301546dd55
|
||||
F ext/fts5/fts5_index.c 2ce9d50ec5508b8205615aad69e1c9b2c77f017f21d4479e1fb2079c01fdd017
|
||||
F ext/fts5/fts5_main.c f32b3b878c21df7bd4ea4c096c7d4b36f3fa40b216899ddf29d2eb9b47053069
|
||||
F ext/fts5/fts5_storage.c fb5ef3c27073f67ade2e1bea08405f9e43f68f5f3676ed0ab7013bce5ba10be6
|
||||
F ext/fts5/fts5_index.c 93ecfc0dfb04c62d5ad3fab6c7be769be1a0b51331f1b97f78ab08664ededd67
|
||||
F ext/fts5/fts5_main.c c6412f30cc50622c6cb2ef3ac7bdfb115f8abf86d65d2c0c8be892802111e0dd
|
||||
F ext/fts5/fts5_storage.c a89dc2ebfd40069a204ccd0ca0ca8acc2eb4c32dd6492c3facc8387a1a449124
|
||||
F ext/fts5/fts5_tcl.c 4a901f00c8553740dba63511603f5527d741c26a
|
||||
F ext/fts5/fts5_test_mi.c 783b86697ebf773c18fc109992426c0173a055bc
|
||||
F ext/fts5/fts5_test_tok.c ffd657dd67e7fcdb31bf63fb60b6d867299a581d0f46e97086abacd66c2a9b26
|
||||
@@ -275,7 +275,7 @@ F ext/rbu/sqlite3rbu.c d1438580a451eebda3bfd42ef69b677512f00125285e0e4e789b6131a
|
||||
F ext/rbu/sqlite3rbu.h fc25e1fcd99b5c6d32b1b5b1c73122632e873ac89bd0be9bf646db362b7ce02c
|
||||
F ext/rbu/test_rbu.c ec18cfc69a104309df23c359e3c80306c9a6bdd1d2c53c8b70ae158e9832dcd6
|
||||
F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
|
||||
F ext/rtree/rtree.c 9c55ff738ac3cd466f2eb23a91fb9bd6bf882ec30fed567066a0d95a6c757605
|
||||
F ext/rtree/rtree.c f47c18a7617ee8ff6885e2c96bff6a1d9fe87f5fd73a22b808630f0006657bff
|
||||
F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
|
||||
F ext/rtree/rtree1.test d5f0ba215b3bd1d05269ada86e74073b8445852aa0d33a63e10ec63a09c39473
|
||||
F ext/rtree/rtree2.test acbb3a4ce0f4fbc2c304d2b4b784cfa161856bba
|
||||
@@ -371,7 +371,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
||||
F src/insert.c 974499a3999d339a4c1ba8ef129a988d9f136b3789e423808b38cdc19d28adbe
|
||||
F src/legacy.c 134ab3e3fae00a0f67a5187981d6935b24b337bcf0f4b3e5c9fa5763da95bf4e
|
||||
F src/loadext.c a72909474dadce771d3669bf84bf689424f6f87d471fee898589c3ef9b2acfd9
|
||||
F src/main.c 747ec45346c3826113bc081cafe1aa2df945e50540c4b3fb13ec02b5e231c3db
|
||||
F src/main.c 36556f2e6a80213f72abeecd8de1e7d03b87f71110c515bd0a4368b62ace5ea9
|
||||
F src/malloc.c e20bb2b48abec52d3faf01cce12e8b4f95973755fafec98d45162dfdab111978
|
||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||
F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
|
||||
@@ -401,21 +401,21 @@ F src/pcache.h 521bb9610d38ef17a3cc9b5ddafd4546c2ea67fa3d0e464823d73c2a28d50e11
|
||||
F src/pcache1.c 1195a21fe28e223e024f900b2011e80df53793f0356a24caace4188b098540dc
|
||||
F src/pragma.c 2362670a9d28b71708aecb2b9b10b3f7be71f4c950961c07e81dc400e3ce6371
|
||||
F src/pragma.h 99d3df4a3d2f12c5227ad403f767334910e6356325b6d155a9a99b4037093460
|
||||
F src/prepare.c 4b84ae7458febe1df3e04ae62ba56abc851f771340e460d14426e6802c5615f4
|
||||
F src/prepare.c 0f9e3c6a137176d1922fbc2c2694dfad789421d052bcb11bf1fbafea0e8f647b
|
||||
F src/printf.c 8757834f1b54dae512fb25eb1acc8e94a0d15dd2290b58f2563f65973265adb2
|
||||
F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
|
||||
F src/resolve.c adf3ef9843135b1383321ad751f16f5a40c3f37925154555a3e61653d2a954e8
|
||||
F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
|
||||
F src/select.c 35ccfae64cecfa843d54a5898c4ab7d6595ce03d147267fa5eecdc8eab39cd6a
|
||||
F src/shell.c 227b86f2bdd707d0a177a4805a5c0b0378ef8337ab1ad04f5d79dc479568735a
|
||||
F src/sqlite.h.in b44ec77f83c8599182ea6646e0a99dfa5b11644943a00c8bb5736c2d19b8cbb5
|
||||
F src/sqlite.h.in c0be974111cac31e64f25376cf601ecdb3f1dfdaeeafd087642179ecdbc9094e
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
F src/sqlite3ext.h 58fd0676d3111d02e62e5a35992a7d3da5d3f88753acc174f2d37b774fbbdd28
|
||||
F src/sqliteInt.h 620093497e54998c6b2a01ad98aed9b561716c3db4bde0cc37c8bf2416200bed
|
||||
F src/sqliteInt.h a03afe12df989bc668c17929dc522dc8b1a214a264f74373ac8f8ebca8648b86
|
||||
F src/sqliteLimit.h 1513bfb7b20378aa0041e7022d04acb73525de35b80b252f1b83fedb4de6a76b
|
||||
F src/status.c a9e66593dfb28a9e746cba7153f84d49c1ddc4b1
|
||||
F src/table.c b46ad567748f24a326d9de40e5b9659f96ffff34
|
||||
F src/tclsqlite.c 2c29b0b76e91edfd1b43bf135c32c8674710089197327682b6b7e6af88062c3d
|
||||
F src/tclsqlite.c 4aea28e390c0bf1cc2492500846a8c990c06e1a352d489dc5d47f454116f5dd2
|
||||
F src/test1.c 735f7711e787f30ad4e0001220c580ce456d9f731e22e0e5f86dd5c7e41ccd4d
|
||||
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
|
||||
F src/test3.c b8434949dfb8aff8dfa082c8b592109e77844c2135ed3c492113839b6956255b
|
||||
@@ -1584,7 +1584,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 3fd050c343256c0748256ef183b46df04d9e0da0f81b841dbd336034402b36ab f02a54599de7620438aecd3753199fc52ce8919d7503bb8b2f5592b0e51dbf8c
|
||||
R feb9e70d0a08e3077acee5058fe09cc5
|
||||
P 62b8269ba2ff71e2daaa86688698896badd6f6e34ab42fbf92dda7fcda73a230
|
||||
R f82d69b2665460b9afe7b87b94bf0493
|
||||
T *branch * dbconfig-prepare-flags
|
||||
T *sym-dbconfig-prepare-flags *
|
||||
T -sym-prepare_v3 *
|
||||
U drh
|
||||
Z 4e60571db7566c33ec3ac14916a90cee
|
||||
Z 3590a30ddc82af9dd86c6992b95301b8
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
62b8269ba2ff71e2daaa86688698896badd6f6e34ab42fbf92dda7fcda73a230
|
||||
942c3ef8cdb172f4d055c544192b55bf02e4b660c7752f0f7b1fa34d3758cc33
|
||||
@@ -801,6 +801,11 @@ int sqlite3_db_config(sqlite3 *db, int op, ...){
|
||||
rc = setupLookaside(db, pBuf, sz, cnt);
|
||||
break;
|
||||
}
|
||||
case SQLITE_DBCONFIG_PREPARE_FLAGS: {
|
||||
db->prepFlags = SQLITE_PREPARE_MASK & va_arg(ap, int);
|
||||
rc = SQLITE_OK;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
static const struct {
|
||||
int op; /* The opcode */
|
||||
|
||||
+2
-30
@@ -529,6 +529,8 @@ static int sqlite3Prepare(
|
||||
assert( ppStmt && *ppStmt==0 );
|
||||
/* assert( !db->mallocFailed ); // not true with SQLITE_USE_ALLOCA */
|
||||
assert( sqlite3_mutex_held(db->mutex) );
|
||||
prepFlags |= db->prepFlags;
|
||||
db->prepFlags = 0;
|
||||
|
||||
/* For a long-term use prepared statement avoid the use of
|
||||
** lookaside memory.
|
||||
@@ -770,21 +772,6 @@ int sqlite3_prepare_v2(
|
||||
assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
|
||||
return rc;
|
||||
}
|
||||
int sqlite3_prepare_v3(
|
||||
sqlite3 *db, /* Database handle. */
|
||||
const char *zSql, /* UTF-8 encoded SQL statement. */
|
||||
int nBytes, /* Length of zSql in bytes. */
|
||||
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */
|
||||
sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
|
||||
const char **pzTail /* OUT: End of parsed string */
|
||||
){
|
||||
int rc;
|
||||
rc = sqlite3LockAndPrepare(db,zSql,nBytes,
|
||||
SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK),
|
||||
0,ppStmt,pzTail);
|
||||
assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
#ifndef SQLITE_OMIT_UTF16
|
||||
@@ -873,20 +860,5 @@ int sqlite3_prepare16_v2(
|
||||
assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
|
||||
return rc;
|
||||
}
|
||||
int sqlite3_prepare16_v3(
|
||||
sqlite3 *db, /* Database handle. */
|
||||
const void *zSql, /* UTF-16 encoded SQL statement. */
|
||||
int nBytes, /* Length of zSql in bytes. */
|
||||
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */
|
||||
sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
|
||||
const void **pzTail /* OUT: End of parsed string */
|
||||
){
|
||||
int rc;
|
||||
rc = sqlite3Prepare16(db,zSql,nBytes,
|
||||
SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK),
|
||||
ppStmt,pzTail);
|
||||
assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
|
||||
return rc;
|
||||
}
|
||||
|
||||
#endif /* SQLITE_OMIT_UTF16 */
|
||||
|
||||
+47
-67
@@ -235,7 +235,7 @@ int sqlite3_threadsafe(void);
|
||||
** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
|
||||
** and [sqlite3_close_v2()] are its destructors. There are many other
|
||||
** interfaces (such as
|
||||
** [sqlite3_prepare_v3()], [sqlite3_create_function()], and
|
||||
** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
|
||||
** [sqlite3_busy_timeout()] to name but three) that are methods on an
|
||||
** sqlite3 object.
|
||||
*/
|
||||
@@ -339,7 +339,7 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**);
|
||||
** METHOD: sqlite3
|
||||
**
|
||||
** The sqlite3_exec() interface is a convenience wrapper around
|
||||
** [sqlite3_prepare_v3()], [sqlite3_step()], and [sqlite3_finalize()],
|
||||
** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
|
||||
** that allows an application to run multiple statements of SQL
|
||||
** without having to use a lot of C code.
|
||||
**
|
||||
@@ -2018,6 +2018,15 @@ struct sqlite3_mem_methods {
|
||||
** was used during testing in the lab.
|
||||
** </dd>
|
||||
**
|
||||
** <dt>SQLITE_DBCONFIG_PREPARE_FLAGS</dt>
|
||||
** <dd>The SQLITE_DBCONFIG_PREPARE_FLAGS obption takes a single argument
|
||||
** which is a bitmask of zero or more [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE]
|
||||
** options. The selected options are applied to the next [sqlite3_prepare()],
|
||||
** [sqlite3_prepare_v2()], [sqlite3_prepare16()], or [sqlite3_prepare16_v2()]
|
||||
** call on the same database connection. The prepare flags are reset to zero
|
||||
** after a single use.
|
||||
** </dd>
|
||||
**
|
||||
** </dl>
|
||||
*/
|
||||
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
|
||||
@@ -2028,6 +2037,7 @@ struct sqlite3_mem_methods {
|
||||
#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
|
||||
#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
|
||||
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
|
||||
#define SQLITE_DBCONFIG_PREPARE_FLAGS 1008 /* int */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2691,8 +2701,7 @@ void sqlite3_randomness(int N, void *P);
|
||||
** [database connection], supplied in the first argument.
|
||||
** ^The authorizer callback is invoked as SQL statements are being compiled
|
||||
** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
|
||||
** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()],
|
||||
** and [sqlite3_prepare16_v3()]. ^At various
|
||||
** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. ^At various
|
||||
** points during the compilation process, as logic is being created
|
||||
** to perform various actions, the authorizer callback is invoked to
|
||||
** see if those actions are allowed. ^The authorizer callback should
|
||||
@@ -2701,12 +2710,12 @@ void sqlite3_randomness(int N, void *P);
|
||||
** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
|
||||
** rejected with an error. ^If the authorizer callback returns
|
||||
** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
|
||||
** then the [sqlite3_prepare_v3()] or equivalent call that triggered
|
||||
** then the [sqlite3_prepare_v2()] or equivalent call that triggered
|
||||
** the authorizer will fail with an error message.
|
||||
**
|
||||
** When the callback returns [SQLITE_OK], that means the operation
|
||||
** requested is ok. ^When the callback returns [SQLITE_DENY], the
|
||||
** [sqlite3_prepare_v3()] or equivalent call that triggered the
|
||||
** [sqlite3_prepare_v2()] or equivalent call that triggered the
|
||||
** authorizer will fail with an error message explaining that
|
||||
** access is denied.
|
||||
**
|
||||
@@ -2757,10 +2766,10 @@ void sqlite3_randomness(int N, void *P);
|
||||
**
|
||||
** The authorizer callback must not do anything that will modify
|
||||
** the database connection that invoked the authorizer callback.
|
||||
** Note that [sqlite3_prepare_v3()] and [sqlite3_step()] both modify their
|
||||
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
|
||||
** database connections for the meaning of "modify" in this paragraph.
|
||||
**
|
||||
** ^When [sqlite3_prepare_v3()] is used to prepare a statement, the
|
||||
** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
|
||||
** statement might be re-prepared during [sqlite3_step()] due to a
|
||||
** schema change. Hence, the application should ensure that the
|
||||
** correct authorizer callback remains in place during the [sqlite3_step()].
|
||||
@@ -2769,7 +2778,7 @@ void sqlite3_randomness(int N, void *P);
|
||||
** [sqlite3_prepare()] or its variants. Authorization is not
|
||||
** performed during statement evaluation in [sqlite3_step()], unless
|
||||
** as stated in the previous paragraph, sqlite3_step() invokes
|
||||
** sqlite3_prepare_v3() to reprepare a statement after a schema change.
|
||||
** sqlite3_prepare_v2() to reprepare a statement after a schema change.
|
||||
*/
|
||||
int sqlite3_set_authorizer(
|
||||
sqlite3*,
|
||||
@@ -3005,7 +3014,7 @@ int sqlite3_trace_v2(
|
||||
**
|
||||
** The progress handler callback must not do anything that will modify
|
||||
** the database connection that invoked the progress handler.
|
||||
** Note that [sqlite3_prepare_v3()] and [sqlite3_step()] both modify their
|
||||
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
|
||||
** database connections for the meaning of "modify" in this paragraph.
|
||||
**
|
||||
*/
|
||||
@@ -3359,7 +3368,7 @@ const char *sqlite3_errstr(int);
|
||||
** The life-cycle of a prepared statement object usually goes like this:
|
||||
**
|
||||
** <ol>
|
||||
** <li> Create the prepared statement object using [sqlite3_prepare_v3()].
|
||||
** <li> Create the prepared statement object using [sqlite3_prepare_v2()].
|
||||
** <li> Bind values to [parameters] using the sqlite3_bind_*()
|
||||
** interfaces.
|
||||
** <li> Run the SQL by calling [sqlite3_step()] one or more times.
|
||||
@@ -3441,7 +3450,7 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
|
||||
**
|
||||
** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
|
||||
** <dd>The maximum number of instructions in a virtual machine program
|
||||
** used to implement an SQL statement. If [sqlite3_prepare_v3()] or
|
||||
** used to implement an SQL statement. If [sqlite3_prepare_v2()] or
|
||||
** the equivalent tries to allocate space for more than this many opcodes
|
||||
** in a single prepared statement, an SQLITE_NOMEM error is returned.</dd>)^
|
||||
**
|
||||
@@ -3486,7 +3495,7 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
|
||||
** KEYWORDS:
|
||||
**
|
||||
** These constants define various flags that can be passed into
|
||||
** the [sqlite3_prepare_v3()] interface.
|
||||
** the [SQLITE_DBCONFIG_PREPARE_FLAGS] interface.
|
||||
**
|
||||
** <dl>
|
||||
** [[SQLITE_PREPARE_PERSISTENT]] ^(<dt>SQLITE_PREPARE_PERSISTENT</dt>
|
||||
@@ -3514,10 +3523,9 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
|
||||
** [sqlite3_open16()]. The database connection must not have been closed.
|
||||
**
|
||||
** The second argument, "zSql", is the statement to be compiled, encoded
|
||||
** as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(),
|
||||
** and sqlite3_prepare_v3()
|
||||
** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(),
|
||||
** and sqlite3_prepare16_v3() use UTF-16.
|
||||
** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2()
|
||||
** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
|
||||
** use UTF-16.
|
||||
**
|
||||
** ^If the nByte argument is negative, then zSql is read up to the
|
||||
** first zero terminator. ^If nByte is positive, then it is the
|
||||
@@ -3544,11 +3552,10 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
|
||||
** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
|
||||
** otherwise an [error code] is returned.
|
||||
**
|
||||
** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(),
|
||||
** and sqlite3_prepare16_v3() interfaces are recommended for all new programs.
|
||||
** The older interfaces are retained (sqlite3_prepare() and sqlite3_prepare16())
|
||||
** are retained for backwards compatibility, but their use is discouraged.
|
||||
** ^In the "vX" interfaces, the prepared statement
|
||||
** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
|
||||
** recommended for all new programs. The two older interfaces are retained
|
||||
** for backwards compatibility, but their use is discouraged.
|
||||
** ^In the "v2" interfaces, the prepared statement
|
||||
** that is returned (the [sqlite3_stmt] object) contains a copy of the
|
||||
** original SQL text. This causes the [sqlite3_step()] interface to
|
||||
** behave differently in three ways:
|
||||
@@ -3581,12 +3588,6 @@ int sqlite3_limit(sqlite3*, int id, int newVal);
|
||||
** or [GLOB] operator or if the parameter is compared to an indexed column
|
||||
** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled.
|
||||
** </li>
|
||||
**
|
||||
** <p>^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having
|
||||
** the extra prepFlags parameter, which is a bit array consisting of zero or
|
||||
** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The
|
||||
** sqlite3_prepare_v2() interface works exactly the same as
|
||||
** sqlite3_prepare_v3() with a zero prepFlags parameter.
|
||||
** </ol>
|
||||
*/
|
||||
int sqlite3_prepare(
|
||||
@@ -3603,14 +3604,6 @@ int sqlite3_prepare_v2(
|
||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
|
||||
const char **pzTail /* OUT: Pointer to unused portion of zSql */
|
||||
);
|
||||
int sqlite3_prepare_v3(
|
||||
sqlite3 *db, /* Database handle */
|
||||
const char *zSql, /* SQL statement, UTF-8 encoded */
|
||||
int nByte, /* Maximum length of zSql in bytes. */
|
||||
unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
|
||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
|
||||
const char **pzTail /* OUT: Pointer to unused portion of zSql */
|
||||
);
|
||||
int sqlite3_prepare16(
|
||||
sqlite3 *db, /* Database handle */
|
||||
const void *zSql, /* SQL statement, UTF-16 encoded */
|
||||
@@ -3625,14 +3618,6 @@ int sqlite3_prepare16_v2(
|
||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
|
||||
const void **pzTail /* OUT: Pointer to unused portion of zSql */
|
||||
);
|
||||
int sqlite3_prepare16_v3(
|
||||
sqlite3 *db, /* Database handle */
|
||||
const void *zSql, /* SQL statement, UTF-16 encoded */
|
||||
int nByte, /* Maximum length of zSql in bytes. */
|
||||
unsigned int prepFalgs, /* Zero or more SQLITE_PREPARE_ flags */
|
||||
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
|
||||
const void **pzTail /* OUT: Pointer to unused portion of zSql */
|
||||
);
|
||||
|
||||
/*
|
||||
** CAPI3REF: Retrieving Statement SQL
|
||||
@@ -3640,8 +3625,7 @@ int sqlite3_prepare16_v3(
|
||||
**
|
||||
** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8
|
||||
** SQL text used to create [prepared statement] P if P was
|
||||
** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()],
|
||||
** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()].
|
||||
** created by either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
|
||||
** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
|
||||
** string containing the SQL text of prepared statement P with
|
||||
** [bound parameters] expanded.
|
||||
@@ -3787,7 +3771,7 @@ typedef struct sqlite3_context sqlite3_context;
|
||||
** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
|
||||
** METHOD: sqlite3_stmt
|
||||
**
|
||||
** ^(In the SQL statement text input to [sqlite3_prepare_v3()] and its variants,
|
||||
** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
|
||||
** literals may be replaced by a [parameter] that matches one of following
|
||||
** templates:
|
||||
**
|
||||
@@ -3806,7 +3790,7 @@ typedef struct sqlite3_context sqlite3_context;
|
||||
**
|
||||
** ^The first argument to the sqlite3_bind_*() routines is always
|
||||
** a pointer to the [sqlite3_stmt] object returned from
|
||||
** [sqlite3_prepare_v3()] or its variants.
|
||||
** [sqlite3_prepare_v2()] or its variants.
|
||||
**
|
||||
** ^The second argument is the index of the SQL parameter to be set.
|
||||
** ^The leftmost SQL parameter has an index of 1. ^When the same named
|
||||
@@ -3943,8 +3927,8 @@ int sqlite3_bind_parameter_count(sqlite3_stmt*);
|
||||
** ^If the value N is out of range or if the N-th parameter is
|
||||
** nameless, then NULL is returned. ^The returned string is
|
||||
** always in UTF-8 encoding even if the named parameter was
|
||||
** originally specified as UTF-16 in [sqlite3_prepare16()],
|
||||
** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()].
|
||||
** originally specified as UTF-16 in [sqlite3_prepare16()] or
|
||||
** [sqlite3_prepare16_v2()].
|
||||
**
|
||||
** See also: [sqlite3_bind_blob|sqlite3_bind()],
|
||||
** [sqlite3_bind_parameter_count()], and
|
||||
@@ -3961,8 +3945,7 @@ const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
|
||||
** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero
|
||||
** is returned if no matching parameter is found. ^The parameter
|
||||
** name must be given in UTF-8 even if the original statement
|
||||
** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or
|
||||
** [sqlite3_prepare16_v3()].
|
||||
** was prepared from UTF-16 text using [sqlite3_prepare16_v2()].
|
||||
**
|
||||
** See also: [sqlite3_bind_blob|sqlite3_bind()],
|
||||
** [sqlite3_bind_parameter_count()], and
|
||||
@@ -4116,18 +4099,16 @@ const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
|
||||
** CAPI3REF: Evaluate An SQL Statement
|
||||
** METHOD: sqlite3_stmt
|
||||
**
|
||||
** After a [prepared statement] has been prepared using any of
|
||||
** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()],
|
||||
** or [sqlite3_prepare16_v3()] or one of the legacy
|
||||
** After a [prepared statement] has been prepared using either
|
||||
** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy
|
||||
** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
|
||||
** must be called one or more times to evaluate the statement.
|
||||
**
|
||||
** The details of the behavior of the sqlite3_step() interface depend
|
||||
** on whether the statement was prepared using the newer "vX" interfaces
|
||||
** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()],
|
||||
** [sqlite3_prepare16_v2()] or the older legacy
|
||||
** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the
|
||||
** new "vX" interface is recommended for new applications but the legacy
|
||||
** on whether the statement was prepared using the newer "v2" interface
|
||||
** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy
|
||||
** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the
|
||||
** new "v2" interface is recommended for new applications but the legacy
|
||||
** interface will continue to be supported.
|
||||
**
|
||||
** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
|
||||
@@ -4188,11 +4169,10 @@ const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
|
||||
** specific [error codes] that better describes the error.
|
||||
** We admit that this is a goofy design. The problem has been fixed
|
||||
** with the "v2" interface. If you prepare all of your SQL statements
|
||||
** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()]
|
||||
** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead
|
||||
** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
|
||||
** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
|
||||
** then the more specific [error codes] are returned directly
|
||||
** by sqlite3_step(). The use of the "vX" interfaces is recommended.
|
||||
** by sqlite3_step(). The use of the "v2" interface is recommended.
|
||||
*/
|
||||
int sqlite3_step(sqlite3_stmt*);
|
||||
|
||||
@@ -4257,7 +4237,7 @@ int sqlite3_data_count(sqlite3_stmt *pStmt);
|
||||
** ^These routines return information about a single column of the current
|
||||
** result row of a query. ^In every case the first argument is a pointer
|
||||
** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
|
||||
** that was returned from [sqlite3_prepare_v3()] or one of its variants)
|
||||
** that was returned from [sqlite3_prepare_v2()] or one of its variants)
|
||||
** and the second argument is the index of the column for which information
|
||||
** should be returned. ^The leftmost column of the result set has the index 0.
|
||||
** ^The number of columns in the result can be determined using
|
||||
@@ -5381,7 +5361,7 @@ int sqlite3_get_autocommit(sqlite3*);
|
||||
** to which a [prepared statement] belongs. ^The [database connection]
|
||||
** returned by sqlite3_db_handle is the same [database connection]
|
||||
** that was the first argument
|
||||
** to the [sqlite3_prepare_v3()] call (or its variants) that was used to
|
||||
** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
|
||||
** create the statement in the first place.
|
||||
*/
|
||||
sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
|
||||
@@ -5457,7 +5437,7 @@ sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
|
||||
** completion of the [sqlite3_step()] call that triggered the commit
|
||||
** or rollback hook in the first place.
|
||||
** Note that running any other SQL statements, including SELECT statements,
|
||||
** or merely calling [sqlite3_prepare_v3()] and [sqlite3_step()] will modify
|
||||
** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify
|
||||
** the database connections for the meaning of "modify" in this paragraph.
|
||||
**
|
||||
** ^Registering a NULL function disables the callback.
|
||||
@@ -5517,7 +5497,7 @@ void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
|
||||
** the database connection that invoked the update hook. Any actions
|
||||
** to modify the database connection must be deferred until after the
|
||||
** completion of the [sqlite3_step()] call that triggered the update hook.
|
||||
** Note that [sqlite3_prepare_v3()] and [sqlite3_step()] both modify their
|
||||
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
|
||||
** database connections for the meaning of "modify" in this paragraph.
|
||||
**
|
||||
** ^The sqlite3_update_hook(D,C,P) function
|
||||
|
||||
@@ -1337,6 +1337,7 @@ struct sqlite3 {
|
||||
u8 mTrace; /* zero or more SQLITE_TRACE flags */
|
||||
u8 skipBtreeMutex; /* True if no shared-cache backends */
|
||||
u8 nSqlExec; /* Number of pending OP_SqlExec opcodes */
|
||||
u8 prepFlags; /* Zero or more SQLITE_PREPARE_* flags */
|
||||
int nextPagesize; /* Pagesize after VACUUM if >0 */
|
||||
u32 magic; /* Magic number for detect library misuse */
|
||||
int nChange; /* Value returned by sqlite3_changes() */
|
||||
|
||||
+5
-4
@@ -1215,7 +1215,6 @@ static int dbPrepare(
|
||||
sqlite3_stmt **ppStmt, /* OUT: Prepared statement */
|
||||
const char **pzOut /* OUT: Pointer to next SQL statement */
|
||||
){
|
||||
unsigned int prepFlags = 0;
|
||||
#ifdef SQLITE_TEST
|
||||
if( pDb->bLegacyPrepare ){
|
||||
return sqlite3_prepare(pDb->db, zSql, -1, ppStmt, pzOut);
|
||||
@@ -1224,9 +1223,11 @@ static int dbPrepare(
|
||||
/* If the statement cache is large, use the SQLITE_PREPARE_PERSISTENT
|
||||
** flags, which uses less lookaside memory. But if the cache is small,
|
||||
** omit that flag to make full use of lookaside */
|
||||
if( pDb->maxStmt>5 ) prepFlags = SQLITE_PREPARE_PERSISTENT;
|
||||
|
||||
return sqlite3_prepare_v3(pDb->db, zSql, -1, prepFlags, ppStmt, pzOut);
|
||||
if( pDb->maxStmt>5 ){
|
||||
sqlite3_db_config(pDb->db, SQLITE_DBCONFIG_PREPARE_FLAGS,
|
||||
SQLITE_PREPARE_PERSISTENT);
|
||||
}
|
||||
return sqlite3_prepare_v2(pDb->db, zSql, -1, ppStmt, pzOut);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user