Fossil SCM

merged in trunk.

stephan 2014-11-30 13:27 UTC admin-logging merge
Commit 1526dd4c7e0c6bb1f7698096a0fa8304d4d0516f
+1 -1
--- Makefile.in
+++ Makefile.in
@@ -37,11 +37,11 @@
3737
# care about testing the end result, this can be blank.
3838
#
3939
TCLSH = tclsh
4040
4141
LIB = @LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
42
-TCC += @EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H -D_HAVE_SQLITE_CONFIG_H
42
+TCCFLAGS = @EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H -D_HAVE_SQLITE_CONFIG_H
4343
INSTALLDIR = $(DESTDIR)@prefix@/bin
4444
USE_SYSTEM_SQLITE = @USE_SYSTEM_SQLITE@
4545
FOSSIL_ENABLE_MINIZ = @FOSSIL_ENABLE_MINIZ@
4646
4747
include $(SRCDIR)/main.mk
4848
--- Makefile.in
+++ Makefile.in
@@ -37,11 +37,11 @@
37 # care about testing the end result, this can be blank.
38 #
39 TCLSH = tclsh
40
41 LIB = @LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
42 TCC += @EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H -D_HAVE_SQLITE_CONFIG_H
43 INSTALLDIR = $(DESTDIR)@prefix@/bin
44 USE_SYSTEM_SQLITE = @USE_SYSTEM_SQLITE@
45 FOSSIL_ENABLE_MINIZ = @FOSSIL_ENABLE_MINIZ@
46
47 include $(SRCDIR)/main.mk
48
--- Makefile.in
+++ Makefile.in
@@ -37,11 +37,11 @@
37 # care about testing the end result, this can be blank.
38 #
39 TCLSH = tclsh
40
41 LIB = @LDFLAGS@ @EXTRA_LDFLAGS@ @LIBS@
42 TCCFLAGS = @EXTRA_CFLAGS@ @CPPFLAGS@ @CFLAGS@ -DHAVE_AUTOCONFIG_H -D_HAVE_SQLITE_CONFIG_H
43 INSTALLDIR = $(DESTDIR)@prefix@/bin
44 USE_SYSTEM_SQLITE = @USE_SYSTEM_SQLITE@
45 FOSSIL_ENABLE_MINIZ = @FOSSIL_ENABLE_MINIZ@
46
47 include $(SRCDIR)/main.mk
48
+1 -1
--- src/clone.c
+++ src/clone.c
@@ -164,11 +164,11 @@
164164
db_begin_transaction();
165165
db_record_repository_filename(g.argv[3]);
166166
db_initial_setup(0, 0, zDefaultUser, 0);
167167
user_select();
168168
db_set("content-schema", CONTENT_SCHEMA, 0);
169
- db_set("aux-schema", AUX_SCHEMA, 0);
169
+ db_set("aux-schema", AUX_SCHEMA_MAX, 0);
170170
db_set("rebuilt", get_version(), 0);
171171
remember_or_get_http_auth(zHttpAuth, urlFlags & URL_REMEMBER, g.argv[2]);
172172
url_remember();
173173
if( g.zSSLIdentity!=0 ){
174174
/* If the --ssl-identity option was specified, store it as a setting */
175175
--- src/clone.c
+++ src/clone.c
@@ -164,11 +164,11 @@
164 db_begin_transaction();
165 db_record_repository_filename(g.argv[3]);
166 db_initial_setup(0, 0, zDefaultUser, 0);
167 user_select();
168 db_set("content-schema", CONTENT_SCHEMA, 0);
169 db_set("aux-schema", AUX_SCHEMA, 0);
170 db_set("rebuilt", get_version(), 0);
171 remember_or_get_http_auth(zHttpAuth, urlFlags & URL_REMEMBER, g.argv[2]);
172 url_remember();
173 if( g.zSSLIdentity!=0 ){
174 /* If the --ssl-identity option was specified, store it as a setting */
175
--- src/clone.c
+++ src/clone.c
@@ -164,11 +164,11 @@
164 db_begin_transaction();
165 db_record_repository_filename(g.argv[3]);
166 db_initial_setup(0, 0, zDefaultUser, 0);
167 user_select();
168 db_set("content-schema", CONTENT_SCHEMA, 0);
169 db_set("aux-schema", AUX_SCHEMA_MAX, 0);
170 db_set("rebuilt", get_version(), 0);
171 remember_or_get_http_auth(zHttpAuth, urlFlags & URL_REMEMBER, g.argv[2]);
172 url_remember();
173 if( g.zSSLIdentity!=0 ){
174 /* If the --ssl-identity option was specified, store it as a setting */
175
+48 -9
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706706
if( rc==0 ){
707707
sqlite3_result_int64(context, mtime);
708708
}
709709
}
710710
711
+void db_sym2rid_function(
712
+ sqlite3_context *context,
713
+ int argc,
714
+ sqlite3_value **argv
715
+){
716
+ char const * arg;
717
+ char const * type;
718
+ if(1 != argc && 2 != argc){
719
+ sqlite3_result_error(context, "Expecting one or two arguments", -1);
720
+ return;
721
+ }
722
+ arg = (const char*)sqlite3_value_text(argv[0]);
723
+ if(!arg){
724
+ sqlite3_result_error(context, "Expecting a STRING argument", -1);
725
+ }else{
726
+ int rid;
727
+ type = (2==argc) ? sqlite3_value_text(argv[1]) : 0;
728
+ if(!type) type = "ci";
729
+ rid = symbolic_name_to_rid( arg, type );
730
+ if(rid<0){
731
+ sqlite3_result_error(context, "Symbolic name is ambiguous.", -1);
732
+ }else if(0==rid){
733
+ sqlite3_result_null(context);
734
+ }else{
735
+ sqlite3_result_int64(context, rid);
736
+ }
737
+ }
738
+}
739
+
711740
712741
/*
713742
** Open a database file. Return a pointer to the new database
714743
** connection. An error results in process abort.
715744
*/
@@ -738,13 +767,22 @@
738767
sqlite3_create_function(
739768
db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
740769
);
741770
sqlite3_create_function(
742771
db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
772
+ );
773
+ sqlite3_create_function(
774
+ db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
775
+ 0, 0
776
+ );
777
+ sqlite3_create_function(
778
+ db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
779
+ 0, 0
743780
);
744781
if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
745782
re_add_sql_func(db);
783
+ foci_register(db);
746784
sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
747785
return db;
748786
}
749787
750788
@@ -962,20 +1000,21 @@
9621000
** is found, it is attached to the open database connection too.
9631001
*/
9641002
int db_open_local(const char *zDbName){
9651003
int i, n;
9661004
char zPwd[2000];
967
- static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
1005
+ static const char *(aDbName[]) = { "_FOSSIL_", ".fslckout", ".fos" };
9681006
9691007
if( g.localOpen ) return 1;
9701008
file_getcwd(zPwd, sizeof(zPwd)-20);
9711009
n = strlen(zPwd);
9721010
while( n>0 ){
9731011
for(i=0; i<count(aDbName); i++){
9741012
sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
9751013
if( isValidLocalDb(zPwd) ){
9761014
/* Found a valid checkout database file */
1015
+ g.zLocalDbName = mprintf("%s", zPwd);
9771016
zPwd[n] = 0;
9781017
while( n>0 && zPwd[n-1]=='/' ){
9791018
n--;
9801019
zPwd[n] = 0;
9811020
}
@@ -1117,13 +1156,13 @@
11171156
11181157
/*
11191158
** Return TRUE if the schema is out-of-date
11201159
*/
11211160
int db_schema_is_outofdate(void){
1122
- return db_exists("SELECT 1 FROM config"
1123
- " WHERE name='aux-schema'"
1124
- " AND value<>%Q", AUX_SCHEMA);
1161
+ if( g.zAuxSchema==0 ) g.zAuxSchema = db_get("aux-schema","");
1162
+ return strcmp(g.zAuxSchema,AUX_SCHEMA_MIN)<0
1163
+ || strcmp(g.zAuxSchema,AUX_SCHEMA_MAX)>0;
11251164
}
11261165
11271166
/*
11281167
** Return true if the database is writeable
11291168
*/
@@ -1138,14 +1177,14 @@
11381177
void db_verify_schema(void){
11391178
if( db_schema_is_outofdate() ){
11401179
#ifdef FOSSIL_ENABLE_JSON
11411180
g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
11421181
#endif
1143
- fossil_warning("incorrect repository schema version");
1144
- fossil_warning("your repository has schema version \"%s\" "
1145
- "but this binary expects version \"%s\"",
1146
- db_get("aux-schema",0), AUX_SCHEMA);
1182
+ fossil_warning("incorrect repository schema version: "
1183
+ "current repository schema version is \"%s\" "
1184
+ "but need versions between \"%s\" and \"%s\".",
1185
+ g.zAuxSchema, AUX_SCHEMA_MIN, AUX_SCHEMA_MAX);
11471186
fossil_fatal("run \"fossil rebuild\" to fix this problem");
11481187
}
11491188
}
11501189
11511190
@@ -1393,11 +1432,11 @@
13931432
char *zDate;
13941433
Blob hash;
13951434
Blob manifest;
13961435
13971436
db_set("content-schema", CONTENT_SCHEMA, 0);
1398
- db_set("aux-schema", AUX_SCHEMA, 0);
1437
+ db_set("aux-schema", AUX_SCHEMA_MAX, 0);
13991438
db_set("rebuilt", get_version(), 0);
14001439
if( makeServerCodes ){
14011440
db_setup_server_and_project_codes(0);
14021441
}
14031442
if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
14041443
14051444
ADDED src/foci.c
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706 if( rc==0 ){
707 sqlite3_result_int64(context, mtime);
708 }
709 }
710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
712 /*
713 ** Open a database file. Return a pointer to the new database
714 ** connection. An error results in process abort.
715 */
@@ -738,13 +767,22 @@
738 sqlite3_create_function(
739 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
740 );
741 sqlite3_create_function(
742 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
 
 
 
 
 
 
 
 
743 );
744 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
745 re_add_sql_func(db);
 
746 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
747 return db;
748 }
749
750
@@ -962,20 +1000,21 @@
962 ** is found, it is attached to the open database connection too.
963 */
964 int db_open_local(const char *zDbName){
965 int i, n;
966 char zPwd[2000];
967 static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
968
969 if( g.localOpen ) return 1;
970 file_getcwd(zPwd, sizeof(zPwd)-20);
971 n = strlen(zPwd);
972 while( n>0 ){
973 for(i=0; i<count(aDbName); i++){
974 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
975 if( isValidLocalDb(zPwd) ){
976 /* Found a valid checkout database file */
 
977 zPwd[n] = 0;
978 while( n>0 && zPwd[n-1]=='/' ){
979 n--;
980 zPwd[n] = 0;
981 }
@@ -1117,13 +1156,13 @@
1117
1118 /*
1119 ** Return TRUE if the schema is out-of-date
1120 */
1121 int db_schema_is_outofdate(void){
1122 return db_exists("SELECT 1 FROM config"
1123 " WHERE name='aux-schema'"
1124 " AND value<>%Q", AUX_SCHEMA);
1125 }
1126
1127 /*
1128 ** Return true if the database is writeable
1129 */
@@ -1138,14 +1177,14 @@
1138 void db_verify_schema(void){
1139 if( db_schema_is_outofdate() ){
1140 #ifdef FOSSIL_ENABLE_JSON
1141 g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
1142 #endif
1143 fossil_warning("incorrect repository schema version");
1144 fossil_warning("your repository has schema version \"%s\" "
1145 "but this binary expects version \"%s\"",
1146 db_get("aux-schema",0), AUX_SCHEMA);
1147 fossil_fatal("run \"fossil rebuild\" to fix this problem");
1148 }
1149 }
1150
1151
@@ -1393,11 +1432,11 @@
1393 char *zDate;
1394 Blob hash;
1395 Blob manifest;
1396
1397 db_set("content-schema", CONTENT_SCHEMA, 0);
1398 db_set("aux-schema", AUX_SCHEMA, 0);
1399 db_set("rebuilt", get_version(), 0);
1400 if( makeServerCodes ){
1401 db_setup_server_and_project_codes(0);
1402 }
1403 if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
1404
1405 DDED src/foci.c
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706 if( rc==0 ){
707 sqlite3_result_int64(context, mtime);
708 }
709 }
710
711 void db_sym2rid_function(
712 sqlite3_context *context,
713 int argc,
714 sqlite3_value **argv
715 ){
716 char const * arg;
717 char const * type;
718 if(1 != argc && 2 != argc){
719 sqlite3_result_error(context, "Expecting one or two arguments", -1);
720 return;
721 }
722 arg = (const char*)sqlite3_value_text(argv[0]);
723 if(!arg){
724 sqlite3_result_error(context, "Expecting a STRING argument", -1);
725 }else{
726 int rid;
727 type = (2==argc) ? sqlite3_value_text(argv[1]) : 0;
728 if(!type) type = "ci";
729 rid = symbolic_name_to_rid( arg, type );
730 if(rid<0){
731 sqlite3_result_error(context, "Symbolic name is ambiguous.", -1);
732 }else if(0==rid){
733 sqlite3_result_null(context);
734 }else{
735 sqlite3_result_int64(context, rid);
736 }
737 }
738 }
739
740
741 /*
742 ** Open a database file. Return a pointer to the new database
743 ** connection. An error results in process abort.
744 */
@@ -738,13 +767,22 @@
767 sqlite3_create_function(
768 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
769 );
770 sqlite3_create_function(
771 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
772 );
773 sqlite3_create_function(
774 db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
775 0, 0
776 );
777 sqlite3_create_function(
778 db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
779 0, 0
780 );
781 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
782 re_add_sql_func(db);
783 foci_register(db);
784 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
785 return db;
786 }
787
788
@@ -962,20 +1000,21 @@
1000 ** is found, it is attached to the open database connection too.
1001 */
1002 int db_open_local(const char *zDbName){
1003 int i, n;
1004 char zPwd[2000];
1005 static const char *(aDbName[]) = { "_FOSSIL_", ".fslckout", ".fos" };
1006
1007 if( g.localOpen ) return 1;
1008 file_getcwd(zPwd, sizeof(zPwd)-20);
1009 n = strlen(zPwd);
1010 while( n>0 ){
1011 for(i=0; i<count(aDbName); i++){
1012 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
1013 if( isValidLocalDb(zPwd) ){
1014 /* Found a valid checkout database file */
1015 g.zLocalDbName = mprintf("%s", zPwd);
1016 zPwd[n] = 0;
1017 while( n>0 && zPwd[n-1]=='/' ){
1018 n--;
1019 zPwd[n] = 0;
1020 }
@@ -1117,13 +1156,13 @@
1156
1157 /*
1158 ** Return TRUE if the schema is out-of-date
1159 */
1160 int db_schema_is_outofdate(void){
1161 if( g.zAuxSchema==0 ) g.zAuxSchema = db_get("aux-schema","");
1162 return strcmp(g.zAuxSchema,AUX_SCHEMA_MIN)<0
1163 || strcmp(g.zAuxSchema,AUX_SCHEMA_MAX)>0;
1164 }
1165
1166 /*
1167 ** Return true if the database is writeable
1168 */
@@ -1138,14 +1177,14 @@
1177 void db_verify_schema(void){
1178 if( db_schema_is_outofdate() ){
1179 #ifdef FOSSIL_ENABLE_JSON
1180 g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
1181 #endif
1182 fossil_warning("incorrect repository schema version: "
1183 "current repository schema version is \"%s\" "
1184 "but need versions between \"%s\" and \"%s\".",
1185 g.zAuxSchema, AUX_SCHEMA_MIN, AUX_SCHEMA_MAX);
1186 fossil_fatal("run \"fossil rebuild\" to fix this problem");
1187 }
1188 }
1189
1190
@@ -1393,11 +1432,11 @@
1432 char *zDate;
1433 Blob hash;
1434 Blob manifest;
1435
1436 db_set("content-schema", CONTENT_SCHEMA, 0);
1437 db_set("aux-schema", AUX_SCHEMA_MAX, 0);
1438 db_set("rebuilt", get_version(), 0);
1439 if( makeServerCodes ){
1440 db_setup_server_and_project_codes(0);
1441 }
1442 if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
1443
1444 DDED src/foci.c
+48 -9
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706706
if( rc==0 ){
707707
sqlite3_result_int64(context, mtime);
708708
}
709709
}
710710
711
+void db_sym2rid_function(
712
+ sqlite3_context *context,
713
+ int argc,
714
+ sqlite3_value **argv
715
+){
716
+ char const * arg;
717
+ char const * type;
718
+ if(1 != argc && 2 != argc){
719
+ sqlite3_result_error(context, "Expecting one or two arguments", -1);
720
+ return;
721
+ }
722
+ arg = (const char*)sqlite3_value_text(argv[0]);
723
+ if(!arg){
724
+ sqlite3_result_error(context, "Expecting a STRING argument", -1);
725
+ }else{
726
+ int rid;
727
+ type = (2==argc) ? sqlite3_value_text(argv[1]) : 0;
728
+ if(!type) type = "ci";
729
+ rid = symbolic_name_to_rid( arg, type );
730
+ if(rid<0){
731
+ sqlite3_result_error(context, "Symbolic name is ambiguous.", -1);
732
+ }else if(0==rid){
733
+ sqlite3_result_null(context);
734
+ }else{
735
+ sqlite3_result_int64(context, rid);
736
+ }
737
+ }
738
+}
739
+
711740
712741
/*
713742
** Open a database file. Return a pointer to the new database
714743
** connection. An error results in process abort.
715744
*/
@@ -738,13 +767,22 @@
738767
sqlite3_create_function(
739768
db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
740769
);
741770
sqlite3_create_function(
742771
db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
772
+ );
773
+ sqlite3_create_function(
774
+ db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
775
+ 0, 0
776
+ );
777
+ sqlite3_create_function(
778
+ db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
779
+ 0, 0
743780
);
744781
if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
745782
re_add_sql_func(db);
783
+ foci_register(db);
746784
sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
747785
return db;
748786
}
749787
750788
@@ -962,20 +1000,21 @@
9621000
** is found, it is attached to the open database connection too.
9631001
*/
9641002
int db_open_local(const char *zDbName){
9651003
int i, n;
9661004
char zPwd[2000];
967
- static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
1005
+ static const char *(aDbName[]) = { "_FOSSIL_", ".fslckout", ".fos" };
9681006
9691007
if( g.localOpen ) return 1;
9701008
file_getcwd(zPwd, sizeof(zPwd)-20);
9711009
n = strlen(zPwd);
9721010
while( n>0 ){
9731011
for(i=0; i<count(aDbName); i++){
9741012
sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
9751013
if( isValidLocalDb(zPwd) ){
9761014
/* Found a valid checkout database file */
1015
+ g.zLocalDbName = mprintf("%s", zPwd);
9771016
zPwd[n] = 0;
9781017
while( n>0 && zPwd[n-1]=='/' ){
9791018
n--;
9801019
zPwd[n] = 0;
9811020
}
@@ -1117,13 +1156,13 @@
11171156
11181157
/*
11191158
** Return TRUE if the schema is out-of-date
11201159
*/
11211160
int db_schema_is_outofdate(void){
1122
- return db_exists("SELECT 1 FROM config"
1123
- " WHERE name='aux-schema'"
1124
- " AND value<>%Q", AUX_SCHEMA);
1161
+ if( g.zAuxSchema==0 ) g.zAuxSchema = db_get("aux-schema","");
1162
+ return strcmp(g.zAuxSchema,AUX_SCHEMA_MIN)<0
1163
+ || strcmp(g.zAuxSchema,AUX_SCHEMA_MAX)>0;
11251164
}
11261165
11271166
/*
11281167
** Return true if the database is writeable
11291168
*/
@@ -1138,14 +1177,14 @@
11381177
void db_verify_schema(void){
11391178
if( db_schema_is_outofdate() ){
11401179
#ifdef FOSSIL_ENABLE_JSON
11411180
g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
11421181
#endif
1143
- fossil_warning("incorrect repository schema version");
1144
- fossil_warning("your repository has schema version \"%s\" "
1145
- "but this binary expects version \"%s\"",
1146
- db_get("aux-schema",0), AUX_SCHEMA);
1182
+ fossil_warning("incorrect repository schema version: "
1183
+ "current repository schema version is \"%s\" "
1184
+ "but need versions between \"%s\" and \"%s\".",
1185
+ g.zAuxSchema, AUX_SCHEMA_MIN, AUX_SCHEMA_MAX);
11471186
fossil_fatal("run \"fossil rebuild\" to fix this problem");
11481187
}
11491188
}
11501189
11511190
@@ -1393,11 +1432,11 @@
13931432
char *zDate;
13941433
Blob hash;
13951434
Blob manifest;
13961435
13971436
db_set("content-schema", CONTENT_SCHEMA, 0);
1398
- db_set("aux-schema", AUX_SCHEMA, 0);
1437
+ db_set("aux-schema", AUX_SCHEMA_MAX, 0);
13991438
db_set("rebuilt", get_version(), 0);
14001439
if( makeServerCodes ){
14011440
db_setup_server_and_project_codes(0);
14021441
}
14031442
if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
14041443
14051444
ADDED src/foci.c
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706 if( rc==0 ){
707 sqlite3_result_int64(context, mtime);
708 }
709 }
710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
712 /*
713 ** Open a database file. Return a pointer to the new database
714 ** connection. An error results in process abort.
715 */
@@ -738,13 +767,22 @@
738 sqlite3_create_function(
739 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
740 );
741 sqlite3_create_function(
742 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
 
 
 
 
 
 
 
 
743 );
744 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
745 re_add_sql_func(db);
 
746 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
747 return db;
748 }
749
750
@@ -962,20 +1000,21 @@
962 ** is found, it is attached to the open database connection too.
963 */
964 int db_open_local(const char *zDbName){
965 int i, n;
966 char zPwd[2000];
967 static const char aDbName[][10] = { "_FOSSIL_", ".fslckout", ".fos" };
968
969 if( g.localOpen ) return 1;
970 file_getcwd(zPwd, sizeof(zPwd)-20);
971 n = strlen(zPwd);
972 while( n>0 ){
973 for(i=0; i<count(aDbName); i++){
974 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
975 if( isValidLocalDb(zPwd) ){
976 /* Found a valid checkout database file */
 
977 zPwd[n] = 0;
978 while( n>0 && zPwd[n-1]=='/' ){
979 n--;
980 zPwd[n] = 0;
981 }
@@ -1117,13 +1156,13 @@
1117
1118 /*
1119 ** Return TRUE if the schema is out-of-date
1120 */
1121 int db_schema_is_outofdate(void){
1122 return db_exists("SELECT 1 FROM config"
1123 " WHERE name='aux-schema'"
1124 " AND value<>%Q", AUX_SCHEMA);
1125 }
1126
1127 /*
1128 ** Return true if the database is writeable
1129 */
@@ -1138,14 +1177,14 @@
1138 void db_verify_schema(void){
1139 if( db_schema_is_outofdate() ){
1140 #ifdef FOSSIL_ENABLE_JSON
1141 g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
1142 #endif
1143 fossil_warning("incorrect repository schema version");
1144 fossil_warning("your repository has schema version \"%s\" "
1145 "but this binary expects version \"%s\"",
1146 db_get("aux-schema",0), AUX_SCHEMA);
1147 fossil_fatal("run \"fossil rebuild\" to fix this problem");
1148 }
1149 }
1150
1151
@@ -1393,11 +1432,11 @@
1393 char *zDate;
1394 Blob hash;
1395 Blob manifest;
1396
1397 db_set("content-schema", CONTENT_SCHEMA, 0);
1398 db_set("aux-schema", AUX_SCHEMA, 0);
1399 db_set("rebuilt", get_version(), 0);
1400 if( makeServerCodes ){
1401 db_setup_server_and_project_codes(0);
1402 }
1403 if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
1404
1405 DDED src/foci.c
--- src/db.c
+++ src/db.c
@@ -706,10 +706,39 @@
706 if( rc==0 ){
707 sqlite3_result_int64(context, mtime);
708 }
709 }
710
711 void db_sym2rid_function(
712 sqlite3_context *context,
713 int argc,
714 sqlite3_value **argv
715 ){
716 char const * arg;
717 char const * type;
718 if(1 != argc && 2 != argc){
719 sqlite3_result_error(context, "Expecting one or two arguments", -1);
720 return;
721 }
722 arg = (const char*)sqlite3_value_text(argv[0]);
723 if(!arg){
724 sqlite3_result_error(context, "Expecting a STRING argument", -1);
725 }else{
726 int rid;
727 type = (2==argc) ? sqlite3_value_text(argv[1]) : 0;
728 if(!type) type = "ci";
729 rid = symbolic_name_to_rid( arg, type );
730 if(rid<0){
731 sqlite3_result_error(context, "Symbolic name is ambiguous.", -1);
732 }else if(0==rid){
733 sqlite3_result_null(context);
734 }else{
735 sqlite3_result_int64(context, rid);
736 }
737 }
738 }
739
740
741 /*
742 ** Open a database file. Return a pointer to the new database
743 ** connection. An error results in process abort.
744 */
@@ -738,13 +767,22 @@
767 sqlite3_create_function(
768 db, "is_selected", 1, SQLITE_UTF8, 0, file_is_selected,0,0
769 );
770 sqlite3_create_function(
771 db, "if_selected", 3, SQLITE_UTF8, 0, file_is_selected,0,0
772 );
773 sqlite3_create_function(
774 db, "symbolic_name_to_rid", 1, SQLITE_UTF8, 0, db_sym2rid_function,
775 0, 0
776 );
777 sqlite3_create_function(
778 db, "symbolic_name_to_rid", 2, SQLITE_UTF8, 0, db_sym2rid_function,
779 0, 0
780 );
781 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
782 re_add_sql_func(db);
783 foci_register(db);
784 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
785 return db;
786 }
787
788
@@ -962,20 +1000,21 @@
1000 ** is found, it is attached to the open database connection too.
1001 */
1002 int db_open_local(const char *zDbName){
1003 int i, n;
1004 char zPwd[2000];
1005 static const char *(aDbName[]) = { "_FOSSIL_", ".fslckout", ".fos" };
1006
1007 if( g.localOpen ) return 1;
1008 file_getcwd(zPwd, sizeof(zPwd)-20);
1009 n = strlen(zPwd);
1010 while( n>0 ){
1011 for(i=0; i<count(aDbName); i++){
1012 sqlite3_snprintf(sizeof(zPwd)-n, &zPwd[n], "/%s", aDbName[i]);
1013 if( isValidLocalDb(zPwd) ){
1014 /* Found a valid checkout database file */
1015 g.zLocalDbName = mprintf("%s", zPwd);
1016 zPwd[n] = 0;
1017 while( n>0 && zPwd[n-1]=='/' ){
1018 n--;
1019 zPwd[n] = 0;
1020 }
@@ -1117,13 +1156,13 @@
1156
1157 /*
1158 ** Return TRUE if the schema is out-of-date
1159 */
1160 int db_schema_is_outofdate(void){
1161 if( g.zAuxSchema==0 ) g.zAuxSchema = db_get("aux-schema","");
1162 return strcmp(g.zAuxSchema,AUX_SCHEMA_MIN)<0
1163 || strcmp(g.zAuxSchema,AUX_SCHEMA_MAX)>0;
1164 }
1165
1166 /*
1167 ** Return true if the database is writeable
1168 */
@@ -1138,14 +1177,14 @@
1177 void db_verify_schema(void){
1178 if( db_schema_is_outofdate() ){
1179 #ifdef FOSSIL_ENABLE_JSON
1180 g.json.resultCode = FSL_JSON_E_DB_NEEDS_REBUILD;
1181 #endif
1182 fossil_warning("incorrect repository schema version: "
1183 "current repository schema version is \"%s\" "
1184 "but need versions between \"%s\" and \"%s\".",
1185 g.zAuxSchema, AUX_SCHEMA_MIN, AUX_SCHEMA_MAX);
1186 fossil_fatal("run \"fossil rebuild\" to fix this problem");
1187 }
1188 }
1189
1190
@@ -1393,11 +1432,11 @@
1432 char *zDate;
1433 Blob hash;
1434 Blob manifest;
1435
1436 db_set("content-schema", CONTENT_SCHEMA, 0);
1437 db_set("aux-schema", AUX_SCHEMA_MAX, 0);
1438 db_set("rebuilt", get_version(), 0);
1439 if( makeServerCodes ){
1440 db_setup_server_and_project_codes(0);
1441 }
1442 if( !db_is_global("autosync") ) db_set_int("autosync", 1, 0);
1443
1444 DDED src/foci.c
+12
--- a/src/foci.c
+++ b/src/foci.c
@@ -0,0 +1,12 @@
1
+//* The function finds the BLOB.RID value
2
+** corresponding to the 'trunk' tag. Then the
3
+** decodes the manifest defined by that BLOB and returns all files described
4
+** by that manifest. / /an SQLite virtual tabCREATE VIRTUAL TABLE temp.focipCur->iFile = 0;
5
+pCuur->pMan, 0); Then the
6
+** decodes//* The function finds ttion finds the BL//* Of CheckI rem
7
+ sqlite3_context *ctx, int iFile;Index of cfileLOB.RID value
8
+** corresponding to the 'trunk' tag. Then the
9
+** decodes the manifest defined by that BLOB and returns all files described
10
+** b//* The funcMan->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Table *pTab = (FociTable *)pVTab;int rc;
11
+
12
+
--- a/src/foci.c
+++ b/src/foci.c
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
--- a/src/foci.c
+++ b/src/foci.c
@@ -0,0 +1,12 @@
1 //* The function finds the BLOB.RID value
2 ** corresponding to the 'trunk' tag. Then the
3 ** decodes the manifest defined by that BLOB and returns all files described
4 ** by that manifest. / /an SQLite virtual tabCREATE VIRTUAL TABLE temp.focipCur->iFile = 0;
5 pCuur->pMan, 0); Then the
6 ** decodes//* The function finds ttion finds the BL//* Of CheckI rem
7 sqlite3_context *ctx, int iFile;Index of cfileLOB.RID value
8 ** corresponding to the 'trunk' tag. Then the
9 ** decodes the manifest defined by that BLOB and returns all files described
10 ** b//* The funcMan->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Man->aFile[pCsr->iFile].Table *pTab = (FociTable *)pVTab;int rc;
11
12
+3 -1
--- src/main.c
+++ src/main.c
@@ -125,16 +125,18 @@
125125
const char *zErrlog; /* Log errors to this file, if not NULL */
126126
int isConst; /* True if the output is unchanging & cacheable */
127127
const char *zVfsName; /* The VFS to use for database connections */
128128
sqlite3 *db; /* The connection to the databases */
129129
sqlite3 *dbConfig; /* Separate connection for global_config table */
130
+ char *zAuxSchema; /* Main repository aux-schema */
130131
int useAttach; /* True if global_config is attached to repository */
131132
const char *zConfigDbName;/* Path of the config database. NULL if not open */
132133
sqlite3_int64 now; /* Seconds since 1970 */
133134
int repositoryOpen; /* True if the main repository database is open */
134135
char *zRepositoryOption; /* Most recent cached repository option value */
135136
char *zRepositoryName; /* Name of the repository database */
137
+ char *zLocalDbName; /* Name of the local database */
136138
const char *zMainDbType;/* "configdb", "localdb", or "repository" */
137139
const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
138140
int localOpen; /* True if the local database is open */
139141
char *zLocalRoot; /* The directory holding the local database */
140142
int minPrefix; /* Number of digits needed for a distinct UUID */
@@ -969,11 +971,11 @@
969971
const char *zRc;
970972
#endif
971973
fossil_print("Compiled on %s %s using %s (%d-bit)\n",
972974
__DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
973975
fossil_print("SQLite %s %.30s\n", sqlite3_libversion(), sqlite3_sourceid());
974
- fossil_print("Schema version %s\n", AUX_SCHEMA);
976
+ fossil_print("Schema version %s\n", AUX_SCHEMA_MAX);
975977
#if defined(FOSSIL_ENABLE_MINIZ)
976978
fossil_print("miniz %s, loaded %s\n", MZ_VERSION, mz_version());
977979
#else
978980
fossil_print("zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
979981
#endif
980982
--- src/main.c
+++ src/main.c
@@ -125,16 +125,18 @@
125 const char *zErrlog; /* Log errors to this file, if not NULL */
126 int isConst; /* True if the output is unchanging & cacheable */
127 const char *zVfsName; /* The VFS to use for database connections */
128 sqlite3 *db; /* The connection to the databases */
129 sqlite3 *dbConfig; /* Separate connection for global_config table */
 
130 int useAttach; /* True if global_config is attached to repository */
131 const char *zConfigDbName;/* Path of the config database. NULL if not open */
132 sqlite3_int64 now; /* Seconds since 1970 */
133 int repositoryOpen; /* True if the main repository database is open */
134 char *zRepositoryOption; /* Most recent cached repository option value */
135 char *zRepositoryName; /* Name of the repository database */
 
136 const char *zMainDbType;/* "configdb", "localdb", or "repository" */
137 const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
138 int localOpen; /* True if the local database is open */
139 char *zLocalRoot; /* The directory holding the local database */
140 int minPrefix; /* Number of digits needed for a distinct UUID */
@@ -969,11 +971,11 @@
969 const char *zRc;
970 #endif
971 fossil_print("Compiled on %s %s using %s (%d-bit)\n",
972 __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
973 fossil_print("SQLite %s %.30s\n", sqlite3_libversion(), sqlite3_sourceid());
974 fossil_print("Schema version %s\n", AUX_SCHEMA);
975 #if defined(FOSSIL_ENABLE_MINIZ)
976 fossil_print("miniz %s, loaded %s\n", MZ_VERSION, mz_version());
977 #else
978 fossil_print("zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
979 #endif
980
--- src/main.c
+++ src/main.c
@@ -125,16 +125,18 @@
125 const char *zErrlog; /* Log errors to this file, if not NULL */
126 int isConst; /* True if the output is unchanging & cacheable */
127 const char *zVfsName; /* The VFS to use for database connections */
128 sqlite3 *db; /* The connection to the databases */
129 sqlite3 *dbConfig; /* Separate connection for global_config table */
130 char *zAuxSchema; /* Main repository aux-schema */
131 int useAttach; /* True if global_config is attached to repository */
132 const char *zConfigDbName;/* Path of the config database. NULL if not open */
133 sqlite3_int64 now; /* Seconds since 1970 */
134 int repositoryOpen; /* True if the main repository database is open */
135 char *zRepositoryOption; /* Most recent cached repository option value */
136 char *zRepositoryName; /* Name of the repository database */
137 char *zLocalDbName; /* Name of the local database */
138 const char *zMainDbType;/* "configdb", "localdb", or "repository" */
139 const char *zConfigDbType; /* "configdb", "localdb", or "repository" */
140 int localOpen; /* True if the local database is open */
141 char *zLocalRoot; /* The directory holding the local database */
142 int minPrefix; /* Number of digits needed for a distinct UUID */
@@ -969,11 +971,11 @@
971 const char *zRc;
972 #endif
973 fossil_print("Compiled on %s %s using %s (%d-bit)\n",
974 __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8);
975 fossil_print("SQLite %s %.30s\n", sqlite3_libversion(), sqlite3_sourceid());
976 fossil_print("Schema version %s\n", AUX_SCHEMA_MAX);
977 #if defined(FOSSIL_ENABLE_MINIZ)
978 fossil_print("miniz %s, loaded %s\n", MZ_VERSION, mz_version());
979 #else
980 fossil_print("zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion());
981 #endif
982
+13 -1
--- src/main.mk
+++ src/main.mk
@@ -8,11 +8,11 @@
88
# to regenerate this file.
99
#
1010
# This file is included by primary Makefile.
1111
#
1212
13
-XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR) -I$(OBJDIR)
13
+XTCC = $(TCC) -I. -I$(SRCDIR) -I$(OBJDIR) $(TCCFLAGS) $(CFLAGS)
1414
1515
1616
SRC = \
1717
$(SRCDIR)/add.c \
1818
$(SRCDIR)/allrepo.c \
@@ -43,10 +43,11 @@
4343
$(SRCDIR)/encode.c \
4444
$(SRCDIR)/event.c \
4545
$(SRCDIR)/export.c \
4646
$(SRCDIR)/file.c \
4747
$(SRCDIR)/finfo.c \
48
+ $(SRCDIR)/foci.c \
4849
$(SRCDIR)/fusefs.c \
4950
$(SRCDIR)/glob.c \
5051
$(SRCDIR)/graph.c \
5152
$(SRCDIR)/gzip.c \
5253
$(SRCDIR)/http.c \
@@ -160,10 +161,11 @@
160161
$(OBJDIR)/encode_.c \
161162
$(OBJDIR)/event_.c \
162163
$(OBJDIR)/export_.c \
163164
$(OBJDIR)/file_.c \
164165
$(OBJDIR)/finfo_.c \
166
+ $(OBJDIR)/foci_.c \
165167
$(OBJDIR)/fusefs_.c \
166168
$(OBJDIR)/glob_.c \
167169
$(OBJDIR)/graph_.c \
168170
$(OBJDIR)/gzip_.c \
169171
$(OBJDIR)/http_.c \
@@ -274,10 +276,11 @@
274276
$(OBJDIR)/encode.o \
275277
$(OBJDIR)/event.o \
276278
$(OBJDIR)/export.o \
277279
$(OBJDIR)/file.o \
278280
$(OBJDIR)/finfo.o \
281
+ $(OBJDIR)/foci.o \
279282
$(OBJDIR)/fusefs.o \
280283
$(OBJDIR)/glob.o \
281284
$(OBJDIR)/graph.o \
282285
$(OBJDIR)/gzip.o \
283286
$(OBJDIR)/http.o \
@@ -497,10 +500,11 @@
497500
$(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
498501
$(OBJDIR)/event_.c:$(OBJDIR)/event.h \
499502
$(OBJDIR)/export_.c:$(OBJDIR)/export.h \
500503
$(OBJDIR)/file_.c:$(OBJDIR)/file.h \
501504
$(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
505
+ $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
502506
$(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
503507
$(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
504508
$(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
505509
$(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
506510
$(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -832,10 +836,18 @@
832836
833837
$(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
834838
$(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
835839
836840
$(OBJDIR)/finfo.h: $(OBJDIR)/headers
841
+
842
+$(OBJDIR)/foci_.c: $(SRCDIR)/foci.c $(OBJDIR)/translate
843
+ $(OBJDIR)/translate $(SRCDIR)/foci.c >$@
844
+
845
+$(OBJDIR)/foci.o: $(OBJDIR)/foci_.c $(OBJDIR)/foci.h $(SRCDIR)/config.h
846
+ $(XTCC) -o $(OBJDIR)/foci.o -c $(OBJDIR)/foci_.c
847
+
848
+$(OBJDIR)/foci.h: $(OBJDIR)/headers
837849
838850
$(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(OBJDIR)/translate
839851
$(OBJDIR)/translate $(SRCDIR)/fusefs.c >$@
840852
841853
$(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
842854
--- src/main.mk
+++ src/main.mk
@@ -8,11 +8,11 @@
8 # to regenerate this file.
9 #
10 # This file is included by primary Makefile.
11 #
12
13 XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR) -I$(OBJDIR)
14
15
16 SRC = \
17 $(SRCDIR)/add.c \
18 $(SRCDIR)/allrepo.c \
@@ -43,10 +43,11 @@
43 $(SRCDIR)/encode.c \
44 $(SRCDIR)/event.c \
45 $(SRCDIR)/export.c \
46 $(SRCDIR)/file.c \
47 $(SRCDIR)/finfo.c \
 
48 $(SRCDIR)/fusefs.c \
49 $(SRCDIR)/glob.c \
50 $(SRCDIR)/graph.c \
51 $(SRCDIR)/gzip.c \
52 $(SRCDIR)/http.c \
@@ -160,10 +161,11 @@
160 $(OBJDIR)/encode_.c \
161 $(OBJDIR)/event_.c \
162 $(OBJDIR)/export_.c \
163 $(OBJDIR)/file_.c \
164 $(OBJDIR)/finfo_.c \
 
165 $(OBJDIR)/fusefs_.c \
166 $(OBJDIR)/glob_.c \
167 $(OBJDIR)/graph_.c \
168 $(OBJDIR)/gzip_.c \
169 $(OBJDIR)/http_.c \
@@ -274,10 +276,11 @@
274 $(OBJDIR)/encode.o \
275 $(OBJDIR)/event.o \
276 $(OBJDIR)/export.o \
277 $(OBJDIR)/file.o \
278 $(OBJDIR)/finfo.o \
 
279 $(OBJDIR)/fusefs.o \
280 $(OBJDIR)/glob.o \
281 $(OBJDIR)/graph.o \
282 $(OBJDIR)/gzip.o \
283 $(OBJDIR)/http.o \
@@ -497,10 +500,11 @@
497 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
498 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
499 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
500 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
501 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
 
502 $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
503 $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
504 $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
505 $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
506 $(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -832,10 +836,18 @@
832
833 $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
834 $(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
835
836 $(OBJDIR)/finfo.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
837
838 $(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(OBJDIR)/translate
839 $(OBJDIR)/translate $(SRCDIR)/fusefs.c >$@
840
841 $(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
842
--- src/main.mk
+++ src/main.mk
@@ -8,11 +8,11 @@
8 # to regenerate this file.
9 #
10 # This file is included by primary Makefile.
11 #
12
13 XTCC = $(TCC) -I. -I$(SRCDIR) -I$(OBJDIR) $(TCCFLAGS) $(CFLAGS)
14
15
16 SRC = \
17 $(SRCDIR)/add.c \
18 $(SRCDIR)/allrepo.c \
@@ -43,10 +43,11 @@
43 $(SRCDIR)/encode.c \
44 $(SRCDIR)/event.c \
45 $(SRCDIR)/export.c \
46 $(SRCDIR)/file.c \
47 $(SRCDIR)/finfo.c \
48 $(SRCDIR)/foci.c \
49 $(SRCDIR)/fusefs.c \
50 $(SRCDIR)/glob.c \
51 $(SRCDIR)/graph.c \
52 $(SRCDIR)/gzip.c \
53 $(SRCDIR)/http.c \
@@ -160,10 +161,11 @@
161 $(OBJDIR)/encode_.c \
162 $(OBJDIR)/event_.c \
163 $(OBJDIR)/export_.c \
164 $(OBJDIR)/file_.c \
165 $(OBJDIR)/finfo_.c \
166 $(OBJDIR)/foci_.c \
167 $(OBJDIR)/fusefs_.c \
168 $(OBJDIR)/glob_.c \
169 $(OBJDIR)/graph_.c \
170 $(OBJDIR)/gzip_.c \
171 $(OBJDIR)/http_.c \
@@ -274,10 +276,11 @@
276 $(OBJDIR)/encode.o \
277 $(OBJDIR)/event.o \
278 $(OBJDIR)/export.o \
279 $(OBJDIR)/file.o \
280 $(OBJDIR)/finfo.o \
281 $(OBJDIR)/foci.o \
282 $(OBJDIR)/fusefs.o \
283 $(OBJDIR)/glob.o \
284 $(OBJDIR)/graph.o \
285 $(OBJDIR)/gzip.o \
286 $(OBJDIR)/http.o \
@@ -497,10 +500,11 @@
500 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
501 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
502 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
503 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
504 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
505 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
506 $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
507 $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
508 $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
509 $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
510 $(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -832,10 +836,18 @@
836
837 $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
838 $(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
839
840 $(OBJDIR)/finfo.h: $(OBJDIR)/headers
841
842 $(OBJDIR)/foci_.c: $(SRCDIR)/foci.c $(OBJDIR)/translate
843 $(OBJDIR)/translate $(SRCDIR)/foci.c >$@
844
845 $(OBJDIR)/foci.o: $(OBJDIR)/foci_.c $(OBJDIR)/foci.h $(SRCDIR)/config.h
846 $(XTCC) -o $(OBJDIR)/foci.o -c $(OBJDIR)/foci_.c
847
848 $(OBJDIR)/foci.h: $(OBJDIR)/headers
849
850 $(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(OBJDIR)/translate
851 $(OBJDIR)/translate $(SRCDIR)/fusefs.c >$@
852
853 $(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
854
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -50,10 +50,11 @@
5050
encode
5151
event
5252
export
5353
file
5454
finfo
55
+ foci
5556
fusefs
5657
glob
5758
graph
5859
gzip
5960
http
@@ -220,11 +221,11 @@
220221
# to regenerate this file.
221222
#
222223
# This file is included by primary Makefile.
223224
#
224225
225
-XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR) -I$(OBJDIR)
226
+XTCC = $(TCC) -I. -I$(SRCDIR) -I$(OBJDIR) $(TCCFLAGS) $(CFLAGS)
226227
227228
}
228229
writeln -nonewline "SRC ="
229230
foreach s [lsort $src] {
230231
writeln -nonewline " \\\n \$(SRCDIR)/$s.c"
231232
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -50,10 +50,11 @@
50 encode
51 event
52 export
53 file
54 finfo
 
55 fusefs
56 glob
57 graph
58 gzip
59 http
@@ -220,11 +221,11 @@
220 # to regenerate this file.
221 #
222 # This file is included by primary Makefile.
223 #
224
225 XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR) -I$(OBJDIR)
226
227 }
228 writeln -nonewline "SRC ="
229 foreach s [lsort $src] {
230 writeln -nonewline " \\\n \$(SRCDIR)/$s.c"
231
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -50,10 +50,11 @@
50 encode
51 event
52 export
53 file
54 finfo
55 foci
56 fusefs
57 glob
58 graph
59 gzip
60 http
@@ -220,11 +221,11 @@
221 # to regenerate this file.
222 #
223 # This file is included by primary Makefile.
224 #
225
226 XTCC = $(TCC) -I. -I$(SRCDIR) -I$(OBJDIR) $(TCCFLAGS) $(CFLAGS)
227
228 }
229 writeln -nonewline "SRC ="
230 foreach s [lsort $src] {
231 writeln -nonewline " \\\n \$(SRCDIR)/$s.c"
232
+22 -2
--- src/manifest.c
+++ src/manifest.c
@@ -1774,14 +1774,34 @@
17741774
zScript = xfer_commit_code();
17751775
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
17761776
}
17771777
if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
17781778
char *zCom;
1779
+ char zBaseId[30];
1780
+ if( p->zBaseline ){
1781
+ sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d",
1782
+ uuid_to_rid(p->zBaseline,1));
1783
+ }else{
1784
+ sqlite3_snprintf(sizeof(zBaseId), zBaseId, "NULL");
1785
+ }
1786
+ (void)db_schema_is_outofdate(); /* Make sure g.zAuxSchema is initialized */
17791787
for(i=0; i<p->nParent; i++){
17801788
int pid = uuid_to_rid(p->azParent[i], 1);
1781
- db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
1782
- "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, p->rDate);
1789
+ if( strcmp(g.zAuxSchema,"2014-11-24 20:35")>=0 ){
1790
+ /* Support for PLINK.BASEID added on 2014-11-24 */
1791
+ db_multi_exec(
1792
+ "INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime, baseid)"
1793
+ "VALUES(%d, %d, %d, %.17g, %s)",
1794
+ pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/);
1795
+ }else{
1796
+ /* Continue to work with older schema to avoid an unnecessary
1797
+ ** rebuild */
1798
+ db_multi_exec(
1799
+ "INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
1800
+ "VALUES(%d, %d, %d, %.17g)",
1801
+ pid, rid, i==0, p->rDate);
1802
+ }
17831803
if( i==0 ){
17841804
add_mlink(pid, 0, rid, p);
17851805
parentid = pid;
17861806
}
17871807
}
17881808
--- src/manifest.c
+++ src/manifest.c
@@ -1774,14 +1774,34 @@
1774 zScript = xfer_commit_code();
1775 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1776 }
1777 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
1778 char *zCom;
 
 
 
 
 
 
 
 
1779 for(i=0; i<p->nParent; i++){
1780 int pid = uuid_to_rid(p->azParent[i], 1);
1781 db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
1782 "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, p->rDate);
 
 
 
 
 
 
 
 
 
 
 
 
1783 if( i==0 ){
1784 add_mlink(pid, 0, rid, p);
1785 parentid = pid;
1786 }
1787 }
1788
--- src/manifest.c
+++ src/manifest.c
@@ -1774,14 +1774,34 @@
1774 zScript = xfer_commit_code();
1775 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1776 }
1777 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
1778 char *zCom;
1779 char zBaseId[30];
1780 if( p->zBaseline ){
1781 sqlite3_snprintf(sizeof(zBaseId), zBaseId, "%d",
1782 uuid_to_rid(p->zBaseline,1));
1783 }else{
1784 sqlite3_snprintf(sizeof(zBaseId), zBaseId, "NULL");
1785 }
1786 (void)db_schema_is_outofdate(); /* Make sure g.zAuxSchema is initialized */
1787 for(i=0; i<p->nParent; i++){
1788 int pid = uuid_to_rid(p->azParent[i], 1);
1789 if( strcmp(g.zAuxSchema,"2014-11-24 20:35")>=0 ){
1790 /* Support for PLINK.BASEID added on 2014-11-24 */
1791 db_multi_exec(
1792 "INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime, baseid)"
1793 "VALUES(%d, %d, %d, %.17g, %s)",
1794 pid, rid, i==0, p->rDate, zBaseId/*safe-for-%s*/);
1795 }else{
1796 /* Continue to work with older schema to avoid an unnecessary
1797 ** rebuild */
1798 db_multi_exec(
1799 "INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
1800 "VALUES(%d, %d, %d, %.17g)",
1801 pid, rid, i==0, p->rDate);
1802 }
1803 if( i==0 ){
1804 add_mlink(pid, 0, rid, p);
1805 parentid = pid;
1806 }
1807 }
1808
+1 -1
--- src/rebuild.c
+++ src/rebuild.c
@@ -591,11 +591,11 @@
591591
reconstruct_private_table();
592592
db_multi_exec(
593593
"REPLACE INTO config(name,value,mtime) VALUES('content-schema',%Q,now());"
594594
"REPLACE INTO config(name,value,mtime) VALUES('aux-schema',%Q,now());"
595595
"REPLACE INTO config(name,value,mtime) VALUES('rebuilt',%Q,now());",
596
- CONTENT_SCHEMA, AUX_SCHEMA, get_version()
596
+ CONTENT_SCHEMA, AUX_SCHEMA_MAX, get_version()
597597
);
598598
if( errCnt && !forceFlag ){
599599
fossil_print(
600600
"%d errors. Rolling back changes. Use --force to force a commit.\n",
601601
errCnt
602602
--- src/rebuild.c
+++ src/rebuild.c
@@ -591,11 +591,11 @@
591 reconstruct_private_table();
592 db_multi_exec(
593 "REPLACE INTO config(name,value,mtime) VALUES('content-schema',%Q,now());"
594 "REPLACE INTO config(name,value,mtime) VALUES('aux-schema',%Q,now());"
595 "REPLACE INTO config(name,value,mtime) VALUES('rebuilt',%Q,now());",
596 CONTENT_SCHEMA, AUX_SCHEMA, get_version()
597 );
598 if( errCnt && !forceFlag ){
599 fossil_print(
600 "%d errors. Rolling back changes. Use --force to force a commit.\n",
601 errCnt
602
--- src/rebuild.c
+++ src/rebuild.c
@@ -591,11 +591,11 @@
591 reconstruct_private_table();
592 db_multi_exec(
593 "REPLACE INTO config(name,value,mtime) VALUES('content-schema',%Q,now());"
594 "REPLACE INTO config(name,value,mtime) VALUES('aux-schema',%Q,now());"
595 "REPLACE INTO config(name,value,mtime) VALUES('rebuilt',%Q,now());",
596 CONTENT_SCHEMA, AUX_SCHEMA_MAX, get_version()
597 );
598 if( errCnt && !forceFlag ){
599 fossil_print(
600 "%d errors. Rolling back changes. Use --force to force a commit.\n",
601 errCnt
602
+3 -1
--- src/schema.c
+++ src/schema.c
@@ -44,11 +44,12 @@
4444
** a date) which can change frequently. When the content schema changes,
4545
** we have to execute special procedures to update the schema. When
4646
** the aux schema changes, all we need to do is rebuild the database.
4747
*/
4848
#define CONTENT_SCHEMA "2"
49
-#define AUX_SCHEMA "2011-04-25 19:50"
49
+#define AUX_SCHEMA_MIN "2011-04-25 19:50"
50
+#define AUX_SCHEMA_MAX "2014-11-24 20:35"
5051
5152
#endif /* INTERFACE */
5253
5354
5455
/*
@@ -250,10 +251,11 @@
250251
@ CREATE TABLE plink(
251252
@ pid INTEGER REFERENCES blob, -- Parent manifest
252253
@ cid INTEGER REFERENCES blob, -- Child manifest
253254
@ isprim BOOLEAN, -- pid is the primary parent of cid
254255
@ mtime DATETIME, -- the date/time stamp on cid. Julian day.
256
+@ baseid INTEGER REFERENCES blob, -- Baseline if child is a delta manifest
255257
@ UNIQUE(pid, cid)
256258
@ );
257259
@ CREATE INDEX plink_i2 ON plink(cid,pid);
258260
@
259261
@ -- A "leaf" checkin is a checkin that has no children in the same
260262
--- src/schema.c
+++ src/schema.c
@@ -44,11 +44,12 @@
44 ** a date) which can change frequently. When the content schema changes,
45 ** we have to execute special procedures to update the schema. When
46 ** the aux schema changes, all we need to do is rebuild the database.
47 */
48 #define CONTENT_SCHEMA "2"
49 #define AUX_SCHEMA "2011-04-25 19:50"
 
50
51 #endif /* INTERFACE */
52
53
54 /*
@@ -250,10 +251,11 @@
250 @ CREATE TABLE plink(
251 @ pid INTEGER REFERENCES blob, -- Parent manifest
252 @ cid INTEGER REFERENCES blob, -- Child manifest
253 @ isprim BOOLEAN, -- pid is the primary parent of cid
254 @ mtime DATETIME, -- the date/time stamp on cid. Julian day.
 
255 @ UNIQUE(pid, cid)
256 @ );
257 @ CREATE INDEX plink_i2 ON plink(cid,pid);
258 @
259 @ -- A "leaf" checkin is a checkin that has no children in the same
260
--- src/schema.c
+++ src/schema.c
@@ -44,11 +44,12 @@
44 ** a date) which can change frequently. When the content schema changes,
45 ** we have to execute special procedures to update the schema. When
46 ** the aux schema changes, all we need to do is rebuild the database.
47 */
48 #define CONTENT_SCHEMA "2"
49 #define AUX_SCHEMA_MIN "2011-04-25 19:50"
50 #define AUX_SCHEMA_MAX "2014-11-24 20:35"
51
52 #endif /* INTERFACE */
53
54
55 /*
@@ -250,10 +251,11 @@
251 @ CREATE TABLE plink(
252 @ pid INTEGER REFERENCES blob, -- Parent manifest
253 @ cid INTEGER REFERENCES blob, -- Child manifest
254 @ isprim BOOLEAN, -- pid is the primary parent of cid
255 @ mtime DATETIME, -- the date/time stamp on cid. Julian day.
256 @ baseid INTEGER REFERENCES blob, -- Baseline if child is a delta manifest
257 @ UNIQUE(pid, cid)
258 @ );
259 @ CREATE INDEX plink_i2 ON plink(cid,pid);
260 @
261 @ -- A "leaf" checkin is a checkin that has no children in the same
262
+53 -32
--- src/shell.c
+++ src/shell.c
@@ -4036,14 +4036,16 @@
40364036
40374037
int main(int argc, char **argv){
40384038
char *zErrMsg = 0;
40394039
ShellState data;
40404040
const char *zInitFile = 0;
4041
- char *zFirstCmd = 0;
40424041
int i;
40434042
int rc = 0;
40444043
int warnInmemoryDb = 0;
4044
+ int readStdin = 1;
4045
+ int nCmd = 0;
4046
+ char **azCmd = 0;
40454047
40464048
#if USE_SYSTEM_SQLITE+0!=1
40474049
if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
40484050
fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
40494051
sqlite3_sourceid(), SQLITE_SOURCE_ID);
@@ -4058,10 +4060,22 @@
40584060
** else is done.
40594061
*/
40604062
#ifdef SIGINT
40614063
signal(SIGINT, interrupt_handler);
40624064
#endif
4065
+
4066
+#ifdef SQLITE_SHELL_DBNAME_PROC
4067
+ {
4068
+ /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name
4069
+ ** of a C-function that will provide the name of the database file. Use
4070
+ ** this compile-time option to embed this shell program in larger
4071
+ ** applications. */
4072
+ extern void SQLITE_SHELL_DBNAME_PROC(const char**);
4073
+ SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
4074
+ warnInmemoryDb = 0;
4075
+ }
4076
+#endif
40634077
40644078
/* Do an initial pass through the command-line argument to locate
40654079
** the name of the database file, the name of the initialization file,
40664080
** the size of the alternative malloc heap,
40674081
** and the first command to execute.
@@ -4070,19 +4084,22 @@
40704084
char *z;
40714085
z = argv[i];
40724086
if( z[0]!='-' ){
40734087
if( data.zDbFilename==0 ){
40744088
data.zDbFilename = z;
4075
- continue;
4076
- }
4077
- if( zFirstCmd==0 ){
4078
- zFirstCmd = z;
4079
- continue;
4080
- }
4081
- fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
4082
- fprintf(stderr,"Use -help for a list of options.\n");
4083
- return 1;
4089
+ }else{
4090
+ /* Excesss arguments are interpreted as SQL (or dot-commands) and
4091
+ ** mean that nothing is read from stdin */
4092
+ readStdin = 0;
4093
+ nCmd++;
4094
+ azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd);
4095
+ if( azCmd==0 ){
4096
+ fprintf(stderr, "out of memory\n");
4097
+ exit(1);
4098
+ }
4099
+ azCmd[nCmd-1] = z;
4100
+ }
40844101
}
40854102
if( z[1]=='-' ) z++;
40864103
if( strcmp(z,"-separator")==0
40874104
|| strcmp(z,"-nullvalue")==0
40884105
|| strcmp(z,"-newline")==0
@@ -4169,15 +4186,10 @@
41694186
warnInmemoryDb = argc==1;
41704187
#else
41714188
fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
41724189
return 1;
41734190
#endif
4174
-#ifdef SQLITE_SHELL_DBNAME_PROC
4175
- { extern void SQLITE_SHELL_DBNAME_PROC(const char**);
4176
- SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
4177
- warnInmemoryDb = 0; }
4178
-#endif
41794191
}
41804192
data.out = stdout;
41814193
41824194
/* Go ahead and open the database file if it already exists. If the
41834195
** file does not exist, delay opening it. This prevents empty database
@@ -4270,10 +4282,14 @@
42704282
i++;
42714283
#endif
42724284
}else if( strcmp(z,"-help")==0 ){
42734285
usage(1);
42744286
}else if( strcmp(z,"-cmd")==0 ){
4287
+ /* Run commands that follow -cmd first and separately from commands
4288
+ ** that simply appear on the command-line. This seems goofy. It would
4289
+ ** be better if all commands ran in the order that they appear. But
4290
+ ** we retain the goofy behavior for historical compatibility. */
42754291
if( i==argc-1 ) break;
42764292
z = cmdline_option_value(argc,argv,++i);
42774293
if( z[0]=='.' ){
42784294
rc = do_meta_command(z, &data);
42794295
if( rc && bail_on_error ) return rc==2 ? 0 : rc;
@@ -4293,27 +4309,32 @@
42934309
fprintf(stderr,"Use -help for a list of options.\n");
42944310
return 1;
42954311
}
42964312
}
42974313
4298
- if( zFirstCmd ){
4299
- /* Run just the command that follows the database name
4300
- */
4301
- if( zFirstCmd[0]=='.' ){
4302
- rc = do_meta_command(zFirstCmd, &data);
4303
- if( rc==2 ) rc = 0;
4304
- }else{
4305
- open_db(&data, 0);
4306
- rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
4307
- if( zErrMsg!=0 ){
4308
- fprintf(stderr,"Error: %s\n", zErrMsg);
4309
- return rc!=0 ? rc : 1;
4310
- }else if( rc!=0 ){
4311
- fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
4312
- return rc;
4313
- }
4314
- }
4314
+ if( !readStdin ){
4315
+ /* Run all arguments that do not begin with '-' as if they were separate
4316
+ ** command-line inputs, except for the argToSkip argument which contains
4317
+ ** the database filename.
4318
+ */
4319
+ for(i=0; i<nCmd; i++){
4320
+ if( azCmd[i][0]=='.' ){
4321
+ rc = do_meta_command(azCmd[i], &data);
4322
+ if( rc ) return rc==2 ? 0 : rc;
4323
+ }else{
4324
+ open_db(&data, 0);
4325
+ rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg);
4326
+ if( zErrMsg!=0 ){
4327
+ fprintf(stderr,"Error: %s\n", zErrMsg);
4328
+ return rc!=0 ? rc : 1;
4329
+ }else if( rc!=0 ){
4330
+ fprintf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]);
4331
+ return rc;
4332
+ }
4333
+ }
4334
+ }
4335
+ free(azCmd);
43154336
}else{
43164337
/* Run commands received from standard input
43174338
*/
43184339
if( stdin_is_interactive ){
43194340
char *zHome;
43204341
--- src/shell.c
+++ src/shell.c
@@ -4036,14 +4036,16 @@
4036
4037 int main(int argc, char **argv){
4038 char *zErrMsg = 0;
4039 ShellState data;
4040 const char *zInitFile = 0;
4041 char *zFirstCmd = 0;
4042 int i;
4043 int rc = 0;
4044 int warnInmemoryDb = 0;
 
 
 
4045
4046 #if USE_SYSTEM_SQLITE+0!=1
4047 if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
4048 fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
4049 sqlite3_sourceid(), SQLITE_SOURCE_ID);
@@ -4058,10 +4060,22 @@
4058 ** else is done.
4059 */
4060 #ifdef SIGINT
4061 signal(SIGINT, interrupt_handler);
4062 #endif
 
 
 
 
 
 
 
 
 
 
 
 
4063
4064 /* Do an initial pass through the command-line argument to locate
4065 ** the name of the database file, the name of the initialization file,
4066 ** the size of the alternative malloc heap,
4067 ** and the first command to execute.
@@ -4070,19 +4084,22 @@
4070 char *z;
4071 z = argv[i];
4072 if( z[0]!='-' ){
4073 if( data.zDbFilename==0 ){
4074 data.zDbFilename = z;
4075 continue;
4076 }
4077 if( zFirstCmd==0 ){
4078 zFirstCmd = z;
4079 continue;
4080 }
4081 fprintf(stderr,"%s: Error: too many options: \"%s\"\n", Argv0, argv[i]);
4082 fprintf(stderr,"Use -help for a list of options.\n");
4083 return 1;
 
 
 
4084 }
4085 if( z[1]=='-' ) z++;
4086 if( strcmp(z,"-separator")==0
4087 || strcmp(z,"-nullvalue")==0
4088 || strcmp(z,"-newline")==0
@@ -4169,15 +4186,10 @@
4169 warnInmemoryDb = argc==1;
4170 #else
4171 fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
4172 return 1;
4173 #endif
4174 #ifdef SQLITE_SHELL_DBNAME_PROC
4175 { extern void SQLITE_SHELL_DBNAME_PROC(const char**);
4176 SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
4177 warnInmemoryDb = 0; }
4178 #endif
4179 }
4180 data.out = stdout;
4181
4182 /* Go ahead and open the database file if it already exists. If the
4183 ** file does not exist, delay opening it. This prevents empty database
@@ -4270,10 +4282,14 @@
4270 i++;
4271 #endif
4272 }else if( strcmp(z,"-help")==0 ){
4273 usage(1);
4274 }else if( strcmp(z,"-cmd")==0 ){
 
 
 
 
4275 if( i==argc-1 ) break;
4276 z = cmdline_option_value(argc,argv,++i);
4277 if( z[0]=='.' ){
4278 rc = do_meta_command(z, &data);
4279 if( rc && bail_on_error ) return rc==2 ? 0 : rc;
@@ -4293,27 +4309,32 @@
4293 fprintf(stderr,"Use -help for a list of options.\n");
4294 return 1;
4295 }
4296 }
4297
4298 if( zFirstCmd ){
4299 /* Run just the command that follows the database name
4300 */
4301 if( zFirstCmd[0]=='.' ){
4302 rc = do_meta_command(zFirstCmd, &data);
4303 if( rc==2 ) rc = 0;
4304 }else{
4305 open_db(&data, 0);
4306 rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);
4307 if( zErrMsg!=0 ){
4308 fprintf(stderr,"Error: %s\n", zErrMsg);
4309 return rc!=0 ? rc : 1;
4310 }else if( rc!=0 ){
4311 fprintf(stderr,"Error: unable to process SQL \"%s\"\n", zFirstCmd);
4312 return rc;
4313 }
4314 }
 
 
 
 
 
4315 }else{
4316 /* Run commands received from standard input
4317 */
4318 if( stdin_is_interactive ){
4319 char *zHome;
4320
--- src/shell.c
+++ src/shell.c
@@ -4036,14 +4036,16 @@
4036
4037 int main(int argc, char **argv){
4038 char *zErrMsg = 0;
4039 ShellState data;
4040 const char *zInitFile = 0;
 
4041 int i;
4042 int rc = 0;
4043 int warnInmemoryDb = 0;
4044 int readStdin = 1;
4045 int nCmd = 0;
4046 char **azCmd = 0;
4047
4048 #if USE_SYSTEM_SQLITE+0!=1
4049 if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){
4050 fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n",
4051 sqlite3_sourceid(), SQLITE_SOURCE_ID);
@@ -4058,10 +4060,22 @@
4060 ** else is done.
4061 */
4062 #ifdef SIGINT
4063 signal(SIGINT, interrupt_handler);
4064 #endif
4065
4066 #ifdef SQLITE_SHELL_DBNAME_PROC
4067 {
4068 /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name
4069 ** of a C-function that will provide the name of the database file. Use
4070 ** this compile-time option to embed this shell program in larger
4071 ** applications. */
4072 extern void SQLITE_SHELL_DBNAME_PROC(const char**);
4073 SQLITE_SHELL_DBNAME_PROC(&data.zDbFilename);
4074 warnInmemoryDb = 0;
4075 }
4076 #endif
4077
4078 /* Do an initial pass through the command-line argument to locate
4079 ** the name of the database file, the name of the initialization file,
4080 ** the size of the alternative malloc heap,
4081 ** and the first command to execute.
@@ -4070,19 +4084,22 @@
4084 char *z;
4085 z = argv[i];
4086 if( z[0]!='-' ){
4087 if( data.zDbFilename==0 ){
4088 data.zDbFilename = z;
4089 }else{
4090 /* Excesss arguments are interpreted as SQL (or dot-commands) and
4091 ** mean that nothing is read from stdin */
4092 readStdin = 0;
4093 nCmd++;
4094 azCmd = realloc(azCmd, sizeof(azCmd[0])*nCmd);
4095 if( azCmd==0 ){
4096 fprintf(stderr, "out of memory\n");
4097 exit(1);
4098 }
4099 azCmd[nCmd-1] = z;
4100 }
4101 }
4102 if( z[1]=='-' ) z++;
4103 if( strcmp(z,"-separator")==0
4104 || strcmp(z,"-nullvalue")==0
4105 || strcmp(z,"-newline")==0
@@ -4169,15 +4186,10 @@
4186 warnInmemoryDb = argc==1;
4187 #else
4188 fprintf(stderr,"%s: Error: no database filename specified\n", Argv0);
4189 return 1;
4190 #endif
 
 
 
 
 
4191 }
4192 data.out = stdout;
4193
4194 /* Go ahead and open the database file if it already exists. If the
4195 ** file does not exist, delay opening it. This prevents empty database
@@ -4270,10 +4282,14 @@
4282 i++;
4283 #endif
4284 }else if( strcmp(z,"-help")==0 ){
4285 usage(1);
4286 }else if( strcmp(z,"-cmd")==0 ){
4287 /* Run commands that follow -cmd first and separately from commands
4288 ** that simply appear on the command-line. This seems goofy. It would
4289 ** be better if all commands ran in the order that they appear. But
4290 ** we retain the goofy behavior for historical compatibility. */
4291 if( i==argc-1 ) break;
4292 z = cmdline_option_value(argc,argv,++i);
4293 if( z[0]=='.' ){
4294 rc = do_meta_command(z, &data);
4295 if( rc && bail_on_error ) return rc==2 ? 0 : rc;
@@ -4293,27 +4309,32 @@
4309 fprintf(stderr,"Use -help for a list of options.\n");
4310 return 1;
4311 }
4312 }
4313
4314 if( !readStdin ){
4315 /* Run all arguments that do not begin with '-' as if they were separate
4316 ** command-line inputs, except for the argToSkip argument which contains
4317 ** the database filename.
4318 */
4319 for(i=0; i<nCmd; i++){
4320 if( azCmd[i][0]=='.' ){
4321 rc = do_meta_command(azCmd[i], &data);
4322 if( rc ) return rc==2 ? 0 : rc;
4323 }else{
4324 open_db(&data, 0);
4325 rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg);
4326 if( zErrMsg!=0 ){
4327 fprintf(stderr,"Error: %s\n", zErrMsg);
4328 return rc!=0 ? rc : 1;
4329 }else if( rc!=0 ){
4330 fprintf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]);
4331 return rc;
4332 }
4333 }
4334 }
4335 free(azCmd);
4336 }else{
4337 /* Run commands received from standard input
4338 */
4339 if( stdin_is_interactive ){
4340 char *zHome;
4341
+15 -5
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -117,30 +117,40 @@
117117
static int sqlcmd_autoinit(
118118
sqlite3 *db,
119119
const char **pzErrMsg,
120120
const void *notUsed
121121
){
122
+ char *zSql;
123
+ int rc = SQLITE_OK;
122124
sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0,
123125
sqlcmd_content, 0, 0);
124126
sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0,
125127
sqlcmd_compress, 0, 0);
126128
sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0,
127129
sqlcmd_decompress, 0, 0);
128130
re_add_sql_func(db);
131
+ foci_register(db);
132
+ g.zMainDbType = "repository";
129133
g.repositoryOpen = 1;
130134
g.db = db;
131
- return SQLITE_OK;
135
+ db_open_config(1);
136
+ if( g.zLocalDbName ){
137
+ zSql = sqlite3_mprintf("ATTACH %Q AS localdb;", g.zLocalDbName);
138
+ rc = sqlite3_exec(db, zSql, 0, 0, 0);
139
+ sqlite3_free(zSql);
140
+ }
141
+ return rc;
132142
}
133143
134144
/*
135145
** COMMAND: sqlite3
136146
**
137
-** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS?
147
+** Usage: %fossil sqlite3 ?SQL-COMMANDS? ?OPTIONS?
138148
**
139
-** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS.
140
-** If DATABASE is omitted, then the repository that serves the working
141
-** directory is opened.
149
+** Run the standalone sqlite3 command-line shell on the repository database
150
+** for the current checkout, or whatever repository is specified by the
151
+** -R command-line option.
142152
**
143153
** WARNING: Careless use of this command can corrupt a Fossil repository
144154
** in ways that are unrecoverable. Be sure you know what you are doing before
145155
** running any SQL commands that modifies the repository database.
146156
*/
147157
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -117,30 +117,40 @@
117 static int sqlcmd_autoinit(
118 sqlite3 *db,
119 const char **pzErrMsg,
120 const void *notUsed
121 ){
 
 
122 sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0,
123 sqlcmd_content, 0, 0);
124 sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0,
125 sqlcmd_compress, 0, 0);
126 sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0,
127 sqlcmd_decompress, 0, 0);
128 re_add_sql_func(db);
 
 
129 g.repositoryOpen = 1;
130 g.db = db;
131 return SQLITE_OK;
 
 
 
 
 
 
132 }
133
134 /*
135 ** COMMAND: sqlite3
136 **
137 ** Usage: %fossil sqlite3 ?DATABASE? ?OPTIONS?
138 **
139 ** Run the standalone sqlite3 command-line shell on DATABASE with OPTIONS.
140 ** If DATABASE is omitted, then the repository that serves the working
141 ** directory is opened.
142 **
143 ** WARNING: Careless use of this command can corrupt a Fossil repository
144 ** in ways that are unrecoverable. Be sure you know what you are doing before
145 ** running any SQL commands that modifies the repository database.
146 */
147
--- src/sqlcmd.c
+++ src/sqlcmd.c
@@ -117,30 +117,40 @@
117 static int sqlcmd_autoinit(
118 sqlite3 *db,
119 const char **pzErrMsg,
120 const void *notUsed
121 ){
122 char *zSql;
123 int rc = SQLITE_OK;
124 sqlite3_create_function(db, "content", 1, SQLITE_UTF8, 0,
125 sqlcmd_content, 0, 0);
126 sqlite3_create_function(db, "compress", 1, SQLITE_UTF8, 0,
127 sqlcmd_compress, 0, 0);
128 sqlite3_create_function(db, "decompress", 1, SQLITE_UTF8, 0,
129 sqlcmd_decompress, 0, 0);
130 re_add_sql_func(db);
131 foci_register(db);
132 g.zMainDbType = "repository";
133 g.repositoryOpen = 1;
134 g.db = db;
135 db_open_config(1);
136 if( g.zLocalDbName ){
137 zSql = sqlite3_mprintf("ATTACH %Q AS localdb;", g.zLocalDbName);
138 rc = sqlite3_exec(db, zSql, 0, 0, 0);
139 sqlite3_free(zSql);
140 }
141 return rc;
142 }
143
144 /*
145 ** COMMAND: sqlite3
146 **
147 ** Usage: %fossil sqlite3 ?SQL-COMMANDS? ?OPTIONS?
148 **
149 ** Run the standalone sqlite3 command-line shell on the repository database
150 ** for the current checkout, or whatever repository is specified by the
151 ** -R command-line option.
152 **
153 ** WARNING: Careless use of this command can corrupt a Fossil repository
154 ** in ways that are unrecoverable. Be sure you know what you are doing before
155 ** running any SQL commands that modifies the repository database.
156 */
157
+2208 -885
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
11
/******************************************************************************
22
** This file is an amalgamation of many separate C source files from SQLite
3
-** version 3.8.7.2. By combining all the individual C code files into this
3
+** version 3.8.8. By combining all the individual C code files into this
44
** single large file, the entire code can be compiled as a single translation
55
** unit. This allows many compilers to do optimizations that would not be
66
** possible if the files were compiled separately. Performance improvements
77
** of 5% or more are commonly seen when SQLite is compiled as a single
88
** translation unit.
@@ -179,11 +179,11 @@
179179
180180
181181
/*
182182
** These no-op macros are used in front of interfaces to mark those
183183
** interfaces as either deprecated or experimental. New applications
184
-** should not use deprecated interfaces - they are support for backwards
184
+** should not use deprecated interfaces - they are supported for backwards
185185
** compatibility only. Application writers should be aware that
186186
** experimental interfaces are subject to change in point releases.
187187
**
188188
** These macros used to resolve to various kinds of compiler magic that
189189
** would generate warning messages when they were used. But that
@@ -229,13 +229,13 @@
229229
**
230230
** See also: [sqlite3_libversion()],
231231
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
232232
** [sqlite_version()] and [sqlite_source_id()].
233233
*/
234
-#define SQLITE_VERSION "3.8.7.2"
235
-#define SQLITE_VERSION_NUMBER 3008007
236
-#define SQLITE_SOURCE_ID "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
234
+#define SQLITE_VERSION "3.8.8"
235
+#define SQLITE_VERSION_NUMBER 3008008
236
+#define SQLITE_SOURCE_ID "2014-11-28 13:35:03 24fa2e9832daaa5d68ee28a00c56c55f97a4da9e"
237237
238238
/*
239239
** CAPI3REF: Run-Time Library Version Numbers
240240
** KEYWORDS: sqlite3_version, sqlite3_sourceid
241241
**
@@ -1626,29 +1626,31 @@
16261626
** it is not possible to set the Serialized [threading mode] and
16271627
** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
16281628
** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
16291629
**
16301630
** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1631
-** <dd> ^(This option takes a single argument which is a pointer to an
1632
-** instance of the [sqlite3_mem_methods] structure. The argument specifies
1631
+** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
1632
+** a pointer to an instance of the [sqlite3_mem_methods] structure.
1633
+** The argument specifies
16331634
** alternative low-level memory allocation routines to be used in place of
16341635
** the memory allocation routines built into SQLite.)^ ^SQLite makes
16351636
** its own private copy of the content of the [sqlite3_mem_methods] structure
16361637
** before the [sqlite3_config()] call returns.</dd>
16371638
**
16381639
** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1639
-** <dd> ^(This option takes a single argument which is a pointer to an
1640
-** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
1640
+** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
1641
+** is a pointer to an instance of the [sqlite3_mem_methods] structure.
1642
+** The [sqlite3_mem_methods]
16411643
** structure is filled with the currently defined memory allocation routines.)^
16421644
** This option can be used to overload the default memory allocation
16431645
** routines with a wrapper that simulations memory allocation failure or
16441646
** tracks memory usage, for example. </dd>
16451647
**
16461648
** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1647
-** <dd> ^This option takes single argument of type int, interpreted as a
1648
-** boolean, which enables or disables the collection of memory allocation
1649
-** statistics. ^(When memory allocation statistics are disabled, the
1649
+** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
1650
+** interpreted as a boolean, which enables or disables the collection of
1651
+** memory allocation statistics. ^(When memory allocation statistics are disabled, the
16501652
** following SQLite interfaces become non-operational:
16511653
** <ul>
16521654
** <li> [sqlite3_memory_used()]
16531655
** <li> [sqlite3_memory_highwater()]
16541656
** <li> [sqlite3_soft_heap_limit64()]
@@ -1658,78 +1660,90 @@
16581660
** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
16591661
** allocation statistics are disabled by default.
16601662
** </dd>
16611663
**
16621664
** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1663
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
1664
-** scratch memory. There are three arguments: A pointer an 8-byte
1665
+** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
1666
+** that SQLite can use for scratch memory. ^(There are three arguments
1667
+** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
16651668
** aligned memory buffer from which the scratch allocations will be
16661669
** drawn, the size of each scratch allocation (sz),
1667
-** and the maximum number of scratch allocations (N). The sz
1668
-** argument must be a multiple of 16.
1670
+** and the maximum number of scratch allocations (N).)^
16691671
** The first argument must be a pointer to an 8-byte aligned buffer
16701672
** of at least sz*N bytes of memory.
1671
-** ^SQLite will use no more than two scratch buffers per thread. So
1672
-** N should be set to twice the expected maximum number of threads.
1673
-** ^SQLite will never require a scratch buffer that is more than 6
1674
-** times the database page size. ^If SQLite needs needs additional
1673
+** ^SQLite will not use more than one scratch buffers per thread.
1674
+** ^SQLite will never request a scratch buffer that is more than 6
1675
+** times the database page size.
1676
+** ^If SQLite needs needs additional
16751677
** scratch memory beyond what is provided by this configuration option, then
1676
-** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1678
+** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
1679
+** ^When the application provides any amount of scratch memory using
1680
+** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
1681
+** [sqlite3_malloc|heap allocations].
1682
+** This can help [Robson proof|prevent memory allocation failures] due to heap
1683
+** fragmentation in low-memory embedded systems.
1684
+** </dd>
16771685
**
16781686
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1679
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
1680
-** the database page cache with the default page cache implementation.
1687
+** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer
1688
+** that SQLite can use for the database page cache with the default page
1689
+** cache implementation.
16811690
** This configuration should not be used if an application-define page
1682
-** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
1683
-** There are three arguments to this option: A pointer to 8-byte aligned
1691
+** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]
1692
+** configuration option.
1693
+** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned
16841694
** memory, the size of each page buffer (sz), and the number of pages (N).
16851695
** The sz argument should be the size of the largest database page
1686
-** (a power of two between 512 and 32768) plus a little extra for each
1687
-** page header. ^The page header size is 20 to 40 bytes depending on
1688
-** the host architecture. ^It is harmless, apart from the wasted memory,
1689
-** to make sz a little too large. The first
1690
-** argument should point to an allocation of at least sz*N bytes of memory.
1696
+** (a power of two between 512 and 32768) plus some extra bytes for each
1697
+** page header. ^The number of extra bytes needed by the page header
1698
+** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option
1699
+** to [sqlite3_config()].
1700
+** ^It is harmless, apart from the wasted memory,
1701
+** for the sz parameter to be larger than necessary. The first
1702
+** argument should pointer to an 8-byte aligned block of memory that
1703
+** is at least sz*N bytes of memory, otherwise subsequent behavior is
1704
+** undefined.
16911705
** ^SQLite will use the memory provided by the first argument to satisfy its
16921706
** memory needs for the first N pages that it adds to cache. ^If additional
16931707
** page cache memory is needed beyond what is provided by this option, then
1694
-** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1695
-** The pointer in the first argument must
1696
-** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1697
-** will be undefined.</dd>
1708
+** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd>
16981709
**
16991710
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1700
-** <dd> ^This option specifies a static memory buffer that SQLite will use
1701
-** for all of its dynamic memory allocation needs beyond those provided
1702
-** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1703
-** There are three arguments: An 8-byte aligned pointer to the memory,
1711
+** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
1712
+** that SQLite will use for all of its dynamic memory allocation needs
1713
+** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1714
+** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
1715
+** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
1716
+** [SQLITE_ERROR] if invoked otherwise.
1717
+** ^There are three arguments to SQLITE_CONFIG_HEAP:
1718
+** An 8-byte aligned pointer to the memory,
17041719
** the number of bytes in the memory buffer, and the minimum allocation size.
17051720
** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
17061721
** to using its default memory allocator (the system malloc() implementation),
17071722
** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1708
-** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1709
-** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1723
+** memory pointer is not NULL then the alternative memory
17101724
** allocator is engaged to handle all of SQLites memory allocation needs.
17111725
** The first pointer (the memory pointer) must be aligned to an 8-byte
17121726
** boundary or subsequent behavior of SQLite will be undefined.
17131727
** The minimum allocation size is capped at 2**12. Reasonable values
17141728
** for the minimum allocation size are 2**5 through 2**8.</dd>
17151729
**
17161730
** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1717
-** <dd> ^(This option takes a single argument which is a pointer to an
1718
-** instance of the [sqlite3_mutex_methods] structure. The argument specifies
1719
-** alternative low-level mutex routines to be used in place
1731
+** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
1732
+** pointer to an instance of the [sqlite3_mutex_methods] structure.
1733
+** The argument specifies alternative low-level mutex routines to be used in place
17201734
** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
17211735
** content of the [sqlite3_mutex_methods] structure before the call to
17221736
** [sqlite3_config()] returns. ^If SQLite is compiled with
17231737
** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
17241738
** the entire mutexing subsystem is omitted from the build and hence calls to
17251739
** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
17261740
** return [SQLITE_ERROR].</dd>
17271741
**
17281742
** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1729
-** <dd> ^(This option takes a single argument which is a pointer to an
1730
-** instance of the [sqlite3_mutex_methods] structure. The
1743
+** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
1744
+** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The
17311745
** [sqlite3_mutex_methods]
17321746
** structure is filled with the currently defined mutex routines.)^
17331747
** This option can be used to overload the default mutex allocation
17341748
** routines with a wrapper used to track mutex usage for performance
17351749
** profiling or testing, for example. ^If SQLite is compiled with
@@ -1737,28 +1751,28 @@
17371751
** the entire mutexing subsystem is omitted from the build and hence calls to
17381752
** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
17391753
** return [SQLITE_ERROR].</dd>
17401754
**
17411755
** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1742
-** <dd> ^(This option takes two arguments that determine the default
1743
-** memory allocation for the lookaside memory allocator on each
1744
-** [database connection]. The first argument is the
1756
+** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
1757
+** the default size of lookaside memory on each [database connection].
1758
+** The first argument is the
17451759
** size of each lookaside buffer slot and the second is the number of
1746
-** slots allocated to each database connection.)^ ^(This option sets the
1747
-** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1748
-** verb to [sqlite3_db_config()] can be used to change the lookaside
1760
+** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE
1761
+** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1762
+** option to [sqlite3_db_config()] can be used to change the lookaside
17491763
** configuration on individual connections.)^ </dd>
17501764
**
17511765
** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1752
-** <dd> ^(This option takes a single argument which is a pointer to
1753
-** an [sqlite3_pcache_methods2] object. This object specifies the interface
1754
-** to a custom page cache implementation.)^ ^SQLite makes a copy of the
1755
-** object and uses it for page cache memory allocations.</dd>
1766
+** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
1767
+** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
1768
+** the interface to a custom page cache implementation.)^
1769
+** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
17561770
**
17571771
** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1758
-** <dd> ^(This option takes a single argument which is a pointer to an
1759
-** [sqlite3_pcache_methods2] object. SQLite copies of the current
1772
+** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
1773
+** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of the current
17601774
** page cache implementation into that object.)^ </dd>
17611775
**
17621776
** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
17631777
** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
17641778
** global [error log].
@@ -1778,26 +1792,27 @@
17781792
** supplied by the application must not invoke any SQLite interface.
17791793
** In a multi-threaded application, the application-defined logger
17801794
** function must be threadsafe. </dd>
17811795
**
17821796
** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1783
-** <dd>^(This option takes a single argument of type int. If non-zero, then
1784
-** URI handling is globally enabled. If the parameter is zero, then URI handling
1785
-** is globally disabled.)^ ^If URI handling is globally enabled, all filenames
1786
-** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1797
+** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
1798
+** If non-zero, then URI handling is globally enabled. If the parameter is zero,
1799
+** then URI handling is globally disabled.)^ ^If URI handling is globally enabled,
1800
+** all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
17871801
** specified as part of [ATTACH] commands are interpreted as URIs, regardless
17881802
** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
17891803
** connection is opened. ^If it is globally disabled, filenames are
17901804
** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
17911805
** database connection is opened. ^(By default, URI handling is globally
17921806
** disabled. The default value may be changed by compiling with the
17931807
** [SQLITE_USE_URI] symbol defined.)^
17941808
**
17951809
** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1796
-** <dd>^This option takes a single integer argument which is interpreted as
1797
-** a boolean in order to enable or disable the use of covering indices for
1798
-** full table scans in the query optimizer. ^The default setting is determined
1810
+** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
1811
+** argument which is interpreted as a boolean in order to enable or disable
1812
+** the use of covering indices for full table scans in the query optimizer.
1813
+** ^The default setting is determined
17991814
** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
18001815
** if that compile-time option is omitted.
18011816
** The ability to disable the use of covering indices for full table scans
18021817
** is because some incorrectly coded legacy applications might malfunction
18031818
** when the optimization is enabled. Providing the ability to
@@ -1833,23 +1848,32 @@
18331848
** that are the default mmap size limit (the default setting for
18341849
** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
18351850
** ^The default setting can be overridden by each database connection using
18361851
** either the [PRAGMA mmap_size] command, or by using the
18371852
** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1838
-** cannot be changed at run-time. Nor may the maximum allowed mmap size
1839
-** exceed the compile-time maximum mmap size set by the
1853
+** will be silently truncated if necessary so that it does not exceed the
1854
+** compile-time maximum mmap size set by the
18401855
** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
18411856
** ^If either argument to this option is negative, then that argument is
18421857
** changed to its compile-time default.
18431858
**
18441859
** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
18451860
** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1846
-** <dd>^This option is only available if SQLite is compiled for Windows
1847
-** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1848
-** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1861
+** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
1862
+** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1863
+** ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
18491864
** that specifies the maximum size of the created heap.
18501865
** </dl>
1866
+**
1867
+** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
1868
+** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
1869
+** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
1870
+** is a pointer to an integer and writes into that integer the number of extra
1871
+** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. The amount of
1872
+** extra space required can change depending on the compiler,
1873
+** target platform, and SQLite version.
1874
+** </dl>
18511875
*/
18521876
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
18531877
#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
18541878
#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
18551879
#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1870,10 +1894,11 @@
18701894
#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
18711895
#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
18721896
#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
18731897
#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
18741898
#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
1899
+#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
18751900
18761901
/*
18771902
** CAPI3REF: Database Connection Configuration Options
18781903
**
18791904
** These constants are the available integer configuration options that
@@ -1997,51 +2022,49 @@
19972022
SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
19982023
19992024
/*
20002025
** CAPI3REF: Count The Number Of Rows Modified
20012026
**
2002
-** ^This function returns the number of database rows that were changed
2003
-** or inserted or deleted by the most recently completed SQL statement
2004
-** on the [database connection] specified by the first parameter.
2005
-** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
2006
-** or [DELETE] statement are counted. Auxiliary changes caused by
2007
-** triggers or [foreign key actions] are not counted.)^ Use the
2008
-** [sqlite3_total_changes()] function to find the total number of changes
2009
-** including changes caused by triggers and foreign key actions.
2010
-**
2011
-** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
2012
-** are not counted. Only real table changes are counted.
2013
-**
2014
-** ^(A "row change" is a change to a single row of a single table
2015
-** caused by an INSERT, DELETE, or UPDATE statement. Rows that
2016
-** are changed as side effects of [REPLACE] constraint resolution,
2017
-** rollback, ABORT processing, [DROP TABLE], or by any other
2018
-** mechanisms do not count as direct row changes.)^
2019
-**
2020
-** A "trigger context" is a scope of execution that begins and
2021
-** ends with the script of a [CREATE TRIGGER | trigger].
2022
-** Most SQL statements are
2023
-** evaluated outside of any trigger. This is the "top level"
2024
-** trigger context. If a trigger fires from the top level, a
2025
-** new trigger context is entered for the duration of that one
2026
-** trigger. Subtriggers create subcontexts for their duration.
2027
-**
2028
-** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
2029
-** not create a new trigger context.
2030
-**
2031
-** ^This function returns the number of direct row changes in the
2032
-** most recent INSERT, UPDATE, or DELETE statement within the same
2033
-** trigger context.
2034
-**
2035
-** ^Thus, when called from the top level, this function returns the
2036
-** number of changes in the most recent INSERT, UPDATE, or DELETE
2037
-** that also occurred at the top level. ^(Within the body of a trigger,
2038
-** the sqlite3_changes() interface can be called to find the number of
2039
-** changes in the most recently completed INSERT, UPDATE, or DELETE
2040
-** statement within the body of the same trigger.
2041
-** However, the number returned does not include changes
2042
-** caused by subtriggers since those have their own context.)^
2027
+** ^This function returns the number of rows modified, inserted or
2028
+** deleted by the most recently completed INSERT, UPDATE or DELETE
2029
+** statement on the database connection specified by the only parameter.
2030
+** ^Executing any other type of SQL statement does not modify the value
2031
+** returned by this function.
2032
+**
2033
+** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
2034
+** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
2035
+** [foreign key actions] or [REPLACE] constraint resolution are not counted.
2036
+**
2037
+** Changes to a view that are intercepted by
2038
+** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
2039
+** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
2040
+** DELETE statement run on a view is always zero. Only changes made to real
2041
+** tables are counted.
2042
+**
2043
+** Things are more complicated if the sqlite3_changes() function is
2044
+** executed while a trigger program is running. This may happen if the
2045
+** program uses the [changes() SQL function], or if some other callback
2046
+** function invokes sqlite3_changes() directly. Essentially:
2047
+**
2048
+** <ul>
2049
+** <li> ^(Before entering a trigger program the value returned by
2050
+** sqlite3_changes() function is saved. After the trigger program
2051
+** has finished, the original value is restored.)^
2052
+**
2053
+** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
2054
+** statement sets the value returned by sqlite3_changes()
2055
+** upon completion as normal. Of course, this value will not include
2056
+** any changes performed by sub-triggers, as the sqlite3_changes()
2057
+** value will be saved and restored after each sub-trigger has run.)^
2058
+** </ul>
2059
+**
2060
+** ^This means that if the changes() SQL function (or similar) is used
2061
+** by the first INSERT, UPDATE or DELETE statement within a trigger, it
2062
+** returns the value as set when the calling statement began executing.
2063
+** ^If it is used by the second or subsequent such statement within a trigger
2064
+** program, the value returned reflects the number of rows modified by the
2065
+** previous INSERT, UPDATE or DELETE statement within the same trigger.
20432066
**
20442067
** See also the [sqlite3_total_changes()] interface, the
20452068
** [count_changes pragma], and the [changes() SQL function].
20462069
**
20472070
** If a separate thread makes changes on the same database connection
@@ -2051,24 +2074,21 @@
20512074
SQLITE_API int sqlite3_changes(sqlite3*);
20522075
20532076
/*
20542077
** CAPI3REF: Total Number Of Rows Modified
20552078
**
2056
-** ^This function returns the number of row changes caused by [INSERT],
2057
-** [UPDATE] or [DELETE] statements since the [database connection] was opened.
2058
-** ^(The count returned by sqlite3_total_changes() includes all changes
2059
-** from all [CREATE TRIGGER | trigger] contexts and changes made by
2060
-** [foreign key actions]. However,
2061
-** the count does not include changes used to implement [REPLACE] constraints,
2062
-** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
2063
-** count does not include rows of views that fire an [INSTEAD OF trigger],
2064
-** though if the INSTEAD OF trigger makes changes of its own, those changes
2065
-** are counted.)^
2066
-** ^The sqlite3_total_changes() function counts the changes as soon as
2067
-** the statement that makes them is completed (when the statement handle
2068
-** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
2069
-**
2079
+** ^This function returns the total number of rows inserted, modified or
2080
+** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
2081
+** since the database connection was opened, including those executed as
2082
+** part of trigger programs. ^Executing any other type of SQL statement
2083
+** does not affect the value returned by sqlite3_total_changes().
2084
+**
2085
+** ^Changes made as part of [foreign key actions] are included in the
2086
+** count, but those made as part of REPLACE constraint resolution are
2087
+** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
2088
+** are not counted.
2089
+**
20702090
** See also the [sqlite3_changes()] interface, the
20712091
** [count_changes pragma], and the [total_changes() SQL function].
20722092
**
20732093
** If a separate thread makes changes on the same database connection
20742094
** while [sqlite3_total_changes()] is running then the value
@@ -2542,17 +2562,18 @@
25422562
** already uses the largest possible [ROWID]. The PRNG is also used for
25432563
** the build-in random() and randomblob() SQL functions. This interface allows
25442564
** applications to access the same PRNG for other purposes.
25452565
**
25462566
** ^A call to this routine stores N bytes of randomness into buffer P.
2547
-** ^If N is less than one, then P can be a NULL pointer.
2567
+** ^The P parameter can be a NULL pointer.
25482568
**
25492569
** ^If this routine has not been previously called or if the previous
2550
-** call had N less than one, then the PRNG is seeded using randomness
2551
-** obtained from the xRandomness method of the default [sqlite3_vfs] object.
2552
-** ^If the previous call to this routine had an N of 1 or more then
2553
-** the pseudo-randomness is generated
2570
+** call had N less than one or a NULL pointer for P, then the PRNG is
2571
+** seeded using randomness obtained from the xRandomness method of
2572
+** the default [sqlite3_vfs] object.
2573
+** ^If the previous call to this routine had an N of 1 or more and a
2574
+** non-NULL P then the pseudo-randomness is generated
25542575
** internally and without recourse to the [sqlite3_vfs] xRandomness
25552576
** method.
25562577
*/
25572578
SQLITE_API void sqlite3_randomness(int N, void *P);
25582579
@@ -4270,13 +4291,13 @@
42704291
** CAPI3REF: Text Encodings
42714292
**
42724293
** These constant define integer codes that represent the various
42734294
** text encodings supported by SQLite.
42744295
*/
4275
-#define SQLITE_UTF8 1
4276
-#define SQLITE_UTF16LE 2
4277
-#define SQLITE_UTF16BE 3
4296
+#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
4297
+#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
4298
+#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
42784299
#define SQLITE_UTF16 4 /* Use native byte order */
42794300
#define SQLITE_ANY 5 /* Deprecated */
42804301
#define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
42814302
42824303
/*
@@ -5762,31 +5783,47 @@
57625783
** in other words, the same BLOB that would be selected by:
57635784
**
57645785
** <pre>
57655786
** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
57665787
** </pre>)^
5788
+**
5789
+** ^(Parameter zDb is not the filename that contains the database, but
5790
+** rather the symbolic name of the database. For attached databases, this is
5791
+** the name that appears after the AS keyword in the [ATTACH] statement.
5792
+** For the main database file, the database name is "main". For TEMP
5793
+** tables, the database name is "temp".)^
57675794
**
57685795
** ^If the flags parameter is non-zero, then the BLOB is opened for read
5769
-** and write access. ^If it is zero, the BLOB is opened for read access.
5770
-** ^It is not possible to open a column that is part of an index or primary
5771
-** key for writing. ^If [foreign key constraints] are enabled, it is
5772
-** not possible to open a column that is part of a [child key] for writing.
5773
-**
5774
-** ^Note that the database name is not the filename that contains
5775
-** the database but rather the symbolic name of the database that
5776
-** appears after the AS keyword when the database is connected using [ATTACH].
5777
-** ^For the main database file, the database name is "main".
5778
-** ^For TEMP tables, the database name is "temp".
5779
-**
5780
-** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5781
-** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5782
-** to be a null pointer.)^
5783
-** ^This function sets the [database connection] error code and message
5784
-** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5785
-** functions. ^Note that the *ppBlob variable is always initialized in a
5786
-** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5787
-** regardless of the success or failure of this routine.
5796
+** and write access. ^If the flags parameter is zero, the BLOB is opened for
5797
+** read-only access.
5798
+**
5799
+** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored
5800
+** in *ppBlob. Otherwise an [error code] is returned and, unless the error
5801
+** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
5802
+** the API is not misused, it is always safe to call [sqlite3_blob_close()]
5803
+** on *ppBlob after this function it returns.
5804
+**
5805
+** This function fails with SQLITE_ERROR if any of the following are true:
5806
+** <ul>
5807
+** <li> ^(Database zDb does not exist)^,
5808
+** <li> ^(Table zTable does not exist within database zDb)^,
5809
+** <li> ^(Table zTable is a WITHOUT ROWID table)^,
5810
+** <li> ^(Column zColumn does not exist)^,
5811
+** <li> ^(Row iRow is not present in the table)^,
5812
+** <li> ^(The specified column of row iRow contains a value that is not
5813
+** a TEXT or BLOB value)^,
5814
+** <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE
5815
+** constraint and the blob is being opened for read/write access)^,
5816
+** <li> ^([foreign key constraints | Foreign key constraints] are enabled,
5817
+** column zColumn is part of a [child key] definition and the blob is
5818
+** being opened for read/write access)^.
5819
+** </ul>
5820
+**
5821
+** ^Unless it returns SQLITE_MISUSE, this function sets the
5822
+** [database connection] error code and message accessible via
5823
+** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5824
+**
57885825
**
57895826
** ^(If the row that a BLOB handle points to is modified by an
57905827
** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
57915828
** then the BLOB handle is marked as "expired".
57925829
** This is true if any column of the row is changed, even a column
@@ -5800,17 +5837,13 @@
58005837
** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
58015838
** the opened blob. ^The size of a blob may not be changed by this
58025839
** interface. Use the [UPDATE] SQL command to change the size of a
58035840
** blob.
58045841
**
5805
-** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID]
5806
-** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables.
5807
-**
58085842
** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5809
-** and the built-in [zeroblob] SQL function can be used, if desired,
5810
-** to create an empty, zero-filled blob in which to read or write using
5811
-** this interface.
5843
+** and the built-in [zeroblob] SQL function may be used to create a
5844
+** zero-filled blob to read or write using the incremental-blob interface.
58125845
**
58135846
** To avoid a resource leak, every open [BLOB handle] should eventually
58145847
** be released by a call to [sqlite3_blob_close()].
58155848
*/
58165849
SQLITE_API int sqlite3_blob_open(
@@ -5848,28 +5881,26 @@
58485881
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
58495882
58505883
/*
58515884
** CAPI3REF: Close A BLOB Handle
58525885
**
5853
-** ^Closes an open [BLOB handle].
5854
-**
5855
-** ^Closing a BLOB shall cause the current transaction to commit
5856
-** if there are no other BLOBs, no pending prepared statements, and the
5857
-** database connection is in [autocommit mode].
5858
-** ^If any writes were made to the BLOB, they might be held in cache
5859
-** until the close operation if they will fit.
5860
-**
5861
-** ^(Closing the BLOB often forces the changes
5862
-** out to disk and so if any I/O errors occur, they will likely occur
5863
-** at the time when the BLOB is closed. Any errors that occur during
5864
-** closing are reported as a non-zero return value.)^
5865
-**
5866
-** ^(The BLOB is closed unconditionally. Even if this routine returns
5867
-** an error code, the BLOB is still closed.)^
5868
-**
5869
-** ^Calling this routine with a null pointer (such as would be returned
5870
-** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5886
+** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed
5887
+** unconditionally. Even if this routine returns an error code, the
5888
+** handle is still closed.)^
5889
+**
5890
+** ^If the blob handle being closed was opened for read-write access, and if
5891
+** the database is in auto-commit mode and there are no other open read-write
5892
+** blob handles or active write statements, the current transaction is
5893
+** committed. ^If an error occurs while committing the transaction, an error
5894
+** code is returned and the transaction rolled back.
5895
+**
5896
+** Calling this function with an argument that is not a NULL pointer or an
5897
+** open blob handle results in undefined behaviour. ^Calling this routine
5898
+** with a null pointer (such as would be returned by a failed call to
5899
+** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
5900
+** is passed a valid open blob handle, the values returned by the
5901
+** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
58715902
*/
58725903
SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
58735904
58745905
/*
58755906
** CAPI3REF: Return The Size Of An Open BLOB
@@ -5915,36 +5946,39 @@
59155946
SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
59165947
59175948
/*
59185949
** CAPI3REF: Write Data Into A BLOB Incrementally
59195950
**
5920
-** ^This function is used to write data into an open [BLOB handle] from a
5921
-** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5922
-** into the open BLOB, starting at offset iOffset.
5951
+** ^(This function is used to write data into an open [BLOB handle] from a
5952
+** caller-supplied buffer. N bytes of data are copied from the buffer Z
5953
+** into the open BLOB, starting at offset iOffset.)^
5954
+**
5955
+** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5956
+** Otherwise, an [error code] or an [extended error code] is returned.)^
5957
+** ^Unless SQLITE_MISUSE is returned, this function sets the
5958
+** [database connection] error code and message accessible via
5959
+** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
59235960
**
59245961
** ^If the [BLOB handle] passed as the first argument was not opened for
59255962
** writing (the flags parameter to [sqlite3_blob_open()] was zero),
59265963
** this function returns [SQLITE_READONLY].
59275964
**
5928
-** ^This function may only modify the contents of the BLOB; it is
5965
+** This function may only modify the contents of the BLOB; it is
59295966
** not possible to increase the size of a BLOB using this API.
59305967
** ^If offset iOffset is less than N bytes from the end of the BLOB,
5931
-** [SQLITE_ERROR] is returned and no data is written. ^If N is
5932
-** less than zero [SQLITE_ERROR] is returned and no data is written.
5933
-** The size of the BLOB (and hence the maximum value of N+iOffset)
5934
-** can be determined using the [sqlite3_blob_bytes()] interface.
5968
+** [SQLITE_ERROR] is returned and no data is written. The size of the
5969
+** BLOB (and hence the maximum value of N+iOffset) can be determined
5970
+** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less
5971
+** than zero [SQLITE_ERROR] is returned and no data is written.
59355972
**
59365973
** ^An attempt to write to an expired [BLOB handle] fails with an
59375974
** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
59385975
** before the [BLOB handle] expired are not rolled back by the
59395976
** expiration of the handle, though of course those changes might
59405977
** have been overwritten by the statement that expired the BLOB handle
59415978
** or by other independent statements.
59425979
**
5943
-** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5944
-** Otherwise, an [error code] or an [extended error code] is returned.)^
5945
-**
59465980
** This routine only works on a [BLOB handle] which has been created
59475981
** by a prior successful call to [sqlite3_blob_open()] and which has not
59485982
** been closed by [sqlite3_blob_close()]. Passing any other pointer in
59495983
** to this routine results in undefined and probably undesirable behavior.
59505984
**
@@ -5993,38 +6027,38 @@
59936027
** use by SQLite, code that links against SQLite is
59946028
** permitted to use any of these routines.
59956029
**
59966030
** The SQLite source code contains multiple implementations
59976031
** of these mutex routines. An appropriate implementation
5998
-** is selected automatically at compile-time. ^(The following
6032
+** is selected automatically at compile-time. The following
59996033
** implementations are available in the SQLite core:
60006034
**
60016035
** <ul>
60026036
** <li> SQLITE_MUTEX_PTHREADS
60036037
** <li> SQLITE_MUTEX_W32
60046038
** <li> SQLITE_MUTEX_NOOP
6005
-** </ul>)^
6039
+** </ul>
60066040
**
6007
-** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
6041
+** The SQLITE_MUTEX_NOOP implementation is a set of routines
60086042
** that does no real locking and is appropriate for use in
6009
-** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and
6043
+** a single-threaded application. The SQLITE_MUTEX_PTHREADS and
60106044
** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
60116045
** and Windows.
60126046
**
6013
-** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
6047
+** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
60146048
** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
60156049
** implementation is included with the library. In this case the
60166050
** application must supply a custom mutex implementation using the
60176051
** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
60186052
** before calling sqlite3_initialize() or any other public sqlite3_
6019
-** function that calls sqlite3_initialize().)^
6053
+** function that calls sqlite3_initialize().
60206054
**
60216055
** ^The sqlite3_mutex_alloc() routine allocates a new
6022
-** mutex and returns a pointer to it. ^If it returns NULL
6023
-** that means that a mutex could not be allocated. ^SQLite
6024
-** will unwind its stack and return an error. ^(The argument
6025
-** to sqlite3_mutex_alloc() is one of these integer constants:
6056
+** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
6057
+** routine returns NULL if it is unable to allocate the requested
6058
+** mutex. The argument to sqlite3_mutex_alloc() must one of these
6059
+** integer constants:
60266060
**
60276061
** <ul>
60286062
** <li> SQLITE_MUTEX_FAST
60296063
** <li> SQLITE_MUTEX_RECURSIVE
60306064
** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -6033,68 +6067,64 @@
60336067
** <li> SQLITE_MUTEX_STATIC_PRNG
60346068
** <li> SQLITE_MUTEX_STATIC_LRU
60356069
** <li> SQLITE_MUTEX_STATIC_PMEM
60366070
** <li> SQLITE_MUTEX_STATIC_APP1
60376071
** <li> SQLITE_MUTEX_STATIC_APP2
6038
-** </ul>)^
6072
+** <li> SQLITE_MUTEX_STATIC_APP3
6073
+** </ul>
60396074
**
60406075
** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
60416076
** cause sqlite3_mutex_alloc() to create
60426077
** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
60436078
** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
60446079
** The mutex implementation does not need to make a distinction
60456080
** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
6046
-** not want to. ^SQLite will only request a recursive mutex in
6047
-** cases where it really needs one. ^If a faster non-recursive mutex
6081
+** not want to. SQLite will only request a recursive mutex in
6082
+** cases where it really needs one. If a faster non-recursive mutex
60486083
** implementation is available on the host platform, the mutex subsystem
60496084
** might return such a mutex in response to SQLITE_MUTEX_FAST.
60506085
**
60516086
** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
60526087
** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
6053
-** a pointer to a static preexisting mutex. ^Six static mutexes are
6088
+** a pointer to a static preexisting mutex. ^Nine static mutexes are
60546089
** used by the current version of SQLite. Future versions of SQLite
60556090
** may add additional static mutexes. Static mutexes are for internal
60566091
** use by SQLite only. Applications that use SQLite mutexes should
60576092
** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
60586093
** SQLITE_MUTEX_RECURSIVE.
60596094
**
60606095
** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
60616096
** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
6062
-** returns a different mutex on every call. ^But for the static
6097
+** returns a different mutex on every call. ^For the static
60636098
** mutex types, the same mutex is returned on every call that has
60646099
** the same type number.
60656100
**
60666101
** ^The sqlite3_mutex_free() routine deallocates a previously
6067
-** allocated dynamic mutex. ^SQLite is careful to deallocate every
6068
-** dynamic mutex that it allocates. The dynamic mutexes must not be in
6069
-** use when they are deallocated. Attempting to deallocate a static
6070
-** mutex results in undefined behavior. ^SQLite never deallocates
6071
-** a static mutex.
6102
+** allocated dynamic mutex. Attempting to deallocate a static
6103
+** mutex results in undefined behavior.
60726104
**
60736105
** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
60746106
** to enter a mutex. ^If another thread is already within the mutex,
60756107
** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
60766108
** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
60776109
** upon successful entry. ^(Mutexes created using
60786110
** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
6079
-** In such cases the,
6111
+** In such cases, the
60806112
** mutex must be exited an equal number of times before another thread
6081
-** can enter.)^ ^(If the same thread tries to enter any other
6082
-** kind of mutex more than once, the behavior is undefined.
6083
-** SQLite will never exhibit
6084
-** such behavior in its own use of mutexes.)^
6113
+** can enter.)^ If the same thread tries to enter any mutex other
6114
+** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.
60856115
**
60866116
** ^(Some systems (for example, Windows 95) do not support the operation
60876117
** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
6088
-** will always return SQLITE_BUSY. The SQLite core only ever uses
6089
-** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
6118
+** will always return SQLITE_BUSY. The SQLite core only ever uses
6119
+** sqlite3_mutex_try() as an optimization so this is acceptable
6120
+** behavior.)^
60906121
**
60916122
** ^The sqlite3_mutex_leave() routine exits a mutex that was
6092
-** previously entered by the same thread. ^(The behavior
6123
+** previously entered by the same thread. The behavior
60936124
** is undefined if the mutex is not currently entered by the
6094
-** calling thread or is not currently allocated. SQLite will
6095
-** never do either.)^
6125
+** calling thread or is not currently allocated.
60966126
**
60976127
** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
60986128
** sqlite3_mutex_leave() is a NULL pointer, then all three routines
60996129
** behave as no-ops.
61006130
**
@@ -6111,13 +6141,13 @@
61116141
**
61126142
** An instance of this structure defines the low-level routines
61136143
** used to allocate and use mutexes.
61146144
**
61156145
** Usually, the default mutex implementations provided by SQLite are
6116
-** sufficient, however the user has the option of substituting a custom
6146
+** sufficient, however the application has the option of substituting a custom
61176147
** implementation for specialized deployments or systems for which SQLite
6118
-** does not provide a suitable implementation. In this case, the user
6148
+** does not provide a suitable implementation. In this case, the application
61196149
** creates and populates an instance of this structure to pass
61206150
** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
61216151
** Additionally, an instance of this structure can be used as an
61226152
** output variable when querying the system for the current mutex
61236153
** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6154,17 +6184,17 @@
61546184
** by this structure are not required to handle this case, the results
61556185
** of passing a NULL pointer instead of a valid mutex handle are undefined
61566186
** (i.e. it is acceptable to provide an implementation that segfaults if
61576187
** it is passed a NULL pointer).
61586188
**
6159
-** The xMutexInit() method must be threadsafe. ^It must be harmless to
6189
+** The xMutexInit() method must be threadsafe. It must be harmless to
61606190
** invoke xMutexInit() multiple times within the same process and without
61616191
** intervening calls to xMutexEnd(). Second and subsequent calls to
61626192
** xMutexInit() must be no-ops.
61636193
**
6164
-** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6165
-** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory
6194
+** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6195
+** and its associates). Similarly, xMutexAlloc() must not use SQLite memory
61666196
** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
61676197
** memory allocation for a fast or recursive mutex.
61686198
**
61696199
** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
61706200
** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6186,33 +6216,33 @@
61866216
61876217
/*
61886218
** CAPI3REF: Mutex Verification Routines
61896219
**
61906220
** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6191
-** are intended for use inside assert() statements. ^The SQLite core
6221
+** are intended for use inside assert() statements. The SQLite core
61926222
** never uses these routines except inside an assert() and applications
6193
-** are advised to follow the lead of the core. ^The SQLite core only
6223
+** are advised to follow the lead of the core. The SQLite core only
61946224
** provides implementations for these routines when it is compiled
6195
-** with the SQLITE_DEBUG flag. ^External mutex implementations
6225
+** with the SQLITE_DEBUG flag. External mutex implementations
61966226
** are only required to provide these routines if SQLITE_DEBUG is
61976227
** defined and if NDEBUG is not defined.
61986228
**
6199
-** ^These routines should return true if the mutex in their argument
6229
+** These routines should return true if the mutex in their argument
62006230
** is held or not held, respectively, by the calling thread.
62016231
**
6202
-** ^The implementation is not required to provide versions of these
6232
+** The implementation is not required to provide versions of these
62036233
** routines that actually work. If the implementation does not provide working
62046234
** versions of these routines, it should at least provide stubs that always
62056235
** return true so that one does not get spurious assertion failures.
62066236
**
6207
-** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6237
+** If the argument to sqlite3_mutex_held() is a NULL pointer then
62086238
** the routine should return 1. This seems counter-intuitive since
62096239
** clearly the mutex cannot be held if it does not exist. But
62106240
** the reason the mutex does not exist is because the build is not
62116241
** using mutexes. And we do not want the assert() containing the
62126242
** call to sqlite3_mutex_held() to fail, so a non-zero return is
6213
-** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6243
+** the appropriate thing to do. The sqlite3_mutex_notheld()
62146244
** interface should also return 1 when given a NULL pointer.
62156245
*/
62166246
#ifndef NDEBUG
62176247
SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
62186248
SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6940,10 +6970,14 @@
69406970
** sqlite3_backup_init(D,N,S,M) identify the [database connection]
69416971
** and database name of the source database, respectively.
69426972
** ^The source and destination [database connections] (parameters S and D)
69436973
** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
69446974
** an error.
6975
+**
6976
+** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if
6977
+** there is already a read or read-write transaction open on the
6978
+** destination database.
69456979
**
69466980
** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
69476981
** returned and an error code and error message are stored in the
69486982
** destination [database connection] D.
69496983
** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7533,10 +7567,102 @@
75337567
/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
75347568
#define SQLITE_FAIL 3
75357569
/* #define SQLITE_ABORT 4 // Also an error code */
75367570
#define SQLITE_REPLACE 5
75377571
7572
+/*
7573
+** CAPI3REF: Prepared Statement Scan Status Opcodes
7574
+** KEYWORDS: {scanstatus options}
7575
+**
7576
+** The following constants can be used for the T parameter to the
7577
+** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a
7578
+** different metric for sqlite3_stmt_scanstatus() to return.
7579
+**
7580
+** <dl>
7581
+** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
7582
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7583
+** total number of times that the X-th loop has run.</dd>
7584
+**
7585
+** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
7586
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7587
+** total number of rows examined by all iterations of the X-th loop.</dd>
7588
+**
7589
+** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
7590
+** <dd>^The "double" variable pointed to by the T parameter will be set to the
7591
+** query planner's estimate for the average number of rows output from each
7592
+** iteration of the X-th loop. If the query planner's estimates was accurate,
7593
+** then this value will approximate the quotient NVISIT/NLOOP and the
7594
+** product of this value for all prior loops with the same SELECTID will
7595
+** be the NLOOP value for the current loop.
7596
+**
7597
+** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
7598
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7599
+** a zero-terminated UTF-8 string containing the name of the index or table used
7600
+** for the X-th loop.
7601
+**
7602
+** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
7603
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7604
+** a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] description
7605
+** for the X-th loop.
7606
+**
7607
+** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
7608
+** <dd>^The "int" variable pointed to by the T parameter will be set to the
7609
+** "select-id" for the X-th loop. The select-id identifies which query or
7610
+** subquery the loop is part of. The main query has a select-id of zero.
7611
+** The select-id is the same value as is output in the first column
7612
+** of an [EXPLAIN QUERY PLAN] query.
7613
+** </dl>
7614
+*/
7615
+#define SQLITE_SCANSTAT_NLOOP 0
7616
+#define SQLITE_SCANSTAT_NVISIT 1
7617
+#define SQLITE_SCANSTAT_EST 2
7618
+#define SQLITE_SCANSTAT_NAME 3
7619
+#define SQLITE_SCANSTAT_EXPLAIN 4
7620
+#define SQLITE_SCANSTAT_SELECTID 5
7621
+
7622
+/*
7623
+** CAPI3REF: Prepared Statement Scan Status
7624
+**
7625
+** Return status data for a single loop within query pStmt.
7626
+**
7627
+** The "iScanStatusOp" parameter determines which status information to return.
7628
+** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior of
7629
+** this interface is undefined.
7630
+** ^The requested measurement is written into a variable pointed to by
7631
+** the "pOut" parameter.
7632
+** Parameter "idx" identifies the specific loop to retrieve statistics for.
7633
+** Loops are numbered starting from zero. ^If idx is out of range - less than
7634
+** zero or greater than or equal to the total number of loops used to implement
7635
+** the statement - a non-zero value is returned and the variable that pOut
7636
+** points to is unchanged.
7637
+**
7638
+** ^Statistics might not be available for all loops in all statements. ^In cases
7639
+** where there exist loops with no available statistics, this function behaves
7640
+** as if the loop did not exist - it returns non-zero and leave the variable
7641
+** that pOut points to unchanged.
7642
+**
7643
+** This API is only available if the library is built with pre-processor
7644
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7645
+**
7646
+** See also: [sqlite3_stmt_scanstatus_reset()]
7647
+*/
7648
+SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus(
7649
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
7650
+ int idx, /* Index of loop to report on */
7651
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
7652
+ void *pOut /* Result written here */
7653
+);
7654
+
7655
+/*
7656
+** CAPI3REF: Zero Scan-Status Counters
7657
+**
7658
+** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
7659
+**
7660
+** This API is only available if the library is built with pre-processor
7661
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7662
+*/
7663
+SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
75387664
75397665
75407666
/*
75417667
** Undo the hack that converts floating point types to integer for
75427668
** builds on processors without floating point support.
@@ -7978,14 +8104,13 @@
79788104
#ifndef SQLITE_POWERSAFE_OVERWRITE
79798105
# define SQLITE_POWERSAFE_OVERWRITE 1
79808106
#endif
79818107
79828108
/*
7983
-** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
7984
-** It determines whether or not the features related to
7985
-** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
7986
-** be overridden at runtime using the sqlite3_config() API.
8109
+** EVIDENCE-OF: R-25715-37072 Memory allocation statistics are enabled by
8110
+** default unless SQLite is compiled with SQLITE_DEFAULT_MEMSTATUS=0 in
8111
+** which case memory allocation statistics are disabled by default.
79878112
*/
79888113
#if !defined(SQLITE_DEFAULT_MEMSTATUS)
79898114
# define SQLITE_DEFAULT_MEMSTATUS 1
79908115
#endif
79918116
@@ -8611,11 +8736,11 @@
86118736
** Estimated quantities used for query planning are stored as 16-bit
86128737
** logarithms. For quantity X, the value stored is 10*log2(X). This
86138738
** gives a possible range of values of approximately 1.0e986 to 1e-986.
86148739
** But the allowed values are "grainy". Not every value is representable.
86158740
** For example, quantities 16 and 17 are both represented by a LogEst
8616
-** of 40. However, since LogEst quantaties are suppose to be estimates,
8741
+** of 40. However, since LogEst quantities are suppose to be estimates,
86178742
** not exact values, this imprecision is not a problem.
86188743
**
86198744
** "LogEst" is short for "Logarithmic Estimate".
86208745
**
86218746
** Examples:
@@ -9124,10 +9249,11 @@
91249249
SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *);
91259250
SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
91269251
SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
91279252
SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *, unsigned int mask);
91289253
SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *pBt);
9254
+SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void);
91299255
91309256
#ifndef NDEBUG
91319257
SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
91329258
#endif
91339259
@@ -9666,10 +9792,16 @@
96669792
# define VdbeCoverageAlwaysTaken(v)
96679793
# define VdbeCoverageNeverTaken(v)
96689794
# define VDBE_OFFSET_LINENO(x) 0
96699795
#endif
96709796
9797
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
9798
+SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*);
9799
+#else
9800
+# define sqlite3VdbeScanStatus(a,b,c,d,e)
9801
+#endif
9802
+
96719803
#endif
96729804
96739805
/************** End of vdbe.h ************************************************/
96749806
/************** Continuing where we left off in sqliteInt.h ******************/
96759807
/************** Include pager.h in the middle of sqliteInt.h *****************/
@@ -9862,10 +9994,12 @@
98629994
SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *);
98639995
98649996
/* Functions used to truncate the database file. */
98659997
SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
98669998
9999
+SQLITE_PRIVATE void sqlite3PagerRekey(DbPage*, Pgno, u16);
10000
+
986710001
#if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
986810002
SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
986910003
#endif
987010004
987110005
/* Functions to support testing and debugging. */
@@ -10049,10 +10183,14 @@
1004910183
SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
1005010184
#endif
1005110185
1005210186
SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
1005310187
10188
+/* Return the header size */
10189
+SQLITE_PRIVATE int sqlite3HeaderSizePcache(void);
10190
+SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void);
10191
+
1005410192
#endif /* _PCACHE_H_ */
1005510193
1005610194
/************** End of pcache.h **********************************************/
1005710195
/************** Continuing where we left off in sqliteInt.h ******************/
1005810196
@@ -10735,11 +10873,11 @@
1073510873
#define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */
1073610874
#define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */
1073710875
#define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */
1073810876
#define SQLITE_Transitive 0x0200 /* Transitive constraints */
1073910877
#define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */
10740
-#define SQLITE_Stat3 0x0800 /* Use the SQLITE_STAT3 table */
10878
+#define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */
1074110879
#define SQLITE_AllOpts 0xffff /* All optimizations */
1074210880
1074310881
/*
1074410882
** Macros for testing whether or not optimizations are enabled or disabled.
1074510883
*/
@@ -11317,16 +11455,18 @@
1131711455
unsigned idxType:2; /* 1==UNIQUE, 2==PRIMARY KEY, 0==CREATE INDEX */
1131811456
unsigned bUnordered:1; /* Use this index for == or IN queries only */
1131911457
unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */
1132011458
unsigned isResized:1; /* True if resizeIndexObject() has been called */
1132111459
unsigned isCovering:1; /* True if this is a covering index */
11460
+ unsigned noSkipScan:1; /* Do not try to use skip-scan if true */
1132211461
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
1132311462
int nSample; /* Number of elements in aSample[] */
1132411463
int nSampleCol; /* Size of IndexSample.anEq[] and so on */
1132511464
tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */
1132611465
IndexSample *aSample; /* Samples of the left-most key */
11327
- tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this table */
11466
+ tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */
11467
+ tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */
1132811468
#endif
1132911469
};
1133011470
1133111471
/*
1133211472
** Allowed values for Index.idxType
@@ -11520,11 +11660,11 @@
1152011660
int nHeight; /* Height of the tree headed by this node */
1152111661
#endif
1152211662
int iTable; /* TK_COLUMN: cursor number of table holding column
1152311663
** TK_REGISTER: register number
1152411664
** TK_TRIGGER: 1 -> new, 0 -> old
11525
- ** EP_Unlikely: 1000 times likelihood */
11665
+ ** EP_Unlikely: 134217728 times likelihood */
1152611666
ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid.
1152711667
** TK_VARIABLE: variable number (always >= 1). */
1152811668
i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
1152911669
i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
1153011670
u8 op2; /* TK_REGISTER: original value of Expr.op
@@ -12412,13 +12552,15 @@
1241212552
int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */
1241312553
int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */
1241412554
void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
1241512555
Parse *pParse; /* Parser context. */
1241612556
int walkerDepth; /* Number of subqueries */
12557
+ u8 eCode; /* A small processing code */
1241712558
union { /* Extra data for callback */
1241812559
NameContext *pNC; /* Naming context */
12419
- int i; /* Integer value */
12560
+ int n; /* A counter */
12561
+ int iCur; /* A cursor number */
1242012562
SrcList *pSrcList; /* FROM clause */
1242112563
struct SrcCount *pSrcCount; /* Counting column references */
1242212564
} u;
1242312565
};
1242412566
@@ -12815,10 +12957,11 @@
1281512957
SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
1281612958
SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
1281712959
SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
1281812960
SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
1281912961
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
12962
+SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int);
1282012963
SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
1282112964
SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
1282212965
SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
1282312966
SQLITE_PRIVATE int sqlite3IsRowid(const char*);
1282412967
SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8);
@@ -13472,15 +13615,23 @@
1347213615
** compatibility for legacy applications, the URI filename capability is
1347313616
** disabled by default.
1347413617
**
1347513618
** EVIDENCE-OF: R-38799-08373 URI filenames can be enabled or disabled
1347613619
** using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options.
13620
+**
13621
+** EVIDENCE-OF: R-43642-56306 By default, URI handling is globally
13622
+** disabled. The default value may be changed by compiling with the
13623
+** SQLITE_USE_URI symbol defined.
1347713624
*/
1347813625
#ifndef SQLITE_USE_URI
1347913626
# define SQLITE_USE_URI 0
1348013627
#endif
1348113628
13629
+/* EVIDENCE-OF: R-38720-18127 The default setting is determined by the
13630
+** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
13631
+** that compile-time option is omitted.
13632
+*/
1348213633
#ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
1348313634
# define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
1348413635
#endif
1348513636
1348613637
/*
@@ -13566,12 +13717,12 @@
1356613717
** than 1 GiB. The sqlite3_test_control() interface can be used to
1356713718
** move the pending byte.
1356813719
**
1356913720
** IMPORTANT: Changing the pending byte to any value other than
1357013721
** 0x40000000 results in an incompatible database file format!
13571
-** Changing the pending byte during operating results in undefined
13572
-** and dileterious behavior.
13722
+** Changing the pending byte during operation will result in undefined
13723
+** and incorrect behavior.
1357313724
*/
1357413725
#ifndef SQLITE_OMIT_WSD
1357513726
SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
1357613727
#endif
1357713728
@@ -13646,10 +13797,13 @@
1364613797
#ifdef SQLITE_DISABLE_DIRSYNC
1364713798
"DISABLE_DIRSYNC",
1364813799
#endif
1364913800
#ifdef SQLITE_DISABLE_LFS
1365013801
"DISABLE_LFS",
13802
+#endif
13803
+#ifdef SQLITE_ENABLE_API_ARMOR
13804
+ "ENABLE_API_ARMOR",
1365113805
#endif
1365213806
#ifdef SQLITE_ENABLE_ATOMIC_WRITE
1365313807
"ENABLE_ATOMIC_WRITE",
1365413808
#endif
1365513809
#ifdef SQLITE_ENABLE_CEROD
@@ -13972,10 +14126,17 @@
1397214126
** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
1397314127
** is not required for a match.
1397414128
*/
1397514129
SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
1397614130
int i, n;
14131
+
14132
+#ifdef SQLITE_ENABLE_API_ARMOR
14133
+ if( zOptName==0 ){
14134
+ (void)SQLITE_MISUSE_BKPT;
14135
+ return 0;
14136
+ }
14137
+#endif
1397714138
if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
1397814139
n = sqlite3Strlen30(zOptName);
1397914140
1398014141
/* Since ArraySize(azCompileOpt) is normally in single digits, a
1398114142
** linear search is adequate. No need for a binary search. */
@@ -14153,10 +14314,11 @@
1415314314
typedef struct VdbeFrame VdbeFrame;
1415414315
struct VdbeFrame {
1415514316
Vdbe *v; /* VM this frame belongs to */
1415614317
VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
1415714318
Op *aOp; /* Program instructions for parent frame */
14319
+ i64 *anExec; /* Event counters from parent frame */
1415814320
Mem *aMem; /* Array of memory cells for parent frame */
1415914321
u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
1416014322
VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
1416114323
void *token; /* Copy of SubProgram.token */
1416214324
i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
@@ -14165,11 +14327,12 @@
1416514327
int nOp; /* Size of aOp array */
1416614328
int nMem; /* Number of entries in aMem */
1416714329
int nOnceFlag; /* Number of entries in aOnceFlag */
1416814330
int nChildMem; /* Number of memory cells for child frame */
1416914331
int nChildCsr; /* Number of cursors for child frame */
14170
- int nChange; /* Statement changes (Vdbe.nChanges) */
14332
+ int nChange; /* Statement changes (Vdbe.nChange) */
14333
+ int nDbChange; /* Value of db->nChange */
1417114334
};
1417214335
1417314336
#define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
1417414337
1417514338
/*
@@ -14316,10 +14479,20 @@
1431614479
/* A bitfield type for use inside of structures. Always follow with :N where
1431714480
** N is the number of bits.
1431814481
*/
1431914482
typedef unsigned bft; /* Bit Field Type */
1432014483
14484
+typedef struct ScanStatus ScanStatus;
14485
+struct ScanStatus {
14486
+ int addrExplain; /* OP_Explain for loop */
14487
+ int addrLoop; /* Address of "loops" counter */
14488
+ int addrVisit; /* Address of "rows visited" counter */
14489
+ int iSelectID; /* The "Select-ID" for this loop */
14490
+ LogEst nEst; /* Estimated output rows per loop */
14491
+ char *zName; /* Name of table or index */
14492
+};
14493
+
1432114494
/*
1432214495
** An instance of the virtual machine. This structure contains the complete
1432314496
** state of the virtual machine.
1432414497
**
1432514498
** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
@@ -14388,10 +14561,15 @@
1438814561
u32 expmask; /* Binding to these vars invalidates VM */
1438914562
SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
1439014563
int nOnceFlag; /* Size of array aOnceFlag[] */
1439114564
u8 *aOnceFlag; /* Flags for OP_Once */
1439214565
AuxData *pAuxData; /* Linked list of auxdata allocations */
14566
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
14567
+ i64 *anExec; /* Number of times each op has been executed */
14568
+ int nScan; /* Entries in aScan[] */
14569
+ ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
14570
+#endif
1439314571
};
1439414572
1439514573
/*
1439614574
** The following are allowed values for Vdbe.magic
1439714575
*/
@@ -14577,10 +14755,13 @@
1457714755
SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
1457814756
wsdStatInit;
1457914757
if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
1458014758
return SQLITE_MISUSE_BKPT;
1458114759
}
14760
+#ifdef SQLITE_ENABLE_API_ARMOR
14761
+ if( pCurrent==0 || pHighwater==0 ) return SQLITE_MISUSE_BKPT;
14762
+#endif
1458214763
*pCurrent = wsdStat.nowValue[op];
1458314764
*pHighwater = wsdStat.mxValue[op];
1458414765
if( resetFlag ){
1458514766
wsdStat.mxValue[op] = wsdStat.nowValue[op];
1458614767
}
@@ -14596,10 +14777,15 @@
1459614777
int *pCurrent, /* Write current value here */
1459714778
int *pHighwater, /* Write high-water mark here */
1459814779
int resetFlag /* Reset high-water mark if true */
1459914780
){
1460014781
int rc = SQLITE_OK; /* Return code */
14782
+#ifdef SQLITE_ENABLE_API_ARMOR
14783
+ if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwater==0 ){
14784
+ return SQLITE_MISUSE_BKPT;
14785
+ }
14786
+#endif
1460114787
sqlite3_mutex_enter(db->mutex);
1460214788
switch( op ){
1460314789
case SQLITE_DBSTATUS_LOOKASIDE_USED: {
1460414790
*pCurrent = db->lookaside.nOut;
1460514791
*pHighwater = db->lookaside.mxOut;
@@ -14774,11 +14960,11 @@
1477414960
**
1477514961
** There is only one exported symbol in this file - the function
1477614962
** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
1477714963
** All other code has file scope.
1477814964
**
14779
-** SQLite processes all times and dates as Julian Day numbers. The
14965
+** SQLite processes all times and dates as julian day numbers. The
1478014966
** dates and times are stored as the number of days since noon
1478114967
** in Greenwich on November 24, 4714 B.C. according to the Gregorian
1478214968
** calendar system.
1478314969
**
1478414970
** 1970-01-01 00:00:00 is JD 2440587.5
@@ -14789,11 +14975,11 @@
1478914975
** be represented, even though julian day numbers allow a much wider
1479014976
** range of dates.
1479114977
**
1479214978
** The Gregorian calendar system is used for all dates and times,
1479314979
** even those that predate the Gregorian calendar. Historians usually
14794
-** use the Julian calendar for dates prior to 1582-10-15 and for some
14980
+** use the julian calendar for dates prior to 1582-10-15 and for some
1479514981
** dates afterwards, depending on locale. Beware of this difference.
1479614982
**
1479714983
** The conversion algorithms are implemented based on descriptions
1479814984
** in the following text:
1479914985
**
@@ -15061,11 +15247,11 @@
1506115247
return 1;
1506215248
}
1506315249
}
1506415250
1506515251
/*
15066
-** Attempt to parse the given string into a Julian Day Number. Return
15252
+** Attempt to parse the given string into a julian day number. Return
1506715253
** the number of errors.
1506815254
**
1506915255
** The following are acceptable forms for the input string:
1507015256
**
1507115257
** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
@@ -15632,11 +15818,11 @@
1563215818
**
1563315819
** %d day of month
1563415820
** %f ** fractional seconds SS.SSS
1563515821
** %H hour 00-24
1563615822
** %j day of year 000-366
15637
-** %J ** Julian day number
15823
+** %J ** julian day number
1563815824
** %m month 01-12
1563915825
** %M minute 00-59
1564015826
** %s seconds since 1970-01-01
1564115827
** %S seconds 00-59
1564215828
** %w day of week 0-6 sunday==0
@@ -16257,10 +16443,14 @@
1625716443
MUTEX_LOGIC(sqlite3_mutex *mutex;)
1625816444
#ifndef SQLITE_OMIT_AUTOINIT
1625916445
int rc = sqlite3_initialize();
1626016446
if( rc ) return rc;
1626116447
#endif
16448
+#ifdef SQLITE_ENABLE_API_ARMOR
16449
+ if( pVfs==0 ) return SQLITE_MISUSE_BKPT;
16450
+#endif
16451
+
1626216452
MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
1626316453
sqlite3_mutex_enter(mutex);
1626416454
vfsUnlink(pVfs);
1626516455
if( makeDflt || vfsList==0 ){
1626616456
pVfs->pNext = vfsList;
@@ -18614,10 +18804,11 @@
1861418804
** Retrieve a pointer to a static mutex or allocate a new dynamic one.
1861518805
*/
1861618806
SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
1861718807
#ifndef SQLITE_OMIT_AUTOINIT
1861818808
if( id<=SQLITE_MUTEX_RECURSIVE && sqlite3_initialize() ) return 0;
18809
+ if( id>SQLITE_MUTEX_RECURSIVE && sqlite3MutexInit() ) return 0;
1861918810
#endif
1862018811
return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
1862118812
}
1862218813
1862318814
SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
@@ -19070,12 +19261,16 @@
1907019261
pthread_mutex_init(&p->mutex, 0);
1907119262
}
1907219263
break;
1907319264
}
1907419265
default: {
19075
- assert( iType-2 >= 0 );
19076
- assert( iType-2 < ArraySize(staticMutexes) );
19266
+#ifdef SQLITE_ENABLE_API_ARMOR
19267
+ if( iType-2<0 || iType-2>=ArraySize(staticMutexes) ){
19268
+ (void)SQLITE_MISUSE_BKPT;
19269
+ return 0;
19270
+ }
19271
+#endif
1907719272
p = &staticMutexes[iType-2];
1907819273
#if SQLITE_MUTEX_NREF
1907919274
p->id = iType;
1908019275
#endif
1908119276
break;
@@ -20293,15 +20488,16 @@
2029320488
}
2029420489
assert( sqlite3_mutex_notheld(mem0.mutex) );
2029520490
2029620491
2029720492
#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
20298
- /* Verify that no more than two scratch allocations per thread
20299
- ** are outstanding at one time. (This is only checked in the
20300
- ** single-threaded case since checking in the multi-threaded case
20301
- ** would be much more complicated.) */
20302
- assert( scratchAllocOut<=1 );
20493
+ /* EVIDENCE-OF: R-12970-05880 SQLite will not use more than one scratch
20494
+ ** buffers per thread.
20495
+ **
20496
+ ** This can only be checked in single-threaded mode.
20497
+ */
20498
+ assert( scratchAllocOut==0 );
2030320499
if( p ) scratchAllocOut++;
2030420500
#endif
2030520501
2030620502
return p;
2030720503
}
@@ -20956,10 +21152,17 @@
2095621152
etByte flag_rtz; /* True if trailing zeros should be removed */
2095721153
#endif
2095821154
PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */
2095921155
char buf[etBUFSIZE]; /* Conversion buffer */
2096021156
21157
+#ifdef SQLITE_ENABLE_API_ARMOR
21158
+ if( ap==0 ){
21159
+ (void)SQLITE_MISUSE_BKPT;
21160
+ sqlite3StrAccumReset(pAccum);
21161
+ return;
21162
+ }
21163
+#endif
2096121164
bufpt = 0;
2096221165
if( bFlags ){
2096321166
if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){
2096421167
pArgList = va_arg(ap, PrintfArguments*);
2096521168
}
@@ -21496,10 +21699,15 @@
2149621699
return N;
2149721700
}else{
2149821701
char *zOld = (p->zText==p->zBase ? 0 : p->zText);
2149921702
i64 szNew = p->nChar;
2150021703
szNew += N + 1;
21704
+ if( szNew+p->nChar<=p->mxAlloc ){
21705
+ /* Force exponential buffer size growth as long as it does not overflow,
21706
+ ** to avoid having to call this routine too often */
21707
+ szNew += p->nChar;
21708
+ }
2150121709
if( szNew > p->mxAlloc ){
2150221710
sqlite3StrAccumReset(p);
2150321711
setStrAccumError(p, STRACCUM_TOOBIG);
2150421712
return 0;
2150521713
}else{
@@ -21512,10 +21720,11 @@
2151221720
}
2151321721
if( zNew ){
2151421722
assert( p->zText!=0 || p->nChar==0 );
2151521723
if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar);
2151621724
p->zText = zNew;
21725
+ p->nAlloc = sqlite3DbMallocSize(p->db, zNew);
2151721726
}else{
2151821727
sqlite3StrAccumReset(p);
2151921728
setStrAccumError(p, STRACCUM_NOMEM);
2152021729
return 0;
2152121730
}
@@ -21681,10 +21890,17 @@
2168121890
*/
2168221891
SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
2168321892
char *z;
2168421893
char zBase[SQLITE_PRINT_BUF_SIZE];
2168521894
StrAccum acc;
21895
+
21896
+#ifdef SQLITE_ENABLE_API_ARMOR
21897
+ if( zFormat==0 ){
21898
+ (void)SQLITE_MISUSE_BKPT;
21899
+ return 0;
21900
+ }
21901
+#endif
2168621902
#ifndef SQLITE_OMIT_AUTOINIT
2168721903
if( sqlite3_initialize() ) return 0;
2168821904
#endif
2168921905
sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
2169021906
acc.useMalloc = 2;
@@ -21723,10 +21939,17 @@
2172321939
** sqlite3_vsnprintf() is the varargs version.
2172421940
*/
2172521941
SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
2172621942
StrAccum acc;
2172721943
if( n<=0 ) return zBuf;
21944
+#ifdef SQLITE_ENABLE_API_ARMOR
21945
+ if( zBuf==0 || zFormat==0 ) {
21946
+ (void)SQLITE_MISUSE_BKPT;
21947
+ if( zBuf && n>0 ) zBuf[0] = 0;
21948
+ return zBuf;
21949
+ }
21950
+#endif
2172821951
sqlite3StrAccumInit(&acc, zBuf, n, 0);
2172921952
acc.useMalloc = 0;
2173021953
sqlite3VXPrintf(&acc, 0, zFormat, ap);
2173121954
return sqlite3StrAccumFinish(&acc);
2173221955
}
@@ -21914,15 +22137,23 @@
2191422137
#else
2191522138
# define wsdPrng sqlite3Prng
2191622139
#endif
2191722140
2191822141
#if SQLITE_THREADSAFE
21919
- sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
22142
+ sqlite3_mutex *mutex;
22143
+#endif
22144
+
22145
+#ifndef SQLITE_OMIT_AUTOINIT
22146
+ if( sqlite3_initialize() ) return;
22147
+#endif
22148
+
22149
+#if SQLITE_THREADSAFE
22150
+ mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
22151
+#endif
22152
+
2192022153
sqlite3_mutex_enter(mutex);
21921
-#endif
21922
-
21923
- if( N<=0 ){
22154
+ if( N<=0 || pBuf==0 ){
2192422155
wsdPrng.isInit = 0;
2192522156
sqlite3_mutex_leave(mutex);
2192622157
return;
2192722158
}
2192822159
@@ -23040,17 +23271,27 @@
2304023271
** case-independent fashion, using the same definition of "case
2304123272
** independence" that SQLite uses internally when comparing identifiers.
2304223273
*/
2304323274
SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){
2304423275
register unsigned char *a, *b;
23276
+ if( zLeft==0 ){
23277
+ return zRight ? -1 : 0;
23278
+ }else if( zRight==0 ){
23279
+ return 1;
23280
+ }
2304523281
a = (unsigned char *)zLeft;
2304623282
b = (unsigned char *)zRight;
2304723283
while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
2304823284
return UpperToLower[*a] - UpperToLower[*b];
2304923285
}
2305023286
SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
2305123287
register unsigned char *a, *b;
23288
+ if( zLeft==0 ){
23289
+ return zRight ? -1 : 0;
23290
+ }else if( zRight==0 ){
23291
+ return 1;
23292
+ }
2305223293
a = (unsigned char *)zLeft;
2305323294
b = (unsigned char *)zRight;
2305423295
while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
2305523296
return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
2305623297
}
@@ -32579,10 +32820,15 @@
3257932820
#if !SQLITE_OS_WINNT && !defined(SQLITE_OMIT_WAL)
3258032821
# error "WAL mode requires support from the Windows NT kernel, compile\
3258132822
with SQLITE_OMIT_WAL."
3258232823
#endif
3258332824
32825
+#if !SQLITE_OS_WINNT && SQLITE_MAX_MMAP_SIZE>0
32826
+# error "Memory mapped files require support from the Windows NT kernel,\
32827
+ compile with SQLITE_MAX_MMAP_SIZE=0."
32828
+#endif
32829
+
3258432830
/*
3258532831
** Are most of the Win32 ANSI APIs available (i.e. with certain exceptions
3258632832
** based on the sub-platform)?
3258732833
*/
3258832834
#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && !defined(SQLITE_WIN32_NO_ANSI)
@@ -32708,14 +32954,15 @@
3270832954
# define winGetDirSep() '\\'
3270932955
#endif
3271032956
3271132957
/*
3271232958
** Do we need to manually define the Win32 file mapping APIs for use with WAL
32713
-** mode (e.g. these APIs are available in the Windows CE SDK; however, they
32714
-** are not present in the header file)?
32959
+** mode or memory mapped files (e.g. these APIs are available in the Windows
32960
+** CE SDK; however, they are not present in the header file)?
3271532961
*/
32716
-#if SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL)
32962
+#if SQLITE_WIN32_FILEMAPPING_API && \
32963
+ (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
3271732964
/*
3271832965
** Two of the file mapping APIs are different under WinRT. Figure out which
3271932966
** set we need.
3272032967
*/
3272132968
#if SQLITE_OS_WINRT
@@ -32739,11 +32986,11 @@
3273932986
3274032987
/*
3274132988
** This file mapping API is common to both Win32 and WinRT.
3274232989
*/
3274332990
WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID);
32744
-#endif /* SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL) */
32991
+#endif /* SQLITE_WIN32_FILEMAPPING_API */
3274532992
3274632993
/*
3274732994
** Some Microsoft compilers lack this definition.
3274832995
*/
3274932996
#ifndef INVALID_FILE_ATTRIBUTES
@@ -33032,21 +33279,21 @@
3303233279
3303333280
#define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \
3303433281
LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent)
3303533282
3303633283
#if (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_ANSI) && \
33037
- !defined(SQLITE_OMIT_WAL))
33284
+ (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
3303833285
{ "CreateFileMappingA", (SYSCALL)CreateFileMappingA, 0 },
3303933286
#else
3304033287
{ "CreateFileMappingA", (SYSCALL)0, 0 },
3304133288
#endif
3304233289
3304333290
#define osCreateFileMappingA ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
3304433291
DWORD,DWORD,DWORD,LPCSTR))aSyscall[6].pCurrent)
3304533292
3304633293
#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \
33047
- !defined(SQLITE_OMIT_WAL))
33294
+ (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
3304833295
{ "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 },
3304933296
#else
3305033297
{ "CreateFileMappingW", (SYSCALL)0, 0 },
3305133298
#endif
3305233299
@@ -33382,11 +33629,12 @@
3338233629
#ifndef osLockFileEx
3338333630
#define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \
3338433631
LPOVERLAPPED))aSyscall[48].pCurrent)
3338533632
#endif
3338633633
33387
-#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL))
33634
+#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && \
33635
+ (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
3338833636
{ "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 },
3338933637
#else
3339033638
{ "MapViewOfFile", (SYSCALL)0, 0 },
3339133639
#endif
3339233640
@@ -33452,11 +33700,11 @@
3345233700
#endif
3345333701
3345433702
#define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
3345533703
LPOVERLAPPED))aSyscall[58].pCurrent)
3345633704
33457
-#if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL)
33705
+#if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
3345833706
{ "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 },
3345933707
#else
3346033708
{ "UnmapViewOfFile", (SYSCALL)0, 0 },
3346133709
#endif
3346233710
@@ -33515,11 +33763,11 @@
3351533763
#endif
3351633764
3351733765
#define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \
3351833766
FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent)
3351933767
33520
-#if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)
33768
+#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
3352133769
{ "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 },
3352233770
#else
3352333771
{ "MapViewOfFileFromApp", (SYSCALL)0, 0 },
3352433772
#endif
3352533773
@@ -33579,11 +33827,11 @@
3357933827
3358033828
{ "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 },
3358133829
3358233830
#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent)
3358333831
33584
-#if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)
33832
+#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
3358533833
{ "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 },
3358633834
#else
3358733835
{ "CreateFileMappingFromApp", (SYSCALL)0, 0 },
3358833836
#endif
3358933837
@@ -39155,10 +39403,17 @@
3915539403
*/
3915639404
SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
3915739405
assert( pCache->pCache!=0 );
3915839406
sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
3915939407
}
39408
+
39409
+/*
39410
+** Return the size of the header added by this middleware layer
39411
+** in the page-cache hierarchy.
39412
+*/
39413
+SQLITE_PRIVATE int sqlite3HeaderSizePcache(void){ return sizeof(PgHdr); }
39414
+
3916039415
3916139416
#if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
3916239417
/*
3916339418
** For all dirty pages currently in the cache, invoke the specified
3916439419
** callback. This is only used if the SQLITE_CHECK_PAGES macro is
@@ -40154,10 +40409,15 @@
4015440409
pcache1Shrink /* xShrink */
4015540410
};
4015640411
sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods);
4015740412
}
4015840413
40414
+/*
40415
+** Return the size of the header on each page of this PCACHE implementation.
40416
+*/
40417
+SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return sizeof(PgHdr1); }
40418
+
4015940419
#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
4016040420
/*
4016140421
** This function is called to free superfluous dynamically allocated memory
4016240422
** held by the pager system. Memory in use by any SQLite pager allocated
4016340423
** by the current thread may be sqlite3_free()ed.
@@ -43763,11 +44023,11 @@
4376344023
** should be page numbers which are never 0xffffffff. So filling
4376444024
** pPager->dbFileVers[] with all 0xff bytes should suffice.
4376544025
**
4376644026
** For an encrypted database, the situation is more complex: bytes
4376744027
** 24..39 of the database are white noise. But the probability of
43768
- ** white noising equaling 16 bytes of 0xff is vanishingly small so
44028
+ ** white noise equaling 16 bytes of 0xff is vanishingly small so
4376944029
** we should still be ok.
4377044030
*/
4377144031
memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
4377244032
}else{
4377344033
u8 *dbFileVers = &((u8*)pPg->pData)[24];
@@ -47710,10 +47970,22 @@
4771047970
}
4771147971
4771247972
return SQLITE_OK;
4771347973
}
4771447974
#endif
47975
+
47976
+/*
47977
+** The page handle passed as the first argument refers to a dirty page
47978
+** with a page number other than iNew. This function changes the page's
47979
+** page number to iNew and sets the value of the PgHdr.flags field to
47980
+** the value passed as the third parameter.
47981
+*/
47982
+SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){
47983
+ assert( pPg->pgno!=iNew );
47984
+ pPg->flags = flags;
47985
+ sqlite3PcacheMove(pPg, iNew);
47986
+}
4771547987
4771647988
/*
4771747989
** Return a pointer to the data for the specified page.
4771847990
*/
4771947991
SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
@@ -48108,10 +48380,11 @@
4810848380
SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
4810948381
assert( pPager->eState>=PAGER_READER );
4811048382
return sqlite3WalFramesize(pPager->pWal);
4811148383
}
4811248384
#endif
48385
+
4811348386
4811448387
#endif /* SQLITE_OMIT_DISKIO */
4811548388
4811648389
/************** End of pager.c ***********************************************/
4811748390
/************** Begin file wal.c *********************************************/
@@ -49618,11 +49891,11 @@
4961849891
4961949892
/*
4962049893
** Free an iterator allocated by walIteratorInit().
4962149894
*/
4962249895
static void walIteratorFree(WalIterator *p){
49623
- sqlite3ScratchFree(p);
49896
+ sqlite3_free(p);
4962449897
}
4962549898
4962649899
/*
4962749900
** Construct a WalInterator object that can be used to loop over all
4962849901
** pages in the WAL in ascending order. The caller must hold the checkpoint
@@ -49653,21 +49926,21 @@
4965349926
/* Allocate space for the WalIterator object. */
4965449927
nSegment = walFramePage(iLast) + 1;
4965549928
nByte = sizeof(WalIterator)
4965649929
+ (nSegment-1)*sizeof(struct WalSegment)
4965749930
+ iLast*sizeof(ht_slot);
49658
- p = (WalIterator *)sqlite3ScratchMalloc(nByte);
49931
+ p = (WalIterator *)sqlite3_malloc(nByte);
4965949932
if( !p ){
4966049933
return SQLITE_NOMEM;
4966149934
}
4966249935
memset(p, 0, nByte);
4966349936
p->nSegment = nSegment;
4966449937
4966549938
/* Allocate temporary space used by the merge-sort routine. This block
4966649939
** of memory will be freed before this function returns.
4966749940
*/
49668
- aTmp = (ht_slot *)sqlite3ScratchMalloc(
49941
+ aTmp = (ht_slot *)sqlite3_malloc(
4966949942
sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
4967049943
);
4967149944
if( !aTmp ){
4967249945
rc = SQLITE_NOMEM;
4967349946
}
@@ -49700,11 +49973,11 @@
4970049973
p->aSegment[i].nEntry = nEntry;
4970149974
p->aSegment[i].aIndex = aIndex;
4970249975
p->aSegment[i].aPgno = (u32 *)aPgno;
4970349976
}
4970449977
}
49705
- sqlite3ScratchFree(aTmp);
49978
+ sqlite3_free(aTmp);
4970649979
4970749980
if( rc!=SQLITE_OK ){
4970849981
walIteratorFree(p);
4970949982
}
4971049983
*pp = p;
@@ -53331,10 +53604,15 @@
5333153604
/*
5333253605
** Defragment the page given. All Cells are moved to the
5333353606
** end of the page and all free space is collected into one
5333453607
** big FreeBlk that occurs in between the header and cell
5333553608
** pointer array and the cell content area.
53609
+**
53610
+** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a
53611
+** b-tree page so that there are no freeblocks or fragment bytes, all
53612
+** unused bytes are contained in the unallocated space region, and all
53613
+** cells are packed tightly at the end of the page.
5333653614
*/
5333753615
static int defragmentPage(MemPage *pPage){
5333853616
int i; /* Loop counter */
5333953617
int pc; /* Address of the i-th cell */
5334053618
int hdr; /* Offset to the page header */
@@ -53343,28 +53621,27 @@
5334353621
int cellOffset; /* Offset to the cell pointer array */
5334453622
int cbrk; /* Offset to the cell content area */
5334553623
int nCell; /* Number of cells on the page */
5334653624
unsigned char *data; /* The page data */
5334753625
unsigned char *temp; /* Temp area for cell content */
53626
+ unsigned char *src; /* Source of content */
5334853627
int iCellFirst; /* First allowable cell index */
5334953628
int iCellLast; /* Last possible cell index */
5335053629
5335153630
5335253631
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
5335353632
assert( pPage->pBt!=0 );
5335453633
assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
5335553634
assert( pPage->nOverflow==0 );
5335653635
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53357
- temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
53358
- data = pPage->aData;
53636
+ temp = 0;
53637
+ src = data = pPage->aData;
5335953638
hdr = pPage->hdrOffset;
5336053639
cellOffset = pPage->cellOffset;
5336153640
nCell = pPage->nCell;
5336253641
assert( nCell==get2byte(&data[hdr+3]) );
5336353642
usableSize = pPage->pBt->usableSize;
53364
- cbrk = get2byte(&data[hdr+5]);
53365
- memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
5336653643
cbrk = usableSize;
5336753644
iCellFirst = cellOffset + 2*nCell;
5336853645
iCellLast = usableSize - 4;
5336953646
for(i=0; i<nCell; i++){
5337053647
u8 *pAddr; /* The i-th cell pointer */
@@ -53379,11 +53656,11 @@
5337953656
if( pc<iCellFirst || pc>iCellLast ){
5338053657
return SQLITE_CORRUPT_BKPT;
5338153658
}
5338253659
#endif
5338353660
assert( pc>=iCellFirst && pc<=iCellLast );
53384
- size = cellSizePtr(pPage, &temp[pc]);
53661
+ size = cellSizePtr(pPage, &src[pc]);
5338553662
cbrk -= size;
5338653663
#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
5338753664
if( cbrk<iCellFirst ){
5338853665
return SQLITE_CORRUPT_BKPT;
5338953666
}
@@ -53393,12 +53670,20 @@
5339353670
}
5339453671
#endif
5339553672
assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
5339653673
testcase( cbrk+size==usableSize );
5339753674
testcase( pc+size==usableSize );
53398
- memcpy(&data[cbrk], &temp[pc], size);
5339953675
put2byte(pAddr, cbrk);
53676
+ if( temp==0 ){
53677
+ int x;
53678
+ if( cbrk==pc ) continue;
53679
+ temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
53680
+ x = get2byte(&data[hdr+5]);
53681
+ memcpy(&temp[x], &data[x], (cbrk+size) - x);
53682
+ src = temp;
53683
+ }
53684
+ memcpy(&data[cbrk], &src[pc], size);
5340053685
}
5340153686
assert( cbrk>=iCellFirst );
5340253687
put2byte(&data[hdr+5], cbrk);
5340353688
data[hdr+1] = 0;
5340453689
data[hdr+2] = 0;
@@ -53408,10 +53693,73 @@
5340853693
if( cbrk-iCellFirst!=pPage->nFree ){
5340953694
return SQLITE_CORRUPT_BKPT;
5341053695
}
5341153696
return SQLITE_OK;
5341253697
}
53698
+
53699
+/*
53700
+** Search the free-list on page pPg for space to store a cell nByte bytes in
53701
+** size. If one can be found, return a pointer to the space and remove it
53702
+** from the free-list.
53703
+**
53704
+** If no suitable space can be found on the free-list, return NULL.
53705
+**
53706
+** This function may detect corruption within pPg. If corruption is
53707
+** detected then *pRc is set to SQLITE_CORRUPT and NULL is returned.
53708
+**
53709
+** If a slot of at least nByte bytes is found but cannot be used because
53710
+** there are already at least 60 fragmented bytes on the page, return NULL.
53711
+** In this case, if pbDefrag parameter is not NULL, set *pbDefrag to true.
53712
+*/
53713
+static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc, int *pbDefrag){
53714
+ const int hdr = pPg->hdrOffset;
53715
+ u8 * const aData = pPg->aData;
53716
+ int iAddr;
53717
+ int pc;
53718
+ int usableSize = pPg->pBt->usableSize;
53719
+
53720
+ for(iAddr=hdr+1; (pc = get2byte(&aData[iAddr]))>0; iAddr=pc){
53721
+ int size; /* Size of the free slot */
53722
+ /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
53723
+ ** increasing offset. */
53724
+ if( pc>usableSize-4 || pc<iAddr+4 ){
53725
+ *pRc = SQLITE_CORRUPT_BKPT;
53726
+ return 0;
53727
+ }
53728
+ /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each
53729
+ ** freeblock form a big-endian integer which is the size of the freeblock
53730
+ ** in bytes, including the 4-byte header. */
53731
+ size = get2byte(&aData[pc+2]);
53732
+ if( size>=nByte ){
53733
+ int x = size - nByte;
53734
+ testcase( x==4 );
53735
+ testcase( x==3 );
53736
+ if( x<4 ){
53737
+ /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total
53738
+ ** number of bytes in fragments may not exceed 60. */
53739
+ if( aData[hdr+7]>=60 ){
53740
+ if( pbDefrag ) *pbDefrag = 1;
53741
+ return 0;
53742
+ }
53743
+ /* Remove the slot from the free-list. Update the number of
53744
+ ** fragmented bytes within the page. */
53745
+ memcpy(&aData[iAddr], &aData[pc], 2);
53746
+ aData[hdr+7] += (u8)x;
53747
+ }else if( size+pc > usableSize ){
53748
+ *pRc = SQLITE_CORRUPT_BKPT;
53749
+ return 0;
53750
+ }else{
53751
+ /* The slot remains on the free-list. Reduce its size to account
53752
+ ** for the portion used by the new allocation. */
53753
+ put2byte(&aData[pc+2], x);
53754
+ }
53755
+ return &aData[pc + x];
53756
+ }
53757
+ }
53758
+
53759
+ return 0;
53760
+}
5341353761
5341453762
/*
5341553763
** Allocate nByte bytes of space from within the B-Tree page passed
5341653764
** as the first argument. Write into *pIdx the index into pPage->aData[]
5341753765
** of the first byte of allocated space. Return either SQLITE_OK or
@@ -53426,79 +53774,57 @@
5342653774
*/
5342753775
static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
5342853776
const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */
5342953777
u8 * const data = pPage->aData; /* Local cache of pPage->aData */
5343053778
int top; /* First byte of cell content area */
53779
+ int rc = SQLITE_OK; /* Integer return code */
5343153780
int gap; /* First byte of gap between cell pointers and cell content */
53432
- int rc; /* Integer return code */
53433
- int usableSize; /* Usable size of the page */
5343453781
5343553782
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
5343653783
assert( pPage->pBt );
5343753784
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
5343853785
assert( nByte>=0 ); /* Minimum cell size is 4 */
5343953786
assert( pPage->nFree>=nByte );
5344053787
assert( pPage->nOverflow==0 );
53441
- usableSize = pPage->pBt->usableSize;
53442
- assert( nByte < usableSize-8 );
53788
+ assert( nByte < (int)(pPage->pBt->usableSize-8) );
5344353789
5344453790
assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
5344553791
gap = pPage->cellOffset + 2*pPage->nCell;
5344653792
assert( gap<=65536 );
53447
- top = get2byte(&data[hdr+5]);
53448
- if( gap>top ){
53449
- if( top==0 ){
53450
- top = 65536;
53451
- }else{
53452
- return SQLITE_CORRUPT_BKPT;
53453
- }
53454
- }
53793
+ /* EVIDENCE-OF: R-29356-02391 If the database uses a 65536-byte page size
53794
+ ** and the reserved space is zero (the usual value for reserved space)
53795
+ ** then the cell content offset of an empty page wants to be 65536.
53796
+ ** However, that integer is too large to be stored in a 2-byte unsigned
53797
+ ** integer, so a value of 0 is used in its place. */
53798
+ top = get2byteNotZero(&data[hdr+5]);
53799
+ if( gap>top ) return SQLITE_CORRUPT_BKPT;
5345553800
5345653801
/* If there is enough space between gap and top for one more cell pointer
5345753802
** array entry offset, and if the freelist is not empty, then search the
5345853803
** freelist looking for a free slot big enough to satisfy the request.
5345953804
*/
5346053805
testcase( gap+2==top );
5346153806
testcase( gap+1==top );
5346253807
testcase( gap==top );
5346353808
if( gap+2<=top && (data[hdr+1] || data[hdr+2]) ){
53464
- int pc, addr;
53465
- for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
53466
- int size; /* Size of the free slot */
53467
- if( pc>usableSize-4 || pc<addr+4 ){
53468
- return SQLITE_CORRUPT_BKPT;
53469
- }
53470
- size = get2byte(&data[pc+2]);
53471
- if( size>=nByte ){
53472
- int x = size - nByte;
53473
- testcase( x==4 );
53474
- testcase( x==3 );
53475
- if( x<4 ){
53476
- if( data[hdr+7]>=60 ) goto defragment_page;
53477
- /* Remove the slot from the free-list. Update the number of
53478
- ** fragmented bytes within the page. */
53479
- memcpy(&data[addr], &data[pc], 2);
53480
- data[hdr+7] += (u8)x;
53481
- }else if( size+pc > usableSize ){
53482
- return SQLITE_CORRUPT_BKPT;
53483
- }else{
53484
- /* The slot remains on the free-list. Reduce its size to account
53485
- ** for the portion used by the new allocation. */
53486
- put2byte(&data[pc+2], x);
53487
- }
53488
- *pIdx = pc + x;
53489
- return SQLITE_OK;
53490
- }
53809
+ int bDefrag = 0;
53810
+ u8 *pSpace = pageFindSlot(pPage, nByte, &rc, &bDefrag);
53811
+ if( rc ) return rc;
53812
+ if( bDefrag ) goto defragment_page;
53813
+ if( pSpace ){
53814
+ assert( pSpace>=data && (pSpace - data)<65536 );
53815
+ *pIdx = (int)(pSpace - data);
53816
+ return SQLITE_OK;
5349153817
}
5349253818
}
5349353819
5349453820
/* The request could not be fulfilled using a freelist slot. Check
5349553821
** to see if defragmentation is necessary.
5349653822
*/
5349753823
testcase( gap+2+nByte==top );
5349853824
if( gap+2+nByte>top ){
53499
-defragment_page:
53825
+ defragment_page:
5350053826
testcase( pPage->nCell==0 );
5350153827
rc = defragmentPage(pPage);
5350253828
if( rc ) return rc;
5350353829
top = get2byteNotZero(&data[hdr+5]);
5350453830
assert( gap+nByte<=top );
@@ -53542,11 +53868,11 @@
5354253868
unsigned char *data = pPage->aData; /* Page content */
5354353869
5354453870
assert( pPage->pBt!=0 );
5354553871
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
5354653872
assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize );
53547
- assert( iEnd <= pPage->pBt->usableSize );
53873
+ assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );
5354853874
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
5354953875
assert( iSize>=4 ); /* Minimum cell size is 4 */
5355053876
assert( iStart<=iLast );
5355153877
5355253878
/* Overwrite deleted information with zeros when the secure_delete
@@ -53637,22 +53963,36 @@
5363753963
pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
5363853964
flagByte &= ~PTF_LEAF;
5363953965
pPage->childPtrSize = 4-4*pPage->leaf;
5364053966
pBt = pPage->pBt;
5364153967
if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
53968
+ /* EVIDENCE-OF: R-03640-13415 A value of 5 means the page is an interior
53969
+ ** table b-tree page. */
53970
+ assert( (PTF_LEAFDATA|PTF_INTKEY)==5 );
53971
+ /* EVIDENCE-OF: R-20501-61796 A value of 13 means the page is a leaf
53972
+ ** table b-tree page. */
53973
+ assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 );
5364253974
pPage->intKey = 1;
5364353975
pPage->intKeyLeaf = pPage->leaf;
5364453976
pPage->noPayload = !pPage->leaf;
5364553977
pPage->maxLocal = pBt->maxLeaf;
5364653978
pPage->minLocal = pBt->minLeaf;
5364753979
}else if( flagByte==PTF_ZERODATA ){
53980
+ /* EVIDENCE-OF: R-27225-53936 A value of 2 means the page is an interior
53981
+ ** index b-tree page. */
53982
+ assert( (PTF_ZERODATA)==2 );
53983
+ /* EVIDENCE-OF: R-16571-11615 A value of 10 means the page is a leaf
53984
+ ** index b-tree page. */
53985
+ assert( (PTF_ZERODATA|PTF_LEAF)==10 );
5364853986
pPage->intKey = 0;
5364953987
pPage->intKeyLeaf = 0;
5365053988
pPage->noPayload = 0;
5365153989
pPage->maxLocal = pBt->maxLocal;
5365253990
pPage->minLocal = pBt->minLocal;
5365353991
}else{
53992
+ /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is
53993
+ ** an error. */
5365453994
return SQLITE_CORRUPT_BKPT;
5365553995
}
5365653996
pPage->max1bytePayload = pBt->max1bytePayload;
5365753997
return SQLITE_OK;
5365853998
}
@@ -53688,25 +54028,37 @@
5368854028
5368954029
pBt = pPage->pBt;
5369054030
5369154031
hdr = pPage->hdrOffset;
5369254032
data = pPage->aData;
54033
+ /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating
54034
+ ** the b-tree page type. */
5369354035
if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
5369454036
assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
5369554037
pPage->maskPage = (u16)(pBt->pageSize - 1);
5369654038
pPage->nOverflow = 0;
5369754039
usableSize = pBt->usableSize;
53698
- pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
54040
+ pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize;
5369954041
pPage->aDataEnd = &data[usableSize];
5370054042
pPage->aCellIdx = &data[cellOffset];
54043
+ /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates
54044
+ ** the start of the cell content area. A zero value for this integer is
54045
+ ** interpreted as 65536. */
5370154046
top = get2byteNotZero(&data[hdr+5]);
54047
+ /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
54048
+ ** number of cells on the page. */
5370254049
pPage->nCell = get2byte(&data[hdr+3]);
5370354050
if( pPage->nCell>MX_CELL(pBt) ){
5370454051
/* To many cells for a single page. The page must be corrupt */
5370554052
return SQLITE_CORRUPT_BKPT;
5370654053
}
5370754054
testcase( pPage->nCell==MX_CELL(pBt) );
54055
+ /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only
54056
+ ** possible for a root page of a table that contains no rows) then the
54057
+ ** offset to the cell content area will equal the page size minus the
54058
+ ** bytes of reserved space. */
54059
+ assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB );
5370854060
5370954061
/* A malformed database page might cause us to read past the end
5371054062
** of page when parsing a cell.
5371154063
**
5371254064
** The following block of code checks early to see if a cell extends
@@ -53736,17 +54088,24 @@
5373654088
}
5373754089
if( !pPage->leaf ) iCellLast++;
5373854090
}
5373954091
#endif
5374054092
53741
- /* Compute the total free space on the page */
54093
+ /* Compute the total free space on the page
54094
+ ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the
54095
+ ** start of the first freeblock on the page, or is zero if there are no
54096
+ ** freeblocks. */
5374254097
pc = get2byte(&data[hdr+1]);
53743
- nFree = data[hdr+7] + top;
54098
+ nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */
5374454099
while( pc>0 ){
5374554100
u16 next, size;
5374654101
if( pc<iCellFirst || pc>iCellLast ){
53747
- /* Start of free block is off the page */
54102
+ /* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will
54103
+ ** always be at least one cell before the first freeblock.
54104
+ **
54105
+ ** Or, the freeblock is off the end of the page
54106
+ */
5374854107
return SQLITE_CORRUPT_BKPT;
5374954108
}
5375054109
next = get2byte(&data[pc]);
5375154110
size = get2byte(&data[pc+2]);
5375254111
if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
@@ -54148,10 +54507,13 @@
5414854507
pBt->pPage1 = 0;
5414954508
if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
5415054509
#ifdef SQLITE_SECURE_DELETE
5415154510
pBt->btsFlags |= BTS_SECURE_DELETE;
5415254511
#endif
54512
+ /* EVIDENCE-OF: R-51873-39618 The page size for a database file is
54513
+ ** determined by the 2-byte integer located at an offset of 16 bytes from
54514
+ ** the beginning of the database file. */
5415354515
pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
5415454516
if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
5415554517
|| ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
5415654518
pBt->pageSize = 0;
5415754519
#ifndef SQLITE_OMIT_AUTOVACUUM
@@ -54166,10 +54528,13 @@
5416654528
pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
5416754529
}
5416854530
#endif
5416954531
nReserve = 0;
5417054532
}else{
54533
+ /* EVIDENCE-OF: R-37497-42412 The size of the reserved region is
54534
+ ** determined by the one-byte unsigned integer found at an offset of 20
54535
+ ** into the database file header. */
5417154536
nReserve = zDbHeader[20];
5417254537
pBt->btsFlags |= BTS_PAGESIZE_FIXED;
5417354538
#ifndef SQLITE_OMIT_AUTOVACUUM
5417454539
pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
5417554540
pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
@@ -54675,10 +55040,13 @@
5467555040
if( nPage>0 ){
5467655041
u32 pageSize;
5467755042
u32 usableSize;
5467855043
u8 *page1 = pPage1->aData;
5467955044
rc = SQLITE_NOTADB;
55045
+ /* EVIDENCE-OF: R-43737-39999 Every valid SQLite database file begins
55046
+ ** with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d
55047
+ ** 61 74 20 33 00. */
5468055048
if( memcmp(page1, zMagicHeader, 16)!=0 ){
5468155049
goto page1_init_failed;
5468255050
}
5468355051
5468455052
#ifdef SQLITE_OMIT_WAL
@@ -54715,26 +55083,39 @@
5471555083
}
5471655084
rc = SQLITE_NOTADB;
5471755085
}
5471855086
#endif
5471955087
54720
- /* The maximum embedded fraction must be exactly 25%. And the minimum
54721
- ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
55088
+ /* EVIDENCE-OF: R-15465-20813 The maximum and minimum embedded payload
55089
+ ** fractions and the leaf payload fraction values must be 64, 32, and 32.
55090
+ **
5472255091
** The original design allowed these amounts to vary, but as of
5472355092
** version 3.6.0, we require them to be fixed.
5472455093
*/
5472555094
if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
5472655095
goto page1_init_failed;
5472755096
}
55097
+ /* EVIDENCE-OF: R-51873-39618 The page size for a database file is
55098
+ ** determined by the 2-byte integer located at an offset of 16 bytes from
55099
+ ** the beginning of the database file. */
5472855100
pageSize = (page1[16]<<8) | (page1[17]<<16);
55101
+ /* EVIDENCE-OF: R-25008-21688 The size of a page is a power of two
55102
+ ** between 512 and 65536 inclusive. */
5472955103
if( ((pageSize-1)&pageSize)!=0
5473055104
|| pageSize>SQLITE_MAX_PAGE_SIZE
5473155105
|| pageSize<=256
5473255106
){
5473355107
goto page1_init_failed;
5473455108
}
5473555109
assert( (pageSize & 7)==0 );
55110
+ /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte
55111
+ ** integer at offset 20 is the number of bytes of space at the end of
55112
+ ** each page to reserve for extensions.
55113
+ **
55114
+ ** EVIDENCE-OF: R-37497-42412 The size of the reserved region is
55115
+ ** determined by the one-byte unsigned integer found at an offset of 20
55116
+ ** into the database file header. */
5473655117
usableSize = pageSize - page1[20];
5473755118
if( (u32)pageSize!=pBt->pageSize ){
5473855119
/* After reading the first page of the database assuming a page size
5473955120
** of BtShared.pageSize, we have discovered that the page-size is
5474055121
** actually pageSize. Unlock the database, leave pBt->pPage1 at
@@ -54751,10 +55132,13 @@
5475155132
}
5475255133
if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
5475355134
rc = SQLITE_CORRUPT_BKPT;
5475455135
goto page1_init_failed;
5475555136
}
55137
+ /* EVIDENCE-OF: R-28312-64704 However, the usable size is not allowed to
55138
+ ** be less than 480. In other words, if the page size is 512, then the
55139
+ ** reserved space size cannot exceed 32. */
5475655140
if( usableSize<480 ){
5475755141
goto page1_init_failed;
5475855142
}
5475955143
pBt->pageSize = pageSize;
5476055144
pBt->usableSize = usableSize;
@@ -57328,10 +57712,12 @@
5732857712
5732957713
assert( sqlite3_mutex_held(pBt->mutex) );
5733057714
assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) );
5733157715
pPage1 = pBt->pPage1;
5733257716
mxPage = btreePagecount(pBt);
57717
+ /* EVIDENCE-OF: R-05119-02637 The 4-byte big-endian integer at offset 36
57718
+ ** stores stores the total number of pages on the freelist. */
5733357719
n = get4byte(&pPage1->aData[36]);
5733457720
testcase( n==mxPage-1 );
5733557721
if( n>=mxPage ){
5733657722
return SQLITE_CORRUPT_BKPT;
5733757723
}
@@ -57374,12 +57760,18 @@
5737457760
** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)
5737557761
*/
5737657762
do {
5737757763
pPrevTrunk = pTrunk;
5737857764
if( pPrevTrunk ){
57765
+ /* EVIDENCE-OF: R-01506-11053 The first integer on a freelist trunk page
57766
+ ** is the page number of the next freelist trunk page in the list or
57767
+ ** zero if this is the last freelist trunk page. */
5737957768
iTrunk = get4byte(&pPrevTrunk->aData[0]);
5738057769
}else{
57770
+ /* EVIDENCE-OF: R-59841-13798 The 4-byte big-endian integer at offset 32
57771
+ ** stores the page number of the first page of the freelist, or zero if
57772
+ ** the freelist is empty. */
5738157773
iTrunk = get4byte(&pPage1->aData[32]);
5738257774
}
5738357775
testcase( iTrunk==mxPage );
5738457776
if( iTrunk>mxPage ){
5738557777
rc = SQLITE_CORRUPT_BKPT;
@@ -57390,12 +57782,13 @@
5739057782
pTrunk = 0;
5739157783
goto end_allocate_page;
5739257784
}
5739357785
assert( pTrunk!=0 );
5739457786
assert( pTrunk->aData!=0 );
57395
-
57396
- k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
57787
+ /* EVIDENCE-OF: R-13523-04394 The second integer on a freelist trunk page
57788
+ ** is the number of leaf page pointers to follow. */
57789
+ k = get4byte(&pTrunk->aData[4]);
5739757790
if( k==0 && !searchList ){
5739857791
/* The trunk has no leaves and the list is not being searched.
5739957792
** So extract the trunk page itself and use it as the newly
5740057793
** allocated page */
5740157794
assert( pPrevTrunk==0 );
@@ -57709,10 +58102,15 @@
5770958102
** to maintain backwards compatibility with older versions of SQLite,
5771058103
** we will continue to restrict the number of entries to usableSize/4 - 8
5771158104
** for now. At some point in the future (once everyone has upgraded
5771258105
** to 3.6.0 or later) we should consider fixing the conditional above
5771358106
** to read "usableSize/4-2" instead of "usableSize/4-8".
58107
+ **
58108
+ ** EVIDENCE-OF: R-19920-11576 However, newer versions of SQLite still
58109
+ ** avoid using the last six entries in the freelist trunk page array in
58110
+ ** order that database files created by newer versions of SQLite can be
58111
+ ** read by older versions of SQLite.
5771458112
*/
5771558113
rc = sqlite3PagerWrite(pTrunk->pDbPage);
5771658114
if( rc==SQLITE_OK ){
5771758115
put4byte(&pTrunk->aData[4], nLeaf+1);
5771858116
put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
@@ -58060,13 +58458,21 @@
5806058458
if( rc ){
5806158459
*pRC = rc;
5806258460
return;
5806358461
}
5806458462
pPage->nCell--;
58065
- memmove(ptr, ptr+2, 2*(pPage->nCell - idx));
58066
- put2byte(&data[hdr+3], pPage->nCell);
58067
- pPage->nFree += 2;
58463
+ if( pPage->nCell==0 ){
58464
+ memset(&data[hdr+1], 0, 4);
58465
+ data[hdr+7] = 0;
58466
+ put2byte(&data[hdr+5], pPage->pBt->usableSize);
58467
+ pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset
58468
+ - pPage->childPtrSize - 8;
58469
+ }else{
58470
+ memmove(ptr, ptr+2, 2*(pPage->nCell - idx));
58471
+ put2byte(&data[hdr+3], pPage->nCell);
58472
+ pPage->nFree += 2;
58473
+ }
5806858474
}
5806958475
5807058476
/*
5807158477
** Insert a new cell on pPage at cell index "i". pCell points to the
5807258478
** content of the cell.
@@ -58157,49 +58563,275 @@
5815758563
#endif
5815858564
}
5815958565
}
5816058566
5816158567
/*
58162
-** Add a list of cells to a page. The page should be initially empty.
58163
-** The cells are guaranteed to fit on the page.
58164
-*/
58165
-static void assemblePage(
58166
- MemPage *pPage, /* The page to be assembled */
58167
- int nCell, /* The number of cells to add to this page */
58168
- u8 **apCell, /* Pointers to cell bodies */
58169
- u16 *aSize /* Sizes of the cells */
58170
-){
58171
- int i; /* Loop counter */
58172
- u8 *pCellptr; /* Address of next cell pointer */
58173
- int cellbody; /* Address of next cell body */
58174
- u8 * const data = pPage->aData; /* Pointer to data for pPage */
58175
- const int hdr = pPage->hdrOffset; /* Offset of header on pPage */
58176
- const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
58177
-
58178
- assert( pPage->nOverflow==0 );
58179
- assert( sqlite3_mutex_held(pPage->pBt->mutex) );
58180
- assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
58181
- && (int)MX_CELL(pPage->pBt)<=10921);
58182
- assert( sqlite3PagerIswriteable(pPage->pDbPage) );
58183
-
58184
- /* Check that the page has just been zeroed by zeroPage() */
58185
- assert( pPage->nCell==0 );
58186
- assert( get2byteNotZero(&data[hdr+5])==nUsable );
58187
-
58188
- pCellptr = &pPage->aCellIdx[nCell*2];
58189
- cellbody = nUsable;
58190
- for(i=nCell-1; i>=0; i--){
58191
- u16 sz = aSize[i];
58192
- pCellptr -= 2;
58193
- cellbody -= sz;
58194
- put2byte(pCellptr, cellbody);
58195
- memcpy(&data[cellbody], apCell[i], sz);
58196
- }
58197
- put2byte(&data[hdr+3], nCell);
58198
- put2byte(&data[hdr+5], cellbody);
58199
- pPage->nFree -= (nCell*2 + nUsable - cellbody);
58200
- pPage->nCell = (u16)nCell;
58568
+** Array apCell[] contains pointers to nCell b-tree page cells. The
58569
+** szCell[] array contains the size in bytes of each cell. This function
58570
+** replaces the current contents of page pPg with the contents of the cell
58571
+** array.
58572
+**
58573
+** Some of the cells in apCell[] may currently be stored in pPg. This
58574
+** function works around problems caused by this by making a copy of any
58575
+** such cells before overwriting the page data.
58576
+**
58577
+** The MemPage.nFree field is invalidated by this function. It is the
58578
+** responsibility of the caller to set it correctly.
58579
+*/
58580
+static void rebuildPage(
58581
+ MemPage *pPg, /* Edit this page */
58582
+ int nCell, /* Final number of cells on page */
58583
+ u8 **apCell, /* Array of cells */
58584
+ u16 *szCell /* Array of cell sizes */
58585
+){
58586
+ const int hdr = pPg->hdrOffset; /* Offset of header on pPg */
58587
+ u8 * const aData = pPg->aData; /* Pointer to data for pPg */
58588
+ const int usableSize = pPg->pBt->usableSize;
58589
+ u8 * const pEnd = &aData[usableSize];
58590
+ int i;
58591
+ u8 *pCellptr = pPg->aCellIdx;
58592
+ u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
58593
+ u8 *pData;
58594
+
58595
+ i = get2byte(&aData[hdr+5]);
58596
+ memcpy(&pTmp[i], &aData[i], usableSize - i);
58597
+
58598
+ pData = pEnd;
58599
+ for(i=0; i<nCell; i++){
58600
+ u8 *pCell = apCell[i];
58601
+ if( pCell>aData && pCell<pEnd ){
58602
+ pCell = &pTmp[pCell - aData];
58603
+ }
58604
+ pData -= szCell[i];
58605
+ memcpy(pData, pCell, szCell[i]);
58606
+ put2byte(pCellptr, (pData - aData));
58607
+ pCellptr += 2;
58608
+ assert( szCell[i]==cellSizePtr(pPg, pCell) );
58609
+ }
58610
+
58611
+ /* The pPg->nFree field is now set incorrectly. The caller will fix it. */
58612
+ pPg->nCell = nCell;
58613
+ pPg->nOverflow = 0;
58614
+
58615
+ put2byte(&aData[hdr+1], 0);
58616
+ put2byte(&aData[hdr+3], pPg->nCell);
58617
+ put2byte(&aData[hdr+5], pData - aData);
58618
+ aData[hdr+7] = 0x00;
58619
+}
58620
+
58621
+/*
58622
+** Array apCell[] contains nCell pointers to b-tree cells. Array szCell
58623
+** contains the size in bytes of each such cell. This function attempts to
58624
+** add the cells stored in the array to page pPg. If it cannot (because
58625
+** the page needs to be defragmented before the cells will fit), non-zero
58626
+** is returned. Otherwise, if the cells are added successfully, zero is
58627
+** returned.
58628
+**
58629
+** Argument pCellptr points to the first entry in the cell-pointer array
58630
+** (part of page pPg) to populate. After cell apCell[0] is written to the
58631
+** page body, a 16-bit offset is written to pCellptr. And so on, for each
58632
+** cell in the array. It is the responsibility of the caller to ensure
58633
+** that it is safe to overwrite this part of the cell-pointer array.
58634
+**
58635
+** When this function is called, *ppData points to the start of the
58636
+** content area on page pPg. If the size of the content area is extended,
58637
+** *ppData is updated to point to the new start of the content area
58638
+** before returning.
58639
+**
58640
+** Finally, argument pBegin points to the byte immediately following the
58641
+** end of the space required by this page for the cell-pointer area (for
58642
+** all cells - not just those inserted by the current call). If the content
58643
+** area must be extended to before this point in order to accomodate all
58644
+** cells in apCell[], then the cells do not fit and non-zero is returned.
58645
+*/
58646
+static int pageInsertArray(
58647
+ MemPage *pPg, /* Page to add cells to */
58648
+ u8 *pBegin, /* End of cell-pointer array */
58649
+ u8 **ppData, /* IN/OUT: Page content -area pointer */
58650
+ u8 *pCellptr, /* Pointer to cell-pointer area */
58651
+ int nCell, /* Number of cells to add to pPg */
58652
+ u8 **apCell, /* Array of cells */
58653
+ u16 *szCell /* Array of cell sizes */
58654
+){
58655
+ int i;
58656
+ u8 *aData = pPg->aData;
58657
+ u8 *pData = *ppData;
58658
+ const int bFreelist = aData[1] || aData[2];
58659
+ assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */
58660
+ for(i=0; i<nCell; i++){
58661
+ int sz = szCell[i];
58662
+ int rc;
58663
+ u8 *pSlot;
58664
+ if( bFreelist==0 || (pSlot = pageFindSlot(pPg, sz, &rc, 0))==0 ){
58665
+ pData -= sz;
58666
+ if( pData<pBegin ) return 1;
58667
+ pSlot = pData;
58668
+ }
58669
+ memcpy(pSlot, apCell[i], sz);
58670
+ put2byte(pCellptr, (pSlot - aData));
58671
+ pCellptr += 2;
58672
+ }
58673
+ *ppData = pData;
58674
+ return 0;
58675
+}
58676
+
58677
+/*
58678
+** Array apCell[] contains nCell pointers to b-tree cells. Array szCell
58679
+** contains the size in bytes of each such cell. This function adds the
58680
+** space associated with each cell in the array that is currently stored
58681
+** within the body of pPg to the pPg free-list. The cell-pointers and other
58682
+** fields of the page are not updated.
58683
+**
58684
+** This function returns the total number of cells added to the free-list.
58685
+*/
58686
+static int pageFreeArray(
58687
+ MemPage *pPg, /* Page to edit */
58688
+ int nCell, /* Cells to delete */
58689
+ u8 **apCell, /* Array of cells */
58690
+ u16 *szCell /* Array of cell sizes */
58691
+){
58692
+ u8 * const aData = pPg->aData;
58693
+ u8 * const pEnd = &aData[pPg->pBt->usableSize];
58694
+ u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize];
58695
+ int nRet = 0;
58696
+ int i;
58697
+ u8 *pFree = 0;
58698
+ int szFree = 0;
58699
+
58700
+ for(i=0; i<nCell; i++){
58701
+ u8 *pCell = apCell[i];
58702
+ if( pCell>=pStart && pCell<pEnd ){
58703
+ int sz = szCell[i];
58704
+ if( pFree!=(pCell + sz) ){
58705
+ if( pFree ){
58706
+ assert( pFree>aData && (pFree - aData)<65536 );
58707
+ freeSpace(pPg, (u16)(pFree - aData), szFree);
58708
+ }
58709
+ pFree = pCell;
58710
+ szFree = sz;
58711
+ if( pFree+sz>pEnd ) return 0;
58712
+ }else{
58713
+ pFree = pCell;
58714
+ szFree += sz;
58715
+ }
58716
+ nRet++;
58717
+ }
58718
+ }
58719
+ if( pFree ){
58720
+ assert( pFree>aData && (pFree - aData)<65536 );
58721
+ freeSpace(pPg, (u16)(pFree - aData), szFree);
58722
+ }
58723
+ return nRet;
58724
+}
58725
+
58726
+/*
58727
+** apCell[] and szCell[] contains pointers to and sizes of all cells in the
58728
+** pages being balanced. The current page, pPg, has pPg->nCell cells starting
58729
+** with apCell[iOld]. After balancing, this page should hold nNew cells
58730
+** starting at apCell[iNew].
58731
+**
58732
+** This routine makes the necessary adjustments to pPg so that it contains
58733
+** the correct cells after being balanced.
58734
+**
58735
+** The pPg->nFree field is invalid when this function returns. It is the
58736
+** responsibility of the caller to set it correctly.
58737
+*/
58738
+static void editPage(
58739
+ MemPage *pPg, /* Edit this page */
58740
+ int iOld, /* Index of first cell currently on page */
58741
+ int iNew, /* Index of new first cell on page */
58742
+ int nNew, /* Final number of cells on page */
58743
+ u8 **apCell, /* Array of cells */
58744
+ u16 *szCell /* Array of cell sizes */
58745
+){
58746
+ u8 * const aData = pPg->aData;
58747
+ const int hdr = pPg->hdrOffset;
58748
+ u8 *pBegin = &pPg->aCellIdx[nNew * 2];
58749
+ int nCell = pPg->nCell; /* Cells stored on pPg */
58750
+ u8 *pData;
58751
+ u8 *pCellptr;
58752
+ int i;
58753
+ int iOldEnd = iOld + pPg->nCell + pPg->nOverflow;
58754
+ int iNewEnd = iNew + nNew;
58755
+
58756
+#ifdef SQLITE_DEBUG
58757
+ u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
58758
+ memcpy(pTmp, aData, pPg->pBt->usableSize);
58759
+#endif
58760
+
58761
+ /* Remove cells from the start and end of the page */
58762
+ if( iOld<iNew ){
58763
+ int nShift = pageFreeArray(
58764
+ pPg, iNew-iOld, &apCell[iOld], &szCell[iOld]
58765
+ );
58766
+ memmove(pPg->aCellIdx, &pPg->aCellIdx[nShift*2], nCell*2);
58767
+ nCell -= nShift;
58768
+ }
58769
+ if( iNewEnd < iOldEnd ){
58770
+ nCell -= pageFreeArray(
58771
+ pPg, iOldEnd-iNewEnd, &apCell[iNewEnd], &szCell[iNewEnd]
58772
+ );
58773
+ }
58774
+
58775
+ pData = &aData[get2byteNotZero(&aData[hdr+5])];
58776
+ if( pData<pBegin ) goto editpage_fail;
58777
+
58778
+ /* Add cells to the start of the page */
58779
+ if( iNew<iOld ){
58780
+ int nAdd = MIN(nNew,iOld-iNew);
58781
+ assert( (iOld-iNew)<nNew || nCell==0 || CORRUPT_DB );
58782
+ pCellptr = pPg->aCellIdx;
58783
+ memmove(&pCellptr[nAdd*2], pCellptr, nCell*2);
58784
+ if( pageInsertArray(
58785
+ pPg, pBegin, &pData, pCellptr,
58786
+ nAdd, &apCell[iNew], &szCell[iNew]
58787
+ ) ) goto editpage_fail;
58788
+ nCell += nAdd;
58789
+ }
58790
+
58791
+ /* Add any overflow cells */
58792
+ for(i=0; i<pPg->nOverflow; i++){
58793
+ int iCell = (iOld + pPg->aiOvfl[i]) - iNew;
58794
+ if( iCell>=0 && iCell<nNew ){
58795
+ pCellptr = &pPg->aCellIdx[iCell * 2];
58796
+ memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2);
58797
+ nCell++;
58798
+ if( pageInsertArray(
58799
+ pPg, pBegin, &pData, pCellptr,
58800
+ 1, &apCell[iCell + iNew], &szCell[iCell + iNew]
58801
+ ) ) goto editpage_fail;
58802
+ }
58803
+ }
58804
+
58805
+ /* Append cells to the end of the page */
58806
+ pCellptr = &pPg->aCellIdx[nCell*2];
58807
+ if( pageInsertArray(
58808
+ pPg, pBegin, &pData, pCellptr,
58809
+ nNew-nCell, &apCell[iNew+nCell], &szCell[iNew+nCell]
58810
+ ) ) goto editpage_fail;
58811
+
58812
+ pPg->nCell = nNew;
58813
+ pPg->nOverflow = 0;
58814
+
58815
+ put2byte(&aData[hdr+3], pPg->nCell);
58816
+ put2byte(&aData[hdr+5], pData - aData);
58817
+
58818
+#ifdef SQLITE_DEBUG
58819
+ for(i=0; i<nNew && !CORRUPT_DB; i++){
58820
+ u8 *pCell = apCell[i+iNew];
58821
+ int iOff = get2byte(&pPg->aCellIdx[i*2]);
58822
+ if( pCell>=aData && pCell<&aData[pPg->pBt->usableSize] ){
58823
+ pCell = &pTmp[pCell - aData];
58824
+ }
58825
+ assert( 0==memcmp(pCell, &aData[iOff], szCell[i+iNew]) );
58826
+ }
58827
+#endif
58828
+
58829
+ return;
58830
+ editpage_fail:
58831
+ /* Unable to edit this page. Rebuild it from scratch instead. */
58832
+ rebuildPage(pPg, nNew, &apCell[iNew], &szCell[iNew]);
5820158833
}
5820258834
5820358835
/*
5820458836
** The following parameters determine how many adjacent pages get involved
5820558837
** in a balancing operation. NN is the number of neighbors on either side
@@ -58267,11 +58899,12 @@
5826758899
u8 *pStop;
5826858900
5826958901
assert( sqlite3PagerIswriteable(pNew->pDbPage) );
5827058902
assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
5827158903
zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
58272
- assemblePage(pNew, 1, &pCell, &szCell);
58904
+ rebuildPage(pNew, 1, &pCell, &szCell);
58905
+ pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell;
5827358906
5827458907
/* If this is an auto-vacuum database, update the pointer map
5827558908
** with entries for the new page, and any pointer from the
5827658909
** cell on the page to an overflow page. If either of these
5827758910
** operations fails, the return code is set, but the contents
@@ -58486,21 +59119,26 @@
5848659119
int subtotal; /* Subtotal of bytes in cells on one page */
5848759120
int iSpace1 = 0; /* First unused byte of aSpace1[] */
5848859121
int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */
5848959122
int szScratch; /* Size of scratch memory requested */
5849059123
MemPage *apOld[NB]; /* pPage and up to two siblings */
58491
- MemPage *apCopy[NB]; /* Private copies of apOld[] pages */
5849259124
MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */
5849359125
u8 *pRight; /* Location in parent of right-sibling pointer */
5849459126
u8 *apDiv[NB-1]; /* Divider cells in pParent */
5849559127
int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */
58496
- int szNew[NB+2]; /* Combined size of cells place on i-th page */
59128
+ int cntOld[NB+2]; /* Old index in aCell[] after i-th page */
59129
+ int szNew[NB+2]; /* Combined size of cells placed on i-th page */
5849759130
u8 **apCell = 0; /* All cells begin balanced */
5849859131
u16 *szCell; /* Local size of all cells in apCell[] */
5849959132
u8 *aSpace1; /* Space for copies of dividers cells */
5850059133
Pgno pgno; /* Temp var to store a page number in */
59134
+ u8 abDone[NB+2]; /* True after i'th new page is populated */
59135
+ Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */
59136
+ Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */
59137
+ u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */
5850159138
59139
+ memset(abDone, 0, sizeof(abDone));
5850259140
pBt = pParent->pBt;
5850359141
assert( sqlite3_mutex_held(pBt->mutex) );
5850459142
assert( sqlite3PagerIswriteable(pParent->pDbPage) );
5850559143
5850659144
#if 0
@@ -58605,16 +59243,18 @@
5860559243
nMaxCells = (nMaxCells + 3)&~3;
5860659244
5860759245
/*
5860859246
** Allocate space for memory structures
5860959247
*/
58610
- k = pBt->pageSize + ROUND8(sizeof(MemPage));
5861159248
szScratch =
5861259249
nMaxCells*sizeof(u8*) /* apCell */
5861359250
+ nMaxCells*sizeof(u16) /* szCell */
58614
- + pBt->pageSize /* aSpace1 */
58615
- + k*nOld; /* Page copies (apCopy) */
59251
+ + pBt->pageSize; /* aSpace1 */
59252
+
59253
+ /* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer
59254
+ ** that is more than 6 times the database page size. */
59255
+ assert( szScratch<=6*pBt->pageSize );
5861659256
apCell = sqlite3ScratchMalloc( szScratch );
5861759257
if( apCell==0 ){
5861859258
rc = SQLITE_NOMEM;
5861959259
goto balance_cleanup;
5862059260
}
@@ -58623,12 +59263,12 @@
5862359263
assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
5862459264
5862559265
/*
5862659266
** Load pointers to all cells on sibling pages and the divider cells
5862759267
** into the local apCell[] array. Make copies of the divider cells
58628
- ** into space obtained from aSpace1[] and remove the divider cells
58629
- ** from pParent.
59268
+ ** into space obtained from aSpace1[]. The divider cells have already
59269
+ ** been removed from pParent.
5863059270
**
5863159271
** If the siblings are on leaf pages, then the child pointers of the
5863259272
** divider cells are stripped from the cells before they are copied
5863359273
** into aSpace1[]. In this way, all cells in apCell[] are without
5863459274
** child pointers. If siblings are not leaves, then all cell in
@@ -58640,19 +59280,11 @@
5864059280
*/
5864159281
leafCorrection = apOld[0]->leaf*4;
5864259282
leafData = apOld[0]->intKeyLeaf;
5864359283
for(i=0; i<nOld; i++){
5864459284
int limit;
58645
-
58646
- /* Before doing anything else, take a copy of the i'th original sibling
58647
- ** The rest of this function will use data from the copies rather
58648
- ** that the original pages since the original pages will be in the
58649
- ** process of being overwritten. */
58650
- MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
58651
- memcpy(pOld, apOld[i], sizeof(MemPage));
58652
- pOld->aData = (void*)&pOld[1];
58653
- memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
59285
+ MemPage *pOld = apOld[i];
5865459286
5865559287
limit = pOld->nCell+pOld->nOverflow;
5865659288
if( pOld->nOverflow>0 ){
5865759289
for(j=0; j<limit; j++){
5865859290
assert( nCell<nMaxCells );
@@ -58669,10 +59301,11 @@
5866959301
apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
5867059302
szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
5867159303
nCell++;
5867259304
}
5867359305
}
59306
+ cntOld[i] = nCell;
5867459307
if( i<nOld-1 && !leafData){
5867559308
u16 sz = (u16)szNew[i];
5867659309
u8 *pTemp;
5867759310
assert( nCell<nMaxCells );
5867859311
szCell[nCell] = sz;
@@ -58720,11 +59353,11 @@
5872059353
usableSpace = pBt->usableSize - 12 + leafCorrection;
5872159354
for(subtotal=k=i=0; i<nCell; i++){
5872259355
assert( i<nMaxCells );
5872359356
subtotal += szCell[i] + 2;
5872459357
if( subtotal > usableSpace ){
58725
- szNew[k] = subtotal - szCell[i];
59358
+ szNew[k] = subtotal - szCell[i] - 2;
5872659359
cntNew[k] = i;
5872759360
if( leafData ){ i--; }
5872859361
subtotal = 0;
5872959362
k++;
5873059363
if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
@@ -58734,13 +59367,14 @@
5873459367
cntNew[k] = nCell;
5873559368
k++;
5873659369
5873759370
/*
5873859371
** The packing computed by the previous block is biased toward the siblings
58739
- ** on the left side. The left siblings are always nearly full, while the
58740
- ** right-most sibling might be nearly empty. This block of code attempts
58741
- ** to adjust the packing of siblings to get a better balance.
59372
+ ** on the left side (siblings with smaller keys). The left siblings are
59373
+ ** always nearly full, while the right-most sibling might be nearly empty.
59374
+ ** The next block of code attempts to adjust the packing of siblings to
59375
+ ** get a better balance.
5874259376
**
5874359377
** This adjustment is more than an optimization. The packing above might
5874459378
** be so out of balance as to be illegal. For example, the right-most
5874559379
** sibling might be completely empty. This adjustment is not optional.
5874659380
*/
@@ -58765,26 +59399,22 @@
5876559399
}
5876659400
szNew[i] = szRight;
5876759401
szNew[i-1] = szLeft;
5876859402
}
5876959403
58770
- /* Either we found one or more cells (cntnew[0])>0) or pPage is
58771
- ** a virtual root page. A virtual root page is when the real root
58772
- ** page is page 1 and we are the only child of that page.
58773
- **
58774
- ** UPDATE: The assert() below is not necessarily true if the database
58775
- ** file is corrupt. The corruption will be detected and reported later
58776
- ** in this procedure so there is no need to act upon it now.
59404
+ /* Sanity check: For a non-corrupt database file one of the follwing
59405
+ ** must be true:
59406
+ ** (1) We found one or more cells (cntNew[0])>0), or
59407
+ ** (2) pPage is a virtual root page. A virtual root page is when
59408
+ ** the real root page is page 1 and we are the only child of
59409
+ ** that page.
5877759410
*/
58778
-#if 0
58779
- assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
58780
-#endif
58781
-
58782
- TRACE(("BALANCE: old: %d %d %d ",
58783
- apOld[0]->pgno,
58784
- nOld>=2 ? apOld[1]->pgno : 0,
58785
- nOld>=3 ? apOld[2]->pgno : 0
59411
+ assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB);
59412
+ TRACE(("BALANCE: old: %d(nc=%d) %d(nc=%d) %d(nc=%d)\n",
59413
+ apOld[0]->pgno, apOld[0]->nCell,
59414
+ nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0,
59415
+ nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0
5878659416
));
5878759417
5878859418
/*
5878959419
** Allocate k new pages. Reuse old pages where possible.
5879059420
*/
@@ -58803,12 +59433,14 @@
5880359433
if( rc ) goto balance_cleanup;
5880459434
}else{
5880559435
assert( i>0 );
5880659436
rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0);
5880759437
if( rc ) goto balance_cleanup;
59438
+ zeroPage(pNew, pageFlags);
5880859439
apNew[i] = pNew;
5880959440
nNew++;
59441
+ cntOld[i] = nCell;
5881059442
5881159443
/* Set the pointer-map entry for the new sibling page. */
5881259444
if( ISAUTOVACUUM ){
5881359445
ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
5881459446
if( rc!=SQLITE_OK ){
@@ -58816,139 +59448,247 @@
5881659448
}
5881759449
}
5881859450
}
5881959451
}
5882059452
58821
- /* Free any old pages that were not reused as new pages.
58822
- */
58823
- while( i<nOld ){
58824
- freePage(apOld[i], &rc);
58825
- if( rc ) goto balance_cleanup;
58826
- releasePage(apOld[i]);
58827
- apOld[i] = 0;
58828
- i++;
58829
- }
58830
-
5883159453
/*
58832
- ** Put the new pages in ascending order. This helps to
58833
- ** keep entries in the disk file in order so that a scan
58834
- ** of the table is a linear scan through the file. That
58835
- ** in turn helps the operating system to deliver pages
58836
- ** from the disk more rapidly.
58837
- **
58838
- ** An O(n^2) insertion sort algorithm is used, but since
58839
- ** n is never more than NB (a small constant), that should
58840
- ** not be a problem.
58841
- **
58842
- ** When NB==3, this one optimization makes the database
58843
- ** about 25% faster for large insertions and deletions.
58844
- */
58845
- for(i=0; i<k-1; i++){
58846
- int minV = apNew[i]->pgno;
58847
- int minI = i;
58848
- for(j=i+1; j<k; j++){
58849
- if( apNew[j]->pgno<(unsigned)minV ){
58850
- minI = j;
58851
- minV = apNew[j]->pgno;
58852
- }
58853
- }
58854
- if( minI>i ){
58855
- MemPage *pT;
58856
- pT = apNew[i];
58857
- apNew[i] = apNew[minI];
58858
- apNew[minI] = pT;
58859
- }
58860
- }
58861
- TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
58862
- apNew[0]->pgno, szNew[0],
59454
+ ** Reassign page numbers so that the new pages are in ascending order.
59455
+ ** This helps to keep entries in the disk file in order so that a scan
59456
+ ** of the table is closer to a linear scan through the file. That in turn
59457
+ ** helps the operating system to deliver pages from the disk more rapidly.
59458
+ **
59459
+ ** An O(n^2) insertion sort algorithm is used, but since n is never more
59460
+ ** than (NB+2) (a small constant), that should not be a problem.
59461
+ **
59462
+ ** When NB==3, this one optimization makes the database about 25% faster
59463
+ ** for large insertions and deletions.
59464
+ */
59465
+ for(i=0; i<nNew; i++){
59466
+ aPgOrder[i] = aPgno[i] = apNew[i]->pgno;
59467
+ aPgFlags[i] = apNew[i]->pDbPage->flags;
59468
+ for(j=0; j<i; j++){
59469
+ if( aPgno[j]==aPgno[i] ){
59470
+ /* This branch is taken if the set of sibling pages somehow contains
59471
+ ** duplicate entries. This can happen if the database is corrupt.
59472
+ ** It would be simpler to detect this as part of the loop below, but
59473
+ ** we do the detection here in order to avoid populating the pager
59474
+ ** cache with two separate objects associated with the same
59475
+ ** page number. */
59476
+ assert( CORRUPT_DB );
59477
+ rc = SQLITE_CORRUPT_BKPT;
59478
+ goto balance_cleanup;
59479
+ }
59480
+ }
59481
+ }
59482
+ for(i=0; i<nNew; i++){
59483
+ int iBest = 0; /* aPgno[] index of page number to use */
59484
+ for(j=1; j<nNew; j++){
59485
+ if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j;
59486
+ }
59487
+ pgno = aPgOrder[iBest];
59488
+ aPgOrder[iBest] = 0xffffffff;
59489
+ if( iBest!=i ){
59490
+ if( iBest>i ){
59491
+ sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);
59492
+ }
59493
+ sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);
59494
+ apNew[i]->pgno = pgno;
59495
+ }
59496
+ }
59497
+
59498
+ TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "
59499
+ "%d(%d nc=%d) %d(%d nc=%d)\n",
59500
+ apNew[0]->pgno, szNew[0], cntNew[0],
5886359501
nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
59502
+ nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0,
5886459503
nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
59504
+ nNew>=3 ? cntNew[2] - cntNew[1] - !leafData : 0,
5886559505
nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
58866
- nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
59506
+ nNew>=4 ? cntNew[3] - cntNew[2] - !leafData : 0,
59507
+ nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0,
59508
+ nNew>=5 ? cntNew[4] - cntNew[3] - !leafData : 0
59509
+ ));
5886759510
5886859511
assert( sqlite3PagerIswriteable(pParent->pDbPage) );
5886959512
put4byte(pRight, apNew[nNew-1]->pgno);
5887059513
58871
- /*
58872
- ** Evenly distribute the data in apCell[] across the new pages.
58873
- ** Insert divider cells into pParent as necessary.
59514
+ /* If the sibling pages are not leaves, ensure that the right-child pointer
59515
+ ** of the right-most new sibling page is set to the value that was
59516
+ ** originally in the same field of the right-most old sibling page. */
59517
+ if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){
59518
+ MemPage *pOld = (nNew>nOld ? apNew : apOld)[nOld-1];
59519
+ memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4);
59520
+ }
59521
+
59522
+ /* Make any required updates to pointer map entries associated with
59523
+ ** cells stored on sibling pages following the balance operation. Pointer
59524
+ ** map entries associated with divider cells are set by the insertCell()
59525
+ ** routine. The associated pointer map entries are:
59526
+ **
59527
+ ** a) if the cell contains a reference to an overflow chain, the
59528
+ ** entry associated with the first page in the overflow chain, and
59529
+ **
59530
+ ** b) if the sibling pages are not leaves, the child page associated
59531
+ ** with the cell.
59532
+ **
59533
+ ** If the sibling pages are not leaves, then the pointer map entry
59534
+ ** associated with the right-child of each sibling may also need to be
59535
+ ** updated. This happens below, after the sibling pages have been
59536
+ ** populated, not here.
5887459537
*/
58875
- j = 0;
58876
- for(i=0; i<nNew; i++){
58877
- /* Assemble the new sibling page. */
59538
+ if( ISAUTOVACUUM ){
59539
+ MemPage *pNew = apNew[0];
59540
+ u8 *aOld = pNew->aData;
59541
+ int cntOldNext = pNew->nCell + pNew->nOverflow;
59542
+ int usableSize = pBt->usableSize;
59543
+ int iNew = 0;
59544
+ int iOld = 0;
59545
+
59546
+ for(i=0; i<nCell; i++){
59547
+ u8 *pCell = apCell[i];
59548
+ if( i==cntOldNext ){
59549
+ MemPage *pOld = (++iOld)<nNew ? apNew[iOld] : apOld[iOld];
59550
+ cntOldNext += pOld->nCell + pOld->nOverflow + !leafData;
59551
+ aOld = pOld->aData;
59552
+ }
59553
+ if( i==cntNew[iNew] ){
59554
+ pNew = apNew[++iNew];
59555
+ if( !leafData ) continue;
59556
+ }
59557
+
59558
+ /* Cell pCell is destined for new sibling page pNew. Originally, it
59559
+ ** was either part of sibling page iOld (possibly an overflow cell),
59560
+ ** or else the divider cell to the left of sibling page iOld. So,
59561
+ ** if sibling page iOld had the same page number as pNew, and if
59562
+ ** pCell really was a part of sibling page iOld (not a divider or
59563
+ ** overflow cell), we can skip updating the pointer map entries. */
59564
+ if( pNew->pgno!=aPgno[iOld] || pCell<aOld || pCell>=&aOld[usableSize] ){
59565
+ if( !leafCorrection ){
59566
+ ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc);
59567
+ }
59568
+ if( szCell[i]>pNew->minLocal ){
59569
+ ptrmapPutOvflPtr(pNew, pCell, &rc);
59570
+ }
59571
+ }
59572
+ }
59573
+ }
59574
+
59575
+ /* Insert new divider cells into pParent. */
59576
+ for(i=0; i<nNew-1; i++){
59577
+ u8 *pCell;
59578
+ u8 *pTemp;
59579
+ int sz;
5887859580
MemPage *pNew = apNew[i];
58879
- assert( j<nMaxCells );
58880
- zeroPage(pNew, pageFlags);
58881
- assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
58882
- assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
58883
- assert( pNew->nOverflow==0 );
58884
-
5888559581
j = cntNew[i];
5888659582
58887
- /* If the sibling page assembled above was not the right-most sibling,
58888
- ** insert a divider cell into the parent page.
58889
- */
58890
- assert( i<nNew-1 || j==nCell );
58891
- if( j<nCell ){
58892
- u8 *pCell;
58893
- u8 *pTemp;
58894
- int sz;
58895
-
58896
- assert( j<nMaxCells );
58897
- pCell = apCell[j];
58898
- sz = szCell[j] + leafCorrection;
58899
- pTemp = &aOvflSpace[iOvflSpace];
58900
- if( !pNew->leaf ){
58901
- memcpy(&pNew->aData[8], pCell, 4);
58902
- }else if( leafData ){
58903
- /* If the tree is a leaf-data tree, and the siblings are leaves,
58904
- ** then there is no divider cell in apCell[]. Instead, the divider
58905
- ** cell consists of the integer key for the right-most cell of
58906
- ** the sibling-page assembled above only.
58907
- */
58908
- CellInfo info;
58909
- j--;
58910
- btreeParseCellPtr(pNew, apCell[j], &info);
58911
- pCell = pTemp;
58912
- sz = 4 + putVarint(&pCell[4], info.nKey);
58913
- pTemp = 0;
58914
- }else{
58915
- pCell -= 4;
58916
- /* Obscure case for non-leaf-data trees: If the cell at pCell was
58917
- ** previously stored on a leaf node, and its reported size was 4
58918
- ** bytes, then it may actually be smaller than this
58919
- ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
58920
- ** any cell). But it is important to pass the correct size to
58921
- ** insertCell(), so reparse the cell now.
58922
- **
58923
- ** Note that this can never happen in an SQLite data file, as all
58924
- ** cells are at least 4 bytes. It only happens in b-trees used
58925
- ** to evaluate "IN (SELECT ...)" and similar clauses.
58926
- */
58927
- if( szCell[j]==4 ){
58928
- assert(leafCorrection==4);
58929
- sz = cellSizePtr(pParent, pCell);
58930
- }
58931
- }
58932
- iOvflSpace += sz;
58933
- assert( sz<=pBt->maxLocal+23 );
58934
- assert( iOvflSpace <= (int)pBt->pageSize );
58935
- insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
58936
- if( rc!=SQLITE_OK ) goto balance_cleanup;
58937
- assert( sqlite3PagerIswriteable(pParent->pDbPage) );
58938
-
58939
- j++;
58940
- nxDiv++;
58941
- }
58942
- }
58943
- assert( j==nCell );
59583
+ assert( j<nMaxCells );
59584
+ pCell = apCell[j];
59585
+ sz = szCell[j] + leafCorrection;
59586
+ pTemp = &aOvflSpace[iOvflSpace];
59587
+ if( !pNew->leaf ){
59588
+ memcpy(&pNew->aData[8], pCell, 4);
59589
+ }else if( leafData ){
59590
+ /* If the tree is a leaf-data tree, and the siblings are leaves,
59591
+ ** then there is no divider cell in apCell[]. Instead, the divider
59592
+ ** cell consists of the integer key for the right-most cell of
59593
+ ** the sibling-page assembled above only.
59594
+ */
59595
+ CellInfo info;
59596
+ j--;
59597
+ btreeParseCellPtr(pNew, apCell[j], &info);
59598
+ pCell = pTemp;
59599
+ sz = 4 + putVarint(&pCell[4], info.nKey);
59600
+ pTemp = 0;
59601
+ }else{
59602
+ pCell -= 4;
59603
+ /* Obscure case for non-leaf-data trees: If the cell at pCell was
59604
+ ** previously stored on a leaf node, and its reported size was 4
59605
+ ** bytes, then it may actually be smaller than this
59606
+ ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
59607
+ ** any cell). But it is important to pass the correct size to
59608
+ ** insertCell(), so reparse the cell now.
59609
+ **
59610
+ ** Note that this can never happen in an SQLite data file, as all
59611
+ ** cells are at least 4 bytes. It only happens in b-trees used
59612
+ ** to evaluate "IN (SELECT ...)" and similar clauses.
59613
+ */
59614
+ if( szCell[j]==4 ){
59615
+ assert(leafCorrection==4);
59616
+ sz = cellSizePtr(pParent, pCell);
59617
+ }
59618
+ }
59619
+ iOvflSpace += sz;
59620
+ assert( sz<=pBt->maxLocal+23 );
59621
+ assert( iOvflSpace <= (int)pBt->pageSize );
59622
+ insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc);
59623
+ if( rc!=SQLITE_OK ) goto balance_cleanup;
59624
+ assert( sqlite3PagerIswriteable(pParent->pDbPage) );
59625
+ }
59626
+
59627
+ /* Now update the actual sibling pages. The order in which they are updated
59628
+ ** is important, as this code needs to avoid disrupting any page from which
59629
+ ** cells may still to be read. In practice, this means:
59630
+ **
59631
+ ** (1) If cells are moving left (from apNew[iPg] to apNew[iPg-1])
59632
+ ** then it is not safe to update page apNew[iPg] until after
59633
+ ** the left-hand sibling apNew[iPg-1] has been updated.
59634
+ **
59635
+ ** (2) If cells are moving right (from apNew[iPg] to apNew[iPg+1])
59636
+ ** then it is not safe to update page apNew[iPg] until after
59637
+ ** the right-hand sibling apNew[iPg+1] has been updated.
59638
+ **
59639
+ ** If neither of the above apply, the page is safe to update.
59640
+ **
59641
+ ** The iPg value in the following loop starts at nNew-1 goes down
59642
+ ** to 0, then back up to nNew-1 again, thus making two passes over
59643
+ ** the pages. On the initial downward pass, only condition (1) above
59644
+ ** needs to be tested because (2) will always be true from the previous
59645
+ ** step. On the upward pass, both conditions are always true, so the
59646
+ ** upwards pass simply processes pages that were missed on the downward
59647
+ ** pass.
59648
+ */
59649
+ for(i=1-nNew; i<nNew; i++){
59650
+ int iPg = i<0 ? -i : i;
59651
+ assert( iPg>=0 && iPg<nNew );
59652
+ if( abDone[iPg] ) continue; /* Skip pages already processed */
59653
+ if( i>=0 /* On the upwards pass, or... */
59654
+ || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */
59655
+ ){
59656
+ int iNew;
59657
+ int iOld;
59658
+ int nNewCell;
59659
+
59660
+ /* Verify condition (1): If cells are moving left, update iPg
59661
+ ** only after iPg-1 has already been updated. */
59662
+ assert( iPg==0 || cntOld[iPg-1]>=cntNew[iPg-1] || abDone[iPg-1] );
59663
+
59664
+ /* Verify condition (2): If cells are moving right, update iPg
59665
+ ** only after iPg+1 has already been updated. */
59666
+ assert( cntNew[iPg]>=cntOld[iPg] || abDone[iPg+1] );
59667
+
59668
+ if( iPg==0 ){
59669
+ iNew = iOld = 0;
59670
+ nNewCell = cntNew[0];
59671
+ }else{
59672
+ iOld = iPg<nOld ? (cntOld[iPg-1] + !leafData) : nCell;
59673
+ iNew = cntNew[iPg-1] + !leafData;
59674
+ nNewCell = cntNew[iPg] - iNew;
59675
+ }
59676
+
59677
+ editPage(apNew[iPg], iOld, iNew, nNewCell, apCell, szCell);
59678
+ abDone[iPg]++;
59679
+ apNew[iPg]->nFree = usableSpace-szNew[iPg];
59680
+ assert( apNew[iPg]->nOverflow==0 );
59681
+ assert( apNew[iPg]->nCell==nNewCell );
59682
+ }
59683
+ }
59684
+
59685
+ /* All pages have been processed exactly once */
59686
+ assert( memcmp(abDone, "\01\01\01\01\01", nNew)==0 );
59687
+
5894459688
assert( nOld>0 );
5894559689
assert( nNew>0 );
58946
- if( (pageFlags & PTF_LEAF)==0 ){
58947
- u8 *zChild = &apCopy[nOld-1]->aData[8];
58948
- memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
58949
- }
5895059690
5895159691
if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
5895259692
/* The root page of the b-tree now contains no cells. The only sibling
5895359693
** page is the right-child of the parent. Copy the contents of the
5895459694
** child page into the parent, decreasing the overall height of the
@@ -58957,130 +59697,54 @@
5895759697
**
5895859698
** If this is an auto-vacuum database, the call to copyNodeContent()
5895959699
** sets all pointer-map entries corresponding to database image pages
5896059700
** for which the pointer is stored within the content being copied.
5896159701
**
58962
- ** The second assert below verifies that the child page is defragmented
58963
- ** (it must be, as it was just reconstructed using assemblePage()). This
58964
- ** is important if the parent page happens to be page 1 of the database
58965
- ** image. */
59702
+ ** It is critical that the child page be defragmented before being
59703
+ ** copied into the parent, because if the parent is page 1 then it will
59704
+ ** by smaller than the child due to the database header, and so all the
59705
+ ** free space needs to be up front.
59706
+ */
5896659707
assert( nNew==1 );
59708
+ rc = defragmentPage(apNew[0]);
59709
+ testcase( rc!=SQLITE_OK );
5896759710
assert( apNew[0]->nFree ==
58968
- (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
59711
+ (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
59712
+ || rc!=SQLITE_OK
5896959713
);
5897059714
copyNodeContent(apNew[0], pParent, &rc);
5897159715
freePage(apNew[0], &rc);
58972
- }else if( ISAUTOVACUUM ){
58973
- /* Fix the pointer-map entries for all the cells that were shifted around.
58974
- ** There are several different types of pointer-map entries that need to
58975
- ** be dealt with by this routine. Some of these have been set already, but
58976
- ** many have not. The following is a summary:
58977
- **
58978
- ** 1) The entries associated with new sibling pages that were not
58979
- ** siblings when this function was called. These have already
58980
- ** been set. We don't need to worry about old siblings that were
58981
- ** moved to the free-list - the freePage() code has taken care
58982
- ** of those.
58983
- **
58984
- ** 2) The pointer-map entries associated with the first overflow
58985
- ** page in any overflow chains used by new divider cells. These
58986
- ** have also already been taken care of by the insertCell() code.
58987
- **
58988
- ** 3) If the sibling pages are not leaves, then the child pages of
58989
- ** cells stored on the sibling pages may need to be updated.
58990
- **
58991
- ** 4) If the sibling pages are not internal intkey nodes, then any
58992
- ** overflow pages used by these cells may need to be updated
58993
- ** (internal intkey nodes never contain pointers to overflow pages).
58994
- **
58995
- ** 5) If the sibling pages are not leaves, then the pointer-map
58996
- ** entries for the right-child pages of each sibling may need
58997
- ** to be updated.
58998
- **
58999
- ** Cases 1 and 2 are dealt with above by other code. The next
59000
- ** block deals with cases 3 and 4 and the one after that, case 5. Since
59001
- ** setting a pointer map entry is a relatively expensive operation, this
59002
- ** code only sets pointer map entries for child or overflow pages that have
59003
- ** actually moved between pages. */
59004
- MemPage *pNew = apNew[0];
59005
- MemPage *pOld = apCopy[0];
59006
- int nOverflow = pOld->nOverflow;
59007
- int iNextOld = pOld->nCell + nOverflow;
59008
- int iOverflow = (nOverflow ? pOld->aiOvfl[0] : -1);
59009
- j = 0; /* Current 'old' sibling page */
59010
- k = 0; /* Current 'new' sibling page */
59011
- for(i=0; i<nCell; i++){
59012
- int isDivider = 0;
59013
- while( i==iNextOld ){
59014
- /* Cell i is the cell immediately following the last cell on old
59015
- ** sibling page j. If the siblings are not leaf pages of an
59016
- ** intkey b-tree, then cell i was a divider cell. */
59017
- assert( j+1 < ArraySize(apCopy) );
59018
- assert( j+1 < nOld );
59019
- pOld = apCopy[++j];
59020
- iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
59021
- if( pOld->nOverflow ){
59022
- nOverflow = pOld->nOverflow;
59023
- iOverflow = i + !leafData + pOld->aiOvfl[0];
59024
- }
59025
- isDivider = !leafData;
59026
- }
59027
-
59028
- assert(nOverflow>0 || iOverflow<i );
59029
- assert(nOverflow<2 || pOld->aiOvfl[0]==pOld->aiOvfl[1]-1);
59030
- assert(nOverflow<3 || pOld->aiOvfl[1]==pOld->aiOvfl[2]-1);
59031
- if( i==iOverflow ){
59032
- isDivider = 1;
59033
- if( (--nOverflow)>0 ){
59034
- iOverflow++;
59035
- }
59036
- }
59037
-
59038
- if( i==cntNew[k] ){
59039
- /* Cell i is the cell immediately following the last cell on new
59040
- ** sibling page k. If the siblings are not leaf pages of an
59041
- ** intkey b-tree, then cell i is a divider cell. */
59042
- pNew = apNew[++k];
59043
- if( !leafData ) continue;
59044
- }
59045
- assert( j<nOld );
59046
- assert( k<nNew );
59047
-
59048
- /* If the cell was originally divider cell (and is not now) or
59049
- ** an overflow cell, or if the cell was located on a different sibling
59050
- ** page before the balancing, then the pointer map entries associated
59051
- ** with any child or overflow pages need to be updated. */
59052
- if( isDivider || pOld->pgno!=pNew->pgno ){
59053
- if( !leafCorrection ){
59054
- ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
59055
- }
59056
- if( szCell[i]>pNew->minLocal ){
59057
- ptrmapPutOvflPtr(pNew, apCell[i], &rc);
59058
- }
59059
- }
59060
- }
59061
-
59062
- if( !leafCorrection ){
59063
- for(i=0; i<nNew; i++){
59064
- u32 key = get4byte(&apNew[i]->aData[8]);
59065
- ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
59066
- }
59067
- }
59716
+ }else if( ISAUTOVACUUM && !leafCorrection ){
59717
+ /* Fix the pointer map entries associated with the right-child of each
59718
+ ** sibling page. All other pointer map entries have already been taken
59719
+ ** care of. */
59720
+ for(i=0; i<nNew; i++){
59721
+ u32 key = get4byte(&apNew[i]->aData[8]);
59722
+ ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
59723
+ }
59724
+ }
59725
+
59726
+ assert( pParent->isInit );
59727
+ TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
59728
+ nOld, nNew, nCell));
59729
+
59730
+ /* Free any old pages that were not reused as new pages.
59731
+ */
59732
+ for(i=nNew; i<nOld; i++){
59733
+ freePage(apOld[i], &rc);
59734
+ }
5906859735
5906959736
#if 0
59737
+ if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){
5907059738
/* The ptrmapCheckPages() contains assert() statements that verify that
5907159739
** all pointer map pages are set correctly. This is helpful while
5907259740
** debugging. This is usually disabled because a corrupt database may
5907359741
** cause an assert() statement to fail. */
5907459742
ptrmapCheckPages(apNew, nNew);
5907559743
ptrmapCheckPages(&pParent, 1);
59744
+ }
5907659745
#endif
59077
- }
59078
-
59079
- assert( pParent->isInit );
59080
- TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
59081
- nOld, nNew, nCell));
5908259746
5908359747
/*
5908459748
** Cleanup before returning.
5908559749
*/
5908659750
balance_cleanup:
@@ -60461,12 +61125,18 @@
6046161125
}else{
6046261126
int contentOffset = get2byteNotZero(&data[hdr+5]);
6046361127
assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */
6046461128
memset(hit+contentOffset, 0, usableSize-contentOffset);
6046561129
memset(hit, 1, contentOffset);
61130
+ /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
61131
+ ** number of cells on the page. */
6046661132
nCell = get2byte(&data[hdr+3]);
61133
+ /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page
61134
+ ** immediately follows the b-tree page header. */
6046761135
cellStart = hdr + 12 - 4*pPage->leaf;
61136
+ /* EVIDENCE-OF: R-02776-14802 The cell pointer array consists of K 2-byte
61137
+ ** integer offsets to the cell contents. */
6046861138
for(i=0; i<nCell; i++){
6046961139
int pc = get2byte(&data[cellStart+i*2]);
6047061140
u32 size = 65536;
6047161141
int j;
6047261142
if( pc<=usableSize-4 ){
@@ -60478,18 +61148,27 @@
6047861148
"Corruption detected in cell %d on page %d",i,iPage);
6047961149
}else{
6048061150
for(j=pc+size-1; j>=pc; j--) hit[j]++;
6048161151
}
6048261152
}
61153
+ /* EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header
61154
+ ** is the offset of the first freeblock, or zero if there are no
61155
+ ** freeblocks on the page. */
6048361156
i = get2byte(&data[hdr+1]);
6048461157
while( i>0 ){
6048561158
int size, j;
6048661159
assert( i<=usableSize-4 ); /* Enforced by btreeInitPage() */
6048761160
size = get2byte(&data[i+2]);
6048861161
assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */
6048961162
for(j=i+size-1; j>=i; j--) hit[j]++;
61163
+ /* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a
61164
+ ** big-endian integer which is the offset in the b-tree page of the next
61165
+ ** freeblock in the chain, or zero if the freeblock is the last on the
61166
+ ** chain. */
6049061167
j = get2byte(&data[i]);
61168
+ /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
61169
+ ** increasing offset. */
6049161170
assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */
6049261171
assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */
6049361172
i = j;
6049461173
}
6049561174
for(i=cnt=0; i<usableSize; i++){
@@ -60499,10 +61178,15 @@
6049961178
checkAppendMsg(pCheck,
6050061179
"Multiple uses for byte %d of page %d", i, iPage);
6050161180
break;
6050261181
}
6050361182
}
61183
+ /* EVIDENCE-OF: R-43263-13491 The total number of bytes in all fragments
61184
+ ** is stored in the fifth field of the b-tree page header.
61185
+ ** EVIDENCE-OF: R-07161-27322 The one-byte integer at offset 7 gives the
61186
+ ** number of fragmented free bytes within the cell content area.
61187
+ */
6050461188
if( cnt!=data[hdr+7] ){
6050561189
checkAppendMsg(pCheck,
6050661190
"Fragmentation of %d bytes reported as %d on page %d",
6050761191
cnt, data[hdr+7], iPage);
6050861192
}
@@ -60902,10 +61586,15 @@
6090261586
*/
6090361587
SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
6090461588
return (p->pBt->btsFlags & BTS_READ_ONLY)!=0;
6090561589
}
6090661590
61591
+/*
61592
+** Return the size of the header added to each page by this module.
61593
+*/
61594
+SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return sizeof(MemPage); }
61595
+
6090761596
/************** End of btree.c ***********************************************/
6090861597
/************** Begin file backup.c ******************************************/
6090961598
/*
6091061599
** 2009 January 28
6091161600
**
@@ -61025,10 +61714,24 @@
6102561714
static int setDestPgsz(sqlite3_backup *p){
6102661715
int rc;
6102761716
rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
6102861717
return rc;
6102961718
}
61719
+
61720
+/*
61721
+** Check that there is no open read-transaction on the b-tree passed as the
61722
+** second argument. If there is not, return SQLITE_OK. Otherwise, if there
61723
+** is an open read-transaction, return SQLITE_ERROR and leave an error
61724
+** message in database handle db.
61725
+*/
61726
+static int checkReadTransaction(sqlite3 *db, Btree *p){
61727
+ if( sqlite3BtreeIsInReadTrans(p) ){
61728
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, "destination database is in use");
61729
+ return SQLITE_ERROR;
61730
+ }
61731
+ return SQLITE_OK;
61732
+}
6103061733
6103161734
/*
6103261735
** Create an sqlite3_backup process to copy the contents of zSrcDb from
6103361736
** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
6103461737
** a pointer to the new sqlite3_backup object.
@@ -61041,10 +61744,17 @@
6104161744
const char *zDestDb, /* Name of database within pDestDb */
6104261745
sqlite3* pSrcDb, /* Database connection to read from */
6104361746
const char *zSrcDb /* Name of database within pSrcDb */
6104461747
){
6104561748
sqlite3_backup *p; /* Value to return */
61749
+
61750
+#ifdef SQLITE_ENABLE_API_ARMOR
61751
+ if( !sqlite3SafetyCheckOk(pSrcDb)||!sqlite3SafetyCheckOk(pDestDb) ){
61752
+ (void)SQLITE_MISUSE_BKPT;
61753
+ return 0;
61754
+ }
61755
+#endif
6104661756
6104761757
/* Lock the source database handle. The destination database
6104861758
** handle is not locked in this routine, but it is locked in
6104961759
** sqlite3_backup_step(). The user is required to ensure that no
6105061760
** other thread accesses the destination handle for the duration
@@ -61078,16 +61788,19 @@
6107861788
p->pDestDb = pDestDb;
6107961789
p->pSrcDb = pSrcDb;
6108061790
p->iNext = 1;
6108161791
p->isAttached = 0;
6108261792
61083
- if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
61793
+ if( 0==p->pSrc || 0==p->pDest
61794
+ || setDestPgsz(p)==SQLITE_NOMEM
61795
+ || checkReadTransaction(pDestDb, p->pDest)!=SQLITE_OK
61796
+ ){
6108461797
/* One (or both) of the named databases did not exist or an OOM
61085
- ** error was hit. The error has already been written into the
61086
- ** pDestDb handle. All that is left to do here is free the
61087
- ** sqlite3_backup structure.
61088
- */
61798
+ ** error was hit. Or there is a transaction open on the destination
61799
+ ** database. The error has already been written into the pDestDb
61800
+ ** handle. All that is left to do here is free the sqlite3_backup
61801
+ ** structure. */
6108961802
sqlite3_free(p);
6109061803
p = 0;
6109161804
}
6109261805
}
6109361806
if( p ){
@@ -61238,10 +61951,13 @@
6123861951
int rc;
6123961952
int destMode; /* Destination journal mode */
6124061953
int pgszSrc = 0; /* Source page size */
6124161954
int pgszDest = 0; /* Destination page size */
6124261955
61956
+#ifdef SQLITE_ENABLE_API_ARMOR
61957
+ if( p==0 ) return SQLITE_MISUSE_BKPT;
61958
+#endif
6124361959
sqlite3_mutex_enter(p->pSrcDb->mutex);
6124461960
sqlite3BtreeEnter(p->pSrc);
6124561961
if( p->pDestDb ){
6124661962
sqlite3_mutex_enter(p->pDestDb->mutex);
6124761963
}
@@ -61527,18 +62243,30 @@
6152762243
/*
6152862244
** Return the number of pages still to be backed up as of the most recent
6152962245
** call to sqlite3_backup_step().
6153062246
*/
6153162247
SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
62248
+#ifdef SQLITE_ENABLE_API_ARMOR
62249
+ if( p==0 ){
62250
+ (void)SQLITE_MISUSE_BKPT;
62251
+ return 0;
62252
+ }
62253
+#endif
6153262254
return p->nRemaining;
6153362255
}
6153462256
6153562257
/*
6153662258
** Return the total number of pages in the source database as of the most
6153762259
** recent call to sqlite3_backup_step().
6153862260
*/
6153962261
SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
62262
+#ifdef SQLITE_ENABLE_API_ARMOR
62263
+ if( p==0 ){
62264
+ (void)SQLITE_MISUSE_BKPT;
62265
+ return 0;
62266
+ }
62267
+#endif
6154062268
return p->nPagecount;
6154162269
}
6154262270
6154362271
/*
6154462272
** This function is called after the contents of page iPage of the
@@ -63825,10 +64553,38 @@
6382564553
}
6382664554
p->nOp += nOp;
6382764555
}
6382864556
return addr;
6382964557
}
64558
+
64559
+#if defined(SQLITE_ENABLE_STMT_SCANSTATUS)
64560
+/*
64561
+** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus().
64562
+*/
64563
+SQLITE_PRIVATE void sqlite3VdbeScanStatus(
64564
+ Vdbe *p, /* VM to add scanstatus() to */
64565
+ int addrExplain, /* Address of OP_Explain (or 0) */
64566
+ int addrLoop, /* Address of loop counter */
64567
+ int addrVisit, /* Address of rows visited counter */
64568
+ LogEst nEst, /* Estimated number of output rows */
64569
+ const char *zName /* Name of table or index being scanned */
64570
+){
64571
+ int nByte = (p->nScan+1) * sizeof(ScanStatus);
64572
+ ScanStatus *aNew;
64573
+ aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
64574
+ if( aNew ){
64575
+ ScanStatus *pNew = &aNew[p->nScan++];
64576
+ pNew->addrExplain = addrExplain;
64577
+ pNew->addrLoop = addrLoop;
64578
+ pNew->addrVisit = addrVisit;
64579
+ pNew->nEst = nEst;
64580
+ pNew->zName = sqlite3DbStrDup(p->db, zName);
64581
+ p->aScan = aNew;
64582
+ }
64583
+}
64584
+#endif
64585
+
6383064586
6383164587
/*
6383264588
** Change the value of the P1 operand for a specific instruction.
6383364589
** This routine is useful when a large program is loaded from a
6383464590
** static array using sqlite3VdbeAddOpList but we want to make a
@@ -64924,10 +65680,13 @@
6492465680
p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
6492565681
p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
6492665682
p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
6492765683
&zCsr, zEnd, &nByte);
6492865684
p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
65685
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
65686
+ p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte);
65687
+#endif
6492965688
if( nByte ){
6493065689
p->pFree = sqlite3DbMallocZero(db, nByte);
6493165690
}
6493265691
zCsr = p->pFree;
6493365692
zEnd = &zCsr[nByte];
@@ -64991,10 +65750,13 @@
6499165750
** is used, for example, when a trigger sub-program is halted to restore
6499265751
** control to the main program.
6499365752
*/
6499465753
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
6499565754
Vdbe *v = pFrame->v;
65755
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
65756
+ v->anExec = pFrame->anExec;
65757
+#endif
6499665758
v->aOnceFlag = pFrame->aOnceFlag;
6499765759
v->nOnceFlag = pFrame->nOnceFlag;
6499865760
v->aOp = pFrame->aOp;
6499965761
v->nOp = pFrame->nOp;
6500065762
v->aMem = pFrame->aMem;
@@ -65001,10 +65763,11 @@
6500165763
v->nMem = pFrame->nMem;
6500265764
v->apCsr = pFrame->apCsr;
6500365765
v->nCursor = pFrame->nCursor;
6500465766
v->db->lastRowid = pFrame->lastRowid;
6500565767
v->nChange = pFrame->nChange;
65768
+ v->db->nChange = pFrame->nDbChange;
6500665769
return pFrame->pc;
6500765770
}
6500865771
6500965772
/*
6501065773
** Close all cursors.
@@ -65568,10 +66331,11 @@
6556866331
** so, abort any other statements this handle currently has active.
6556966332
*/
6557066333
sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
6557166334
sqlite3CloseSavepoints(db);
6557266335
db->autoCommit = 1;
66336
+ p->nChange = 0;
6557366337
}
6557466338
}
6557566339
}
6557666340
6557766341
/* Check for immediate foreign key violations. */
@@ -65608,18 +66372,20 @@
6560866372
sqlite3VdbeLeave(p);
6560966373
return SQLITE_BUSY;
6561066374
}else if( rc!=SQLITE_OK ){
6561166375
p->rc = rc;
6561266376
sqlite3RollbackAll(db, SQLITE_OK);
66377
+ p->nChange = 0;
6561366378
}else{
6561466379
db->nDeferredCons = 0;
6561566380
db->nDeferredImmCons = 0;
6561666381
db->flags &= ~SQLITE_DeferFKs;
6561766382
sqlite3CommitInternalChanges(db);
6561866383
}
6561966384
}else{
6562066385
sqlite3RollbackAll(db, SQLITE_OK);
66386
+ p->nChange = 0;
6562166387
}
6562266388
db->nStatement = 0;
6562366389
}else if( eStatementOp==0 ){
6562466390
if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
6562566391
eStatementOp = SAVEPOINT_RELEASE;
@@ -65627,10 +66393,11 @@
6562766393
eStatementOp = SAVEPOINT_ROLLBACK;
6562866394
}else{
6562966395
sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
6563066396
sqlite3CloseSavepoints(db);
6563166397
db->autoCommit = 1;
66398
+ p->nChange = 0;
6563266399
}
6563366400
}
6563466401
6563566402
/* If eStatementOp is non-zero, then a statement transaction needs to
6563666403
** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
@@ -65647,10 +66414,11 @@
6564766414
p->zErrMsg = 0;
6564866415
}
6564966416
sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
6565066417
sqlite3CloseSavepoints(db);
6565166418
db->autoCommit = 1;
66419
+ p->nChange = 0;
6565266420
}
6565366421
}
6565466422
6565566423
/* If this was an INSERT, UPDATE or DELETE and no statement transaction
6565666424
** has been rolled back, update the database connection change-counter.
@@ -65908,10 +66676,16 @@
6590866676
for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
6590966677
vdbeFreeOpArray(db, p->aOp, p->nOp);
6591066678
sqlite3DbFree(db, p->aColName);
6591166679
sqlite3DbFree(db, p->zSql);
6591266680
sqlite3DbFree(db, p->pFree);
66681
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
66682
+ for(i=0; i<p->nScan; i++){
66683
+ sqlite3DbFree(db, p->aScan[i].zName);
66684
+ }
66685
+ sqlite3DbFree(db, p->aScan);
66686
+#endif
6591366687
}
6591466688
6591566689
/*
6591666690
** Delete an entire VDBE.
6591766691
*/
@@ -66066,13 +66840,11 @@
6606666840
/* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
6606766841
# define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
6606866842
i64 i = pMem->u.i;
6606966843
u64 u;
6607066844
if( i<0 ){
66071
- if( i<(-MAX_6BYTE) ) return 6;
66072
- /* Previous test prevents: u = -(-9223372036854775808) */
66073
- u = -i;
66845
+ u = ~i;
6607466846
}else{
6607566847
u = i;
6607666848
}
6607766849
if( u<=127 ){
6607866850
return ((i&1)==i && file_format>=4) ? 8+(u32)u : 1;
@@ -66234,14 +67006,18 @@
6623467006
){
6623567007
u64 x = FOUR_BYTE_UINT(buf);
6623667008
u32 y = FOUR_BYTE_UINT(buf+4);
6623767009
x = (x<<32) + y;
6623867010
if( serial_type==6 ){
67011
+ /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit
67012
+ ** twos-complement integer. */
6623967013
pMem->u.i = *(i64*)&x;
6624067014
pMem->flags = MEM_Int;
6624167015
testcase( pMem->u.i<0 );
6624267016
}else{
67017
+ /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit
67018
+ ** floating point number. */
6624367019
#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
6624467020
/* Verify that integers and floating point values use the same
6624567021
** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
6624667022
** defined that 64-bit floating point values really are mixed
6624767023
** endian.
@@ -66265,39 +67041,50 @@
6626567041
Mem *pMem /* Memory cell to write value into */
6626667042
){
6626767043
switch( serial_type ){
6626867044
case 10: /* Reserved for future use */
6626967045
case 11: /* Reserved for future use */
66270
- case 0: { /* NULL */
67046
+ case 0: { /* Null */
67047
+ /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
6627167048
pMem->flags = MEM_Null;
6627267049
break;
6627367050
}
66274
- case 1: { /* 1-byte signed integer */
67051
+ case 1: {
67052
+ /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
67053
+ ** integer. */
6627567054
pMem->u.i = ONE_BYTE_INT(buf);
6627667055
pMem->flags = MEM_Int;
6627767056
testcase( pMem->u.i<0 );
6627867057
return 1;
6627967058
}
6628067059
case 2: { /* 2-byte signed integer */
67060
+ /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
67061
+ ** twos-complement integer. */
6628167062
pMem->u.i = TWO_BYTE_INT(buf);
6628267063
pMem->flags = MEM_Int;
6628367064
testcase( pMem->u.i<0 );
6628467065
return 2;
6628567066
}
6628667067
case 3: { /* 3-byte signed integer */
67068
+ /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
67069
+ ** twos-complement integer. */
6628767070
pMem->u.i = THREE_BYTE_INT(buf);
6628867071
pMem->flags = MEM_Int;
6628967072
testcase( pMem->u.i<0 );
6629067073
return 3;
6629167074
}
6629267075
case 4: { /* 4-byte signed integer */
67076
+ /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
67077
+ ** twos-complement integer. */
6629367078
pMem->u.i = FOUR_BYTE_INT(buf);
6629467079
pMem->flags = MEM_Int;
6629567080
testcase( pMem->u.i<0 );
6629667081
return 4;
6629767082
}
6629867083
case 5: { /* 6-byte signed integer */
67084
+ /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
67085
+ ** twos-complement integer. */
6629967086
pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
6630067087
pMem->flags = MEM_Int;
6630167088
testcase( pMem->u.i<0 );
6630267089
return 6;
6630367090
}
@@ -66307,15 +67094,21 @@
6630767094
** to avoid having to move the frame pointer in the common case */
6630867095
return serialGet(buf,serial_type,pMem);
6630967096
}
6631067097
case 8: /* Integer 0 */
6631167098
case 9: { /* Integer 1 */
67099
+ /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */
67100
+ /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
6631267101
pMem->u.i = serial_type-8;
6631367102
pMem->flags = MEM_Int;
6631467103
return 0;
6631567104
}
6631667105
default: {
67106
+ /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
67107
+ ** length.
67108
+ ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and
67109
+ ** (N-13)/2 bytes in length. */
6631767110
static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
6631867111
pMem->z = (char *)buf;
6631967112
pMem->n = (serial_type-12)/2;
6632067113
pMem->flags = aFlag[serial_type&1];
6632167114
return pMem->n;
@@ -68275,15 +69068,23 @@
6827569068
sqlite3_stmt *pStmt,
6827669069
int N,
6827769070
const void *(*xFunc)(Mem*),
6827869071
int useType
6827969072
){
68280
- const void *ret = 0;
68281
- Vdbe *p = (Vdbe *)pStmt;
69073
+ const void *ret;
69074
+ Vdbe *p;
6828269075
int n;
68283
- sqlite3 *db = p->db;
68284
-
69076
+ sqlite3 *db;
69077
+#ifdef SQLITE_ENABLE_API_ARMOR
69078
+ if( pStmt==0 ){
69079
+ (void)SQLITE_MISUSE_BKPT;
69080
+ return 0;
69081
+ }
69082
+#endif
69083
+ ret = 0;
69084
+ p = (Vdbe *)pStmt;
69085
+ db = p->db;
6828569086
assert( db!=0 );
6828669087
n = sqlite3_column_count(pStmt);
6828769088
if( N<n && N>=0 ){
6828869089
N += useType*n;
6828969090
sqlite3_mutex_enter(db->mutex);
@@ -68744,10 +69545,16 @@
6874469545
** prepared statement for the database connection. Return NULL if there
6874569546
** are no more.
6874669547
*/
6874769548
SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
6874869549
sqlite3_stmt *pNext;
69550
+#ifdef SQLITE_ENABLE_API_ARMOR
69551
+ if( !sqlite3SafetyCheckOk(pDb) ){
69552
+ (void)SQLITE_MISUSE_BKPT;
69553
+ return 0;
69554
+ }
69555
+#endif
6874969556
sqlite3_mutex_enter(pDb->mutex);
6875069557
if( pStmt==0 ){
6875169558
pNext = (sqlite3_stmt*)pDb->pVdbe;
6875269559
}else{
6875369560
pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
@@ -68759,15 +69566,91 @@
6875969566
/*
6876069567
** Return the value of a status counter for a prepared statement
6876169568
*/
6876269569
SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
6876369570
Vdbe *pVdbe = (Vdbe*)pStmt;
68764
- u32 v = pVdbe->aCounter[op];
69571
+ u32 v;
69572
+#ifdef SQLITE_ENABLE_API_ARMOR
69573
+ if( !pStmt ){
69574
+ (void)SQLITE_MISUSE_BKPT;
69575
+ return 0;
69576
+ }
69577
+#endif
69578
+ v = pVdbe->aCounter[op];
6876569579
if( resetFlag ) pVdbe->aCounter[op] = 0;
6876669580
return (int)v;
6876769581
}
6876869582
69583
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
69584
+/*
69585
+** Return status data for a single loop within query pStmt.
69586
+*/
69587
+SQLITE_API int sqlite3_stmt_scanstatus(
69588
+ sqlite3_stmt *pStmt, /* Prepared statement being queried */
69589
+ int idx, /* Index of loop to report on */
69590
+ int iScanStatusOp, /* Which metric to return */
69591
+ void *pOut /* OUT: Write the answer here */
69592
+){
69593
+ Vdbe *p = (Vdbe*)pStmt;
69594
+ ScanStatus *pScan;
69595
+ if( idx<0 || idx>=p->nScan ) return 1;
69596
+ pScan = &p->aScan[idx];
69597
+ switch( iScanStatusOp ){
69598
+ case SQLITE_SCANSTAT_NLOOP: {
69599
+ *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
69600
+ break;
69601
+ }
69602
+ case SQLITE_SCANSTAT_NVISIT: {
69603
+ *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
69604
+ break;
69605
+ }
69606
+ case SQLITE_SCANSTAT_EST: {
69607
+ double r = 1.0;
69608
+ LogEst x = pScan->nEst;
69609
+ while( x<100 ){
69610
+ x += 10;
69611
+ r *= 0.5;
69612
+ }
69613
+ *(double*)pOut = r*sqlite3LogEstToInt(x);
69614
+ break;
69615
+ }
69616
+ case SQLITE_SCANSTAT_NAME: {
69617
+ *(const char**)pOut = pScan->zName;
69618
+ break;
69619
+ }
69620
+ case SQLITE_SCANSTAT_EXPLAIN: {
69621
+ if( pScan->addrExplain ){
69622
+ *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z;
69623
+ }else{
69624
+ *(const char**)pOut = 0;
69625
+ }
69626
+ break;
69627
+ }
69628
+ case SQLITE_SCANSTAT_SELECTID: {
69629
+ if( pScan->addrExplain ){
69630
+ *(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
69631
+ }else{
69632
+ *(int*)pOut = -1;
69633
+ }
69634
+ break;
69635
+ }
69636
+ default: {
69637
+ return 1;
69638
+ }
69639
+ }
69640
+ return 0;
69641
+}
69642
+
69643
+/*
69644
+** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
69645
+*/
69646
+SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
69647
+ Vdbe *p = (Vdbe*)pStmt;
69648
+ memset(p->anExec, 0, p->nOp * sizeof(i64));
69649
+}
69650
+#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
69651
+
6876969652
/************** End of vdbeapi.c *********************************************/
6877069653
/************** Begin file vdbetrace.c ***************************************/
6877169654
/*
6877269655
** 2009 November 25
6877369656
**
@@ -69649,10 +70532,13 @@
6964970532
#ifdef VDBE_PROFILE
6965070533
start = sqlite3Hwtime();
6965170534
#endif
6965270535
nVmStep++;
6965370536
pOp = &aOp[pc];
70537
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
70538
+ if( p->anExec ) p->anExec[pc]++;
70539
+#endif
6965470540
6965570541
/* Only allow tracing if SQLITE_DEBUG is defined.
6965670542
*/
6965770543
#ifdef SQLITE_DEBUG
6965870544
if( db->flags & SQLITE_VdbeTrace ){
@@ -71674,11 +72560,14 @@
7167472560
testcase( serial_type==127 );
7167572561
testcase( serial_type==128 );
7167672562
nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type);
7167772563
}while( (--pRec)>=pData0 );
7167872564
71679
- /* Add the initial header varint and total the size */
72565
+ /* EVIDENCE-OF: R-22564-11647 The header begins with a single varint
72566
+ ** which determines the total number of bytes in the header. The varint
72567
+ ** value is the size of the header in bytes including the size varint
72568
+ ** itself. */
7168072569
testcase( nHdr==126 );
7168172570
testcase( nHdr==127 );
7168272571
if( nHdr<=126 ){
7168372572
/* The common case */
7168472573
nHdr += 1;
@@ -71708,11 +72597,15 @@
7170872597
j = nHdr;
7170972598
assert( pData0<=pLast );
7171072599
pRec = pData0;
7171172600
do{
7171272601
serial_type = pRec->uTemp;
72602
+ /* EVIDENCE-OF: R-06529-47362 Following the size varint are one or more
72603
+ ** additional varints, one per column. */
7171372604
i += putVarint32(&zNewRecord[i], serial_type); /* serial type */
72605
+ /* EVIDENCE-OF: R-64536-51728 The values for each column in the record
72606
+ ** immediately follow the header. */
7171472607
j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */
7171572608
}while( (++pRec)<=pLast );
7171672609
assert( i==nHdr );
7171772610
assert( j==nByte );
7171872611
@@ -72843,14 +73736,14 @@
7284373736
}
7284473737
pIdxKey = &r;
7284573738
}else{
7284673739
pIdxKey = sqlite3VdbeAllocUnpackedRecord(
7284773740
pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree
72848
- );
73741
+ );
7284973742
if( pIdxKey==0 ) goto no_mem;
7285073743
assert( pIn3->flags & MEM_Blob );
72851
- assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */
73744
+ ExpandBlob(pIn3);
7285273745
sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey);
7285373746
}
7285473747
pIdxKey->default_rc = 0;
7285573748
if( pOp->opcode==OP_NoConflict ){
7285673749
/* For the OP_NoConflict opcode, take the jump if any of the
@@ -73540,13 +74433,13 @@
7354074433
}
7354174434
/* Opcode: Rewind P1 P2 * * *
7354274435
**
7354374436
** The next use of the Rowid or Column or Next instruction for P1
7354474437
** will refer to the first entry in the database table or index.
73545
-** If the table or index is empty and P2>0, then jump immediately to P2.
73546
-** If P2 is 0 or if the table or index is not empty, fall through
73547
-** to the following instruction.
74438
+** If the table or index is empty, jump immediately to P2.
74439
+** If the table or index is not empty, fall through to the following
74440
+** instruction.
7354874441
**
7354974442
** This opcode leaves the cursor configured to move in forward order,
7355074443
** from the beginning toward the end. In other words, the cursor is
7355174444
** configured to use Next, not Prev.
7355274445
*/
@@ -74458,10 +75351,13 @@
7445875351
pFrame->aOp = p->aOp;
7445975352
pFrame->nOp = p->nOp;
7446075353
pFrame->token = pProgram->token;
7446175354
pFrame->aOnceFlag = p->aOnceFlag;
7446275355
pFrame->nOnceFlag = p->nOnceFlag;
75356
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
75357
+ pFrame->anExec = p->anExec;
75358
+#endif
7446375359
7446475360
pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
7446575361
for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
7446675362
pMem->flags = MEM_Undefined;
7446775363
pMem->db = db;
@@ -74475,10 +75371,11 @@
7447575371
7447675372
p->nFrame++;
7447775373
pFrame->pParent = p->pFrame;
7447875374
pFrame->lastRowid = lastRowid;
7447975375
pFrame->nChange = p->nChange;
75376
+ pFrame->nDbChange = p->db->nChange;
7448075377
p->nChange = 0;
7448175378
p->pFrame = pFrame;
7448275379
p->aMem = aMem = &VdbeFrameMem(pFrame)[-1];
7448375380
p->nMem = pFrame->nChildMem;
7448475381
p->nCursor = (u16)pFrame->nChildCsr;
@@ -74485,10 +75382,13 @@
7448575382
p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
7448675383
p->aOp = aOp = pProgram->aOp;
7448775384
p->nOp = pProgram->nOp;
7448875385
p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
7448975386
p->nOnceFlag = pProgram->nOnce;
75387
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
75388
+ p->anExec = 0;
75389
+#endif
7449075390
pc = -1;
7449175391
memset(p->aOnceFlag, 0, p->nOnceFlag);
7449275392
7449375393
break;
7449475394
}
@@ -75673,10 +76573,15 @@
7567376573
char *zErr = 0;
7567476574
Table *pTab;
7567576575
Parse *pParse = 0;
7567676576
Incrblob *pBlob = 0;
7567776577
76578
+#ifdef SQLITE_ENABLE_API_ARMOR
76579
+ if( !sqlite3SafetyCheckOk(db) || ppBlob==0 || zTable==0 ){
76580
+ return SQLITE_MISUSE_BKPT;
76581
+ }
76582
+#endif
7567876583
flags = !!flags; /* flags = (flags ? 1 : 0); */
7567976584
*ppBlob = 0;
7568076585
7568176586
sqlite3_mutex_enter(db->mutex);
7568276587
@@ -75891,11 +76796,10 @@
7589176796
v = (Vdbe*)p->pStmt;
7589276797
7589376798
if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
7589476799
/* Request is out of range. Return a transient error. */
7589576800
rc = SQLITE_ERROR;
75896
- sqlite3Error(db, SQLITE_ERROR);
7589776801
}else if( v==0 ){
7589876802
/* If there is no statement handle, then the blob-handle has
7589976803
** already been invalidated. Return SQLITE_ABORT in this case.
7590076804
*/
7590176805
rc = SQLITE_ABORT;
@@ -75909,14 +76813,14 @@
7590976813
sqlite3BtreeLeaveCursor(p->pCsr);
7591076814
if( rc==SQLITE_ABORT ){
7591176815
sqlite3VdbeFinalize(v);
7591276816
p->pStmt = 0;
7591376817
}else{
75914
- db->errCode = rc;
7591576818
v->rc = rc;
7591676819
}
7591776820
}
76821
+ sqlite3Error(db, rc);
7591876822
rc = sqlite3ApiExit(db, rc);
7591976823
sqlite3_mutex_leave(db->mutex);
7592076824
return rc;
7592176825
}
7592276826
@@ -76089,11 +76993,11 @@
7608976993
** itself.
7609076994
**
7609176995
** The sorter is running in multi-threaded mode if (a) the library was built
7609276996
** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater
7609376997
** than zero, and (b) worker threads have been enabled at runtime by calling
76094
-** sqlite3_config(SQLITE_CONFIG_WORKER_THREADS, ...).
76998
+** "PRAGMA threads=N" with some value of N greater than 0.
7609576999
**
7609677000
** When Rewind() is called, any data remaining in memory is flushed to a
7609777001
** final PMA. So at this point the data is stored in some number of sorted
7609877002
** PMAs within temporary files on disk.
7609977003
**
@@ -76134,10 +77038,17 @@
7613477038
*/
7613577039
#if 0
7613677040
# define SQLITE_DEBUG_SORTER_THREADS 1
7613777041
#endif
7613877042
77043
+/*
77044
+** Hard-coded maximum amount of data to accumulate in memory before flushing
77045
+** to a level 0 PMA. The purpose of this limit is to prevent various integer
77046
+** overflows. 512MiB.
77047
+*/
77048
+#define SQLITE_MAX_MXPMASIZE (1<<29)
77049
+
7613977050
/*
7614077051
** Private objects used by the sorter
7614177052
*/
7614277053
typedef struct MergeEngine MergeEngine; /* Merge PMAs together */
7614377054
typedef struct PmaReader PmaReader; /* Incrementally read one PMA */
@@ -76832,17 +77743,15 @@
7683277743
7683377744
if( !sqlite3TempInMemory(db) ){
7683477745
pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
7683577746
mxCache = db->aDb[0].pSchema->cache_size;
7683677747
if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
76837
- pSorter->mxPmaSize = mxCache * pgsz;
77748
+ pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_MXPMASIZE);
7683877749
76839
- /* If the application has not configure scratch memory using
76840
- ** SQLITE_CONFIG_SCRATCH then we assume it is OK to do large memory
76841
- ** allocations. If scratch memory has been configured, then assume
76842
- ** large memory allocations should be avoided to prevent heap
76843
- ** fragmentation.
77750
+ /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
77751
+ ** scratch memory using SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary
77752
+ ** large heap allocations.
7684477753
*/
7684577754
if( sqlite3GlobalConfig.pScratch==0 ){
7684677755
assert( pSorter->iMemory==0 );
7684777756
pSorter->nMemory = pgsz;
7684877757
pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
@@ -79210,19 +80119,19 @@
7921080119
**
7921180120
** incrAggFunctionDepth(pExpr,n) is the main routine. incrAggDepth(..)
7921280121
** is a helper function - a callback for the tree walker.
7921380122
*/
7921480123
static int incrAggDepth(Walker *pWalker, Expr *pExpr){
79215
- if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.i;
80124
+ if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.n;
7921680125
return WRC_Continue;
7921780126
}
7921880127
static void incrAggFunctionDepth(Expr *pExpr, int N){
7921980128
if( N>0 ){
7922080129
Walker w;
7922180130
memset(&w, 0, sizeof(w));
7922280131
w.xExprCallback = incrAggDepth;
79223
- w.u.i = N;
80132
+ w.u.n = N;
7922480133
sqlite3WalkExpr(&w, pExpr);
7922580134
}
7922680135
}
7922780136
7922880137
/*
@@ -79766,11 +80675,11 @@
7976680675
double r = -1.0;
7976780676
if( p->op!=TK_FLOAT ) return -1;
7976880677
sqlite3AtoF(p->u.zToken, &r, sqlite3Strlen30(p->u.zToken), SQLITE_UTF8);
7976980678
assert( r>=0.0 );
7977080679
if( r>1.0 ) return -1;
79771
- return (int)(r*1000.0);
80680
+ return (int)(r*134217728.0);
7977280681
}
7977380682
7977480683
/*
7977580684
** This routine is callback for sqlite3WalkExpr().
7977680685
**
@@ -79898,11 +80807,11 @@
7989880807
** EVIDENCE-OF: R-36850-34127 The likely(X) function is short-hand for
7989980808
** likelihood(X,0.9375).
7990080809
** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent to
7990180810
** likelihood(X,0.9375). */
7990280811
/* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */
79903
- pExpr->iTable = pDef->zName[0]=='u' ? 62 : 938;
80812
+ pExpr->iTable = pDef->zName[0]=='u' ? 8388608 : 125829120;
7990480813
}
7990580814
}
7990680815
#ifndef SQLITE_OMIT_AUTHORIZATION
7990780816
auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
7990880817
if( auth!=SQLITE_OK ){
@@ -81855,69 +82764,79 @@
8185582764
sqlite3DbFree(db, pList->a);
8185682765
sqlite3DbFree(db, pList);
8185782766
}
8185882767
8185982768
/*
81860
-** These routines are Walker callbacks. Walker.u.pi is a pointer
81861
-** to an integer. These routines are checking an expression to see
81862
-** if it is a constant. Set *Walker.u.i to 0 if the expression is
81863
-** not constant.
82769
+** These routines are Walker callbacks used to check expressions to
82770
+** see if they are "constant" for some definition of constant. The
82771
+** Walker.eCode value determines the type of "constant" we are looking
82772
+** for.
8186482773
**
8186582774
** These callback routines are used to implement the following:
8186682775
**
81867
-** sqlite3ExprIsConstant() pWalker->u.i==1
81868
-** sqlite3ExprIsConstantNotJoin() pWalker->u.i==2
81869
-** sqlite3ExprIsConstantOrFunction() pWalker->u.i==3 or 4
82776
+** sqlite3ExprIsConstant() pWalker->eCode==1
82777
+** sqlite3ExprIsConstantNotJoin() pWalker->eCode==2
82778
+** sqlite3ExprRefOneTableOnly() pWalker->eCode==3
82779
+** sqlite3ExprIsConstantOrFunction() pWalker->eCode==4 or 5
82780
+**
82781
+** In all cases, the callbacks set Walker.eCode=0 and abort if the expression
82782
+** is found to not be a constant.
8187082783
**
8187182784
** The sqlite3ExprIsConstantOrFunction() is used for evaluating expressions
81872
-** in a CREATE TABLE statement. The Walker.u.i value is 4 when parsing
81873
-** an existing schema and 3 when processing a new statement. A bound
82785
+** in a CREATE TABLE statement. The Walker.eCode value is 5 when parsing
82786
+** an existing schema and 4 when processing a new statement. A bound
8187482787
** parameter raises an error for new statements, but is silently converted
8187582788
** to NULL for existing schemas. This allows sqlite_master tables that
8187682789
** contain a bound parameter because they were generated by older versions
8187782790
** of SQLite to be parsed by newer versions of SQLite without raising a
8187882791
** malformed schema error.
8187982792
*/
8188082793
static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
8188182794
81882
- /* If pWalker->u.i is 2 then any term of the expression that comes from
81883
- ** the ON or USING clauses of a join disqualifies the expression
82795
+ /* If pWalker->eCode is 2 then any term of the expression that comes from
82796
+ ** the ON or USING clauses of a left join disqualifies the expression
8188482797
** from being considered constant. */
81885
- if( pWalker->u.i==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
81886
- pWalker->u.i = 0;
82798
+ if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
82799
+ pWalker->eCode = 0;
8188782800
return WRC_Abort;
8188882801
}
8188982802
8189082803
switch( pExpr->op ){
8189182804
/* Consider functions to be constant if all their arguments are constant
81892
- ** and either pWalker->u.i==3 or 4 or the function as the SQLITE_FUNC_CONST
81893
- ** flag. */
82805
+ ** and either pWalker->eCode==4 or 5 or the function has the
82806
+ ** SQLITE_FUNC_CONST flag. */
8189482807
case TK_FUNCTION:
81895
- if( pWalker->u.i>=3 || ExprHasProperty(pExpr,EP_Constant) ){
82808
+ if( pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_Constant) ){
8189682809
return WRC_Continue;
82810
+ }else{
82811
+ pWalker->eCode = 0;
82812
+ return WRC_Abort;
8189782813
}
81898
- /* Fall through */
8189982814
case TK_ID:
8190082815
case TK_COLUMN:
8190182816
case TK_AGG_FUNCTION:
8190282817
case TK_AGG_COLUMN:
8190382818
testcase( pExpr->op==TK_ID );
8190482819
testcase( pExpr->op==TK_COLUMN );
8190582820
testcase( pExpr->op==TK_AGG_FUNCTION );
8190682821
testcase( pExpr->op==TK_AGG_COLUMN );
81907
- pWalker->u.i = 0;
81908
- return WRC_Abort;
82822
+ if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){
82823
+ return WRC_Continue;
82824
+ }else{
82825
+ pWalker->eCode = 0;
82826
+ return WRC_Abort;
82827
+ }
8190982828
case TK_VARIABLE:
81910
- if( pWalker->u.i==4 ){
82829
+ if( pWalker->eCode==5 ){
8191182830
/* Silently convert bound parameters that appear inside of CREATE
8191282831
** statements into a NULL when parsing the CREATE statement text out
8191382832
** of the sqlite_master table */
8191482833
pExpr->op = TK_NULL;
81915
- }else if( pWalker->u.i==3 ){
82834
+ }else if( pWalker->eCode==4 ){
8191682835
/* A bound parameter in a CREATE statement that originates from
8191782836
** sqlite3_prepare() causes an error */
81918
- pWalker->u.i = 0;
82837
+ pWalker->eCode = 0;
8191982838
return WRC_Abort;
8192082839
}
8192182840
/* Fall through */
8192282841
default:
8192382842
testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
@@ -81925,57 +82844,68 @@
8192582844
return WRC_Continue;
8192682845
}
8192782846
}
8192882847
static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
8192982848
UNUSED_PARAMETER(NotUsed);
81930
- pWalker->u.i = 0;
82849
+ pWalker->eCode = 0;
8193182850
return WRC_Abort;
8193282851
}
81933
-static int exprIsConst(Expr *p, int initFlag){
82852
+static int exprIsConst(Expr *p, int initFlag, int iCur){
8193482853
Walker w;
8193582854
memset(&w, 0, sizeof(w));
81936
- w.u.i = initFlag;
82855
+ w.eCode = initFlag;
8193782856
w.xExprCallback = exprNodeIsConstant;
8193882857
w.xSelectCallback = selectNodeIsConstant;
82858
+ w.u.iCur = iCur;
8193982859
sqlite3WalkExpr(&w, p);
81940
- return w.u.i;
82860
+ return w.eCode;
8194182861
}
8194282862
8194382863
/*
81944
-** Walk an expression tree. Return 1 if the expression is constant
82864
+** Walk an expression tree. Return non-zero if the expression is constant
8194582865
** and 0 if it involves variables or function calls.
8194682866
**
8194782867
** For the purposes of this function, a double-quoted string (ex: "abc")
8194882868
** is considered a variable but a single-quoted string (ex: 'abc') is
8194982869
** a constant.
8195082870
*/
8195182871
SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
81952
- return exprIsConst(p, 1);
82872
+ return exprIsConst(p, 1, 0);
8195382873
}
8195482874
8195582875
/*
81956
-** Walk an expression tree. Return 1 if the expression is constant
82876
+** Walk an expression tree. Return non-zero if the expression is constant
8195782877
** that does no originate from the ON or USING clauses of a join.
8195882878
** Return 0 if it involves variables or function calls or terms from
8195982879
** an ON or USING clause.
8196082880
*/
8196182881
SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
81962
- return exprIsConst(p, 2);
82882
+ return exprIsConst(p, 2, 0);
8196382883
}
8196482884
8196582885
/*
81966
-** Walk an expression tree. Return 1 if the expression is constant
82886
+** Walk an expression tree. Return non-zero if the expression constant
82887
+** for any single row of the table with cursor iCur. In other words, the
82888
+** expression must not refer to any non-deterministic function nor any
82889
+** table other than iCur.
82890
+*/
82891
+SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
82892
+ return exprIsConst(p, 3, iCur);
82893
+}
82894
+
82895
+/*
82896
+** Walk an expression tree. Return non-zero if the expression is constant
8196782897
** or a function call with constant arguments. Return and 0 if there
8196882898
** are any variables.
8196982899
**
8197082900
** For the purposes of this function, a double-quoted string (ex: "abc")
8197182901
** is considered a variable but a single-quoted string (ex: 'abc') is
8197282902
** a constant.
8197382903
*/
8197482904
SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
8197582905
assert( isInit==0 || isInit==1 );
81976
- return exprIsConst(p, 3+isInit);
82906
+ return exprIsConst(p, 4+isInit, 0);
8197782907
}
8197882908
8197982909
/*
8198082910
** If the expression p codes a constant integer that is small enough
8198182911
** to fit in a 32-bit integer, return 1 and put the value of the integer
@@ -83627,11 +84557,14 @@
8362784557
target
8362884558
));
8362984559
8363084560
#ifndef SQLITE_OMIT_FLOATING_POINT
8363184561
/* If the column has REAL affinity, it may currently be stored as an
83632
- ** integer. Use OP_RealAffinity to make sure it is really real. */
84562
+ ** integer. Use OP_RealAffinity to make sure it is really real.
84563
+ **
84564
+ ** EVIDENCE-OF: R-60985-57662 SQLite will convert the value back to
84565
+ ** floating point when extracting it from the record. */
8363384566
if( pExpr->iColumn>=0
8363484567
&& pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
8363584568
){
8363684569
sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
8363784570
}
@@ -87279,27 +88212,32 @@
8727988212
aLog[i] = sqlite3LogEst(v);
8728088213
#endif
8728188214
if( *z==' ' ) z++;
8728288215
}
8728388216
#ifndef SQLITE_ENABLE_STAT3_OR_STAT4
87284
- assert( pIndex!=0 );
88217
+ assert( pIndex!=0 ); {
8728588218
#else
87286
- if( pIndex )
88219
+ if( pIndex ){
8728788220
#endif
87288
- while( z[0] ){
87289
- if( sqlite3_strglob("unordered*", z)==0 ){
87290
- pIndex->bUnordered = 1;
87291
- }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
87292
- pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
87293
- }
88221
+ pIndex->bUnordered = 0;
88222
+ pIndex->noSkipScan = 0;
88223
+ while( z[0] ){
88224
+ if( sqlite3_strglob("unordered*", z)==0 ){
88225
+ pIndex->bUnordered = 1;
88226
+ }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
88227
+ pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
88228
+ }else if( sqlite3_strglob("noskipscan*", z)==0 ){
88229
+ pIndex->noSkipScan = 1;
88230
+ }
8729488231
#ifdef SQLITE_ENABLE_COSTMULT
87295
- else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){
87296
- pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9));
88232
+ else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){
88233
+ pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9));
88234
+ }
88235
+#endif
88236
+ while( z[0]!=0 && z[0]!=' ' ) z++;
88237
+ while( z[0]==' ' ) z++;
8729788238
}
87298
-#endif
87299
- while( z[0]!=0 && z[0]!=' ' ) z++;
87300
- while( z[0]==' ' ) z++;
8730188239
}
8730288240
}
8730388241
8730488242
/*
8730588243
** This callback is invoked once for each index when reading the
@@ -87421,10 +88359,11 @@
8742188359
nSample--;
8742288360
}else{
8742388361
nRow = pIdx->aiRowEst[0];
8742488362
nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1];
8742588363
}
88364
+ pIdx->nRowEst0 = nRow;
8742688365
8742788366
/* Set nSum to the number of distinct (iCol+1) field prefixes that
8742888367
** occur in the stat4 table for this index. Set sumEq to the sum of
8742988368
** the nEq values for column iCol for the same set (adding the value
8743088369
** only once where there exist duplicate prefixes). */
@@ -87682,11 +88621,11 @@
8768288621
}
8768388622
8768488623
8768588624
/* Load the statistics from the sqlite_stat4 table. */
8768688625
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
87687
- if( rc==SQLITE_OK ){
88626
+ if( rc==SQLITE_OK && OptimizationEnabled(db, SQLITE_Stat34) ){
8768888627
int lookasideEnabled = db->lookaside.bEnabled;
8768988628
db->lookaside.bEnabled = 0;
8769088629
rc = loadStat4(db, sInfo.zDatabase);
8769188630
db->lookaside.bEnabled = lookasideEnabled;
8769288631
}
@@ -88364,10 +89303,13 @@
8836489303
SQLITE_API int sqlite3_set_authorizer(
8836589304
sqlite3 *db,
8836689305
int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
8836789306
void *pArg
8836889307
){
89308
+#ifdef SQLITE_ENABLE_API_ARMOR
89309
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
89310
+#endif
8836989311
sqlite3_mutex_enter(db->mutex);
8837089312
db->xAuth = (sqlite3_xauth)xAuth;
8837189313
db->pAuthArg = pArg;
8837289314
sqlite3ExpirePreparedStatements(db);
8837389315
sqlite3_mutex_leave(db->mutex);
@@ -88858,11 +89800,15 @@
8885889800
** See also sqlite3LocateTable().
8885989801
*/
8886089802
SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
8886189803
Table *p = 0;
8886289804
int i;
88863
- assert( zName!=0 );
89805
+
89806
+#ifdef SQLITE_ENABLE_API_ARMOR
89807
+ if( !sqlite3SafetyCheckOk(db) || zName==0 ) return 0;
89808
+#endif
89809
+
8886489810
/* All mutexes are required for schema access. Make sure we hold them. */
8886589811
assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
8886689812
#if SQLITE_USER_AUTHENTICATION
8886789813
/* Only the admin user is allowed to know that the sqlite_user table
8886889814
** exists */
@@ -94322,12 +95268,12 @@
9432295268
break;
9432395269
}
9432495270
default: {
9432595271
/* Because sqlite3_value_double() returns 0.0 if the argument is not
9432695272
** something that can be converted into a number, we have:
94327
- ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
94328
- ** cannot be converted to a numeric value.
95273
+ ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
95274
+ ** that cannot be converted to a numeric value.
9432995275
*/
9433095276
double rVal = sqlite3_value_double(argv[0]);
9433195277
if( rVal<0 ) rVal = -rVal;
9433295278
sqlite3_result_double(context, rVal);
9433395279
break;
@@ -103881,13 +104827,16 @@
103881104827
Vdbe *pOld, /* VM being reprepared */
103882104828
sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
103883104829
const char **pzTail /* OUT: End of parsed string */
103884104830
){
103885104831
int rc;
103886
- assert( ppStmt!=0 );
104832
+
104833
+#ifdef SQLITE_ENABLE_API_ARMOR
104834
+ if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
104835
+#endif
103887104836
*ppStmt = 0;
103888
- if( !sqlite3SafetyCheckOk(db) ){
104837
+ if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
103889104838
return SQLITE_MISUSE_BKPT;
103890104839
}
103891104840
sqlite3_mutex_enter(db->mutex);
103892104841
sqlite3BtreeEnterAll(db);
103893104842
rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
@@ -103990,13 +104939,15 @@
103990104939
*/
103991104940
char *zSql8;
103992104941
const char *zTail8 = 0;
103993104942
int rc = SQLITE_OK;
103994104943
103995
- assert( ppStmt );
104944
+#ifdef SQLITE_ENABLE_API_ARMOR
104945
+ if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
104946
+#endif
103996104947
*ppStmt = 0;
103997
- if( !sqlite3SafetyCheckOk(db) ){
104948
+ if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
103998104949
return SQLITE_MISUSE_BKPT;
103999104950
}
104000104951
if( nBytes>=0 ){
104001104952
int sz;
104002104953
const char *z = (const char*)zSql;
@@ -109705,10 +110656,13 @@
109705110656
char **pzErrMsg /* Write error messages here */
109706110657
){
109707110658
int rc;
109708110659
TabResult res;
109709110660
110661
+#ifdef SQLITE_ENABLE_API_ARMOR
110662
+ if( pazResult==0 ) return SQLITE_MISUSE_BKPT;
110663
+#endif
109710110664
*pazResult = 0;
109711110665
if( pnColumn ) *pnColumn = 0;
109712110666
if( pnRow ) *pnRow = 0;
109713110667
if( pzErrMsg ) *pzErrMsg = 0;
109714110668
res.zErrMsg = 0;
@@ -111768,11 +112722,11 @@
111768112722
** Two writes per page are required in step (3) because the original
111769112723
** database content must be written into the rollback journal prior to
111770112724
** overwriting the database with the vacuumed content.
111771112725
**
111772112726
** Only 1x temporary space and only 1x writes would be required if
111773
-** the copy of step (3) were replace by deleting the original database
112727
+** the copy of step (3) were replaced by deleting the original database
111774112728
** and renaming the transient database as the original. But that will
111775112729
** not work if other processes are attached to the original database.
111776112730
** And a power loss in between deleting the original and renaming the
111777112731
** transient would cause the database file to appear to be deleted
111778112732
** following reboot.
@@ -112126,10 +113080,13 @@
112126113080
sqlite3 *db, /* Database in which module is registered */
112127113081
const char *zName, /* Name assigned to this module */
112128113082
const sqlite3_module *pModule, /* The definition of the module */
112129113083
void *pAux /* Context pointer for xCreate/xConnect */
112130113084
){
113085
+#ifdef SQLITE_ENABLE_API_ARMOR
113086
+ if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
113087
+#endif
112131113088
return createModule(db, zName, pModule, pAux, 0);
112132113089
}
112133113090
112134113091
/*
112135113092
** External API function used to create a new virtual-table module.
@@ -112139,10 +113096,13 @@
112139113096
const char *zName, /* Name assigned to this module */
112140113097
const sqlite3_module *pModule, /* The definition of the module */
112141113098
void *pAux, /* Context pointer for xCreate/xConnect */
112142113099
void (*xDestroy)(void *) /* Module destructor function */
112143113100
){
113101
+#ifdef SQLITE_ENABLE_API_ARMOR
113102
+ if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
113103
+#endif
112144113104
return createModule(db, zName, pModule, pAux, xDestroy);
112145113105
}
112146113106
112147113107
/*
112148113108
** Lock the virtual table so that it cannot be disconnected.
@@ -112371,11 +113331,16 @@
112371113331
pTable->tabFlags |= TF_Virtual;
112372113332
pTable->nModuleArg = 0;
112373113333
addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
112374113334
addModuleArgument(db, pTable, 0);
112375113335
addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
112376
- pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
113336
+ assert( (pParse->sNameToken.z==pName2->z && pName2->z!=0)
113337
+ || (pParse->sNameToken.z==pName1->z && pName2->z==0)
113338
+ );
113339
+ pParse->sNameToken.n = (int)(
113340
+ &pModuleName->z[pModuleName->n] - pParse->sNameToken.z
113341
+ );
112377113342
112378113343
#ifndef SQLITE_OMIT_AUTHORIZATION
112379113344
/* Creating a virtual table invokes the authorization callback twice.
112380113345
** The first invocation, to obtain permission to INSERT a row into the
112381113346
** sqlite_master table, has already been made by sqlite3StartTable().
@@ -112743,10 +113708,13 @@
112743113708
112744113709
int rc = SQLITE_OK;
112745113710
Table *pTab;
112746113711
char *zErr = 0;
112747113712
113713
+#ifdef SQLITE_ENABLE_API_ARMOR
113714
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
113715
+#endif
112748113716
sqlite3_mutex_enter(db->mutex);
112749113717
if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
112750113718
sqlite3Error(db, SQLITE_MISUSE);
112751113719
sqlite3_mutex_leave(db->mutex);
112752113720
return SQLITE_MISUSE_BKPT;
@@ -113099,10 +114067,13 @@
113099114067
*/
113100114068
SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
113101114069
static const unsigned char aMap[] = {
113102114070
SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE
113103114071
};
114072
+#ifdef SQLITE_ENABLE_API_ARMOR
114073
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
114074
+#endif
113104114075
assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
113105114076
assert( OE_Ignore==4 && OE_Replace==5 );
113106114077
assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
113107114078
return (int)aMap[db->vtabOnConflict-1];
113108114079
}
@@ -113114,12 +114085,14 @@
113114114085
*/
113115114086
SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
113116114087
va_list ap;
113117114088
int rc = SQLITE_OK;
113118114089
114090
+#ifdef SQLITE_ENABLE_API_ARMOR
114091
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
114092
+#endif
113119114093
sqlite3_mutex_enter(db->mutex);
113120
-
113121114094
va_start(ap, op);
113122114095
switch( op ){
113123114096
case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
113124114097
VtabCtx *p = db->pVtabCtx;
113125114098
if( !p ){
@@ -113250,10 +114223,13 @@
113250114223
} in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */
113251114224
Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
113252114225
} u;
113253114226
struct WhereLoop *pWLoop; /* The selected WhereLoop object */
113254114227
Bitmask notReady; /* FROM entries not usable at this level */
114228
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
114229
+ int addrVisit; /* Address at which row is visited */
114230
+#endif
113255114231
};
113256114232
113257114233
/*
113258114234
** Each instance of this object represents an algorithm for evaluating one
113259114235
** term of a join. Every term of the FROM clause will have at least
@@ -113280,11 +114256,10 @@
113280114256
LogEst rRun; /* Cost of running each loop */
113281114257
LogEst nOut; /* Estimated number of output rows */
113282114258
union {
113283114259
struct { /* Information for internal btree tables */
113284114260
u16 nEq; /* Number of equality constraints */
113285
- u16 nSkip; /* Number of initial index columns to skip */
113286114261
Index *pIndex; /* Index used, or NULL */
113287114262
} btree;
113288114263
struct { /* Information for virtual tables */
113289114264
int idxNum; /* Index number */
113290114265
u8 needFree; /* True if sqlite3_free(idxStr) is needed */
@@ -113293,16 +114268,17 @@
113293114268
char *idxStr; /* Index identifier string */
113294114269
} vtab;
113295114270
} u;
113296114271
u32 wsFlags; /* WHERE_* flags describing the plan */
113297114272
u16 nLTerm; /* Number of entries in aLTerm[] */
114273
+ u16 nSkip; /* Number of NULL aLTerm[] entries */
113298114274
/**** whereLoopXfer() copies fields above ***********************/
113299114275
# define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot)
113300114276
u16 nLSlot; /* Number of slots allocated for aLTerm[] */
113301114277
WhereTerm **aLTerm; /* WhereTerms used */
113302114278
WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */
113303
- WhereTerm *aLTermSpace[4]; /* Initial aLTerm[] space */
114279
+ WhereTerm *aLTermSpace[3]; /* Initial aLTerm[] space */
113304114280
};
113305114281
113306114282
/* This object holds the prerequisites and the cost of running a
113307114283
** subquery on one operand of an OR operator in the WHERE clause.
113308114284
** See WhereOrSet for additional information
@@ -113624,10 +114600,11 @@
113624114600
#define WHERE_ONEROW 0x00001000 /* Selects no more than one row */
113625114601
#define WHERE_MULTI_OR 0x00002000 /* OR using multiple indices */
113626114602
#define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */
113627114603
#define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */
113628114604
#define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/
114605
+#define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */
113629114606
113630114607
/************** End of whereInt.h ********************************************/
113631114608
/************** Continuing where we left off in where.c **********************/
113632114609
113633114610
/*
@@ -113834,11 +114811,11 @@
113834114811
}
113835114812
pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
113836114813
}
113837114814
pTerm = &pWC->a[idx = pWC->nTerm++];
113838114815
if( p && ExprHasProperty(p, EP_Unlikely) ){
113839
- pTerm->truthProb = sqlite3LogEst(p->iTable) - 99;
114816
+ pTerm->truthProb = sqlite3LogEst(p->iTable) - 270;
113840114817
}else{
113841114818
pTerm->truthProb = 1;
113842114819
}
113843114820
pTerm->pExpr = sqlite3ExprSkipCollate(p);
113844114821
pTerm->wtFlags = wtFlags;
@@ -114364,10 +115341,19 @@
114364115341
if( pDerived ){
114365115342
pDerived->flags |= pBase->flags & EP_FromJoin;
114366115343
pDerived->iRightJoinTable = pBase->iRightJoinTable;
114367115344
}
114368115345
}
115346
+
115347
+/*
115348
+** Mark term iChild as being a child of term iParent
115349
+*/
115350
+static void markTermAsChild(WhereClause *pWC, int iChild, int iParent){
115351
+ pWC->a[iChild].iParent = iParent;
115352
+ pWC->a[iChild].truthProb = pWC->a[iParent].truthProb;
115353
+ pWC->a[iParent].nChild++;
115354
+}
114369115355
114370115356
#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
114371115357
/*
114372115358
** Analyze a term that consists of two or more OR-connected
114373115359
** subterms. So in:
@@ -114662,12 +115648,11 @@
114662115648
pNew->x.pList = pList;
114663115649
idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
114664115650
testcase( idxNew==0 );
114665115651
exprAnalyze(pSrc, pWC, idxNew);
114666115652
pTerm = &pWC->a[idxTerm];
114667
- pWC->a[idxNew].iParent = idxTerm;
114668
- pTerm->nChild = 1;
115653
+ markTermAsChild(pWC, idxNew, idxTerm);
114669115654
}else{
114670115655
sqlite3ExprListDelete(db, pList);
114671115656
}
114672115657
pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */
114673115658
}
@@ -114765,13 +115750,12 @@
114765115750
return;
114766115751
}
114767115752
idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
114768115753
if( idxNew==0 ) return;
114769115754
pNew = &pWC->a[idxNew];
114770
- pNew->iParent = idxTerm;
115755
+ markTermAsChild(pWC, idxNew, idxTerm);
114771115756
pTerm = &pWC->a[idxTerm];
114772
- pTerm->nChild = 1;
114773115757
pTerm->wtFlags |= TERM_COPIED;
114774115758
if( pExpr->op==TK_EQ
114775115759
&& !ExprHasProperty(pExpr, EP_FromJoin)
114776115760
&& OptimizationEnabled(db, SQLITE_Transitive)
114777115761
){
@@ -114824,13 +115808,12 @@
114824115808
transferJoinMarkings(pNewExpr, pExpr);
114825115809
idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
114826115810
testcase( idxNew==0 );
114827115811
exprAnalyze(pSrc, pWC, idxNew);
114828115812
pTerm = &pWC->a[idxTerm];
114829
- pWC->a[idxNew].iParent = idxTerm;
115813
+ markTermAsChild(pWC, idxNew, idxTerm);
114830115814
}
114831
- pTerm->nChild = 2;
114832115815
}
114833115816
#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
114834115817
114835115818
#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
114836115819
/* Analyze a term that is composed of two or more subterms connected by
@@ -114901,13 +115884,12 @@
114901115884
idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
114902115885
testcase( idxNew2==0 );
114903115886
exprAnalyze(pSrc, pWC, idxNew2);
114904115887
pTerm = &pWC->a[idxTerm];
114905115888
if( isComplete ){
114906
- pWC->a[idxNew1].iParent = idxTerm;
114907
- pWC->a[idxNew2].iParent = idxTerm;
114908
- pTerm->nChild = 2;
115889
+ markTermAsChild(pWC, idxNew1, idxTerm);
115890
+ markTermAsChild(pWC, idxNew2, idxTerm);
114909115891
}
114910115892
}
114911115893
#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
114912115894
114913115895
#ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -114936,13 +115918,12 @@
114936115918
pNewTerm = &pWC->a[idxNew];
114937115919
pNewTerm->prereqRight = prereqExpr;
114938115920
pNewTerm->leftCursor = pLeft->iTable;
114939115921
pNewTerm->u.leftColumn = pLeft->iColumn;
114940115922
pNewTerm->eOperator = WO_MATCH;
114941
- pNewTerm->iParent = idxTerm;
115923
+ markTermAsChild(pWC, idxNew, idxTerm);
114942115924
pTerm = &pWC->a[idxTerm];
114943
- pTerm->nChild = 1;
114944115925
pTerm->wtFlags |= TERM_COPIED;
114945115926
pNewTerm->prereqAll = pTerm->prereqAll;
114946115927
}
114947115928
}
114948115929
#endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -114959,11 +115940,11 @@
114959115940
** the start of the loop will prevent any results from being returned.
114960115941
*/
114961115942
if( pExpr->op==TK_NOTNULL
114962115943
&& pExpr->pLeft->op==TK_COLUMN
114963115944
&& pExpr->pLeft->iColumn>=0
114964
- && OptimizationEnabled(db, SQLITE_Stat3)
115945
+ && OptimizationEnabled(db, SQLITE_Stat34)
114965115946
){
114966115947
Expr *pNewExpr;
114967115948
Expr *pLeft = pExpr->pLeft;
114968115949
int idxNew;
114969115950
WhereTerm *pNewTerm;
@@ -114978,13 +115959,12 @@
114978115959
pNewTerm = &pWC->a[idxNew];
114979115960
pNewTerm->prereqRight = 0;
114980115961
pNewTerm->leftCursor = pLeft->iTable;
114981115962
pNewTerm->u.leftColumn = pLeft->iColumn;
114982115963
pNewTerm->eOperator = WO_GT;
114983
- pNewTerm->iParent = idxTerm;
115964
+ markTermAsChild(pWC, idxNew, idxTerm);
114984115965
pTerm = &pWC->a[idxTerm];
114985
- pTerm->nChild = 1;
114986115966
pTerm->wtFlags |= TERM_COPIED;
114987115967
pNewTerm->prereqAll = pTerm->prereqAll;
114988115968
}
114989115969
}
114990115970
#endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
@@ -115200,10 +116180,12 @@
115200116180
WhereLoop *pLoop; /* The Loop object */
115201116181
char *zNotUsed; /* Extra space on the end of pIdx */
115202116182
Bitmask idxCols; /* Bitmap of columns used for indexing */
115203116183
Bitmask extraCols; /* Bitmap of additional columns */
115204116184
u8 sentWarning = 0; /* True if a warnning has been issued */
116185
+ Expr *pPartial = 0; /* Partial Index Expression */
116186
+ int iContinue = 0; /* Jump here to skip excluded rows */
115205116187
115206116188
/* Generate code to skip over the creation and initialization of the
115207116189
** transient index on 2nd and subsequent iterations of the loop. */
115208116190
v = pParse->pVdbe;
115209116191
assert( v!=0 );
@@ -115215,10 +116197,16 @@
115215116197
pTable = pSrc->pTab;
115216116198
pWCEnd = &pWC->a[pWC->nTerm];
115217116199
pLoop = pLevel->pWLoop;
115218116200
idxCols = 0;
115219116201
for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
116202
+ if( pLoop->prereq==0
116203
+ && (pTerm->wtFlags & TERM_VIRTUAL)==0
116204
+ && sqlite3ExprIsTableConstant(pTerm->pExpr, pSrc->iCursor) ){
116205
+ pPartial = sqlite3ExprAnd(pParse->db, pPartial,
116206
+ sqlite3ExprDup(pParse->db, pTerm->pExpr, 0));
116207
+ }
115220116208
if( termCanDriveIndex(pTerm, pSrc, notReady) ){
115221116209
int iCol = pTerm->u.leftColumn;
115222116210
Bitmask cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol);
115223116211
testcase( iCol==BMS );
115224116212
testcase( iCol==BMS-1 );
@@ -115227,11 +116215,13 @@
115227116215
"automatic index on %s(%s)", pTable->zName,
115228116216
pTable->aCol[iCol].zName);
115229116217
sentWarning = 1;
115230116218
}
115231116219
if( (idxCols & cMask)==0 ){
115232
- if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ) return;
116220
+ if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){
116221
+ goto end_auto_index_create;
116222
+ }
115233116223
pLoop->aLTerm[nKeyCol++] = pTerm;
115234116224
idxCols |= cMask;
115235116225
}
115236116226
}
115237116227
}
@@ -115247,24 +116237,23 @@
115247116237
** be a covering index because the index will not be updated if the
115248116238
** original table changes and the index and table cannot both be used
115249116239
** if they go out of sync.
115250116240
*/
115251116241
extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1));
115252
- mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
116242
+ mxBitCol = MIN(BMS-1,pTable->nCol);
115253116243
testcase( pTable->nCol==BMS-1 );
115254116244
testcase( pTable->nCol==BMS-2 );
115255116245
for(i=0; i<mxBitCol; i++){
115256116246
if( extraCols & MASKBIT(i) ) nKeyCol++;
115257116247
}
115258116248
if( pSrc->colUsed & MASKBIT(BMS-1) ){
115259116249
nKeyCol += pTable->nCol - BMS + 1;
115260116250
}
115261
- pLoop->wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY;
115262116251
115263116252
/* Construct the Index object to describe this index */
115264116253
pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+1, 0, &zNotUsed);
115265
- if( pIdx==0 ) return;
116254
+ if( pIdx==0 ) goto end_auto_index_create;
115266116255
pLoop->u.btree.pIndex = pIdx;
115267116256
pIdx->zName = "auto-index";
115268116257
pIdx->pTable = pTable;
115269116258
n = 0;
115270116259
idxCols = 0;
@@ -115312,22 +116301,33 @@
115312116301
sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
115313116302
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
115314116303
VdbeComment((v, "for %s", pTable->zName));
115315116304
115316116305
/* Fill the automatic index with content */
116306
+ sqlite3ExprCachePush(pParse);
115317116307
addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v);
116308
+ if( pPartial ){
116309
+ iContinue = sqlite3VdbeMakeLabel(v);
116310
+ sqlite3ExprIfFalse(pParse, pPartial, iContinue, SQLITE_JUMPIFNULL);
116311
+ pLoop->wsFlags |= WHERE_PARTIALIDX;
116312
+ }
115318116313
regRecord = sqlite3GetTempReg(pParse);
115319116314
sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0);
115320116315
sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
115321116316
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
116317
+ if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
115322116318
sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
115323116319
sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
115324116320
sqlite3VdbeJumpHere(v, addrTop);
115325116321
sqlite3ReleaseTempReg(pParse, regRecord);
116322
+ sqlite3ExprCachePop(pParse);
115326116323
115327116324
/* Jump here when skipping the initialization */
115328116325
sqlite3VdbeJumpHere(v, addrInit);
116326
+
116327
+end_auto_index_create:
116328
+ sqlite3ExprDelete(pParse->db, pPartial);
115329116329
}
115330116330
#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
115331116331
115332116332
#ifndef SQLITE_OMIT_VIRTUALTABLE
115333116333
/*
@@ -115483,22 +116483,22 @@
115483116483
115484116484
return pParse->nErr;
115485116485
}
115486116486
#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */
115487116487
115488
-
115489116488
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
115490116489
/*
115491116490
** Estimate the location of a particular key among all keys in an
115492116491
** index. Store the results in aStat as follows:
115493116492
**
115494116493
** aStat[0] Est. number of rows less than pVal
115495116494
** aStat[1] Est. number of rows equal to pVal
115496116495
**
115497
-** Return SQLITE_OK on success.
116496
+** Return the index of the sample that is the smallest sample that
116497
+** is greater than or equal to pRec.
115498116498
*/
115499
-static void whereKeyStats(
116499
+static int whereKeyStats(
115500116500
Parse *pParse, /* Database connection */
115501116501
Index *pIdx, /* Index to consider domain of */
115502116502
UnpackedRecord *pRec, /* Vector of values to consider */
115503116503
int roundUp, /* Round up if true. Round down if false */
115504116504
tRowcnt *aStat /* OUT: stats written here */
@@ -115576,10 +116576,11 @@
115576116576
}else{
115577116577
iGap = iGap/3;
115578116578
}
115579116579
aStat[0] = iLower + iGap;
115580116580
}
116581
+ return i;
115581116582
}
115582116583
#endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
115583116584
115584116585
/*
115585116586
** If it is not NULL, pTerm is a term that provides an upper or lower
@@ -115726,11 +116727,11 @@
115726116727
** pLower pUpper
115727116728
**
115728116729
** If either of the upper or lower bound is not present, then NULL is passed in
115729116730
** place of the corresponding WhereTerm.
115730116731
**
115731
-** The value in (pBuilder->pNew->u.btree.nEq) is the index of the index
116732
+** The value in (pBuilder->pNew->u.btree.nEq) is the number of the index
115732116733
** column subject to the range constraint. Or, equivalently, the number of
115733116734
** equality constraints optimized by the proposed index scan. For example,
115734116735
** assuming index p is on t1(a, b), and the SQL query is:
115735116736
**
115736116737
** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
@@ -115742,11 +116743,11 @@
115742116743
**
115743116744
** then nEq is set to 0.
115744116745
**
115745116746
** When this function is called, *pnOut is set to the sqlite3LogEst() of the
115746116747
** number of rows that the index scan is expected to visit without
115747
-** considering the range constraints. If nEq is 0, this is the number of
116748
+** considering the range constraints. If nEq is 0, then *pnOut is the number of
115748116749
** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced)
115749116750
** to account for the range constraints pLower and pUpper.
115750116751
**
115751116752
** In the absence of sqlite_stat4 ANALYZE data, or if such data cannot be
115752116753
** used, a single range inequality reduces the search space by a factor of 4.
@@ -115766,14 +116767,11 @@
115766116767
115767116768
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
115768116769
Index *p = pLoop->u.btree.pIndex;
115769116770
int nEq = pLoop->u.btree.nEq;
115770116771
115771
- if( p->nSample>0
115772
- && nEq<p->nSampleCol
115773
- && OptimizationEnabled(pParse->db, SQLITE_Stat3)
115774
- ){
116772
+ if( p->nSample>0 && nEq<p->nSampleCol ){
115775116773
if( nEq==pBuilder->nRecValid ){
115776116774
UnpackedRecord *pRec = pBuilder->pRec;
115777116775
tRowcnt a[2];
115778116776
u8 aff;
115779116777
@@ -115785,19 +116783,23 @@
115785116783
**
115786116784
** Or, if pLower is NULL or $L cannot be extracted from it (because it
115787116785
** is not a simple variable or literal value), the lower bound of the
115788116786
** range is $P. Due to a quirk in the way whereKeyStats() works, even
115789116787
** if $L is available, whereKeyStats() is called for both ($P) and
115790
- ** ($P:$L) and the larger of the two returned values used.
116788
+ ** ($P:$L) and the larger of the two returned values is used.
115791116789
**
115792116790
** Similarly, iUpper is to be set to the estimate of the number of rows
115793116791
** less than the upper bound of the range query. Where the upper bound
115794116792
** is either ($P) or ($P:$U). Again, even if $U is available, both values
115795116793
** of iUpper are requested of whereKeyStats() and the smaller used.
116794
+ **
116795
+ ** The number of rows between the two bounds is then just iUpper-iLower.
115796116796
*/
115797
- tRowcnt iLower;
115798
- tRowcnt iUpper;
116797
+ tRowcnt iLower; /* Rows less than the lower bound */
116798
+ tRowcnt iUpper; /* Rows less than the upper bound */
116799
+ int iLwrIdx = -2; /* aSample[] for the lower bound */
116800
+ int iUprIdx = -1; /* aSample[] for the upper bound */
115799116801
115800116802
if( pRec ){
115801116803
testcase( pRec->nField!=pBuilder->nRecValid );
115802116804
pRec->nField = pBuilder->nRecValid;
115803116805
}
@@ -115807,11 +116809,11 @@
115807116809
aff = p->pTable->aCol[p->aiColumn[nEq]].affinity;
115808116810
}
115809116811
/* Determine iLower and iUpper using ($P) only. */
115810116812
if( nEq==0 ){
115811116813
iLower = 0;
115812
- iUpper = sqlite3LogEstToInt(p->aiRowLogEst[0]);
116814
+ iUpper = p->nRowEst0;
115813116815
}else{
115814116816
/* Note: this call could be optimized away - since the same values must
115815116817
** have been requested when testing key $P in whereEqualScanEst(). */
115816116818
whereKeyStats(pParse, p, pRec, 0, a);
115817116819
iLower = a[0];
@@ -115831,11 +116833,11 @@
115831116833
int bOk; /* True if value is extracted from pExpr */
115832116834
Expr *pExpr = pLower->pExpr->pRight;
115833116835
rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
115834116836
if( rc==SQLITE_OK && bOk ){
115835116837
tRowcnt iNew;
115836
- whereKeyStats(pParse, p, pRec, 0, a);
116838
+ iLwrIdx = whereKeyStats(pParse, p, pRec, 0, a);
115837116839
iNew = a[0] + ((pLower->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
115838116840
if( iNew>iLower ) iLower = iNew;
115839116841
nOut--;
115840116842
pLower = 0;
115841116843
}
@@ -115846,11 +116848,11 @@
115846116848
int bOk; /* True if value is extracted from pExpr */
115847116849
Expr *pExpr = pUpper->pExpr->pRight;
115848116850
rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
115849116851
if( rc==SQLITE_OK && bOk ){
115850116852
tRowcnt iNew;
115851
- whereKeyStats(pParse, p, pRec, 1, a);
116853
+ iUprIdx = whereKeyStats(pParse, p, pRec, 1, a);
115852116854
iNew = a[0] + ((pUpper->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
115853116855
if( iNew<iUpper ) iUpper = iNew;
115854116856
nOut--;
115855116857
pUpper = 0;
115856116858
}
@@ -115858,10 +116860,15 @@
115858116860
115859116861
pBuilder->pRec = pRec;
115860116862
if( rc==SQLITE_OK ){
115861116863
if( iUpper>iLower ){
115862116864
nNew = sqlite3LogEst(iUpper - iLower);
116865
+ /* TUNING: If both iUpper and iLower are derived from the same
116866
+ ** sample, then assume they are 4x more selective. This brings
116867
+ ** the estimated selectivity more in line with what it would be
116868
+ ** if estimated without the use of STAT3/4 tables. */
116869
+ if( iLwrIdx==iUprIdx ) nNew -= 20; assert( 20==sqlite3LogEst(4) );
115863116870
}else{
115864116871
nNew = 10; assert( 10==sqlite3LogEst(2) );
115865116872
}
115866116873
if( nNew<nOut ){
115867116874
nOut = nNew;
@@ -115882,16 +116889,19 @@
115882116889
#endif
115883116890
assert( pUpper==0 || (pUpper->wtFlags & TERM_VNULL)==0 );
115884116891
nNew = whereRangeAdjust(pLower, nOut);
115885116892
nNew = whereRangeAdjust(pUpper, nNew);
115886116893
115887
- /* TUNING: If there is both an upper and lower limit, assume the range is
116894
+ /* TUNING: If there is both an upper and lower limit and neither limit
116895
+ ** has an application-defined likelihood(), assume the range is
115888116896
** reduced by an additional 75%. This means that, by default, an open-ended
115889116897
** range query (e.g. col > ?) is assumed to match 1/4 of the rows in the
115890116898
** index. While a closed range (e.g. col BETWEEN ? AND ?) is estimated to
115891116899
** match 1/64 of the index. */
115892
- if( pLower && pUpper ) nNew -= 20;
116900
+ if( pLower && pLower->truthProb>0 && pUpper && pUpper->truthProb>0 ){
116901
+ nNew -= 20;
116902
+ }
115893116903
115894116904
nOut -= (pLower!=0) + (pUpper!=0);
115895116905
if( nNew<10 ) nNew = 10;
115896116906
if( nNew<nOut ) nOut = nNew;
115897116907
#if defined(WHERETRACE_ENABLED)
@@ -116247,11 +117257,11 @@
116247117257
116248117258
/* This module is only called on query plans that use an index. */
116249117259
pLoop = pLevel->pWLoop;
116250117260
assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 );
116251117261
nEq = pLoop->u.btree.nEq;
116252
- nSkip = pLoop->u.btree.nSkip;
117262
+ nSkip = pLoop->nSkip;
116253117263
pIdx = pLoop->u.btree.pIndex;
116254117264
assert( pIdx!=0 );
116255117265
116256117266
/* Figure out how many memory cells we will need then allocate them.
116257117267
*/
@@ -116361,11 +117371,11 @@
116361117371
** "a=? AND b>?"
116362117372
*/
116363117373
static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){
116364117374
Index *pIndex = pLoop->u.btree.pIndex;
116365117375
u16 nEq = pLoop->u.btree.nEq;
116366
- u16 nSkip = pLoop->u.btree.nSkip;
117376
+ u16 nSkip = pLoop->nSkip;
116367117377
int i, j;
116368117378
Column *aCol = pTab->aCol;
116369117379
i16 *aiColumn = pIndex->aiColumn;
116370117380
116371117381
if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
@@ -116392,23 +117402,27 @@
116392117402
sqlite3StrAccumAppend(pStr, ")", 1);
116393117403
}
116394117404
116395117405
/*
116396117406
** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
116397
-** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
116398
-** record is added to the output to describe the table scan strategy in
116399
-** pLevel.
117407
+** command, or if either SQLITE_DEBUG or SQLITE_ENABLE_STMT_SCANSTATUS was
117408
+** defined at compile-time. If it is not a no-op, a single OP_Explain opcode
117409
+** is added to the output to describe the table scan strategy in pLevel.
117410
+**
117411
+** If an OP_Explain opcode is added to the VM, its address is returned.
117412
+** Otherwise, if no OP_Explain is coded, zero is returned.
116400117413
*/
116401
-static void explainOneScan(
117414
+static int explainOneScan(
116402117415
Parse *pParse, /* Parse context */
116403117416
SrcList *pTabList, /* Table list this loop refers to */
116404117417
WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
116405117418
int iLevel, /* Value for "level" column of output */
116406117419
int iFrom, /* Value for "from" column of output */
116407117420
u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */
116408117421
){
116409
-#ifndef SQLITE_DEBUG
117422
+ int ret = 0;
117423
+#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
116410117424
if( pParse->explain==2 )
116411117425
#endif
116412117426
{
116413117427
struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
116414117428
Vdbe *v = pParse->pVdbe; /* VM being constructed */
@@ -116421,11 +117435,11 @@
116421117435
StrAccum str; /* EQP output string */
116422117436
char zBuf[100]; /* Initial space for EQP output string */
116423117437
116424117438
pLoop = pLevel->pWLoop;
116425117439
flags = pLoop->wsFlags;
116426
- if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
117440
+ if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return 0;
116427117441
116428117442
isSearch = (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
116429117443
|| ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
116430117444
|| (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
116431117445
@@ -116450,10 +117464,12 @@
116450117464
assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) );
116451117465
if( !HasRowid(pItem->pTab) && IsPrimaryKeyIndex(pIdx) ){
116452117466
if( isSearch ){
116453117467
zFmt = "PRIMARY KEY";
116454117468
}
117469
+ }else if( flags & WHERE_PARTIALIDX ){
117470
+ zFmt = "AUTOMATIC PARTIAL COVERING INDEX";
116455117471
}else if( flags & WHERE_AUTO_INDEX ){
116456117472
zFmt = "AUTOMATIC COVERING INDEX";
116457117473
}else if( flags & WHERE_IDX_ONLY ){
116458117474
zFmt = "COVERING INDEX %s";
116459117475
}else{
@@ -116491,16 +117507,49 @@
116491117507
}else{
116492117508
sqlite3StrAccumAppend(&str, " (~1 row)", 9);
116493117509
}
116494117510
#endif
116495117511
zMsg = sqlite3StrAccumFinish(&str);
116496
- sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
117512
+ ret = sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg,P4_DYNAMIC);
116497117513
}
117514
+ return ret;
116498117515
}
116499117516
#else
116500
-# define explainOneScan(u,v,w,x,y,z)
117517
+# define explainOneScan(u,v,w,x,y,z) 0
116501117518
#endif /* SQLITE_OMIT_EXPLAIN */
117519
+
117520
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
117521
+/*
117522
+** Configure the VM passed as the first argument with an
117523
+** sqlite3_stmt_scanstatus() entry corresponding to the scan used to
117524
+** implement level pLvl. Argument pSrclist is a pointer to the FROM
117525
+** clause that the scan reads data from.
117526
+**
117527
+** If argument addrExplain is not 0, it must be the address of an
117528
+** OP_Explain instruction that describes the same loop.
117529
+*/
117530
+static void addScanStatus(
117531
+ Vdbe *v, /* Vdbe to add scanstatus entry to */
117532
+ SrcList *pSrclist, /* FROM clause pLvl reads data from */
117533
+ WhereLevel *pLvl, /* Level to add scanstatus() entry for */
117534
+ int addrExplain /* Address of OP_Explain (or 0) */
117535
+){
117536
+ const char *zObj = 0;
117537
+ WhereLoop *pLoop = pLvl->pWLoop;
117538
+ if( (pLoop->wsFlags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){
117539
+ zObj = pLoop->u.btree.pIndex->zName;
117540
+ }else{
117541
+ zObj = pSrclist->a[pLvl->iFrom].zName;
117542
+ }
117543
+ sqlite3VdbeScanStatus(
117544
+ v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
117545
+ );
117546
+}
117547
+#else
117548
+# define addScanStatus(a, b, c, d) ((void)d)
117549
+#endif
117550
+
116502117551
116503117552
116504117553
/*
116505117554
** Generate code for the start of the iLevel-th loop in the WHERE clause
116506117555
** implementation described by pWInfo.
@@ -116798,11 +117847,11 @@
116798117847
u8 bSeekPastNull = 0; /* True to seek past initial nulls */
116799117848
u8 bStopAtNull = 0; /* Add condition to terminate at NULLs */
116800117849
116801117850
pIdx = pLoop->u.btree.pIndex;
116802117851
iIdxCur = pLevel->iIdxCur;
116803
- assert( nEq>=pLoop->u.btree.nSkip );
117852
+ assert( nEq>=pLoop->nSkip );
116804117853
116805117854
/* If this loop satisfies a sort order (pOrderBy) request that
116806117855
** was passed to this function to implement a "SELECT min(x) ..."
116807117856
** query, then the caller will only allow the loop to run for
116808117857
** a single iteration. This means that the first row returned
@@ -116815,11 +117864,11 @@
116815117864
|| (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 );
116816117865
if( (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)!=0
116817117866
&& pWInfo->nOBSat>0
116818117867
&& (pIdx->nKeyCol>nEq)
116819117868
){
116820
- assert( pLoop->u.btree.nSkip==0 );
117869
+ assert( pLoop->nSkip==0 );
116821117870
bSeekPastNull = 1;
116822117871
nExtraReg = 1;
116823117872
}
116824117873
116825117874
/* Find any inequality constraint terms for the start and end
@@ -117164,13 +118213,15 @@
117164118213
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
117165118214
wctrlFlags, iCovCur);
117166118215
assert( pSubWInfo || pParse->nErr || db->mallocFailed );
117167118216
if( pSubWInfo ){
117168118217
WhereLoop *pSubLoop;
117169
- explainOneScan(
118218
+ int addrExplain = explainOneScan(
117170118219
pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
117171118220
);
118221
+ addScanStatus(v, pOrTab, &pSubWInfo->a[0], addrExplain);
118222
+
117172118223
/* This is the sub-WHERE clause body. First skip over
117173118224
** duplicate rows from prior sub-WHERE clauses, and record the
117174118225
** rowid (or PRIMARY KEY) for the current row so that the same
117175118226
** row will be skipped in subsequent sub-WHERE clauses.
117176118227
*/
@@ -117296,10 +118347,14 @@
117296118347
VdbeCoverageIf(v, bRev==0);
117297118348
VdbeCoverageIf(v, bRev!=0);
117298118349
pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
117299118350
}
117300118351
}
118352
+
118353
+#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
118354
+ pLevel->addrVisit = sqlite3VdbeCurrentAddr(v);
118355
+#endif
117301118356
117302118357
/* Insert code to test every subexpression that can be completely
117303118358
** computed using the current set of tables.
117304118359
*/
117305118360
for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
@@ -117436,11 +118491,11 @@
117436118491
}
117437118492
sqlite3DebugPrintf(" %-19s", z);
117438118493
sqlite3_free(z);
117439118494
}
117440118495
if( p->wsFlags & WHERE_SKIPSCAN ){
117441
- sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->u.btree.nSkip);
118496
+ sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->nSkip);
117442118497
}else{
117443118498
sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
117444118499
}
117445118500
sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
117446118501
if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
@@ -117547,34 +118602,41 @@
117547118602
sqlite3DbFree(db, pWInfo);
117548118603
}
117549118604
}
117550118605
117551118606
/*
117552
-** Return TRUE if both of the following are true:
118607
+** Return TRUE if all of the following are true:
117553118608
**
117554118609
** (1) X has the same or lower cost that Y
117555118610
** (2) X is a proper subset of Y
118611
+** (3) X skips at least as many columns as Y
117556118612
**
117557118613
** By "proper subset" we mean that X uses fewer WHERE clause terms
117558118614
** than Y and that every WHERE clause term used by X is also used
117559118615
** by Y.
117560118616
**
117561118617
** If X is a proper subset of Y then Y is a better choice and ought
117562118618
** to have a lower cost. This routine returns TRUE when that cost
117563
-** relationship is inverted and needs to be adjusted.
118619
+** relationship is inverted and needs to be adjusted. The third rule
118620
+** was added because if X uses skip-scan less than Y it still might
118621
+** deserve a lower cost even if it is a proper subset of Y.
117564118622
*/
117565118623
static int whereLoopCheaperProperSubset(
117566118624
const WhereLoop *pX, /* First WhereLoop to compare */
117567118625
const WhereLoop *pY /* Compare against this WhereLoop */
117568118626
){
117569118627
int i, j;
117570
- if( pX->nLTerm >= pY->nLTerm ) return 0; /* X is not a subset of Y */
118628
+ if( pX->nLTerm-pX->nSkip >= pY->nLTerm-pY->nSkip ){
118629
+ return 0; /* X is not a subset of Y */
118630
+ }
118631
+ if( pY->nSkip > pX->nSkip ) return 0;
117571118632
if( pX->rRun >= pY->rRun ){
117572118633
if( pX->rRun > pY->rRun ) return 0; /* X costs more than Y */
117573118634
if( pX->nOut > pY->nOut ) return 0; /* X costs more than Y */
117574118635
}
117575118636
for(i=pX->nLTerm-1; i>=0; i--){
118637
+ if( pX->aLTerm[i]==0 ) continue;
117576118638
for(j=pY->nLTerm-1; j>=0; j--){
117577118639
if( pY->aLTerm[j]==pX->aLTerm[i] ) break;
117578118640
}
117579118641
if( j<0 ) return 0; /* X not a subset of Y since term X[i] not used by Y */
117580118642
}
@@ -117592,37 +118654,28 @@
117592118654
** is a proper subset.
117593118655
**
117594118656
** To say "WhereLoop X is a proper subset of Y" means that X uses fewer
117595118657
** WHERE clause terms than Y and that every WHERE clause term used by X is
117596118658
** also used by Y.
117597
-**
117598
-** This adjustment is omitted for SKIPSCAN loops. In a SKIPSCAN loop, the
117599
-** WhereLoop.nLTerm field is not an accurate measure of the number of WHERE
117600
-** clause terms covered, since some of the first nLTerm entries in aLTerm[]
117601
-** will be NULL (because they are skipped). That makes it more difficult
117602
-** to compare the loops. We could add extra code to do the comparison, and
117603
-** perhaps we will someday. But SKIPSCAN is sufficiently uncommon, and this
117604
-** adjustment is sufficient minor, that it is very difficult to construct
117605
-** a test case where the extra code would improve the query plan. Better
117606
-** to avoid the added complexity and just omit cost adjustments to SKIPSCAN
117607
-** loops.
117608118659
*/
117609118660
static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){
117610118661
if( (pTemplate->wsFlags & WHERE_INDEXED)==0 ) return;
117611
- if( (pTemplate->wsFlags & WHERE_SKIPSCAN)!=0 ) return;
117612118662
for(; p; p=p->pNextLoop){
117613118663
if( p->iTab!=pTemplate->iTab ) continue;
117614118664
if( (p->wsFlags & WHERE_INDEXED)==0 ) continue;
117615
- if( (p->wsFlags & WHERE_SKIPSCAN)!=0 ) continue;
117616118665
if( whereLoopCheaperProperSubset(p, pTemplate) ){
117617118666
/* Adjust pTemplate cost downward so that it is cheaper than its
117618
- ** subset p */
118667
+ ** subset p. */
118668
+ WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n",
118669
+ pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut-1));
117619118670
pTemplate->rRun = p->rRun;
117620118671
pTemplate->nOut = p->nOut - 1;
117621118672
}else if( whereLoopCheaperProperSubset(pTemplate, p) ){
117622118673
/* Adjust pTemplate cost upward so that it is costlier than p since
117623118674
** pTemplate is a proper subset of p */
118675
+ WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n",
118676
+ pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut+1));
117624118677
pTemplate->rRun = p->rRun;
117625118678
pTemplate->nOut = p->nOut + 1;
117626118679
}
117627118680
}
117628118681
}
@@ -117663,12 +118716,13 @@
117663118716
** rSetup. Call this SETUP-INVARIANT */
117664118717
assert( p->rSetup>=pTemplate->rSetup );
117665118718
117666118719
/* Any loop using an appliation-defined index (or PRIMARY KEY or
117667118720
** UNIQUE constraint) with one or more == constraints is better
117668
- ** than an automatic index. */
118721
+ ** than an automatic index. Unless it is a skip-scan. */
117669118722
if( (p->wsFlags & WHERE_AUTO_INDEX)!=0
118723
+ && (pTemplate->nSkip)==0
117670118724
&& (pTemplate->wsFlags & WHERE_INDEXED)!=0
117671118725
&& (pTemplate->wsFlags & WHERE_COLUMN_EQ)!=0
117672118726
&& (p->prereq & pTemplate->prereq)==pTemplate->prereq
117673118727
){
117674118728
break;
@@ -117823,25 +118877,46 @@
117823118877
117824118878
/*
117825118879
** Adjust the WhereLoop.nOut value downward to account for terms of the
117826118880
** WHERE clause that reference the loop but which are not used by an
117827118881
** index.
118882
+*
118883
+** For every WHERE clause term that is not used by the index
118884
+** and which has a truth probability assigned by one of the likelihood(),
118885
+** likely(), or unlikely() SQL functions, reduce the estimated number
118886
+** of output rows by the probability specified.
117828118887
**
117829
-** In the current implementation, the first extra WHERE clause term reduces
117830
-** the number of output rows by a factor of 10 and each additional term
117831
-** reduces the number of output rows by sqrt(2).
118888
+** TUNING: For every WHERE clause term that is not used by the index
118889
+** and which does not have an assigned truth probability, heuristics
118890
+** described below are used to try to estimate the truth probability.
118891
+** TODO --> Perhaps this is something that could be improved by better
118892
+** table statistics.
118893
+**
118894
+** Heuristic 1: Estimate the truth probability as 93.75%. The 93.75%
118895
+** value corresponds to -1 in LogEst notation, so this means decrement
118896
+** the WhereLoop.nOut field for every such WHERE clause term.
118897
+**
118898
+** Heuristic 2: If there exists one or more WHERE clause terms of the
118899
+** form "x==EXPR" and EXPR is not a constant 0 or 1, then make sure the
118900
+** final output row estimate is no greater than 1/4 of the total number
118901
+** of rows in the table. In other words, assume that x==EXPR will filter
118902
+** out at least 3 out of 4 rows. If EXPR is -1 or 0 or 1, then maybe the
118903
+** "x" column is boolean or else -1 or 0 or 1 is a common default value
118904
+** on the "x" column and so in that case only cap the output row estimate
118905
+** at 1/2 instead of 1/4.
117832118906
*/
117833118907
static void whereLoopOutputAdjust(
117834118908
WhereClause *pWC, /* The WHERE clause */
117835118909
WhereLoop *pLoop, /* The loop to adjust downward */
117836118910
LogEst nRow /* Number of rows in the entire table */
117837118911
){
117838118912
WhereTerm *pTerm, *pX;
117839118913
Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
117840
- int i, j;
117841
- int nEq = 0; /* Number of = constraints not within likely()/unlikely() */
118914
+ int i, j, k;
118915
+ LogEst iReduce = 0; /* pLoop->nOut should not exceed nRow-iReduce */
117842118916
118917
+ assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 );
117843118918
for(i=pWC->nTerm, pTerm=pWC->a; i>0; i--, pTerm++){
117844118919
if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) break;
117845118920
if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
117846118921
if( (pTerm->prereqAll & notAllowed)!=0 ) continue;
117847118922
for(j=pLoop->nLTerm-1; j>=0; j--){
@@ -117850,24 +118925,30 @@
117850118925
if( pX==pTerm ) break;
117851118926
if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break;
117852118927
}
117853118928
if( j<0 ){
117854118929
if( pTerm->truthProb<=0 ){
118930
+ /* If a truth probability is specified using the likelihood() hints,
118931
+ ** then use the probability provided by the application. */
117855118932
pLoop->nOut += pTerm->truthProb;
117856118933
}else{
118934
+ /* In the absence of explicit truth probabilities, use heuristics to
118935
+ ** guess a reasonable truth probability. */
117857118936
pLoop->nOut--;
117858
- if( pTerm->eOperator&WO_EQ ) nEq++;
118937
+ if( pTerm->eOperator&WO_EQ ){
118938
+ Expr *pRight = pTerm->pExpr->pRight;
118939
+ if( sqlite3ExprIsInteger(pRight, &k) && k>=(-1) && k<=1 ){
118940
+ k = 10;
118941
+ }else{
118942
+ k = 20;
118943
+ }
118944
+ if( iReduce<k ) iReduce = k;
118945
+ }
117859118946
}
117860118947
}
117861118948
}
117862
- /* TUNING: If there is at least one equality constraint in the WHERE
117863
- ** clause that does not have a likelihood() explicitly assigned to it
117864
- ** then do not let the estimated number of output rows exceed half
117865
- ** the number of rows in the table. */
117866
- if( nEq && pLoop->nOut>nRow-10 ){
117867
- pLoop->nOut = nRow - 10;
117868
- }
118949
+ if( pLoop->nOut > nRow-iReduce ) pLoop->nOut = nRow - iReduce;
117869118950
}
117870118951
117871118952
/*
117872118953
** Adjust the cost C by the costMult facter T. This only occurs if
117873118954
** compiled with -DSQLITE_ENABLE_COSTMULT
@@ -117904,11 +118985,11 @@
117904118985
int opMask; /* Valid operators for constraints */
117905118986
WhereScan scan; /* Iterator for WHERE terms */
117906118987
Bitmask saved_prereq; /* Original value of pNew->prereq */
117907118988
u16 saved_nLTerm; /* Original value of pNew->nLTerm */
117908118989
u16 saved_nEq; /* Original value of pNew->u.btree.nEq */
117909
- u16 saved_nSkip; /* Original value of pNew->u.btree.nSkip */
118990
+ u16 saved_nSkip; /* Original value of pNew->nSkip */
117910118991
u32 saved_wsFlags; /* Original value of pNew->wsFlags */
117911118992
LogEst saved_nOut; /* Original value of pNew->nOut */
117912118993
int iCol; /* Index of the column in the table */
117913118994
int rc = SQLITE_OK; /* Return code */
117914118995
LogEst rSize; /* Number of rows in the table */
@@ -117933,56 +119014,18 @@
117933119014
iCol = pProbe->aiColumn[pNew->u.btree.nEq];
117934119015
117935119016
pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, iCol,
117936119017
opMask, pProbe);
117937119018
saved_nEq = pNew->u.btree.nEq;
117938
- saved_nSkip = pNew->u.btree.nSkip;
119019
+ saved_nSkip = pNew->nSkip;
117939119020
saved_nLTerm = pNew->nLTerm;
117940119021
saved_wsFlags = pNew->wsFlags;
117941119022
saved_prereq = pNew->prereq;
117942119023
saved_nOut = pNew->nOut;
117943119024
pNew->rSetup = 0;
117944119025
rSize = pProbe->aiRowLogEst[0];
117945119026
rLogSize = estLog(rSize);
117946
-
117947
- /* Consider using a skip-scan if there are no WHERE clause constraints
117948
- ** available for the left-most terms of the index, and if the average
117949
- ** number of repeats in the left-most terms is at least 18.
117950
- **
117951
- ** The magic number 18 is selected on the basis that scanning 17 rows
117952
- ** is almost always quicker than an index seek (even though if the index
117953
- ** contains fewer than 2^17 rows we assume otherwise in other parts of
117954
- ** the code). And, even if it is not, it should not be too much slower.
117955
- ** On the other hand, the extra seeks could end up being significantly
117956
- ** more expensive. */
117957
- assert( 42==sqlite3LogEst(18) );
117958
- if( saved_nEq==saved_nSkip
117959
- && saved_nEq+1<pProbe->nKeyCol
117960
- && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */
117961
- && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
117962
- ){
117963
- LogEst nIter;
117964
- pNew->u.btree.nEq++;
117965
- pNew->u.btree.nSkip++;
117966
- pNew->aLTerm[pNew->nLTerm++] = 0;
117967
- pNew->wsFlags |= WHERE_SKIPSCAN;
117968
- nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1];
117969
- if( pTerm ){
117970
- /* TUNING: When estimating skip-scan for a term that is also indexable,
117971
- ** multiply the cost of the skip-scan by 2.0, to make it a little less
117972
- ** desirable than the regular index lookup. */
117973
- nIter += 10; assert( 10==sqlite3LogEst(2) );
117974
- }
117975
- pNew->nOut -= nIter;
117976
- /* TUNING: Because uncertainties in the estimates for skip-scan queries,
117977
- ** add a 1.375 fudge factor to make skip-scan slightly less likely. */
117978
- nIter += 5;
117979
- whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul);
117980
- pNew->nOut = saved_nOut;
117981
- pNew->u.btree.nEq = saved_nEq;
117982
- pNew->u.btree.nSkip = saved_nSkip;
117983
- }
117984119027
for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){
117985119028
u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */
117986119029
LogEst rCostIdx;
117987119030
LogEst nOutUnadjusted; /* nOut before IN() and WHERE adjustments */
117988119031
int nIn = 0;
@@ -118073,11 +119116,10 @@
118073119116
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
118074119117
tRowcnt nOut = 0;
118075119118
if( nInMul==0
118076119119
&& pProbe->nSample
118077119120
&& pNew->u.btree.nEq<=pProbe->nSampleCol
118078
- && OptimizationEnabled(db, SQLITE_Stat3)
118079119121
&& ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect))
118080119122
){
118081119123
Expr *pExpr = pTerm->pExpr;
118082119124
if( (eOp & (WO_EQ|WO_ISNULL))!=0 ){
118083119125
testcase( eOp & WO_EQ );
@@ -118141,14 +119183,49 @@
118141119183
pBuilder->nRecValid = nRecValid;
118142119184
#endif
118143119185
}
118144119186
pNew->prereq = saved_prereq;
118145119187
pNew->u.btree.nEq = saved_nEq;
118146
- pNew->u.btree.nSkip = saved_nSkip;
119188
+ pNew->nSkip = saved_nSkip;
118147119189
pNew->wsFlags = saved_wsFlags;
118148119190
pNew->nOut = saved_nOut;
118149119191
pNew->nLTerm = saved_nLTerm;
119192
+
119193
+ /* Consider using a skip-scan if there are no WHERE clause constraints
119194
+ ** available for the left-most terms of the index, and if the average
119195
+ ** number of repeats in the left-most terms is at least 18.
119196
+ **
119197
+ ** The magic number 18 is selected on the basis that scanning 17 rows
119198
+ ** is almost always quicker than an index seek (even though if the index
119199
+ ** contains fewer than 2^17 rows we assume otherwise in other parts of
119200
+ ** the code). And, even if it is not, it should not be too much slower.
119201
+ ** On the other hand, the extra seeks could end up being significantly
119202
+ ** more expensive. */
119203
+ assert( 42==sqlite3LogEst(18) );
119204
+ if( saved_nEq==saved_nSkip
119205
+ && saved_nEq+1<pProbe->nKeyCol
119206
+ && pProbe->noSkipScan==0
119207
+ && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */
119208
+ && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
119209
+ ){
119210
+ LogEst nIter;
119211
+ pNew->u.btree.nEq++;
119212
+ pNew->nSkip++;
119213
+ pNew->aLTerm[pNew->nLTerm++] = 0;
119214
+ pNew->wsFlags |= WHERE_SKIPSCAN;
119215
+ nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1];
119216
+ pNew->nOut -= nIter;
119217
+ /* TUNING: Because uncertainties in the estimates for skip-scan queries,
119218
+ ** add a 1.375 fudge factor to make skip-scan slightly less likely. */
119219
+ nIter += 5;
119220
+ whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul);
119221
+ pNew->nOut = saved_nOut;
119222
+ pNew->u.btree.nEq = saved_nEq;
119223
+ pNew->nSkip = saved_nSkip;
119224
+ pNew->wsFlags = saved_wsFlags;
119225
+ }
119226
+
118150119227
return rc;
118151119228
}
118152119229
118153119230
/*
118154119231
** Return True if it is possible that pIndex might be useful in
@@ -118323,11 +119400,11 @@
118323119400
WhereTerm *pWCEnd = pWC->a + pWC->nTerm;
118324119401
for(pTerm=pWC->a; rc==SQLITE_OK && pTerm<pWCEnd; pTerm++){
118325119402
if( pTerm->prereqRight & pNew->maskSelf ) continue;
118326119403
if( termCanDriveIndex(pTerm, pSrc, 0) ){
118327119404
pNew->u.btree.nEq = 1;
118328
- pNew->u.btree.nSkip = 0;
119405
+ pNew->nSkip = 0;
118329119406
pNew->u.btree.pIndex = 0;
118330119407
pNew->nLTerm = 1;
118331119408
pNew->aLTerm[0] = pTerm;
118332119409
/* TUNING: One-time cost for computing the automatic index is
118333119410
** estimated to be X*N*log2(N) where N is the number of rows in
@@ -118364,11 +119441,11 @@
118364119441
testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */
118365119442
continue; /* Partial index inappropriate for this query */
118366119443
}
118367119444
rSize = pProbe->aiRowLogEst[0];
118368119445
pNew->u.btree.nEq = 0;
118369
- pNew->u.btree.nSkip = 0;
119446
+ pNew->nSkip = 0;
118370119447
pNew->nLTerm = 0;
118371119448
pNew->iSortIdx = 0;
118372119449
pNew->rSetup = 0;
118373119450
pNew->prereq = mExtra;
118374119451
pNew->nOut = rSize;
@@ -118914,11 +119991,11 @@
118914119991
for(j=0; j<nColumn; j++){
118915119992
u8 bOnce; /* True to run the ORDER BY search loop */
118916119993
118917119994
/* Skip over == and IS NULL terms */
118918119995
if( j<pLoop->u.btree.nEq
118919
- && pLoop->u.btree.nSkip==0
119996
+ && pLoop->nSkip==0
118920119997
&& ((i = pLoop->aLTerm[j]->eOperator) & (WO_EQ|WO_ISNULL))!=0
118921119998
){
118922119999
if( i & WO_ISNULL ){
118923120000
testcase( isOrderDistinct );
118924120001
isOrderDistinct = 0;
@@ -119368,11 +120445,11 @@
119368120445
}
119369120446
}
119370120447
}
119371120448
119372120449
#ifdef WHERETRACE_ENABLED /* >=2 */
119373
- if( sqlite3WhereTrace>=2 ){
120450
+ if( sqlite3WhereTrace & 0x02 ){
119374120451
sqlite3DebugPrintf("---- after round %d ----\n", iLoop);
119375120452
for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
119376120453
sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c",
119377120454
wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
119378120455
pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?');
@@ -119487,11 +120564,11 @@
119487120564
if( pItem->zIndex ) return 0;
119488120565
iCur = pItem->iCursor;
119489120566
pWC = &pWInfo->sWC;
119490120567
pLoop = pBuilder->pNew;
119491120568
pLoop->wsFlags = 0;
119492
- pLoop->u.btree.nSkip = 0;
120569
+ pLoop->nSkip = 0;
119493120570
pTerm = findTerm(pWC, iCur, -1, 0, WO_EQ, 0);
119494120571
if( pTerm ){
119495120572
pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW;
119496120573
pLoop->aLTerm[0] = pTerm;
119497120574
pLoop->nLTerm = 1;
@@ -119499,11 +120576,10 @@
119499120576
/* TUNING: Cost of a rowid lookup is 10 */
119500120577
pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
119501120578
}else{
119502120579
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
119503120580
assert( pLoop->aLTermSpace==pLoop->aLTerm );
119504
- assert( ArraySize(pLoop->aLTermSpace)==4 );
119505120581
if( !IsUniqueIndex(pIdx)
119506120582
|| pIdx->pPartIdxWhere!=0
119507120583
|| pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
119508120584
) continue;
119509120585
for(j=0; j<pIdx->nKeyCol; j++){
@@ -120008,22 +121084,30 @@
120008121084
** loop below generates code for a single nested loop of the VM
120009121085
** program.
120010121086
*/
120011121087
notReady = ~(Bitmask)0;
120012121088
for(ii=0; ii<nTabList; ii++){
121089
+ int addrExplain;
121090
+ int wsFlags;
120013121091
pLevel = &pWInfo->a[ii];
121092
+ wsFlags = pLevel->pWLoop->wsFlags;
120014121093
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
120015121094
if( (pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 ){
120016121095
constructAutomaticIndex(pParse, &pWInfo->sWC,
120017121096
&pTabList->a[pLevel->iFrom], notReady, pLevel);
120018121097
if( db->mallocFailed ) goto whereBeginError;
120019121098
}
120020121099
#endif
120021
- explainOneScan(pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags);
121100
+ addrExplain = explainOneScan(
121101
+ pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags
121102
+ );
120022121103
pLevel->addrBody = sqlite3VdbeCurrentAddr(v);
120023121104
notReady = codeOneLoopStart(pWInfo, ii, notReady);
120024121105
pWInfo->iContinue = pLevel->addrCont;
121106
+ if( (wsFlags&WHERE_MULTI_OR)==0 && (wctrlFlags&WHERE_ONETABLE_ONLY)==0 ){
121107
+ addScanStatus(v, pTabList, pLevel, addrExplain);
121108
+ }
120025121109
}
120026121110
120027121111
/* Done. */
120028121112
VdbeModuleComment((v, "Begin WHERE-core"));
120029121113
return pWInfo;
@@ -124687,10 +125771,17 @@
124687125771
** is look for a semicolon that is not part of an string or comment.
124688125772
*/
124689125773
SQLITE_API int sqlite3_complete(const char *zSql){
124690125774
u8 state = 0; /* Current state, using numbers defined in header comment */
124691125775
u8 token; /* Value of the next token */
125776
+
125777
+#ifdef SQLITE_ENABLE_API_ARMOR
125778
+ if( zSql==0 ){
125779
+ (void)SQLITE_MISUSE_BKPT;
125780
+ return 0;
125781
+ }
125782
+#endif
124692125783
124693125784
#ifndef SQLITE_OMIT_TRIGGER
124694125785
/* A complex statement machine used to detect the end of a CREATE TRIGGER
124695125786
** statement. This is the normal case.
124696125787
*/
@@ -125285,74 +126376,106 @@
125285126376
125286126377
va_start(ap, op);
125287126378
switch( op ){
125288126379
125289126380
/* Mutex configuration options are only available in a threadsafe
125290
- ** compile.
126381
+ ** compile.
125291126382
*/
125292
-#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
126383
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-54466-46756 */
125293126384
case SQLITE_CONFIG_SINGLETHREAD: {
125294126385
/* Disable all mutexing */
125295126386
sqlite3GlobalConfig.bCoreMutex = 0;
125296126387
sqlite3GlobalConfig.bFullMutex = 0;
125297126388
break;
125298126389
}
126390
+#endif
126391
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */
125299126392
case SQLITE_CONFIG_MULTITHREAD: {
125300126393
/* Disable mutexing of database connections */
125301126394
/* Enable mutexing of core data structures */
125302126395
sqlite3GlobalConfig.bCoreMutex = 1;
125303126396
sqlite3GlobalConfig.bFullMutex = 0;
125304126397
break;
125305126398
}
126399
+#endif
126400
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */
125306126401
case SQLITE_CONFIG_SERIALIZED: {
125307126402
/* Enable all mutexing */
125308126403
sqlite3GlobalConfig.bCoreMutex = 1;
125309126404
sqlite3GlobalConfig.bFullMutex = 1;
125310126405
break;
125311126406
}
126407
+#endif
126408
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */
125312126409
case SQLITE_CONFIG_MUTEX: {
125313126410
/* Specify an alternative mutex implementation */
125314126411
sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
125315126412
break;
125316126413
}
126414
+#endif
126415
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-14450-37597 */
125317126416
case SQLITE_CONFIG_GETMUTEX: {
125318126417
/* Retrieve the current mutex implementation */
125319126418
*va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
125320126419
break;
125321126420
}
125322126421
#endif
125323126422
125324
-
125325126423
case SQLITE_CONFIG_MALLOC: {
125326
- /* Specify an alternative malloc implementation */
126424
+ /* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a
126425
+ ** single argument which is a pointer to an instance of the
126426
+ ** sqlite3_mem_methods structure. The argument specifies alternative
126427
+ ** low-level memory allocation routines to be used in place of the memory
126428
+ ** allocation routines built into SQLite. */
125327126429
sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
125328126430
break;
125329126431
}
125330126432
case SQLITE_CONFIG_GETMALLOC: {
125331
- /* Retrieve the current malloc() implementation */
126433
+ /* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a
126434
+ ** single argument which is a pointer to an instance of the
126435
+ ** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is
126436
+ ** filled with the currently defined memory allocation routines. */
125332126437
if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
125333126438
*va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
125334126439
break;
125335126440
}
125336126441
case SQLITE_CONFIG_MEMSTATUS: {
125337
- /* Enable or disable the malloc status collection */
126442
+ /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes
126443
+ ** single argument of type int, interpreted as a boolean, which enables
126444
+ ** or disables the collection of memory allocation statistics. */
125338126445
sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
125339126446
break;
125340126447
}
125341126448
case SQLITE_CONFIG_SCRATCH: {
125342
- /* Designate a buffer for scratch memory space */
126449
+ /* EVIDENCE-OF: R-08404-60887 There are three arguments to
126450
+ ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from
126451
+ ** which the scratch allocations will be drawn, the size of each scratch
126452
+ ** allocation (sz), and the maximum number of scratch allocations (N). */
125343126453
sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
125344126454
sqlite3GlobalConfig.szScratch = va_arg(ap, int);
125345126455
sqlite3GlobalConfig.nScratch = va_arg(ap, int);
125346126456
break;
125347126457
}
125348126458
case SQLITE_CONFIG_PAGECACHE: {
125349
- /* Designate a buffer for page cache memory space */
126459
+ /* EVIDENCE-OF: R-31408-40510 There are three arguments to
126460
+ ** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory, the size
126461
+ ** of each page buffer (sz), and the number of pages (N). */
125350126462
sqlite3GlobalConfig.pPage = va_arg(ap, void*);
125351126463
sqlite3GlobalConfig.szPage = va_arg(ap, int);
125352126464
sqlite3GlobalConfig.nPage = va_arg(ap, int);
125353126465
break;
126466
+ }
126467
+ case SQLITE_CONFIG_PCACHE_HDRSZ: {
126468
+ /* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes
126469
+ ** a single parameter which is a pointer to an integer and writes into
126470
+ ** that integer the number of extra bytes per page required for each page
126471
+ ** in SQLITE_CONFIG_PAGECACHE. */
126472
+ *va_arg(ap, int*) =
126473
+ sqlite3HeaderSizeBtree() +
126474
+ sqlite3HeaderSizePcache() +
126475
+ sqlite3HeaderSizePcache1();
126476
+ break;
125354126477
}
125355126478
125356126479
case SQLITE_CONFIG_PCACHE: {
125357126480
/* no-op */
125358126481
break;
@@ -125362,25 +126485,37 @@
125362126485
rc = SQLITE_ERROR;
125363126486
break;
125364126487
}
125365126488
125366126489
case SQLITE_CONFIG_PCACHE2: {
125367
- /* Specify an alternative page cache implementation */
126490
+ /* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a
126491
+ ** single argument which is a pointer to an sqlite3_pcache_methods2
126492
+ ** object. This object specifies the interface to a custom page cache
126493
+ ** implementation. */
125368126494
sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
125369126495
break;
125370126496
}
125371126497
case SQLITE_CONFIG_GETPCACHE2: {
126498
+ /* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a
126499
+ ** single argument which is a pointer to an sqlite3_pcache_methods2
126500
+ ** object. SQLite copies of the current page cache implementation into
126501
+ ** that object. */
125372126502
if( sqlite3GlobalConfig.pcache2.xInit==0 ){
125373126503
sqlite3PCacheSetDefault();
125374126504
}
125375126505
*va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
125376126506
break;
125377126507
}
125378126508
126509
+/* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only
126510
+** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or
126511
+** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */
125379126512
#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
125380126513
case SQLITE_CONFIG_HEAP: {
125381
- /* Designate a buffer for heap memory space */
126514
+ /* EVIDENCE-OF: R-19854-42126 There are three arguments to
126515
+ ** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the
126516
+ ** number of bytes in the memory buffer, and the minimum allocation size. */
125382126517
sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
125383126518
sqlite3GlobalConfig.nHeap = va_arg(ap, int);
125384126519
sqlite3GlobalConfig.mnReq = va_arg(ap, int);
125385126520
125386126521
if( sqlite3GlobalConfig.mnReq<1 ){
@@ -125389,21 +126524,23 @@
125389126524
/* cap min request size at 2^12 */
125390126525
sqlite3GlobalConfig.mnReq = (1<<12);
125391126526
}
125392126527
125393126528
if( sqlite3GlobalConfig.pHeap==0 ){
125394
- /* If the heap pointer is NULL, then restore the malloc implementation
125395
- ** back to NULL pointers too. This will cause the malloc to go
125396
- ** back to its default implementation when sqlite3_initialize() is
125397
- ** run.
126529
+ /* EVIDENCE-OF: R-49920-60189 If the first pointer (the memory pointer)
126530
+ ** is NULL, then SQLite reverts to using its default memory allocator
126531
+ ** (the system malloc() implementation), undoing any prior invocation of
126532
+ ** SQLITE_CONFIG_MALLOC.
126533
+ **
126534
+ ** Setting sqlite3GlobalConfig.m to all zeros will cause malloc to
126535
+ ** revert to its default implementation when sqlite3_initialize() is run
125398126536
*/
125399126537
memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
125400126538
}else{
125401
- /* The heap pointer is not NULL, then install one of the
125402
- ** mem5.c/mem3.c methods. The enclosing #if guarantees at
125403
- ** least one of these methods is currently enabled.
125404
- */
126539
+ /* EVIDENCE-OF: R-61006-08918 If the memory pointer is not NULL then the
126540
+ ** alternative memory allocator is engaged to handle all of SQLites
126541
+ ** memory allocation needs. */
125405126542
#ifdef SQLITE_ENABLE_MEMSYS3
125406126543
sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
125407126544
#endif
125408126545
#ifdef SQLITE_ENABLE_MEMSYS5
125409126546
sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
@@ -125438,15 +126575,23 @@
125438126575
** can be changed at start-time using the
125439126576
** sqlite3_config(SQLITE_CONFIG_URI,1) or
125440126577
** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
125441126578
*/
125442126579
case SQLITE_CONFIG_URI: {
126580
+ /* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single
126581
+ ** argument of type int. If non-zero, then URI handling is globally
126582
+ ** enabled. If the parameter is zero, then URI handling is globally
126583
+ ** disabled. */
125443126584
sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
125444126585
break;
125445126586
}
125446126587
125447126588
case SQLITE_CONFIG_COVERING_INDEX_SCAN: {
126589
+ /* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN
126590
+ ** option takes a single integer argument which is interpreted as a
126591
+ ** boolean in order to enable or disable the use of covering indices for
126592
+ ** full table scans in the query optimizer. */
125448126593
sqlite3GlobalConfig.bUseCis = va_arg(ap, int);
125449126594
break;
125450126595
}
125451126596
125452126597
#ifdef SQLITE_ENABLE_SQLLOG
@@ -125457,24 +126602,37 @@
125457126602
break;
125458126603
}
125459126604
#endif
125460126605
125461126606
case SQLITE_CONFIG_MMAP_SIZE: {
126607
+ /* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit
126608
+ ** integer (sqlite3_int64) values that are the default mmap size limit
126609
+ ** (the default setting for PRAGMA mmap_size) and the maximum allowed
126610
+ ** mmap size limit. */
125462126611
sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64);
125463126612
sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64);
125464
- if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){
125465
- mxMmap = SQLITE_MAX_MMAP_SIZE;
125466
- }
125467
- sqlite3GlobalConfig.mxMmap = mxMmap;
126613
+ /* EVIDENCE-OF: R-53367-43190 If either argument to this option is
126614
+ ** negative, then that argument is changed to its compile-time default.
126615
+ **
126616
+ ** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be
126617
+ ** silently truncated if necessary so that it does not exceed the
126618
+ ** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE
126619
+ ** compile-time option.
126620
+ */
126621
+ if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ) mxMmap = SQLITE_MAX_MMAP_SIZE;
125468126622
if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE;
125469126623
if( szMmap>mxMmap) szMmap = mxMmap;
126624
+ sqlite3GlobalConfig.mxMmap = mxMmap;
125470126625
sqlite3GlobalConfig.szMmap = szMmap;
125471126626
break;
125472126627
}
125473126628
125474
-#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC)
126629
+#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) /* IMP: R-04780-55815 */
125475126630
case SQLITE_CONFIG_WIN32_HEAPSIZE: {
126631
+ /* EVIDENCE-OF: R-34926-03360 SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit
126632
+ ** unsigned integer value that specifies the maximum size of the created
126633
+ ** heap. */
125476126634
sqlite3GlobalConfig.nHeap = va_arg(ap, int);
125477126635
break;
125478126636
}
125479126637
#endif
125480126638
@@ -125554,19 +126712,29 @@
125554126712
125555126713
/*
125556126714
** Return the mutex associated with a database connection.
125557126715
*/
125558126716
SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
126717
+#ifdef SQLITE_ENABLE_API_ARMOR
126718
+ if( !sqlite3SafetyCheckOk(db) ){
126719
+ (void)SQLITE_MISUSE_BKPT;
126720
+ return 0;
126721
+ }
126722
+#endif
125559126723
return db->mutex;
125560126724
}
125561126725
125562126726
/*
125563126727
** Free up as much memory as we can from the given database
125564126728
** connection.
125565126729
*/
125566126730
SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){
125567126731
int i;
126732
+
126733
+#ifdef SQLITE_ENABLE_API_ARMOR
126734
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
126735
+#endif
125568126736
sqlite3_mutex_enter(db->mutex);
125569126737
sqlite3BtreeEnterAll(db);
125570126738
for(i=0; i<db->nDb; i++){
125571126739
Btree *pBt = db->aDb[i].pBt;
125572126740
if( pBt ){
@@ -125652,17 +126820,24 @@
125652126820
int nKey1, const void *pKey1,
125653126821
int nKey2, const void *pKey2
125654126822
){
125655126823
int rc, n;
125656126824
n = nKey1<nKey2 ? nKey1 : nKey2;
126825
+ /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
126826
+ ** strings byte by byte using the memcmp() function from the standard C
126827
+ ** library. */
125657126828
rc = memcmp(pKey1, pKey2, n);
125658126829
if( rc==0 ){
125659126830
if( padFlag
125660126831
&& allSpaces(((char*)pKey1)+n, nKey1-n)
125661126832
&& allSpaces(((char*)pKey2)+n, nKey2-n)
125662126833
){
125663
- /* Leave rc unchanged at 0 */
126834
+ /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
126835
+ ** spaces at the end of either string do not change the result. In other
126836
+ ** words, strings will compare equal to one another as long as they
126837
+ ** differ only in the number of spaces at the end.
126838
+ */
125664126839
}else{
125665126840
rc = nKey1 - nKey2;
125666126841
}
125667126842
}
125668126843
return rc;
@@ -125693,24 +126868,42 @@
125693126868
125694126869
/*
125695126870
** Return the ROWID of the most recent insert
125696126871
*/
125697126872
SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
126873
+#ifdef SQLITE_ENABLE_API_ARMOR
126874
+ if( !sqlite3SafetyCheckOk(db) ){
126875
+ (void)SQLITE_MISUSE_BKPT;
126876
+ return 0;
126877
+ }
126878
+#endif
125698126879
return db->lastRowid;
125699126880
}
125700126881
125701126882
/*
125702126883
** Return the number of changes in the most recent call to sqlite3_exec().
125703126884
*/
125704126885
SQLITE_API int sqlite3_changes(sqlite3 *db){
126886
+#ifdef SQLITE_ENABLE_API_ARMOR
126887
+ if( !sqlite3SafetyCheckOk(db) ){
126888
+ (void)SQLITE_MISUSE_BKPT;
126889
+ return 0;
126890
+ }
126891
+#endif
125705126892
return db->nChange;
125706126893
}
125707126894
125708126895
/*
125709126896
** Return the number of changes since the database handle was opened.
125710126897
*/
125711126898
SQLITE_API int sqlite3_total_changes(sqlite3 *db){
126899
+#ifdef SQLITE_ENABLE_API_ARMOR
126900
+ if( !sqlite3SafetyCheckOk(db) ){
126901
+ (void)SQLITE_MISUSE_BKPT;
126902
+ return 0;
126903
+ }
126904
+#endif
125712126905
return db->nTotalChange;
125713126906
}
125714126907
125715126908
/*
125716126909
** Close all open savepoints. This function only manipulates fields of the
@@ -126255,10 +127448,13 @@
126255127448
SQLITE_API int sqlite3_busy_handler(
126256127449
sqlite3 *db,
126257127450
int (*xBusy)(void*,int),
126258127451
void *pArg
126259127452
){
127453
+#ifdef SQLITE_ENABLE_API_ARMOR
127454
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE;
127455
+#endif
126260127456
sqlite3_mutex_enter(db->mutex);
126261127457
db->busyHandler.xFunc = xBusy;
126262127458
db->busyHandler.pArg = pArg;
126263127459
db->busyHandler.nBusy = 0;
126264127460
db->busyTimeout = 0;
@@ -126276,10 +127472,16 @@
126276127472
sqlite3 *db,
126277127473
int nOps,
126278127474
int (*xProgress)(void*),
126279127475
void *pArg
126280127476
){
127477
+#ifdef SQLITE_ENABLE_API_ARMOR
127478
+ if( !sqlite3SafetyCheckOk(db) ){
127479
+ (void)SQLITE_MISUSE_BKPT;
127480
+ return;
127481
+ }
127482
+#endif
126281127483
sqlite3_mutex_enter(db->mutex);
126282127484
if( nOps>0 ){
126283127485
db->xProgress = xProgress;
126284127486
db->nProgressOps = (unsigned)nOps;
126285127487
db->pProgressArg = pArg;
@@ -126296,10 +127498,13 @@
126296127498
/*
126297127499
** This routine installs a default busy handler that waits for the
126298127500
** specified number of milliseconds before returning 0.
126299127501
*/
126300127502
SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
127503
+#ifdef SQLITE_ENABLE_API_ARMOR
127504
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127505
+#endif
126301127506
if( ms>0 ){
126302127507
sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
126303127508
db->busyTimeout = ms;
126304127509
}else{
126305127510
sqlite3_busy_handler(db, 0, 0);
@@ -126309,10 +127514,16 @@
126309127514
126310127515
/*
126311127516
** Cause any pending operation to stop at its earliest opportunity.
126312127517
*/
126313127518
SQLITE_API void sqlite3_interrupt(sqlite3 *db){
127519
+#ifdef SQLITE_ENABLE_API_ARMOR
127520
+ if( !sqlite3SafetyCheckOk(db) ){
127521
+ (void)SQLITE_MISUSE_BKPT;
127522
+ return;
127523
+ }
127524
+#endif
126314127525
db->u1.isInterrupted = 1;
126315127526
}
126316127527
126317127528
126318127529
/*
@@ -126446,10 +127657,16 @@
126446127657
void (*xFinal)(sqlite3_context*),
126447127658
void (*xDestroy)(void *)
126448127659
){
126449127660
int rc = SQLITE_ERROR;
126450127661
FuncDestructor *pArg = 0;
127662
+
127663
+#ifdef SQLITE_ENABLE_API_ARMOR
127664
+ if( !sqlite3SafetyCheckOk(db) ){
127665
+ return SQLITE_MISUSE_BKPT;
127666
+ }
127667
+#endif
126451127668
sqlite3_mutex_enter(db->mutex);
126452127669
if( xDestroy ){
126453127670
pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
126454127671
if( !pArg ){
126455127672
xDestroy(p);
@@ -126482,10 +127699,14 @@
126482127699
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
126483127700
void (*xFinal)(sqlite3_context*)
126484127701
){
126485127702
int rc;
126486127703
char *zFunc8;
127704
+
127705
+#ifdef SQLITE_ENABLE_API_ARMOR
127706
+ if( !sqlite3SafetyCheckOk(db) || zFunctionName==0 ) return SQLITE_MISUSE_BKPT;
127707
+#endif
126487127708
sqlite3_mutex_enter(db->mutex);
126488127709
assert( !db->mallocFailed );
126489127710
zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
126490127711
rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
126491127712
sqlite3DbFree(db, zFunc8);
@@ -126513,10 +127734,16 @@
126513127734
const char *zName,
126514127735
int nArg
126515127736
){
126516127737
int nName = sqlite3Strlen30(zName);
126517127738
int rc = SQLITE_OK;
127739
+
127740
+#ifdef SQLITE_ENABLE_API_ARMOR
127741
+ if( !sqlite3SafetyCheckOk(db) || zName==0 || nArg<-2 ){
127742
+ return SQLITE_MISUSE_BKPT;
127743
+ }
127744
+#endif
126518127745
sqlite3_mutex_enter(db->mutex);
126519127746
if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
126520127747
rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
126521127748
0, sqlite3InvalidFunction, 0, 0, 0);
126522127749
}
@@ -126534,10 +127761,17 @@
126534127761
** trace is a pointer to a function that is invoked at the start of each
126535127762
** SQL statement.
126536127763
*/
126537127764
SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
126538127765
void *pOld;
127766
+
127767
+#ifdef SQLITE_ENABLE_API_ARMOR
127768
+ if( !sqlite3SafetyCheckOk(db) ){
127769
+ (void)SQLITE_MISUSE_BKPT;
127770
+ return 0;
127771
+ }
127772
+#endif
126539127773
sqlite3_mutex_enter(db->mutex);
126540127774
pOld = db->pTraceArg;
126541127775
db->xTrace = xTrace;
126542127776
db->pTraceArg = pArg;
126543127777
sqlite3_mutex_leave(db->mutex);
@@ -126555,10 +127789,17 @@
126555127789
sqlite3 *db,
126556127790
void (*xProfile)(void*,const char*,sqlite_uint64),
126557127791
void *pArg
126558127792
){
126559127793
void *pOld;
127794
+
127795
+#ifdef SQLITE_ENABLE_API_ARMOR
127796
+ if( !sqlite3SafetyCheckOk(db) ){
127797
+ (void)SQLITE_MISUSE_BKPT;
127798
+ return 0;
127799
+ }
127800
+#endif
126560127801
sqlite3_mutex_enter(db->mutex);
126561127802
pOld = db->pProfileArg;
126562127803
db->xProfile = xProfile;
126563127804
db->pProfileArg = pArg;
126564127805
sqlite3_mutex_leave(db->mutex);
@@ -126575,10 +127816,17 @@
126575127816
sqlite3 *db, /* Attach the hook to this database */
126576127817
int (*xCallback)(void*), /* Function to invoke on each commit */
126577127818
void *pArg /* Argument to the function */
126578127819
){
126579127820
void *pOld;
127821
+
127822
+#ifdef SQLITE_ENABLE_API_ARMOR
127823
+ if( !sqlite3SafetyCheckOk(db) ){
127824
+ (void)SQLITE_MISUSE_BKPT;
127825
+ return 0;
127826
+ }
127827
+#endif
126580127828
sqlite3_mutex_enter(db->mutex);
126581127829
pOld = db->pCommitArg;
126582127830
db->xCommitCallback = xCallback;
126583127831
db->pCommitArg = pArg;
126584127832
sqlite3_mutex_leave(db->mutex);
@@ -126593,10 +127841,17 @@
126593127841
sqlite3 *db, /* Attach the hook to this database */
126594127842
void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
126595127843
void *pArg /* Argument to the function */
126596127844
){
126597127845
void *pRet;
127846
+
127847
+#ifdef SQLITE_ENABLE_API_ARMOR
127848
+ if( !sqlite3SafetyCheckOk(db) ){
127849
+ (void)SQLITE_MISUSE_BKPT;
127850
+ return 0;
127851
+ }
127852
+#endif
126598127853
sqlite3_mutex_enter(db->mutex);
126599127854
pRet = db->pUpdateArg;
126600127855
db->xUpdateCallback = xCallback;
126601127856
db->pUpdateArg = pArg;
126602127857
sqlite3_mutex_leave(db->mutex);
@@ -126611,10 +127866,17 @@
126611127866
sqlite3 *db, /* Attach the hook to this database */
126612127867
void (*xCallback)(void*), /* Callback function */
126613127868
void *pArg /* Argument to the function */
126614127869
){
126615127870
void *pRet;
127871
+
127872
+#ifdef SQLITE_ENABLE_API_ARMOR
127873
+ if( !sqlite3SafetyCheckOk(db) ){
127874
+ (void)SQLITE_MISUSE_BKPT;
127875
+ return 0;
127876
+ }
127877
+#endif
126616127878
sqlite3_mutex_enter(db->mutex);
126617127879
pRet = db->pRollbackArg;
126618127880
db->xRollbackCallback = xCallback;
126619127881
db->pRollbackArg = pArg;
126620127882
sqlite3_mutex_leave(db->mutex);
@@ -126657,10 +127919,13 @@
126657127919
SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
126658127920
#ifdef SQLITE_OMIT_WAL
126659127921
UNUSED_PARAMETER(db);
126660127922
UNUSED_PARAMETER(nFrame);
126661127923
#else
127924
+#ifdef SQLITE_ENABLE_API_ARMOR
127925
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127926
+#endif
126662127927
if( nFrame>0 ){
126663127928
sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
126664127929
}else{
126665127930
sqlite3_wal_hook(db, 0, 0);
126666127931
}
@@ -126677,10 +127942,16 @@
126677127942
int(*xCallback)(void *, sqlite3*, const char*, int),
126678127943
void *pArg /* First argument passed to xCallback() */
126679127944
){
126680127945
#ifndef SQLITE_OMIT_WAL
126681127946
void *pRet;
127947
+#ifdef SQLITE_ENABLE_API_ARMOR
127948
+ if( !sqlite3SafetyCheckOk(db) ){
127949
+ (void)SQLITE_MISUSE_BKPT;
127950
+ return 0;
127951
+ }
127952
+#endif
126682127953
sqlite3_mutex_enter(db->mutex);
126683127954
pRet = db->pWalArg;
126684127955
db->xWalCallback = xCallback;
126685127956
db->pWalArg = pArg;
126686127957
sqlite3_mutex_leave(db->mutex);
@@ -126703,10 +127974,14 @@
126703127974
#ifdef SQLITE_OMIT_WAL
126704127975
return SQLITE_OK;
126705127976
#else
126706127977
int rc; /* Return code */
126707127978
int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
127979
+
127980
+#ifdef SQLITE_ENABLE_API_ARMOR
127981
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127982
+#endif
126708127983
126709127984
/* Initialize the output variables to -1 in case an error occurs. */
126710127985
if( pnLog ) *pnLog = -1;
126711127986
if( pnCkpt ) *pnCkpt = -1;
126712127987
@@ -127100,10 +128375,16 @@
127100128375
** from forming.
127101128376
*/
127102128377
SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
127103128378
int oldLimit;
127104128379
128380
+#ifdef SQLITE_ENABLE_API_ARMOR
128381
+ if( !sqlite3SafetyCheckOk(db) ){
128382
+ (void)SQLITE_MISUSE_BKPT;
128383
+ return -1;
128384
+ }
128385
+#endif
127105128386
127106128387
/* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
127107128388
** there is a hard upper bound set at compile-time by a C preprocessor
127108128389
** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
127109128390
** "_MAX_".)
@@ -127176,11 +128457,12 @@
127176128457
char c;
127177128458
int nUri = sqlite3Strlen30(zUri);
127178128459
127179128460
assert( *pzErrMsg==0 );
127180128461
127181
- if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri)
128462
+ if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */
128463
+ || sqlite3GlobalConfig.bOpenUri) /* IMP: R-51689-46548 */
127182128464
&& nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */
127183128465
){
127184128466
char *zOpt;
127185128467
int eState; /* Parser state when parsing URI */
127186128468
int iIn; /* Input character index */
@@ -127385,10 +128667,13 @@
127385128667
int rc; /* Return code */
127386128668
int isThreadsafe; /* True for threadsafe connections */
127387128669
char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */
127388128670
char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */
127389128671
128672
+#ifdef SQLITE_ENABLE_API_ARMOR
128673
+ if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
128674
+#endif
127390128675
*ppDb = 0;
127391128676
#ifndef SQLITE_OMIT_AUTOINIT
127392128677
rc = sqlite3_initialize();
127393128678
if( rc ) return rc;
127394128679
#endif
@@ -127499,24 +128784,28 @@
127499128784
#endif
127500128785
127501128786
/* Add the default collation sequence BINARY. BINARY works for both UTF-8
127502128787
** and UTF-16, so add a version for each to avoid any unnecessary
127503128788
** conversions. The only error that can occur here is a malloc() failure.
128789
+ **
128790
+ ** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating
128791
+ ** functions:
127504128792
*/
127505128793
createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
127506128794
createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
127507128795
createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
128796
+ createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
127508128797
createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
127509128798
if( db->mallocFailed ){
127510128799
goto opendb_out;
127511128800
}
128801
+ /* EVIDENCE-OF: R-08308-17224 The default collating function for all
128802
+ ** strings is BINARY.
128803
+ */
127512128804
db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
127513128805
assert( db->pDfltColl!=0 );
127514128806
127515
- /* Also add a UTF-8 case-insensitive collation sequence. */
127516
- createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
127517
-
127518128807
/* Parse the filename/URI argument. */
127519128808
db->openFlags = flags;
127520128809
rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
127521128810
if( rc!=SQLITE_OK ){
127522128811
if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
@@ -127674,17 +128963,19 @@
127674128963
){
127675128964
char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
127676128965
sqlite3_value *pVal;
127677128966
int rc;
127678128967
127679
- assert( zFilename );
127680
- assert( ppDb );
128968
+#ifdef SQLITE_ENABLE_API_ARMOR
128969
+ if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
128970
+#endif
127681128971
*ppDb = 0;
127682128972
#ifndef SQLITE_OMIT_AUTOINIT
127683128973
rc = sqlite3_initialize();
127684128974
if( rc ) return rc;
127685128975
#endif
128976
+ if( zFilename==0 ) zFilename = "\000\000";
127686128977
pVal = sqlite3ValueNew(0);
127687128978
sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
127688128979
zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
127689128980
if( zFilename8 ){
127690128981
rc = openDatabase(zFilename8, ppDb,
@@ -127710,17 +129001,11 @@
127710129001
const char *zName,
127711129002
int enc,
127712129003
void* pCtx,
127713129004
int(*xCompare)(void*,int,const void*,int,const void*)
127714129005
){
127715
- int rc;
127716
- sqlite3_mutex_enter(db->mutex);
127717
- assert( !db->mallocFailed );
127718
- rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0);
127719
- rc = sqlite3ApiExit(db, rc);
127720
- sqlite3_mutex_leave(db->mutex);
127721
- return rc;
129006
+ return sqlite3_create_collation_v2(db, zName, enc, pCtx, xCompare, 0);
127722129007
}
127723129008
127724129009
/*
127725129010
** Register a new collation sequence with the database handle db.
127726129011
*/
@@ -127731,10 +129016,14 @@
127731129016
void* pCtx,
127732129017
int(*xCompare)(void*,int,const void*,int,const void*),
127733129018
void(*xDel)(void*)
127734129019
){
127735129020
int rc;
129021
+
129022
+#ifdef SQLITE_ENABLE_API_ARMOR
129023
+ if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
129024
+#endif
127736129025
sqlite3_mutex_enter(db->mutex);
127737129026
assert( !db->mallocFailed );
127738129027
rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
127739129028
rc = sqlite3ApiExit(db, rc);
127740129029
sqlite3_mutex_leave(db->mutex);
@@ -127752,10 +129041,14 @@
127752129041
void* pCtx,
127753129042
int(*xCompare)(void*,int,const void*,int,const void*)
127754129043
){
127755129044
int rc = SQLITE_OK;
127756129045
char *zName8;
129046
+
129047
+#ifdef SQLITE_ENABLE_API_ARMOR
129048
+ if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
129049
+#endif
127757129050
sqlite3_mutex_enter(db->mutex);
127758129051
assert( !db->mallocFailed );
127759129052
zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
127760129053
if( zName8 ){
127761129054
rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
@@ -127774,10 +129067,13 @@
127774129067
SQLITE_API int sqlite3_collation_needed(
127775129068
sqlite3 *db,
127776129069
void *pCollNeededArg,
127777129070
void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
127778129071
){
129072
+#ifdef SQLITE_ENABLE_API_ARMOR
129073
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129074
+#endif
127779129075
sqlite3_mutex_enter(db->mutex);
127780129076
db->xCollNeeded = xCollNeeded;
127781129077
db->xCollNeeded16 = 0;
127782129078
db->pCollNeededArg = pCollNeededArg;
127783129079
sqlite3_mutex_leave(db->mutex);
@@ -127792,10 +129088,13 @@
127792129088
SQLITE_API int sqlite3_collation_needed16(
127793129089
sqlite3 *db,
127794129090
void *pCollNeededArg,
127795129091
void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
127796129092
){
129093
+#ifdef SQLITE_ENABLE_API_ARMOR
129094
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129095
+#endif
127797129096
sqlite3_mutex_enter(db->mutex);
127798129097
db->xCollNeeded = 0;
127799129098
db->xCollNeeded16 = xCollNeeded16;
127800129099
db->pCollNeededArg = pCollNeededArg;
127801129100
sqlite3_mutex_leave(db->mutex);
@@ -127818,10 +129117,16 @@
127818129117
** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
127819129118
** by default. Autocommit is disabled by a BEGIN statement and reenabled
127820129119
** by the next COMMIT or ROLLBACK.
127821129120
*/
127822129121
SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
129122
+#ifdef SQLITE_ENABLE_API_ARMOR
129123
+ if( !sqlite3SafetyCheckOk(db) ){
129124
+ (void)SQLITE_MISUSE_BKPT;
129125
+ return 0;
129126
+ }
129127
+#endif
127823129128
return db->autoCommit;
127824129129
}
127825129130
127826129131
/*
127827129132
** The following routines are substitutes for constants SQLITE_CORRUPT,
@@ -128000,10 +129305,13 @@
128000129305
128001129306
/*
128002129307
** Enable or disable the extended result codes.
128003129308
*/
128004129309
SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
129310
+#ifdef SQLITE_ENABLE_API_ARMOR
129311
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129312
+#endif
128005129313
sqlite3_mutex_enter(db->mutex);
128006129314
db->errMask = onoff ? 0xffffffff : 0xff;
128007129315
sqlite3_mutex_leave(db->mutex);
128008129316
return SQLITE_OK;
128009129317
}
@@ -128013,10 +129321,13 @@
128013129321
*/
128014129322
SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
128015129323
int rc = SQLITE_ERROR;
128016129324
Btree *pBtree;
128017129325
129326
+#ifdef SQLITE_ENABLE_API_ARMOR
129327
+ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129328
+#endif
128018129329
sqlite3_mutex_enter(db->mutex);
128019129330
pBtree = sqlite3DbNameToBtree(db, zDbName);
128020129331
if( pBtree ){
128021129332
Pager *pPager;
128022129333
sqlite3_file *fd;
@@ -128355,11 +129666,11 @@
128355129666
** query parameter we seek. This routine returns the value of the zParam
128356129667
** parameter if it exists. If the parameter does not exist, this routine
128357129668
** returns a NULL pointer.
128358129669
*/
128359129670
SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
128360
- if( zFilename==0 ) return 0;
129671
+ if( zFilename==0 || zParam==0 ) return 0;
128361129672
zFilename += sqlite3Strlen30(zFilename) + 1;
128362129673
while( zFilename[0] ){
128363129674
int x = strcmp(zFilename, zParam);
128364129675
zFilename += sqlite3Strlen30(zFilename) + 1;
128365129676
if( x==0 ) return zFilename;
@@ -128411,19 +129722,31 @@
128411129722
/*
128412129723
** Return the filename of the database associated with a database
128413129724
** connection.
128414129725
*/
128415129726
SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
129727
+#ifdef SQLITE_ENABLE_API_ARMOR
129728
+ if( !sqlite3SafetyCheckOk(db) ){
129729
+ (void)SQLITE_MISUSE_BKPT;
129730
+ return 0;
129731
+ }
129732
+#endif
128416129733
Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
128417129734
return pBt ? sqlite3BtreeGetFilename(pBt) : 0;
128418129735
}
128419129736
128420129737
/*
128421129738
** Return 1 if database is read-only or 0 if read/write. Return -1 if
128422129739
** no such database exists.
128423129740
*/
128424129741
SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){
129742
+#ifdef SQLITE_ENABLE_API_ARMOR
129743
+ if( !sqlite3SafetyCheckOk(db) ){
129744
+ (void)SQLITE_MISUSE_BKPT;
129745
+ return -1;
129746
+ }
129747
+#endif
128425129748
Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
128426129749
return pBt ? sqlite3BtreeIsReadonly(pBt) : -1;
128427129750
}
128428129751
128429129752
/************** End of main.c ************************************************/
128430129753
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.8.7.2. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -179,11 +179,11 @@
179
180
181 /*
182 ** These no-op macros are used in front of interfaces to mark those
183 ** interfaces as either deprecated or experimental. New applications
184 ** should not use deprecated interfaces - they are support for backwards
185 ** compatibility only. Application writers should be aware that
186 ** experimental interfaces are subject to change in point releases.
187 **
188 ** These macros used to resolve to various kinds of compiler magic that
189 ** would generate warning messages when they were used. But that
@@ -229,13 +229,13 @@
229 **
230 ** See also: [sqlite3_libversion()],
231 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
232 ** [sqlite_version()] and [sqlite_source_id()].
233 */
234 #define SQLITE_VERSION "3.8.7.2"
235 #define SQLITE_VERSION_NUMBER 3008007
236 #define SQLITE_SOURCE_ID "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
237
238 /*
239 ** CAPI3REF: Run-Time Library Version Numbers
240 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
241 **
@@ -1626,29 +1626,31 @@
1626 ** it is not possible to set the Serialized [threading mode] and
1627 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1628 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1629 **
1630 ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1631 ** <dd> ^(This option takes a single argument which is a pointer to an
1632 ** instance of the [sqlite3_mem_methods] structure. The argument specifies
 
1633 ** alternative low-level memory allocation routines to be used in place of
1634 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1635 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1636 ** before the [sqlite3_config()] call returns.</dd>
1637 **
1638 ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1639 ** <dd> ^(This option takes a single argument which is a pointer to an
1640 ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
 
1641 ** structure is filled with the currently defined memory allocation routines.)^
1642 ** This option can be used to overload the default memory allocation
1643 ** routines with a wrapper that simulations memory allocation failure or
1644 ** tracks memory usage, for example. </dd>
1645 **
1646 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1647 ** <dd> ^This option takes single argument of type int, interpreted as a
1648 ** boolean, which enables or disables the collection of memory allocation
1649 ** statistics. ^(When memory allocation statistics are disabled, the
1650 ** following SQLite interfaces become non-operational:
1651 ** <ul>
1652 ** <li> [sqlite3_memory_used()]
1653 ** <li> [sqlite3_memory_highwater()]
1654 ** <li> [sqlite3_soft_heap_limit64()]
@@ -1658,78 +1660,90 @@
1658 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1659 ** allocation statistics are disabled by default.
1660 ** </dd>
1661 **
1662 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1663 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1664 ** scratch memory. There are three arguments: A pointer an 8-byte
 
1665 ** aligned memory buffer from which the scratch allocations will be
1666 ** drawn, the size of each scratch allocation (sz),
1667 ** and the maximum number of scratch allocations (N). The sz
1668 ** argument must be a multiple of 16.
1669 ** The first argument must be a pointer to an 8-byte aligned buffer
1670 ** of at least sz*N bytes of memory.
1671 ** ^SQLite will use no more than two scratch buffers per thread. So
1672 ** N should be set to twice the expected maximum number of threads.
1673 ** ^SQLite will never require a scratch buffer that is more than 6
1674 ** times the database page size. ^If SQLite needs needs additional
1675 ** scratch memory beyond what is provided by this configuration option, then
1676 ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
 
 
 
 
 
 
1677 **
1678 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1679 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1680 ** the database page cache with the default page cache implementation.
 
1681 ** This configuration should not be used if an application-define page
1682 ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
1683 ** There are three arguments to this option: A pointer to 8-byte aligned
 
1684 ** memory, the size of each page buffer (sz), and the number of pages (N).
1685 ** The sz argument should be the size of the largest database page
1686 ** (a power of two between 512 and 32768) plus a little extra for each
1687 ** page header. ^The page header size is 20 to 40 bytes depending on
1688 ** the host architecture. ^It is harmless, apart from the wasted memory,
1689 ** to make sz a little too large. The first
1690 ** argument should point to an allocation of at least sz*N bytes of memory.
 
 
 
 
1691 ** ^SQLite will use the memory provided by the first argument to satisfy its
1692 ** memory needs for the first N pages that it adds to cache. ^If additional
1693 ** page cache memory is needed beyond what is provided by this option, then
1694 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1695 ** The pointer in the first argument must
1696 ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1697 ** will be undefined.</dd>
1698 **
1699 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1700 ** <dd> ^This option specifies a static memory buffer that SQLite will use
1701 ** for all of its dynamic memory allocation needs beyond those provided
1702 ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1703 ** There are three arguments: An 8-byte aligned pointer to the memory,
 
 
 
 
1704 ** the number of bytes in the memory buffer, and the minimum allocation size.
1705 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1706 ** to using its default memory allocator (the system malloc() implementation),
1707 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1708 ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1709 ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1710 ** allocator is engaged to handle all of SQLites memory allocation needs.
1711 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1712 ** boundary or subsequent behavior of SQLite will be undefined.
1713 ** The minimum allocation size is capped at 2**12. Reasonable values
1714 ** for the minimum allocation size are 2**5 through 2**8.</dd>
1715 **
1716 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1717 ** <dd> ^(This option takes a single argument which is a pointer to an
1718 ** instance of the [sqlite3_mutex_methods] structure. The argument specifies
1719 ** alternative low-level mutex routines to be used in place
1720 ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
1721 ** content of the [sqlite3_mutex_methods] structure before the call to
1722 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1723 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1724 ** the entire mutexing subsystem is omitted from the build and hence calls to
1725 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1726 ** return [SQLITE_ERROR].</dd>
1727 **
1728 ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1729 ** <dd> ^(This option takes a single argument which is a pointer to an
1730 ** instance of the [sqlite3_mutex_methods] structure. The
1731 ** [sqlite3_mutex_methods]
1732 ** structure is filled with the currently defined mutex routines.)^
1733 ** This option can be used to overload the default mutex allocation
1734 ** routines with a wrapper used to track mutex usage for performance
1735 ** profiling or testing, for example. ^If SQLite is compiled with
@@ -1737,28 +1751,28 @@
1737 ** the entire mutexing subsystem is omitted from the build and hence calls to
1738 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
1739 ** return [SQLITE_ERROR].</dd>
1740 **
1741 ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1742 ** <dd> ^(This option takes two arguments that determine the default
1743 ** memory allocation for the lookaside memory allocator on each
1744 ** [database connection]. The first argument is the
1745 ** size of each lookaside buffer slot and the second is the number of
1746 ** slots allocated to each database connection.)^ ^(This option sets the
1747 ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1748 ** verb to [sqlite3_db_config()] can be used to change the lookaside
1749 ** configuration on individual connections.)^ </dd>
1750 **
1751 ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1752 ** <dd> ^(This option takes a single argument which is a pointer to
1753 ** an [sqlite3_pcache_methods2] object. This object specifies the interface
1754 ** to a custom page cache implementation.)^ ^SQLite makes a copy of the
1755 ** object and uses it for page cache memory allocations.</dd>
1756 **
1757 ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1758 ** <dd> ^(This option takes a single argument which is a pointer to an
1759 ** [sqlite3_pcache_methods2] object. SQLite copies of the current
1760 ** page cache implementation into that object.)^ </dd>
1761 **
1762 ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
1763 ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
1764 ** global [error log].
@@ -1778,26 +1792,27 @@
1778 ** supplied by the application must not invoke any SQLite interface.
1779 ** In a multi-threaded application, the application-defined logger
1780 ** function must be threadsafe. </dd>
1781 **
1782 ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1783 ** <dd>^(This option takes a single argument of type int. If non-zero, then
1784 ** URI handling is globally enabled. If the parameter is zero, then URI handling
1785 ** is globally disabled.)^ ^If URI handling is globally enabled, all filenames
1786 ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1787 ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
1788 ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
1789 ** connection is opened. ^If it is globally disabled, filenames are
1790 ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
1791 ** database connection is opened. ^(By default, URI handling is globally
1792 ** disabled. The default value may be changed by compiling with the
1793 ** [SQLITE_USE_URI] symbol defined.)^
1794 **
1795 ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1796 ** <dd>^This option takes a single integer argument which is interpreted as
1797 ** a boolean in order to enable or disable the use of covering indices for
1798 ** full table scans in the query optimizer. ^The default setting is determined
 
1799 ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
1800 ** if that compile-time option is omitted.
1801 ** The ability to disable the use of covering indices for full table scans
1802 ** is because some incorrectly coded legacy applications might malfunction
1803 ** when the optimization is enabled. Providing the ability to
@@ -1833,23 +1848,32 @@
1833 ** that are the default mmap size limit (the default setting for
1834 ** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
1835 ** ^The default setting can be overridden by each database connection using
1836 ** either the [PRAGMA mmap_size] command, or by using the
1837 ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1838 ** cannot be changed at run-time. Nor may the maximum allowed mmap size
1839 ** exceed the compile-time maximum mmap size set by the
1840 ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
1841 ** ^If either argument to this option is negative, then that argument is
1842 ** changed to its compile-time default.
1843 **
1844 ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
1845 ** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1846 ** <dd>^This option is only available if SQLite is compiled for Windows
1847 ** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1848 ** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1849 ** that specifies the maximum size of the created heap.
1850 ** </dl>
 
 
 
 
 
 
 
 
 
1851 */
1852 #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
1853 #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
1854 #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
1855 #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1870,10 +1894,11 @@
1870 #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
1871 #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
1872 #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
1873 #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
1874 #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
 
1875
1876 /*
1877 ** CAPI3REF: Database Connection Configuration Options
1878 **
1879 ** These constants are the available integer configuration options that
@@ -1997,51 +2022,49 @@
1997 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
1998
1999 /*
2000 ** CAPI3REF: Count The Number Of Rows Modified
2001 **
2002 ** ^This function returns the number of database rows that were changed
2003 ** or inserted or deleted by the most recently completed SQL statement
2004 ** on the [database connection] specified by the first parameter.
2005 ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
2006 ** or [DELETE] statement are counted. Auxiliary changes caused by
2007 ** triggers or [foreign key actions] are not counted.)^ Use the
2008 ** [sqlite3_total_changes()] function to find the total number of changes
2009 ** including changes caused by triggers and foreign key actions.
2010 **
2011 ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
2012 ** are not counted. Only real table changes are counted.
2013 **
2014 ** ^(A "row change" is a change to a single row of a single table
2015 ** caused by an INSERT, DELETE, or UPDATE statement. Rows that
2016 ** are changed as side effects of [REPLACE] constraint resolution,
2017 ** rollback, ABORT processing, [DROP TABLE], or by any other
2018 ** mechanisms do not count as direct row changes.)^
2019 **
2020 ** A "trigger context" is a scope of execution that begins and
2021 ** ends with the script of a [CREATE TRIGGER | trigger].
2022 ** Most SQL statements are
2023 ** evaluated outside of any trigger. This is the "top level"
2024 ** trigger context. If a trigger fires from the top level, a
2025 ** new trigger context is entered for the duration of that one
2026 ** trigger. Subtriggers create subcontexts for their duration.
2027 **
2028 ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
2029 ** not create a new trigger context.
2030 **
2031 ** ^This function returns the number of direct row changes in the
2032 ** most recent INSERT, UPDATE, or DELETE statement within the same
2033 ** trigger context.
2034 **
2035 ** ^Thus, when called from the top level, this function returns the
2036 ** number of changes in the most recent INSERT, UPDATE, or DELETE
2037 ** that also occurred at the top level. ^(Within the body of a trigger,
2038 ** the sqlite3_changes() interface can be called to find the number of
2039 ** changes in the most recently completed INSERT, UPDATE, or DELETE
2040 ** statement within the body of the same trigger.
2041 ** However, the number returned does not include changes
2042 ** caused by subtriggers since those have their own context.)^
2043 **
2044 ** See also the [sqlite3_total_changes()] interface, the
2045 ** [count_changes pragma], and the [changes() SQL function].
2046 **
2047 ** If a separate thread makes changes on the same database connection
@@ -2051,24 +2074,21 @@
2051 SQLITE_API int sqlite3_changes(sqlite3*);
2052
2053 /*
2054 ** CAPI3REF: Total Number Of Rows Modified
2055 **
2056 ** ^This function returns the number of row changes caused by [INSERT],
2057 ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
2058 ** ^(The count returned by sqlite3_total_changes() includes all changes
2059 ** from all [CREATE TRIGGER | trigger] contexts and changes made by
2060 ** [foreign key actions]. However,
2061 ** the count does not include changes used to implement [REPLACE] constraints,
2062 ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
2063 ** count does not include rows of views that fire an [INSTEAD OF trigger],
2064 ** though if the INSTEAD OF trigger makes changes of its own, those changes
2065 ** are counted.)^
2066 ** ^The sqlite3_total_changes() function counts the changes as soon as
2067 ** the statement that makes them is completed (when the statement handle
2068 ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
2069 **
2070 ** See also the [sqlite3_changes()] interface, the
2071 ** [count_changes pragma], and the [total_changes() SQL function].
2072 **
2073 ** If a separate thread makes changes on the same database connection
2074 ** while [sqlite3_total_changes()] is running then the value
@@ -2542,17 +2562,18 @@
2542 ** already uses the largest possible [ROWID]. The PRNG is also used for
2543 ** the build-in random() and randomblob() SQL functions. This interface allows
2544 ** applications to access the same PRNG for other purposes.
2545 **
2546 ** ^A call to this routine stores N bytes of randomness into buffer P.
2547 ** ^If N is less than one, then P can be a NULL pointer.
2548 **
2549 ** ^If this routine has not been previously called or if the previous
2550 ** call had N less than one, then the PRNG is seeded using randomness
2551 ** obtained from the xRandomness method of the default [sqlite3_vfs] object.
2552 ** ^If the previous call to this routine had an N of 1 or more then
2553 ** the pseudo-randomness is generated
 
2554 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2555 ** method.
2556 */
2557 SQLITE_API void sqlite3_randomness(int N, void *P);
2558
@@ -4270,13 +4291,13 @@
4270 ** CAPI3REF: Text Encodings
4271 **
4272 ** These constant define integer codes that represent the various
4273 ** text encodings supported by SQLite.
4274 */
4275 #define SQLITE_UTF8 1
4276 #define SQLITE_UTF16LE 2
4277 #define SQLITE_UTF16BE 3
4278 #define SQLITE_UTF16 4 /* Use native byte order */
4279 #define SQLITE_ANY 5 /* Deprecated */
4280 #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
4281
4282 /*
@@ -5762,31 +5783,47 @@
5762 ** in other words, the same BLOB that would be selected by:
5763 **
5764 ** <pre>
5765 ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5766 ** </pre>)^
 
 
 
 
 
 
5767 **
5768 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5769 ** and write access. ^If it is zero, the BLOB is opened for read access.
5770 ** ^It is not possible to open a column that is part of an index or primary
5771 ** key for writing. ^If [foreign key constraints] are enabled, it is
5772 ** not possible to open a column that is part of a [child key] for writing.
5773 **
5774 ** ^Note that the database name is not the filename that contains
5775 ** the database but rather the symbolic name of the database that
5776 ** appears after the AS keyword when the database is connected using [ATTACH].
5777 ** ^For the main database file, the database name is "main".
5778 ** ^For TEMP tables, the database name is "temp".
5779 **
5780 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5781 ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5782 ** to be a null pointer.)^
5783 ** ^This function sets the [database connection] error code and message
5784 ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5785 ** functions. ^Note that the *ppBlob variable is always initialized in a
5786 ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5787 ** regardless of the success or failure of this routine.
 
 
 
 
 
 
 
 
 
 
5788 **
5789 ** ^(If the row that a BLOB handle points to is modified by an
5790 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5791 ** then the BLOB handle is marked as "expired".
5792 ** This is true if any column of the row is changed, even a column
@@ -5800,17 +5837,13 @@
5800 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5801 ** the opened blob. ^The size of a blob may not be changed by this
5802 ** interface. Use the [UPDATE] SQL command to change the size of a
5803 ** blob.
5804 **
5805 ** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID]
5806 ** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables.
5807 **
5808 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5809 ** and the built-in [zeroblob] SQL function can be used, if desired,
5810 ** to create an empty, zero-filled blob in which to read or write using
5811 ** this interface.
5812 **
5813 ** To avoid a resource leak, every open [BLOB handle] should eventually
5814 ** be released by a call to [sqlite3_blob_close()].
5815 */
5816 SQLITE_API int sqlite3_blob_open(
@@ -5848,28 +5881,26 @@
5848 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5849
5850 /*
5851 ** CAPI3REF: Close A BLOB Handle
5852 **
5853 ** ^Closes an open [BLOB handle].
5854 **
5855 ** ^Closing a BLOB shall cause the current transaction to commit
5856 ** if there are no other BLOBs, no pending prepared statements, and the
5857 ** database connection is in [autocommit mode].
5858 ** ^If any writes were made to the BLOB, they might be held in cache
5859 ** until the close operation if they will fit.
5860 **
5861 ** ^(Closing the BLOB often forces the changes
5862 ** out to disk and so if any I/O errors occur, they will likely occur
5863 ** at the time when the BLOB is closed. Any errors that occur during
5864 ** closing are reported as a non-zero return value.)^
5865 **
5866 ** ^(The BLOB is closed unconditionally. Even if this routine returns
5867 ** an error code, the BLOB is still closed.)^
5868 **
5869 ** ^Calling this routine with a null pointer (such as would be returned
5870 ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5871 */
5872 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5873
5874 /*
5875 ** CAPI3REF: Return The Size Of An Open BLOB
@@ -5915,36 +5946,39 @@
5915 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5916
5917 /*
5918 ** CAPI3REF: Write Data Into A BLOB Incrementally
5919 **
5920 ** ^This function is used to write data into an open [BLOB handle] from a
5921 ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5922 ** into the open BLOB, starting at offset iOffset.
 
 
 
 
 
 
5923 **
5924 ** ^If the [BLOB handle] passed as the first argument was not opened for
5925 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5926 ** this function returns [SQLITE_READONLY].
5927 **
5928 ** ^This function may only modify the contents of the BLOB; it is
5929 ** not possible to increase the size of a BLOB using this API.
5930 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5931 ** [SQLITE_ERROR] is returned and no data is written. ^If N is
5932 ** less than zero [SQLITE_ERROR] is returned and no data is written.
5933 ** The size of the BLOB (and hence the maximum value of N+iOffset)
5934 ** can be determined using the [sqlite3_blob_bytes()] interface.
5935 **
5936 ** ^An attempt to write to an expired [BLOB handle] fails with an
5937 ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
5938 ** before the [BLOB handle] expired are not rolled back by the
5939 ** expiration of the handle, though of course those changes might
5940 ** have been overwritten by the statement that expired the BLOB handle
5941 ** or by other independent statements.
5942 **
5943 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5944 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5945 **
5946 ** This routine only works on a [BLOB handle] which has been created
5947 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5948 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5949 ** to this routine results in undefined and probably undesirable behavior.
5950 **
@@ -5993,38 +6027,38 @@
5993 ** use by SQLite, code that links against SQLite is
5994 ** permitted to use any of these routines.
5995 **
5996 ** The SQLite source code contains multiple implementations
5997 ** of these mutex routines. An appropriate implementation
5998 ** is selected automatically at compile-time. ^(The following
5999 ** implementations are available in the SQLite core:
6000 **
6001 ** <ul>
6002 ** <li> SQLITE_MUTEX_PTHREADS
6003 ** <li> SQLITE_MUTEX_W32
6004 ** <li> SQLITE_MUTEX_NOOP
6005 ** </ul>)^
6006 **
6007 ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
6008 ** that does no real locking and is appropriate for use in
6009 ** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and
6010 ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
6011 ** and Windows.
6012 **
6013 ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
6014 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
6015 ** implementation is included with the library. In this case the
6016 ** application must supply a custom mutex implementation using the
6017 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
6018 ** before calling sqlite3_initialize() or any other public sqlite3_
6019 ** function that calls sqlite3_initialize().)^
6020 **
6021 ** ^The sqlite3_mutex_alloc() routine allocates a new
6022 ** mutex and returns a pointer to it. ^If it returns NULL
6023 ** that means that a mutex could not be allocated. ^SQLite
6024 ** will unwind its stack and return an error. ^(The argument
6025 ** to sqlite3_mutex_alloc() is one of these integer constants:
6026 **
6027 ** <ul>
6028 ** <li> SQLITE_MUTEX_FAST
6029 ** <li> SQLITE_MUTEX_RECURSIVE
6030 ** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -6033,68 +6067,64 @@
6033 ** <li> SQLITE_MUTEX_STATIC_PRNG
6034 ** <li> SQLITE_MUTEX_STATIC_LRU
6035 ** <li> SQLITE_MUTEX_STATIC_PMEM
6036 ** <li> SQLITE_MUTEX_STATIC_APP1
6037 ** <li> SQLITE_MUTEX_STATIC_APP2
6038 ** </ul>)^
 
6039 **
6040 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
6041 ** cause sqlite3_mutex_alloc() to create
6042 ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
6043 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
6044 ** The mutex implementation does not need to make a distinction
6045 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
6046 ** not want to. ^SQLite will only request a recursive mutex in
6047 ** cases where it really needs one. ^If a faster non-recursive mutex
6048 ** implementation is available on the host platform, the mutex subsystem
6049 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
6050 **
6051 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
6052 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
6053 ** a pointer to a static preexisting mutex. ^Six static mutexes are
6054 ** used by the current version of SQLite. Future versions of SQLite
6055 ** may add additional static mutexes. Static mutexes are for internal
6056 ** use by SQLite only. Applications that use SQLite mutexes should
6057 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
6058 ** SQLITE_MUTEX_RECURSIVE.
6059 **
6060 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
6061 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
6062 ** returns a different mutex on every call. ^But for the static
6063 ** mutex types, the same mutex is returned on every call that has
6064 ** the same type number.
6065 **
6066 ** ^The sqlite3_mutex_free() routine deallocates a previously
6067 ** allocated dynamic mutex. ^SQLite is careful to deallocate every
6068 ** dynamic mutex that it allocates. The dynamic mutexes must not be in
6069 ** use when they are deallocated. Attempting to deallocate a static
6070 ** mutex results in undefined behavior. ^SQLite never deallocates
6071 ** a static mutex.
6072 **
6073 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
6074 ** to enter a mutex. ^If another thread is already within the mutex,
6075 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
6076 ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
6077 ** upon successful entry. ^(Mutexes created using
6078 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
6079 ** In such cases the,
6080 ** mutex must be exited an equal number of times before another thread
6081 ** can enter.)^ ^(If the same thread tries to enter any other
6082 ** kind of mutex more than once, the behavior is undefined.
6083 ** SQLite will never exhibit
6084 ** such behavior in its own use of mutexes.)^
6085 **
6086 ** ^(Some systems (for example, Windows 95) do not support the operation
6087 ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
6088 ** will always return SQLITE_BUSY. The SQLite core only ever uses
6089 ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
 
6090 **
6091 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
6092 ** previously entered by the same thread. ^(The behavior
6093 ** is undefined if the mutex is not currently entered by the
6094 ** calling thread or is not currently allocated. SQLite will
6095 ** never do either.)^
6096 **
6097 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
6098 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
6099 ** behave as no-ops.
6100 **
@@ -6111,13 +6141,13 @@
6111 **
6112 ** An instance of this structure defines the low-level routines
6113 ** used to allocate and use mutexes.
6114 **
6115 ** Usually, the default mutex implementations provided by SQLite are
6116 ** sufficient, however the user has the option of substituting a custom
6117 ** implementation for specialized deployments or systems for which SQLite
6118 ** does not provide a suitable implementation. In this case, the user
6119 ** creates and populates an instance of this structure to pass
6120 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
6121 ** Additionally, an instance of this structure can be used as an
6122 ** output variable when querying the system for the current mutex
6123 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6154,17 +6184,17 @@
6154 ** by this structure are not required to handle this case, the results
6155 ** of passing a NULL pointer instead of a valid mutex handle are undefined
6156 ** (i.e. it is acceptable to provide an implementation that segfaults if
6157 ** it is passed a NULL pointer).
6158 **
6159 ** The xMutexInit() method must be threadsafe. ^It must be harmless to
6160 ** invoke xMutexInit() multiple times within the same process and without
6161 ** intervening calls to xMutexEnd(). Second and subsequent calls to
6162 ** xMutexInit() must be no-ops.
6163 **
6164 ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6165 ** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory
6166 ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
6167 ** memory allocation for a fast or recursive mutex.
6168 **
6169 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
6170 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6186,33 +6216,33 @@
6186
6187 /*
6188 ** CAPI3REF: Mutex Verification Routines
6189 **
6190 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6191 ** are intended for use inside assert() statements. ^The SQLite core
6192 ** never uses these routines except inside an assert() and applications
6193 ** are advised to follow the lead of the core. ^The SQLite core only
6194 ** provides implementations for these routines when it is compiled
6195 ** with the SQLITE_DEBUG flag. ^External mutex implementations
6196 ** are only required to provide these routines if SQLITE_DEBUG is
6197 ** defined and if NDEBUG is not defined.
6198 **
6199 ** ^These routines should return true if the mutex in their argument
6200 ** is held or not held, respectively, by the calling thread.
6201 **
6202 ** ^The implementation is not required to provide versions of these
6203 ** routines that actually work. If the implementation does not provide working
6204 ** versions of these routines, it should at least provide stubs that always
6205 ** return true so that one does not get spurious assertion failures.
6206 **
6207 ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6208 ** the routine should return 1. This seems counter-intuitive since
6209 ** clearly the mutex cannot be held if it does not exist. But
6210 ** the reason the mutex does not exist is because the build is not
6211 ** using mutexes. And we do not want the assert() containing the
6212 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
6213 ** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6214 ** interface should also return 1 when given a NULL pointer.
6215 */
6216 #ifndef NDEBUG
6217 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
6218 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6940,10 +6970,14 @@
6940 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6941 ** and database name of the source database, respectively.
6942 ** ^The source and destination [database connections] (parameters S and D)
6943 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6944 ** an error.
 
 
 
 
6945 **
6946 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6947 ** returned and an error code and error message are stored in the
6948 ** destination [database connection] D.
6949 ** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7533,10 +7567,102 @@
7533 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
7534 #define SQLITE_FAIL 3
7535 /* #define SQLITE_ABORT 4 // Also an error code */
7536 #define SQLITE_REPLACE 5
7537
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7538
7539
7540 /*
7541 ** Undo the hack that converts floating point types to integer for
7542 ** builds on processors without floating point support.
@@ -7978,14 +8104,13 @@
7978 #ifndef SQLITE_POWERSAFE_OVERWRITE
7979 # define SQLITE_POWERSAFE_OVERWRITE 1
7980 #endif
7981
7982 /*
7983 ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
7984 ** It determines whether or not the features related to
7985 ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
7986 ** be overridden at runtime using the sqlite3_config() API.
7987 */
7988 #if !defined(SQLITE_DEFAULT_MEMSTATUS)
7989 # define SQLITE_DEFAULT_MEMSTATUS 1
7990 #endif
7991
@@ -8611,11 +8736,11 @@
8611 ** Estimated quantities used for query planning are stored as 16-bit
8612 ** logarithms. For quantity X, the value stored is 10*log2(X). This
8613 ** gives a possible range of values of approximately 1.0e986 to 1e-986.
8614 ** But the allowed values are "grainy". Not every value is representable.
8615 ** For example, quantities 16 and 17 are both represented by a LogEst
8616 ** of 40. However, since LogEst quantaties are suppose to be estimates,
8617 ** not exact values, this imprecision is not a problem.
8618 **
8619 ** "LogEst" is short for "Logarithmic Estimate".
8620 **
8621 ** Examples:
@@ -9124,10 +9249,11 @@
9124 SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *);
9125 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
9126 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
9127 SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *, unsigned int mask);
9128 SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *pBt);
 
9129
9130 #ifndef NDEBUG
9131 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
9132 #endif
9133
@@ -9666,10 +9792,16 @@
9666 # define VdbeCoverageAlwaysTaken(v)
9667 # define VdbeCoverageNeverTaken(v)
9668 # define VDBE_OFFSET_LINENO(x) 0
9669 #endif
9670
 
 
 
 
 
 
9671 #endif
9672
9673 /************** End of vdbe.h ************************************************/
9674 /************** Continuing where we left off in sqliteInt.h ******************/
9675 /************** Include pager.h in the middle of sqliteInt.h *****************/
@@ -9862,10 +9994,12 @@
9862 SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *);
9863
9864 /* Functions used to truncate the database file. */
9865 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
9866
 
 
9867 #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
9868 SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
9869 #endif
9870
9871 /* Functions to support testing and debugging. */
@@ -10049,10 +10183,14 @@
10049 SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
10050 #endif
10051
10052 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
10053
 
 
 
 
10054 #endif /* _PCACHE_H_ */
10055
10056 /************** End of pcache.h **********************************************/
10057 /************** Continuing where we left off in sqliteInt.h ******************/
10058
@@ -10735,11 +10873,11 @@
10735 #define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */
10736 #define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */
10737 #define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */
10738 #define SQLITE_Transitive 0x0200 /* Transitive constraints */
10739 #define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */
10740 #define SQLITE_Stat3 0x0800 /* Use the SQLITE_STAT3 table */
10741 #define SQLITE_AllOpts 0xffff /* All optimizations */
10742
10743 /*
10744 ** Macros for testing whether or not optimizations are enabled or disabled.
10745 */
@@ -11317,16 +11455,18 @@
11317 unsigned idxType:2; /* 1==UNIQUE, 2==PRIMARY KEY, 0==CREATE INDEX */
11318 unsigned bUnordered:1; /* Use this index for == or IN queries only */
11319 unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */
11320 unsigned isResized:1; /* True if resizeIndexObject() has been called */
11321 unsigned isCovering:1; /* True if this is a covering index */
 
11322 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
11323 int nSample; /* Number of elements in aSample[] */
11324 int nSampleCol; /* Size of IndexSample.anEq[] and so on */
11325 tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */
11326 IndexSample *aSample; /* Samples of the left-most key */
11327 tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this table */
 
11328 #endif
11329 };
11330
11331 /*
11332 ** Allowed values for Index.idxType
@@ -11520,11 +11660,11 @@
11520 int nHeight; /* Height of the tree headed by this node */
11521 #endif
11522 int iTable; /* TK_COLUMN: cursor number of table holding column
11523 ** TK_REGISTER: register number
11524 ** TK_TRIGGER: 1 -> new, 0 -> old
11525 ** EP_Unlikely: 1000 times likelihood */
11526 ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid.
11527 ** TK_VARIABLE: variable number (always >= 1). */
11528 i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
11529 i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
11530 u8 op2; /* TK_REGISTER: original value of Expr.op
@@ -12412,13 +12552,15 @@
12412 int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */
12413 int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */
12414 void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
12415 Parse *pParse; /* Parser context. */
12416 int walkerDepth; /* Number of subqueries */
 
12417 union { /* Extra data for callback */
12418 NameContext *pNC; /* Naming context */
12419 int i; /* Integer value */
 
12420 SrcList *pSrcList; /* FROM clause */
12421 struct SrcCount *pSrcCount; /* Counting column references */
12422 } u;
12423 };
12424
@@ -12815,10 +12957,11 @@
12815 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
12816 SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
12817 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
12818 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
12819 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
 
12820 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
12821 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
12822 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
12823 SQLITE_PRIVATE int sqlite3IsRowid(const char*);
12824 SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8);
@@ -13472,15 +13615,23 @@
13472 ** compatibility for legacy applications, the URI filename capability is
13473 ** disabled by default.
13474 **
13475 ** EVIDENCE-OF: R-38799-08373 URI filenames can be enabled or disabled
13476 ** using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options.
 
 
 
 
13477 */
13478 #ifndef SQLITE_USE_URI
13479 # define SQLITE_USE_URI 0
13480 #endif
13481
 
 
 
 
13482 #ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
13483 # define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
13484 #endif
13485
13486 /*
@@ -13566,12 +13717,12 @@
13566 ** than 1 GiB. The sqlite3_test_control() interface can be used to
13567 ** move the pending byte.
13568 **
13569 ** IMPORTANT: Changing the pending byte to any value other than
13570 ** 0x40000000 results in an incompatible database file format!
13571 ** Changing the pending byte during operating results in undefined
13572 ** and dileterious behavior.
13573 */
13574 #ifndef SQLITE_OMIT_WSD
13575 SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
13576 #endif
13577
@@ -13646,10 +13797,13 @@
13646 #ifdef SQLITE_DISABLE_DIRSYNC
13647 "DISABLE_DIRSYNC",
13648 #endif
13649 #ifdef SQLITE_DISABLE_LFS
13650 "DISABLE_LFS",
 
 
 
13651 #endif
13652 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
13653 "ENABLE_ATOMIC_WRITE",
13654 #endif
13655 #ifdef SQLITE_ENABLE_CEROD
@@ -13972,10 +14126,17 @@
13972 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
13973 ** is not required for a match.
13974 */
13975 SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
13976 int i, n;
 
 
 
 
 
 
 
13977 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
13978 n = sqlite3Strlen30(zOptName);
13979
13980 /* Since ArraySize(azCompileOpt) is normally in single digits, a
13981 ** linear search is adequate. No need for a binary search. */
@@ -14153,10 +14314,11 @@
14153 typedef struct VdbeFrame VdbeFrame;
14154 struct VdbeFrame {
14155 Vdbe *v; /* VM this frame belongs to */
14156 VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
14157 Op *aOp; /* Program instructions for parent frame */
 
14158 Mem *aMem; /* Array of memory cells for parent frame */
14159 u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
14160 VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
14161 void *token; /* Copy of SubProgram.token */
14162 i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
@@ -14165,11 +14327,12 @@
14165 int nOp; /* Size of aOp array */
14166 int nMem; /* Number of entries in aMem */
14167 int nOnceFlag; /* Number of entries in aOnceFlag */
14168 int nChildMem; /* Number of memory cells for child frame */
14169 int nChildCsr; /* Number of cursors for child frame */
14170 int nChange; /* Statement changes (Vdbe.nChanges) */
 
14171 };
14172
14173 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
14174
14175 /*
@@ -14316,10 +14479,20 @@
14316 /* A bitfield type for use inside of structures. Always follow with :N where
14317 ** N is the number of bits.
14318 */
14319 typedef unsigned bft; /* Bit Field Type */
14320
 
 
 
 
 
 
 
 
 
 
14321 /*
14322 ** An instance of the virtual machine. This structure contains the complete
14323 ** state of the virtual machine.
14324 **
14325 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
@@ -14388,10 +14561,15 @@
14388 u32 expmask; /* Binding to these vars invalidates VM */
14389 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
14390 int nOnceFlag; /* Size of array aOnceFlag[] */
14391 u8 *aOnceFlag; /* Flags for OP_Once */
14392 AuxData *pAuxData; /* Linked list of auxdata allocations */
 
 
 
 
 
14393 };
14394
14395 /*
14396 ** The following are allowed values for Vdbe.magic
14397 */
@@ -14577,10 +14755,13 @@
14577 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
14578 wsdStatInit;
14579 if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
14580 return SQLITE_MISUSE_BKPT;
14581 }
 
 
 
14582 *pCurrent = wsdStat.nowValue[op];
14583 *pHighwater = wsdStat.mxValue[op];
14584 if( resetFlag ){
14585 wsdStat.mxValue[op] = wsdStat.nowValue[op];
14586 }
@@ -14596,10 +14777,15 @@
14596 int *pCurrent, /* Write current value here */
14597 int *pHighwater, /* Write high-water mark here */
14598 int resetFlag /* Reset high-water mark if true */
14599 ){
14600 int rc = SQLITE_OK; /* Return code */
 
 
 
 
 
14601 sqlite3_mutex_enter(db->mutex);
14602 switch( op ){
14603 case SQLITE_DBSTATUS_LOOKASIDE_USED: {
14604 *pCurrent = db->lookaside.nOut;
14605 *pHighwater = db->lookaside.mxOut;
@@ -14774,11 +14960,11 @@
14774 **
14775 ** There is only one exported symbol in this file - the function
14776 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
14777 ** All other code has file scope.
14778 **
14779 ** SQLite processes all times and dates as Julian Day numbers. The
14780 ** dates and times are stored as the number of days since noon
14781 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
14782 ** calendar system.
14783 **
14784 ** 1970-01-01 00:00:00 is JD 2440587.5
@@ -14789,11 +14975,11 @@
14789 ** be represented, even though julian day numbers allow a much wider
14790 ** range of dates.
14791 **
14792 ** The Gregorian calendar system is used for all dates and times,
14793 ** even those that predate the Gregorian calendar. Historians usually
14794 ** use the Julian calendar for dates prior to 1582-10-15 and for some
14795 ** dates afterwards, depending on locale. Beware of this difference.
14796 **
14797 ** The conversion algorithms are implemented based on descriptions
14798 ** in the following text:
14799 **
@@ -15061,11 +15247,11 @@
15061 return 1;
15062 }
15063 }
15064
15065 /*
15066 ** Attempt to parse the given string into a Julian Day Number. Return
15067 ** the number of errors.
15068 **
15069 ** The following are acceptable forms for the input string:
15070 **
15071 ** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
@@ -15632,11 +15818,11 @@
15632 **
15633 ** %d day of month
15634 ** %f ** fractional seconds SS.SSS
15635 ** %H hour 00-24
15636 ** %j day of year 000-366
15637 ** %J ** Julian day number
15638 ** %m month 01-12
15639 ** %M minute 00-59
15640 ** %s seconds since 1970-01-01
15641 ** %S seconds 00-59
15642 ** %w day of week 0-6 sunday==0
@@ -16257,10 +16443,14 @@
16257 MUTEX_LOGIC(sqlite3_mutex *mutex;)
16258 #ifndef SQLITE_OMIT_AUTOINIT
16259 int rc = sqlite3_initialize();
16260 if( rc ) return rc;
16261 #endif
 
 
 
 
16262 MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
16263 sqlite3_mutex_enter(mutex);
16264 vfsUnlink(pVfs);
16265 if( makeDflt || vfsList==0 ){
16266 pVfs->pNext = vfsList;
@@ -18614,10 +18804,11 @@
18614 ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
18615 */
18616 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
18617 #ifndef SQLITE_OMIT_AUTOINIT
18618 if( id<=SQLITE_MUTEX_RECURSIVE && sqlite3_initialize() ) return 0;
 
18619 #endif
18620 return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
18621 }
18622
18623 SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
@@ -19070,12 +19261,16 @@
19070 pthread_mutex_init(&p->mutex, 0);
19071 }
19072 break;
19073 }
19074 default: {
19075 assert( iType-2 >= 0 );
19076 assert( iType-2 < ArraySize(staticMutexes) );
 
 
 
 
19077 p = &staticMutexes[iType-2];
19078 #if SQLITE_MUTEX_NREF
19079 p->id = iType;
19080 #endif
19081 break;
@@ -20293,15 +20488,16 @@
20293 }
20294 assert( sqlite3_mutex_notheld(mem0.mutex) );
20295
20296
20297 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
20298 /* Verify that no more than two scratch allocations per thread
20299 ** are outstanding at one time. (This is only checked in the
20300 ** single-threaded case since checking in the multi-threaded case
20301 ** would be much more complicated.) */
20302 assert( scratchAllocOut<=1 );
 
20303 if( p ) scratchAllocOut++;
20304 #endif
20305
20306 return p;
20307 }
@@ -20956,10 +21152,17 @@
20956 etByte flag_rtz; /* True if trailing zeros should be removed */
20957 #endif
20958 PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */
20959 char buf[etBUFSIZE]; /* Conversion buffer */
20960
 
 
 
 
 
 
 
20961 bufpt = 0;
20962 if( bFlags ){
20963 if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){
20964 pArgList = va_arg(ap, PrintfArguments*);
20965 }
@@ -21496,10 +21699,15 @@
21496 return N;
21497 }else{
21498 char *zOld = (p->zText==p->zBase ? 0 : p->zText);
21499 i64 szNew = p->nChar;
21500 szNew += N + 1;
 
 
 
 
 
21501 if( szNew > p->mxAlloc ){
21502 sqlite3StrAccumReset(p);
21503 setStrAccumError(p, STRACCUM_TOOBIG);
21504 return 0;
21505 }else{
@@ -21512,10 +21720,11 @@
21512 }
21513 if( zNew ){
21514 assert( p->zText!=0 || p->nChar==0 );
21515 if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar);
21516 p->zText = zNew;
 
21517 }else{
21518 sqlite3StrAccumReset(p);
21519 setStrAccumError(p, STRACCUM_NOMEM);
21520 return 0;
21521 }
@@ -21681,10 +21890,17 @@
21681 */
21682 SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
21683 char *z;
21684 char zBase[SQLITE_PRINT_BUF_SIZE];
21685 StrAccum acc;
 
 
 
 
 
 
 
21686 #ifndef SQLITE_OMIT_AUTOINIT
21687 if( sqlite3_initialize() ) return 0;
21688 #endif
21689 sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
21690 acc.useMalloc = 2;
@@ -21723,10 +21939,17 @@
21723 ** sqlite3_vsnprintf() is the varargs version.
21724 */
21725 SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
21726 StrAccum acc;
21727 if( n<=0 ) return zBuf;
 
 
 
 
 
 
 
21728 sqlite3StrAccumInit(&acc, zBuf, n, 0);
21729 acc.useMalloc = 0;
21730 sqlite3VXPrintf(&acc, 0, zFormat, ap);
21731 return sqlite3StrAccumFinish(&acc);
21732 }
@@ -21914,15 +22137,23 @@
21914 #else
21915 # define wsdPrng sqlite3Prng
21916 #endif
21917
21918 #if SQLITE_THREADSAFE
21919 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
 
 
 
 
 
 
 
 
 
 
21920 sqlite3_mutex_enter(mutex);
21921 #endif
21922
21923 if( N<=0 ){
21924 wsdPrng.isInit = 0;
21925 sqlite3_mutex_leave(mutex);
21926 return;
21927 }
21928
@@ -23040,17 +23271,27 @@
23040 ** case-independent fashion, using the same definition of "case
23041 ** independence" that SQLite uses internally when comparing identifiers.
23042 */
23043 SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){
23044 register unsigned char *a, *b;
 
 
 
 
 
23045 a = (unsigned char *)zLeft;
23046 b = (unsigned char *)zRight;
23047 while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
23048 return UpperToLower[*a] - UpperToLower[*b];
23049 }
23050 SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
23051 register unsigned char *a, *b;
 
 
 
 
 
23052 a = (unsigned char *)zLeft;
23053 b = (unsigned char *)zRight;
23054 while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
23055 return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
23056 }
@@ -32579,10 +32820,15 @@
32579 #if !SQLITE_OS_WINNT && !defined(SQLITE_OMIT_WAL)
32580 # error "WAL mode requires support from the Windows NT kernel, compile\
32581 with SQLITE_OMIT_WAL."
32582 #endif
32583
 
 
 
 
 
32584 /*
32585 ** Are most of the Win32 ANSI APIs available (i.e. with certain exceptions
32586 ** based on the sub-platform)?
32587 */
32588 #if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && !defined(SQLITE_WIN32_NO_ANSI)
@@ -32708,14 +32954,15 @@
32708 # define winGetDirSep() '\\'
32709 #endif
32710
32711 /*
32712 ** Do we need to manually define the Win32 file mapping APIs for use with WAL
32713 ** mode (e.g. these APIs are available in the Windows CE SDK; however, they
32714 ** are not present in the header file)?
32715 */
32716 #if SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL)
 
32717 /*
32718 ** Two of the file mapping APIs are different under WinRT. Figure out which
32719 ** set we need.
32720 */
32721 #if SQLITE_OS_WINRT
@@ -32739,11 +32986,11 @@
32739
32740 /*
32741 ** This file mapping API is common to both Win32 and WinRT.
32742 */
32743 WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID);
32744 #endif /* SQLITE_WIN32_FILEMAPPING_API && !defined(SQLITE_OMIT_WAL) */
32745
32746 /*
32747 ** Some Microsoft compilers lack this definition.
32748 */
32749 #ifndef INVALID_FILE_ATTRIBUTES
@@ -33032,21 +33279,21 @@
33032
33033 #define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \
33034 LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent)
33035
33036 #if (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_ANSI) && \
33037 !defined(SQLITE_OMIT_WAL))
33038 { "CreateFileMappingA", (SYSCALL)CreateFileMappingA, 0 },
33039 #else
33040 { "CreateFileMappingA", (SYSCALL)0, 0 },
33041 #endif
33042
33043 #define osCreateFileMappingA ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
33044 DWORD,DWORD,DWORD,LPCSTR))aSyscall[6].pCurrent)
33045
33046 #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \
33047 !defined(SQLITE_OMIT_WAL))
33048 { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 },
33049 #else
33050 { "CreateFileMappingW", (SYSCALL)0, 0 },
33051 #endif
33052
@@ -33382,11 +33629,12 @@
33382 #ifndef osLockFileEx
33383 #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \
33384 LPOVERLAPPED))aSyscall[48].pCurrent)
33385 #endif
33386
33387 #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL))
 
33388 { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 },
33389 #else
33390 { "MapViewOfFile", (SYSCALL)0, 0 },
33391 #endif
33392
@@ -33452,11 +33700,11 @@
33452 #endif
33453
33454 #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
33455 LPOVERLAPPED))aSyscall[58].pCurrent)
33456
33457 #if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL)
33458 { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 },
33459 #else
33460 { "UnmapViewOfFile", (SYSCALL)0, 0 },
33461 #endif
33462
@@ -33515,11 +33763,11 @@
33515 #endif
33516
33517 #define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \
33518 FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent)
33519
33520 #if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)
33521 { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 },
33522 #else
33523 { "MapViewOfFileFromApp", (SYSCALL)0, 0 },
33524 #endif
33525
@@ -33579,11 +33827,11 @@
33579
33580 { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 },
33581
33582 #define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent)
33583
33584 #if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_WAL)
33585 { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 },
33586 #else
33587 { "CreateFileMappingFromApp", (SYSCALL)0, 0 },
33588 #endif
33589
@@ -39155,10 +39403,17 @@
39155 */
39156 SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
39157 assert( pCache->pCache!=0 );
39158 sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
39159 }
 
 
 
 
 
 
 
39160
39161 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
39162 /*
39163 ** For all dirty pages currently in the cache, invoke the specified
39164 ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
@@ -40154,10 +40409,15 @@
40154 pcache1Shrink /* xShrink */
40155 };
40156 sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods);
40157 }
40158
 
 
 
 
 
40159 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
40160 /*
40161 ** This function is called to free superfluous dynamically allocated memory
40162 ** held by the pager system. Memory in use by any SQLite pager allocated
40163 ** by the current thread may be sqlite3_free()ed.
@@ -43763,11 +44023,11 @@
43763 ** should be page numbers which are never 0xffffffff. So filling
43764 ** pPager->dbFileVers[] with all 0xff bytes should suffice.
43765 **
43766 ** For an encrypted database, the situation is more complex: bytes
43767 ** 24..39 of the database are white noise. But the probability of
43768 ** white noising equaling 16 bytes of 0xff is vanishingly small so
43769 ** we should still be ok.
43770 */
43771 memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
43772 }else{
43773 u8 *dbFileVers = &((u8*)pPg->pData)[24];
@@ -47710,10 +47970,22 @@
47710 }
47711
47712 return SQLITE_OK;
47713 }
47714 #endif
 
 
 
 
 
 
 
 
 
 
 
 
47715
47716 /*
47717 ** Return a pointer to the data for the specified page.
47718 */
47719 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
@@ -48108,10 +48380,11 @@
48108 SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
48109 assert( pPager->eState>=PAGER_READER );
48110 return sqlite3WalFramesize(pPager->pWal);
48111 }
48112 #endif
 
48113
48114 #endif /* SQLITE_OMIT_DISKIO */
48115
48116 /************** End of pager.c ***********************************************/
48117 /************** Begin file wal.c *********************************************/
@@ -49618,11 +49891,11 @@
49618
49619 /*
49620 ** Free an iterator allocated by walIteratorInit().
49621 */
49622 static void walIteratorFree(WalIterator *p){
49623 sqlite3ScratchFree(p);
49624 }
49625
49626 /*
49627 ** Construct a WalInterator object that can be used to loop over all
49628 ** pages in the WAL in ascending order. The caller must hold the checkpoint
@@ -49653,21 +49926,21 @@
49653 /* Allocate space for the WalIterator object. */
49654 nSegment = walFramePage(iLast) + 1;
49655 nByte = sizeof(WalIterator)
49656 + (nSegment-1)*sizeof(struct WalSegment)
49657 + iLast*sizeof(ht_slot);
49658 p = (WalIterator *)sqlite3ScratchMalloc(nByte);
49659 if( !p ){
49660 return SQLITE_NOMEM;
49661 }
49662 memset(p, 0, nByte);
49663 p->nSegment = nSegment;
49664
49665 /* Allocate temporary space used by the merge-sort routine. This block
49666 ** of memory will be freed before this function returns.
49667 */
49668 aTmp = (ht_slot *)sqlite3ScratchMalloc(
49669 sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
49670 );
49671 if( !aTmp ){
49672 rc = SQLITE_NOMEM;
49673 }
@@ -49700,11 +49973,11 @@
49700 p->aSegment[i].nEntry = nEntry;
49701 p->aSegment[i].aIndex = aIndex;
49702 p->aSegment[i].aPgno = (u32 *)aPgno;
49703 }
49704 }
49705 sqlite3ScratchFree(aTmp);
49706
49707 if( rc!=SQLITE_OK ){
49708 walIteratorFree(p);
49709 }
49710 *pp = p;
@@ -53331,10 +53604,15 @@
53331 /*
53332 ** Defragment the page given. All Cells are moved to the
53333 ** end of the page and all free space is collected into one
53334 ** big FreeBlk that occurs in between the header and cell
53335 ** pointer array and the cell content area.
 
 
 
 
 
53336 */
53337 static int defragmentPage(MemPage *pPage){
53338 int i; /* Loop counter */
53339 int pc; /* Address of the i-th cell */
53340 int hdr; /* Offset to the page header */
@@ -53343,28 +53621,27 @@
53343 int cellOffset; /* Offset to the cell pointer array */
53344 int cbrk; /* Offset to the cell content area */
53345 int nCell; /* Number of cells on the page */
53346 unsigned char *data; /* The page data */
53347 unsigned char *temp; /* Temp area for cell content */
 
53348 int iCellFirst; /* First allowable cell index */
53349 int iCellLast; /* Last possible cell index */
53350
53351
53352 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53353 assert( pPage->pBt!=0 );
53354 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
53355 assert( pPage->nOverflow==0 );
53356 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53357 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
53358 data = pPage->aData;
53359 hdr = pPage->hdrOffset;
53360 cellOffset = pPage->cellOffset;
53361 nCell = pPage->nCell;
53362 assert( nCell==get2byte(&data[hdr+3]) );
53363 usableSize = pPage->pBt->usableSize;
53364 cbrk = get2byte(&data[hdr+5]);
53365 memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
53366 cbrk = usableSize;
53367 iCellFirst = cellOffset + 2*nCell;
53368 iCellLast = usableSize - 4;
53369 for(i=0; i<nCell; i++){
53370 u8 *pAddr; /* The i-th cell pointer */
@@ -53379,11 +53656,11 @@
53379 if( pc<iCellFirst || pc>iCellLast ){
53380 return SQLITE_CORRUPT_BKPT;
53381 }
53382 #endif
53383 assert( pc>=iCellFirst && pc<=iCellLast );
53384 size = cellSizePtr(pPage, &temp[pc]);
53385 cbrk -= size;
53386 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
53387 if( cbrk<iCellFirst ){
53388 return SQLITE_CORRUPT_BKPT;
53389 }
@@ -53393,12 +53670,20 @@
53393 }
53394 #endif
53395 assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
53396 testcase( cbrk+size==usableSize );
53397 testcase( pc+size==usableSize );
53398 memcpy(&data[cbrk], &temp[pc], size);
53399 put2byte(pAddr, cbrk);
 
 
 
 
 
 
 
 
 
53400 }
53401 assert( cbrk>=iCellFirst );
53402 put2byte(&data[hdr+5], cbrk);
53403 data[hdr+1] = 0;
53404 data[hdr+2] = 0;
@@ -53408,10 +53693,73 @@
53408 if( cbrk-iCellFirst!=pPage->nFree ){
53409 return SQLITE_CORRUPT_BKPT;
53410 }
53411 return SQLITE_OK;
53412 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53413
53414 /*
53415 ** Allocate nByte bytes of space from within the B-Tree page passed
53416 ** as the first argument. Write into *pIdx the index into pPage->aData[]
53417 ** of the first byte of allocated space. Return either SQLITE_OK or
@@ -53426,79 +53774,57 @@
53426 */
53427 static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
53428 const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */
53429 u8 * const data = pPage->aData; /* Local cache of pPage->aData */
53430 int top; /* First byte of cell content area */
 
53431 int gap; /* First byte of gap between cell pointers and cell content */
53432 int rc; /* Integer return code */
53433 int usableSize; /* Usable size of the page */
53434
53435 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53436 assert( pPage->pBt );
53437 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53438 assert( nByte>=0 ); /* Minimum cell size is 4 */
53439 assert( pPage->nFree>=nByte );
53440 assert( pPage->nOverflow==0 );
53441 usableSize = pPage->pBt->usableSize;
53442 assert( nByte < usableSize-8 );
53443
53444 assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
53445 gap = pPage->cellOffset + 2*pPage->nCell;
53446 assert( gap<=65536 );
53447 top = get2byte(&data[hdr+5]);
53448 if( gap>top ){
53449 if( top==0 ){
53450 top = 65536;
53451 }else{
53452 return SQLITE_CORRUPT_BKPT;
53453 }
53454 }
53455
53456 /* If there is enough space between gap and top for one more cell pointer
53457 ** array entry offset, and if the freelist is not empty, then search the
53458 ** freelist looking for a free slot big enough to satisfy the request.
53459 */
53460 testcase( gap+2==top );
53461 testcase( gap+1==top );
53462 testcase( gap==top );
53463 if( gap+2<=top && (data[hdr+1] || data[hdr+2]) ){
53464 int pc, addr;
53465 for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
53466 int size; /* Size of the free slot */
53467 if( pc>usableSize-4 || pc<addr+4 ){
53468 return SQLITE_CORRUPT_BKPT;
53469 }
53470 size = get2byte(&data[pc+2]);
53471 if( size>=nByte ){
53472 int x = size - nByte;
53473 testcase( x==4 );
53474 testcase( x==3 );
53475 if( x<4 ){
53476 if( data[hdr+7]>=60 ) goto defragment_page;
53477 /* Remove the slot from the free-list. Update the number of
53478 ** fragmented bytes within the page. */
53479 memcpy(&data[addr], &data[pc], 2);
53480 data[hdr+7] += (u8)x;
53481 }else if( size+pc > usableSize ){
53482 return SQLITE_CORRUPT_BKPT;
53483 }else{
53484 /* The slot remains on the free-list. Reduce its size to account
53485 ** for the portion used by the new allocation. */
53486 put2byte(&data[pc+2], x);
53487 }
53488 *pIdx = pc + x;
53489 return SQLITE_OK;
53490 }
53491 }
53492 }
53493
53494 /* The request could not be fulfilled using a freelist slot. Check
53495 ** to see if defragmentation is necessary.
53496 */
53497 testcase( gap+2+nByte==top );
53498 if( gap+2+nByte>top ){
53499 defragment_page:
53500 testcase( pPage->nCell==0 );
53501 rc = defragmentPage(pPage);
53502 if( rc ) return rc;
53503 top = get2byteNotZero(&data[hdr+5]);
53504 assert( gap+nByte<=top );
@@ -53542,11 +53868,11 @@
53542 unsigned char *data = pPage->aData; /* Page content */
53543
53544 assert( pPage->pBt!=0 );
53545 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53546 assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize );
53547 assert( iEnd <= pPage->pBt->usableSize );
53548 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53549 assert( iSize>=4 ); /* Minimum cell size is 4 */
53550 assert( iStart<=iLast );
53551
53552 /* Overwrite deleted information with zeros when the secure_delete
@@ -53637,22 +53963,36 @@
53637 pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
53638 flagByte &= ~PTF_LEAF;
53639 pPage->childPtrSize = 4-4*pPage->leaf;
53640 pBt = pPage->pBt;
53641 if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
 
 
 
 
 
 
53642 pPage->intKey = 1;
53643 pPage->intKeyLeaf = pPage->leaf;
53644 pPage->noPayload = !pPage->leaf;
53645 pPage->maxLocal = pBt->maxLeaf;
53646 pPage->minLocal = pBt->minLeaf;
53647 }else if( flagByte==PTF_ZERODATA ){
 
 
 
 
 
 
53648 pPage->intKey = 0;
53649 pPage->intKeyLeaf = 0;
53650 pPage->noPayload = 0;
53651 pPage->maxLocal = pBt->maxLocal;
53652 pPage->minLocal = pBt->minLocal;
53653 }else{
 
 
53654 return SQLITE_CORRUPT_BKPT;
53655 }
53656 pPage->max1bytePayload = pBt->max1bytePayload;
53657 return SQLITE_OK;
53658 }
@@ -53688,25 +54028,37 @@
53688
53689 pBt = pPage->pBt;
53690
53691 hdr = pPage->hdrOffset;
53692 data = pPage->aData;
 
 
53693 if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
53694 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
53695 pPage->maskPage = (u16)(pBt->pageSize - 1);
53696 pPage->nOverflow = 0;
53697 usableSize = pBt->usableSize;
53698 pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
53699 pPage->aDataEnd = &data[usableSize];
53700 pPage->aCellIdx = &data[cellOffset];
 
 
 
53701 top = get2byteNotZero(&data[hdr+5]);
 
 
53702 pPage->nCell = get2byte(&data[hdr+3]);
53703 if( pPage->nCell>MX_CELL(pBt) ){
53704 /* To many cells for a single page. The page must be corrupt */
53705 return SQLITE_CORRUPT_BKPT;
53706 }
53707 testcase( pPage->nCell==MX_CELL(pBt) );
 
 
 
 
 
53708
53709 /* A malformed database page might cause us to read past the end
53710 ** of page when parsing a cell.
53711 **
53712 ** The following block of code checks early to see if a cell extends
@@ -53736,17 +54088,24 @@
53736 }
53737 if( !pPage->leaf ) iCellLast++;
53738 }
53739 #endif
53740
53741 /* Compute the total free space on the page */
 
 
 
53742 pc = get2byte(&data[hdr+1]);
53743 nFree = data[hdr+7] + top;
53744 while( pc>0 ){
53745 u16 next, size;
53746 if( pc<iCellFirst || pc>iCellLast ){
53747 /* Start of free block is off the page */
 
 
 
 
53748 return SQLITE_CORRUPT_BKPT;
53749 }
53750 next = get2byte(&data[pc]);
53751 size = get2byte(&data[pc+2]);
53752 if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
@@ -54148,10 +54507,13 @@
54148 pBt->pPage1 = 0;
54149 if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
54150 #ifdef SQLITE_SECURE_DELETE
54151 pBt->btsFlags |= BTS_SECURE_DELETE;
54152 #endif
 
 
 
54153 pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
54154 if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
54155 || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
54156 pBt->pageSize = 0;
54157 #ifndef SQLITE_OMIT_AUTOVACUUM
@@ -54166,10 +54528,13 @@
54166 pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
54167 }
54168 #endif
54169 nReserve = 0;
54170 }else{
 
 
 
54171 nReserve = zDbHeader[20];
54172 pBt->btsFlags |= BTS_PAGESIZE_FIXED;
54173 #ifndef SQLITE_OMIT_AUTOVACUUM
54174 pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
54175 pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
@@ -54675,10 +55040,13 @@
54675 if( nPage>0 ){
54676 u32 pageSize;
54677 u32 usableSize;
54678 u8 *page1 = pPage1->aData;
54679 rc = SQLITE_NOTADB;
 
 
 
54680 if( memcmp(page1, zMagicHeader, 16)!=0 ){
54681 goto page1_init_failed;
54682 }
54683
54684 #ifdef SQLITE_OMIT_WAL
@@ -54715,26 +55083,39 @@
54715 }
54716 rc = SQLITE_NOTADB;
54717 }
54718 #endif
54719
54720 /* The maximum embedded fraction must be exactly 25%. And the minimum
54721 ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
 
54722 ** The original design allowed these amounts to vary, but as of
54723 ** version 3.6.0, we require them to be fixed.
54724 */
54725 if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
54726 goto page1_init_failed;
54727 }
 
 
 
54728 pageSize = (page1[16]<<8) | (page1[17]<<16);
 
 
54729 if( ((pageSize-1)&pageSize)!=0
54730 || pageSize>SQLITE_MAX_PAGE_SIZE
54731 || pageSize<=256
54732 ){
54733 goto page1_init_failed;
54734 }
54735 assert( (pageSize & 7)==0 );
 
 
 
 
 
 
 
54736 usableSize = pageSize - page1[20];
54737 if( (u32)pageSize!=pBt->pageSize ){
54738 /* After reading the first page of the database assuming a page size
54739 ** of BtShared.pageSize, we have discovered that the page-size is
54740 ** actually pageSize. Unlock the database, leave pBt->pPage1 at
@@ -54751,10 +55132,13 @@
54751 }
54752 if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
54753 rc = SQLITE_CORRUPT_BKPT;
54754 goto page1_init_failed;
54755 }
 
 
 
54756 if( usableSize<480 ){
54757 goto page1_init_failed;
54758 }
54759 pBt->pageSize = pageSize;
54760 pBt->usableSize = usableSize;
@@ -57328,10 +57712,12 @@
57328
57329 assert( sqlite3_mutex_held(pBt->mutex) );
57330 assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) );
57331 pPage1 = pBt->pPage1;
57332 mxPage = btreePagecount(pBt);
 
 
57333 n = get4byte(&pPage1->aData[36]);
57334 testcase( n==mxPage-1 );
57335 if( n>=mxPage ){
57336 return SQLITE_CORRUPT_BKPT;
57337 }
@@ -57374,12 +57760,18 @@
57374 ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)
57375 */
57376 do {
57377 pPrevTrunk = pTrunk;
57378 if( pPrevTrunk ){
 
 
 
57379 iTrunk = get4byte(&pPrevTrunk->aData[0]);
57380 }else{
 
 
 
57381 iTrunk = get4byte(&pPage1->aData[32]);
57382 }
57383 testcase( iTrunk==mxPage );
57384 if( iTrunk>mxPage ){
57385 rc = SQLITE_CORRUPT_BKPT;
@@ -57390,12 +57782,13 @@
57390 pTrunk = 0;
57391 goto end_allocate_page;
57392 }
57393 assert( pTrunk!=0 );
57394 assert( pTrunk->aData!=0 );
57395
57396 k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
 
57397 if( k==0 && !searchList ){
57398 /* The trunk has no leaves and the list is not being searched.
57399 ** So extract the trunk page itself and use it as the newly
57400 ** allocated page */
57401 assert( pPrevTrunk==0 );
@@ -57709,10 +58102,15 @@
57709 ** to maintain backwards compatibility with older versions of SQLite,
57710 ** we will continue to restrict the number of entries to usableSize/4 - 8
57711 ** for now. At some point in the future (once everyone has upgraded
57712 ** to 3.6.0 or later) we should consider fixing the conditional above
57713 ** to read "usableSize/4-2" instead of "usableSize/4-8".
 
 
 
 
 
57714 */
57715 rc = sqlite3PagerWrite(pTrunk->pDbPage);
57716 if( rc==SQLITE_OK ){
57717 put4byte(&pTrunk->aData[4], nLeaf+1);
57718 put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
@@ -58060,13 +58458,21 @@
58060 if( rc ){
58061 *pRC = rc;
58062 return;
58063 }
58064 pPage->nCell--;
58065 memmove(ptr, ptr+2, 2*(pPage->nCell - idx));
58066 put2byte(&data[hdr+3], pPage->nCell);
58067 pPage->nFree += 2;
 
 
 
 
 
 
 
 
58068 }
58069
58070 /*
58071 ** Insert a new cell on pPage at cell index "i". pCell points to the
58072 ** content of the cell.
@@ -58157,49 +58563,275 @@
58157 #endif
58158 }
58159 }
58160
58161 /*
58162 ** Add a list of cells to a page. The page should be initially empty.
58163 ** The cells are guaranteed to fit on the page.
58164 */
58165 static void assemblePage(
58166 MemPage *pPage, /* The page to be assembled */
58167 int nCell, /* The number of cells to add to this page */
58168 u8 **apCell, /* Pointers to cell bodies */
58169 u16 *aSize /* Sizes of the cells */
58170 ){
58171 int i; /* Loop counter */
58172 u8 *pCellptr; /* Address of next cell pointer */
58173 int cellbody; /* Address of next cell body */
58174 u8 * const data = pPage->aData; /* Pointer to data for pPage */
58175 const int hdr = pPage->hdrOffset; /* Offset of header on pPage */
58176 const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
58177
58178 assert( pPage->nOverflow==0 );
58179 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
58180 assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
58181 && (int)MX_CELL(pPage->pBt)<=10921);
58182 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
58183
58184 /* Check that the page has just been zeroed by zeroPage() */
58185 assert( pPage->nCell==0 );
58186 assert( get2byteNotZero(&data[hdr+5])==nUsable );
58187
58188 pCellptr = &pPage->aCellIdx[nCell*2];
58189 cellbody = nUsable;
58190 for(i=nCell-1; i>=0; i--){
58191 u16 sz = aSize[i];
58192 pCellptr -= 2;
58193 cellbody -= sz;
58194 put2byte(pCellptr, cellbody);
58195 memcpy(&data[cellbody], apCell[i], sz);
58196 }
58197 put2byte(&data[hdr+3], nCell);
58198 put2byte(&data[hdr+5], cellbody);
58199 pPage->nFree -= (nCell*2 + nUsable - cellbody);
58200 pPage->nCell = (u16)nCell;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58201 }
58202
58203 /*
58204 ** The following parameters determine how many adjacent pages get involved
58205 ** in a balancing operation. NN is the number of neighbors on either side
@@ -58267,11 +58899,12 @@
58267 u8 *pStop;
58268
58269 assert( sqlite3PagerIswriteable(pNew->pDbPage) );
58270 assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
58271 zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
58272 assemblePage(pNew, 1, &pCell, &szCell);
 
58273
58274 /* If this is an auto-vacuum database, update the pointer map
58275 ** with entries for the new page, and any pointer from the
58276 ** cell on the page to an overflow page. If either of these
58277 ** operations fails, the return code is set, but the contents
@@ -58486,21 +59119,26 @@
58486 int subtotal; /* Subtotal of bytes in cells on one page */
58487 int iSpace1 = 0; /* First unused byte of aSpace1[] */
58488 int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */
58489 int szScratch; /* Size of scratch memory requested */
58490 MemPage *apOld[NB]; /* pPage and up to two siblings */
58491 MemPage *apCopy[NB]; /* Private copies of apOld[] pages */
58492 MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */
58493 u8 *pRight; /* Location in parent of right-sibling pointer */
58494 u8 *apDiv[NB-1]; /* Divider cells in pParent */
58495 int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */
58496 int szNew[NB+2]; /* Combined size of cells place on i-th page */
 
58497 u8 **apCell = 0; /* All cells begin balanced */
58498 u16 *szCell; /* Local size of all cells in apCell[] */
58499 u8 *aSpace1; /* Space for copies of dividers cells */
58500 Pgno pgno; /* Temp var to store a page number in */
 
 
 
 
58501
 
58502 pBt = pParent->pBt;
58503 assert( sqlite3_mutex_held(pBt->mutex) );
58504 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
58505
58506 #if 0
@@ -58605,16 +59243,18 @@
58605 nMaxCells = (nMaxCells + 3)&~3;
58606
58607 /*
58608 ** Allocate space for memory structures
58609 */
58610 k = pBt->pageSize + ROUND8(sizeof(MemPage));
58611 szScratch =
58612 nMaxCells*sizeof(u8*) /* apCell */
58613 + nMaxCells*sizeof(u16) /* szCell */
58614 + pBt->pageSize /* aSpace1 */
58615 + k*nOld; /* Page copies (apCopy) */
 
 
 
58616 apCell = sqlite3ScratchMalloc( szScratch );
58617 if( apCell==0 ){
58618 rc = SQLITE_NOMEM;
58619 goto balance_cleanup;
58620 }
@@ -58623,12 +59263,12 @@
58623 assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
58624
58625 /*
58626 ** Load pointers to all cells on sibling pages and the divider cells
58627 ** into the local apCell[] array. Make copies of the divider cells
58628 ** into space obtained from aSpace1[] and remove the divider cells
58629 ** from pParent.
58630 **
58631 ** If the siblings are on leaf pages, then the child pointers of the
58632 ** divider cells are stripped from the cells before they are copied
58633 ** into aSpace1[]. In this way, all cells in apCell[] are without
58634 ** child pointers. If siblings are not leaves, then all cell in
@@ -58640,19 +59280,11 @@
58640 */
58641 leafCorrection = apOld[0]->leaf*4;
58642 leafData = apOld[0]->intKeyLeaf;
58643 for(i=0; i<nOld; i++){
58644 int limit;
58645
58646 /* Before doing anything else, take a copy of the i'th original sibling
58647 ** The rest of this function will use data from the copies rather
58648 ** that the original pages since the original pages will be in the
58649 ** process of being overwritten. */
58650 MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
58651 memcpy(pOld, apOld[i], sizeof(MemPage));
58652 pOld->aData = (void*)&pOld[1];
58653 memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
58654
58655 limit = pOld->nCell+pOld->nOverflow;
58656 if( pOld->nOverflow>0 ){
58657 for(j=0; j<limit; j++){
58658 assert( nCell<nMaxCells );
@@ -58669,10 +59301,11 @@
58669 apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
58670 szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
58671 nCell++;
58672 }
58673 }
 
58674 if( i<nOld-1 && !leafData){
58675 u16 sz = (u16)szNew[i];
58676 u8 *pTemp;
58677 assert( nCell<nMaxCells );
58678 szCell[nCell] = sz;
@@ -58720,11 +59353,11 @@
58720 usableSpace = pBt->usableSize - 12 + leafCorrection;
58721 for(subtotal=k=i=0; i<nCell; i++){
58722 assert( i<nMaxCells );
58723 subtotal += szCell[i] + 2;
58724 if( subtotal > usableSpace ){
58725 szNew[k] = subtotal - szCell[i];
58726 cntNew[k] = i;
58727 if( leafData ){ i--; }
58728 subtotal = 0;
58729 k++;
58730 if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
@@ -58734,13 +59367,14 @@
58734 cntNew[k] = nCell;
58735 k++;
58736
58737 /*
58738 ** The packing computed by the previous block is biased toward the siblings
58739 ** on the left side. The left siblings are always nearly full, while the
58740 ** right-most sibling might be nearly empty. This block of code attempts
58741 ** to adjust the packing of siblings to get a better balance.
 
58742 **
58743 ** This adjustment is more than an optimization. The packing above might
58744 ** be so out of balance as to be illegal. For example, the right-most
58745 ** sibling might be completely empty. This adjustment is not optional.
58746 */
@@ -58765,26 +59399,22 @@
58765 }
58766 szNew[i] = szRight;
58767 szNew[i-1] = szLeft;
58768 }
58769
58770 /* Either we found one or more cells (cntnew[0])>0) or pPage is
58771 ** a virtual root page. A virtual root page is when the real root
58772 ** page is page 1 and we are the only child of that page.
58773 **
58774 ** UPDATE: The assert() below is not necessarily true if the database
58775 ** file is corrupt. The corruption will be detected and reported later
58776 ** in this procedure so there is no need to act upon it now.
58777 */
58778 #if 0
58779 assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
58780 #endif
58781
58782 TRACE(("BALANCE: old: %d %d %d ",
58783 apOld[0]->pgno,
58784 nOld>=2 ? apOld[1]->pgno : 0,
58785 nOld>=3 ? apOld[2]->pgno : 0
58786 ));
58787
58788 /*
58789 ** Allocate k new pages. Reuse old pages where possible.
58790 */
@@ -58803,12 +59433,14 @@
58803 if( rc ) goto balance_cleanup;
58804 }else{
58805 assert( i>0 );
58806 rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0);
58807 if( rc ) goto balance_cleanup;
 
58808 apNew[i] = pNew;
58809 nNew++;
 
58810
58811 /* Set the pointer-map entry for the new sibling page. */
58812 if( ISAUTOVACUUM ){
58813 ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
58814 if( rc!=SQLITE_OK ){
@@ -58816,139 +59448,247 @@
58816 }
58817 }
58818 }
58819 }
58820
58821 /* Free any old pages that were not reused as new pages.
58822 */
58823 while( i<nOld ){
58824 freePage(apOld[i], &rc);
58825 if( rc ) goto balance_cleanup;
58826 releasePage(apOld[i]);
58827 apOld[i] = 0;
58828 i++;
58829 }
58830
58831 /*
58832 ** Put the new pages in ascending order. This helps to
58833 ** keep entries in the disk file in order so that a scan
58834 ** of the table is a linear scan through the file. That
58835 ** in turn helps the operating system to deliver pages
58836 ** from the disk more rapidly.
58837 **
58838 ** An O(n^2) insertion sort algorithm is used, but since
58839 ** n is never more than NB (a small constant), that should
58840 ** not be a problem.
58841 **
58842 ** When NB==3, this one optimization makes the database
58843 ** about 25% faster for large insertions and deletions.
58844 */
58845 for(i=0; i<k-1; i++){
58846 int minV = apNew[i]->pgno;
58847 int minI = i;
58848 for(j=i+1; j<k; j++){
58849 if( apNew[j]->pgno<(unsigned)minV ){
58850 minI = j;
58851 minV = apNew[j]->pgno;
58852 }
58853 }
58854 if( minI>i ){
58855 MemPage *pT;
58856 pT = apNew[i];
58857 apNew[i] = apNew[minI];
58858 apNew[minI] = pT;
58859 }
58860 }
58861 TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
58862 apNew[0]->pgno, szNew[0],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58863 nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
 
58864 nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
 
58865 nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
58866 nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
 
 
 
58867
58868 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
58869 put4byte(pRight, apNew[nNew-1]->pgno);
58870
58871 /*
58872 ** Evenly distribute the data in apCell[] across the new pages.
58873 ** Insert divider cells into pParent as necessary.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58874 */
58875 j = 0;
58876 for(i=0; i<nNew; i++){
58877 /* Assemble the new sibling page. */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58878 MemPage *pNew = apNew[i];
58879 assert( j<nMaxCells );
58880 zeroPage(pNew, pageFlags);
58881 assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
58882 assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
58883 assert( pNew->nOverflow==0 );
58884
58885 j = cntNew[i];
58886
58887 /* If the sibling page assembled above was not the right-most sibling,
58888 ** insert a divider cell into the parent page.
58889 */
58890 assert( i<nNew-1 || j==nCell );
58891 if( j<nCell ){
58892 u8 *pCell;
58893 u8 *pTemp;
58894 int sz;
58895
58896 assert( j<nMaxCells );
58897 pCell = apCell[j];
58898 sz = szCell[j] + leafCorrection;
58899 pTemp = &aOvflSpace[iOvflSpace];
58900 if( !pNew->leaf ){
58901 memcpy(&pNew->aData[8], pCell, 4);
58902 }else if( leafData ){
58903 /* If the tree is a leaf-data tree, and the siblings are leaves,
58904 ** then there is no divider cell in apCell[]. Instead, the divider
58905 ** cell consists of the integer key for the right-most cell of
58906 ** the sibling-page assembled above only.
58907 */
58908 CellInfo info;
58909 j--;
58910 btreeParseCellPtr(pNew, apCell[j], &info);
58911 pCell = pTemp;
58912 sz = 4 + putVarint(&pCell[4], info.nKey);
58913 pTemp = 0;
58914 }else{
58915 pCell -= 4;
58916 /* Obscure case for non-leaf-data trees: If the cell at pCell was
58917 ** previously stored on a leaf node, and its reported size was 4
58918 ** bytes, then it may actually be smaller than this
58919 ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
58920 ** any cell). But it is important to pass the correct size to
58921 ** insertCell(), so reparse the cell now.
58922 **
58923 ** Note that this can never happen in an SQLite data file, as all
58924 ** cells are at least 4 bytes. It only happens in b-trees used
58925 ** to evaluate "IN (SELECT ...)" and similar clauses.
58926 */
58927 if( szCell[j]==4 ){
58928 assert(leafCorrection==4);
58929 sz = cellSizePtr(pParent, pCell);
58930 }
58931 }
58932 iOvflSpace += sz;
58933 assert( sz<=pBt->maxLocal+23 );
58934 assert( iOvflSpace <= (int)pBt->pageSize );
58935 insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
58936 if( rc!=SQLITE_OK ) goto balance_cleanup;
58937 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
58938
58939 j++;
58940 nxDiv++;
58941 }
58942 }
58943 assert( j==nCell );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58944 assert( nOld>0 );
58945 assert( nNew>0 );
58946 if( (pageFlags & PTF_LEAF)==0 ){
58947 u8 *zChild = &apCopy[nOld-1]->aData[8];
58948 memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
58949 }
58950
58951 if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
58952 /* The root page of the b-tree now contains no cells. The only sibling
58953 ** page is the right-child of the parent. Copy the contents of the
58954 ** child page into the parent, decreasing the overall height of the
@@ -58957,130 +59697,54 @@
58957 **
58958 ** If this is an auto-vacuum database, the call to copyNodeContent()
58959 ** sets all pointer-map entries corresponding to database image pages
58960 ** for which the pointer is stored within the content being copied.
58961 **
58962 ** The second assert below verifies that the child page is defragmented
58963 ** (it must be, as it was just reconstructed using assemblePage()). This
58964 ** is important if the parent page happens to be page 1 of the database
58965 ** image. */
 
58966 assert( nNew==1 );
 
 
58967 assert( apNew[0]->nFree ==
58968 (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
 
58969 );
58970 copyNodeContent(apNew[0], pParent, &rc);
58971 freePage(apNew[0], &rc);
58972 }else if( ISAUTOVACUUM ){
58973 /* Fix the pointer-map entries for all the cells that were shifted around.
58974 ** There are several different types of pointer-map entries that need to
58975 ** be dealt with by this routine. Some of these have been set already, but
58976 ** many have not. The following is a summary:
58977 **
58978 ** 1) The entries associated with new sibling pages that were not
58979 ** siblings when this function was called. These have already
58980 ** been set. We don't need to worry about old siblings that were
58981 ** moved to the free-list - the freePage() code has taken care
58982 ** of those.
58983 **
58984 ** 2) The pointer-map entries associated with the first overflow
58985 ** page in any overflow chains used by new divider cells. These
58986 ** have also already been taken care of by the insertCell() code.
58987 **
58988 ** 3) If the sibling pages are not leaves, then the child pages of
58989 ** cells stored on the sibling pages may need to be updated.
58990 **
58991 ** 4) If the sibling pages are not internal intkey nodes, then any
58992 ** overflow pages used by these cells may need to be updated
58993 ** (internal intkey nodes never contain pointers to overflow pages).
58994 **
58995 ** 5) If the sibling pages are not leaves, then the pointer-map
58996 ** entries for the right-child pages of each sibling may need
58997 ** to be updated.
58998 **
58999 ** Cases 1 and 2 are dealt with above by other code. The next
59000 ** block deals with cases 3 and 4 and the one after that, case 5. Since
59001 ** setting a pointer map entry is a relatively expensive operation, this
59002 ** code only sets pointer map entries for child or overflow pages that have
59003 ** actually moved between pages. */
59004 MemPage *pNew = apNew[0];
59005 MemPage *pOld = apCopy[0];
59006 int nOverflow = pOld->nOverflow;
59007 int iNextOld = pOld->nCell + nOverflow;
59008 int iOverflow = (nOverflow ? pOld->aiOvfl[0] : -1);
59009 j = 0; /* Current 'old' sibling page */
59010 k = 0; /* Current 'new' sibling page */
59011 for(i=0; i<nCell; i++){
59012 int isDivider = 0;
59013 while( i==iNextOld ){
59014 /* Cell i is the cell immediately following the last cell on old
59015 ** sibling page j. If the siblings are not leaf pages of an
59016 ** intkey b-tree, then cell i was a divider cell. */
59017 assert( j+1 < ArraySize(apCopy) );
59018 assert( j+1 < nOld );
59019 pOld = apCopy[++j];
59020 iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
59021 if( pOld->nOverflow ){
59022 nOverflow = pOld->nOverflow;
59023 iOverflow = i + !leafData + pOld->aiOvfl[0];
59024 }
59025 isDivider = !leafData;
59026 }
59027
59028 assert(nOverflow>0 || iOverflow<i );
59029 assert(nOverflow<2 || pOld->aiOvfl[0]==pOld->aiOvfl[1]-1);
59030 assert(nOverflow<3 || pOld->aiOvfl[1]==pOld->aiOvfl[2]-1);
59031 if( i==iOverflow ){
59032 isDivider = 1;
59033 if( (--nOverflow)>0 ){
59034 iOverflow++;
59035 }
59036 }
59037
59038 if( i==cntNew[k] ){
59039 /* Cell i is the cell immediately following the last cell on new
59040 ** sibling page k. If the siblings are not leaf pages of an
59041 ** intkey b-tree, then cell i is a divider cell. */
59042 pNew = apNew[++k];
59043 if( !leafData ) continue;
59044 }
59045 assert( j<nOld );
59046 assert( k<nNew );
59047
59048 /* If the cell was originally divider cell (and is not now) or
59049 ** an overflow cell, or if the cell was located on a different sibling
59050 ** page before the balancing, then the pointer map entries associated
59051 ** with any child or overflow pages need to be updated. */
59052 if( isDivider || pOld->pgno!=pNew->pgno ){
59053 if( !leafCorrection ){
59054 ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
59055 }
59056 if( szCell[i]>pNew->minLocal ){
59057 ptrmapPutOvflPtr(pNew, apCell[i], &rc);
59058 }
59059 }
59060 }
59061
59062 if( !leafCorrection ){
59063 for(i=0; i<nNew; i++){
59064 u32 key = get4byte(&apNew[i]->aData[8]);
59065 ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
59066 }
59067 }
59068
59069 #if 0
 
59070 /* The ptrmapCheckPages() contains assert() statements that verify that
59071 ** all pointer map pages are set correctly. This is helpful while
59072 ** debugging. This is usually disabled because a corrupt database may
59073 ** cause an assert() statement to fail. */
59074 ptrmapCheckPages(apNew, nNew);
59075 ptrmapCheckPages(&pParent, 1);
 
59076 #endif
59077 }
59078
59079 assert( pParent->isInit );
59080 TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
59081 nOld, nNew, nCell));
59082
59083 /*
59084 ** Cleanup before returning.
59085 */
59086 balance_cleanup:
@@ -60461,12 +61125,18 @@
60461 }else{
60462 int contentOffset = get2byteNotZero(&data[hdr+5]);
60463 assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */
60464 memset(hit+contentOffset, 0, usableSize-contentOffset);
60465 memset(hit, 1, contentOffset);
 
 
60466 nCell = get2byte(&data[hdr+3]);
 
 
60467 cellStart = hdr + 12 - 4*pPage->leaf;
 
 
60468 for(i=0; i<nCell; i++){
60469 int pc = get2byte(&data[cellStart+i*2]);
60470 u32 size = 65536;
60471 int j;
60472 if( pc<=usableSize-4 ){
@@ -60478,18 +61148,27 @@
60478 "Corruption detected in cell %d on page %d",i,iPage);
60479 }else{
60480 for(j=pc+size-1; j>=pc; j--) hit[j]++;
60481 }
60482 }
 
 
 
60483 i = get2byte(&data[hdr+1]);
60484 while( i>0 ){
60485 int size, j;
60486 assert( i<=usableSize-4 ); /* Enforced by btreeInitPage() */
60487 size = get2byte(&data[i+2]);
60488 assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */
60489 for(j=i+size-1; j>=i; j--) hit[j]++;
 
 
 
 
60490 j = get2byte(&data[i]);
 
 
60491 assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */
60492 assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */
60493 i = j;
60494 }
60495 for(i=cnt=0; i<usableSize; i++){
@@ -60499,10 +61178,15 @@
60499 checkAppendMsg(pCheck,
60500 "Multiple uses for byte %d of page %d", i, iPage);
60501 break;
60502 }
60503 }
 
 
 
 
 
60504 if( cnt!=data[hdr+7] ){
60505 checkAppendMsg(pCheck,
60506 "Fragmentation of %d bytes reported as %d on page %d",
60507 cnt, data[hdr+7], iPage);
60508 }
@@ -60902,10 +61586,15 @@
60902 */
60903 SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
60904 return (p->pBt->btsFlags & BTS_READ_ONLY)!=0;
60905 }
60906
 
 
 
 
 
60907 /************** End of btree.c ***********************************************/
60908 /************** Begin file backup.c ******************************************/
60909 /*
60910 ** 2009 January 28
60911 **
@@ -61025,10 +61714,24 @@
61025 static int setDestPgsz(sqlite3_backup *p){
61026 int rc;
61027 rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
61028 return rc;
61029 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61030
61031 /*
61032 ** Create an sqlite3_backup process to copy the contents of zSrcDb from
61033 ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
61034 ** a pointer to the new sqlite3_backup object.
@@ -61041,10 +61744,17 @@
61041 const char *zDestDb, /* Name of database within pDestDb */
61042 sqlite3* pSrcDb, /* Database connection to read from */
61043 const char *zSrcDb /* Name of database within pSrcDb */
61044 ){
61045 sqlite3_backup *p; /* Value to return */
 
 
 
 
 
 
 
61046
61047 /* Lock the source database handle. The destination database
61048 ** handle is not locked in this routine, but it is locked in
61049 ** sqlite3_backup_step(). The user is required to ensure that no
61050 ** other thread accesses the destination handle for the duration
@@ -61078,16 +61788,19 @@
61078 p->pDestDb = pDestDb;
61079 p->pSrcDb = pSrcDb;
61080 p->iNext = 1;
61081 p->isAttached = 0;
61082
61083 if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
 
 
 
61084 /* One (or both) of the named databases did not exist or an OOM
61085 ** error was hit. The error has already been written into the
61086 ** pDestDb handle. All that is left to do here is free the
61087 ** sqlite3_backup structure.
61088 */
61089 sqlite3_free(p);
61090 p = 0;
61091 }
61092 }
61093 if( p ){
@@ -61238,10 +61951,13 @@
61238 int rc;
61239 int destMode; /* Destination journal mode */
61240 int pgszSrc = 0; /* Source page size */
61241 int pgszDest = 0; /* Destination page size */
61242
 
 
 
61243 sqlite3_mutex_enter(p->pSrcDb->mutex);
61244 sqlite3BtreeEnter(p->pSrc);
61245 if( p->pDestDb ){
61246 sqlite3_mutex_enter(p->pDestDb->mutex);
61247 }
@@ -61527,18 +62243,30 @@
61527 /*
61528 ** Return the number of pages still to be backed up as of the most recent
61529 ** call to sqlite3_backup_step().
61530 */
61531 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
 
 
 
 
 
 
61532 return p->nRemaining;
61533 }
61534
61535 /*
61536 ** Return the total number of pages in the source database as of the most
61537 ** recent call to sqlite3_backup_step().
61538 */
61539 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
 
 
 
 
 
 
61540 return p->nPagecount;
61541 }
61542
61543 /*
61544 ** This function is called after the contents of page iPage of the
@@ -63825,10 +64553,38 @@
63825 }
63826 p->nOp += nOp;
63827 }
63828 return addr;
63829 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63830
63831 /*
63832 ** Change the value of the P1 operand for a specific instruction.
63833 ** This routine is useful when a large program is loaded from a
63834 ** static array using sqlite3VdbeAddOpList but we want to make a
@@ -64924,10 +65680,13 @@
64924 p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
64925 p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
64926 p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
64927 &zCsr, zEnd, &nByte);
64928 p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
 
 
 
64929 if( nByte ){
64930 p->pFree = sqlite3DbMallocZero(db, nByte);
64931 }
64932 zCsr = p->pFree;
64933 zEnd = &zCsr[nByte];
@@ -64991,10 +65750,13 @@
64991 ** is used, for example, when a trigger sub-program is halted to restore
64992 ** control to the main program.
64993 */
64994 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
64995 Vdbe *v = pFrame->v;
 
 
 
64996 v->aOnceFlag = pFrame->aOnceFlag;
64997 v->nOnceFlag = pFrame->nOnceFlag;
64998 v->aOp = pFrame->aOp;
64999 v->nOp = pFrame->nOp;
65000 v->aMem = pFrame->aMem;
@@ -65001,10 +65763,11 @@
65001 v->nMem = pFrame->nMem;
65002 v->apCsr = pFrame->apCsr;
65003 v->nCursor = pFrame->nCursor;
65004 v->db->lastRowid = pFrame->lastRowid;
65005 v->nChange = pFrame->nChange;
 
65006 return pFrame->pc;
65007 }
65008
65009 /*
65010 ** Close all cursors.
@@ -65568,10 +66331,11 @@
65568 ** so, abort any other statements this handle currently has active.
65569 */
65570 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
65571 sqlite3CloseSavepoints(db);
65572 db->autoCommit = 1;
 
65573 }
65574 }
65575 }
65576
65577 /* Check for immediate foreign key violations. */
@@ -65608,18 +66372,20 @@
65608 sqlite3VdbeLeave(p);
65609 return SQLITE_BUSY;
65610 }else if( rc!=SQLITE_OK ){
65611 p->rc = rc;
65612 sqlite3RollbackAll(db, SQLITE_OK);
 
65613 }else{
65614 db->nDeferredCons = 0;
65615 db->nDeferredImmCons = 0;
65616 db->flags &= ~SQLITE_DeferFKs;
65617 sqlite3CommitInternalChanges(db);
65618 }
65619 }else{
65620 sqlite3RollbackAll(db, SQLITE_OK);
 
65621 }
65622 db->nStatement = 0;
65623 }else if( eStatementOp==0 ){
65624 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
65625 eStatementOp = SAVEPOINT_RELEASE;
@@ -65627,10 +66393,11 @@
65627 eStatementOp = SAVEPOINT_ROLLBACK;
65628 }else{
65629 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
65630 sqlite3CloseSavepoints(db);
65631 db->autoCommit = 1;
 
65632 }
65633 }
65634
65635 /* If eStatementOp is non-zero, then a statement transaction needs to
65636 ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
@@ -65647,10 +66414,11 @@
65647 p->zErrMsg = 0;
65648 }
65649 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
65650 sqlite3CloseSavepoints(db);
65651 db->autoCommit = 1;
 
65652 }
65653 }
65654
65655 /* If this was an INSERT, UPDATE or DELETE and no statement transaction
65656 ** has been rolled back, update the database connection change-counter.
@@ -65908,10 +66676,16 @@
65908 for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
65909 vdbeFreeOpArray(db, p->aOp, p->nOp);
65910 sqlite3DbFree(db, p->aColName);
65911 sqlite3DbFree(db, p->zSql);
65912 sqlite3DbFree(db, p->pFree);
 
 
 
 
 
 
65913 }
65914
65915 /*
65916 ** Delete an entire VDBE.
65917 */
@@ -66066,13 +66840,11 @@
66066 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
66067 # define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
66068 i64 i = pMem->u.i;
66069 u64 u;
66070 if( i<0 ){
66071 if( i<(-MAX_6BYTE) ) return 6;
66072 /* Previous test prevents: u = -(-9223372036854775808) */
66073 u = -i;
66074 }else{
66075 u = i;
66076 }
66077 if( u<=127 ){
66078 return ((i&1)==i && file_format>=4) ? 8+(u32)u : 1;
@@ -66234,14 +67006,18 @@
66234 ){
66235 u64 x = FOUR_BYTE_UINT(buf);
66236 u32 y = FOUR_BYTE_UINT(buf+4);
66237 x = (x<<32) + y;
66238 if( serial_type==6 ){
 
 
66239 pMem->u.i = *(i64*)&x;
66240 pMem->flags = MEM_Int;
66241 testcase( pMem->u.i<0 );
66242 }else{
 
 
66243 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
66244 /* Verify that integers and floating point values use the same
66245 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
66246 ** defined that 64-bit floating point values really are mixed
66247 ** endian.
@@ -66265,39 +67041,50 @@
66265 Mem *pMem /* Memory cell to write value into */
66266 ){
66267 switch( serial_type ){
66268 case 10: /* Reserved for future use */
66269 case 11: /* Reserved for future use */
66270 case 0: { /* NULL */
 
66271 pMem->flags = MEM_Null;
66272 break;
66273 }
66274 case 1: { /* 1-byte signed integer */
 
 
66275 pMem->u.i = ONE_BYTE_INT(buf);
66276 pMem->flags = MEM_Int;
66277 testcase( pMem->u.i<0 );
66278 return 1;
66279 }
66280 case 2: { /* 2-byte signed integer */
 
 
66281 pMem->u.i = TWO_BYTE_INT(buf);
66282 pMem->flags = MEM_Int;
66283 testcase( pMem->u.i<0 );
66284 return 2;
66285 }
66286 case 3: { /* 3-byte signed integer */
 
 
66287 pMem->u.i = THREE_BYTE_INT(buf);
66288 pMem->flags = MEM_Int;
66289 testcase( pMem->u.i<0 );
66290 return 3;
66291 }
66292 case 4: { /* 4-byte signed integer */
 
 
66293 pMem->u.i = FOUR_BYTE_INT(buf);
66294 pMem->flags = MEM_Int;
66295 testcase( pMem->u.i<0 );
66296 return 4;
66297 }
66298 case 5: { /* 6-byte signed integer */
 
 
66299 pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
66300 pMem->flags = MEM_Int;
66301 testcase( pMem->u.i<0 );
66302 return 6;
66303 }
@@ -66307,15 +67094,21 @@
66307 ** to avoid having to move the frame pointer in the common case */
66308 return serialGet(buf,serial_type,pMem);
66309 }
66310 case 8: /* Integer 0 */
66311 case 9: { /* Integer 1 */
 
 
66312 pMem->u.i = serial_type-8;
66313 pMem->flags = MEM_Int;
66314 return 0;
66315 }
66316 default: {
 
 
 
 
66317 static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
66318 pMem->z = (char *)buf;
66319 pMem->n = (serial_type-12)/2;
66320 pMem->flags = aFlag[serial_type&1];
66321 return pMem->n;
@@ -68275,15 +69068,23 @@
68275 sqlite3_stmt *pStmt,
68276 int N,
68277 const void *(*xFunc)(Mem*),
68278 int useType
68279 ){
68280 const void *ret = 0;
68281 Vdbe *p = (Vdbe *)pStmt;
68282 int n;
68283 sqlite3 *db = p->db;
68284
 
 
 
 
 
 
 
 
68285 assert( db!=0 );
68286 n = sqlite3_column_count(pStmt);
68287 if( N<n && N>=0 ){
68288 N += useType*n;
68289 sqlite3_mutex_enter(db->mutex);
@@ -68744,10 +69545,16 @@
68744 ** prepared statement for the database connection. Return NULL if there
68745 ** are no more.
68746 */
68747 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
68748 sqlite3_stmt *pNext;
 
 
 
 
 
 
68749 sqlite3_mutex_enter(pDb->mutex);
68750 if( pStmt==0 ){
68751 pNext = (sqlite3_stmt*)pDb->pVdbe;
68752 }else{
68753 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
@@ -68759,15 +69566,91 @@
68759 /*
68760 ** Return the value of a status counter for a prepared statement
68761 */
68762 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
68763 Vdbe *pVdbe = (Vdbe*)pStmt;
68764 u32 v = pVdbe->aCounter[op];
 
 
 
 
 
 
 
68765 if( resetFlag ) pVdbe->aCounter[op] = 0;
68766 return (int)v;
68767 }
68768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68769 /************** End of vdbeapi.c *********************************************/
68770 /************** Begin file vdbetrace.c ***************************************/
68771 /*
68772 ** 2009 November 25
68773 **
@@ -69649,10 +70532,13 @@
69649 #ifdef VDBE_PROFILE
69650 start = sqlite3Hwtime();
69651 #endif
69652 nVmStep++;
69653 pOp = &aOp[pc];
 
 
 
69654
69655 /* Only allow tracing if SQLITE_DEBUG is defined.
69656 */
69657 #ifdef SQLITE_DEBUG
69658 if( db->flags & SQLITE_VdbeTrace ){
@@ -71674,11 +72560,14 @@
71674 testcase( serial_type==127 );
71675 testcase( serial_type==128 );
71676 nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type);
71677 }while( (--pRec)>=pData0 );
71678
71679 /* Add the initial header varint and total the size */
 
 
 
71680 testcase( nHdr==126 );
71681 testcase( nHdr==127 );
71682 if( nHdr<=126 ){
71683 /* The common case */
71684 nHdr += 1;
@@ -71708,11 +72597,15 @@
71708 j = nHdr;
71709 assert( pData0<=pLast );
71710 pRec = pData0;
71711 do{
71712 serial_type = pRec->uTemp;
 
 
71713 i += putVarint32(&zNewRecord[i], serial_type); /* serial type */
 
 
71714 j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */
71715 }while( (++pRec)<=pLast );
71716 assert( i==nHdr );
71717 assert( j==nByte );
71718
@@ -72843,14 +73736,14 @@
72843 }
72844 pIdxKey = &r;
72845 }else{
72846 pIdxKey = sqlite3VdbeAllocUnpackedRecord(
72847 pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree
72848 );
72849 if( pIdxKey==0 ) goto no_mem;
72850 assert( pIn3->flags & MEM_Blob );
72851 assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */
72852 sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey);
72853 }
72854 pIdxKey->default_rc = 0;
72855 if( pOp->opcode==OP_NoConflict ){
72856 /* For the OP_NoConflict opcode, take the jump if any of the
@@ -73540,13 +74433,13 @@
73540 }
73541 /* Opcode: Rewind P1 P2 * * *
73542 **
73543 ** The next use of the Rowid or Column or Next instruction for P1
73544 ** will refer to the first entry in the database table or index.
73545 ** If the table or index is empty and P2>0, then jump immediately to P2.
73546 ** If P2 is 0 or if the table or index is not empty, fall through
73547 ** to the following instruction.
73548 **
73549 ** This opcode leaves the cursor configured to move in forward order,
73550 ** from the beginning toward the end. In other words, the cursor is
73551 ** configured to use Next, not Prev.
73552 */
@@ -74458,10 +75351,13 @@
74458 pFrame->aOp = p->aOp;
74459 pFrame->nOp = p->nOp;
74460 pFrame->token = pProgram->token;
74461 pFrame->aOnceFlag = p->aOnceFlag;
74462 pFrame->nOnceFlag = p->nOnceFlag;
 
 
 
74463
74464 pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
74465 for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
74466 pMem->flags = MEM_Undefined;
74467 pMem->db = db;
@@ -74475,10 +75371,11 @@
74475
74476 p->nFrame++;
74477 pFrame->pParent = p->pFrame;
74478 pFrame->lastRowid = lastRowid;
74479 pFrame->nChange = p->nChange;
 
74480 p->nChange = 0;
74481 p->pFrame = pFrame;
74482 p->aMem = aMem = &VdbeFrameMem(pFrame)[-1];
74483 p->nMem = pFrame->nChildMem;
74484 p->nCursor = (u16)pFrame->nChildCsr;
@@ -74485,10 +75382,13 @@
74485 p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
74486 p->aOp = aOp = pProgram->aOp;
74487 p->nOp = pProgram->nOp;
74488 p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
74489 p->nOnceFlag = pProgram->nOnce;
 
 
 
74490 pc = -1;
74491 memset(p->aOnceFlag, 0, p->nOnceFlag);
74492
74493 break;
74494 }
@@ -75673,10 +76573,15 @@
75673 char *zErr = 0;
75674 Table *pTab;
75675 Parse *pParse = 0;
75676 Incrblob *pBlob = 0;
75677
 
 
 
 
 
75678 flags = !!flags; /* flags = (flags ? 1 : 0); */
75679 *ppBlob = 0;
75680
75681 sqlite3_mutex_enter(db->mutex);
75682
@@ -75891,11 +76796,10 @@
75891 v = (Vdbe*)p->pStmt;
75892
75893 if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
75894 /* Request is out of range. Return a transient error. */
75895 rc = SQLITE_ERROR;
75896 sqlite3Error(db, SQLITE_ERROR);
75897 }else if( v==0 ){
75898 /* If there is no statement handle, then the blob-handle has
75899 ** already been invalidated. Return SQLITE_ABORT in this case.
75900 */
75901 rc = SQLITE_ABORT;
@@ -75909,14 +76813,14 @@
75909 sqlite3BtreeLeaveCursor(p->pCsr);
75910 if( rc==SQLITE_ABORT ){
75911 sqlite3VdbeFinalize(v);
75912 p->pStmt = 0;
75913 }else{
75914 db->errCode = rc;
75915 v->rc = rc;
75916 }
75917 }
 
75918 rc = sqlite3ApiExit(db, rc);
75919 sqlite3_mutex_leave(db->mutex);
75920 return rc;
75921 }
75922
@@ -76089,11 +76993,11 @@
76089 ** itself.
76090 **
76091 ** The sorter is running in multi-threaded mode if (a) the library was built
76092 ** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater
76093 ** than zero, and (b) worker threads have been enabled at runtime by calling
76094 ** sqlite3_config(SQLITE_CONFIG_WORKER_THREADS, ...).
76095 **
76096 ** When Rewind() is called, any data remaining in memory is flushed to a
76097 ** final PMA. So at this point the data is stored in some number of sorted
76098 ** PMAs within temporary files on disk.
76099 **
@@ -76134,10 +77038,17 @@
76134 */
76135 #if 0
76136 # define SQLITE_DEBUG_SORTER_THREADS 1
76137 #endif
76138
 
 
 
 
 
 
 
76139 /*
76140 ** Private objects used by the sorter
76141 */
76142 typedef struct MergeEngine MergeEngine; /* Merge PMAs together */
76143 typedef struct PmaReader PmaReader; /* Incrementally read one PMA */
@@ -76832,17 +77743,15 @@
76832
76833 if( !sqlite3TempInMemory(db) ){
76834 pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
76835 mxCache = db->aDb[0].pSchema->cache_size;
76836 if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
76837 pSorter->mxPmaSize = mxCache * pgsz;
76838
76839 /* If the application has not configure scratch memory using
76840 ** SQLITE_CONFIG_SCRATCH then we assume it is OK to do large memory
76841 ** allocations. If scratch memory has been configured, then assume
76842 ** large memory allocations should be avoided to prevent heap
76843 ** fragmentation.
76844 */
76845 if( sqlite3GlobalConfig.pScratch==0 ){
76846 assert( pSorter->iMemory==0 );
76847 pSorter->nMemory = pgsz;
76848 pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
@@ -79210,19 +80119,19 @@
79210 **
79211 ** incrAggFunctionDepth(pExpr,n) is the main routine. incrAggDepth(..)
79212 ** is a helper function - a callback for the tree walker.
79213 */
79214 static int incrAggDepth(Walker *pWalker, Expr *pExpr){
79215 if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.i;
79216 return WRC_Continue;
79217 }
79218 static void incrAggFunctionDepth(Expr *pExpr, int N){
79219 if( N>0 ){
79220 Walker w;
79221 memset(&w, 0, sizeof(w));
79222 w.xExprCallback = incrAggDepth;
79223 w.u.i = N;
79224 sqlite3WalkExpr(&w, pExpr);
79225 }
79226 }
79227
79228 /*
@@ -79766,11 +80675,11 @@
79766 double r = -1.0;
79767 if( p->op!=TK_FLOAT ) return -1;
79768 sqlite3AtoF(p->u.zToken, &r, sqlite3Strlen30(p->u.zToken), SQLITE_UTF8);
79769 assert( r>=0.0 );
79770 if( r>1.0 ) return -1;
79771 return (int)(r*1000.0);
79772 }
79773
79774 /*
79775 ** This routine is callback for sqlite3WalkExpr().
79776 **
@@ -79898,11 +80807,11 @@
79898 ** EVIDENCE-OF: R-36850-34127 The likely(X) function is short-hand for
79899 ** likelihood(X,0.9375).
79900 ** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent to
79901 ** likelihood(X,0.9375). */
79902 /* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */
79903 pExpr->iTable = pDef->zName[0]=='u' ? 62 : 938;
79904 }
79905 }
79906 #ifndef SQLITE_OMIT_AUTHORIZATION
79907 auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
79908 if( auth!=SQLITE_OK ){
@@ -81855,69 +82764,79 @@
81855 sqlite3DbFree(db, pList->a);
81856 sqlite3DbFree(db, pList);
81857 }
81858
81859 /*
81860 ** These routines are Walker callbacks. Walker.u.pi is a pointer
81861 ** to an integer. These routines are checking an expression to see
81862 ** if it is a constant. Set *Walker.u.i to 0 if the expression is
81863 ** not constant.
81864 **
81865 ** These callback routines are used to implement the following:
81866 **
81867 ** sqlite3ExprIsConstant() pWalker->u.i==1
81868 ** sqlite3ExprIsConstantNotJoin() pWalker->u.i==2
81869 ** sqlite3ExprIsConstantOrFunction() pWalker->u.i==3 or 4
 
 
 
 
81870 **
81871 ** The sqlite3ExprIsConstantOrFunction() is used for evaluating expressions
81872 ** in a CREATE TABLE statement. The Walker.u.i value is 4 when parsing
81873 ** an existing schema and 3 when processing a new statement. A bound
81874 ** parameter raises an error for new statements, but is silently converted
81875 ** to NULL for existing schemas. This allows sqlite_master tables that
81876 ** contain a bound parameter because they were generated by older versions
81877 ** of SQLite to be parsed by newer versions of SQLite without raising a
81878 ** malformed schema error.
81879 */
81880 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
81881
81882 /* If pWalker->u.i is 2 then any term of the expression that comes from
81883 ** the ON or USING clauses of a join disqualifies the expression
81884 ** from being considered constant. */
81885 if( pWalker->u.i==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
81886 pWalker->u.i = 0;
81887 return WRC_Abort;
81888 }
81889
81890 switch( pExpr->op ){
81891 /* Consider functions to be constant if all their arguments are constant
81892 ** and either pWalker->u.i==3 or 4 or the function as the SQLITE_FUNC_CONST
81893 ** flag. */
81894 case TK_FUNCTION:
81895 if( pWalker->u.i>=3 || ExprHasProperty(pExpr,EP_Constant) ){
81896 return WRC_Continue;
 
 
 
81897 }
81898 /* Fall through */
81899 case TK_ID:
81900 case TK_COLUMN:
81901 case TK_AGG_FUNCTION:
81902 case TK_AGG_COLUMN:
81903 testcase( pExpr->op==TK_ID );
81904 testcase( pExpr->op==TK_COLUMN );
81905 testcase( pExpr->op==TK_AGG_FUNCTION );
81906 testcase( pExpr->op==TK_AGG_COLUMN );
81907 pWalker->u.i = 0;
81908 return WRC_Abort;
 
 
 
 
81909 case TK_VARIABLE:
81910 if( pWalker->u.i==4 ){
81911 /* Silently convert bound parameters that appear inside of CREATE
81912 ** statements into a NULL when parsing the CREATE statement text out
81913 ** of the sqlite_master table */
81914 pExpr->op = TK_NULL;
81915 }else if( pWalker->u.i==3 ){
81916 /* A bound parameter in a CREATE statement that originates from
81917 ** sqlite3_prepare() causes an error */
81918 pWalker->u.i = 0;
81919 return WRC_Abort;
81920 }
81921 /* Fall through */
81922 default:
81923 testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
@@ -81925,57 +82844,68 @@
81925 return WRC_Continue;
81926 }
81927 }
81928 static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
81929 UNUSED_PARAMETER(NotUsed);
81930 pWalker->u.i = 0;
81931 return WRC_Abort;
81932 }
81933 static int exprIsConst(Expr *p, int initFlag){
81934 Walker w;
81935 memset(&w, 0, sizeof(w));
81936 w.u.i = initFlag;
81937 w.xExprCallback = exprNodeIsConstant;
81938 w.xSelectCallback = selectNodeIsConstant;
 
81939 sqlite3WalkExpr(&w, p);
81940 return w.u.i;
81941 }
81942
81943 /*
81944 ** Walk an expression tree. Return 1 if the expression is constant
81945 ** and 0 if it involves variables or function calls.
81946 **
81947 ** For the purposes of this function, a double-quoted string (ex: "abc")
81948 ** is considered a variable but a single-quoted string (ex: 'abc') is
81949 ** a constant.
81950 */
81951 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
81952 return exprIsConst(p, 1);
81953 }
81954
81955 /*
81956 ** Walk an expression tree. Return 1 if the expression is constant
81957 ** that does no originate from the ON or USING clauses of a join.
81958 ** Return 0 if it involves variables or function calls or terms from
81959 ** an ON or USING clause.
81960 */
81961 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
81962 return exprIsConst(p, 2);
81963 }
81964
81965 /*
81966 ** Walk an expression tree. Return 1 if the expression is constant
 
 
 
 
 
 
 
 
 
 
81967 ** or a function call with constant arguments. Return and 0 if there
81968 ** are any variables.
81969 **
81970 ** For the purposes of this function, a double-quoted string (ex: "abc")
81971 ** is considered a variable but a single-quoted string (ex: 'abc') is
81972 ** a constant.
81973 */
81974 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
81975 assert( isInit==0 || isInit==1 );
81976 return exprIsConst(p, 3+isInit);
81977 }
81978
81979 /*
81980 ** If the expression p codes a constant integer that is small enough
81981 ** to fit in a 32-bit integer, return 1 and put the value of the integer
@@ -83627,11 +84557,14 @@
83627 target
83628 ));
83629
83630 #ifndef SQLITE_OMIT_FLOATING_POINT
83631 /* If the column has REAL affinity, it may currently be stored as an
83632 ** integer. Use OP_RealAffinity to make sure it is really real. */
 
 
 
83633 if( pExpr->iColumn>=0
83634 && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
83635 ){
83636 sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
83637 }
@@ -87279,27 +88212,32 @@
87279 aLog[i] = sqlite3LogEst(v);
87280 #endif
87281 if( *z==' ' ) z++;
87282 }
87283 #ifndef SQLITE_ENABLE_STAT3_OR_STAT4
87284 assert( pIndex!=0 );
87285 #else
87286 if( pIndex )
87287 #endif
87288 while( z[0] ){
87289 if( sqlite3_strglob("unordered*", z)==0 ){
87290 pIndex->bUnordered = 1;
87291 }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
87292 pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
87293 }
 
 
 
 
87294 #ifdef SQLITE_ENABLE_COSTMULT
87295 else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){
87296 pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9));
 
 
 
 
87297 }
87298 #endif
87299 while( z[0]!=0 && z[0]!=' ' ) z++;
87300 while( z[0]==' ' ) z++;
87301 }
87302 }
87303
87304 /*
87305 ** This callback is invoked once for each index when reading the
@@ -87421,10 +88359,11 @@
87421 nSample--;
87422 }else{
87423 nRow = pIdx->aiRowEst[0];
87424 nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1];
87425 }
 
87426
87427 /* Set nSum to the number of distinct (iCol+1) field prefixes that
87428 ** occur in the stat4 table for this index. Set sumEq to the sum of
87429 ** the nEq values for column iCol for the same set (adding the value
87430 ** only once where there exist duplicate prefixes). */
@@ -87682,11 +88621,11 @@
87682 }
87683
87684
87685 /* Load the statistics from the sqlite_stat4 table. */
87686 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
87687 if( rc==SQLITE_OK ){
87688 int lookasideEnabled = db->lookaside.bEnabled;
87689 db->lookaside.bEnabled = 0;
87690 rc = loadStat4(db, sInfo.zDatabase);
87691 db->lookaside.bEnabled = lookasideEnabled;
87692 }
@@ -88364,10 +89303,13 @@
88364 SQLITE_API int sqlite3_set_authorizer(
88365 sqlite3 *db,
88366 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
88367 void *pArg
88368 ){
 
 
 
88369 sqlite3_mutex_enter(db->mutex);
88370 db->xAuth = (sqlite3_xauth)xAuth;
88371 db->pAuthArg = pArg;
88372 sqlite3ExpirePreparedStatements(db);
88373 sqlite3_mutex_leave(db->mutex);
@@ -88858,11 +89800,15 @@
88858 ** See also sqlite3LocateTable().
88859 */
88860 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
88861 Table *p = 0;
88862 int i;
88863 assert( zName!=0 );
 
 
 
 
88864 /* All mutexes are required for schema access. Make sure we hold them. */
88865 assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
88866 #if SQLITE_USER_AUTHENTICATION
88867 /* Only the admin user is allowed to know that the sqlite_user table
88868 ** exists */
@@ -94322,12 +95268,12 @@
94322 break;
94323 }
94324 default: {
94325 /* Because sqlite3_value_double() returns 0.0 if the argument is not
94326 ** something that can be converted into a number, we have:
94327 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
94328 ** cannot be converted to a numeric value.
94329 */
94330 double rVal = sqlite3_value_double(argv[0]);
94331 if( rVal<0 ) rVal = -rVal;
94332 sqlite3_result_double(context, rVal);
94333 break;
@@ -103881,13 +104827,16 @@
103881 Vdbe *pOld, /* VM being reprepared */
103882 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
103883 const char **pzTail /* OUT: End of parsed string */
103884 ){
103885 int rc;
103886 assert( ppStmt!=0 );
 
 
 
103887 *ppStmt = 0;
103888 if( !sqlite3SafetyCheckOk(db) ){
103889 return SQLITE_MISUSE_BKPT;
103890 }
103891 sqlite3_mutex_enter(db->mutex);
103892 sqlite3BtreeEnterAll(db);
103893 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
@@ -103990,13 +104939,15 @@
103990 */
103991 char *zSql8;
103992 const char *zTail8 = 0;
103993 int rc = SQLITE_OK;
103994
103995 assert( ppStmt );
 
 
103996 *ppStmt = 0;
103997 if( !sqlite3SafetyCheckOk(db) ){
103998 return SQLITE_MISUSE_BKPT;
103999 }
104000 if( nBytes>=0 ){
104001 int sz;
104002 const char *z = (const char*)zSql;
@@ -109705,10 +110656,13 @@
109705 char **pzErrMsg /* Write error messages here */
109706 ){
109707 int rc;
109708 TabResult res;
109709
 
 
 
109710 *pazResult = 0;
109711 if( pnColumn ) *pnColumn = 0;
109712 if( pnRow ) *pnRow = 0;
109713 if( pzErrMsg ) *pzErrMsg = 0;
109714 res.zErrMsg = 0;
@@ -111768,11 +112722,11 @@
111768 ** Two writes per page are required in step (3) because the original
111769 ** database content must be written into the rollback journal prior to
111770 ** overwriting the database with the vacuumed content.
111771 **
111772 ** Only 1x temporary space and only 1x writes would be required if
111773 ** the copy of step (3) were replace by deleting the original database
111774 ** and renaming the transient database as the original. But that will
111775 ** not work if other processes are attached to the original database.
111776 ** And a power loss in between deleting the original and renaming the
111777 ** transient would cause the database file to appear to be deleted
111778 ** following reboot.
@@ -112126,10 +113080,13 @@
112126 sqlite3 *db, /* Database in which module is registered */
112127 const char *zName, /* Name assigned to this module */
112128 const sqlite3_module *pModule, /* The definition of the module */
112129 void *pAux /* Context pointer for xCreate/xConnect */
112130 ){
 
 
 
112131 return createModule(db, zName, pModule, pAux, 0);
112132 }
112133
112134 /*
112135 ** External API function used to create a new virtual-table module.
@@ -112139,10 +113096,13 @@
112139 const char *zName, /* Name assigned to this module */
112140 const sqlite3_module *pModule, /* The definition of the module */
112141 void *pAux, /* Context pointer for xCreate/xConnect */
112142 void (*xDestroy)(void *) /* Module destructor function */
112143 ){
 
 
 
112144 return createModule(db, zName, pModule, pAux, xDestroy);
112145 }
112146
112147 /*
112148 ** Lock the virtual table so that it cannot be disconnected.
@@ -112371,11 +113331,16 @@
112371 pTable->tabFlags |= TF_Virtual;
112372 pTable->nModuleArg = 0;
112373 addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
112374 addModuleArgument(db, pTable, 0);
112375 addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
112376 pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
 
 
 
 
 
112377
112378 #ifndef SQLITE_OMIT_AUTHORIZATION
112379 /* Creating a virtual table invokes the authorization callback twice.
112380 ** The first invocation, to obtain permission to INSERT a row into the
112381 ** sqlite_master table, has already been made by sqlite3StartTable().
@@ -112743,10 +113708,13 @@
112743
112744 int rc = SQLITE_OK;
112745 Table *pTab;
112746 char *zErr = 0;
112747
 
 
 
112748 sqlite3_mutex_enter(db->mutex);
112749 if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
112750 sqlite3Error(db, SQLITE_MISUSE);
112751 sqlite3_mutex_leave(db->mutex);
112752 return SQLITE_MISUSE_BKPT;
@@ -113099,10 +114067,13 @@
113099 */
113100 SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
113101 static const unsigned char aMap[] = {
113102 SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE
113103 };
 
 
 
113104 assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
113105 assert( OE_Ignore==4 && OE_Replace==5 );
113106 assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
113107 return (int)aMap[db->vtabOnConflict-1];
113108 }
@@ -113114,12 +114085,14 @@
113114 */
113115 SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
113116 va_list ap;
113117 int rc = SQLITE_OK;
113118
 
 
 
113119 sqlite3_mutex_enter(db->mutex);
113120
113121 va_start(ap, op);
113122 switch( op ){
113123 case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
113124 VtabCtx *p = db->pVtabCtx;
113125 if( !p ){
@@ -113250,10 +114223,13 @@
113250 } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */
113251 Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
113252 } u;
113253 struct WhereLoop *pWLoop; /* The selected WhereLoop object */
113254 Bitmask notReady; /* FROM entries not usable at this level */
 
 
 
113255 };
113256
113257 /*
113258 ** Each instance of this object represents an algorithm for evaluating one
113259 ** term of a join. Every term of the FROM clause will have at least
@@ -113280,11 +114256,10 @@
113280 LogEst rRun; /* Cost of running each loop */
113281 LogEst nOut; /* Estimated number of output rows */
113282 union {
113283 struct { /* Information for internal btree tables */
113284 u16 nEq; /* Number of equality constraints */
113285 u16 nSkip; /* Number of initial index columns to skip */
113286 Index *pIndex; /* Index used, or NULL */
113287 } btree;
113288 struct { /* Information for virtual tables */
113289 int idxNum; /* Index number */
113290 u8 needFree; /* True if sqlite3_free(idxStr) is needed */
@@ -113293,16 +114268,17 @@
113293 char *idxStr; /* Index identifier string */
113294 } vtab;
113295 } u;
113296 u32 wsFlags; /* WHERE_* flags describing the plan */
113297 u16 nLTerm; /* Number of entries in aLTerm[] */
 
113298 /**** whereLoopXfer() copies fields above ***********************/
113299 # define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot)
113300 u16 nLSlot; /* Number of slots allocated for aLTerm[] */
113301 WhereTerm **aLTerm; /* WhereTerms used */
113302 WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */
113303 WhereTerm *aLTermSpace[4]; /* Initial aLTerm[] space */
113304 };
113305
113306 /* This object holds the prerequisites and the cost of running a
113307 ** subquery on one operand of an OR operator in the WHERE clause.
113308 ** See WhereOrSet for additional information
@@ -113624,10 +114600,11 @@
113624 #define WHERE_ONEROW 0x00001000 /* Selects no more than one row */
113625 #define WHERE_MULTI_OR 0x00002000 /* OR using multiple indices */
113626 #define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */
113627 #define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */
113628 #define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/
 
113629
113630 /************** End of whereInt.h ********************************************/
113631 /************** Continuing where we left off in where.c **********************/
113632
113633 /*
@@ -113834,11 +114811,11 @@
113834 }
113835 pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
113836 }
113837 pTerm = &pWC->a[idx = pWC->nTerm++];
113838 if( p && ExprHasProperty(p, EP_Unlikely) ){
113839 pTerm->truthProb = sqlite3LogEst(p->iTable) - 99;
113840 }else{
113841 pTerm->truthProb = 1;
113842 }
113843 pTerm->pExpr = sqlite3ExprSkipCollate(p);
113844 pTerm->wtFlags = wtFlags;
@@ -114364,10 +115341,19 @@
114364 if( pDerived ){
114365 pDerived->flags |= pBase->flags & EP_FromJoin;
114366 pDerived->iRightJoinTable = pBase->iRightJoinTable;
114367 }
114368 }
 
 
 
 
 
 
 
 
 
114369
114370 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
114371 /*
114372 ** Analyze a term that consists of two or more OR-connected
114373 ** subterms. So in:
@@ -114662,12 +115648,11 @@
114662 pNew->x.pList = pList;
114663 idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
114664 testcase( idxNew==0 );
114665 exprAnalyze(pSrc, pWC, idxNew);
114666 pTerm = &pWC->a[idxTerm];
114667 pWC->a[idxNew].iParent = idxTerm;
114668 pTerm->nChild = 1;
114669 }else{
114670 sqlite3ExprListDelete(db, pList);
114671 }
114672 pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */
114673 }
@@ -114765,13 +115750,12 @@
114765 return;
114766 }
114767 idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
114768 if( idxNew==0 ) return;
114769 pNew = &pWC->a[idxNew];
114770 pNew->iParent = idxTerm;
114771 pTerm = &pWC->a[idxTerm];
114772 pTerm->nChild = 1;
114773 pTerm->wtFlags |= TERM_COPIED;
114774 if( pExpr->op==TK_EQ
114775 && !ExprHasProperty(pExpr, EP_FromJoin)
114776 && OptimizationEnabled(db, SQLITE_Transitive)
114777 ){
@@ -114824,13 +115808,12 @@
114824 transferJoinMarkings(pNewExpr, pExpr);
114825 idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
114826 testcase( idxNew==0 );
114827 exprAnalyze(pSrc, pWC, idxNew);
114828 pTerm = &pWC->a[idxTerm];
114829 pWC->a[idxNew].iParent = idxTerm;
114830 }
114831 pTerm->nChild = 2;
114832 }
114833 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
114834
114835 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
114836 /* Analyze a term that is composed of two or more subterms connected by
@@ -114901,13 +115884,12 @@
114901 idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
114902 testcase( idxNew2==0 );
114903 exprAnalyze(pSrc, pWC, idxNew2);
114904 pTerm = &pWC->a[idxTerm];
114905 if( isComplete ){
114906 pWC->a[idxNew1].iParent = idxTerm;
114907 pWC->a[idxNew2].iParent = idxTerm;
114908 pTerm->nChild = 2;
114909 }
114910 }
114911 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
114912
114913 #ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -114936,13 +115918,12 @@
114936 pNewTerm = &pWC->a[idxNew];
114937 pNewTerm->prereqRight = prereqExpr;
114938 pNewTerm->leftCursor = pLeft->iTable;
114939 pNewTerm->u.leftColumn = pLeft->iColumn;
114940 pNewTerm->eOperator = WO_MATCH;
114941 pNewTerm->iParent = idxTerm;
114942 pTerm = &pWC->a[idxTerm];
114943 pTerm->nChild = 1;
114944 pTerm->wtFlags |= TERM_COPIED;
114945 pNewTerm->prereqAll = pTerm->prereqAll;
114946 }
114947 }
114948 #endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -114959,11 +115940,11 @@
114959 ** the start of the loop will prevent any results from being returned.
114960 */
114961 if( pExpr->op==TK_NOTNULL
114962 && pExpr->pLeft->op==TK_COLUMN
114963 && pExpr->pLeft->iColumn>=0
114964 && OptimizationEnabled(db, SQLITE_Stat3)
114965 ){
114966 Expr *pNewExpr;
114967 Expr *pLeft = pExpr->pLeft;
114968 int idxNew;
114969 WhereTerm *pNewTerm;
@@ -114978,13 +115959,12 @@
114978 pNewTerm = &pWC->a[idxNew];
114979 pNewTerm->prereqRight = 0;
114980 pNewTerm->leftCursor = pLeft->iTable;
114981 pNewTerm->u.leftColumn = pLeft->iColumn;
114982 pNewTerm->eOperator = WO_GT;
114983 pNewTerm->iParent = idxTerm;
114984 pTerm = &pWC->a[idxTerm];
114985 pTerm->nChild = 1;
114986 pTerm->wtFlags |= TERM_COPIED;
114987 pNewTerm->prereqAll = pTerm->prereqAll;
114988 }
114989 }
114990 #endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
@@ -115200,10 +116180,12 @@
115200 WhereLoop *pLoop; /* The Loop object */
115201 char *zNotUsed; /* Extra space on the end of pIdx */
115202 Bitmask idxCols; /* Bitmap of columns used for indexing */
115203 Bitmask extraCols; /* Bitmap of additional columns */
115204 u8 sentWarning = 0; /* True if a warnning has been issued */
 
 
115205
115206 /* Generate code to skip over the creation and initialization of the
115207 ** transient index on 2nd and subsequent iterations of the loop. */
115208 v = pParse->pVdbe;
115209 assert( v!=0 );
@@ -115215,10 +116197,16 @@
115215 pTable = pSrc->pTab;
115216 pWCEnd = &pWC->a[pWC->nTerm];
115217 pLoop = pLevel->pWLoop;
115218 idxCols = 0;
115219 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
 
 
 
 
 
 
115220 if( termCanDriveIndex(pTerm, pSrc, notReady) ){
115221 int iCol = pTerm->u.leftColumn;
115222 Bitmask cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol);
115223 testcase( iCol==BMS );
115224 testcase( iCol==BMS-1 );
@@ -115227,11 +116215,13 @@
115227 "automatic index on %s(%s)", pTable->zName,
115228 pTable->aCol[iCol].zName);
115229 sentWarning = 1;
115230 }
115231 if( (idxCols & cMask)==0 ){
115232 if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ) return;
 
 
115233 pLoop->aLTerm[nKeyCol++] = pTerm;
115234 idxCols |= cMask;
115235 }
115236 }
115237 }
@@ -115247,24 +116237,23 @@
115247 ** be a covering index because the index will not be updated if the
115248 ** original table changes and the index and table cannot both be used
115249 ** if they go out of sync.
115250 */
115251 extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1));
115252 mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
115253 testcase( pTable->nCol==BMS-1 );
115254 testcase( pTable->nCol==BMS-2 );
115255 for(i=0; i<mxBitCol; i++){
115256 if( extraCols & MASKBIT(i) ) nKeyCol++;
115257 }
115258 if( pSrc->colUsed & MASKBIT(BMS-1) ){
115259 nKeyCol += pTable->nCol - BMS + 1;
115260 }
115261 pLoop->wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY;
115262
115263 /* Construct the Index object to describe this index */
115264 pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+1, 0, &zNotUsed);
115265 if( pIdx==0 ) return;
115266 pLoop->u.btree.pIndex = pIdx;
115267 pIdx->zName = "auto-index";
115268 pIdx->pTable = pTable;
115269 n = 0;
115270 idxCols = 0;
@@ -115312,22 +116301,33 @@
115312 sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
115313 sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
115314 VdbeComment((v, "for %s", pTable->zName));
115315
115316 /* Fill the automatic index with content */
 
115317 addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v);
 
 
 
 
 
115318 regRecord = sqlite3GetTempReg(pParse);
115319 sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0);
115320 sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
115321 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
 
115322 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
115323 sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
115324 sqlite3VdbeJumpHere(v, addrTop);
115325 sqlite3ReleaseTempReg(pParse, regRecord);
 
115326
115327 /* Jump here when skipping the initialization */
115328 sqlite3VdbeJumpHere(v, addrInit);
 
 
 
115329 }
115330 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
115331
115332 #ifndef SQLITE_OMIT_VIRTUALTABLE
115333 /*
@@ -115483,22 +116483,22 @@
115483
115484 return pParse->nErr;
115485 }
115486 #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */
115487
115488
115489 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
115490 /*
115491 ** Estimate the location of a particular key among all keys in an
115492 ** index. Store the results in aStat as follows:
115493 **
115494 ** aStat[0] Est. number of rows less than pVal
115495 ** aStat[1] Est. number of rows equal to pVal
115496 **
115497 ** Return SQLITE_OK on success.
 
115498 */
115499 static void whereKeyStats(
115500 Parse *pParse, /* Database connection */
115501 Index *pIdx, /* Index to consider domain of */
115502 UnpackedRecord *pRec, /* Vector of values to consider */
115503 int roundUp, /* Round up if true. Round down if false */
115504 tRowcnt *aStat /* OUT: stats written here */
@@ -115576,10 +116576,11 @@
115576 }else{
115577 iGap = iGap/3;
115578 }
115579 aStat[0] = iLower + iGap;
115580 }
 
115581 }
115582 #endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
115583
115584 /*
115585 ** If it is not NULL, pTerm is a term that provides an upper or lower
@@ -115726,11 +116727,11 @@
115726 ** pLower pUpper
115727 **
115728 ** If either of the upper or lower bound is not present, then NULL is passed in
115729 ** place of the corresponding WhereTerm.
115730 **
115731 ** The value in (pBuilder->pNew->u.btree.nEq) is the index of the index
115732 ** column subject to the range constraint. Or, equivalently, the number of
115733 ** equality constraints optimized by the proposed index scan. For example,
115734 ** assuming index p is on t1(a, b), and the SQL query is:
115735 **
115736 ** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
@@ -115742,11 +116743,11 @@
115742 **
115743 ** then nEq is set to 0.
115744 **
115745 ** When this function is called, *pnOut is set to the sqlite3LogEst() of the
115746 ** number of rows that the index scan is expected to visit without
115747 ** considering the range constraints. If nEq is 0, this is the number of
115748 ** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced)
115749 ** to account for the range constraints pLower and pUpper.
115750 **
115751 ** In the absence of sqlite_stat4 ANALYZE data, or if such data cannot be
115752 ** used, a single range inequality reduces the search space by a factor of 4.
@@ -115766,14 +116767,11 @@
115766
115767 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
115768 Index *p = pLoop->u.btree.pIndex;
115769 int nEq = pLoop->u.btree.nEq;
115770
115771 if( p->nSample>0
115772 && nEq<p->nSampleCol
115773 && OptimizationEnabled(pParse->db, SQLITE_Stat3)
115774 ){
115775 if( nEq==pBuilder->nRecValid ){
115776 UnpackedRecord *pRec = pBuilder->pRec;
115777 tRowcnt a[2];
115778 u8 aff;
115779
@@ -115785,19 +116783,23 @@
115785 **
115786 ** Or, if pLower is NULL or $L cannot be extracted from it (because it
115787 ** is not a simple variable or literal value), the lower bound of the
115788 ** range is $P. Due to a quirk in the way whereKeyStats() works, even
115789 ** if $L is available, whereKeyStats() is called for both ($P) and
115790 ** ($P:$L) and the larger of the two returned values used.
115791 **
115792 ** Similarly, iUpper is to be set to the estimate of the number of rows
115793 ** less than the upper bound of the range query. Where the upper bound
115794 ** is either ($P) or ($P:$U). Again, even if $U is available, both values
115795 ** of iUpper are requested of whereKeyStats() and the smaller used.
 
 
115796 */
115797 tRowcnt iLower;
115798 tRowcnt iUpper;
 
 
115799
115800 if( pRec ){
115801 testcase( pRec->nField!=pBuilder->nRecValid );
115802 pRec->nField = pBuilder->nRecValid;
115803 }
@@ -115807,11 +116809,11 @@
115807 aff = p->pTable->aCol[p->aiColumn[nEq]].affinity;
115808 }
115809 /* Determine iLower and iUpper using ($P) only. */
115810 if( nEq==0 ){
115811 iLower = 0;
115812 iUpper = sqlite3LogEstToInt(p->aiRowLogEst[0]);
115813 }else{
115814 /* Note: this call could be optimized away - since the same values must
115815 ** have been requested when testing key $P in whereEqualScanEst(). */
115816 whereKeyStats(pParse, p, pRec, 0, a);
115817 iLower = a[0];
@@ -115831,11 +116833,11 @@
115831 int bOk; /* True if value is extracted from pExpr */
115832 Expr *pExpr = pLower->pExpr->pRight;
115833 rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
115834 if( rc==SQLITE_OK && bOk ){
115835 tRowcnt iNew;
115836 whereKeyStats(pParse, p, pRec, 0, a);
115837 iNew = a[0] + ((pLower->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
115838 if( iNew>iLower ) iLower = iNew;
115839 nOut--;
115840 pLower = 0;
115841 }
@@ -115846,11 +116848,11 @@
115846 int bOk; /* True if value is extracted from pExpr */
115847 Expr *pExpr = pUpper->pExpr->pRight;
115848 rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
115849 if( rc==SQLITE_OK && bOk ){
115850 tRowcnt iNew;
115851 whereKeyStats(pParse, p, pRec, 1, a);
115852 iNew = a[0] + ((pUpper->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
115853 if( iNew<iUpper ) iUpper = iNew;
115854 nOut--;
115855 pUpper = 0;
115856 }
@@ -115858,10 +116860,15 @@
115858
115859 pBuilder->pRec = pRec;
115860 if( rc==SQLITE_OK ){
115861 if( iUpper>iLower ){
115862 nNew = sqlite3LogEst(iUpper - iLower);
 
 
 
 
 
115863 }else{
115864 nNew = 10; assert( 10==sqlite3LogEst(2) );
115865 }
115866 if( nNew<nOut ){
115867 nOut = nNew;
@@ -115882,16 +116889,19 @@
115882 #endif
115883 assert( pUpper==0 || (pUpper->wtFlags & TERM_VNULL)==0 );
115884 nNew = whereRangeAdjust(pLower, nOut);
115885 nNew = whereRangeAdjust(pUpper, nNew);
115886
115887 /* TUNING: If there is both an upper and lower limit, assume the range is
 
115888 ** reduced by an additional 75%. This means that, by default, an open-ended
115889 ** range query (e.g. col > ?) is assumed to match 1/4 of the rows in the
115890 ** index. While a closed range (e.g. col BETWEEN ? AND ?) is estimated to
115891 ** match 1/64 of the index. */
115892 if( pLower && pUpper ) nNew -= 20;
 
 
115893
115894 nOut -= (pLower!=0) + (pUpper!=0);
115895 if( nNew<10 ) nNew = 10;
115896 if( nNew<nOut ) nOut = nNew;
115897 #if defined(WHERETRACE_ENABLED)
@@ -116247,11 +117257,11 @@
116247
116248 /* This module is only called on query plans that use an index. */
116249 pLoop = pLevel->pWLoop;
116250 assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 );
116251 nEq = pLoop->u.btree.nEq;
116252 nSkip = pLoop->u.btree.nSkip;
116253 pIdx = pLoop->u.btree.pIndex;
116254 assert( pIdx!=0 );
116255
116256 /* Figure out how many memory cells we will need then allocate them.
116257 */
@@ -116361,11 +117371,11 @@
116361 ** "a=? AND b>?"
116362 */
116363 static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){
116364 Index *pIndex = pLoop->u.btree.pIndex;
116365 u16 nEq = pLoop->u.btree.nEq;
116366 u16 nSkip = pLoop->u.btree.nSkip;
116367 int i, j;
116368 Column *aCol = pTab->aCol;
116369 i16 *aiColumn = pIndex->aiColumn;
116370
116371 if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
@@ -116392,23 +117402,27 @@
116392 sqlite3StrAccumAppend(pStr, ")", 1);
116393 }
116394
116395 /*
116396 ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
116397 ** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
116398 ** record is added to the output to describe the table scan strategy in
116399 ** pLevel.
 
 
 
116400 */
116401 static void explainOneScan(
116402 Parse *pParse, /* Parse context */
116403 SrcList *pTabList, /* Table list this loop refers to */
116404 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
116405 int iLevel, /* Value for "level" column of output */
116406 int iFrom, /* Value for "from" column of output */
116407 u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */
116408 ){
116409 #ifndef SQLITE_DEBUG
 
116410 if( pParse->explain==2 )
116411 #endif
116412 {
116413 struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
116414 Vdbe *v = pParse->pVdbe; /* VM being constructed */
@@ -116421,11 +117435,11 @@
116421 StrAccum str; /* EQP output string */
116422 char zBuf[100]; /* Initial space for EQP output string */
116423
116424 pLoop = pLevel->pWLoop;
116425 flags = pLoop->wsFlags;
116426 if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
116427
116428 isSearch = (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
116429 || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
116430 || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
116431
@@ -116450,10 +117464,12 @@
116450 assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) );
116451 if( !HasRowid(pItem->pTab) && IsPrimaryKeyIndex(pIdx) ){
116452 if( isSearch ){
116453 zFmt = "PRIMARY KEY";
116454 }
 
 
116455 }else if( flags & WHERE_AUTO_INDEX ){
116456 zFmt = "AUTOMATIC COVERING INDEX";
116457 }else if( flags & WHERE_IDX_ONLY ){
116458 zFmt = "COVERING INDEX %s";
116459 }else{
@@ -116491,16 +117507,49 @@
116491 }else{
116492 sqlite3StrAccumAppend(&str, " (~1 row)", 9);
116493 }
116494 #endif
116495 zMsg = sqlite3StrAccumFinish(&str);
116496 sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
116497 }
 
116498 }
116499 #else
116500 # define explainOneScan(u,v,w,x,y,z)
116501 #endif /* SQLITE_OMIT_EXPLAIN */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116502
116503
116504 /*
116505 ** Generate code for the start of the iLevel-th loop in the WHERE clause
116506 ** implementation described by pWInfo.
@@ -116798,11 +117847,11 @@
116798 u8 bSeekPastNull = 0; /* True to seek past initial nulls */
116799 u8 bStopAtNull = 0; /* Add condition to terminate at NULLs */
116800
116801 pIdx = pLoop->u.btree.pIndex;
116802 iIdxCur = pLevel->iIdxCur;
116803 assert( nEq>=pLoop->u.btree.nSkip );
116804
116805 /* If this loop satisfies a sort order (pOrderBy) request that
116806 ** was passed to this function to implement a "SELECT min(x) ..."
116807 ** query, then the caller will only allow the loop to run for
116808 ** a single iteration. This means that the first row returned
@@ -116815,11 +117864,11 @@
116815 || (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 );
116816 if( (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)!=0
116817 && pWInfo->nOBSat>0
116818 && (pIdx->nKeyCol>nEq)
116819 ){
116820 assert( pLoop->u.btree.nSkip==0 );
116821 bSeekPastNull = 1;
116822 nExtraReg = 1;
116823 }
116824
116825 /* Find any inequality constraint terms for the start and end
@@ -117164,13 +118213,15 @@
117164 pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
117165 wctrlFlags, iCovCur);
117166 assert( pSubWInfo || pParse->nErr || db->mallocFailed );
117167 if( pSubWInfo ){
117168 WhereLoop *pSubLoop;
117169 explainOneScan(
117170 pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
117171 );
 
 
117172 /* This is the sub-WHERE clause body. First skip over
117173 ** duplicate rows from prior sub-WHERE clauses, and record the
117174 ** rowid (or PRIMARY KEY) for the current row so that the same
117175 ** row will be skipped in subsequent sub-WHERE clauses.
117176 */
@@ -117296,10 +118347,14 @@
117296 VdbeCoverageIf(v, bRev==0);
117297 VdbeCoverageIf(v, bRev!=0);
117298 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
117299 }
117300 }
 
 
 
 
117301
117302 /* Insert code to test every subexpression that can be completely
117303 ** computed using the current set of tables.
117304 */
117305 for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
@@ -117436,11 +118491,11 @@
117436 }
117437 sqlite3DebugPrintf(" %-19s", z);
117438 sqlite3_free(z);
117439 }
117440 if( p->wsFlags & WHERE_SKIPSCAN ){
117441 sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->u.btree.nSkip);
117442 }else{
117443 sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
117444 }
117445 sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
117446 if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
@@ -117547,34 +118602,41 @@
117547 sqlite3DbFree(db, pWInfo);
117548 }
117549 }
117550
117551 /*
117552 ** Return TRUE if both of the following are true:
117553 **
117554 ** (1) X has the same or lower cost that Y
117555 ** (2) X is a proper subset of Y
 
117556 **
117557 ** By "proper subset" we mean that X uses fewer WHERE clause terms
117558 ** than Y and that every WHERE clause term used by X is also used
117559 ** by Y.
117560 **
117561 ** If X is a proper subset of Y then Y is a better choice and ought
117562 ** to have a lower cost. This routine returns TRUE when that cost
117563 ** relationship is inverted and needs to be adjusted.
 
 
117564 */
117565 static int whereLoopCheaperProperSubset(
117566 const WhereLoop *pX, /* First WhereLoop to compare */
117567 const WhereLoop *pY /* Compare against this WhereLoop */
117568 ){
117569 int i, j;
117570 if( pX->nLTerm >= pY->nLTerm ) return 0; /* X is not a subset of Y */
 
 
 
117571 if( pX->rRun >= pY->rRun ){
117572 if( pX->rRun > pY->rRun ) return 0; /* X costs more than Y */
117573 if( pX->nOut > pY->nOut ) return 0; /* X costs more than Y */
117574 }
117575 for(i=pX->nLTerm-1; i>=0; i--){
 
117576 for(j=pY->nLTerm-1; j>=0; j--){
117577 if( pY->aLTerm[j]==pX->aLTerm[i] ) break;
117578 }
117579 if( j<0 ) return 0; /* X not a subset of Y since term X[i] not used by Y */
117580 }
@@ -117592,37 +118654,28 @@
117592 ** is a proper subset.
117593 **
117594 ** To say "WhereLoop X is a proper subset of Y" means that X uses fewer
117595 ** WHERE clause terms than Y and that every WHERE clause term used by X is
117596 ** also used by Y.
117597 **
117598 ** This adjustment is omitted for SKIPSCAN loops. In a SKIPSCAN loop, the
117599 ** WhereLoop.nLTerm field is not an accurate measure of the number of WHERE
117600 ** clause terms covered, since some of the first nLTerm entries in aLTerm[]
117601 ** will be NULL (because they are skipped). That makes it more difficult
117602 ** to compare the loops. We could add extra code to do the comparison, and
117603 ** perhaps we will someday. But SKIPSCAN is sufficiently uncommon, and this
117604 ** adjustment is sufficient minor, that it is very difficult to construct
117605 ** a test case where the extra code would improve the query plan. Better
117606 ** to avoid the added complexity and just omit cost adjustments to SKIPSCAN
117607 ** loops.
117608 */
117609 static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){
117610 if( (pTemplate->wsFlags & WHERE_INDEXED)==0 ) return;
117611 if( (pTemplate->wsFlags & WHERE_SKIPSCAN)!=0 ) return;
117612 for(; p; p=p->pNextLoop){
117613 if( p->iTab!=pTemplate->iTab ) continue;
117614 if( (p->wsFlags & WHERE_INDEXED)==0 ) continue;
117615 if( (p->wsFlags & WHERE_SKIPSCAN)!=0 ) continue;
117616 if( whereLoopCheaperProperSubset(p, pTemplate) ){
117617 /* Adjust pTemplate cost downward so that it is cheaper than its
117618 ** subset p */
 
 
117619 pTemplate->rRun = p->rRun;
117620 pTemplate->nOut = p->nOut - 1;
117621 }else if( whereLoopCheaperProperSubset(pTemplate, p) ){
117622 /* Adjust pTemplate cost upward so that it is costlier than p since
117623 ** pTemplate is a proper subset of p */
 
 
117624 pTemplate->rRun = p->rRun;
117625 pTemplate->nOut = p->nOut + 1;
117626 }
117627 }
117628 }
@@ -117663,12 +118716,13 @@
117663 ** rSetup. Call this SETUP-INVARIANT */
117664 assert( p->rSetup>=pTemplate->rSetup );
117665
117666 /* Any loop using an appliation-defined index (or PRIMARY KEY or
117667 ** UNIQUE constraint) with one or more == constraints is better
117668 ** than an automatic index. */
117669 if( (p->wsFlags & WHERE_AUTO_INDEX)!=0
 
117670 && (pTemplate->wsFlags & WHERE_INDEXED)!=0
117671 && (pTemplate->wsFlags & WHERE_COLUMN_EQ)!=0
117672 && (p->prereq & pTemplate->prereq)==pTemplate->prereq
117673 ){
117674 break;
@@ -117823,25 +118877,46 @@
117823
117824 /*
117825 ** Adjust the WhereLoop.nOut value downward to account for terms of the
117826 ** WHERE clause that reference the loop but which are not used by an
117827 ** index.
 
 
 
 
 
117828 **
117829 ** In the current implementation, the first extra WHERE clause term reduces
117830 ** the number of output rows by a factor of 10 and each additional term
117831 ** reduces the number of output rows by sqrt(2).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117832 */
117833 static void whereLoopOutputAdjust(
117834 WhereClause *pWC, /* The WHERE clause */
117835 WhereLoop *pLoop, /* The loop to adjust downward */
117836 LogEst nRow /* Number of rows in the entire table */
117837 ){
117838 WhereTerm *pTerm, *pX;
117839 Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
117840 int i, j;
117841 int nEq = 0; /* Number of = constraints not within likely()/unlikely() */
117842
 
117843 for(i=pWC->nTerm, pTerm=pWC->a; i>0; i--, pTerm++){
117844 if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) break;
117845 if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
117846 if( (pTerm->prereqAll & notAllowed)!=0 ) continue;
117847 for(j=pLoop->nLTerm-1; j>=0; j--){
@@ -117850,24 +118925,30 @@
117850 if( pX==pTerm ) break;
117851 if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break;
117852 }
117853 if( j<0 ){
117854 if( pTerm->truthProb<=0 ){
 
 
117855 pLoop->nOut += pTerm->truthProb;
117856 }else{
 
 
117857 pLoop->nOut--;
117858 if( pTerm->eOperator&WO_EQ ) nEq++;
 
 
 
 
 
 
 
 
117859 }
117860 }
117861 }
117862 /* TUNING: If there is at least one equality constraint in the WHERE
117863 ** clause that does not have a likelihood() explicitly assigned to it
117864 ** then do not let the estimated number of output rows exceed half
117865 ** the number of rows in the table. */
117866 if( nEq && pLoop->nOut>nRow-10 ){
117867 pLoop->nOut = nRow - 10;
117868 }
117869 }
117870
117871 /*
117872 ** Adjust the cost C by the costMult facter T. This only occurs if
117873 ** compiled with -DSQLITE_ENABLE_COSTMULT
@@ -117904,11 +118985,11 @@
117904 int opMask; /* Valid operators for constraints */
117905 WhereScan scan; /* Iterator for WHERE terms */
117906 Bitmask saved_prereq; /* Original value of pNew->prereq */
117907 u16 saved_nLTerm; /* Original value of pNew->nLTerm */
117908 u16 saved_nEq; /* Original value of pNew->u.btree.nEq */
117909 u16 saved_nSkip; /* Original value of pNew->u.btree.nSkip */
117910 u32 saved_wsFlags; /* Original value of pNew->wsFlags */
117911 LogEst saved_nOut; /* Original value of pNew->nOut */
117912 int iCol; /* Index of the column in the table */
117913 int rc = SQLITE_OK; /* Return code */
117914 LogEst rSize; /* Number of rows in the table */
@@ -117933,56 +119014,18 @@
117933 iCol = pProbe->aiColumn[pNew->u.btree.nEq];
117934
117935 pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, iCol,
117936 opMask, pProbe);
117937 saved_nEq = pNew->u.btree.nEq;
117938 saved_nSkip = pNew->u.btree.nSkip;
117939 saved_nLTerm = pNew->nLTerm;
117940 saved_wsFlags = pNew->wsFlags;
117941 saved_prereq = pNew->prereq;
117942 saved_nOut = pNew->nOut;
117943 pNew->rSetup = 0;
117944 rSize = pProbe->aiRowLogEst[0];
117945 rLogSize = estLog(rSize);
117946
117947 /* Consider using a skip-scan if there are no WHERE clause constraints
117948 ** available for the left-most terms of the index, and if the average
117949 ** number of repeats in the left-most terms is at least 18.
117950 **
117951 ** The magic number 18 is selected on the basis that scanning 17 rows
117952 ** is almost always quicker than an index seek (even though if the index
117953 ** contains fewer than 2^17 rows we assume otherwise in other parts of
117954 ** the code). And, even if it is not, it should not be too much slower.
117955 ** On the other hand, the extra seeks could end up being significantly
117956 ** more expensive. */
117957 assert( 42==sqlite3LogEst(18) );
117958 if( saved_nEq==saved_nSkip
117959 && saved_nEq+1<pProbe->nKeyCol
117960 && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */
117961 && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
117962 ){
117963 LogEst nIter;
117964 pNew->u.btree.nEq++;
117965 pNew->u.btree.nSkip++;
117966 pNew->aLTerm[pNew->nLTerm++] = 0;
117967 pNew->wsFlags |= WHERE_SKIPSCAN;
117968 nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1];
117969 if( pTerm ){
117970 /* TUNING: When estimating skip-scan for a term that is also indexable,
117971 ** multiply the cost of the skip-scan by 2.0, to make it a little less
117972 ** desirable than the regular index lookup. */
117973 nIter += 10; assert( 10==sqlite3LogEst(2) );
117974 }
117975 pNew->nOut -= nIter;
117976 /* TUNING: Because uncertainties in the estimates for skip-scan queries,
117977 ** add a 1.375 fudge factor to make skip-scan slightly less likely. */
117978 nIter += 5;
117979 whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul);
117980 pNew->nOut = saved_nOut;
117981 pNew->u.btree.nEq = saved_nEq;
117982 pNew->u.btree.nSkip = saved_nSkip;
117983 }
117984 for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){
117985 u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */
117986 LogEst rCostIdx;
117987 LogEst nOutUnadjusted; /* nOut before IN() and WHERE adjustments */
117988 int nIn = 0;
@@ -118073,11 +119116,10 @@
118073 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
118074 tRowcnt nOut = 0;
118075 if( nInMul==0
118076 && pProbe->nSample
118077 && pNew->u.btree.nEq<=pProbe->nSampleCol
118078 && OptimizationEnabled(db, SQLITE_Stat3)
118079 && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect))
118080 ){
118081 Expr *pExpr = pTerm->pExpr;
118082 if( (eOp & (WO_EQ|WO_ISNULL))!=0 ){
118083 testcase( eOp & WO_EQ );
@@ -118141,14 +119183,49 @@
118141 pBuilder->nRecValid = nRecValid;
118142 #endif
118143 }
118144 pNew->prereq = saved_prereq;
118145 pNew->u.btree.nEq = saved_nEq;
118146 pNew->u.btree.nSkip = saved_nSkip;
118147 pNew->wsFlags = saved_wsFlags;
118148 pNew->nOut = saved_nOut;
118149 pNew->nLTerm = saved_nLTerm;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118150 return rc;
118151 }
118152
118153 /*
118154 ** Return True if it is possible that pIndex might be useful in
@@ -118323,11 +119400,11 @@
118323 WhereTerm *pWCEnd = pWC->a + pWC->nTerm;
118324 for(pTerm=pWC->a; rc==SQLITE_OK && pTerm<pWCEnd; pTerm++){
118325 if( pTerm->prereqRight & pNew->maskSelf ) continue;
118326 if( termCanDriveIndex(pTerm, pSrc, 0) ){
118327 pNew->u.btree.nEq = 1;
118328 pNew->u.btree.nSkip = 0;
118329 pNew->u.btree.pIndex = 0;
118330 pNew->nLTerm = 1;
118331 pNew->aLTerm[0] = pTerm;
118332 /* TUNING: One-time cost for computing the automatic index is
118333 ** estimated to be X*N*log2(N) where N is the number of rows in
@@ -118364,11 +119441,11 @@
118364 testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */
118365 continue; /* Partial index inappropriate for this query */
118366 }
118367 rSize = pProbe->aiRowLogEst[0];
118368 pNew->u.btree.nEq = 0;
118369 pNew->u.btree.nSkip = 0;
118370 pNew->nLTerm = 0;
118371 pNew->iSortIdx = 0;
118372 pNew->rSetup = 0;
118373 pNew->prereq = mExtra;
118374 pNew->nOut = rSize;
@@ -118914,11 +119991,11 @@
118914 for(j=0; j<nColumn; j++){
118915 u8 bOnce; /* True to run the ORDER BY search loop */
118916
118917 /* Skip over == and IS NULL terms */
118918 if( j<pLoop->u.btree.nEq
118919 && pLoop->u.btree.nSkip==0
118920 && ((i = pLoop->aLTerm[j]->eOperator) & (WO_EQ|WO_ISNULL))!=0
118921 ){
118922 if( i & WO_ISNULL ){
118923 testcase( isOrderDistinct );
118924 isOrderDistinct = 0;
@@ -119368,11 +120445,11 @@
119368 }
119369 }
119370 }
119371
119372 #ifdef WHERETRACE_ENABLED /* >=2 */
119373 if( sqlite3WhereTrace>=2 ){
119374 sqlite3DebugPrintf("---- after round %d ----\n", iLoop);
119375 for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
119376 sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c",
119377 wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
119378 pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?');
@@ -119487,11 +120564,11 @@
119487 if( pItem->zIndex ) return 0;
119488 iCur = pItem->iCursor;
119489 pWC = &pWInfo->sWC;
119490 pLoop = pBuilder->pNew;
119491 pLoop->wsFlags = 0;
119492 pLoop->u.btree.nSkip = 0;
119493 pTerm = findTerm(pWC, iCur, -1, 0, WO_EQ, 0);
119494 if( pTerm ){
119495 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW;
119496 pLoop->aLTerm[0] = pTerm;
119497 pLoop->nLTerm = 1;
@@ -119499,11 +120576,10 @@
119499 /* TUNING: Cost of a rowid lookup is 10 */
119500 pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
119501 }else{
119502 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
119503 assert( pLoop->aLTermSpace==pLoop->aLTerm );
119504 assert( ArraySize(pLoop->aLTermSpace)==4 );
119505 if( !IsUniqueIndex(pIdx)
119506 || pIdx->pPartIdxWhere!=0
119507 || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
119508 ) continue;
119509 for(j=0; j<pIdx->nKeyCol; j++){
@@ -120008,22 +121084,30 @@
120008 ** loop below generates code for a single nested loop of the VM
120009 ** program.
120010 */
120011 notReady = ~(Bitmask)0;
120012 for(ii=0; ii<nTabList; ii++){
 
 
120013 pLevel = &pWInfo->a[ii];
 
120014 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
120015 if( (pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 ){
120016 constructAutomaticIndex(pParse, &pWInfo->sWC,
120017 &pTabList->a[pLevel->iFrom], notReady, pLevel);
120018 if( db->mallocFailed ) goto whereBeginError;
120019 }
120020 #endif
120021 explainOneScan(pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags);
 
 
120022 pLevel->addrBody = sqlite3VdbeCurrentAddr(v);
120023 notReady = codeOneLoopStart(pWInfo, ii, notReady);
120024 pWInfo->iContinue = pLevel->addrCont;
 
 
 
120025 }
120026
120027 /* Done. */
120028 VdbeModuleComment((v, "Begin WHERE-core"));
120029 return pWInfo;
@@ -124687,10 +125771,17 @@
124687 ** is look for a semicolon that is not part of an string or comment.
124688 */
124689 SQLITE_API int sqlite3_complete(const char *zSql){
124690 u8 state = 0; /* Current state, using numbers defined in header comment */
124691 u8 token; /* Value of the next token */
 
 
 
 
 
 
 
124692
124693 #ifndef SQLITE_OMIT_TRIGGER
124694 /* A complex statement machine used to detect the end of a CREATE TRIGGER
124695 ** statement. This is the normal case.
124696 */
@@ -125285,74 +126376,106 @@
125285
125286 va_start(ap, op);
125287 switch( op ){
125288
125289 /* Mutex configuration options are only available in a threadsafe
125290 ** compile.
125291 */
125292 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
125293 case SQLITE_CONFIG_SINGLETHREAD: {
125294 /* Disable all mutexing */
125295 sqlite3GlobalConfig.bCoreMutex = 0;
125296 sqlite3GlobalConfig.bFullMutex = 0;
125297 break;
125298 }
 
 
125299 case SQLITE_CONFIG_MULTITHREAD: {
125300 /* Disable mutexing of database connections */
125301 /* Enable mutexing of core data structures */
125302 sqlite3GlobalConfig.bCoreMutex = 1;
125303 sqlite3GlobalConfig.bFullMutex = 0;
125304 break;
125305 }
 
 
125306 case SQLITE_CONFIG_SERIALIZED: {
125307 /* Enable all mutexing */
125308 sqlite3GlobalConfig.bCoreMutex = 1;
125309 sqlite3GlobalConfig.bFullMutex = 1;
125310 break;
125311 }
 
 
125312 case SQLITE_CONFIG_MUTEX: {
125313 /* Specify an alternative mutex implementation */
125314 sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
125315 break;
125316 }
 
 
125317 case SQLITE_CONFIG_GETMUTEX: {
125318 /* Retrieve the current mutex implementation */
125319 *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
125320 break;
125321 }
125322 #endif
125323
125324
125325 case SQLITE_CONFIG_MALLOC: {
125326 /* Specify an alternative malloc implementation */
 
 
 
 
125327 sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
125328 break;
125329 }
125330 case SQLITE_CONFIG_GETMALLOC: {
125331 /* Retrieve the current malloc() implementation */
 
 
 
125332 if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
125333 *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
125334 break;
125335 }
125336 case SQLITE_CONFIG_MEMSTATUS: {
125337 /* Enable or disable the malloc status collection */
 
 
125338 sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
125339 break;
125340 }
125341 case SQLITE_CONFIG_SCRATCH: {
125342 /* Designate a buffer for scratch memory space */
 
 
 
125343 sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
125344 sqlite3GlobalConfig.szScratch = va_arg(ap, int);
125345 sqlite3GlobalConfig.nScratch = va_arg(ap, int);
125346 break;
125347 }
125348 case SQLITE_CONFIG_PAGECACHE: {
125349 /* Designate a buffer for page cache memory space */
 
 
125350 sqlite3GlobalConfig.pPage = va_arg(ap, void*);
125351 sqlite3GlobalConfig.szPage = va_arg(ap, int);
125352 sqlite3GlobalConfig.nPage = va_arg(ap, int);
125353 break;
 
 
 
 
 
 
 
 
 
 
 
125354 }
125355
125356 case SQLITE_CONFIG_PCACHE: {
125357 /* no-op */
125358 break;
@@ -125362,25 +126485,37 @@
125362 rc = SQLITE_ERROR;
125363 break;
125364 }
125365
125366 case SQLITE_CONFIG_PCACHE2: {
125367 /* Specify an alternative page cache implementation */
 
 
 
125368 sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
125369 break;
125370 }
125371 case SQLITE_CONFIG_GETPCACHE2: {
 
 
 
 
125372 if( sqlite3GlobalConfig.pcache2.xInit==0 ){
125373 sqlite3PCacheSetDefault();
125374 }
125375 *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
125376 break;
125377 }
125378
 
 
 
125379 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
125380 case SQLITE_CONFIG_HEAP: {
125381 /* Designate a buffer for heap memory space */
 
 
125382 sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
125383 sqlite3GlobalConfig.nHeap = va_arg(ap, int);
125384 sqlite3GlobalConfig.mnReq = va_arg(ap, int);
125385
125386 if( sqlite3GlobalConfig.mnReq<1 ){
@@ -125389,21 +126524,23 @@
125389 /* cap min request size at 2^12 */
125390 sqlite3GlobalConfig.mnReq = (1<<12);
125391 }
125392
125393 if( sqlite3GlobalConfig.pHeap==0 ){
125394 /* If the heap pointer is NULL, then restore the malloc implementation
125395 ** back to NULL pointers too. This will cause the malloc to go
125396 ** back to its default implementation when sqlite3_initialize() is
125397 ** run.
 
 
 
125398 */
125399 memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
125400 }else{
125401 /* The heap pointer is not NULL, then install one of the
125402 ** mem5.c/mem3.c methods. The enclosing #if guarantees at
125403 ** least one of these methods is currently enabled.
125404 */
125405 #ifdef SQLITE_ENABLE_MEMSYS3
125406 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
125407 #endif
125408 #ifdef SQLITE_ENABLE_MEMSYS5
125409 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
@@ -125438,15 +126575,23 @@
125438 ** can be changed at start-time using the
125439 ** sqlite3_config(SQLITE_CONFIG_URI,1) or
125440 ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
125441 */
125442 case SQLITE_CONFIG_URI: {
 
 
 
 
125443 sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
125444 break;
125445 }
125446
125447 case SQLITE_CONFIG_COVERING_INDEX_SCAN: {
 
 
 
 
125448 sqlite3GlobalConfig.bUseCis = va_arg(ap, int);
125449 break;
125450 }
125451
125452 #ifdef SQLITE_ENABLE_SQLLOG
@@ -125457,24 +126602,37 @@
125457 break;
125458 }
125459 #endif
125460
125461 case SQLITE_CONFIG_MMAP_SIZE: {
 
 
 
 
125462 sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64);
125463 sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64);
125464 if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){
125465 mxMmap = SQLITE_MAX_MMAP_SIZE;
125466 }
125467 sqlite3GlobalConfig.mxMmap = mxMmap;
 
 
 
 
 
125468 if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE;
125469 if( szMmap>mxMmap) szMmap = mxMmap;
 
125470 sqlite3GlobalConfig.szMmap = szMmap;
125471 break;
125472 }
125473
125474 #if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC)
125475 case SQLITE_CONFIG_WIN32_HEAPSIZE: {
 
 
 
125476 sqlite3GlobalConfig.nHeap = va_arg(ap, int);
125477 break;
125478 }
125479 #endif
125480
@@ -125554,19 +126712,29 @@
125554
125555 /*
125556 ** Return the mutex associated with a database connection.
125557 */
125558 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
 
 
 
 
 
 
125559 return db->mutex;
125560 }
125561
125562 /*
125563 ** Free up as much memory as we can from the given database
125564 ** connection.
125565 */
125566 SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){
125567 int i;
 
 
 
 
125568 sqlite3_mutex_enter(db->mutex);
125569 sqlite3BtreeEnterAll(db);
125570 for(i=0; i<db->nDb; i++){
125571 Btree *pBt = db->aDb[i].pBt;
125572 if( pBt ){
@@ -125652,17 +126820,24 @@
125652 int nKey1, const void *pKey1,
125653 int nKey2, const void *pKey2
125654 ){
125655 int rc, n;
125656 n = nKey1<nKey2 ? nKey1 : nKey2;
 
 
 
125657 rc = memcmp(pKey1, pKey2, n);
125658 if( rc==0 ){
125659 if( padFlag
125660 && allSpaces(((char*)pKey1)+n, nKey1-n)
125661 && allSpaces(((char*)pKey2)+n, nKey2-n)
125662 ){
125663 /* Leave rc unchanged at 0 */
 
 
 
 
125664 }else{
125665 rc = nKey1 - nKey2;
125666 }
125667 }
125668 return rc;
@@ -125693,24 +126868,42 @@
125693
125694 /*
125695 ** Return the ROWID of the most recent insert
125696 */
125697 SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
 
 
 
 
 
 
125698 return db->lastRowid;
125699 }
125700
125701 /*
125702 ** Return the number of changes in the most recent call to sqlite3_exec().
125703 */
125704 SQLITE_API int sqlite3_changes(sqlite3 *db){
 
 
 
 
 
 
125705 return db->nChange;
125706 }
125707
125708 /*
125709 ** Return the number of changes since the database handle was opened.
125710 */
125711 SQLITE_API int sqlite3_total_changes(sqlite3 *db){
 
 
 
 
 
 
125712 return db->nTotalChange;
125713 }
125714
125715 /*
125716 ** Close all open savepoints. This function only manipulates fields of the
@@ -126255,10 +127448,13 @@
126255 SQLITE_API int sqlite3_busy_handler(
126256 sqlite3 *db,
126257 int (*xBusy)(void*,int),
126258 void *pArg
126259 ){
 
 
 
126260 sqlite3_mutex_enter(db->mutex);
126261 db->busyHandler.xFunc = xBusy;
126262 db->busyHandler.pArg = pArg;
126263 db->busyHandler.nBusy = 0;
126264 db->busyTimeout = 0;
@@ -126276,10 +127472,16 @@
126276 sqlite3 *db,
126277 int nOps,
126278 int (*xProgress)(void*),
126279 void *pArg
126280 ){
 
 
 
 
 
 
126281 sqlite3_mutex_enter(db->mutex);
126282 if( nOps>0 ){
126283 db->xProgress = xProgress;
126284 db->nProgressOps = (unsigned)nOps;
126285 db->pProgressArg = pArg;
@@ -126296,10 +127498,13 @@
126296 /*
126297 ** This routine installs a default busy handler that waits for the
126298 ** specified number of milliseconds before returning 0.
126299 */
126300 SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
 
 
 
126301 if( ms>0 ){
126302 sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
126303 db->busyTimeout = ms;
126304 }else{
126305 sqlite3_busy_handler(db, 0, 0);
@@ -126309,10 +127514,16 @@
126309
126310 /*
126311 ** Cause any pending operation to stop at its earliest opportunity.
126312 */
126313 SQLITE_API void sqlite3_interrupt(sqlite3 *db){
 
 
 
 
 
 
126314 db->u1.isInterrupted = 1;
126315 }
126316
126317
126318 /*
@@ -126446,10 +127657,16 @@
126446 void (*xFinal)(sqlite3_context*),
126447 void (*xDestroy)(void *)
126448 ){
126449 int rc = SQLITE_ERROR;
126450 FuncDestructor *pArg = 0;
 
 
 
 
 
 
126451 sqlite3_mutex_enter(db->mutex);
126452 if( xDestroy ){
126453 pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
126454 if( !pArg ){
126455 xDestroy(p);
@@ -126482,10 +127699,14 @@
126482 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
126483 void (*xFinal)(sqlite3_context*)
126484 ){
126485 int rc;
126486 char *zFunc8;
 
 
 
 
126487 sqlite3_mutex_enter(db->mutex);
126488 assert( !db->mallocFailed );
126489 zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
126490 rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
126491 sqlite3DbFree(db, zFunc8);
@@ -126513,10 +127734,16 @@
126513 const char *zName,
126514 int nArg
126515 ){
126516 int nName = sqlite3Strlen30(zName);
126517 int rc = SQLITE_OK;
 
 
 
 
 
 
126518 sqlite3_mutex_enter(db->mutex);
126519 if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
126520 rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
126521 0, sqlite3InvalidFunction, 0, 0, 0);
126522 }
@@ -126534,10 +127761,17 @@
126534 ** trace is a pointer to a function that is invoked at the start of each
126535 ** SQL statement.
126536 */
126537 SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
126538 void *pOld;
 
 
 
 
 
 
 
126539 sqlite3_mutex_enter(db->mutex);
126540 pOld = db->pTraceArg;
126541 db->xTrace = xTrace;
126542 db->pTraceArg = pArg;
126543 sqlite3_mutex_leave(db->mutex);
@@ -126555,10 +127789,17 @@
126555 sqlite3 *db,
126556 void (*xProfile)(void*,const char*,sqlite_uint64),
126557 void *pArg
126558 ){
126559 void *pOld;
 
 
 
 
 
 
 
126560 sqlite3_mutex_enter(db->mutex);
126561 pOld = db->pProfileArg;
126562 db->xProfile = xProfile;
126563 db->pProfileArg = pArg;
126564 sqlite3_mutex_leave(db->mutex);
@@ -126575,10 +127816,17 @@
126575 sqlite3 *db, /* Attach the hook to this database */
126576 int (*xCallback)(void*), /* Function to invoke on each commit */
126577 void *pArg /* Argument to the function */
126578 ){
126579 void *pOld;
 
 
 
 
 
 
 
126580 sqlite3_mutex_enter(db->mutex);
126581 pOld = db->pCommitArg;
126582 db->xCommitCallback = xCallback;
126583 db->pCommitArg = pArg;
126584 sqlite3_mutex_leave(db->mutex);
@@ -126593,10 +127841,17 @@
126593 sqlite3 *db, /* Attach the hook to this database */
126594 void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
126595 void *pArg /* Argument to the function */
126596 ){
126597 void *pRet;
 
 
 
 
 
 
 
126598 sqlite3_mutex_enter(db->mutex);
126599 pRet = db->pUpdateArg;
126600 db->xUpdateCallback = xCallback;
126601 db->pUpdateArg = pArg;
126602 sqlite3_mutex_leave(db->mutex);
@@ -126611,10 +127866,17 @@
126611 sqlite3 *db, /* Attach the hook to this database */
126612 void (*xCallback)(void*), /* Callback function */
126613 void *pArg /* Argument to the function */
126614 ){
126615 void *pRet;
 
 
 
 
 
 
 
126616 sqlite3_mutex_enter(db->mutex);
126617 pRet = db->pRollbackArg;
126618 db->xRollbackCallback = xCallback;
126619 db->pRollbackArg = pArg;
126620 sqlite3_mutex_leave(db->mutex);
@@ -126657,10 +127919,13 @@
126657 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
126658 #ifdef SQLITE_OMIT_WAL
126659 UNUSED_PARAMETER(db);
126660 UNUSED_PARAMETER(nFrame);
126661 #else
 
 
 
126662 if( nFrame>0 ){
126663 sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
126664 }else{
126665 sqlite3_wal_hook(db, 0, 0);
126666 }
@@ -126677,10 +127942,16 @@
126677 int(*xCallback)(void *, sqlite3*, const char*, int),
126678 void *pArg /* First argument passed to xCallback() */
126679 ){
126680 #ifndef SQLITE_OMIT_WAL
126681 void *pRet;
 
 
 
 
 
 
126682 sqlite3_mutex_enter(db->mutex);
126683 pRet = db->pWalArg;
126684 db->xWalCallback = xCallback;
126685 db->pWalArg = pArg;
126686 sqlite3_mutex_leave(db->mutex);
@@ -126703,10 +127974,14 @@
126703 #ifdef SQLITE_OMIT_WAL
126704 return SQLITE_OK;
126705 #else
126706 int rc; /* Return code */
126707 int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
 
 
 
 
126708
126709 /* Initialize the output variables to -1 in case an error occurs. */
126710 if( pnLog ) *pnLog = -1;
126711 if( pnCkpt ) *pnCkpt = -1;
126712
@@ -127100,10 +128375,16 @@
127100 ** from forming.
127101 */
127102 SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
127103 int oldLimit;
127104
 
 
 
 
 
 
127105
127106 /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
127107 ** there is a hard upper bound set at compile-time by a C preprocessor
127108 ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
127109 ** "_MAX_".)
@@ -127176,11 +128457,12 @@
127176 char c;
127177 int nUri = sqlite3Strlen30(zUri);
127178
127179 assert( *pzErrMsg==0 );
127180
127181 if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri)
 
127182 && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */
127183 ){
127184 char *zOpt;
127185 int eState; /* Parser state when parsing URI */
127186 int iIn; /* Input character index */
@@ -127385,10 +128667,13 @@
127385 int rc; /* Return code */
127386 int isThreadsafe; /* True for threadsafe connections */
127387 char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */
127388 char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */
127389
 
 
 
127390 *ppDb = 0;
127391 #ifndef SQLITE_OMIT_AUTOINIT
127392 rc = sqlite3_initialize();
127393 if( rc ) return rc;
127394 #endif
@@ -127499,24 +128784,28 @@
127499 #endif
127500
127501 /* Add the default collation sequence BINARY. BINARY works for both UTF-8
127502 ** and UTF-16, so add a version for each to avoid any unnecessary
127503 ** conversions. The only error that can occur here is a malloc() failure.
 
 
 
127504 */
127505 createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
127506 createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
127507 createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
 
127508 createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
127509 if( db->mallocFailed ){
127510 goto opendb_out;
127511 }
 
 
 
127512 db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
127513 assert( db->pDfltColl!=0 );
127514
127515 /* Also add a UTF-8 case-insensitive collation sequence. */
127516 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
127517
127518 /* Parse the filename/URI argument. */
127519 db->openFlags = flags;
127520 rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
127521 if( rc!=SQLITE_OK ){
127522 if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
@@ -127674,17 +128963,19 @@
127674 ){
127675 char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
127676 sqlite3_value *pVal;
127677 int rc;
127678
127679 assert( zFilename );
127680 assert( ppDb );
 
127681 *ppDb = 0;
127682 #ifndef SQLITE_OMIT_AUTOINIT
127683 rc = sqlite3_initialize();
127684 if( rc ) return rc;
127685 #endif
 
127686 pVal = sqlite3ValueNew(0);
127687 sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
127688 zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
127689 if( zFilename8 ){
127690 rc = openDatabase(zFilename8, ppDb,
@@ -127710,17 +129001,11 @@
127710 const char *zName,
127711 int enc,
127712 void* pCtx,
127713 int(*xCompare)(void*,int,const void*,int,const void*)
127714 ){
127715 int rc;
127716 sqlite3_mutex_enter(db->mutex);
127717 assert( !db->mallocFailed );
127718 rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0);
127719 rc = sqlite3ApiExit(db, rc);
127720 sqlite3_mutex_leave(db->mutex);
127721 return rc;
127722 }
127723
127724 /*
127725 ** Register a new collation sequence with the database handle db.
127726 */
@@ -127731,10 +129016,14 @@
127731 void* pCtx,
127732 int(*xCompare)(void*,int,const void*,int,const void*),
127733 void(*xDel)(void*)
127734 ){
127735 int rc;
 
 
 
 
127736 sqlite3_mutex_enter(db->mutex);
127737 assert( !db->mallocFailed );
127738 rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
127739 rc = sqlite3ApiExit(db, rc);
127740 sqlite3_mutex_leave(db->mutex);
@@ -127752,10 +129041,14 @@
127752 void* pCtx,
127753 int(*xCompare)(void*,int,const void*,int,const void*)
127754 ){
127755 int rc = SQLITE_OK;
127756 char *zName8;
 
 
 
 
127757 sqlite3_mutex_enter(db->mutex);
127758 assert( !db->mallocFailed );
127759 zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
127760 if( zName8 ){
127761 rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
@@ -127774,10 +129067,13 @@
127774 SQLITE_API int sqlite3_collation_needed(
127775 sqlite3 *db,
127776 void *pCollNeededArg,
127777 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
127778 ){
 
 
 
127779 sqlite3_mutex_enter(db->mutex);
127780 db->xCollNeeded = xCollNeeded;
127781 db->xCollNeeded16 = 0;
127782 db->pCollNeededArg = pCollNeededArg;
127783 sqlite3_mutex_leave(db->mutex);
@@ -127792,10 +129088,13 @@
127792 SQLITE_API int sqlite3_collation_needed16(
127793 sqlite3 *db,
127794 void *pCollNeededArg,
127795 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
127796 ){
 
 
 
127797 sqlite3_mutex_enter(db->mutex);
127798 db->xCollNeeded = 0;
127799 db->xCollNeeded16 = xCollNeeded16;
127800 db->pCollNeededArg = pCollNeededArg;
127801 sqlite3_mutex_leave(db->mutex);
@@ -127818,10 +129117,16 @@
127818 ** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
127819 ** by default. Autocommit is disabled by a BEGIN statement and reenabled
127820 ** by the next COMMIT or ROLLBACK.
127821 */
127822 SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
 
 
 
 
 
 
127823 return db->autoCommit;
127824 }
127825
127826 /*
127827 ** The following routines are substitutes for constants SQLITE_CORRUPT,
@@ -128000,10 +129305,13 @@
128000
128001 /*
128002 ** Enable or disable the extended result codes.
128003 */
128004 SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
 
 
 
128005 sqlite3_mutex_enter(db->mutex);
128006 db->errMask = onoff ? 0xffffffff : 0xff;
128007 sqlite3_mutex_leave(db->mutex);
128008 return SQLITE_OK;
128009 }
@@ -128013,10 +129321,13 @@
128013 */
128014 SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
128015 int rc = SQLITE_ERROR;
128016 Btree *pBtree;
128017
 
 
 
128018 sqlite3_mutex_enter(db->mutex);
128019 pBtree = sqlite3DbNameToBtree(db, zDbName);
128020 if( pBtree ){
128021 Pager *pPager;
128022 sqlite3_file *fd;
@@ -128355,11 +129666,11 @@
128355 ** query parameter we seek. This routine returns the value of the zParam
128356 ** parameter if it exists. If the parameter does not exist, this routine
128357 ** returns a NULL pointer.
128358 */
128359 SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
128360 if( zFilename==0 ) return 0;
128361 zFilename += sqlite3Strlen30(zFilename) + 1;
128362 while( zFilename[0] ){
128363 int x = strcmp(zFilename, zParam);
128364 zFilename += sqlite3Strlen30(zFilename) + 1;
128365 if( x==0 ) return zFilename;
@@ -128411,19 +129722,31 @@
128411 /*
128412 ** Return the filename of the database associated with a database
128413 ** connection.
128414 */
128415 SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
 
 
 
 
 
 
128416 Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
128417 return pBt ? sqlite3BtreeGetFilename(pBt) : 0;
128418 }
128419
128420 /*
128421 ** Return 1 if database is read-only or 0 if read/write. Return -1 if
128422 ** no such database exists.
128423 */
128424 SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){
 
 
 
 
 
 
128425 Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
128426 return pBt ? sqlite3BtreeIsReadonly(pBt) : -1;
128427 }
128428
128429 /************** End of main.c ************************************************/
128430
--- src/sqlite3.c
+++ src/sqlite3.c
@@ -1,8 +1,8 @@
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.8.8. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
@@ -179,11 +179,11 @@
179
180
181 /*
182 ** These no-op macros are used in front of interfaces to mark those
183 ** interfaces as either deprecated or experimental. New applications
184 ** should not use deprecated interfaces - they are supported for backwards
185 ** compatibility only. Application writers should be aware that
186 ** experimental interfaces are subject to change in point releases.
187 **
188 ** These macros used to resolve to various kinds of compiler magic that
189 ** would generate warning messages when they were used. But that
@@ -229,13 +229,13 @@
229 **
230 ** See also: [sqlite3_libversion()],
231 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
232 ** [sqlite_version()] and [sqlite_source_id()].
233 */
234 #define SQLITE_VERSION "3.8.8"
235 #define SQLITE_VERSION_NUMBER 3008008
236 #define SQLITE_SOURCE_ID "2014-11-28 13:35:03 24fa2e9832daaa5d68ee28a00c56c55f97a4da9e"
237
238 /*
239 ** CAPI3REF: Run-Time Library Version Numbers
240 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
241 **
@@ -1626,29 +1626,31 @@
1626 ** it is not possible to set the Serialized [threading mode] and
1627 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1628 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1629 **
1630 ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1631 ** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
1632 ** a pointer to an instance of the [sqlite3_mem_methods] structure.
1633 ** The argument specifies
1634 ** alternative low-level memory allocation routines to be used in place of
1635 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1636 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1637 ** before the [sqlite3_config()] call returns.</dd>
1638 **
1639 ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1640 ** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
1641 ** is a pointer to an instance of the [sqlite3_mem_methods] structure.
1642 ** The [sqlite3_mem_methods]
1643 ** structure is filled with the currently defined memory allocation routines.)^
1644 ** This option can be used to overload the default memory allocation
1645 ** routines with a wrapper that simulations memory allocation failure or
1646 ** tracks memory usage, for example. </dd>
1647 **
1648 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1649 ** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
1650 ** interpreted as a boolean, which enables or disables the collection of
1651 ** memory allocation statistics. ^(When memory allocation statistics are disabled, the
1652 ** following SQLite interfaces become non-operational:
1653 ** <ul>
1654 ** <li> [sqlite3_memory_used()]
1655 ** <li> [sqlite3_memory_highwater()]
1656 ** <li> [sqlite3_soft_heap_limit64()]
@@ -1658,78 +1660,90 @@
1660 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1661 ** allocation statistics are disabled by default.
1662 ** </dd>
1663 **
1664 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1665 ** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
1666 ** that SQLite can use for scratch memory. ^(There are three arguments
1667 ** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
1668 ** aligned memory buffer from which the scratch allocations will be
1669 ** drawn, the size of each scratch allocation (sz),
1670 ** and the maximum number of scratch allocations (N).)^
 
1671 ** The first argument must be a pointer to an 8-byte aligned buffer
1672 ** of at least sz*N bytes of memory.
1673 ** ^SQLite will not use more than one scratch buffers per thread.
1674 ** ^SQLite will never request a scratch buffer that is more than 6
1675 ** times the database page size.
1676 ** ^If SQLite needs needs additional
1677 ** scratch memory beyond what is provided by this configuration option, then
1678 ** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
1679 ** ^When the application provides any amount of scratch memory using
1680 ** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
1681 ** [sqlite3_malloc|heap allocations].
1682 ** This can help [Robson proof|prevent memory allocation failures] due to heap
1683 ** fragmentation in low-memory embedded systems.
1684 ** </dd>
1685 **
1686 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1687 ** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer
1688 ** that SQLite can use for the database page cache with the default page
1689 ** cache implementation.
1690 ** This configuration should not be used if an application-define page
1691 ** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]
1692 ** configuration option.
1693 ** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned
1694 ** memory, the size of each page buffer (sz), and the number of pages (N).
1695 ** The sz argument should be the size of the largest database page
1696 ** (a power of two between 512 and 32768) plus some extra bytes for each
1697 ** page header. ^The number of extra bytes needed by the page header
1698 ** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option
1699 ** to [sqlite3_config()].
1700 ** ^It is harmless, apart from the wasted memory,
1701 ** for the sz parameter to be larger than necessary. The first
1702 ** argument should pointer to an 8-byte aligned block of memory that
1703 ** is at least sz*N bytes of memory, otherwise subsequent behavior is
1704 ** undefined.
1705 ** ^SQLite will use the memory provided by the first argument to satisfy its
1706 ** memory needs for the first N pages that it adds to cache. ^If additional
1707 ** page cache memory is needed beyond what is provided by this option, then
1708 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd>
 
 
 
1709 **
1710 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1711 ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
1712 ** that SQLite will use for all of its dynamic memory allocation needs
1713 ** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1714 ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
1715 ** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
1716 ** [SQLITE_ERROR] if invoked otherwise.
1717 ** ^There are three arguments to SQLITE_CONFIG_HEAP:
1718 ** An 8-byte aligned pointer to the memory,
1719 ** the number of bytes in the memory buffer, and the minimum allocation size.
1720 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1721 ** to using its default memory allocator (the system malloc() implementation),
1722 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1723 ** memory pointer is not NULL then the alternative memory
 
1724 ** allocator is engaged to handle all of SQLites memory allocation needs.
1725 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1726 ** boundary or subsequent behavior of SQLite will be undefined.
1727 ** The minimum allocation size is capped at 2**12. Reasonable values
1728 ** for the minimum allocation size are 2**5 through 2**8.</dd>
1729 **
1730 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1731 ** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
1732 ** pointer to an instance of the [sqlite3_mutex_methods] structure.
1733 ** The argument specifies alternative low-level mutex routines to be used in place
1734 ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
1735 ** content of the [sqlite3_mutex_methods] structure before the call to
1736 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1737 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1738 ** the entire mutexing subsystem is omitted from the build and hence calls to
1739 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1740 ** return [SQLITE_ERROR].</dd>
1741 **
1742 ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1743 ** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
1744 ** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The
1745 ** [sqlite3_mutex_methods]
1746 ** structure is filled with the currently defined mutex routines.)^
1747 ** This option can be used to overload the default mutex allocation
1748 ** routines with a wrapper used to track mutex usage for performance
1749 ** profiling or testing, for example. ^If SQLite is compiled with
@@ -1737,28 +1751,28 @@
1751 ** the entire mutexing subsystem is omitted from the build and hence calls to
1752 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
1753 ** return [SQLITE_ERROR].</dd>
1754 **
1755 ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1756 ** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
1757 ** the default size of lookaside memory on each [database connection].
1758 ** The first argument is the
1759 ** size of each lookaside buffer slot and the second is the number of
1760 ** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE
1761 ** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1762 ** option to [sqlite3_db_config()] can be used to change the lookaside
1763 ** configuration on individual connections.)^ </dd>
1764 **
1765 ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1766 ** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
1767 ** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
1768 ** the interface to a custom page cache implementation.)^
1769 ** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
1770 **
1771 ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1772 ** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
1773 ** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of the current
1774 ** page cache implementation into that object.)^ </dd>
1775 **
1776 ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
1777 ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
1778 ** global [error log].
@@ -1778,26 +1792,27 @@
1792 ** supplied by the application must not invoke any SQLite interface.
1793 ** In a multi-threaded application, the application-defined logger
1794 ** function must be threadsafe. </dd>
1795 **
1796 ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1797 ** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
1798 ** If non-zero, then URI handling is globally enabled. If the parameter is zero,
1799 ** then URI handling is globally disabled.)^ ^If URI handling is globally enabled,
1800 ** all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1801 ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
1802 ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
1803 ** connection is opened. ^If it is globally disabled, filenames are
1804 ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
1805 ** database connection is opened. ^(By default, URI handling is globally
1806 ** disabled. The default value may be changed by compiling with the
1807 ** [SQLITE_USE_URI] symbol defined.)^
1808 **
1809 ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1810 ** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
1811 ** argument which is interpreted as a boolean in order to enable or disable
1812 ** the use of covering indices for full table scans in the query optimizer.
1813 ** ^The default setting is determined
1814 ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
1815 ** if that compile-time option is omitted.
1816 ** The ability to disable the use of covering indices for full table scans
1817 ** is because some incorrectly coded legacy applications might malfunction
1818 ** when the optimization is enabled. Providing the ability to
@@ -1833,23 +1848,32 @@
1848 ** that are the default mmap size limit (the default setting for
1849 ** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
1850 ** ^The default setting can be overridden by each database connection using
1851 ** either the [PRAGMA mmap_size] command, or by using the
1852 ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1853 ** will be silently truncated if necessary so that it does not exceed the
1854 ** compile-time maximum mmap size set by the
1855 ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
1856 ** ^If either argument to this option is negative, then that argument is
1857 ** changed to its compile-time default.
1858 **
1859 ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
1860 ** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1861 ** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
1862 ** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1863 ** ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1864 ** that specifies the maximum size of the created heap.
1865 ** </dl>
1866 **
1867 ** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
1868 ** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
1869 ** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
1870 ** is a pointer to an integer and writes into that integer the number of extra
1871 ** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. The amount of
1872 ** extra space required can change depending on the compiler,
1873 ** target platform, and SQLite version.
1874 ** </dl>
1875 */
1876 #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
1877 #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
1878 #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
1879 #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1870,10 +1894,11 @@
1894 #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
1895 #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
1896 #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
1897 #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
1898 #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
1899 #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
1900
1901 /*
1902 ** CAPI3REF: Database Connection Configuration Options
1903 **
1904 ** These constants are the available integer configuration options that
@@ -1997,51 +2022,49 @@
2022 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
2023
2024 /*
2025 ** CAPI3REF: Count The Number Of Rows Modified
2026 **
2027 ** ^This function returns the number of rows modified, inserted or
2028 ** deleted by the most recently completed INSERT, UPDATE or DELETE
2029 ** statement on the database connection specified by the only parameter.
2030 ** ^Executing any other type of SQL statement does not modify the value
2031 ** returned by this function.
2032 **
2033 ** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
2034 ** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
2035 ** [foreign key actions] or [REPLACE] constraint resolution are not counted.
2036 **
2037 ** Changes to a view that are intercepted by
2038 ** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
2039 ** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
2040 ** DELETE statement run on a view is always zero. Only changes made to real
2041 ** tables are counted.
2042 **
2043 ** Things are more complicated if the sqlite3_changes() function is
2044 ** executed while a trigger program is running. This may happen if the
2045 ** program uses the [changes() SQL function], or if some other callback
2046 ** function invokes sqlite3_changes() directly. Essentially:
2047 **
2048 ** <ul>
2049 ** <li> ^(Before entering a trigger program the value returned by
2050 ** sqlite3_changes() function is saved. After the trigger program
2051 ** has finished, the original value is restored.)^
2052 **
2053 ** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
2054 ** statement sets the value returned by sqlite3_changes()
2055 ** upon completion as normal. Of course, this value will not include
2056 ** any changes performed by sub-triggers, as the sqlite3_changes()
2057 ** value will be saved and restored after each sub-trigger has run.)^
2058 ** </ul>
2059 **
2060 ** ^This means that if the changes() SQL function (or similar) is used
2061 ** by the first INSERT, UPDATE or DELETE statement within a trigger, it
2062 ** returns the value as set when the calling statement began executing.
2063 ** ^If it is used by the second or subsequent such statement within a trigger
2064 ** program, the value returned reflects the number of rows modified by the
2065 ** previous INSERT, UPDATE or DELETE statement within the same trigger.
 
 
2066 **
2067 ** See also the [sqlite3_total_changes()] interface, the
2068 ** [count_changes pragma], and the [changes() SQL function].
2069 **
2070 ** If a separate thread makes changes on the same database connection
@@ -2051,24 +2074,21 @@
2074 SQLITE_API int sqlite3_changes(sqlite3*);
2075
2076 /*
2077 ** CAPI3REF: Total Number Of Rows Modified
2078 **
2079 ** ^This function returns the total number of rows inserted, modified or
2080 ** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
2081 ** since the database connection was opened, including those executed as
2082 ** part of trigger programs. ^Executing any other type of SQL statement
2083 ** does not affect the value returned by sqlite3_total_changes().
2084 **
2085 ** ^Changes made as part of [foreign key actions] are included in the
2086 ** count, but those made as part of REPLACE constraint resolution are
2087 ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
2088 ** are not counted.
2089 **
 
 
 
2090 ** See also the [sqlite3_changes()] interface, the
2091 ** [count_changes pragma], and the [total_changes() SQL function].
2092 **
2093 ** If a separate thread makes changes on the same database connection
2094 ** while [sqlite3_total_changes()] is running then the value
@@ -2542,17 +2562,18 @@
2562 ** already uses the largest possible [ROWID]. The PRNG is also used for
2563 ** the build-in random() and randomblob() SQL functions. This interface allows
2564 ** applications to access the same PRNG for other purposes.
2565 **
2566 ** ^A call to this routine stores N bytes of randomness into buffer P.
2567 ** ^The P parameter can be a NULL pointer.
2568 **
2569 ** ^If this routine has not been previously called or if the previous
2570 ** call had N less than one or a NULL pointer for P, then the PRNG is
2571 ** seeded using randomness obtained from the xRandomness method of
2572 ** the default [sqlite3_vfs] object.
2573 ** ^If the previous call to this routine had an N of 1 or more and a
2574 ** non-NULL P then the pseudo-randomness is generated
2575 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2576 ** method.
2577 */
2578 SQLITE_API void sqlite3_randomness(int N, void *P);
2579
@@ -4270,13 +4291,13 @@
4291 ** CAPI3REF: Text Encodings
4292 **
4293 ** These constant define integer codes that represent the various
4294 ** text encodings supported by SQLite.
4295 */
4296 #define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
4297 #define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
4298 #define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
4299 #define SQLITE_UTF16 4 /* Use native byte order */
4300 #define SQLITE_ANY 5 /* Deprecated */
4301 #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
4302
4303 /*
@@ -5762,31 +5783,47 @@
5783 ** in other words, the same BLOB that would be selected by:
5784 **
5785 ** <pre>
5786 ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5787 ** </pre>)^
5788 **
5789 ** ^(Parameter zDb is not the filename that contains the database, but
5790 ** rather the symbolic name of the database. For attached databases, this is
5791 ** the name that appears after the AS keyword in the [ATTACH] statement.
5792 ** For the main database file, the database name is "main". For TEMP
5793 ** tables, the database name is "temp".)^
5794 **
5795 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5796 ** and write access. ^If the flags parameter is zero, the BLOB is opened for
5797 ** read-only access.
5798 **
5799 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored
5800 ** in *ppBlob. Otherwise an [error code] is returned and, unless the error
5801 ** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
5802 ** the API is not misused, it is always safe to call [sqlite3_blob_close()]
5803 ** on *ppBlob after this function it returns.
5804 **
5805 ** This function fails with SQLITE_ERROR if any of the following are true:
5806 ** <ul>
5807 ** <li> ^(Database zDb does not exist)^,
5808 ** <li> ^(Table zTable does not exist within database zDb)^,
5809 ** <li> ^(Table zTable is a WITHOUT ROWID table)^,
5810 ** <li> ^(Column zColumn does not exist)^,
5811 ** <li> ^(Row iRow is not present in the table)^,
5812 ** <li> ^(The specified column of row iRow contains a value that is not
5813 ** a TEXT or BLOB value)^,
5814 ** <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE
5815 ** constraint and the blob is being opened for read/write access)^,
5816 ** <li> ^([foreign key constraints | Foreign key constraints] are enabled,
5817 ** column zColumn is part of a [child key] definition and the blob is
5818 ** being opened for read/write access)^.
5819 ** </ul>
5820 **
5821 ** ^Unless it returns SQLITE_MISUSE, this function sets the
5822 ** [database connection] error code and message accessible via
5823 ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5824 **
5825 **
5826 ** ^(If the row that a BLOB handle points to is modified by an
5827 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5828 ** then the BLOB handle is marked as "expired".
5829 ** This is true if any column of the row is changed, even a column
@@ -5800,17 +5837,13 @@
5837 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5838 ** the opened blob. ^The size of a blob may not be changed by this
5839 ** interface. Use the [UPDATE] SQL command to change the size of a
5840 ** blob.
5841 **
 
 
 
5842 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5843 ** and the built-in [zeroblob] SQL function may be used to create a
5844 ** zero-filled blob to read or write using the incremental-blob interface.
 
5845 **
5846 ** To avoid a resource leak, every open [BLOB handle] should eventually
5847 ** be released by a call to [sqlite3_blob_close()].
5848 */
5849 SQLITE_API int sqlite3_blob_open(
@@ -5848,28 +5881,26 @@
5881 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5882
5883 /*
5884 ** CAPI3REF: Close A BLOB Handle
5885 **
5886 ** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed
5887 ** unconditionally. Even if this routine returns an error code, the
5888 ** handle is still closed.)^
5889 **
5890 ** ^If the blob handle being closed was opened for read-write access, and if
5891 ** the database is in auto-commit mode and there are no other open read-write
5892 ** blob handles or active write statements, the current transaction is
5893 ** committed. ^If an error occurs while committing the transaction, an error
5894 ** code is returned and the transaction rolled back.
5895 **
5896 ** Calling this function with an argument that is not a NULL pointer or an
5897 ** open blob handle results in undefined behaviour. ^Calling this routine
5898 ** with a null pointer (such as would be returned by a failed call to
5899 ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
5900 ** is passed a valid open blob handle, the values returned by the
5901 ** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
 
 
5902 */
5903 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5904
5905 /*
5906 ** CAPI3REF: Return The Size Of An Open BLOB
@@ -5915,36 +5946,39 @@
5946 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5947
5948 /*
5949 ** CAPI3REF: Write Data Into A BLOB Incrementally
5950 **
5951 ** ^(This function is used to write data into an open [BLOB handle] from a
5952 ** caller-supplied buffer. N bytes of data are copied from the buffer Z
5953 ** into the open BLOB, starting at offset iOffset.)^
5954 **
5955 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5956 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5957 ** ^Unless SQLITE_MISUSE is returned, this function sets the
5958 ** [database connection] error code and message accessible via
5959 ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5960 **
5961 ** ^If the [BLOB handle] passed as the first argument was not opened for
5962 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5963 ** this function returns [SQLITE_READONLY].
5964 **
5965 ** This function may only modify the contents of the BLOB; it is
5966 ** not possible to increase the size of a BLOB using this API.
5967 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5968 ** [SQLITE_ERROR] is returned and no data is written. The size of the
5969 ** BLOB (and hence the maximum value of N+iOffset) can be determined
5970 ** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less
5971 ** than zero [SQLITE_ERROR] is returned and no data is written.
5972 **
5973 ** ^An attempt to write to an expired [BLOB handle] fails with an
5974 ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
5975 ** before the [BLOB handle] expired are not rolled back by the
5976 ** expiration of the handle, though of course those changes might
5977 ** have been overwritten by the statement that expired the BLOB handle
5978 ** or by other independent statements.
5979 **
 
 
 
5980 ** This routine only works on a [BLOB handle] which has been created
5981 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5982 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5983 ** to this routine results in undefined and probably undesirable behavior.
5984 **
@@ -5993,38 +6027,38 @@
6027 ** use by SQLite, code that links against SQLite is
6028 ** permitted to use any of these routines.
6029 **
6030 ** The SQLite source code contains multiple implementations
6031 ** of these mutex routines. An appropriate implementation
6032 ** is selected automatically at compile-time. The following
6033 ** implementations are available in the SQLite core:
6034 **
6035 ** <ul>
6036 ** <li> SQLITE_MUTEX_PTHREADS
6037 ** <li> SQLITE_MUTEX_W32
6038 ** <li> SQLITE_MUTEX_NOOP
6039 ** </ul>
6040 **
6041 ** The SQLITE_MUTEX_NOOP implementation is a set of routines
6042 ** that does no real locking and is appropriate for use in
6043 ** a single-threaded application. The SQLITE_MUTEX_PTHREADS and
6044 ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
6045 ** and Windows.
6046 **
6047 ** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
6048 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
6049 ** implementation is included with the library. In this case the
6050 ** application must supply a custom mutex implementation using the
6051 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
6052 ** before calling sqlite3_initialize() or any other public sqlite3_
6053 ** function that calls sqlite3_initialize().
6054 **
6055 ** ^The sqlite3_mutex_alloc() routine allocates a new
6056 ** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
6057 ** routine returns NULL if it is unable to allocate the requested
6058 ** mutex. The argument to sqlite3_mutex_alloc() must one of these
6059 ** integer constants:
6060 **
6061 ** <ul>
6062 ** <li> SQLITE_MUTEX_FAST
6063 ** <li> SQLITE_MUTEX_RECURSIVE
6064 ** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -6033,68 +6067,64 @@
6067 ** <li> SQLITE_MUTEX_STATIC_PRNG
6068 ** <li> SQLITE_MUTEX_STATIC_LRU
6069 ** <li> SQLITE_MUTEX_STATIC_PMEM
6070 ** <li> SQLITE_MUTEX_STATIC_APP1
6071 ** <li> SQLITE_MUTEX_STATIC_APP2
6072 ** <li> SQLITE_MUTEX_STATIC_APP3
6073 ** </ul>
6074 **
6075 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
6076 ** cause sqlite3_mutex_alloc() to create
6077 ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
6078 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
6079 ** The mutex implementation does not need to make a distinction
6080 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
6081 ** not want to. SQLite will only request a recursive mutex in
6082 ** cases where it really needs one. If a faster non-recursive mutex
6083 ** implementation is available on the host platform, the mutex subsystem
6084 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
6085 **
6086 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
6087 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
6088 ** a pointer to a static preexisting mutex. ^Nine static mutexes are
6089 ** used by the current version of SQLite. Future versions of SQLite
6090 ** may add additional static mutexes. Static mutexes are for internal
6091 ** use by SQLite only. Applications that use SQLite mutexes should
6092 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
6093 ** SQLITE_MUTEX_RECURSIVE.
6094 **
6095 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
6096 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
6097 ** returns a different mutex on every call. ^For the static
6098 ** mutex types, the same mutex is returned on every call that has
6099 ** the same type number.
6100 **
6101 ** ^The sqlite3_mutex_free() routine deallocates a previously
6102 ** allocated dynamic mutex. Attempting to deallocate a static
6103 ** mutex results in undefined behavior.
 
 
 
6104 **
6105 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
6106 ** to enter a mutex. ^If another thread is already within the mutex,
6107 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
6108 ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
6109 ** upon successful entry. ^(Mutexes created using
6110 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
6111 ** In such cases, the
6112 ** mutex must be exited an equal number of times before another thread
6113 ** can enter.)^ If the same thread tries to enter any mutex other
6114 ** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.
 
 
6115 **
6116 ** ^(Some systems (for example, Windows 95) do not support the operation
6117 ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
6118 ** will always return SQLITE_BUSY. The SQLite core only ever uses
6119 ** sqlite3_mutex_try() as an optimization so this is acceptable
6120 ** behavior.)^
6121 **
6122 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
6123 ** previously entered by the same thread. The behavior
6124 ** is undefined if the mutex is not currently entered by the
6125 ** calling thread or is not currently allocated.
 
6126 **
6127 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
6128 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
6129 ** behave as no-ops.
6130 **
@@ -6111,13 +6141,13 @@
6141 **
6142 ** An instance of this structure defines the low-level routines
6143 ** used to allocate and use mutexes.
6144 **
6145 ** Usually, the default mutex implementations provided by SQLite are
6146 ** sufficient, however the application has the option of substituting a custom
6147 ** implementation for specialized deployments or systems for which SQLite
6148 ** does not provide a suitable implementation. In this case, the application
6149 ** creates and populates an instance of this structure to pass
6150 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
6151 ** Additionally, an instance of this structure can be used as an
6152 ** output variable when querying the system for the current mutex
6153 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6154,17 +6184,17 @@
6184 ** by this structure are not required to handle this case, the results
6185 ** of passing a NULL pointer instead of a valid mutex handle are undefined
6186 ** (i.e. it is acceptable to provide an implementation that segfaults if
6187 ** it is passed a NULL pointer).
6188 **
6189 ** The xMutexInit() method must be threadsafe. It must be harmless to
6190 ** invoke xMutexInit() multiple times within the same process and without
6191 ** intervening calls to xMutexEnd(). Second and subsequent calls to
6192 ** xMutexInit() must be no-ops.
6193 **
6194 ** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6195 ** and its associates). Similarly, xMutexAlloc() must not use SQLite memory
6196 ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
6197 ** memory allocation for a fast or recursive mutex.
6198 **
6199 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
6200 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6186,33 +6216,33 @@
6216
6217 /*
6218 ** CAPI3REF: Mutex Verification Routines
6219 **
6220 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6221 ** are intended for use inside assert() statements. The SQLite core
6222 ** never uses these routines except inside an assert() and applications
6223 ** are advised to follow the lead of the core. The SQLite core only
6224 ** provides implementations for these routines when it is compiled
6225 ** with the SQLITE_DEBUG flag. External mutex implementations
6226 ** are only required to provide these routines if SQLITE_DEBUG is
6227 ** defined and if NDEBUG is not defined.
6228 **
6229 ** These routines should return true if the mutex in their argument
6230 ** is held or not held, respectively, by the calling thread.
6231 **
6232 ** The implementation is not required to provide versions of these
6233 ** routines that actually work. If the implementation does not provide working
6234 ** versions of these routines, it should at least provide stubs that always
6235 ** return true so that one does not get spurious assertion failures.
6236 **
6237 ** If the argument to sqlite3_mutex_held() is a NULL pointer then
6238 ** the routine should return 1. This seems counter-intuitive since
6239 ** clearly the mutex cannot be held if it does not exist. But
6240 ** the reason the mutex does not exist is because the build is not
6241 ** using mutexes. And we do not want the assert() containing the
6242 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
6243 ** the appropriate thing to do. The sqlite3_mutex_notheld()
6244 ** interface should also return 1 when given a NULL pointer.
6245 */
6246 #ifndef NDEBUG
6247 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
6248 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6940,10 +6970,14 @@
6970 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6971 ** and database name of the source database, respectively.
6972 ** ^The source and destination [database connections] (parameters S and D)
6973 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6974 ** an error.
6975 **
6976 ** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if
6977 ** there is already a read or read-write transaction open on the
6978 ** destination database.
6979 **
6980 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6981 ** returned and an error code and error message are stored in the
6982 ** destination [database connection] D.
6983 ** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7533,10 +7567,102 @@
7567 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
7568 #define SQLITE_FAIL 3
7569 /* #define SQLITE_ABORT 4 // Also an error code */
7570 #define SQLITE_REPLACE 5
7571
7572 /*
7573 ** CAPI3REF: Prepared Statement Scan Status Opcodes
7574 ** KEYWORDS: {scanstatus options}
7575 **
7576 ** The following constants can be used for the T parameter to the
7577 ** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a
7578 ** different metric for sqlite3_stmt_scanstatus() to return.
7579 **
7580 ** <dl>
7581 ** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
7582 ** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7583 ** total number of times that the X-th loop has run.</dd>
7584 **
7585 ** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
7586 ** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7587 ** total number of rows examined by all iterations of the X-th loop.</dd>
7588 **
7589 ** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
7590 ** <dd>^The "double" variable pointed to by the T parameter will be set to the
7591 ** query planner's estimate for the average number of rows output from each
7592 ** iteration of the X-th loop. If the query planner's estimates was accurate,
7593 ** then this value will approximate the quotient NVISIT/NLOOP and the
7594 ** product of this value for all prior loops with the same SELECTID will
7595 ** be the NLOOP value for the current loop.
7596 **
7597 ** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
7598 ** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7599 ** a zero-terminated UTF-8 string containing the name of the index or table used
7600 ** for the X-th loop.
7601 **
7602 ** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
7603 ** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7604 ** a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] description
7605 ** for the X-th loop.
7606 **
7607 ** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
7608 ** <dd>^The "int" variable pointed to by the T parameter will be set to the
7609 ** "select-id" for the X-th loop. The select-id identifies which query or
7610 ** subquery the loop is part of. The main query has a select-id of zero.
7611 ** The select-id is the same value as is output in the first column
7612 ** of an [EXPLAIN QUERY PLAN] query.
7613 ** </dl>
7614 */
7615 #define SQLITE_SCANSTAT_NLOOP 0
7616 #define SQLITE_SCANSTAT_NVISIT 1
7617 #define SQLITE_SCANSTAT_EST 2
7618 #define SQLITE_SCANSTAT_NAME 3
7619 #define SQLITE_SCANSTAT_EXPLAIN 4
7620 #define SQLITE_SCANSTAT_SELECTID 5
7621
7622 /*
7623 ** CAPI3REF: Prepared Statement Scan Status
7624 **
7625 ** Return status data for a single loop within query pStmt.
7626 **
7627 ** The "iScanStatusOp" parameter determines which status information to return.
7628 ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior of
7629 ** this interface is undefined.
7630 ** ^The requested measurement is written into a variable pointed to by
7631 ** the "pOut" parameter.
7632 ** Parameter "idx" identifies the specific loop to retrieve statistics for.
7633 ** Loops are numbered starting from zero. ^If idx is out of range - less than
7634 ** zero or greater than or equal to the total number of loops used to implement
7635 ** the statement - a non-zero value is returned and the variable that pOut
7636 ** points to is unchanged.
7637 **
7638 ** ^Statistics might not be available for all loops in all statements. ^In cases
7639 ** where there exist loops with no available statistics, this function behaves
7640 ** as if the loop did not exist - it returns non-zero and leave the variable
7641 ** that pOut points to unchanged.
7642 **
7643 ** This API is only available if the library is built with pre-processor
7644 ** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7645 **
7646 ** See also: [sqlite3_stmt_scanstatus_reset()]
7647 */
7648 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus(
7649 sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
7650 int idx, /* Index of loop to report on */
7651 int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
7652 void *pOut /* Result written here */
7653 );
7654
7655 /*
7656 ** CAPI3REF: Zero Scan-Status Counters
7657 **
7658 ** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
7659 **
7660 ** This API is only available if the library is built with pre-processor
7661 ** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7662 */
7663 SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
7664
7665
7666 /*
7667 ** Undo the hack that converts floating point types to integer for
7668 ** builds on processors without floating point support.
@@ -7978,14 +8104,13 @@
8104 #ifndef SQLITE_POWERSAFE_OVERWRITE
8105 # define SQLITE_POWERSAFE_OVERWRITE 1
8106 #endif
8107
8108 /*
8109 ** EVIDENCE-OF: R-25715-37072 Memory allocation statistics are enabled by
8110 ** default unless SQLite is compiled with SQLITE_DEFAULT_MEMSTATUS=0 in
8111 ** which case memory allocation statistics are disabled by default.
 
8112 */
8113 #if !defined(SQLITE_DEFAULT_MEMSTATUS)
8114 # define SQLITE_DEFAULT_MEMSTATUS 1
8115 #endif
8116
@@ -8611,11 +8736,11 @@
8736 ** Estimated quantities used for query planning are stored as 16-bit
8737 ** logarithms. For quantity X, the value stored is 10*log2(X). This
8738 ** gives a possible range of values of approximately 1.0e986 to 1e-986.
8739 ** But the allowed values are "grainy". Not every value is representable.
8740 ** For example, quantities 16 and 17 are both represented by a LogEst
8741 ** of 40. However, since LogEst quantities are suppose to be estimates,
8742 ** not exact values, this imprecision is not a problem.
8743 **
8744 ** "LogEst" is short for "Logarithmic Estimate".
8745 **
8746 ** Examples:
@@ -9124,10 +9249,11 @@
9249 SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *);
9250 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
9251 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
9252 SQLITE_PRIVATE void sqlite3BtreeCursorHints(BtCursor *, unsigned int mask);
9253 SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *pBt);
9254 SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void);
9255
9256 #ifndef NDEBUG
9257 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
9258 #endif
9259
@@ -9666,10 +9792,16 @@
9792 # define VdbeCoverageAlwaysTaken(v)
9793 # define VdbeCoverageNeverTaken(v)
9794 # define VDBE_OFFSET_LINENO(x) 0
9795 #endif
9796
9797 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
9798 SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*);
9799 #else
9800 # define sqlite3VdbeScanStatus(a,b,c,d,e)
9801 #endif
9802
9803 #endif
9804
9805 /************** End of vdbe.h ************************************************/
9806 /************** Continuing where we left off in sqliteInt.h ******************/
9807 /************** Include pager.h in the middle of sqliteInt.h *****************/
@@ -9862,10 +9994,12 @@
9994 SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *);
9995
9996 /* Functions used to truncate the database file. */
9997 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
9998
9999 SQLITE_PRIVATE void sqlite3PagerRekey(DbPage*, Pgno, u16);
10000
10001 #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
10002 SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
10003 #endif
10004
10005 /* Functions to support testing and debugging. */
@@ -10049,10 +10183,14 @@
10183 SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
10184 #endif
10185
10186 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
10187
10188 /* Return the header size */
10189 SQLITE_PRIVATE int sqlite3HeaderSizePcache(void);
10190 SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void);
10191
10192 #endif /* _PCACHE_H_ */
10193
10194 /************** End of pcache.h **********************************************/
10195 /************** Continuing where we left off in sqliteInt.h ******************/
10196
@@ -10735,11 +10873,11 @@
10873 #define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */
10874 #define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */
10875 #define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */
10876 #define SQLITE_Transitive 0x0200 /* Transitive constraints */
10877 #define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */
10878 #define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */
10879 #define SQLITE_AllOpts 0xffff /* All optimizations */
10880
10881 /*
10882 ** Macros for testing whether or not optimizations are enabled or disabled.
10883 */
@@ -11317,16 +11455,18 @@
11455 unsigned idxType:2; /* 1==UNIQUE, 2==PRIMARY KEY, 0==CREATE INDEX */
11456 unsigned bUnordered:1; /* Use this index for == or IN queries only */
11457 unsigned uniqNotNull:1; /* True if UNIQUE and NOT NULL for all columns */
11458 unsigned isResized:1; /* True if resizeIndexObject() has been called */
11459 unsigned isCovering:1; /* True if this is a covering index */
11460 unsigned noSkipScan:1; /* Do not try to use skip-scan if true */
11461 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
11462 int nSample; /* Number of elements in aSample[] */
11463 int nSampleCol; /* Size of IndexSample.anEq[] and so on */
11464 tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */
11465 IndexSample *aSample; /* Samples of the left-most key */
11466 tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */
11467 tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */
11468 #endif
11469 };
11470
11471 /*
11472 ** Allowed values for Index.idxType
@@ -11520,11 +11660,11 @@
11660 int nHeight; /* Height of the tree headed by this node */
11661 #endif
11662 int iTable; /* TK_COLUMN: cursor number of table holding column
11663 ** TK_REGISTER: register number
11664 ** TK_TRIGGER: 1 -> new, 0 -> old
11665 ** EP_Unlikely: 134217728 times likelihood */
11666 ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid.
11667 ** TK_VARIABLE: variable number (always >= 1). */
11668 i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
11669 i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
11670 u8 op2; /* TK_REGISTER: original value of Expr.op
@@ -12412,13 +12552,15 @@
12552 int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */
12553 int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */
12554 void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
12555 Parse *pParse; /* Parser context. */
12556 int walkerDepth; /* Number of subqueries */
12557 u8 eCode; /* A small processing code */
12558 union { /* Extra data for callback */
12559 NameContext *pNC; /* Naming context */
12560 int n; /* A counter */
12561 int iCur; /* A cursor number */
12562 SrcList *pSrcList; /* FROM clause */
12563 struct SrcCount *pSrcCount; /* Counting column references */
12564 } u;
12565 };
12566
@@ -12815,10 +12957,11 @@
12957 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
12958 SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
12959 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
12960 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
12961 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
12962 SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int);
12963 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
12964 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
12965 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
12966 SQLITE_PRIVATE int sqlite3IsRowid(const char*);
12967 SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8);
@@ -13472,15 +13615,23 @@
13615 ** compatibility for legacy applications, the URI filename capability is
13616 ** disabled by default.
13617 **
13618 ** EVIDENCE-OF: R-38799-08373 URI filenames can be enabled or disabled
13619 ** using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options.
13620 **
13621 ** EVIDENCE-OF: R-43642-56306 By default, URI handling is globally
13622 ** disabled. The default value may be changed by compiling with the
13623 ** SQLITE_USE_URI symbol defined.
13624 */
13625 #ifndef SQLITE_USE_URI
13626 # define SQLITE_USE_URI 0
13627 #endif
13628
13629 /* EVIDENCE-OF: R-38720-18127 The default setting is determined by the
13630 ** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
13631 ** that compile-time option is omitted.
13632 */
13633 #ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
13634 # define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
13635 #endif
13636
13637 /*
@@ -13566,12 +13717,12 @@
13717 ** than 1 GiB. The sqlite3_test_control() interface can be used to
13718 ** move the pending byte.
13719 **
13720 ** IMPORTANT: Changing the pending byte to any value other than
13721 ** 0x40000000 results in an incompatible database file format!
13722 ** Changing the pending byte during operation will result in undefined
13723 ** and incorrect behavior.
13724 */
13725 #ifndef SQLITE_OMIT_WSD
13726 SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
13727 #endif
13728
@@ -13646,10 +13797,13 @@
13797 #ifdef SQLITE_DISABLE_DIRSYNC
13798 "DISABLE_DIRSYNC",
13799 #endif
13800 #ifdef SQLITE_DISABLE_LFS
13801 "DISABLE_LFS",
13802 #endif
13803 #ifdef SQLITE_ENABLE_API_ARMOR
13804 "ENABLE_API_ARMOR",
13805 #endif
13806 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
13807 "ENABLE_ATOMIC_WRITE",
13808 #endif
13809 #ifdef SQLITE_ENABLE_CEROD
@@ -13972,10 +14126,17 @@
14126 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
14127 ** is not required for a match.
14128 */
14129 SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
14130 int i, n;
14131
14132 #ifdef SQLITE_ENABLE_API_ARMOR
14133 if( zOptName==0 ){
14134 (void)SQLITE_MISUSE_BKPT;
14135 return 0;
14136 }
14137 #endif
14138 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
14139 n = sqlite3Strlen30(zOptName);
14140
14141 /* Since ArraySize(azCompileOpt) is normally in single digits, a
14142 ** linear search is adequate. No need for a binary search. */
@@ -14153,10 +14314,11 @@
14314 typedef struct VdbeFrame VdbeFrame;
14315 struct VdbeFrame {
14316 Vdbe *v; /* VM this frame belongs to */
14317 VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
14318 Op *aOp; /* Program instructions for parent frame */
14319 i64 *anExec; /* Event counters from parent frame */
14320 Mem *aMem; /* Array of memory cells for parent frame */
14321 u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
14322 VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
14323 void *token; /* Copy of SubProgram.token */
14324 i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
@@ -14165,11 +14327,12 @@
14327 int nOp; /* Size of aOp array */
14328 int nMem; /* Number of entries in aMem */
14329 int nOnceFlag; /* Number of entries in aOnceFlag */
14330 int nChildMem; /* Number of memory cells for child frame */
14331 int nChildCsr; /* Number of cursors for child frame */
14332 int nChange; /* Statement changes (Vdbe.nChange) */
14333 int nDbChange; /* Value of db->nChange */
14334 };
14335
14336 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
14337
14338 /*
@@ -14316,10 +14479,20 @@
14479 /* A bitfield type for use inside of structures. Always follow with :N where
14480 ** N is the number of bits.
14481 */
14482 typedef unsigned bft; /* Bit Field Type */
14483
14484 typedef struct ScanStatus ScanStatus;
14485 struct ScanStatus {
14486 int addrExplain; /* OP_Explain for loop */
14487 int addrLoop; /* Address of "loops" counter */
14488 int addrVisit; /* Address of "rows visited" counter */
14489 int iSelectID; /* The "Select-ID" for this loop */
14490 LogEst nEst; /* Estimated output rows per loop */
14491 char *zName; /* Name of table or index */
14492 };
14493
14494 /*
14495 ** An instance of the virtual machine. This structure contains the complete
14496 ** state of the virtual machine.
14497 **
14498 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
@@ -14388,10 +14561,15 @@
14561 u32 expmask; /* Binding to these vars invalidates VM */
14562 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
14563 int nOnceFlag; /* Size of array aOnceFlag[] */
14564 u8 *aOnceFlag; /* Flags for OP_Once */
14565 AuxData *pAuxData; /* Linked list of auxdata allocations */
14566 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
14567 i64 *anExec; /* Number of times each op has been executed */
14568 int nScan; /* Entries in aScan[] */
14569 ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
14570 #endif
14571 };
14572
14573 /*
14574 ** The following are allowed values for Vdbe.magic
14575 */
@@ -14577,10 +14755,13 @@
14755 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
14756 wsdStatInit;
14757 if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
14758 return SQLITE_MISUSE_BKPT;
14759 }
14760 #ifdef SQLITE_ENABLE_API_ARMOR
14761 if( pCurrent==0 || pHighwater==0 ) return SQLITE_MISUSE_BKPT;
14762 #endif
14763 *pCurrent = wsdStat.nowValue[op];
14764 *pHighwater = wsdStat.mxValue[op];
14765 if( resetFlag ){
14766 wsdStat.mxValue[op] = wsdStat.nowValue[op];
14767 }
@@ -14596,10 +14777,15 @@
14777 int *pCurrent, /* Write current value here */
14778 int *pHighwater, /* Write high-water mark here */
14779 int resetFlag /* Reset high-water mark if true */
14780 ){
14781 int rc = SQLITE_OK; /* Return code */
14782 #ifdef SQLITE_ENABLE_API_ARMOR
14783 if( !sqlite3SafetyCheckOk(db) || pCurrent==0|| pHighwater==0 ){
14784 return SQLITE_MISUSE_BKPT;
14785 }
14786 #endif
14787 sqlite3_mutex_enter(db->mutex);
14788 switch( op ){
14789 case SQLITE_DBSTATUS_LOOKASIDE_USED: {
14790 *pCurrent = db->lookaside.nOut;
14791 *pHighwater = db->lookaside.mxOut;
@@ -14774,11 +14960,11 @@
14960 **
14961 ** There is only one exported symbol in this file - the function
14962 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
14963 ** All other code has file scope.
14964 **
14965 ** SQLite processes all times and dates as julian day numbers. The
14966 ** dates and times are stored as the number of days since noon
14967 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
14968 ** calendar system.
14969 **
14970 ** 1970-01-01 00:00:00 is JD 2440587.5
@@ -14789,11 +14975,11 @@
14975 ** be represented, even though julian day numbers allow a much wider
14976 ** range of dates.
14977 **
14978 ** The Gregorian calendar system is used for all dates and times,
14979 ** even those that predate the Gregorian calendar. Historians usually
14980 ** use the julian calendar for dates prior to 1582-10-15 and for some
14981 ** dates afterwards, depending on locale. Beware of this difference.
14982 **
14983 ** The conversion algorithms are implemented based on descriptions
14984 ** in the following text:
14985 **
@@ -15061,11 +15247,11 @@
15247 return 1;
15248 }
15249 }
15250
15251 /*
15252 ** Attempt to parse the given string into a julian day number. Return
15253 ** the number of errors.
15254 **
15255 ** The following are acceptable forms for the input string:
15256 **
15257 ** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
@@ -15632,11 +15818,11 @@
15818 **
15819 ** %d day of month
15820 ** %f ** fractional seconds SS.SSS
15821 ** %H hour 00-24
15822 ** %j day of year 000-366
15823 ** %J ** julian day number
15824 ** %m month 01-12
15825 ** %M minute 00-59
15826 ** %s seconds since 1970-01-01
15827 ** %S seconds 00-59
15828 ** %w day of week 0-6 sunday==0
@@ -16257,10 +16443,14 @@
16443 MUTEX_LOGIC(sqlite3_mutex *mutex;)
16444 #ifndef SQLITE_OMIT_AUTOINIT
16445 int rc = sqlite3_initialize();
16446 if( rc ) return rc;
16447 #endif
16448 #ifdef SQLITE_ENABLE_API_ARMOR
16449 if( pVfs==0 ) return SQLITE_MISUSE_BKPT;
16450 #endif
16451
16452 MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
16453 sqlite3_mutex_enter(mutex);
16454 vfsUnlink(pVfs);
16455 if( makeDflt || vfsList==0 ){
16456 pVfs->pNext = vfsList;
@@ -18614,10 +18804,11 @@
18804 ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
18805 */
18806 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
18807 #ifndef SQLITE_OMIT_AUTOINIT
18808 if( id<=SQLITE_MUTEX_RECURSIVE && sqlite3_initialize() ) return 0;
18809 if( id>SQLITE_MUTEX_RECURSIVE && sqlite3MutexInit() ) return 0;
18810 #endif
18811 return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
18812 }
18813
18814 SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
@@ -19070,12 +19261,16 @@
19261 pthread_mutex_init(&p->mutex, 0);
19262 }
19263 break;
19264 }
19265 default: {
19266 #ifdef SQLITE_ENABLE_API_ARMOR
19267 if( iType-2<0 || iType-2>=ArraySize(staticMutexes) ){
19268 (void)SQLITE_MISUSE_BKPT;
19269 return 0;
19270 }
19271 #endif
19272 p = &staticMutexes[iType-2];
19273 #if SQLITE_MUTEX_NREF
19274 p->id = iType;
19275 #endif
19276 break;
@@ -20293,15 +20488,16 @@
20488 }
20489 assert( sqlite3_mutex_notheld(mem0.mutex) );
20490
20491
20492 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
20493 /* EVIDENCE-OF: R-12970-05880 SQLite will not use more than one scratch
20494 ** buffers per thread.
20495 **
20496 ** This can only be checked in single-threaded mode.
20497 */
20498 assert( scratchAllocOut==0 );
20499 if( p ) scratchAllocOut++;
20500 #endif
20501
20502 return p;
20503 }
@@ -20956,10 +21152,17 @@
21152 etByte flag_rtz; /* True if trailing zeros should be removed */
21153 #endif
21154 PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */
21155 char buf[etBUFSIZE]; /* Conversion buffer */
21156
21157 #ifdef SQLITE_ENABLE_API_ARMOR
21158 if( ap==0 ){
21159 (void)SQLITE_MISUSE_BKPT;
21160 sqlite3StrAccumReset(pAccum);
21161 return;
21162 }
21163 #endif
21164 bufpt = 0;
21165 if( bFlags ){
21166 if( (bArgList = (bFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){
21167 pArgList = va_arg(ap, PrintfArguments*);
21168 }
@@ -21496,10 +21699,15 @@
21699 return N;
21700 }else{
21701 char *zOld = (p->zText==p->zBase ? 0 : p->zText);
21702 i64 szNew = p->nChar;
21703 szNew += N + 1;
21704 if( szNew+p->nChar<=p->mxAlloc ){
21705 /* Force exponential buffer size growth as long as it does not overflow,
21706 ** to avoid having to call this routine too often */
21707 szNew += p->nChar;
21708 }
21709 if( szNew > p->mxAlloc ){
21710 sqlite3StrAccumReset(p);
21711 setStrAccumError(p, STRACCUM_TOOBIG);
21712 return 0;
21713 }else{
@@ -21512,10 +21720,11 @@
21720 }
21721 if( zNew ){
21722 assert( p->zText!=0 || p->nChar==0 );
21723 if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar);
21724 p->zText = zNew;
21725 p->nAlloc = sqlite3DbMallocSize(p->db, zNew);
21726 }else{
21727 sqlite3StrAccumReset(p);
21728 setStrAccumError(p, STRACCUM_NOMEM);
21729 return 0;
21730 }
@@ -21681,10 +21890,17 @@
21890 */
21891 SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
21892 char *z;
21893 char zBase[SQLITE_PRINT_BUF_SIZE];
21894 StrAccum acc;
21895
21896 #ifdef SQLITE_ENABLE_API_ARMOR
21897 if( zFormat==0 ){
21898 (void)SQLITE_MISUSE_BKPT;
21899 return 0;
21900 }
21901 #endif
21902 #ifndef SQLITE_OMIT_AUTOINIT
21903 if( sqlite3_initialize() ) return 0;
21904 #endif
21905 sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
21906 acc.useMalloc = 2;
@@ -21723,10 +21939,17 @@
21939 ** sqlite3_vsnprintf() is the varargs version.
21940 */
21941 SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
21942 StrAccum acc;
21943 if( n<=0 ) return zBuf;
21944 #ifdef SQLITE_ENABLE_API_ARMOR
21945 if( zBuf==0 || zFormat==0 ) {
21946 (void)SQLITE_MISUSE_BKPT;
21947 if( zBuf && n>0 ) zBuf[0] = 0;
21948 return zBuf;
21949 }
21950 #endif
21951 sqlite3StrAccumInit(&acc, zBuf, n, 0);
21952 acc.useMalloc = 0;
21953 sqlite3VXPrintf(&acc, 0, zFormat, ap);
21954 return sqlite3StrAccumFinish(&acc);
21955 }
@@ -21914,15 +22137,23 @@
22137 #else
22138 # define wsdPrng sqlite3Prng
22139 #endif
22140
22141 #if SQLITE_THREADSAFE
22142 sqlite3_mutex *mutex;
22143 #endif
22144
22145 #ifndef SQLITE_OMIT_AUTOINIT
22146 if( sqlite3_initialize() ) return;
22147 #endif
22148
22149 #if SQLITE_THREADSAFE
22150 mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
22151 #endif
22152
22153 sqlite3_mutex_enter(mutex);
22154 if( N<=0 || pBuf==0 ){
 
 
22155 wsdPrng.isInit = 0;
22156 sqlite3_mutex_leave(mutex);
22157 return;
22158 }
22159
@@ -23040,17 +23271,27 @@
23271 ** case-independent fashion, using the same definition of "case
23272 ** independence" that SQLite uses internally when comparing identifiers.
23273 */
23274 SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){
23275 register unsigned char *a, *b;
23276 if( zLeft==0 ){
23277 return zRight ? -1 : 0;
23278 }else if( zRight==0 ){
23279 return 1;
23280 }
23281 a = (unsigned char *)zLeft;
23282 b = (unsigned char *)zRight;
23283 while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
23284 return UpperToLower[*a] - UpperToLower[*b];
23285 }
23286 SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
23287 register unsigned char *a, *b;
23288 if( zLeft==0 ){
23289 return zRight ? -1 : 0;
23290 }else if( zRight==0 ){
23291 return 1;
23292 }
23293 a = (unsigned char *)zLeft;
23294 b = (unsigned char *)zRight;
23295 while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
23296 return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
23297 }
@@ -32579,10 +32820,15 @@
32820 #if !SQLITE_OS_WINNT && !defined(SQLITE_OMIT_WAL)
32821 # error "WAL mode requires support from the Windows NT kernel, compile\
32822 with SQLITE_OMIT_WAL."
32823 #endif
32824
32825 #if !SQLITE_OS_WINNT && SQLITE_MAX_MMAP_SIZE>0
32826 # error "Memory mapped files require support from the Windows NT kernel,\
32827 compile with SQLITE_MAX_MMAP_SIZE=0."
32828 #endif
32829
32830 /*
32831 ** Are most of the Win32 ANSI APIs available (i.e. with certain exceptions
32832 ** based on the sub-platform)?
32833 */
32834 #if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && !defined(SQLITE_WIN32_NO_ANSI)
@@ -32708,14 +32954,15 @@
32954 # define winGetDirSep() '\\'
32955 #endif
32956
32957 /*
32958 ** Do we need to manually define the Win32 file mapping APIs for use with WAL
32959 ** mode or memory mapped files (e.g. these APIs are available in the Windows
32960 ** CE SDK; however, they are not present in the header file)?
32961 */
32962 #if SQLITE_WIN32_FILEMAPPING_API && \
32963 (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
32964 /*
32965 ** Two of the file mapping APIs are different under WinRT. Figure out which
32966 ** set we need.
32967 */
32968 #if SQLITE_OS_WINRT
@@ -32739,11 +32986,11 @@
32986
32987 /*
32988 ** This file mapping API is common to both Win32 and WinRT.
32989 */
32990 WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID);
32991 #endif /* SQLITE_WIN32_FILEMAPPING_API */
32992
32993 /*
32994 ** Some Microsoft compilers lack this definition.
32995 */
32996 #ifndef INVALID_FILE_ATTRIBUTES
@@ -33032,21 +33279,21 @@
33279
33280 #define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \
33281 LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent)
33282
33283 #if (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_ANSI) && \
33284 (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
33285 { "CreateFileMappingA", (SYSCALL)CreateFileMappingA, 0 },
33286 #else
33287 { "CreateFileMappingA", (SYSCALL)0, 0 },
33288 #endif
33289
33290 #define osCreateFileMappingA ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
33291 DWORD,DWORD,DWORD,LPCSTR))aSyscall[6].pCurrent)
33292
33293 #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \
33294 (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
33295 { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 },
33296 #else
33297 { "CreateFileMappingW", (SYSCALL)0, 0 },
33298 #endif
33299
@@ -33382,11 +33629,12 @@
33629 #ifndef osLockFileEx
33630 #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \
33631 LPOVERLAPPED))aSyscall[48].pCurrent)
33632 #endif
33633
33634 #if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && \
33635 (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0))
33636 { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 },
33637 #else
33638 { "MapViewOfFile", (SYSCALL)0, 0 },
33639 #endif
33640
@@ -33452,11 +33700,11 @@
33700 #endif
33701
33702 #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
33703 LPOVERLAPPED))aSyscall[58].pCurrent)
33704
33705 #if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
33706 { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 },
33707 #else
33708 { "UnmapViewOfFile", (SYSCALL)0, 0 },
33709 #endif
33710
@@ -33515,11 +33763,11 @@
33763 #endif
33764
33765 #define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \
33766 FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent)
33767
33768 #if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
33769 { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 },
33770 #else
33771 { "MapViewOfFileFromApp", (SYSCALL)0, 0 },
33772 #endif
33773
@@ -33579,11 +33827,11 @@
33827
33828 { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 },
33829
33830 #define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent)
33831
33832 #if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
33833 { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 },
33834 #else
33835 { "CreateFileMappingFromApp", (SYSCALL)0, 0 },
33836 #endif
33837
@@ -39155,10 +39403,17 @@
39403 */
39404 SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
39405 assert( pCache->pCache!=0 );
39406 sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
39407 }
39408
39409 /*
39410 ** Return the size of the header added by this middleware layer
39411 ** in the page-cache hierarchy.
39412 */
39413 SQLITE_PRIVATE int sqlite3HeaderSizePcache(void){ return sizeof(PgHdr); }
39414
39415
39416 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
39417 /*
39418 ** For all dirty pages currently in the cache, invoke the specified
39419 ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
@@ -40154,10 +40409,15 @@
40409 pcache1Shrink /* xShrink */
40410 };
40411 sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods);
40412 }
40413
40414 /*
40415 ** Return the size of the header on each page of this PCACHE implementation.
40416 */
40417 SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return sizeof(PgHdr1); }
40418
40419 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
40420 /*
40421 ** This function is called to free superfluous dynamically allocated memory
40422 ** held by the pager system. Memory in use by any SQLite pager allocated
40423 ** by the current thread may be sqlite3_free()ed.
@@ -43763,11 +44023,11 @@
44023 ** should be page numbers which are never 0xffffffff. So filling
44024 ** pPager->dbFileVers[] with all 0xff bytes should suffice.
44025 **
44026 ** For an encrypted database, the situation is more complex: bytes
44027 ** 24..39 of the database are white noise. But the probability of
44028 ** white noise equaling 16 bytes of 0xff is vanishingly small so
44029 ** we should still be ok.
44030 */
44031 memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
44032 }else{
44033 u8 *dbFileVers = &((u8*)pPg->pData)[24];
@@ -47710,10 +47970,22 @@
47970 }
47971
47972 return SQLITE_OK;
47973 }
47974 #endif
47975
47976 /*
47977 ** The page handle passed as the first argument refers to a dirty page
47978 ** with a page number other than iNew. This function changes the page's
47979 ** page number to iNew and sets the value of the PgHdr.flags field to
47980 ** the value passed as the third parameter.
47981 */
47982 SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){
47983 assert( pPg->pgno!=iNew );
47984 pPg->flags = flags;
47985 sqlite3PcacheMove(pPg, iNew);
47986 }
47987
47988 /*
47989 ** Return a pointer to the data for the specified page.
47990 */
47991 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
@@ -48108,10 +48380,11 @@
48380 SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
48381 assert( pPager->eState>=PAGER_READER );
48382 return sqlite3WalFramesize(pPager->pWal);
48383 }
48384 #endif
48385
48386
48387 #endif /* SQLITE_OMIT_DISKIO */
48388
48389 /************** End of pager.c ***********************************************/
48390 /************** Begin file wal.c *********************************************/
@@ -49618,11 +49891,11 @@
49891
49892 /*
49893 ** Free an iterator allocated by walIteratorInit().
49894 */
49895 static void walIteratorFree(WalIterator *p){
49896 sqlite3_free(p);
49897 }
49898
49899 /*
49900 ** Construct a WalInterator object that can be used to loop over all
49901 ** pages in the WAL in ascending order. The caller must hold the checkpoint
@@ -49653,21 +49926,21 @@
49926 /* Allocate space for the WalIterator object. */
49927 nSegment = walFramePage(iLast) + 1;
49928 nByte = sizeof(WalIterator)
49929 + (nSegment-1)*sizeof(struct WalSegment)
49930 + iLast*sizeof(ht_slot);
49931 p = (WalIterator *)sqlite3_malloc(nByte);
49932 if( !p ){
49933 return SQLITE_NOMEM;
49934 }
49935 memset(p, 0, nByte);
49936 p->nSegment = nSegment;
49937
49938 /* Allocate temporary space used by the merge-sort routine. This block
49939 ** of memory will be freed before this function returns.
49940 */
49941 aTmp = (ht_slot *)sqlite3_malloc(
49942 sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
49943 );
49944 if( !aTmp ){
49945 rc = SQLITE_NOMEM;
49946 }
@@ -49700,11 +49973,11 @@
49973 p->aSegment[i].nEntry = nEntry;
49974 p->aSegment[i].aIndex = aIndex;
49975 p->aSegment[i].aPgno = (u32 *)aPgno;
49976 }
49977 }
49978 sqlite3_free(aTmp);
49979
49980 if( rc!=SQLITE_OK ){
49981 walIteratorFree(p);
49982 }
49983 *pp = p;
@@ -53331,10 +53604,15 @@
53604 /*
53605 ** Defragment the page given. All Cells are moved to the
53606 ** end of the page and all free space is collected into one
53607 ** big FreeBlk that occurs in between the header and cell
53608 ** pointer array and the cell content area.
53609 **
53610 ** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a
53611 ** b-tree page so that there are no freeblocks or fragment bytes, all
53612 ** unused bytes are contained in the unallocated space region, and all
53613 ** cells are packed tightly at the end of the page.
53614 */
53615 static int defragmentPage(MemPage *pPage){
53616 int i; /* Loop counter */
53617 int pc; /* Address of the i-th cell */
53618 int hdr; /* Offset to the page header */
@@ -53343,28 +53621,27 @@
53621 int cellOffset; /* Offset to the cell pointer array */
53622 int cbrk; /* Offset to the cell content area */
53623 int nCell; /* Number of cells on the page */
53624 unsigned char *data; /* The page data */
53625 unsigned char *temp; /* Temp area for cell content */
53626 unsigned char *src; /* Source of content */
53627 int iCellFirst; /* First allowable cell index */
53628 int iCellLast; /* Last possible cell index */
53629
53630
53631 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53632 assert( pPage->pBt!=0 );
53633 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
53634 assert( pPage->nOverflow==0 );
53635 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53636 temp = 0;
53637 src = data = pPage->aData;
53638 hdr = pPage->hdrOffset;
53639 cellOffset = pPage->cellOffset;
53640 nCell = pPage->nCell;
53641 assert( nCell==get2byte(&data[hdr+3]) );
53642 usableSize = pPage->pBt->usableSize;
 
 
53643 cbrk = usableSize;
53644 iCellFirst = cellOffset + 2*nCell;
53645 iCellLast = usableSize - 4;
53646 for(i=0; i<nCell; i++){
53647 u8 *pAddr; /* The i-th cell pointer */
@@ -53379,11 +53656,11 @@
53656 if( pc<iCellFirst || pc>iCellLast ){
53657 return SQLITE_CORRUPT_BKPT;
53658 }
53659 #endif
53660 assert( pc>=iCellFirst && pc<=iCellLast );
53661 size = cellSizePtr(pPage, &src[pc]);
53662 cbrk -= size;
53663 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
53664 if( cbrk<iCellFirst ){
53665 return SQLITE_CORRUPT_BKPT;
53666 }
@@ -53393,12 +53670,20 @@
53670 }
53671 #endif
53672 assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
53673 testcase( cbrk+size==usableSize );
53674 testcase( pc+size==usableSize );
 
53675 put2byte(pAddr, cbrk);
53676 if( temp==0 ){
53677 int x;
53678 if( cbrk==pc ) continue;
53679 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
53680 x = get2byte(&data[hdr+5]);
53681 memcpy(&temp[x], &data[x], (cbrk+size) - x);
53682 src = temp;
53683 }
53684 memcpy(&data[cbrk], &src[pc], size);
53685 }
53686 assert( cbrk>=iCellFirst );
53687 put2byte(&data[hdr+5], cbrk);
53688 data[hdr+1] = 0;
53689 data[hdr+2] = 0;
@@ -53408,10 +53693,73 @@
53693 if( cbrk-iCellFirst!=pPage->nFree ){
53694 return SQLITE_CORRUPT_BKPT;
53695 }
53696 return SQLITE_OK;
53697 }
53698
53699 /*
53700 ** Search the free-list on page pPg for space to store a cell nByte bytes in
53701 ** size. If one can be found, return a pointer to the space and remove it
53702 ** from the free-list.
53703 **
53704 ** If no suitable space can be found on the free-list, return NULL.
53705 **
53706 ** This function may detect corruption within pPg. If corruption is
53707 ** detected then *pRc is set to SQLITE_CORRUPT and NULL is returned.
53708 **
53709 ** If a slot of at least nByte bytes is found but cannot be used because
53710 ** there are already at least 60 fragmented bytes on the page, return NULL.
53711 ** In this case, if pbDefrag parameter is not NULL, set *pbDefrag to true.
53712 */
53713 static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc, int *pbDefrag){
53714 const int hdr = pPg->hdrOffset;
53715 u8 * const aData = pPg->aData;
53716 int iAddr;
53717 int pc;
53718 int usableSize = pPg->pBt->usableSize;
53719
53720 for(iAddr=hdr+1; (pc = get2byte(&aData[iAddr]))>0; iAddr=pc){
53721 int size; /* Size of the free slot */
53722 /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
53723 ** increasing offset. */
53724 if( pc>usableSize-4 || pc<iAddr+4 ){
53725 *pRc = SQLITE_CORRUPT_BKPT;
53726 return 0;
53727 }
53728 /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each
53729 ** freeblock form a big-endian integer which is the size of the freeblock
53730 ** in bytes, including the 4-byte header. */
53731 size = get2byte(&aData[pc+2]);
53732 if( size>=nByte ){
53733 int x = size - nByte;
53734 testcase( x==4 );
53735 testcase( x==3 );
53736 if( x<4 ){
53737 /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total
53738 ** number of bytes in fragments may not exceed 60. */
53739 if( aData[hdr+7]>=60 ){
53740 if( pbDefrag ) *pbDefrag = 1;
53741 return 0;
53742 }
53743 /* Remove the slot from the free-list. Update the number of
53744 ** fragmented bytes within the page. */
53745 memcpy(&aData[iAddr], &aData[pc], 2);
53746 aData[hdr+7] += (u8)x;
53747 }else if( size+pc > usableSize ){
53748 *pRc = SQLITE_CORRUPT_BKPT;
53749 return 0;
53750 }else{
53751 /* The slot remains on the free-list. Reduce its size to account
53752 ** for the portion used by the new allocation. */
53753 put2byte(&aData[pc+2], x);
53754 }
53755 return &aData[pc + x];
53756 }
53757 }
53758
53759 return 0;
53760 }
53761
53762 /*
53763 ** Allocate nByte bytes of space from within the B-Tree page passed
53764 ** as the first argument. Write into *pIdx the index into pPage->aData[]
53765 ** of the first byte of allocated space. Return either SQLITE_OK or
@@ -53426,79 +53774,57 @@
53774 */
53775 static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
53776 const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */
53777 u8 * const data = pPage->aData; /* Local cache of pPage->aData */
53778 int top; /* First byte of cell content area */
53779 int rc = SQLITE_OK; /* Integer return code */
53780 int gap; /* First byte of gap between cell pointers and cell content */
 
 
53781
53782 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53783 assert( pPage->pBt );
53784 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53785 assert( nByte>=0 ); /* Minimum cell size is 4 */
53786 assert( pPage->nFree>=nByte );
53787 assert( pPage->nOverflow==0 );
53788 assert( nByte < (int)(pPage->pBt->usableSize-8) );
 
53789
53790 assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
53791 gap = pPage->cellOffset + 2*pPage->nCell;
53792 assert( gap<=65536 );
53793 /* EVIDENCE-OF: R-29356-02391 If the database uses a 65536-byte page size
53794 ** and the reserved space is zero (the usual value for reserved space)
53795 ** then the cell content offset of an empty page wants to be 65536.
53796 ** However, that integer is too large to be stored in a 2-byte unsigned
53797 ** integer, so a value of 0 is used in its place. */
53798 top = get2byteNotZero(&data[hdr+5]);
53799 if( gap>top ) return SQLITE_CORRUPT_BKPT;
 
53800
53801 /* If there is enough space between gap and top for one more cell pointer
53802 ** array entry offset, and if the freelist is not empty, then search the
53803 ** freelist looking for a free slot big enough to satisfy the request.
53804 */
53805 testcase( gap+2==top );
53806 testcase( gap+1==top );
53807 testcase( gap==top );
53808 if( gap+2<=top && (data[hdr+1] || data[hdr+2]) ){
53809 int bDefrag = 0;
53810 u8 *pSpace = pageFindSlot(pPage, nByte, &rc, &bDefrag);
53811 if( rc ) return rc;
53812 if( bDefrag ) goto defragment_page;
53813 if( pSpace ){
53814 assert( pSpace>=data && (pSpace - data)<65536 );
53815 *pIdx = (int)(pSpace - data);
53816 return SQLITE_OK;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53817 }
53818 }
53819
53820 /* The request could not be fulfilled using a freelist slot. Check
53821 ** to see if defragmentation is necessary.
53822 */
53823 testcase( gap+2+nByte==top );
53824 if( gap+2+nByte>top ){
53825 defragment_page:
53826 testcase( pPage->nCell==0 );
53827 rc = defragmentPage(pPage);
53828 if( rc ) return rc;
53829 top = get2byteNotZero(&data[hdr+5]);
53830 assert( gap+nByte<=top );
@@ -53542,11 +53868,11 @@
53868 unsigned char *data = pPage->aData; /* Page content */
53869
53870 assert( pPage->pBt!=0 );
53871 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
53872 assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize );
53873 assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );
53874 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
53875 assert( iSize>=4 ); /* Minimum cell size is 4 */
53876 assert( iStart<=iLast );
53877
53878 /* Overwrite deleted information with zeros when the secure_delete
@@ -53637,22 +53963,36 @@
53963 pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
53964 flagByte &= ~PTF_LEAF;
53965 pPage->childPtrSize = 4-4*pPage->leaf;
53966 pBt = pPage->pBt;
53967 if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
53968 /* EVIDENCE-OF: R-03640-13415 A value of 5 means the page is an interior
53969 ** table b-tree page. */
53970 assert( (PTF_LEAFDATA|PTF_INTKEY)==5 );
53971 /* EVIDENCE-OF: R-20501-61796 A value of 13 means the page is a leaf
53972 ** table b-tree page. */
53973 assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 );
53974 pPage->intKey = 1;
53975 pPage->intKeyLeaf = pPage->leaf;
53976 pPage->noPayload = !pPage->leaf;
53977 pPage->maxLocal = pBt->maxLeaf;
53978 pPage->minLocal = pBt->minLeaf;
53979 }else if( flagByte==PTF_ZERODATA ){
53980 /* EVIDENCE-OF: R-27225-53936 A value of 2 means the page is an interior
53981 ** index b-tree page. */
53982 assert( (PTF_ZERODATA)==2 );
53983 /* EVIDENCE-OF: R-16571-11615 A value of 10 means the page is a leaf
53984 ** index b-tree page. */
53985 assert( (PTF_ZERODATA|PTF_LEAF)==10 );
53986 pPage->intKey = 0;
53987 pPage->intKeyLeaf = 0;
53988 pPage->noPayload = 0;
53989 pPage->maxLocal = pBt->maxLocal;
53990 pPage->minLocal = pBt->minLocal;
53991 }else{
53992 /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is
53993 ** an error. */
53994 return SQLITE_CORRUPT_BKPT;
53995 }
53996 pPage->max1bytePayload = pBt->max1bytePayload;
53997 return SQLITE_OK;
53998 }
@@ -53688,25 +54028,37 @@
54028
54029 pBt = pPage->pBt;
54030
54031 hdr = pPage->hdrOffset;
54032 data = pPage->aData;
54033 /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating
54034 ** the b-tree page type. */
54035 if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
54036 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
54037 pPage->maskPage = (u16)(pBt->pageSize - 1);
54038 pPage->nOverflow = 0;
54039 usableSize = pBt->usableSize;
54040 pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize;
54041 pPage->aDataEnd = &data[usableSize];
54042 pPage->aCellIdx = &data[cellOffset];
54043 /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates
54044 ** the start of the cell content area. A zero value for this integer is
54045 ** interpreted as 65536. */
54046 top = get2byteNotZero(&data[hdr+5]);
54047 /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
54048 ** number of cells on the page. */
54049 pPage->nCell = get2byte(&data[hdr+3]);
54050 if( pPage->nCell>MX_CELL(pBt) ){
54051 /* To many cells for a single page. The page must be corrupt */
54052 return SQLITE_CORRUPT_BKPT;
54053 }
54054 testcase( pPage->nCell==MX_CELL(pBt) );
54055 /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only
54056 ** possible for a root page of a table that contains no rows) then the
54057 ** offset to the cell content area will equal the page size minus the
54058 ** bytes of reserved space. */
54059 assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB );
54060
54061 /* A malformed database page might cause us to read past the end
54062 ** of page when parsing a cell.
54063 **
54064 ** The following block of code checks early to see if a cell extends
@@ -53736,17 +54088,24 @@
54088 }
54089 if( !pPage->leaf ) iCellLast++;
54090 }
54091 #endif
54092
54093 /* Compute the total free space on the page
54094 ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the
54095 ** start of the first freeblock on the page, or is zero if there are no
54096 ** freeblocks. */
54097 pc = get2byte(&data[hdr+1]);
54098 nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */
54099 while( pc>0 ){
54100 u16 next, size;
54101 if( pc<iCellFirst || pc>iCellLast ){
54102 /* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will
54103 ** always be at least one cell before the first freeblock.
54104 **
54105 ** Or, the freeblock is off the end of the page
54106 */
54107 return SQLITE_CORRUPT_BKPT;
54108 }
54109 next = get2byte(&data[pc]);
54110 size = get2byte(&data[pc+2]);
54111 if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
@@ -54148,10 +54507,13 @@
54507 pBt->pPage1 = 0;
54508 if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
54509 #ifdef SQLITE_SECURE_DELETE
54510 pBt->btsFlags |= BTS_SECURE_DELETE;
54511 #endif
54512 /* EVIDENCE-OF: R-51873-39618 The page size for a database file is
54513 ** determined by the 2-byte integer located at an offset of 16 bytes from
54514 ** the beginning of the database file. */
54515 pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
54516 if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
54517 || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
54518 pBt->pageSize = 0;
54519 #ifndef SQLITE_OMIT_AUTOVACUUM
@@ -54166,10 +54528,13 @@
54528 pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
54529 }
54530 #endif
54531 nReserve = 0;
54532 }else{
54533 /* EVIDENCE-OF: R-37497-42412 The size of the reserved region is
54534 ** determined by the one-byte unsigned integer found at an offset of 20
54535 ** into the database file header. */
54536 nReserve = zDbHeader[20];
54537 pBt->btsFlags |= BTS_PAGESIZE_FIXED;
54538 #ifndef SQLITE_OMIT_AUTOVACUUM
54539 pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
54540 pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
@@ -54675,10 +55040,13 @@
55040 if( nPage>0 ){
55041 u32 pageSize;
55042 u32 usableSize;
55043 u8 *page1 = pPage1->aData;
55044 rc = SQLITE_NOTADB;
55045 /* EVIDENCE-OF: R-43737-39999 Every valid SQLite database file begins
55046 ** with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d
55047 ** 61 74 20 33 00. */
55048 if( memcmp(page1, zMagicHeader, 16)!=0 ){
55049 goto page1_init_failed;
55050 }
55051
55052 #ifdef SQLITE_OMIT_WAL
@@ -54715,26 +55083,39 @@
55083 }
55084 rc = SQLITE_NOTADB;
55085 }
55086 #endif
55087
55088 /* EVIDENCE-OF: R-15465-20813 The maximum and minimum embedded payload
55089 ** fractions and the leaf payload fraction values must be 64, 32, and 32.
55090 **
55091 ** The original design allowed these amounts to vary, but as of
55092 ** version 3.6.0, we require them to be fixed.
55093 */
55094 if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
55095 goto page1_init_failed;
55096 }
55097 /* EVIDENCE-OF: R-51873-39618 The page size for a database file is
55098 ** determined by the 2-byte integer located at an offset of 16 bytes from
55099 ** the beginning of the database file. */
55100 pageSize = (page1[16]<<8) | (page1[17]<<16);
55101 /* EVIDENCE-OF: R-25008-21688 The size of a page is a power of two
55102 ** between 512 and 65536 inclusive. */
55103 if( ((pageSize-1)&pageSize)!=0
55104 || pageSize>SQLITE_MAX_PAGE_SIZE
55105 || pageSize<=256
55106 ){
55107 goto page1_init_failed;
55108 }
55109 assert( (pageSize & 7)==0 );
55110 /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte
55111 ** integer at offset 20 is the number of bytes of space at the end of
55112 ** each page to reserve for extensions.
55113 **
55114 ** EVIDENCE-OF: R-37497-42412 The size of the reserved region is
55115 ** determined by the one-byte unsigned integer found at an offset of 20
55116 ** into the database file header. */
55117 usableSize = pageSize - page1[20];
55118 if( (u32)pageSize!=pBt->pageSize ){
55119 /* After reading the first page of the database assuming a page size
55120 ** of BtShared.pageSize, we have discovered that the page-size is
55121 ** actually pageSize. Unlock the database, leave pBt->pPage1 at
@@ -54751,10 +55132,13 @@
55132 }
55133 if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
55134 rc = SQLITE_CORRUPT_BKPT;
55135 goto page1_init_failed;
55136 }
55137 /* EVIDENCE-OF: R-28312-64704 However, the usable size is not allowed to
55138 ** be less than 480. In other words, if the page size is 512, then the
55139 ** reserved space size cannot exceed 32. */
55140 if( usableSize<480 ){
55141 goto page1_init_failed;
55142 }
55143 pBt->pageSize = pageSize;
55144 pBt->usableSize = usableSize;
@@ -57328,10 +57712,12 @@
57712
57713 assert( sqlite3_mutex_held(pBt->mutex) );
57714 assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) );
57715 pPage1 = pBt->pPage1;
57716 mxPage = btreePagecount(pBt);
57717 /* EVIDENCE-OF: R-05119-02637 The 4-byte big-endian integer at offset 36
57718 ** stores stores the total number of pages on the freelist. */
57719 n = get4byte(&pPage1->aData[36]);
57720 testcase( n==mxPage-1 );
57721 if( n>=mxPage ){
57722 return SQLITE_CORRUPT_BKPT;
57723 }
@@ -57374,12 +57760,18 @@
57760 ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT)
57761 */
57762 do {
57763 pPrevTrunk = pTrunk;
57764 if( pPrevTrunk ){
57765 /* EVIDENCE-OF: R-01506-11053 The first integer on a freelist trunk page
57766 ** is the page number of the next freelist trunk page in the list or
57767 ** zero if this is the last freelist trunk page. */
57768 iTrunk = get4byte(&pPrevTrunk->aData[0]);
57769 }else{
57770 /* EVIDENCE-OF: R-59841-13798 The 4-byte big-endian integer at offset 32
57771 ** stores the page number of the first page of the freelist, or zero if
57772 ** the freelist is empty. */
57773 iTrunk = get4byte(&pPage1->aData[32]);
57774 }
57775 testcase( iTrunk==mxPage );
57776 if( iTrunk>mxPage ){
57777 rc = SQLITE_CORRUPT_BKPT;
@@ -57390,12 +57782,13 @@
57782 pTrunk = 0;
57783 goto end_allocate_page;
57784 }
57785 assert( pTrunk!=0 );
57786 assert( pTrunk->aData!=0 );
57787 /* EVIDENCE-OF: R-13523-04394 The second integer on a freelist trunk page
57788 ** is the number of leaf page pointers to follow. */
57789 k = get4byte(&pTrunk->aData[4]);
57790 if( k==0 && !searchList ){
57791 /* The trunk has no leaves and the list is not being searched.
57792 ** So extract the trunk page itself and use it as the newly
57793 ** allocated page */
57794 assert( pPrevTrunk==0 );
@@ -57709,10 +58102,15 @@
58102 ** to maintain backwards compatibility with older versions of SQLite,
58103 ** we will continue to restrict the number of entries to usableSize/4 - 8
58104 ** for now. At some point in the future (once everyone has upgraded
58105 ** to 3.6.0 or later) we should consider fixing the conditional above
58106 ** to read "usableSize/4-2" instead of "usableSize/4-8".
58107 **
58108 ** EVIDENCE-OF: R-19920-11576 However, newer versions of SQLite still
58109 ** avoid using the last six entries in the freelist trunk page array in
58110 ** order that database files created by newer versions of SQLite can be
58111 ** read by older versions of SQLite.
58112 */
58113 rc = sqlite3PagerWrite(pTrunk->pDbPage);
58114 if( rc==SQLITE_OK ){
58115 put4byte(&pTrunk->aData[4], nLeaf+1);
58116 put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
@@ -58060,13 +58458,21 @@
58458 if( rc ){
58459 *pRC = rc;
58460 return;
58461 }
58462 pPage->nCell--;
58463 if( pPage->nCell==0 ){
58464 memset(&data[hdr+1], 0, 4);
58465 data[hdr+7] = 0;
58466 put2byte(&data[hdr+5], pPage->pBt->usableSize);
58467 pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset
58468 - pPage->childPtrSize - 8;
58469 }else{
58470 memmove(ptr, ptr+2, 2*(pPage->nCell - idx));
58471 put2byte(&data[hdr+3], pPage->nCell);
58472 pPage->nFree += 2;
58473 }
58474 }
58475
58476 /*
58477 ** Insert a new cell on pPage at cell index "i". pCell points to the
58478 ** content of the cell.
@@ -58157,49 +58563,275 @@
58563 #endif
58564 }
58565 }
58566
58567 /*
58568 ** Array apCell[] contains pointers to nCell b-tree page cells. The
58569 ** szCell[] array contains the size in bytes of each cell. This function
58570 ** replaces the current contents of page pPg with the contents of the cell
58571 ** array.
58572 **
58573 ** Some of the cells in apCell[] may currently be stored in pPg. This
58574 ** function works around problems caused by this by making a copy of any
58575 ** such cells before overwriting the page data.
58576 **
58577 ** The MemPage.nFree field is invalidated by this function. It is the
58578 ** responsibility of the caller to set it correctly.
58579 */
58580 static void rebuildPage(
58581 MemPage *pPg, /* Edit this page */
58582 int nCell, /* Final number of cells on page */
58583 u8 **apCell, /* Array of cells */
58584 u16 *szCell /* Array of cell sizes */
58585 ){
58586 const int hdr = pPg->hdrOffset; /* Offset of header on pPg */
58587 u8 * const aData = pPg->aData; /* Pointer to data for pPg */
58588 const int usableSize = pPg->pBt->usableSize;
58589 u8 * const pEnd = &aData[usableSize];
58590 int i;
58591 u8 *pCellptr = pPg->aCellIdx;
58592 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
58593 u8 *pData;
58594
58595 i = get2byte(&aData[hdr+5]);
58596 memcpy(&pTmp[i], &aData[i], usableSize - i);
58597
58598 pData = pEnd;
58599 for(i=0; i<nCell; i++){
58600 u8 *pCell = apCell[i];
58601 if( pCell>aData && pCell<pEnd ){
58602 pCell = &pTmp[pCell - aData];
58603 }
58604 pData -= szCell[i];
58605 memcpy(pData, pCell, szCell[i]);
58606 put2byte(pCellptr, (pData - aData));
58607 pCellptr += 2;
58608 assert( szCell[i]==cellSizePtr(pPg, pCell) );
58609 }
58610
58611 /* The pPg->nFree field is now set incorrectly. The caller will fix it. */
58612 pPg->nCell = nCell;
58613 pPg->nOverflow = 0;
58614
58615 put2byte(&aData[hdr+1], 0);
58616 put2byte(&aData[hdr+3], pPg->nCell);
58617 put2byte(&aData[hdr+5], pData - aData);
58618 aData[hdr+7] = 0x00;
58619 }
58620
58621 /*
58622 ** Array apCell[] contains nCell pointers to b-tree cells. Array szCell
58623 ** contains the size in bytes of each such cell. This function attempts to
58624 ** add the cells stored in the array to page pPg. If it cannot (because
58625 ** the page needs to be defragmented before the cells will fit), non-zero
58626 ** is returned. Otherwise, if the cells are added successfully, zero is
58627 ** returned.
58628 **
58629 ** Argument pCellptr points to the first entry in the cell-pointer array
58630 ** (part of page pPg) to populate. After cell apCell[0] is written to the
58631 ** page body, a 16-bit offset is written to pCellptr. And so on, for each
58632 ** cell in the array. It is the responsibility of the caller to ensure
58633 ** that it is safe to overwrite this part of the cell-pointer array.
58634 **
58635 ** When this function is called, *ppData points to the start of the
58636 ** content area on page pPg. If the size of the content area is extended,
58637 ** *ppData is updated to point to the new start of the content area
58638 ** before returning.
58639 **
58640 ** Finally, argument pBegin points to the byte immediately following the
58641 ** end of the space required by this page for the cell-pointer area (for
58642 ** all cells - not just those inserted by the current call). If the content
58643 ** area must be extended to before this point in order to accomodate all
58644 ** cells in apCell[], then the cells do not fit and non-zero is returned.
58645 */
58646 static int pageInsertArray(
58647 MemPage *pPg, /* Page to add cells to */
58648 u8 *pBegin, /* End of cell-pointer array */
58649 u8 **ppData, /* IN/OUT: Page content -area pointer */
58650 u8 *pCellptr, /* Pointer to cell-pointer area */
58651 int nCell, /* Number of cells to add to pPg */
58652 u8 **apCell, /* Array of cells */
58653 u16 *szCell /* Array of cell sizes */
58654 ){
58655 int i;
58656 u8 *aData = pPg->aData;
58657 u8 *pData = *ppData;
58658 const int bFreelist = aData[1] || aData[2];
58659 assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */
58660 for(i=0; i<nCell; i++){
58661 int sz = szCell[i];
58662 int rc;
58663 u8 *pSlot;
58664 if( bFreelist==0 || (pSlot = pageFindSlot(pPg, sz, &rc, 0))==0 ){
58665 pData -= sz;
58666 if( pData<pBegin ) return 1;
58667 pSlot = pData;
58668 }
58669 memcpy(pSlot, apCell[i], sz);
58670 put2byte(pCellptr, (pSlot - aData));
58671 pCellptr += 2;
58672 }
58673 *ppData = pData;
58674 return 0;
58675 }
58676
58677 /*
58678 ** Array apCell[] contains nCell pointers to b-tree cells. Array szCell
58679 ** contains the size in bytes of each such cell. This function adds the
58680 ** space associated with each cell in the array that is currently stored
58681 ** within the body of pPg to the pPg free-list. The cell-pointers and other
58682 ** fields of the page are not updated.
58683 **
58684 ** This function returns the total number of cells added to the free-list.
58685 */
58686 static int pageFreeArray(
58687 MemPage *pPg, /* Page to edit */
58688 int nCell, /* Cells to delete */
58689 u8 **apCell, /* Array of cells */
58690 u16 *szCell /* Array of cell sizes */
58691 ){
58692 u8 * const aData = pPg->aData;
58693 u8 * const pEnd = &aData[pPg->pBt->usableSize];
58694 u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize];
58695 int nRet = 0;
58696 int i;
58697 u8 *pFree = 0;
58698 int szFree = 0;
58699
58700 for(i=0; i<nCell; i++){
58701 u8 *pCell = apCell[i];
58702 if( pCell>=pStart && pCell<pEnd ){
58703 int sz = szCell[i];
58704 if( pFree!=(pCell + sz) ){
58705 if( pFree ){
58706 assert( pFree>aData && (pFree - aData)<65536 );
58707 freeSpace(pPg, (u16)(pFree - aData), szFree);
58708 }
58709 pFree = pCell;
58710 szFree = sz;
58711 if( pFree+sz>pEnd ) return 0;
58712 }else{
58713 pFree = pCell;
58714 szFree += sz;
58715 }
58716 nRet++;
58717 }
58718 }
58719 if( pFree ){
58720 assert( pFree>aData && (pFree - aData)<65536 );
58721 freeSpace(pPg, (u16)(pFree - aData), szFree);
58722 }
58723 return nRet;
58724 }
58725
58726 /*
58727 ** apCell[] and szCell[] contains pointers to and sizes of all cells in the
58728 ** pages being balanced. The current page, pPg, has pPg->nCell cells starting
58729 ** with apCell[iOld]. After balancing, this page should hold nNew cells
58730 ** starting at apCell[iNew].
58731 **
58732 ** This routine makes the necessary adjustments to pPg so that it contains
58733 ** the correct cells after being balanced.
58734 **
58735 ** The pPg->nFree field is invalid when this function returns. It is the
58736 ** responsibility of the caller to set it correctly.
58737 */
58738 static void editPage(
58739 MemPage *pPg, /* Edit this page */
58740 int iOld, /* Index of first cell currently on page */
58741 int iNew, /* Index of new first cell on page */
58742 int nNew, /* Final number of cells on page */
58743 u8 **apCell, /* Array of cells */
58744 u16 *szCell /* Array of cell sizes */
58745 ){
58746 u8 * const aData = pPg->aData;
58747 const int hdr = pPg->hdrOffset;
58748 u8 *pBegin = &pPg->aCellIdx[nNew * 2];
58749 int nCell = pPg->nCell; /* Cells stored on pPg */
58750 u8 *pData;
58751 u8 *pCellptr;
58752 int i;
58753 int iOldEnd = iOld + pPg->nCell + pPg->nOverflow;
58754 int iNewEnd = iNew + nNew;
58755
58756 #ifdef SQLITE_DEBUG
58757 u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager);
58758 memcpy(pTmp, aData, pPg->pBt->usableSize);
58759 #endif
58760
58761 /* Remove cells from the start and end of the page */
58762 if( iOld<iNew ){
58763 int nShift = pageFreeArray(
58764 pPg, iNew-iOld, &apCell[iOld], &szCell[iOld]
58765 );
58766 memmove(pPg->aCellIdx, &pPg->aCellIdx[nShift*2], nCell*2);
58767 nCell -= nShift;
58768 }
58769 if( iNewEnd < iOldEnd ){
58770 nCell -= pageFreeArray(
58771 pPg, iOldEnd-iNewEnd, &apCell[iNewEnd], &szCell[iNewEnd]
58772 );
58773 }
58774
58775 pData = &aData[get2byteNotZero(&aData[hdr+5])];
58776 if( pData<pBegin ) goto editpage_fail;
58777
58778 /* Add cells to the start of the page */
58779 if( iNew<iOld ){
58780 int nAdd = MIN(nNew,iOld-iNew);
58781 assert( (iOld-iNew)<nNew || nCell==0 || CORRUPT_DB );
58782 pCellptr = pPg->aCellIdx;
58783 memmove(&pCellptr[nAdd*2], pCellptr, nCell*2);
58784 if( pageInsertArray(
58785 pPg, pBegin, &pData, pCellptr,
58786 nAdd, &apCell[iNew], &szCell[iNew]
58787 ) ) goto editpage_fail;
58788 nCell += nAdd;
58789 }
58790
58791 /* Add any overflow cells */
58792 for(i=0; i<pPg->nOverflow; i++){
58793 int iCell = (iOld + pPg->aiOvfl[i]) - iNew;
58794 if( iCell>=0 && iCell<nNew ){
58795 pCellptr = &pPg->aCellIdx[iCell * 2];
58796 memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2);
58797 nCell++;
58798 if( pageInsertArray(
58799 pPg, pBegin, &pData, pCellptr,
58800 1, &apCell[iCell + iNew], &szCell[iCell + iNew]
58801 ) ) goto editpage_fail;
58802 }
58803 }
58804
58805 /* Append cells to the end of the page */
58806 pCellptr = &pPg->aCellIdx[nCell*2];
58807 if( pageInsertArray(
58808 pPg, pBegin, &pData, pCellptr,
58809 nNew-nCell, &apCell[iNew+nCell], &szCell[iNew+nCell]
58810 ) ) goto editpage_fail;
58811
58812 pPg->nCell = nNew;
58813 pPg->nOverflow = 0;
58814
58815 put2byte(&aData[hdr+3], pPg->nCell);
58816 put2byte(&aData[hdr+5], pData - aData);
58817
58818 #ifdef SQLITE_DEBUG
58819 for(i=0; i<nNew && !CORRUPT_DB; i++){
58820 u8 *pCell = apCell[i+iNew];
58821 int iOff = get2byte(&pPg->aCellIdx[i*2]);
58822 if( pCell>=aData && pCell<&aData[pPg->pBt->usableSize] ){
58823 pCell = &pTmp[pCell - aData];
58824 }
58825 assert( 0==memcmp(pCell, &aData[iOff], szCell[i+iNew]) );
58826 }
58827 #endif
58828
58829 return;
58830 editpage_fail:
58831 /* Unable to edit this page. Rebuild it from scratch instead. */
58832 rebuildPage(pPg, nNew, &apCell[iNew], &szCell[iNew]);
58833 }
58834
58835 /*
58836 ** The following parameters determine how many adjacent pages get involved
58837 ** in a balancing operation. NN is the number of neighbors on either side
@@ -58267,11 +58899,12 @@
58899 u8 *pStop;
58900
58901 assert( sqlite3PagerIswriteable(pNew->pDbPage) );
58902 assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
58903 zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
58904 rebuildPage(pNew, 1, &pCell, &szCell);
58905 pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell;
58906
58907 /* If this is an auto-vacuum database, update the pointer map
58908 ** with entries for the new page, and any pointer from the
58909 ** cell on the page to an overflow page. If either of these
58910 ** operations fails, the return code is set, but the contents
@@ -58486,21 +59119,26 @@
59119 int subtotal; /* Subtotal of bytes in cells on one page */
59120 int iSpace1 = 0; /* First unused byte of aSpace1[] */
59121 int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */
59122 int szScratch; /* Size of scratch memory requested */
59123 MemPage *apOld[NB]; /* pPage and up to two siblings */
 
59124 MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */
59125 u8 *pRight; /* Location in parent of right-sibling pointer */
59126 u8 *apDiv[NB-1]; /* Divider cells in pParent */
59127 int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */
59128 int cntOld[NB+2]; /* Old index in aCell[] after i-th page */
59129 int szNew[NB+2]; /* Combined size of cells placed on i-th page */
59130 u8 **apCell = 0; /* All cells begin balanced */
59131 u16 *szCell; /* Local size of all cells in apCell[] */
59132 u8 *aSpace1; /* Space for copies of dividers cells */
59133 Pgno pgno; /* Temp var to store a page number in */
59134 u8 abDone[NB+2]; /* True after i'th new page is populated */
59135 Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */
59136 Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */
59137 u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */
59138
59139 memset(abDone, 0, sizeof(abDone));
59140 pBt = pParent->pBt;
59141 assert( sqlite3_mutex_held(pBt->mutex) );
59142 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
59143
59144 #if 0
@@ -58605,16 +59243,18 @@
59243 nMaxCells = (nMaxCells + 3)&~3;
59244
59245 /*
59246 ** Allocate space for memory structures
59247 */
 
59248 szScratch =
59249 nMaxCells*sizeof(u8*) /* apCell */
59250 + nMaxCells*sizeof(u16) /* szCell */
59251 + pBt->pageSize; /* aSpace1 */
59252
59253 /* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer
59254 ** that is more than 6 times the database page size. */
59255 assert( szScratch<=6*pBt->pageSize );
59256 apCell = sqlite3ScratchMalloc( szScratch );
59257 if( apCell==0 ){
59258 rc = SQLITE_NOMEM;
59259 goto balance_cleanup;
59260 }
@@ -58623,12 +59263,12 @@
59263 assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
59264
59265 /*
59266 ** Load pointers to all cells on sibling pages and the divider cells
59267 ** into the local apCell[] array. Make copies of the divider cells
59268 ** into space obtained from aSpace1[]. The divider cells have already
59269 ** been removed from pParent.
59270 **
59271 ** If the siblings are on leaf pages, then the child pointers of the
59272 ** divider cells are stripped from the cells before they are copied
59273 ** into aSpace1[]. In this way, all cells in apCell[] are without
59274 ** child pointers. If siblings are not leaves, then all cell in
@@ -58640,19 +59280,11 @@
59280 */
59281 leafCorrection = apOld[0]->leaf*4;
59282 leafData = apOld[0]->intKeyLeaf;
59283 for(i=0; i<nOld; i++){
59284 int limit;
59285 MemPage *pOld = apOld[i];
 
 
 
 
 
 
 
 
59286
59287 limit = pOld->nCell+pOld->nOverflow;
59288 if( pOld->nOverflow>0 ){
59289 for(j=0; j<limit; j++){
59290 assert( nCell<nMaxCells );
@@ -58669,10 +59301,11 @@
59301 apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
59302 szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
59303 nCell++;
59304 }
59305 }
59306 cntOld[i] = nCell;
59307 if( i<nOld-1 && !leafData){
59308 u16 sz = (u16)szNew[i];
59309 u8 *pTemp;
59310 assert( nCell<nMaxCells );
59311 szCell[nCell] = sz;
@@ -58720,11 +59353,11 @@
59353 usableSpace = pBt->usableSize - 12 + leafCorrection;
59354 for(subtotal=k=i=0; i<nCell; i++){
59355 assert( i<nMaxCells );
59356 subtotal += szCell[i] + 2;
59357 if( subtotal > usableSpace ){
59358 szNew[k] = subtotal - szCell[i] - 2;
59359 cntNew[k] = i;
59360 if( leafData ){ i--; }
59361 subtotal = 0;
59362 k++;
59363 if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
@@ -58734,13 +59367,14 @@
59367 cntNew[k] = nCell;
59368 k++;
59369
59370 /*
59371 ** The packing computed by the previous block is biased toward the siblings
59372 ** on the left side (siblings with smaller keys). The left siblings are
59373 ** always nearly full, while the right-most sibling might be nearly empty.
59374 ** The next block of code attempts to adjust the packing of siblings to
59375 ** get a better balance.
59376 **
59377 ** This adjustment is more than an optimization. The packing above might
59378 ** be so out of balance as to be illegal. For example, the right-most
59379 ** sibling might be completely empty. This adjustment is not optional.
59380 */
@@ -58765,26 +59399,22 @@
59399 }
59400 szNew[i] = szRight;
59401 szNew[i-1] = szLeft;
59402 }
59403
59404 /* Sanity check: For a non-corrupt database file one of the follwing
59405 ** must be true:
59406 ** (1) We found one or more cells (cntNew[0])>0), or
59407 ** (2) pPage is a virtual root page. A virtual root page is when
59408 ** the real root page is page 1 and we are the only child of
59409 ** that page.
 
59410 */
59411 assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB);
59412 TRACE(("BALANCE: old: %d(nc=%d) %d(nc=%d) %d(nc=%d)\n",
59413 apOld[0]->pgno, apOld[0]->nCell,
59414 nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0,
59415 nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0
 
 
 
59416 ));
59417
59418 /*
59419 ** Allocate k new pages. Reuse old pages where possible.
59420 */
@@ -58803,12 +59433,14 @@
59433 if( rc ) goto balance_cleanup;
59434 }else{
59435 assert( i>0 );
59436 rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0);
59437 if( rc ) goto balance_cleanup;
59438 zeroPage(pNew, pageFlags);
59439 apNew[i] = pNew;
59440 nNew++;
59441 cntOld[i] = nCell;
59442
59443 /* Set the pointer-map entry for the new sibling page. */
59444 if( ISAUTOVACUUM ){
59445 ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
59446 if( rc!=SQLITE_OK ){
@@ -58816,139 +59448,247 @@
59448 }
59449 }
59450 }
59451 }
59452
 
 
 
 
 
 
 
 
 
 
59453 /*
59454 ** Reassign page numbers so that the new pages are in ascending order.
59455 ** This helps to keep entries in the disk file in order so that a scan
59456 ** of the table is closer to a linear scan through the file. That in turn
59457 ** helps the operating system to deliver pages from the disk more rapidly.
59458 **
59459 ** An O(n^2) insertion sort algorithm is used, but since n is never more
59460 ** than (NB+2) (a small constant), that should not be a problem.
59461 **
59462 ** When NB==3, this one optimization makes the database about 25% faster
59463 ** for large insertions and deletions.
59464 */
59465 for(i=0; i<nNew; i++){
59466 aPgOrder[i] = aPgno[i] = apNew[i]->pgno;
59467 aPgFlags[i] = apNew[i]->pDbPage->flags;
59468 for(j=0; j<i; j++){
59469 if( aPgno[j]==aPgno[i] ){
59470 /* This branch is taken if the set of sibling pages somehow contains
59471 ** duplicate entries. This can happen if the database is corrupt.
59472 ** It would be simpler to detect this as part of the loop below, but
59473 ** we do the detection here in order to avoid populating the pager
59474 ** cache with two separate objects associated with the same
59475 ** page number. */
59476 assert( CORRUPT_DB );
59477 rc = SQLITE_CORRUPT_BKPT;
59478 goto balance_cleanup;
59479 }
59480 }
59481 }
59482 for(i=0; i<nNew; i++){
59483 int iBest = 0; /* aPgno[] index of page number to use */
59484 for(j=1; j<nNew; j++){
59485 if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j;
59486 }
59487 pgno = aPgOrder[iBest];
59488 aPgOrder[iBest] = 0xffffffff;
59489 if( iBest!=i ){
59490 if( iBest>i ){
59491 sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0);
59492 }
59493 sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]);
59494 apNew[i]->pgno = pgno;
59495 }
59496 }
59497
59498 TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) "
59499 "%d(%d nc=%d) %d(%d nc=%d)\n",
59500 apNew[0]->pgno, szNew[0], cntNew[0],
59501 nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
59502 nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0,
59503 nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
59504 nNew>=3 ? cntNew[2] - cntNew[1] - !leafData : 0,
59505 nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
59506 nNew>=4 ? cntNew[3] - cntNew[2] - !leafData : 0,
59507 nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0,
59508 nNew>=5 ? cntNew[4] - cntNew[3] - !leafData : 0
59509 ));
59510
59511 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
59512 put4byte(pRight, apNew[nNew-1]->pgno);
59513
59514 /* If the sibling pages are not leaves, ensure that the right-child pointer
59515 ** of the right-most new sibling page is set to the value that was
59516 ** originally in the same field of the right-most old sibling page. */
59517 if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){
59518 MemPage *pOld = (nNew>nOld ? apNew : apOld)[nOld-1];
59519 memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4);
59520 }
59521
59522 /* Make any required updates to pointer map entries associated with
59523 ** cells stored on sibling pages following the balance operation. Pointer
59524 ** map entries associated with divider cells are set by the insertCell()
59525 ** routine. The associated pointer map entries are:
59526 **
59527 ** a) if the cell contains a reference to an overflow chain, the
59528 ** entry associated with the first page in the overflow chain, and
59529 **
59530 ** b) if the sibling pages are not leaves, the child page associated
59531 ** with the cell.
59532 **
59533 ** If the sibling pages are not leaves, then the pointer map entry
59534 ** associated with the right-child of each sibling may also need to be
59535 ** updated. This happens below, after the sibling pages have been
59536 ** populated, not here.
59537 */
59538 if( ISAUTOVACUUM ){
59539 MemPage *pNew = apNew[0];
59540 u8 *aOld = pNew->aData;
59541 int cntOldNext = pNew->nCell + pNew->nOverflow;
59542 int usableSize = pBt->usableSize;
59543 int iNew = 0;
59544 int iOld = 0;
59545
59546 for(i=0; i<nCell; i++){
59547 u8 *pCell = apCell[i];
59548 if( i==cntOldNext ){
59549 MemPage *pOld = (++iOld)<nNew ? apNew[iOld] : apOld[iOld];
59550 cntOldNext += pOld->nCell + pOld->nOverflow + !leafData;
59551 aOld = pOld->aData;
59552 }
59553 if( i==cntNew[iNew] ){
59554 pNew = apNew[++iNew];
59555 if( !leafData ) continue;
59556 }
59557
59558 /* Cell pCell is destined for new sibling page pNew. Originally, it
59559 ** was either part of sibling page iOld (possibly an overflow cell),
59560 ** or else the divider cell to the left of sibling page iOld. So,
59561 ** if sibling page iOld had the same page number as pNew, and if
59562 ** pCell really was a part of sibling page iOld (not a divider or
59563 ** overflow cell), we can skip updating the pointer map entries. */
59564 if( pNew->pgno!=aPgno[iOld] || pCell<aOld || pCell>=&aOld[usableSize] ){
59565 if( !leafCorrection ){
59566 ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc);
59567 }
59568 if( szCell[i]>pNew->minLocal ){
59569 ptrmapPutOvflPtr(pNew, pCell, &rc);
59570 }
59571 }
59572 }
59573 }
59574
59575 /* Insert new divider cells into pParent. */
59576 for(i=0; i<nNew-1; i++){
59577 u8 *pCell;
59578 u8 *pTemp;
59579 int sz;
59580 MemPage *pNew = apNew[i];
 
 
 
 
 
 
59581 j = cntNew[i];
59582
59583 assert( j<nMaxCells );
59584 pCell = apCell[j];
59585 sz = szCell[j] + leafCorrection;
59586 pTemp = &aOvflSpace[iOvflSpace];
59587 if( !pNew->leaf ){
59588 memcpy(&pNew->aData[8], pCell, 4);
59589 }else if( leafData ){
59590 /* If the tree is a leaf-data tree, and the siblings are leaves,
59591 ** then there is no divider cell in apCell[]. Instead, the divider
59592 ** cell consists of the integer key for the right-most cell of
59593 ** the sibling-page assembled above only.
59594 */
59595 CellInfo info;
59596 j--;
59597 btreeParseCellPtr(pNew, apCell[j], &info);
59598 pCell = pTemp;
59599 sz = 4 + putVarint(&pCell[4], info.nKey);
59600 pTemp = 0;
59601 }else{
59602 pCell -= 4;
59603 /* Obscure case for non-leaf-data trees: If the cell at pCell was
59604 ** previously stored on a leaf node, and its reported size was 4
59605 ** bytes, then it may actually be smaller than this
59606 ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
59607 ** any cell). But it is important to pass the correct size to
59608 ** insertCell(), so reparse the cell now.
59609 **
59610 ** Note that this can never happen in an SQLite data file, as all
59611 ** cells are at least 4 bytes. It only happens in b-trees used
59612 ** to evaluate "IN (SELECT ...)" and similar clauses.
59613 */
59614 if( szCell[j]==4 ){
59615 assert(leafCorrection==4);
59616 sz = cellSizePtr(pParent, pCell);
59617 }
59618 }
59619 iOvflSpace += sz;
59620 assert( sz<=pBt->maxLocal+23 );
59621 assert( iOvflSpace <= (int)pBt->pageSize );
59622 insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc);
59623 if( rc!=SQLITE_OK ) goto balance_cleanup;
59624 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
59625 }
59626
59627 /* Now update the actual sibling pages. The order in which they are updated
59628 ** is important, as this code needs to avoid disrupting any page from which
59629 ** cells may still to be read. In practice, this means:
59630 **
59631 ** (1) If cells are moving left (from apNew[iPg] to apNew[iPg-1])
59632 ** then it is not safe to update page apNew[iPg] until after
59633 ** the left-hand sibling apNew[iPg-1] has been updated.
59634 **
59635 ** (2) If cells are moving right (from apNew[iPg] to apNew[iPg+1])
59636 ** then it is not safe to update page apNew[iPg] until after
59637 ** the right-hand sibling apNew[iPg+1] has been updated.
59638 **
59639 ** If neither of the above apply, the page is safe to update.
59640 **
59641 ** The iPg value in the following loop starts at nNew-1 goes down
59642 ** to 0, then back up to nNew-1 again, thus making two passes over
59643 ** the pages. On the initial downward pass, only condition (1) above
59644 ** needs to be tested because (2) will always be true from the previous
59645 ** step. On the upward pass, both conditions are always true, so the
59646 ** upwards pass simply processes pages that were missed on the downward
59647 ** pass.
59648 */
59649 for(i=1-nNew; i<nNew; i++){
59650 int iPg = i<0 ? -i : i;
59651 assert( iPg>=0 && iPg<nNew );
59652 if( abDone[iPg] ) continue; /* Skip pages already processed */
59653 if( i>=0 /* On the upwards pass, or... */
59654 || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */
59655 ){
59656 int iNew;
59657 int iOld;
59658 int nNewCell;
59659
59660 /* Verify condition (1): If cells are moving left, update iPg
59661 ** only after iPg-1 has already been updated. */
59662 assert( iPg==0 || cntOld[iPg-1]>=cntNew[iPg-1] || abDone[iPg-1] );
59663
59664 /* Verify condition (2): If cells are moving right, update iPg
59665 ** only after iPg+1 has already been updated. */
59666 assert( cntNew[iPg]>=cntOld[iPg] || abDone[iPg+1] );
59667
59668 if( iPg==0 ){
59669 iNew = iOld = 0;
59670 nNewCell = cntNew[0];
59671 }else{
59672 iOld = iPg<nOld ? (cntOld[iPg-1] + !leafData) : nCell;
59673 iNew = cntNew[iPg-1] + !leafData;
59674 nNewCell = cntNew[iPg] - iNew;
59675 }
59676
59677 editPage(apNew[iPg], iOld, iNew, nNewCell, apCell, szCell);
59678 abDone[iPg]++;
59679 apNew[iPg]->nFree = usableSpace-szNew[iPg];
59680 assert( apNew[iPg]->nOverflow==0 );
59681 assert( apNew[iPg]->nCell==nNewCell );
59682 }
59683 }
59684
59685 /* All pages have been processed exactly once */
59686 assert( memcmp(abDone, "\01\01\01\01\01", nNew)==0 );
59687
59688 assert( nOld>0 );
59689 assert( nNew>0 );
 
 
 
 
59690
59691 if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
59692 /* The root page of the b-tree now contains no cells. The only sibling
59693 ** page is the right-child of the parent. Copy the contents of the
59694 ** child page into the parent, decreasing the overall height of the
@@ -58957,130 +59697,54 @@
59697 **
59698 ** If this is an auto-vacuum database, the call to copyNodeContent()
59699 ** sets all pointer-map entries corresponding to database image pages
59700 ** for which the pointer is stored within the content being copied.
59701 **
59702 ** It is critical that the child page be defragmented before being
59703 ** copied into the parent, because if the parent is page 1 then it will
59704 ** by smaller than the child due to the database header, and so all the
59705 ** free space needs to be up front.
59706 */
59707 assert( nNew==1 );
59708 rc = defragmentPage(apNew[0]);
59709 testcase( rc!=SQLITE_OK );
59710 assert( apNew[0]->nFree ==
59711 (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
59712 || rc!=SQLITE_OK
59713 );
59714 copyNodeContent(apNew[0], pParent, &rc);
59715 freePage(apNew[0], &rc);
59716 }else if( ISAUTOVACUUM && !leafCorrection ){
59717 /* Fix the pointer map entries associated with the right-child of each
59718 ** sibling page. All other pointer map entries have already been taken
59719 ** care of. */
59720 for(i=0; i<nNew; i++){
59721 u32 key = get4byte(&apNew[i]->aData[8]);
59722 ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
59723 }
59724 }
59725
59726 assert( pParent->isInit );
59727 TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
59728 nOld, nNew, nCell));
59729
59730 /* Free any old pages that were not reused as new pages.
59731 */
59732 for(i=nNew; i<nOld; i++){
59733 freePage(apOld[i], &rc);
59734 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59735
59736 #if 0
59737 if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){
59738 /* The ptrmapCheckPages() contains assert() statements that verify that
59739 ** all pointer map pages are set correctly. This is helpful while
59740 ** debugging. This is usually disabled because a corrupt database may
59741 ** cause an assert() statement to fail. */
59742 ptrmapCheckPages(apNew, nNew);
59743 ptrmapCheckPages(&pParent, 1);
59744 }
59745 #endif
 
 
 
 
 
59746
59747 /*
59748 ** Cleanup before returning.
59749 */
59750 balance_cleanup:
@@ -60461,12 +61125,18 @@
61125 }else{
61126 int contentOffset = get2byteNotZero(&data[hdr+5]);
61127 assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */
61128 memset(hit+contentOffset, 0, usableSize-contentOffset);
61129 memset(hit, 1, contentOffset);
61130 /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
61131 ** number of cells on the page. */
61132 nCell = get2byte(&data[hdr+3]);
61133 /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page
61134 ** immediately follows the b-tree page header. */
61135 cellStart = hdr + 12 - 4*pPage->leaf;
61136 /* EVIDENCE-OF: R-02776-14802 The cell pointer array consists of K 2-byte
61137 ** integer offsets to the cell contents. */
61138 for(i=0; i<nCell; i++){
61139 int pc = get2byte(&data[cellStart+i*2]);
61140 u32 size = 65536;
61141 int j;
61142 if( pc<=usableSize-4 ){
@@ -60478,18 +61148,27 @@
61148 "Corruption detected in cell %d on page %d",i,iPage);
61149 }else{
61150 for(j=pc+size-1; j>=pc; j--) hit[j]++;
61151 }
61152 }
61153 /* EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header
61154 ** is the offset of the first freeblock, or zero if there are no
61155 ** freeblocks on the page. */
61156 i = get2byte(&data[hdr+1]);
61157 while( i>0 ){
61158 int size, j;
61159 assert( i<=usableSize-4 ); /* Enforced by btreeInitPage() */
61160 size = get2byte(&data[i+2]);
61161 assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */
61162 for(j=i+size-1; j>=i; j--) hit[j]++;
61163 /* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a
61164 ** big-endian integer which is the offset in the b-tree page of the next
61165 ** freeblock in the chain, or zero if the freeblock is the last on the
61166 ** chain. */
61167 j = get2byte(&data[i]);
61168 /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
61169 ** increasing offset. */
61170 assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */
61171 assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */
61172 i = j;
61173 }
61174 for(i=cnt=0; i<usableSize; i++){
@@ -60499,10 +61178,15 @@
61178 checkAppendMsg(pCheck,
61179 "Multiple uses for byte %d of page %d", i, iPage);
61180 break;
61181 }
61182 }
61183 /* EVIDENCE-OF: R-43263-13491 The total number of bytes in all fragments
61184 ** is stored in the fifth field of the b-tree page header.
61185 ** EVIDENCE-OF: R-07161-27322 The one-byte integer at offset 7 gives the
61186 ** number of fragmented free bytes within the cell content area.
61187 */
61188 if( cnt!=data[hdr+7] ){
61189 checkAppendMsg(pCheck,
61190 "Fragmentation of %d bytes reported as %d on page %d",
61191 cnt, data[hdr+7], iPage);
61192 }
@@ -60902,10 +61586,15 @@
61586 */
61587 SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){
61588 return (p->pBt->btsFlags & BTS_READ_ONLY)!=0;
61589 }
61590
61591 /*
61592 ** Return the size of the header added to each page by this module.
61593 */
61594 SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return sizeof(MemPage); }
61595
61596 /************** End of btree.c ***********************************************/
61597 /************** Begin file backup.c ******************************************/
61598 /*
61599 ** 2009 January 28
61600 **
@@ -61025,10 +61714,24 @@
61714 static int setDestPgsz(sqlite3_backup *p){
61715 int rc;
61716 rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
61717 return rc;
61718 }
61719
61720 /*
61721 ** Check that there is no open read-transaction on the b-tree passed as the
61722 ** second argument. If there is not, return SQLITE_OK. Otherwise, if there
61723 ** is an open read-transaction, return SQLITE_ERROR and leave an error
61724 ** message in database handle db.
61725 */
61726 static int checkReadTransaction(sqlite3 *db, Btree *p){
61727 if( sqlite3BtreeIsInReadTrans(p) ){
61728 sqlite3ErrorWithMsg(db, SQLITE_ERROR, "destination database is in use");
61729 return SQLITE_ERROR;
61730 }
61731 return SQLITE_OK;
61732 }
61733
61734 /*
61735 ** Create an sqlite3_backup process to copy the contents of zSrcDb from
61736 ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
61737 ** a pointer to the new sqlite3_backup object.
@@ -61041,10 +61744,17 @@
61744 const char *zDestDb, /* Name of database within pDestDb */
61745 sqlite3* pSrcDb, /* Database connection to read from */
61746 const char *zSrcDb /* Name of database within pSrcDb */
61747 ){
61748 sqlite3_backup *p; /* Value to return */
61749
61750 #ifdef SQLITE_ENABLE_API_ARMOR
61751 if( !sqlite3SafetyCheckOk(pSrcDb)||!sqlite3SafetyCheckOk(pDestDb) ){
61752 (void)SQLITE_MISUSE_BKPT;
61753 return 0;
61754 }
61755 #endif
61756
61757 /* Lock the source database handle. The destination database
61758 ** handle is not locked in this routine, but it is locked in
61759 ** sqlite3_backup_step(). The user is required to ensure that no
61760 ** other thread accesses the destination handle for the duration
@@ -61078,16 +61788,19 @@
61788 p->pDestDb = pDestDb;
61789 p->pSrcDb = pSrcDb;
61790 p->iNext = 1;
61791 p->isAttached = 0;
61792
61793 if( 0==p->pSrc || 0==p->pDest
61794 || setDestPgsz(p)==SQLITE_NOMEM
61795 || checkReadTransaction(pDestDb, p->pDest)!=SQLITE_OK
61796 ){
61797 /* One (or both) of the named databases did not exist or an OOM
61798 ** error was hit. Or there is a transaction open on the destination
61799 ** database. The error has already been written into the pDestDb
61800 ** handle. All that is left to do here is free the sqlite3_backup
61801 ** structure. */
61802 sqlite3_free(p);
61803 p = 0;
61804 }
61805 }
61806 if( p ){
@@ -61238,10 +61951,13 @@
61951 int rc;
61952 int destMode; /* Destination journal mode */
61953 int pgszSrc = 0; /* Source page size */
61954 int pgszDest = 0; /* Destination page size */
61955
61956 #ifdef SQLITE_ENABLE_API_ARMOR
61957 if( p==0 ) return SQLITE_MISUSE_BKPT;
61958 #endif
61959 sqlite3_mutex_enter(p->pSrcDb->mutex);
61960 sqlite3BtreeEnter(p->pSrc);
61961 if( p->pDestDb ){
61962 sqlite3_mutex_enter(p->pDestDb->mutex);
61963 }
@@ -61527,18 +62243,30 @@
62243 /*
62244 ** Return the number of pages still to be backed up as of the most recent
62245 ** call to sqlite3_backup_step().
62246 */
62247 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
62248 #ifdef SQLITE_ENABLE_API_ARMOR
62249 if( p==0 ){
62250 (void)SQLITE_MISUSE_BKPT;
62251 return 0;
62252 }
62253 #endif
62254 return p->nRemaining;
62255 }
62256
62257 /*
62258 ** Return the total number of pages in the source database as of the most
62259 ** recent call to sqlite3_backup_step().
62260 */
62261 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
62262 #ifdef SQLITE_ENABLE_API_ARMOR
62263 if( p==0 ){
62264 (void)SQLITE_MISUSE_BKPT;
62265 return 0;
62266 }
62267 #endif
62268 return p->nPagecount;
62269 }
62270
62271 /*
62272 ** This function is called after the contents of page iPage of the
@@ -63825,10 +64553,38 @@
64553 }
64554 p->nOp += nOp;
64555 }
64556 return addr;
64557 }
64558
64559 #if defined(SQLITE_ENABLE_STMT_SCANSTATUS)
64560 /*
64561 ** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus().
64562 */
64563 SQLITE_PRIVATE void sqlite3VdbeScanStatus(
64564 Vdbe *p, /* VM to add scanstatus() to */
64565 int addrExplain, /* Address of OP_Explain (or 0) */
64566 int addrLoop, /* Address of loop counter */
64567 int addrVisit, /* Address of rows visited counter */
64568 LogEst nEst, /* Estimated number of output rows */
64569 const char *zName /* Name of table or index being scanned */
64570 ){
64571 int nByte = (p->nScan+1) * sizeof(ScanStatus);
64572 ScanStatus *aNew;
64573 aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
64574 if( aNew ){
64575 ScanStatus *pNew = &aNew[p->nScan++];
64576 pNew->addrExplain = addrExplain;
64577 pNew->addrLoop = addrLoop;
64578 pNew->addrVisit = addrVisit;
64579 pNew->nEst = nEst;
64580 pNew->zName = sqlite3DbStrDup(p->db, zName);
64581 p->aScan = aNew;
64582 }
64583 }
64584 #endif
64585
64586
64587 /*
64588 ** Change the value of the P1 operand for a specific instruction.
64589 ** This routine is useful when a large program is loaded from a
64590 ** static array using sqlite3VdbeAddOpList but we want to make a
@@ -64924,10 +65680,13 @@
65680 p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
65681 p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
65682 p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
65683 &zCsr, zEnd, &nByte);
65684 p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
65685 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
65686 p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte);
65687 #endif
65688 if( nByte ){
65689 p->pFree = sqlite3DbMallocZero(db, nByte);
65690 }
65691 zCsr = p->pFree;
65692 zEnd = &zCsr[nByte];
@@ -64991,10 +65750,13 @@
65750 ** is used, for example, when a trigger sub-program is halted to restore
65751 ** control to the main program.
65752 */
65753 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
65754 Vdbe *v = pFrame->v;
65755 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
65756 v->anExec = pFrame->anExec;
65757 #endif
65758 v->aOnceFlag = pFrame->aOnceFlag;
65759 v->nOnceFlag = pFrame->nOnceFlag;
65760 v->aOp = pFrame->aOp;
65761 v->nOp = pFrame->nOp;
65762 v->aMem = pFrame->aMem;
@@ -65001,10 +65763,11 @@
65763 v->nMem = pFrame->nMem;
65764 v->apCsr = pFrame->apCsr;
65765 v->nCursor = pFrame->nCursor;
65766 v->db->lastRowid = pFrame->lastRowid;
65767 v->nChange = pFrame->nChange;
65768 v->db->nChange = pFrame->nDbChange;
65769 return pFrame->pc;
65770 }
65771
65772 /*
65773 ** Close all cursors.
@@ -65568,10 +66331,11 @@
66331 ** so, abort any other statements this handle currently has active.
66332 */
66333 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
66334 sqlite3CloseSavepoints(db);
66335 db->autoCommit = 1;
66336 p->nChange = 0;
66337 }
66338 }
66339 }
66340
66341 /* Check for immediate foreign key violations. */
@@ -65608,18 +66372,20 @@
66372 sqlite3VdbeLeave(p);
66373 return SQLITE_BUSY;
66374 }else if( rc!=SQLITE_OK ){
66375 p->rc = rc;
66376 sqlite3RollbackAll(db, SQLITE_OK);
66377 p->nChange = 0;
66378 }else{
66379 db->nDeferredCons = 0;
66380 db->nDeferredImmCons = 0;
66381 db->flags &= ~SQLITE_DeferFKs;
66382 sqlite3CommitInternalChanges(db);
66383 }
66384 }else{
66385 sqlite3RollbackAll(db, SQLITE_OK);
66386 p->nChange = 0;
66387 }
66388 db->nStatement = 0;
66389 }else if( eStatementOp==0 ){
66390 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
66391 eStatementOp = SAVEPOINT_RELEASE;
@@ -65627,10 +66393,11 @@
66393 eStatementOp = SAVEPOINT_ROLLBACK;
66394 }else{
66395 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
66396 sqlite3CloseSavepoints(db);
66397 db->autoCommit = 1;
66398 p->nChange = 0;
66399 }
66400 }
66401
66402 /* If eStatementOp is non-zero, then a statement transaction needs to
66403 ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
@@ -65647,10 +66414,11 @@
66414 p->zErrMsg = 0;
66415 }
66416 sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK);
66417 sqlite3CloseSavepoints(db);
66418 db->autoCommit = 1;
66419 p->nChange = 0;
66420 }
66421 }
66422
66423 /* If this was an INSERT, UPDATE or DELETE and no statement transaction
66424 ** has been rolled back, update the database connection change-counter.
@@ -65908,10 +66676,16 @@
66676 for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
66677 vdbeFreeOpArray(db, p->aOp, p->nOp);
66678 sqlite3DbFree(db, p->aColName);
66679 sqlite3DbFree(db, p->zSql);
66680 sqlite3DbFree(db, p->pFree);
66681 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
66682 for(i=0; i<p->nScan; i++){
66683 sqlite3DbFree(db, p->aScan[i].zName);
66684 }
66685 sqlite3DbFree(db, p->aScan);
66686 #endif
66687 }
66688
66689 /*
66690 ** Delete an entire VDBE.
66691 */
@@ -66066,13 +66840,11 @@
66840 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
66841 # define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
66842 i64 i = pMem->u.i;
66843 u64 u;
66844 if( i<0 ){
66845 u = ~i;
 
 
66846 }else{
66847 u = i;
66848 }
66849 if( u<=127 ){
66850 return ((i&1)==i && file_format>=4) ? 8+(u32)u : 1;
@@ -66234,14 +67006,18 @@
67006 ){
67007 u64 x = FOUR_BYTE_UINT(buf);
67008 u32 y = FOUR_BYTE_UINT(buf+4);
67009 x = (x<<32) + y;
67010 if( serial_type==6 ){
67011 /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit
67012 ** twos-complement integer. */
67013 pMem->u.i = *(i64*)&x;
67014 pMem->flags = MEM_Int;
67015 testcase( pMem->u.i<0 );
67016 }else{
67017 /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit
67018 ** floating point number. */
67019 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
67020 /* Verify that integers and floating point values use the same
67021 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
67022 ** defined that 64-bit floating point values really are mixed
67023 ** endian.
@@ -66265,39 +67041,50 @@
67041 Mem *pMem /* Memory cell to write value into */
67042 ){
67043 switch( serial_type ){
67044 case 10: /* Reserved for future use */
67045 case 11: /* Reserved for future use */
67046 case 0: { /* Null */
67047 /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
67048 pMem->flags = MEM_Null;
67049 break;
67050 }
67051 case 1: {
67052 /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement
67053 ** integer. */
67054 pMem->u.i = ONE_BYTE_INT(buf);
67055 pMem->flags = MEM_Int;
67056 testcase( pMem->u.i<0 );
67057 return 1;
67058 }
67059 case 2: { /* 2-byte signed integer */
67060 /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit
67061 ** twos-complement integer. */
67062 pMem->u.i = TWO_BYTE_INT(buf);
67063 pMem->flags = MEM_Int;
67064 testcase( pMem->u.i<0 );
67065 return 2;
67066 }
67067 case 3: { /* 3-byte signed integer */
67068 /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit
67069 ** twos-complement integer. */
67070 pMem->u.i = THREE_BYTE_INT(buf);
67071 pMem->flags = MEM_Int;
67072 testcase( pMem->u.i<0 );
67073 return 3;
67074 }
67075 case 4: { /* 4-byte signed integer */
67076 /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit
67077 ** twos-complement integer. */
67078 pMem->u.i = FOUR_BYTE_INT(buf);
67079 pMem->flags = MEM_Int;
67080 testcase( pMem->u.i<0 );
67081 return 4;
67082 }
67083 case 5: { /* 6-byte signed integer */
67084 /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit
67085 ** twos-complement integer. */
67086 pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf);
67087 pMem->flags = MEM_Int;
67088 testcase( pMem->u.i<0 );
67089 return 6;
67090 }
@@ -66307,15 +67094,21 @@
67094 ** to avoid having to move the frame pointer in the common case */
67095 return serialGet(buf,serial_type,pMem);
67096 }
67097 case 8: /* Integer 0 */
67098 case 9: { /* Integer 1 */
67099 /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */
67100 /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */
67101 pMem->u.i = serial_type-8;
67102 pMem->flags = MEM_Int;
67103 return 0;
67104 }
67105 default: {
67106 /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in
67107 ** length.
67108 ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and
67109 ** (N-13)/2 bytes in length. */
67110 static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
67111 pMem->z = (char *)buf;
67112 pMem->n = (serial_type-12)/2;
67113 pMem->flags = aFlag[serial_type&1];
67114 return pMem->n;
@@ -68275,15 +69068,23 @@
69068 sqlite3_stmt *pStmt,
69069 int N,
69070 const void *(*xFunc)(Mem*),
69071 int useType
69072 ){
69073 const void *ret;
69074 Vdbe *p;
69075 int n;
69076 sqlite3 *db;
69077 #ifdef SQLITE_ENABLE_API_ARMOR
69078 if( pStmt==0 ){
69079 (void)SQLITE_MISUSE_BKPT;
69080 return 0;
69081 }
69082 #endif
69083 ret = 0;
69084 p = (Vdbe *)pStmt;
69085 db = p->db;
69086 assert( db!=0 );
69087 n = sqlite3_column_count(pStmt);
69088 if( N<n && N>=0 ){
69089 N += useType*n;
69090 sqlite3_mutex_enter(db->mutex);
@@ -68744,10 +69545,16 @@
69545 ** prepared statement for the database connection. Return NULL if there
69546 ** are no more.
69547 */
69548 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
69549 sqlite3_stmt *pNext;
69550 #ifdef SQLITE_ENABLE_API_ARMOR
69551 if( !sqlite3SafetyCheckOk(pDb) ){
69552 (void)SQLITE_MISUSE_BKPT;
69553 return 0;
69554 }
69555 #endif
69556 sqlite3_mutex_enter(pDb->mutex);
69557 if( pStmt==0 ){
69558 pNext = (sqlite3_stmt*)pDb->pVdbe;
69559 }else{
69560 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
@@ -68759,15 +69566,91 @@
69566 /*
69567 ** Return the value of a status counter for a prepared statement
69568 */
69569 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
69570 Vdbe *pVdbe = (Vdbe*)pStmt;
69571 u32 v;
69572 #ifdef SQLITE_ENABLE_API_ARMOR
69573 if( !pStmt ){
69574 (void)SQLITE_MISUSE_BKPT;
69575 return 0;
69576 }
69577 #endif
69578 v = pVdbe->aCounter[op];
69579 if( resetFlag ) pVdbe->aCounter[op] = 0;
69580 return (int)v;
69581 }
69582
69583 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
69584 /*
69585 ** Return status data for a single loop within query pStmt.
69586 */
69587 SQLITE_API int sqlite3_stmt_scanstatus(
69588 sqlite3_stmt *pStmt, /* Prepared statement being queried */
69589 int idx, /* Index of loop to report on */
69590 int iScanStatusOp, /* Which metric to return */
69591 void *pOut /* OUT: Write the answer here */
69592 ){
69593 Vdbe *p = (Vdbe*)pStmt;
69594 ScanStatus *pScan;
69595 if( idx<0 || idx>=p->nScan ) return 1;
69596 pScan = &p->aScan[idx];
69597 switch( iScanStatusOp ){
69598 case SQLITE_SCANSTAT_NLOOP: {
69599 *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
69600 break;
69601 }
69602 case SQLITE_SCANSTAT_NVISIT: {
69603 *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
69604 break;
69605 }
69606 case SQLITE_SCANSTAT_EST: {
69607 double r = 1.0;
69608 LogEst x = pScan->nEst;
69609 while( x<100 ){
69610 x += 10;
69611 r *= 0.5;
69612 }
69613 *(double*)pOut = r*sqlite3LogEstToInt(x);
69614 break;
69615 }
69616 case SQLITE_SCANSTAT_NAME: {
69617 *(const char**)pOut = pScan->zName;
69618 break;
69619 }
69620 case SQLITE_SCANSTAT_EXPLAIN: {
69621 if( pScan->addrExplain ){
69622 *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z;
69623 }else{
69624 *(const char**)pOut = 0;
69625 }
69626 break;
69627 }
69628 case SQLITE_SCANSTAT_SELECTID: {
69629 if( pScan->addrExplain ){
69630 *(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
69631 }else{
69632 *(int*)pOut = -1;
69633 }
69634 break;
69635 }
69636 default: {
69637 return 1;
69638 }
69639 }
69640 return 0;
69641 }
69642
69643 /*
69644 ** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
69645 */
69646 SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
69647 Vdbe *p = (Vdbe*)pStmt;
69648 memset(p->anExec, 0, p->nOp * sizeof(i64));
69649 }
69650 #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
69651
69652 /************** End of vdbeapi.c *********************************************/
69653 /************** Begin file vdbetrace.c ***************************************/
69654 /*
69655 ** 2009 November 25
69656 **
@@ -69649,10 +70532,13 @@
70532 #ifdef VDBE_PROFILE
70533 start = sqlite3Hwtime();
70534 #endif
70535 nVmStep++;
70536 pOp = &aOp[pc];
70537 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
70538 if( p->anExec ) p->anExec[pc]++;
70539 #endif
70540
70541 /* Only allow tracing if SQLITE_DEBUG is defined.
70542 */
70543 #ifdef SQLITE_DEBUG
70544 if( db->flags & SQLITE_VdbeTrace ){
@@ -71674,11 +72560,14 @@
72560 testcase( serial_type==127 );
72561 testcase( serial_type==128 );
72562 nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type);
72563 }while( (--pRec)>=pData0 );
72564
72565 /* EVIDENCE-OF: R-22564-11647 The header begins with a single varint
72566 ** which determines the total number of bytes in the header. The varint
72567 ** value is the size of the header in bytes including the size varint
72568 ** itself. */
72569 testcase( nHdr==126 );
72570 testcase( nHdr==127 );
72571 if( nHdr<=126 ){
72572 /* The common case */
72573 nHdr += 1;
@@ -71708,11 +72597,15 @@
72597 j = nHdr;
72598 assert( pData0<=pLast );
72599 pRec = pData0;
72600 do{
72601 serial_type = pRec->uTemp;
72602 /* EVIDENCE-OF: R-06529-47362 Following the size varint are one or more
72603 ** additional varints, one per column. */
72604 i += putVarint32(&zNewRecord[i], serial_type); /* serial type */
72605 /* EVIDENCE-OF: R-64536-51728 The values for each column in the record
72606 ** immediately follow the header. */
72607 j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */
72608 }while( (++pRec)<=pLast );
72609 assert( i==nHdr );
72610 assert( j==nByte );
72611
@@ -72843,14 +73736,14 @@
73736 }
73737 pIdxKey = &r;
73738 }else{
73739 pIdxKey = sqlite3VdbeAllocUnpackedRecord(
73740 pC->pKeyInfo, aTempRec, sizeof(aTempRec), &pFree
73741 );
73742 if( pIdxKey==0 ) goto no_mem;
73743 assert( pIn3->flags & MEM_Blob );
73744 ExpandBlob(pIn3);
73745 sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey);
73746 }
73747 pIdxKey->default_rc = 0;
73748 if( pOp->opcode==OP_NoConflict ){
73749 /* For the OP_NoConflict opcode, take the jump if any of the
@@ -73540,13 +74433,13 @@
74433 }
74434 /* Opcode: Rewind P1 P2 * * *
74435 **
74436 ** The next use of the Rowid or Column or Next instruction for P1
74437 ** will refer to the first entry in the database table or index.
74438 ** If the table or index is empty, jump immediately to P2.
74439 ** If the table or index is not empty, fall through to the following
74440 ** instruction.
74441 **
74442 ** This opcode leaves the cursor configured to move in forward order,
74443 ** from the beginning toward the end. In other words, the cursor is
74444 ** configured to use Next, not Prev.
74445 */
@@ -74458,10 +75351,13 @@
75351 pFrame->aOp = p->aOp;
75352 pFrame->nOp = p->nOp;
75353 pFrame->token = pProgram->token;
75354 pFrame->aOnceFlag = p->aOnceFlag;
75355 pFrame->nOnceFlag = p->nOnceFlag;
75356 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
75357 pFrame->anExec = p->anExec;
75358 #endif
75359
75360 pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
75361 for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
75362 pMem->flags = MEM_Undefined;
75363 pMem->db = db;
@@ -74475,10 +75371,11 @@
75371
75372 p->nFrame++;
75373 pFrame->pParent = p->pFrame;
75374 pFrame->lastRowid = lastRowid;
75375 pFrame->nChange = p->nChange;
75376 pFrame->nDbChange = p->db->nChange;
75377 p->nChange = 0;
75378 p->pFrame = pFrame;
75379 p->aMem = aMem = &VdbeFrameMem(pFrame)[-1];
75380 p->nMem = pFrame->nChildMem;
75381 p->nCursor = (u16)pFrame->nChildCsr;
@@ -74485,10 +75382,13 @@
75382 p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
75383 p->aOp = aOp = pProgram->aOp;
75384 p->nOp = pProgram->nOp;
75385 p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
75386 p->nOnceFlag = pProgram->nOnce;
75387 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
75388 p->anExec = 0;
75389 #endif
75390 pc = -1;
75391 memset(p->aOnceFlag, 0, p->nOnceFlag);
75392
75393 break;
75394 }
@@ -75673,10 +76573,15 @@
76573 char *zErr = 0;
76574 Table *pTab;
76575 Parse *pParse = 0;
76576 Incrblob *pBlob = 0;
76577
76578 #ifdef SQLITE_ENABLE_API_ARMOR
76579 if( !sqlite3SafetyCheckOk(db) || ppBlob==0 || zTable==0 ){
76580 return SQLITE_MISUSE_BKPT;
76581 }
76582 #endif
76583 flags = !!flags; /* flags = (flags ? 1 : 0); */
76584 *ppBlob = 0;
76585
76586 sqlite3_mutex_enter(db->mutex);
76587
@@ -75891,11 +76796,10 @@
76796 v = (Vdbe*)p->pStmt;
76797
76798 if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
76799 /* Request is out of range. Return a transient error. */
76800 rc = SQLITE_ERROR;
 
76801 }else if( v==0 ){
76802 /* If there is no statement handle, then the blob-handle has
76803 ** already been invalidated. Return SQLITE_ABORT in this case.
76804 */
76805 rc = SQLITE_ABORT;
@@ -75909,14 +76813,14 @@
76813 sqlite3BtreeLeaveCursor(p->pCsr);
76814 if( rc==SQLITE_ABORT ){
76815 sqlite3VdbeFinalize(v);
76816 p->pStmt = 0;
76817 }else{
 
76818 v->rc = rc;
76819 }
76820 }
76821 sqlite3Error(db, rc);
76822 rc = sqlite3ApiExit(db, rc);
76823 sqlite3_mutex_leave(db->mutex);
76824 return rc;
76825 }
76826
@@ -76089,11 +76993,11 @@
76993 ** itself.
76994 **
76995 ** The sorter is running in multi-threaded mode if (a) the library was built
76996 ** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater
76997 ** than zero, and (b) worker threads have been enabled at runtime by calling
76998 ** "PRAGMA threads=N" with some value of N greater than 0.
76999 **
77000 ** When Rewind() is called, any data remaining in memory is flushed to a
77001 ** final PMA. So at this point the data is stored in some number of sorted
77002 ** PMAs within temporary files on disk.
77003 **
@@ -76134,10 +77038,17 @@
77038 */
77039 #if 0
77040 # define SQLITE_DEBUG_SORTER_THREADS 1
77041 #endif
77042
77043 /*
77044 ** Hard-coded maximum amount of data to accumulate in memory before flushing
77045 ** to a level 0 PMA. The purpose of this limit is to prevent various integer
77046 ** overflows. 512MiB.
77047 */
77048 #define SQLITE_MAX_MXPMASIZE (1<<29)
77049
77050 /*
77051 ** Private objects used by the sorter
77052 */
77053 typedef struct MergeEngine MergeEngine; /* Merge PMAs together */
77054 typedef struct PmaReader PmaReader; /* Incrementally read one PMA */
@@ -76832,17 +77743,15 @@
77743
77744 if( !sqlite3TempInMemory(db) ){
77745 pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
77746 mxCache = db->aDb[0].pSchema->cache_size;
77747 if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
77748 pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_MXPMASIZE);
77749
77750 /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
77751 ** scratch memory using SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary
77752 ** large heap allocations.
 
 
77753 */
77754 if( sqlite3GlobalConfig.pScratch==0 ){
77755 assert( pSorter->iMemory==0 );
77756 pSorter->nMemory = pgsz;
77757 pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
@@ -79210,19 +80119,19 @@
80119 **
80120 ** incrAggFunctionDepth(pExpr,n) is the main routine. incrAggDepth(..)
80121 ** is a helper function - a callback for the tree walker.
80122 */
80123 static int incrAggDepth(Walker *pWalker, Expr *pExpr){
80124 if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.n;
80125 return WRC_Continue;
80126 }
80127 static void incrAggFunctionDepth(Expr *pExpr, int N){
80128 if( N>0 ){
80129 Walker w;
80130 memset(&w, 0, sizeof(w));
80131 w.xExprCallback = incrAggDepth;
80132 w.u.n = N;
80133 sqlite3WalkExpr(&w, pExpr);
80134 }
80135 }
80136
80137 /*
@@ -79766,11 +80675,11 @@
80675 double r = -1.0;
80676 if( p->op!=TK_FLOAT ) return -1;
80677 sqlite3AtoF(p->u.zToken, &r, sqlite3Strlen30(p->u.zToken), SQLITE_UTF8);
80678 assert( r>=0.0 );
80679 if( r>1.0 ) return -1;
80680 return (int)(r*134217728.0);
80681 }
80682
80683 /*
80684 ** This routine is callback for sqlite3WalkExpr().
80685 **
@@ -79898,11 +80807,11 @@
80807 ** EVIDENCE-OF: R-36850-34127 The likely(X) function is short-hand for
80808 ** likelihood(X,0.9375).
80809 ** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent to
80810 ** likelihood(X,0.9375). */
80811 /* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */
80812 pExpr->iTable = pDef->zName[0]=='u' ? 8388608 : 125829120;
80813 }
80814 }
80815 #ifndef SQLITE_OMIT_AUTHORIZATION
80816 auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
80817 if( auth!=SQLITE_OK ){
@@ -81855,69 +82764,79 @@
82764 sqlite3DbFree(db, pList->a);
82765 sqlite3DbFree(db, pList);
82766 }
82767
82768 /*
82769 ** These routines are Walker callbacks used to check expressions to
82770 ** see if they are "constant" for some definition of constant. The
82771 ** Walker.eCode value determines the type of "constant" we are looking
82772 ** for.
82773 **
82774 ** These callback routines are used to implement the following:
82775 **
82776 ** sqlite3ExprIsConstant() pWalker->eCode==1
82777 ** sqlite3ExprIsConstantNotJoin() pWalker->eCode==2
82778 ** sqlite3ExprRefOneTableOnly() pWalker->eCode==3
82779 ** sqlite3ExprIsConstantOrFunction() pWalker->eCode==4 or 5
82780 **
82781 ** In all cases, the callbacks set Walker.eCode=0 and abort if the expression
82782 ** is found to not be a constant.
82783 **
82784 ** The sqlite3ExprIsConstantOrFunction() is used for evaluating expressions
82785 ** in a CREATE TABLE statement. The Walker.eCode value is 5 when parsing
82786 ** an existing schema and 4 when processing a new statement. A bound
82787 ** parameter raises an error for new statements, but is silently converted
82788 ** to NULL for existing schemas. This allows sqlite_master tables that
82789 ** contain a bound parameter because they were generated by older versions
82790 ** of SQLite to be parsed by newer versions of SQLite without raising a
82791 ** malformed schema error.
82792 */
82793 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
82794
82795 /* If pWalker->eCode is 2 then any term of the expression that comes from
82796 ** the ON or USING clauses of a left join disqualifies the expression
82797 ** from being considered constant. */
82798 if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
82799 pWalker->eCode = 0;
82800 return WRC_Abort;
82801 }
82802
82803 switch( pExpr->op ){
82804 /* Consider functions to be constant if all their arguments are constant
82805 ** and either pWalker->eCode==4 or 5 or the function has the
82806 ** SQLITE_FUNC_CONST flag. */
82807 case TK_FUNCTION:
82808 if( pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_Constant) ){
82809 return WRC_Continue;
82810 }else{
82811 pWalker->eCode = 0;
82812 return WRC_Abort;
82813 }
 
82814 case TK_ID:
82815 case TK_COLUMN:
82816 case TK_AGG_FUNCTION:
82817 case TK_AGG_COLUMN:
82818 testcase( pExpr->op==TK_ID );
82819 testcase( pExpr->op==TK_COLUMN );
82820 testcase( pExpr->op==TK_AGG_FUNCTION );
82821 testcase( pExpr->op==TK_AGG_COLUMN );
82822 if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){
82823 return WRC_Continue;
82824 }else{
82825 pWalker->eCode = 0;
82826 return WRC_Abort;
82827 }
82828 case TK_VARIABLE:
82829 if( pWalker->eCode==5 ){
82830 /* Silently convert bound parameters that appear inside of CREATE
82831 ** statements into a NULL when parsing the CREATE statement text out
82832 ** of the sqlite_master table */
82833 pExpr->op = TK_NULL;
82834 }else if( pWalker->eCode==4 ){
82835 /* A bound parameter in a CREATE statement that originates from
82836 ** sqlite3_prepare() causes an error */
82837 pWalker->eCode = 0;
82838 return WRC_Abort;
82839 }
82840 /* Fall through */
82841 default:
82842 testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
@@ -81925,57 +82844,68 @@
82844 return WRC_Continue;
82845 }
82846 }
82847 static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
82848 UNUSED_PARAMETER(NotUsed);
82849 pWalker->eCode = 0;
82850 return WRC_Abort;
82851 }
82852 static int exprIsConst(Expr *p, int initFlag, int iCur){
82853 Walker w;
82854 memset(&w, 0, sizeof(w));
82855 w.eCode = initFlag;
82856 w.xExprCallback = exprNodeIsConstant;
82857 w.xSelectCallback = selectNodeIsConstant;
82858 w.u.iCur = iCur;
82859 sqlite3WalkExpr(&w, p);
82860 return w.eCode;
82861 }
82862
82863 /*
82864 ** Walk an expression tree. Return non-zero if the expression is constant
82865 ** and 0 if it involves variables or function calls.
82866 **
82867 ** For the purposes of this function, a double-quoted string (ex: "abc")
82868 ** is considered a variable but a single-quoted string (ex: 'abc') is
82869 ** a constant.
82870 */
82871 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
82872 return exprIsConst(p, 1, 0);
82873 }
82874
82875 /*
82876 ** Walk an expression tree. Return non-zero if the expression is constant
82877 ** that does no originate from the ON or USING clauses of a join.
82878 ** Return 0 if it involves variables or function calls or terms from
82879 ** an ON or USING clause.
82880 */
82881 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
82882 return exprIsConst(p, 2, 0);
82883 }
82884
82885 /*
82886 ** Walk an expression tree. Return non-zero if the expression constant
82887 ** for any single row of the table with cursor iCur. In other words, the
82888 ** expression must not refer to any non-deterministic function nor any
82889 ** table other than iCur.
82890 */
82891 SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){
82892 return exprIsConst(p, 3, iCur);
82893 }
82894
82895 /*
82896 ** Walk an expression tree. Return non-zero if the expression is constant
82897 ** or a function call with constant arguments. Return and 0 if there
82898 ** are any variables.
82899 **
82900 ** For the purposes of this function, a double-quoted string (ex: "abc")
82901 ** is considered a variable but a single-quoted string (ex: 'abc') is
82902 ** a constant.
82903 */
82904 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
82905 assert( isInit==0 || isInit==1 );
82906 return exprIsConst(p, 4+isInit, 0);
82907 }
82908
82909 /*
82910 ** If the expression p codes a constant integer that is small enough
82911 ** to fit in a 32-bit integer, return 1 and put the value of the integer
@@ -83627,11 +84557,14 @@
84557 target
84558 ));
84559
84560 #ifndef SQLITE_OMIT_FLOATING_POINT
84561 /* If the column has REAL affinity, it may currently be stored as an
84562 ** integer. Use OP_RealAffinity to make sure it is really real.
84563 **
84564 ** EVIDENCE-OF: R-60985-57662 SQLite will convert the value back to
84565 ** floating point when extracting it from the record. */
84566 if( pExpr->iColumn>=0
84567 && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
84568 ){
84569 sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
84570 }
@@ -87279,27 +88212,32 @@
88212 aLog[i] = sqlite3LogEst(v);
88213 #endif
88214 if( *z==' ' ) z++;
88215 }
88216 #ifndef SQLITE_ENABLE_STAT3_OR_STAT4
88217 assert( pIndex!=0 ); {
88218 #else
88219 if( pIndex ){
88220 #endif
88221 pIndex->bUnordered = 0;
88222 pIndex->noSkipScan = 0;
88223 while( z[0] ){
88224 if( sqlite3_strglob("unordered*", z)==0 ){
88225 pIndex->bUnordered = 1;
88226 }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
88227 pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
88228 }else if( sqlite3_strglob("noskipscan*", z)==0 ){
88229 pIndex->noSkipScan = 1;
88230 }
88231 #ifdef SQLITE_ENABLE_COSTMULT
88232 else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){
88233 pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9));
88234 }
88235 #endif
88236 while( z[0]!=0 && z[0]!=' ' ) z++;
88237 while( z[0]==' ' ) z++;
88238 }
 
 
 
88239 }
88240 }
88241
88242 /*
88243 ** This callback is invoked once for each index when reading the
@@ -87421,10 +88359,11 @@
88359 nSample--;
88360 }else{
88361 nRow = pIdx->aiRowEst[0];
88362 nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1];
88363 }
88364 pIdx->nRowEst0 = nRow;
88365
88366 /* Set nSum to the number of distinct (iCol+1) field prefixes that
88367 ** occur in the stat4 table for this index. Set sumEq to the sum of
88368 ** the nEq values for column iCol for the same set (adding the value
88369 ** only once where there exist duplicate prefixes). */
@@ -87682,11 +88621,11 @@
88621 }
88622
88623
88624 /* Load the statistics from the sqlite_stat4 table. */
88625 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
88626 if( rc==SQLITE_OK && OptimizationEnabled(db, SQLITE_Stat34) ){
88627 int lookasideEnabled = db->lookaside.bEnabled;
88628 db->lookaside.bEnabled = 0;
88629 rc = loadStat4(db, sInfo.zDatabase);
88630 db->lookaside.bEnabled = lookasideEnabled;
88631 }
@@ -88364,10 +89303,13 @@
89303 SQLITE_API int sqlite3_set_authorizer(
89304 sqlite3 *db,
89305 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
89306 void *pArg
89307 ){
89308 #ifdef SQLITE_ENABLE_API_ARMOR
89309 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
89310 #endif
89311 sqlite3_mutex_enter(db->mutex);
89312 db->xAuth = (sqlite3_xauth)xAuth;
89313 db->pAuthArg = pArg;
89314 sqlite3ExpirePreparedStatements(db);
89315 sqlite3_mutex_leave(db->mutex);
@@ -88858,11 +89800,15 @@
89800 ** See also sqlite3LocateTable().
89801 */
89802 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
89803 Table *p = 0;
89804 int i;
89805
89806 #ifdef SQLITE_ENABLE_API_ARMOR
89807 if( !sqlite3SafetyCheckOk(db) || zName==0 ) return 0;
89808 #endif
89809
89810 /* All mutexes are required for schema access. Make sure we hold them. */
89811 assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
89812 #if SQLITE_USER_AUTHENTICATION
89813 /* Only the admin user is allowed to know that the sqlite_user table
89814 ** exists */
@@ -94322,12 +95268,12 @@
95268 break;
95269 }
95270 default: {
95271 /* Because sqlite3_value_double() returns 0.0 if the argument is not
95272 ** something that can be converted into a number, we have:
95273 ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob
95274 ** that cannot be converted to a numeric value.
95275 */
95276 double rVal = sqlite3_value_double(argv[0]);
95277 if( rVal<0 ) rVal = -rVal;
95278 sqlite3_result_double(context, rVal);
95279 break;
@@ -103881,13 +104827,16 @@
104827 Vdbe *pOld, /* VM being reprepared */
104828 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
104829 const char **pzTail /* OUT: End of parsed string */
104830 ){
104831 int rc;
104832
104833 #ifdef SQLITE_ENABLE_API_ARMOR
104834 if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
104835 #endif
104836 *ppStmt = 0;
104837 if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
104838 return SQLITE_MISUSE_BKPT;
104839 }
104840 sqlite3_mutex_enter(db->mutex);
104841 sqlite3BtreeEnterAll(db);
104842 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
@@ -103990,13 +104939,15 @@
104939 */
104940 char *zSql8;
104941 const char *zTail8 = 0;
104942 int rc = SQLITE_OK;
104943
104944 #ifdef SQLITE_ENABLE_API_ARMOR
104945 if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
104946 #endif
104947 *ppStmt = 0;
104948 if( !sqlite3SafetyCheckOk(db)||zSql==0 ){
104949 return SQLITE_MISUSE_BKPT;
104950 }
104951 if( nBytes>=0 ){
104952 int sz;
104953 const char *z = (const char*)zSql;
@@ -109705,10 +110656,13 @@
110656 char **pzErrMsg /* Write error messages here */
110657 ){
110658 int rc;
110659 TabResult res;
110660
110661 #ifdef SQLITE_ENABLE_API_ARMOR
110662 if( pazResult==0 ) return SQLITE_MISUSE_BKPT;
110663 #endif
110664 *pazResult = 0;
110665 if( pnColumn ) *pnColumn = 0;
110666 if( pnRow ) *pnRow = 0;
110667 if( pzErrMsg ) *pzErrMsg = 0;
110668 res.zErrMsg = 0;
@@ -111768,11 +112722,11 @@
112722 ** Two writes per page are required in step (3) because the original
112723 ** database content must be written into the rollback journal prior to
112724 ** overwriting the database with the vacuumed content.
112725 **
112726 ** Only 1x temporary space and only 1x writes would be required if
112727 ** the copy of step (3) were replaced by deleting the original database
112728 ** and renaming the transient database as the original. But that will
112729 ** not work if other processes are attached to the original database.
112730 ** And a power loss in between deleting the original and renaming the
112731 ** transient would cause the database file to appear to be deleted
112732 ** following reboot.
@@ -112126,10 +113080,13 @@
113080 sqlite3 *db, /* Database in which module is registered */
113081 const char *zName, /* Name assigned to this module */
113082 const sqlite3_module *pModule, /* The definition of the module */
113083 void *pAux /* Context pointer for xCreate/xConnect */
113084 ){
113085 #ifdef SQLITE_ENABLE_API_ARMOR
113086 if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
113087 #endif
113088 return createModule(db, zName, pModule, pAux, 0);
113089 }
113090
113091 /*
113092 ** External API function used to create a new virtual-table module.
@@ -112139,10 +113096,13 @@
113096 const char *zName, /* Name assigned to this module */
113097 const sqlite3_module *pModule, /* The definition of the module */
113098 void *pAux, /* Context pointer for xCreate/xConnect */
113099 void (*xDestroy)(void *) /* Module destructor function */
113100 ){
113101 #ifdef SQLITE_ENABLE_API_ARMOR
113102 if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
113103 #endif
113104 return createModule(db, zName, pModule, pAux, xDestroy);
113105 }
113106
113107 /*
113108 ** Lock the virtual table so that it cannot be disconnected.
@@ -112371,11 +113331,16 @@
113331 pTable->tabFlags |= TF_Virtual;
113332 pTable->nModuleArg = 0;
113333 addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
113334 addModuleArgument(db, pTable, 0);
113335 addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
113336 assert( (pParse->sNameToken.z==pName2->z && pName2->z!=0)
113337 || (pParse->sNameToken.z==pName1->z && pName2->z==0)
113338 );
113339 pParse->sNameToken.n = (int)(
113340 &pModuleName->z[pModuleName->n] - pParse->sNameToken.z
113341 );
113342
113343 #ifndef SQLITE_OMIT_AUTHORIZATION
113344 /* Creating a virtual table invokes the authorization callback twice.
113345 ** The first invocation, to obtain permission to INSERT a row into the
113346 ** sqlite_master table, has already been made by sqlite3StartTable().
@@ -112743,10 +113708,13 @@
113708
113709 int rc = SQLITE_OK;
113710 Table *pTab;
113711 char *zErr = 0;
113712
113713 #ifdef SQLITE_ENABLE_API_ARMOR
113714 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
113715 #endif
113716 sqlite3_mutex_enter(db->mutex);
113717 if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
113718 sqlite3Error(db, SQLITE_MISUSE);
113719 sqlite3_mutex_leave(db->mutex);
113720 return SQLITE_MISUSE_BKPT;
@@ -113099,10 +114067,13 @@
114067 */
114068 SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
114069 static const unsigned char aMap[] = {
114070 SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE
114071 };
114072 #ifdef SQLITE_ENABLE_API_ARMOR
114073 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
114074 #endif
114075 assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
114076 assert( OE_Ignore==4 && OE_Replace==5 );
114077 assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
114078 return (int)aMap[db->vtabOnConflict-1];
114079 }
@@ -113114,12 +114085,14 @@
114085 */
114086 SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
114087 va_list ap;
114088 int rc = SQLITE_OK;
114089
114090 #ifdef SQLITE_ENABLE_API_ARMOR
114091 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
114092 #endif
114093 sqlite3_mutex_enter(db->mutex);
 
114094 va_start(ap, op);
114095 switch( op ){
114096 case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
114097 VtabCtx *p = db->pVtabCtx;
114098 if( !p ){
@@ -113250,10 +114223,13 @@
114223 } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */
114224 Index *pCovidx; /* Possible covering index for WHERE_MULTI_OR */
114225 } u;
114226 struct WhereLoop *pWLoop; /* The selected WhereLoop object */
114227 Bitmask notReady; /* FROM entries not usable at this level */
114228 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
114229 int addrVisit; /* Address at which row is visited */
114230 #endif
114231 };
114232
114233 /*
114234 ** Each instance of this object represents an algorithm for evaluating one
114235 ** term of a join. Every term of the FROM clause will have at least
@@ -113280,11 +114256,10 @@
114256 LogEst rRun; /* Cost of running each loop */
114257 LogEst nOut; /* Estimated number of output rows */
114258 union {
114259 struct { /* Information for internal btree tables */
114260 u16 nEq; /* Number of equality constraints */
 
114261 Index *pIndex; /* Index used, or NULL */
114262 } btree;
114263 struct { /* Information for virtual tables */
114264 int idxNum; /* Index number */
114265 u8 needFree; /* True if sqlite3_free(idxStr) is needed */
@@ -113293,16 +114268,17 @@
114268 char *idxStr; /* Index identifier string */
114269 } vtab;
114270 } u;
114271 u32 wsFlags; /* WHERE_* flags describing the plan */
114272 u16 nLTerm; /* Number of entries in aLTerm[] */
114273 u16 nSkip; /* Number of NULL aLTerm[] entries */
114274 /**** whereLoopXfer() copies fields above ***********************/
114275 # define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot)
114276 u16 nLSlot; /* Number of slots allocated for aLTerm[] */
114277 WhereTerm **aLTerm; /* WhereTerms used */
114278 WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */
114279 WhereTerm *aLTermSpace[3]; /* Initial aLTerm[] space */
114280 };
114281
114282 /* This object holds the prerequisites and the cost of running a
114283 ** subquery on one operand of an OR operator in the WHERE clause.
114284 ** See WhereOrSet for additional information
@@ -113624,10 +114600,11 @@
114600 #define WHERE_ONEROW 0x00001000 /* Selects no more than one row */
114601 #define WHERE_MULTI_OR 0x00002000 /* OR using multiple indices */
114602 #define WHERE_AUTO_INDEX 0x00004000 /* Uses an ephemeral index */
114603 #define WHERE_SKIPSCAN 0x00008000 /* Uses the skip-scan algorithm */
114604 #define WHERE_UNQ_WANTED 0x00010000 /* WHERE_ONEROW would have been helpful*/
114605 #define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */
114606
114607 /************** End of whereInt.h ********************************************/
114608 /************** Continuing where we left off in where.c **********************/
114609
114610 /*
@@ -113834,11 +114811,11 @@
114811 }
114812 pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
114813 }
114814 pTerm = &pWC->a[idx = pWC->nTerm++];
114815 if( p && ExprHasProperty(p, EP_Unlikely) ){
114816 pTerm->truthProb = sqlite3LogEst(p->iTable) - 270;
114817 }else{
114818 pTerm->truthProb = 1;
114819 }
114820 pTerm->pExpr = sqlite3ExprSkipCollate(p);
114821 pTerm->wtFlags = wtFlags;
@@ -114364,10 +115341,19 @@
115341 if( pDerived ){
115342 pDerived->flags |= pBase->flags & EP_FromJoin;
115343 pDerived->iRightJoinTable = pBase->iRightJoinTable;
115344 }
115345 }
115346
115347 /*
115348 ** Mark term iChild as being a child of term iParent
115349 */
115350 static void markTermAsChild(WhereClause *pWC, int iChild, int iParent){
115351 pWC->a[iChild].iParent = iParent;
115352 pWC->a[iChild].truthProb = pWC->a[iParent].truthProb;
115353 pWC->a[iParent].nChild++;
115354 }
115355
115356 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
115357 /*
115358 ** Analyze a term that consists of two or more OR-connected
115359 ** subterms. So in:
@@ -114662,12 +115648,11 @@
115648 pNew->x.pList = pList;
115649 idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
115650 testcase( idxNew==0 );
115651 exprAnalyze(pSrc, pWC, idxNew);
115652 pTerm = &pWC->a[idxTerm];
115653 markTermAsChild(pWC, idxNew, idxTerm);
 
115654 }else{
115655 sqlite3ExprListDelete(db, pList);
115656 }
115657 pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */
115658 }
@@ -114765,13 +115750,12 @@
115750 return;
115751 }
115752 idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
115753 if( idxNew==0 ) return;
115754 pNew = &pWC->a[idxNew];
115755 markTermAsChild(pWC, idxNew, idxTerm);
115756 pTerm = &pWC->a[idxTerm];
 
115757 pTerm->wtFlags |= TERM_COPIED;
115758 if( pExpr->op==TK_EQ
115759 && !ExprHasProperty(pExpr, EP_FromJoin)
115760 && OptimizationEnabled(db, SQLITE_Transitive)
115761 ){
@@ -114824,13 +115808,12 @@
115808 transferJoinMarkings(pNewExpr, pExpr);
115809 idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
115810 testcase( idxNew==0 );
115811 exprAnalyze(pSrc, pWC, idxNew);
115812 pTerm = &pWC->a[idxTerm];
115813 markTermAsChild(pWC, idxNew, idxTerm);
115814 }
 
115815 }
115816 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
115817
115818 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
115819 /* Analyze a term that is composed of two or more subterms connected by
@@ -114901,13 +115884,12 @@
115884 idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
115885 testcase( idxNew2==0 );
115886 exprAnalyze(pSrc, pWC, idxNew2);
115887 pTerm = &pWC->a[idxTerm];
115888 if( isComplete ){
115889 markTermAsChild(pWC, idxNew1, idxTerm);
115890 markTermAsChild(pWC, idxNew2, idxTerm);
 
115891 }
115892 }
115893 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
115894
115895 #ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -114936,13 +115918,12 @@
115918 pNewTerm = &pWC->a[idxNew];
115919 pNewTerm->prereqRight = prereqExpr;
115920 pNewTerm->leftCursor = pLeft->iTable;
115921 pNewTerm->u.leftColumn = pLeft->iColumn;
115922 pNewTerm->eOperator = WO_MATCH;
115923 markTermAsChild(pWC, idxNew, idxTerm);
115924 pTerm = &pWC->a[idxTerm];
 
115925 pTerm->wtFlags |= TERM_COPIED;
115926 pNewTerm->prereqAll = pTerm->prereqAll;
115927 }
115928 }
115929 #endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -114959,11 +115940,11 @@
115940 ** the start of the loop will prevent any results from being returned.
115941 */
115942 if( pExpr->op==TK_NOTNULL
115943 && pExpr->pLeft->op==TK_COLUMN
115944 && pExpr->pLeft->iColumn>=0
115945 && OptimizationEnabled(db, SQLITE_Stat34)
115946 ){
115947 Expr *pNewExpr;
115948 Expr *pLeft = pExpr->pLeft;
115949 int idxNew;
115950 WhereTerm *pNewTerm;
@@ -114978,13 +115959,12 @@
115959 pNewTerm = &pWC->a[idxNew];
115960 pNewTerm->prereqRight = 0;
115961 pNewTerm->leftCursor = pLeft->iTable;
115962 pNewTerm->u.leftColumn = pLeft->iColumn;
115963 pNewTerm->eOperator = WO_GT;
115964 markTermAsChild(pWC, idxNew, idxTerm);
115965 pTerm = &pWC->a[idxTerm];
 
115966 pTerm->wtFlags |= TERM_COPIED;
115967 pNewTerm->prereqAll = pTerm->prereqAll;
115968 }
115969 }
115970 #endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
@@ -115200,10 +116180,12 @@
116180 WhereLoop *pLoop; /* The Loop object */
116181 char *zNotUsed; /* Extra space on the end of pIdx */
116182 Bitmask idxCols; /* Bitmap of columns used for indexing */
116183 Bitmask extraCols; /* Bitmap of additional columns */
116184 u8 sentWarning = 0; /* True if a warnning has been issued */
116185 Expr *pPartial = 0; /* Partial Index Expression */
116186 int iContinue = 0; /* Jump here to skip excluded rows */
116187
116188 /* Generate code to skip over the creation and initialization of the
116189 ** transient index on 2nd and subsequent iterations of the loop. */
116190 v = pParse->pVdbe;
116191 assert( v!=0 );
@@ -115215,10 +116197,16 @@
116197 pTable = pSrc->pTab;
116198 pWCEnd = &pWC->a[pWC->nTerm];
116199 pLoop = pLevel->pWLoop;
116200 idxCols = 0;
116201 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
116202 if( pLoop->prereq==0
116203 && (pTerm->wtFlags & TERM_VIRTUAL)==0
116204 && sqlite3ExprIsTableConstant(pTerm->pExpr, pSrc->iCursor) ){
116205 pPartial = sqlite3ExprAnd(pParse->db, pPartial,
116206 sqlite3ExprDup(pParse->db, pTerm->pExpr, 0));
116207 }
116208 if( termCanDriveIndex(pTerm, pSrc, notReady) ){
116209 int iCol = pTerm->u.leftColumn;
116210 Bitmask cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol);
116211 testcase( iCol==BMS );
116212 testcase( iCol==BMS-1 );
@@ -115227,11 +116215,13 @@
116215 "automatic index on %s(%s)", pTable->zName,
116216 pTable->aCol[iCol].zName);
116217 sentWarning = 1;
116218 }
116219 if( (idxCols & cMask)==0 ){
116220 if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){
116221 goto end_auto_index_create;
116222 }
116223 pLoop->aLTerm[nKeyCol++] = pTerm;
116224 idxCols |= cMask;
116225 }
116226 }
116227 }
@@ -115247,24 +116237,23 @@
116237 ** be a covering index because the index will not be updated if the
116238 ** original table changes and the index and table cannot both be used
116239 ** if they go out of sync.
116240 */
116241 extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1));
116242 mxBitCol = MIN(BMS-1,pTable->nCol);
116243 testcase( pTable->nCol==BMS-1 );
116244 testcase( pTable->nCol==BMS-2 );
116245 for(i=0; i<mxBitCol; i++){
116246 if( extraCols & MASKBIT(i) ) nKeyCol++;
116247 }
116248 if( pSrc->colUsed & MASKBIT(BMS-1) ){
116249 nKeyCol += pTable->nCol - BMS + 1;
116250 }
 
116251
116252 /* Construct the Index object to describe this index */
116253 pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+1, 0, &zNotUsed);
116254 if( pIdx==0 ) goto end_auto_index_create;
116255 pLoop->u.btree.pIndex = pIdx;
116256 pIdx->zName = "auto-index";
116257 pIdx->pTable = pTable;
116258 n = 0;
116259 idxCols = 0;
@@ -115312,22 +116301,33 @@
116301 sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
116302 sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
116303 VdbeComment((v, "for %s", pTable->zName));
116304
116305 /* Fill the automatic index with content */
116306 sqlite3ExprCachePush(pParse);
116307 addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v);
116308 if( pPartial ){
116309 iContinue = sqlite3VdbeMakeLabel(v);
116310 sqlite3ExprIfFalse(pParse, pPartial, iContinue, SQLITE_JUMPIFNULL);
116311 pLoop->wsFlags |= WHERE_PARTIALIDX;
116312 }
116313 regRecord = sqlite3GetTempReg(pParse);
116314 sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0);
116315 sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
116316 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
116317 if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
116318 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
116319 sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
116320 sqlite3VdbeJumpHere(v, addrTop);
116321 sqlite3ReleaseTempReg(pParse, regRecord);
116322 sqlite3ExprCachePop(pParse);
116323
116324 /* Jump here when skipping the initialization */
116325 sqlite3VdbeJumpHere(v, addrInit);
116326
116327 end_auto_index_create:
116328 sqlite3ExprDelete(pParse->db, pPartial);
116329 }
116330 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
116331
116332 #ifndef SQLITE_OMIT_VIRTUALTABLE
116333 /*
@@ -115483,22 +116483,22 @@
116483
116484 return pParse->nErr;
116485 }
116486 #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */
116487
 
116488 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
116489 /*
116490 ** Estimate the location of a particular key among all keys in an
116491 ** index. Store the results in aStat as follows:
116492 **
116493 ** aStat[0] Est. number of rows less than pVal
116494 ** aStat[1] Est. number of rows equal to pVal
116495 **
116496 ** Return the index of the sample that is the smallest sample that
116497 ** is greater than or equal to pRec.
116498 */
116499 static int whereKeyStats(
116500 Parse *pParse, /* Database connection */
116501 Index *pIdx, /* Index to consider domain of */
116502 UnpackedRecord *pRec, /* Vector of values to consider */
116503 int roundUp, /* Round up if true. Round down if false */
116504 tRowcnt *aStat /* OUT: stats written here */
@@ -115576,10 +116576,11 @@
116576 }else{
116577 iGap = iGap/3;
116578 }
116579 aStat[0] = iLower + iGap;
116580 }
116581 return i;
116582 }
116583 #endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
116584
116585 /*
116586 ** If it is not NULL, pTerm is a term that provides an upper or lower
@@ -115726,11 +116727,11 @@
116727 ** pLower pUpper
116728 **
116729 ** If either of the upper or lower bound is not present, then NULL is passed in
116730 ** place of the corresponding WhereTerm.
116731 **
116732 ** The value in (pBuilder->pNew->u.btree.nEq) is the number of the index
116733 ** column subject to the range constraint. Or, equivalently, the number of
116734 ** equality constraints optimized by the proposed index scan. For example,
116735 ** assuming index p is on t1(a, b), and the SQL query is:
116736 **
116737 ** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
@@ -115742,11 +116743,11 @@
116743 **
116744 ** then nEq is set to 0.
116745 **
116746 ** When this function is called, *pnOut is set to the sqlite3LogEst() of the
116747 ** number of rows that the index scan is expected to visit without
116748 ** considering the range constraints. If nEq is 0, then *pnOut is the number of
116749 ** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced)
116750 ** to account for the range constraints pLower and pUpper.
116751 **
116752 ** In the absence of sqlite_stat4 ANALYZE data, or if such data cannot be
116753 ** used, a single range inequality reduces the search space by a factor of 4.
@@ -115766,14 +116767,11 @@
116767
116768 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
116769 Index *p = pLoop->u.btree.pIndex;
116770 int nEq = pLoop->u.btree.nEq;
116771
116772 if( p->nSample>0 && nEq<p->nSampleCol ){
 
 
 
116773 if( nEq==pBuilder->nRecValid ){
116774 UnpackedRecord *pRec = pBuilder->pRec;
116775 tRowcnt a[2];
116776 u8 aff;
116777
@@ -115785,19 +116783,23 @@
116783 **
116784 ** Or, if pLower is NULL or $L cannot be extracted from it (because it
116785 ** is not a simple variable or literal value), the lower bound of the
116786 ** range is $P. Due to a quirk in the way whereKeyStats() works, even
116787 ** if $L is available, whereKeyStats() is called for both ($P) and
116788 ** ($P:$L) and the larger of the two returned values is used.
116789 **
116790 ** Similarly, iUpper is to be set to the estimate of the number of rows
116791 ** less than the upper bound of the range query. Where the upper bound
116792 ** is either ($P) or ($P:$U). Again, even if $U is available, both values
116793 ** of iUpper are requested of whereKeyStats() and the smaller used.
116794 **
116795 ** The number of rows between the two bounds is then just iUpper-iLower.
116796 */
116797 tRowcnt iLower; /* Rows less than the lower bound */
116798 tRowcnt iUpper; /* Rows less than the upper bound */
116799 int iLwrIdx = -2; /* aSample[] for the lower bound */
116800 int iUprIdx = -1; /* aSample[] for the upper bound */
116801
116802 if( pRec ){
116803 testcase( pRec->nField!=pBuilder->nRecValid );
116804 pRec->nField = pBuilder->nRecValid;
116805 }
@@ -115807,11 +116809,11 @@
116809 aff = p->pTable->aCol[p->aiColumn[nEq]].affinity;
116810 }
116811 /* Determine iLower and iUpper using ($P) only. */
116812 if( nEq==0 ){
116813 iLower = 0;
116814 iUpper = p->nRowEst0;
116815 }else{
116816 /* Note: this call could be optimized away - since the same values must
116817 ** have been requested when testing key $P in whereEqualScanEst(). */
116818 whereKeyStats(pParse, p, pRec, 0, a);
116819 iLower = a[0];
@@ -115831,11 +116833,11 @@
116833 int bOk; /* True if value is extracted from pExpr */
116834 Expr *pExpr = pLower->pExpr->pRight;
116835 rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
116836 if( rc==SQLITE_OK && bOk ){
116837 tRowcnt iNew;
116838 iLwrIdx = whereKeyStats(pParse, p, pRec, 0, a);
116839 iNew = a[0] + ((pLower->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
116840 if( iNew>iLower ) iLower = iNew;
116841 nOut--;
116842 pLower = 0;
116843 }
@@ -115846,11 +116848,11 @@
116848 int bOk; /* True if value is extracted from pExpr */
116849 Expr *pExpr = pUpper->pExpr->pRight;
116850 rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
116851 if( rc==SQLITE_OK && bOk ){
116852 tRowcnt iNew;
116853 iUprIdx = whereKeyStats(pParse, p, pRec, 1, a);
116854 iNew = a[0] + ((pUpper->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
116855 if( iNew<iUpper ) iUpper = iNew;
116856 nOut--;
116857 pUpper = 0;
116858 }
@@ -115858,10 +116860,15 @@
116860
116861 pBuilder->pRec = pRec;
116862 if( rc==SQLITE_OK ){
116863 if( iUpper>iLower ){
116864 nNew = sqlite3LogEst(iUpper - iLower);
116865 /* TUNING: If both iUpper and iLower are derived from the same
116866 ** sample, then assume they are 4x more selective. This brings
116867 ** the estimated selectivity more in line with what it would be
116868 ** if estimated without the use of STAT3/4 tables. */
116869 if( iLwrIdx==iUprIdx ) nNew -= 20; assert( 20==sqlite3LogEst(4) );
116870 }else{
116871 nNew = 10; assert( 10==sqlite3LogEst(2) );
116872 }
116873 if( nNew<nOut ){
116874 nOut = nNew;
@@ -115882,16 +116889,19 @@
116889 #endif
116890 assert( pUpper==0 || (pUpper->wtFlags & TERM_VNULL)==0 );
116891 nNew = whereRangeAdjust(pLower, nOut);
116892 nNew = whereRangeAdjust(pUpper, nNew);
116893
116894 /* TUNING: If there is both an upper and lower limit and neither limit
116895 ** has an application-defined likelihood(), assume the range is
116896 ** reduced by an additional 75%. This means that, by default, an open-ended
116897 ** range query (e.g. col > ?) is assumed to match 1/4 of the rows in the
116898 ** index. While a closed range (e.g. col BETWEEN ? AND ?) is estimated to
116899 ** match 1/64 of the index. */
116900 if( pLower && pLower->truthProb>0 && pUpper && pUpper->truthProb>0 ){
116901 nNew -= 20;
116902 }
116903
116904 nOut -= (pLower!=0) + (pUpper!=0);
116905 if( nNew<10 ) nNew = 10;
116906 if( nNew<nOut ) nOut = nNew;
116907 #if defined(WHERETRACE_ENABLED)
@@ -116247,11 +117257,11 @@
117257
117258 /* This module is only called on query plans that use an index. */
117259 pLoop = pLevel->pWLoop;
117260 assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 );
117261 nEq = pLoop->u.btree.nEq;
117262 nSkip = pLoop->nSkip;
117263 pIdx = pLoop->u.btree.pIndex;
117264 assert( pIdx!=0 );
117265
117266 /* Figure out how many memory cells we will need then allocate them.
117267 */
@@ -116361,11 +117371,11 @@
117371 ** "a=? AND b>?"
117372 */
117373 static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){
117374 Index *pIndex = pLoop->u.btree.pIndex;
117375 u16 nEq = pLoop->u.btree.nEq;
117376 u16 nSkip = pLoop->nSkip;
117377 int i, j;
117378 Column *aCol = pTab->aCol;
117379 i16 *aiColumn = pIndex->aiColumn;
117380
117381 if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
@@ -116392,23 +117402,27 @@
117402 sqlite3StrAccumAppend(pStr, ")", 1);
117403 }
117404
117405 /*
117406 ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
117407 ** command, or if either SQLITE_DEBUG or SQLITE_ENABLE_STMT_SCANSTATUS was
117408 ** defined at compile-time. If it is not a no-op, a single OP_Explain opcode
117409 ** is added to the output to describe the table scan strategy in pLevel.
117410 **
117411 ** If an OP_Explain opcode is added to the VM, its address is returned.
117412 ** Otherwise, if no OP_Explain is coded, zero is returned.
117413 */
117414 static int explainOneScan(
117415 Parse *pParse, /* Parse context */
117416 SrcList *pTabList, /* Table list this loop refers to */
117417 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
117418 int iLevel, /* Value for "level" column of output */
117419 int iFrom, /* Value for "from" column of output */
117420 u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */
117421 ){
117422 int ret = 0;
117423 #if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
117424 if( pParse->explain==2 )
117425 #endif
117426 {
117427 struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
117428 Vdbe *v = pParse->pVdbe; /* VM being constructed */
@@ -116421,11 +117435,11 @@
117435 StrAccum str; /* EQP output string */
117436 char zBuf[100]; /* Initial space for EQP output string */
117437
117438 pLoop = pLevel->pWLoop;
117439 flags = pLoop->wsFlags;
117440 if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return 0;
117441
117442 isSearch = (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
117443 || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
117444 || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
117445
@@ -116450,10 +117464,12 @@
117464 assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) );
117465 if( !HasRowid(pItem->pTab) && IsPrimaryKeyIndex(pIdx) ){
117466 if( isSearch ){
117467 zFmt = "PRIMARY KEY";
117468 }
117469 }else if( flags & WHERE_PARTIALIDX ){
117470 zFmt = "AUTOMATIC PARTIAL COVERING INDEX";
117471 }else if( flags & WHERE_AUTO_INDEX ){
117472 zFmt = "AUTOMATIC COVERING INDEX";
117473 }else if( flags & WHERE_IDX_ONLY ){
117474 zFmt = "COVERING INDEX %s";
117475 }else{
@@ -116491,16 +117507,49 @@
117507 }else{
117508 sqlite3StrAccumAppend(&str, " (~1 row)", 9);
117509 }
117510 #endif
117511 zMsg = sqlite3StrAccumFinish(&str);
117512 ret = sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg,P4_DYNAMIC);
117513 }
117514 return ret;
117515 }
117516 #else
117517 # define explainOneScan(u,v,w,x,y,z) 0
117518 #endif /* SQLITE_OMIT_EXPLAIN */
117519
117520 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
117521 /*
117522 ** Configure the VM passed as the first argument with an
117523 ** sqlite3_stmt_scanstatus() entry corresponding to the scan used to
117524 ** implement level pLvl. Argument pSrclist is a pointer to the FROM
117525 ** clause that the scan reads data from.
117526 **
117527 ** If argument addrExplain is not 0, it must be the address of an
117528 ** OP_Explain instruction that describes the same loop.
117529 */
117530 static void addScanStatus(
117531 Vdbe *v, /* Vdbe to add scanstatus entry to */
117532 SrcList *pSrclist, /* FROM clause pLvl reads data from */
117533 WhereLevel *pLvl, /* Level to add scanstatus() entry for */
117534 int addrExplain /* Address of OP_Explain (or 0) */
117535 ){
117536 const char *zObj = 0;
117537 WhereLoop *pLoop = pLvl->pWLoop;
117538 if( (pLoop->wsFlags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){
117539 zObj = pLoop->u.btree.pIndex->zName;
117540 }else{
117541 zObj = pSrclist->a[pLvl->iFrom].zName;
117542 }
117543 sqlite3VdbeScanStatus(
117544 v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
117545 );
117546 }
117547 #else
117548 # define addScanStatus(a, b, c, d) ((void)d)
117549 #endif
117550
117551
117552
117553 /*
117554 ** Generate code for the start of the iLevel-th loop in the WHERE clause
117555 ** implementation described by pWInfo.
@@ -116798,11 +117847,11 @@
117847 u8 bSeekPastNull = 0; /* True to seek past initial nulls */
117848 u8 bStopAtNull = 0; /* Add condition to terminate at NULLs */
117849
117850 pIdx = pLoop->u.btree.pIndex;
117851 iIdxCur = pLevel->iIdxCur;
117852 assert( nEq>=pLoop->nSkip );
117853
117854 /* If this loop satisfies a sort order (pOrderBy) request that
117855 ** was passed to this function to implement a "SELECT min(x) ..."
117856 ** query, then the caller will only allow the loop to run for
117857 ** a single iteration. This means that the first row returned
@@ -116815,11 +117864,11 @@
117864 || (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 );
117865 if( (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)!=0
117866 && pWInfo->nOBSat>0
117867 && (pIdx->nKeyCol>nEq)
117868 ){
117869 assert( pLoop->nSkip==0 );
117870 bSeekPastNull = 1;
117871 nExtraReg = 1;
117872 }
117873
117874 /* Find any inequality constraint terms for the start and end
@@ -117164,13 +118213,15 @@
118213 pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
118214 wctrlFlags, iCovCur);
118215 assert( pSubWInfo || pParse->nErr || db->mallocFailed );
118216 if( pSubWInfo ){
118217 WhereLoop *pSubLoop;
118218 int addrExplain = explainOneScan(
118219 pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
118220 );
118221 addScanStatus(v, pOrTab, &pSubWInfo->a[0], addrExplain);
118222
118223 /* This is the sub-WHERE clause body. First skip over
118224 ** duplicate rows from prior sub-WHERE clauses, and record the
118225 ** rowid (or PRIMARY KEY) for the current row so that the same
118226 ** row will be skipped in subsequent sub-WHERE clauses.
118227 */
@@ -117296,10 +118347,14 @@
118347 VdbeCoverageIf(v, bRev==0);
118348 VdbeCoverageIf(v, bRev!=0);
118349 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
118350 }
118351 }
118352
118353 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
118354 pLevel->addrVisit = sqlite3VdbeCurrentAddr(v);
118355 #endif
118356
118357 /* Insert code to test every subexpression that can be completely
118358 ** computed using the current set of tables.
118359 */
118360 for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
@@ -117436,11 +118491,11 @@
118491 }
118492 sqlite3DebugPrintf(" %-19s", z);
118493 sqlite3_free(z);
118494 }
118495 if( p->wsFlags & WHERE_SKIPSCAN ){
118496 sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->nSkip);
118497 }else{
118498 sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
118499 }
118500 sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
118501 if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
@@ -117547,34 +118602,41 @@
118602 sqlite3DbFree(db, pWInfo);
118603 }
118604 }
118605
118606 /*
118607 ** Return TRUE if all of the following are true:
118608 **
118609 ** (1) X has the same or lower cost that Y
118610 ** (2) X is a proper subset of Y
118611 ** (3) X skips at least as many columns as Y
118612 **
118613 ** By "proper subset" we mean that X uses fewer WHERE clause terms
118614 ** than Y and that every WHERE clause term used by X is also used
118615 ** by Y.
118616 **
118617 ** If X is a proper subset of Y then Y is a better choice and ought
118618 ** to have a lower cost. This routine returns TRUE when that cost
118619 ** relationship is inverted and needs to be adjusted. The third rule
118620 ** was added because if X uses skip-scan less than Y it still might
118621 ** deserve a lower cost even if it is a proper subset of Y.
118622 */
118623 static int whereLoopCheaperProperSubset(
118624 const WhereLoop *pX, /* First WhereLoop to compare */
118625 const WhereLoop *pY /* Compare against this WhereLoop */
118626 ){
118627 int i, j;
118628 if( pX->nLTerm-pX->nSkip >= pY->nLTerm-pY->nSkip ){
118629 return 0; /* X is not a subset of Y */
118630 }
118631 if( pY->nSkip > pX->nSkip ) return 0;
118632 if( pX->rRun >= pY->rRun ){
118633 if( pX->rRun > pY->rRun ) return 0; /* X costs more than Y */
118634 if( pX->nOut > pY->nOut ) return 0; /* X costs more than Y */
118635 }
118636 for(i=pX->nLTerm-1; i>=0; i--){
118637 if( pX->aLTerm[i]==0 ) continue;
118638 for(j=pY->nLTerm-1; j>=0; j--){
118639 if( pY->aLTerm[j]==pX->aLTerm[i] ) break;
118640 }
118641 if( j<0 ) return 0; /* X not a subset of Y since term X[i] not used by Y */
118642 }
@@ -117592,37 +118654,28 @@
118654 ** is a proper subset.
118655 **
118656 ** To say "WhereLoop X is a proper subset of Y" means that X uses fewer
118657 ** WHERE clause terms than Y and that every WHERE clause term used by X is
118658 ** also used by Y.
 
 
 
 
 
 
 
 
 
 
 
118659 */
118660 static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){
118661 if( (pTemplate->wsFlags & WHERE_INDEXED)==0 ) return;
 
118662 for(; p; p=p->pNextLoop){
118663 if( p->iTab!=pTemplate->iTab ) continue;
118664 if( (p->wsFlags & WHERE_INDEXED)==0 ) continue;
 
118665 if( whereLoopCheaperProperSubset(p, pTemplate) ){
118666 /* Adjust pTemplate cost downward so that it is cheaper than its
118667 ** subset p. */
118668 WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n",
118669 pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut-1));
118670 pTemplate->rRun = p->rRun;
118671 pTemplate->nOut = p->nOut - 1;
118672 }else if( whereLoopCheaperProperSubset(pTemplate, p) ){
118673 /* Adjust pTemplate cost upward so that it is costlier than p since
118674 ** pTemplate is a proper subset of p */
118675 WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n",
118676 pTemplate->rRun, pTemplate->nOut, p->rRun, p->nOut+1));
118677 pTemplate->rRun = p->rRun;
118678 pTemplate->nOut = p->nOut + 1;
118679 }
118680 }
118681 }
@@ -117663,12 +118716,13 @@
118716 ** rSetup. Call this SETUP-INVARIANT */
118717 assert( p->rSetup>=pTemplate->rSetup );
118718
118719 /* Any loop using an appliation-defined index (or PRIMARY KEY or
118720 ** UNIQUE constraint) with one or more == constraints is better
118721 ** than an automatic index. Unless it is a skip-scan. */
118722 if( (p->wsFlags & WHERE_AUTO_INDEX)!=0
118723 && (pTemplate->nSkip)==0
118724 && (pTemplate->wsFlags & WHERE_INDEXED)!=0
118725 && (pTemplate->wsFlags & WHERE_COLUMN_EQ)!=0
118726 && (p->prereq & pTemplate->prereq)==pTemplate->prereq
118727 ){
118728 break;
@@ -117823,25 +118877,46 @@
118877
118878 /*
118879 ** Adjust the WhereLoop.nOut value downward to account for terms of the
118880 ** WHERE clause that reference the loop but which are not used by an
118881 ** index.
118882 *
118883 ** For every WHERE clause term that is not used by the index
118884 ** and which has a truth probability assigned by one of the likelihood(),
118885 ** likely(), or unlikely() SQL functions, reduce the estimated number
118886 ** of output rows by the probability specified.
118887 **
118888 ** TUNING: For every WHERE clause term that is not used by the index
118889 ** and which does not have an assigned truth probability, heuristics
118890 ** described below are used to try to estimate the truth probability.
118891 ** TODO --> Perhaps this is something that could be improved by better
118892 ** table statistics.
118893 **
118894 ** Heuristic 1: Estimate the truth probability as 93.75%. The 93.75%
118895 ** value corresponds to -1 in LogEst notation, so this means decrement
118896 ** the WhereLoop.nOut field for every such WHERE clause term.
118897 **
118898 ** Heuristic 2: If there exists one or more WHERE clause terms of the
118899 ** form "x==EXPR" and EXPR is not a constant 0 or 1, then make sure the
118900 ** final output row estimate is no greater than 1/4 of the total number
118901 ** of rows in the table. In other words, assume that x==EXPR will filter
118902 ** out at least 3 out of 4 rows. If EXPR is -1 or 0 or 1, then maybe the
118903 ** "x" column is boolean or else -1 or 0 or 1 is a common default value
118904 ** on the "x" column and so in that case only cap the output row estimate
118905 ** at 1/2 instead of 1/4.
118906 */
118907 static void whereLoopOutputAdjust(
118908 WhereClause *pWC, /* The WHERE clause */
118909 WhereLoop *pLoop, /* The loop to adjust downward */
118910 LogEst nRow /* Number of rows in the entire table */
118911 ){
118912 WhereTerm *pTerm, *pX;
118913 Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
118914 int i, j, k;
118915 LogEst iReduce = 0; /* pLoop->nOut should not exceed nRow-iReduce */
118916
118917 assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 );
118918 for(i=pWC->nTerm, pTerm=pWC->a; i>0; i--, pTerm++){
118919 if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) break;
118920 if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
118921 if( (pTerm->prereqAll & notAllowed)!=0 ) continue;
118922 for(j=pLoop->nLTerm-1; j>=0; j--){
@@ -117850,24 +118925,30 @@
118925 if( pX==pTerm ) break;
118926 if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break;
118927 }
118928 if( j<0 ){
118929 if( pTerm->truthProb<=0 ){
118930 /* If a truth probability is specified using the likelihood() hints,
118931 ** then use the probability provided by the application. */
118932 pLoop->nOut += pTerm->truthProb;
118933 }else{
118934 /* In the absence of explicit truth probabilities, use heuristics to
118935 ** guess a reasonable truth probability. */
118936 pLoop->nOut--;
118937 if( pTerm->eOperator&WO_EQ ){
118938 Expr *pRight = pTerm->pExpr->pRight;
118939 if( sqlite3ExprIsInteger(pRight, &k) && k>=(-1) && k<=1 ){
118940 k = 10;
118941 }else{
118942 k = 20;
118943 }
118944 if( iReduce<k ) iReduce = k;
118945 }
118946 }
118947 }
118948 }
118949 if( pLoop->nOut > nRow-iReduce ) pLoop->nOut = nRow - iReduce;
 
 
 
 
 
 
118950 }
118951
118952 /*
118953 ** Adjust the cost C by the costMult facter T. This only occurs if
118954 ** compiled with -DSQLITE_ENABLE_COSTMULT
@@ -117904,11 +118985,11 @@
118985 int opMask; /* Valid operators for constraints */
118986 WhereScan scan; /* Iterator for WHERE terms */
118987 Bitmask saved_prereq; /* Original value of pNew->prereq */
118988 u16 saved_nLTerm; /* Original value of pNew->nLTerm */
118989 u16 saved_nEq; /* Original value of pNew->u.btree.nEq */
118990 u16 saved_nSkip; /* Original value of pNew->nSkip */
118991 u32 saved_wsFlags; /* Original value of pNew->wsFlags */
118992 LogEst saved_nOut; /* Original value of pNew->nOut */
118993 int iCol; /* Index of the column in the table */
118994 int rc = SQLITE_OK; /* Return code */
118995 LogEst rSize; /* Number of rows in the table */
@@ -117933,56 +119014,18 @@
119014 iCol = pProbe->aiColumn[pNew->u.btree.nEq];
119015
119016 pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, iCol,
119017 opMask, pProbe);
119018 saved_nEq = pNew->u.btree.nEq;
119019 saved_nSkip = pNew->nSkip;
119020 saved_nLTerm = pNew->nLTerm;
119021 saved_wsFlags = pNew->wsFlags;
119022 saved_prereq = pNew->prereq;
119023 saved_nOut = pNew->nOut;
119024 pNew->rSetup = 0;
119025 rSize = pProbe->aiRowLogEst[0];
119026 rLogSize = estLog(rSize);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119027 for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){
119028 u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */
119029 LogEst rCostIdx;
119030 LogEst nOutUnadjusted; /* nOut before IN() and WHERE adjustments */
119031 int nIn = 0;
@@ -118073,11 +119116,10 @@
119116 #ifdef SQLITE_ENABLE_STAT3_OR_STAT4
119117 tRowcnt nOut = 0;
119118 if( nInMul==0
119119 && pProbe->nSample
119120 && pNew->u.btree.nEq<=pProbe->nSampleCol
 
119121 && ((eOp & WO_IN)==0 || !ExprHasProperty(pTerm->pExpr, EP_xIsSelect))
119122 ){
119123 Expr *pExpr = pTerm->pExpr;
119124 if( (eOp & (WO_EQ|WO_ISNULL))!=0 ){
119125 testcase( eOp & WO_EQ );
@@ -118141,14 +119183,49 @@
119183 pBuilder->nRecValid = nRecValid;
119184 #endif
119185 }
119186 pNew->prereq = saved_prereq;
119187 pNew->u.btree.nEq = saved_nEq;
119188 pNew->nSkip = saved_nSkip;
119189 pNew->wsFlags = saved_wsFlags;
119190 pNew->nOut = saved_nOut;
119191 pNew->nLTerm = saved_nLTerm;
119192
119193 /* Consider using a skip-scan if there are no WHERE clause constraints
119194 ** available for the left-most terms of the index, and if the average
119195 ** number of repeats in the left-most terms is at least 18.
119196 **
119197 ** The magic number 18 is selected on the basis that scanning 17 rows
119198 ** is almost always quicker than an index seek (even though if the index
119199 ** contains fewer than 2^17 rows we assume otherwise in other parts of
119200 ** the code). And, even if it is not, it should not be too much slower.
119201 ** On the other hand, the extra seeks could end up being significantly
119202 ** more expensive. */
119203 assert( 42==sqlite3LogEst(18) );
119204 if( saved_nEq==saved_nSkip
119205 && saved_nEq+1<pProbe->nKeyCol
119206 && pProbe->noSkipScan==0
119207 && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */
119208 && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
119209 ){
119210 LogEst nIter;
119211 pNew->u.btree.nEq++;
119212 pNew->nSkip++;
119213 pNew->aLTerm[pNew->nLTerm++] = 0;
119214 pNew->wsFlags |= WHERE_SKIPSCAN;
119215 nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1];
119216 pNew->nOut -= nIter;
119217 /* TUNING: Because uncertainties in the estimates for skip-scan queries,
119218 ** add a 1.375 fudge factor to make skip-scan slightly less likely. */
119219 nIter += 5;
119220 whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul);
119221 pNew->nOut = saved_nOut;
119222 pNew->u.btree.nEq = saved_nEq;
119223 pNew->nSkip = saved_nSkip;
119224 pNew->wsFlags = saved_wsFlags;
119225 }
119226
119227 return rc;
119228 }
119229
119230 /*
119231 ** Return True if it is possible that pIndex might be useful in
@@ -118323,11 +119400,11 @@
119400 WhereTerm *pWCEnd = pWC->a + pWC->nTerm;
119401 for(pTerm=pWC->a; rc==SQLITE_OK && pTerm<pWCEnd; pTerm++){
119402 if( pTerm->prereqRight & pNew->maskSelf ) continue;
119403 if( termCanDriveIndex(pTerm, pSrc, 0) ){
119404 pNew->u.btree.nEq = 1;
119405 pNew->nSkip = 0;
119406 pNew->u.btree.pIndex = 0;
119407 pNew->nLTerm = 1;
119408 pNew->aLTerm[0] = pTerm;
119409 /* TUNING: One-time cost for computing the automatic index is
119410 ** estimated to be X*N*log2(N) where N is the number of rows in
@@ -118364,11 +119441,11 @@
119441 testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */
119442 continue; /* Partial index inappropriate for this query */
119443 }
119444 rSize = pProbe->aiRowLogEst[0];
119445 pNew->u.btree.nEq = 0;
119446 pNew->nSkip = 0;
119447 pNew->nLTerm = 0;
119448 pNew->iSortIdx = 0;
119449 pNew->rSetup = 0;
119450 pNew->prereq = mExtra;
119451 pNew->nOut = rSize;
@@ -118914,11 +119991,11 @@
119991 for(j=0; j<nColumn; j++){
119992 u8 bOnce; /* True to run the ORDER BY search loop */
119993
119994 /* Skip over == and IS NULL terms */
119995 if( j<pLoop->u.btree.nEq
119996 && pLoop->nSkip==0
119997 && ((i = pLoop->aLTerm[j]->eOperator) & (WO_EQ|WO_ISNULL))!=0
119998 ){
119999 if( i & WO_ISNULL ){
120000 testcase( isOrderDistinct );
120001 isOrderDistinct = 0;
@@ -119368,11 +120445,11 @@
120445 }
120446 }
120447 }
120448
120449 #ifdef WHERETRACE_ENABLED /* >=2 */
120450 if( sqlite3WhereTrace & 0x02 ){
120451 sqlite3DebugPrintf("---- after round %d ----\n", iLoop);
120452 for(ii=0, pTo=aTo; ii<nTo; ii++, pTo++){
120453 sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c",
120454 wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
120455 pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?');
@@ -119487,11 +120564,11 @@
120564 if( pItem->zIndex ) return 0;
120565 iCur = pItem->iCursor;
120566 pWC = &pWInfo->sWC;
120567 pLoop = pBuilder->pNew;
120568 pLoop->wsFlags = 0;
120569 pLoop->nSkip = 0;
120570 pTerm = findTerm(pWC, iCur, -1, 0, WO_EQ, 0);
120571 if( pTerm ){
120572 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW;
120573 pLoop->aLTerm[0] = pTerm;
120574 pLoop->nLTerm = 1;
@@ -119499,11 +120576,10 @@
120576 /* TUNING: Cost of a rowid lookup is 10 */
120577 pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
120578 }else{
120579 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
120580 assert( pLoop->aLTermSpace==pLoop->aLTerm );
 
120581 if( !IsUniqueIndex(pIdx)
120582 || pIdx->pPartIdxWhere!=0
120583 || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
120584 ) continue;
120585 for(j=0; j<pIdx->nKeyCol; j++){
@@ -120008,22 +121084,30 @@
121084 ** loop below generates code for a single nested loop of the VM
121085 ** program.
121086 */
121087 notReady = ~(Bitmask)0;
121088 for(ii=0; ii<nTabList; ii++){
121089 int addrExplain;
121090 int wsFlags;
121091 pLevel = &pWInfo->a[ii];
121092 wsFlags = pLevel->pWLoop->wsFlags;
121093 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
121094 if( (pLevel->pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 ){
121095 constructAutomaticIndex(pParse, &pWInfo->sWC,
121096 &pTabList->a[pLevel->iFrom], notReady, pLevel);
121097 if( db->mallocFailed ) goto whereBeginError;
121098 }
121099 #endif
121100 addrExplain = explainOneScan(
121101 pParse, pTabList, pLevel, ii, pLevel->iFrom, wctrlFlags
121102 );
121103 pLevel->addrBody = sqlite3VdbeCurrentAddr(v);
121104 notReady = codeOneLoopStart(pWInfo, ii, notReady);
121105 pWInfo->iContinue = pLevel->addrCont;
121106 if( (wsFlags&WHERE_MULTI_OR)==0 && (wctrlFlags&WHERE_ONETABLE_ONLY)==0 ){
121107 addScanStatus(v, pTabList, pLevel, addrExplain);
121108 }
121109 }
121110
121111 /* Done. */
121112 VdbeModuleComment((v, "Begin WHERE-core"));
121113 return pWInfo;
@@ -124687,10 +125771,17 @@
125771 ** is look for a semicolon that is not part of an string or comment.
125772 */
125773 SQLITE_API int sqlite3_complete(const char *zSql){
125774 u8 state = 0; /* Current state, using numbers defined in header comment */
125775 u8 token; /* Value of the next token */
125776
125777 #ifdef SQLITE_ENABLE_API_ARMOR
125778 if( zSql==0 ){
125779 (void)SQLITE_MISUSE_BKPT;
125780 return 0;
125781 }
125782 #endif
125783
125784 #ifndef SQLITE_OMIT_TRIGGER
125785 /* A complex statement machine used to detect the end of a CREATE TRIGGER
125786 ** statement. This is the normal case.
125787 */
@@ -125285,74 +126376,106 @@
126376
126377 va_start(ap, op);
126378 switch( op ){
126379
126380 /* Mutex configuration options are only available in a threadsafe
126381 ** compile.
126382 */
126383 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-54466-46756 */
126384 case SQLITE_CONFIG_SINGLETHREAD: {
126385 /* Disable all mutexing */
126386 sqlite3GlobalConfig.bCoreMutex = 0;
126387 sqlite3GlobalConfig.bFullMutex = 0;
126388 break;
126389 }
126390 #endif
126391 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */
126392 case SQLITE_CONFIG_MULTITHREAD: {
126393 /* Disable mutexing of database connections */
126394 /* Enable mutexing of core data structures */
126395 sqlite3GlobalConfig.bCoreMutex = 1;
126396 sqlite3GlobalConfig.bFullMutex = 0;
126397 break;
126398 }
126399 #endif
126400 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */
126401 case SQLITE_CONFIG_SERIALIZED: {
126402 /* Enable all mutexing */
126403 sqlite3GlobalConfig.bCoreMutex = 1;
126404 sqlite3GlobalConfig.bFullMutex = 1;
126405 break;
126406 }
126407 #endif
126408 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */
126409 case SQLITE_CONFIG_MUTEX: {
126410 /* Specify an alternative mutex implementation */
126411 sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
126412 break;
126413 }
126414 #endif
126415 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-14450-37597 */
126416 case SQLITE_CONFIG_GETMUTEX: {
126417 /* Retrieve the current mutex implementation */
126418 *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
126419 break;
126420 }
126421 #endif
126422
 
126423 case SQLITE_CONFIG_MALLOC: {
126424 /* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a
126425 ** single argument which is a pointer to an instance of the
126426 ** sqlite3_mem_methods structure. The argument specifies alternative
126427 ** low-level memory allocation routines to be used in place of the memory
126428 ** allocation routines built into SQLite. */
126429 sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
126430 break;
126431 }
126432 case SQLITE_CONFIG_GETMALLOC: {
126433 /* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a
126434 ** single argument which is a pointer to an instance of the
126435 ** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is
126436 ** filled with the currently defined memory allocation routines. */
126437 if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
126438 *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
126439 break;
126440 }
126441 case SQLITE_CONFIG_MEMSTATUS: {
126442 /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes
126443 ** single argument of type int, interpreted as a boolean, which enables
126444 ** or disables the collection of memory allocation statistics. */
126445 sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
126446 break;
126447 }
126448 case SQLITE_CONFIG_SCRATCH: {
126449 /* EVIDENCE-OF: R-08404-60887 There are three arguments to
126450 ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from
126451 ** which the scratch allocations will be drawn, the size of each scratch
126452 ** allocation (sz), and the maximum number of scratch allocations (N). */
126453 sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
126454 sqlite3GlobalConfig.szScratch = va_arg(ap, int);
126455 sqlite3GlobalConfig.nScratch = va_arg(ap, int);
126456 break;
126457 }
126458 case SQLITE_CONFIG_PAGECACHE: {
126459 /* EVIDENCE-OF: R-31408-40510 There are three arguments to
126460 ** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory, the size
126461 ** of each page buffer (sz), and the number of pages (N). */
126462 sqlite3GlobalConfig.pPage = va_arg(ap, void*);
126463 sqlite3GlobalConfig.szPage = va_arg(ap, int);
126464 sqlite3GlobalConfig.nPage = va_arg(ap, int);
126465 break;
126466 }
126467 case SQLITE_CONFIG_PCACHE_HDRSZ: {
126468 /* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes
126469 ** a single parameter which is a pointer to an integer and writes into
126470 ** that integer the number of extra bytes per page required for each page
126471 ** in SQLITE_CONFIG_PAGECACHE. */
126472 *va_arg(ap, int*) =
126473 sqlite3HeaderSizeBtree() +
126474 sqlite3HeaderSizePcache() +
126475 sqlite3HeaderSizePcache1();
126476 break;
126477 }
126478
126479 case SQLITE_CONFIG_PCACHE: {
126480 /* no-op */
126481 break;
@@ -125362,25 +126485,37 @@
126485 rc = SQLITE_ERROR;
126486 break;
126487 }
126488
126489 case SQLITE_CONFIG_PCACHE2: {
126490 /* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a
126491 ** single argument which is a pointer to an sqlite3_pcache_methods2
126492 ** object. This object specifies the interface to a custom page cache
126493 ** implementation. */
126494 sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
126495 break;
126496 }
126497 case SQLITE_CONFIG_GETPCACHE2: {
126498 /* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a
126499 ** single argument which is a pointer to an sqlite3_pcache_methods2
126500 ** object. SQLite copies of the current page cache implementation into
126501 ** that object. */
126502 if( sqlite3GlobalConfig.pcache2.xInit==0 ){
126503 sqlite3PCacheSetDefault();
126504 }
126505 *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
126506 break;
126507 }
126508
126509 /* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only
126510 ** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or
126511 ** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */
126512 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
126513 case SQLITE_CONFIG_HEAP: {
126514 /* EVIDENCE-OF: R-19854-42126 There are three arguments to
126515 ** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the
126516 ** number of bytes in the memory buffer, and the minimum allocation size. */
126517 sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
126518 sqlite3GlobalConfig.nHeap = va_arg(ap, int);
126519 sqlite3GlobalConfig.mnReq = va_arg(ap, int);
126520
126521 if( sqlite3GlobalConfig.mnReq<1 ){
@@ -125389,21 +126524,23 @@
126524 /* cap min request size at 2^12 */
126525 sqlite3GlobalConfig.mnReq = (1<<12);
126526 }
126527
126528 if( sqlite3GlobalConfig.pHeap==0 ){
126529 /* EVIDENCE-OF: R-49920-60189 If the first pointer (the memory pointer)
126530 ** is NULL, then SQLite reverts to using its default memory allocator
126531 ** (the system malloc() implementation), undoing any prior invocation of
126532 ** SQLITE_CONFIG_MALLOC.
126533 **
126534 ** Setting sqlite3GlobalConfig.m to all zeros will cause malloc to
126535 ** revert to its default implementation when sqlite3_initialize() is run
126536 */
126537 memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
126538 }else{
126539 /* EVIDENCE-OF: R-61006-08918 If the memory pointer is not NULL then the
126540 ** alternative memory allocator is engaged to handle all of SQLites
126541 ** memory allocation needs. */
 
126542 #ifdef SQLITE_ENABLE_MEMSYS3
126543 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
126544 #endif
126545 #ifdef SQLITE_ENABLE_MEMSYS5
126546 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
@@ -125438,15 +126575,23 @@
126575 ** can be changed at start-time using the
126576 ** sqlite3_config(SQLITE_CONFIG_URI,1) or
126577 ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
126578 */
126579 case SQLITE_CONFIG_URI: {
126580 /* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single
126581 ** argument of type int. If non-zero, then URI handling is globally
126582 ** enabled. If the parameter is zero, then URI handling is globally
126583 ** disabled. */
126584 sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
126585 break;
126586 }
126587
126588 case SQLITE_CONFIG_COVERING_INDEX_SCAN: {
126589 /* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN
126590 ** option takes a single integer argument which is interpreted as a
126591 ** boolean in order to enable or disable the use of covering indices for
126592 ** full table scans in the query optimizer. */
126593 sqlite3GlobalConfig.bUseCis = va_arg(ap, int);
126594 break;
126595 }
126596
126597 #ifdef SQLITE_ENABLE_SQLLOG
@@ -125457,24 +126602,37 @@
126602 break;
126603 }
126604 #endif
126605
126606 case SQLITE_CONFIG_MMAP_SIZE: {
126607 /* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit
126608 ** integer (sqlite3_int64) values that are the default mmap size limit
126609 ** (the default setting for PRAGMA mmap_size) and the maximum allowed
126610 ** mmap size limit. */
126611 sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64);
126612 sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64);
126613 /* EVIDENCE-OF: R-53367-43190 If either argument to this option is
126614 ** negative, then that argument is changed to its compile-time default.
126615 **
126616 ** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be
126617 ** silently truncated if necessary so that it does not exceed the
126618 ** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE
126619 ** compile-time option.
126620 */
126621 if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ) mxMmap = SQLITE_MAX_MMAP_SIZE;
126622 if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE;
126623 if( szMmap>mxMmap) szMmap = mxMmap;
126624 sqlite3GlobalConfig.mxMmap = mxMmap;
126625 sqlite3GlobalConfig.szMmap = szMmap;
126626 break;
126627 }
126628
126629 #if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) /* IMP: R-04780-55815 */
126630 case SQLITE_CONFIG_WIN32_HEAPSIZE: {
126631 /* EVIDENCE-OF: R-34926-03360 SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit
126632 ** unsigned integer value that specifies the maximum size of the created
126633 ** heap. */
126634 sqlite3GlobalConfig.nHeap = va_arg(ap, int);
126635 break;
126636 }
126637 #endif
126638
@@ -125554,19 +126712,29 @@
126712
126713 /*
126714 ** Return the mutex associated with a database connection.
126715 */
126716 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
126717 #ifdef SQLITE_ENABLE_API_ARMOR
126718 if( !sqlite3SafetyCheckOk(db) ){
126719 (void)SQLITE_MISUSE_BKPT;
126720 return 0;
126721 }
126722 #endif
126723 return db->mutex;
126724 }
126725
126726 /*
126727 ** Free up as much memory as we can from the given database
126728 ** connection.
126729 */
126730 SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){
126731 int i;
126732
126733 #ifdef SQLITE_ENABLE_API_ARMOR
126734 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
126735 #endif
126736 sqlite3_mutex_enter(db->mutex);
126737 sqlite3BtreeEnterAll(db);
126738 for(i=0; i<db->nDb; i++){
126739 Btree *pBt = db->aDb[i].pBt;
126740 if( pBt ){
@@ -125652,17 +126820,24 @@
126820 int nKey1, const void *pKey1,
126821 int nKey2, const void *pKey2
126822 ){
126823 int rc, n;
126824 n = nKey1<nKey2 ? nKey1 : nKey2;
126825 /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
126826 ** strings byte by byte using the memcmp() function from the standard C
126827 ** library. */
126828 rc = memcmp(pKey1, pKey2, n);
126829 if( rc==0 ){
126830 if( padFlag
126831 && allSpaces(((char*)pKey1)+n, nKey1-n)
126832 && allSpaces(((char*)pKey2)+n, nKey2-n)
126833 ){
126834 /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
126835 ** spaces at the end of either string do not change the result. In other
126836 ** words, strings will compare equal to one another as long as they
126837 ** differ only in the number of spaces at the end.
126838 */
126839 }else{
126840 rc = nKey1 - nKey2;
126841 }
126842 }
126843 return rc;
@@ -125693,24 +126868,42 @@
126868
126869 /*
126870 ** Return the ROWID of the most recent insert
126871 */
126872 SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
126873 #ifdef SQLITE_ENABLE_API_ARMOR
126874 if( !sqlite3SafetyCheckOk(db) ){
126875 (void)SQLITE_MISUSE_BKPT;
126876 return 0;
126877 }
126878 #endif
126879 return db->lastRowid;
126880 }
126881
126882 /*
126883 ** Return the number of changes in the most recent call to sqlite3_exec().
126884 */
126885 SQLITE_API int sqlite3_changes(sqlite3 *db){
126886 #ifdef SQLITE_ENABLE_API_ARMOR
126887 if( !sqlite3SafetyCheckOk(db) ){
126888 (void)SQLITE_MISUSE_BKPT;
126889 return 0;
126890 }
126891 #endif
126892 return db->nChange;
126893 }
126894
126895 /*
126896 ** Return the number of changes since the database handle was opened.
126897 */
126898 SQLITE_API int sqlite3_total_changes(sqlite3 *db){
126899 #ifdef SQLITE_ENABLE_API_ARMOR
126900 if( !sqlite3SafetyCheckOk(db) ){
126901 (void)SQLITE_MISUSE_BKPT;
126902 return 0;
126903 }
126904 #endif
126905 return db->nTotalChange;
126906 }
126907
126908 /*
126909 ** Close all open savepoints. This function only manipulates fields of the
@@ -126255,10 +127448,13 @@
127448 SQLITE_API int sqlite3_busy_handler(
127449 sqlite3 *db,
127450 int (*xBusy)(void*,int),
127451 void *pArg
127452 ){
127453 #ifdef SQLITE_ENABLE_API_ARMOR
127454 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE;
127455 #endif
127456 sqlite3_mutex_enter(db->mutex);
127457 db->busyHandler.xFunc = xBusy;
127458 db->busyHandler.pArg = pArg;
127459 db->busyHandler.nBusy = 0;
127460 db->busyTimeout = 0;
@@ -126276,10 +127472,16 @@
127472 sqlite3 *db,
127473 int nOps,
127474 int (*xProgress)(void*),
127475 void *pArg
127476 ){
127477 #ifdef SQLITE_ENABLE_API_ARMOR
127478 if( !sqlite3SafetyCheckOk(db) ){
127479 (void)SQLITE_MISUSE_BKPT;
127480 return;
127481 }
127482 #endif
127483 sqlite3_mutex_enter(db->mutex);
127484 if( nOps>0 ){
127485 db->xProgress = xProgress;
127486 db->nProgressOps = (unsigned)nOps;
127487 db->pProgressArg = pArg;
@@ -126296,10 +127498,13 @@
127498 /*
127499 ** This routine installs a default busy handler that waits for the
127500 ** specified number of milliseconds before returning 0.
127501 */
127502 SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
127503 #ifdef SQLITE_ENABLE_API_ARMOR
127504 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127505 #endif
127506 if( ms>0 ){
127507 sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
127508 db->busyTimeout = ms;
127509 }else{
127510 sqlite3_busy_handler(db, 0, 0);
@@ -126309,10 +127514,16 @@
127514
127515 /*
127516 ** Cause any pending operation to stop at its earliest opportunity.
127517 */
127518 SQLITE_API void sqlite3_interrupt(sqlite3 *db){
127519 #ifdef SQLITE_ENABLE_API_ARMOR
127520 if( !sqlite3SafetyCheckOk(db) ){
127521 (void)SQLITE_MISUSE_BKPT;
127522 return;
127523 }
127524 #endif
127525 db->u1.isInterrupted = 1;
127526 }
127527
127528
127529 /*
@@ -126446,10 +127657,16 @@
127657 void (*xFinal)(sqlite3_context*),
127658 void (*xDestroy)(void *)
127659 ){
127660 int rc = SQLITE_ERROR;
127661 FuncDestructor *pArg = 0;
127662
127663 #ifdef SQLITE_ENABLE_API_ARMOR
127664 if( !sqlite3SafetyCheckOk(db) ){
127665 return SQLITE_MISUSE_BKPT;
127666 }
127667 #endif
127668 sqlite3_mutex_enter(db->mutex);
127669 if( xDestroy ){
127670 pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
127671 if( !pArg ){
127672 xDestroy(p);
@@ -126482,10 +127699,14 @@
127699 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
127700 void (*xFinal)(sqlite3_context*)
127701 ){
127702 int rc;
127703 char *zFunc8;
127704
127705 #ifdef SQLITE_ENABLE_API_ARMOR
127706 if( !sqlite3SafetyCheckOk(db) || zFunctionName==0 ) return SQLITE_MISUSE_BKPT;
127707 #endif
127708 sqlite3_mutex_enter(db->mutex);
127709 assert( !db->mallocFailed );
127710 zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
127711 rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
127712 sqlite3DbFree(db, zFunc8);
@@ -126513,10 +127734,16 @@
127734 const char *zName,
127735 int nArg
127736 ){
127737 int nName = sqlite3Strlen30(zName);
127738 int rc = SQLITE_OK;
127739
127740 #ifdef SQLITE_ENABLE_API_ARMOR
127741 if( !sqlite3SafetyCheckOk(db) || zName==0 || nArg<-2 ){
127742 return SQLITE_MISUSE_BKPT;
127743 }
127744 #endif
127745 sqlite3_mutex_enter(db->mutex);
127746 if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
127747 rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
127748 0, sqlite3InvalidFunction, 0, 0, 0);
127749 }
@@ -126534,10 +127761,17 @@
127761 ** trace is a pointer to a function that is invoked at the start of each
127762 ** SQL statement.
127763 */
127764 SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
127765 void *pOld;
127766
127767 #ifdef SQLITE_ENABLE_API_ARMOR
127768 if( !sqlite3SafetyCheckOk(db) ){
127769 (void)SQLITE_MISUSE_BKPT;
127770 return 0;
127771 }
127772 #endif
127773 sqlite3_mutex_enter(db->mutex);
127774 pOld = db->pTraceArg;
127775 db->xTrace = xTrace;
127776 db->pTraceArg = pArg;
127777 sqlite3_mutex_leave(db->mutex);
@@ -126555,10 +127789,17 @@
127789 sqlite3 *db,
127790 void (*xProfile)(void*,const char*,sqlite_uint64),
127791 void *pArg
127792 ){
127793 void *pOld;
127794
127795 #ifdef SQLITE_ENABLE_API_ARMOR
127796 if( !sqlite3SafetyCheckOk(db) ){
127797 (void)SQLITE_MISUSE_BKPT;
127798 return 0;
127799 }
127800 #endif
127801 sqlite3_mutex_enter(db->mutex);
127802 pOld = db->pProfileArg;
127803 db->xProfile = xProfile;
127804 db->pProfileArg = pArg;
127805 sqlite3_mutex_leave(db->mutex);
@@ -126575,10 +127816,17 @@
127816 sqlite3 *db, /* Attach the hook to this database */
127817 int (*xCallback)(void*), /* Function to invoke on each commit */
127818 void *pArg /* Argument to the function */
127819 ){
127820 void *pOld;
127821
127822 #ifdef SQLITE_ENABLE_API_ARMOR
127823 if( !sqlite3SafetyCheckOk(db) ){
127824 (void)SQLITE_MISUSE_BKPT;
127825 return 0;
127826 }
127827 #endif
127828 sqlite3_mutex_enter(db->mutex);
127829 pOld = db->pCommitArg;
127830 db->xCommitCallback = xCallback;
127831 db->pCommitArg = pArg;
127832 sqlite3_mutex_leave(db->mutex);
@@ -126593,10 +127841,17 @@
127841 sqlite3 *db, /* Attach the hook to this database */
127842 void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
127843 void *pArg /* Argument to the function */
127844 ){
127845 void *pRet;
127846
127847 #ifdef SQLITE_ENABLE_API_ARMOR
127848 if( !sqlite3SafetyCheckOk(db) ){
127849 (void)SQLITE_MISUSE_BKPT;
127850 return 0;
127851 }
127852 #endif
127853 sqlite3_mutex_enter(db->mutex);
127854 pRet = db->pUpdateArg;
127855 db->xUpdateCallback = xCallback;
127856 db->pUpdateArg = pArg;
127857 sqlite3_mutex_leave(db->mutex);
@@ -126611,10 +127866,17 @@
127866 sqlite3 *db, /* Attach the hook to this database */
127867 void (*xCallback)(void*), /* Callback function */
127868 void *pArg /* Argument to the function */
127869 ){
127870 void *pRet;
127871
127872 #ifdef SQLITE_ENABLE_API_ARMOR
127873 if( !sqlite3SafetyCheckOk(db) ){
127874 (void)SQLITE_MISUSE_BKPT;
127875 return 0;
127876 }
127877 #endif
127878 sqlite3_mutex_enter(db->mutex);
127879 pRet = db->pRollbackArg;
127880 db->xRollbackCallback = xCallback;
127881 db->pRollbackArg = pArg;
127882 sqlite3_mutex_leave(db->mutex);
@@ -126657,10 +127919,13 @@
127919 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
127920 #ifdef SQLITE_OMIT_WAL
127921 UNUSED_PARAMETER(db);
127922 UNUSED_PARAMETER(nFrame);
127923 #else
127924 #ifdef SQLITE_ENABLE_API_ARMOR
127925 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127926 #endif
127927 if( nFrame>0 ){
127928 sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
127929 }else{
127930 sqlite3_wal_hook(db, 0, 0);
127931 }
@@ -126677,10 +127942,16 @@
127942 int(*xCallback)(void *, sqlite3*, const char*, int),
127943 void *pArg /* First argument passed to xCallback() */
127944 ){
127945 #ifndef SQLITE_OMIT_WAL
127946 void *pRet;
127947 #ifdef SQLITE_ENABLE_API_ARMOR
127948 if( !sqlite3SafetyCheckOk(db) ){
127949 (void)SQLITE_MISUSE_BKPT;
127950 return 0;
127951 }
127952 #endif
127953 sqlite3_mutex_enter(db->mutex);
127954 pRet = db->pWalArg;
127955 db->xWalCallback = xCallback;
127956 db->pWalArg = pArg;
127957 sqlite3_mutex_leave(db->mutex);
@@ -126703,10 +127974,14 @@
127974 #ifdef SQLITE_OMIT_WAL
127975 return SQLITE_OK;
127976 #else
127977 int rc; /* Return code */
127978 int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
127979
127980 #ifdef SQLITE_ENABLE_API_ARMOR
127981 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
127982 #endif
127983
127984 /* Initialize the output variables to -1 in case an error occurs. */
127985 if( pnLog ) *pnLog = -1;
127986 if( pnCkpt ) *pnCkpt = -1;
127987
@@ -127100,10 +128375,16 @@
128375 ** from forming.
128376 */
128377 SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
128378 int oldLimit;
128379
128380 #ifdef SQLITE_ENABLE_API_ARMOR
128381 if( !sqlite3SafetyCheckOk(db) ){
128382 (void)SQLITE_MISUSE_BKPT;
128383 return -1;
128384 }
128385 #endif
128386
128387 /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
128388 ** there is a hard upper bound set at compile-time by a C preprocessor
128389 ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
128390 ** "_MAX_".)
@@ -127176,11 +128457,12 @@
128457 char c;
128458 int nUri = sqlite3Strlen30(zUri);
128459
128460 assert( *pzErrMsg==0 );
128461
128462 if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */
128463 || sqlite3GlobalConfig.bOpenUri) /* IMP: R-51689-46548 */
128464 && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */
128465 ){
128466 char *zOpt;
128467 int eState; /* Parser state when parsing URI */
128468 int iIn; /* Input character index */
@@ -127385,10 +128667,13 @@
128667 int rc; /* Return code */
128668 int isThreadsafe; /* True for threadsafe connections */
128669 char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */
128670 char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */
128671
128672 #ifdef SQLITE_ENABLE_API_ARMOR
128673 if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
128674 #endif
128675 *ppDb = 0;
128676 #ifndef SQLITE_OMIT_AUTOINIT
128677 rc = sqlite3_initialize();
128678 if( rc ) return rc;
128679 #endif
@@ -127499,24 +128784,28 @@
128784 #endif
128785
128786 /* Add the default collation sequence BINARY. BINARY works for both UTF-8
128787 ** and UTF-16, so add a version for each to avoid any unnecessary
128788 ** conversions. The only error that can occur here is a malloc() failure.
128789 **
128790 ** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating
128791 ** functions:
128792 */
128793 createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
128794 createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
128795 createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
128796 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
128797 createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
128798 if( db->mallocFailed ){
128799 goto opendb_out;
128800 }
128801 /* EVIDENCE-OF: R-08308-17224 The default collating function for all
128802 ** strings is BINARY.
128803 */
128804 db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
128805 assert( db->pDfltColl!=0 );
128806
 
 
 
128807 /* Parse the filename/URI argument. */
128808 db->openFlags = flags;
128809 rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
128810 if( rc!=SQLITE_OK ){
128811 if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
@@ -127674,17 +128963,19 @@
128963 ){
128964 char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
128965 sqlite3_value *pVal;
128966 int rc;
128967
128968 #ifdef SQLITE_ENABLE_API_ARMOR
128969 if( ppDb==0 ) return SQLITE_MISUSE_BKPT;
128970 #endif
128971 *ppDb = 0;
128972 #ifndef SQLITE_OMIT_AUTOINIT
128973 rc = sqlite3_initialize();
128974 if( rc ) return rc;
128975 #endif
128976 if( zFilename==0 ) zFilename = "\000\000";
128977 pVal = sqlite3ValueNew(0);
128978 sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
128979 zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
128980 if( zFilename8 ){
128981 rc = openDatabase(zFilename8, ppDb,
@@ -127710,17 +129001,11 @@
129001 const char *zName,
129002 int enc,
129003 void* pCtx,
129004 int(*xCompare)(void*,int,const void*,int,const void*)
129005 ){
129006 return sqlite3_create_collation_v2(db, zName, enc, pCtx, xCompare, 0);
 
 
 
 
 
 
129007 }
129008
129009 /*
129010 ** Register a new collation sequence with the database handle db.
129011 */
@@ -127731,10 +129016,14 @@
129016 void* pCtx,
129017 int(*xCompare)(void*,int,const void*,int,const void*),
129018 void(*xDel)(void*)
129019 ){
129020 int rc;
129021
129022 #ifdef SQLITE_ENABLE_API_ARMOR
129023 if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
129024 #endif
129025 sqlite3_mutex_enter(db->mutex);
129026 assert( !db->mallocFailed );
129027 rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
129028 rc = sqlite3ApiExit(db, rc);
129029 sqlite3_mutex_leave(db->mutex);
@@ -127752,10 +129041,14 @@
129041 void* pCtx,
129042 int(*xCompare)(void*,int,const void*,int,const void*)
129043 ){
129044 int rc = SQLITE_OK;
129045 char *zName8;
129046
129047 #ifdef SQLITE_ENABLE_API_ARMOR
129048 if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT;
129049 #endif
129050 sqlite3_mutex_enter(db->mutex);
129051 assert( !db->mallocFailed );
129052 zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
129053 if( zName8 ){
129054 rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
@@ -127774,10 +129067,13 @@
129067 SQLITE_API int sqlite3_collation_needed(
129068 sqlite3 *db,
129069 void *pCollNeededArg,
129070 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
129071 ){
129072 #ifdef SQLITE_ENABLE_API_ARMOR
129073 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129074 #endif
129075 sqlite3_mutex_enter(db->mutex);
129076 db->xCollNeeded = xCollNeeded;
129077 db->xCollNeeded16 = 0;
129078 db->pCollNeededArg = pCollNeededArg;
129079 sqlite3_mutex_leave(db->mutex);
@@ -127792,10 +129088,13 @@
129088 SQLITE_API int sqlite3_collation_needed16(
129089 sqlite3 *db,
129090 void *pCollNeededArg,
129091 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
129092 ){
129093 #ifdef SQLITE_ENABLE_API_ARMOR
129094 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129095 #endif
129096 sqlite3_mutex_enter(db->mutex);
129097 db->xCollNeeded = 0;
129098 db->xCollNeeded16 = xCollNeeded16;
129099 db->pCollNeededArg = pCollNeededArg;
129100 sqlite3_mutex_leave(db->mutex);
@@ -127818,10 +129117,16 @@
129117 ** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
129118 ** by default. Autocommit is disabled by a BEGIN statement and reenabled
129119 ** by the next COMMIT or ROLLBACK.
129120 */
129121 SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
129122 #ifdef SQLITE_ENABLE_API_ARMOR
129123 if( !sqlite3SafetyCheckOk(db) ){
129124 (void)SQLITE_MISUSE_BKPT;
129125 return 0;
129126 }
129127 #endif
129128 return db->autoCommit;
129129 }
129130
129131 /*
129132 ** The following routines are substitutes for constants SQLITE_CORRUPT,
@@ -128000,10 +129305,13 @@
129305
129306 /*
129307 ** Enable or disable the extended result codes.
129308 */
129309 SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
129310 #ifdef SQLITE_ENABLE_API_ARMOR
129311 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129312 #endif
129313 sqlite3_mutex_enter(db->mutex);
129314 db->errMask = onoff ? 0xffffffff : 0xff;
129315 sqlite3_mutex_leave(db->mutex);
129316 return SQLITE_OK;
129317 }
@@ -128013,10 +129321,13 @@
129321 */
129322 SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
129323 int rc = SQLITE_ERROR;
129324 Btree *pBtree;
129325
129326 #ifdef SQLITE_ENABLE_API_ARMOR
129327 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
129328 #endif
129329 sqlite3_mutex_enter(db->mutex);
129330 pBtree = sqlite3DbNameToBtree(db, zDbName);
129331 if( pBtree ){
129332 Pager *pPager;
129333 sqlite3_file *fd;
@@ -128355,11 +129666,11 @@
129666 ** query parameter we seek. This routine returns the value of the zParam
129667 ** parameter if it exists. If the parameter does not exist, this routine
129668 ** returns a NULL pointer.
129669 */
129670 SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
129671 if( zFilename==0 || zParam==0 ) return 0;
129672 zFilename += sqlite3Strlen30(zFilename) + 1;
129673 while( zFilename[0] ){
129674 int x = strcmp(zFilename, zParam);
129675 zFilename += sqlite3Strlen30(zFilename) + 1;
129676 if( x==0 ) return zFilename;
@@ -128411,19 +129722,31 @@
129722 /*
129723 ** Return the filename of the database associated with a database
129724 ** connection.
129725 */
129726 SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
129727 #ifdef SQLITE_ENABLE_API_ARMOR
129728 if( !sqlite3SafetyCheckOk(db) ){
129729 (void)SQLITE_MISUSE_BKPT;
129730 return 0;
129731 }
129732 #endif
129733 Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
129734 return pBt ? sqlite3BtreeGetFilename(pBt) : 0;
129735 }
129736
129737 /*
129738 ** Return 1 if database is read-only or 0 if read/write. Return -1 if
129739 ** no such database exists.
129740 */
129741 SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){
129742 #ifdef SQLITE_ENABLE_API_ARMOR
129743 if( !sqlite3SafetyCheckOk(db) ){
129744 (void)SQLITE_MISUSE_BKPT;
129745 return -1;
129746 }
129747 #endif
129748 Btree *pBt = sqlite3DbNameToBtree(db, zDbName);
129749 return pBt ? sqlite3BtreeIsReadonly(pBt) : -1;
129750 }
129751
129752 /************** End of main.c ************************************************/
129753
+353 -227
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -55,11 +55,11 @@
5555
5656
5757
/*
5858
** These no-op macros are used in front of interfaces to mark those
5959
** interfaces as either deprecated or experimental. New applications
60
-** should not use deprecated interfaces - they are support for backwards
60
+** should not use deprecated interfaces - they are supported for backwards
6161
** compatibility only. Application writers should be aware that
6262
** experimental interfaces are subject to change in point releases.
6363
**
6464
** These macros used to resolve to various kinds of compiler magic that
6565
** would generate warning messages when they were used. But that
@@ -105,13 +105,13 @@
105105
**
106106
** See also: [sqlite3_libversion()],
107107
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108108
** [sqlite_version()] and [sqlite_source_id()].
109109
*/
110
-#define SQLITE_VERSION "3.8.7.2"
111
-#define SQLITE_VERSION_NUMBER 3008007
112
-#define SQLITE_SOURCE_ID "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
110
+#define SQLITE_VERSION "3.8.8"
111
+#define SQLITE_VERSION_NUMBER 3008008
112
+#define SQLITE_SOURCE_ID "2014-11-28 13:35:03 24fa2e9832daaa5d68ee28a00c56c55f97a4da9e"
113113
114114
/*
115115
** CAPI3REF: Run-Time Library Version Numbers
116116
** KEYWORDS: sqlite3_version, sqlite3_sourceid
117117
**
@@ -1502,29 +1502,31 @@
15021502
** it is not possible to set the Serialized [threading mode] and
15031503
** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
15041504
** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
15051505
**
15061506
** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1507
-** <dd> ^(This option takes a single argument which is a pointer to an
1508
-** instance of the [sqlite3_mem_methods] structure. The argument specifies
1507
+** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
1508
+** a pointer to an instance of the [sqlite3_mem_methods] structure.
1509
+** The argument specifies
15091510
** alternative low-level memory allocation routines to be used in place of
15101511
** the memory allocation routines built into SQLite.)^ ^SQLite makes
15111512
** its own private copy of the content of the [sqlite3_mem_methods] structure
15121513
** before the [sqlite3_config()] call returns.</dd>
15131514
**
15141515
** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1515
-** <dd> ^(This option takes a single argument which is a pointer to an
1516
-** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
1516
+** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
1517
+** is a pointer to an instance of the [sqlite3_mem_methods] structure.
1518
+** The [sqlite3_mem_methods]
15171519
** structure is filled with the currently defined memory allocation routines.)^
15181520
** This option can be used to overload the default memory allocation
15191521
** routines with a wrapper that simulations memory allocation failure or
15201522
** tracks memory usage, for example. </dd>
15211523
**
15221524
** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1523
-** <dd> ^This option takes single argument of type int, interpreted as a
1524
-** boolean, which enables or disables the collection of memory allocation
1525
-** statistics. ^(When memory allocation statistics are disabled, the
1525
+** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
1526
+** interpreted as a boolean, which enables or disables the collection of
1527
+** memory allocation statistics. ^(When memory allocation statistics are disabled, the
15261528
** following SQLite interfaces become non-operational:
15271529
** <ul>
15281530
** <li> [sqlite3_memory_used()]
15291531
** <li> [sqlite3_memory_highwater()]
15301532
** <li> [sqlite3_soft_heap_limit64()]
@@ -1534,78 +1536,90 @@
15341536
** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
15351537
** allocation statistics are disabled by default.
15361538
** </dd>
15371539
**
15381540
** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1539
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
1540
-** scratch memory. There are three arguments: A pointer an 8-byte
1541
+** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
1542
+** that SQLite can use for scratch memory. ^(There are three arguments
1543
+** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
15411544
** aligned memory buffer from which the scratch allocations will be
15421545
** drawn, the size of each scratch allocation (sz),
1543
-** and the maximum number of scratch allocations (N). The sz
1544
-** argument must be a multiple of 16.
1546
+** and the maximum number of scratch allocations (N).)^
15451547
** The first argument must be a pointer to an 8-byte aligned buffer
15461548
** of at least sz*N bytes of memory.
1547
-** ^SQLite will use no more than two scratch buffers per thread. So
1548
-** N should be set to twice the expected maximum number of threads.
1549
-** ^SQLite will never require a scratch buffer that is more than 6
1550
-** times the database page size. ^If SQLite needs needs additional
1549
+** ^SQLite will not use more than one scratch buffers per thread.
1550
+** ^SQLite will never request a scratch buffer that is more than 6
1551
+** times the database page size.
1552
+** ^If SQLite needs needs additional
15511553
** scratch memory beyond what is provided by this configuration option, then
1552
-** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1554
+** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
1555
+** ^When the application provides any amount of scratch memory using
1556
+** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
1557
+** [sqlite3_malloc|heap allocations].
1558
+** This can help [Robson proof|prevent memory allocation failures] due to heap
1559
+** fragmentation in low-memory embedded systems.
1560
+** </dd>
15531561
**
15541562
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1555
-** <dd> ^This option specifies a static memory buffer that SQLite can use for
1556
-** the database page cache with the default page cache implementation.
1563
+** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer
1564
+** that SQLite can use for the database page cache with the default page
1565
+** cache implementation.
15571566
** This configuration should not be used if an application-define page
1558
-** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
1559
-** There are three arguments to this option: A pointer to 8-byte aligned
1567
+** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]
1568
+** configuration option.
1569
+** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned
15601570
** memory, the size of each page buffer (sz), and the number of pages (N).
15611571
** The sz argument should be the size of the largest database page
1562
-** (a power of two between 512 and 32768) plus a little extra for each
1563
-** page header. ^The page header size is 20 to 40 bytes depending on
1564
-** the host architecture. ^It is harmless, apart from the wasted memory,
1565
-** to make sz a little too large. The first
1566
-** argument should point to an allocation of at least sz*N bytes of memory.
1572
+** (a power of two between 512 and 32768) plus some extra bytes for each
1573
+** page header. ^The number of extra bytes needed by the page header
1574
+** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option
1575
+** to [sqlite3_config()].
1576
+** ^It is harmless, apart from the wasted memory,
1577
+** for the sz parameter to be larger than necessary. The first
1578
+** argument should pointer to an 8-byte aligned block of memory that
1579
+** is at least sz*N bytes of memory, otherwise subsequent behavior is
1580
+** undefined.
15671581
** ^SQLite will use the memory provided by the first argument to satisfy its
15681582
** memory needs for the first N pages that it adds to cache. ^If additional
15691583
** page cache memory is needed beyond what is provided by this option, then
1570
-** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1571
-** The pointer in the first argument must
1572
-** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1573
-** will be undefined.</dd>
1584
+** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd>
15741585
**
15751586
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1576
-** <dd> ^This option specifies a static memory buffer that SQLite will use
1577
-** for all of its dynamic memory allocation needs beyond those provided
1578
-** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1579
-** There are three arguments: An 8-byte aligned pointer to the memory,
1587
+** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
1588
+** that SQLite will use for all of its dynamic memory allocation needs
1589
+** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1590
+** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
1591
+** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
1592
+** [SQLITE_ERROR] if invoked otherwise.
1593
+** ^There are three arguments to SQLITE_CONFIG_HEAP:
1594
+** An 8-byte aligned pointer to the memory,
15801595
** the number of bytes in the memory buffer, and the minimum allocation size.
15811596
** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
15821597
** to using its default memory allocator (the system malloc() implementation),
15831598
** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1584
-** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1585
-** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1599
+** memory pointer is not NULL then the alternative memory
15861600
** allocator is engaged to handle all of SQLites memory allocation needs.
15871601
** The first pointer (the memory pointer) must be aligned to an 8-byte
15881602
** boundary or subsequent behavior of SQLite will be undefined.
15891603
** The minimum allocation size is capped at 2**12. Reasonable values
15901604
** for the minimum allocation size are 2**5 through 2**8.</dd>
15911605
**
15921606
** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1593
-** <dd> ^(This option takes a single argument which is a pointer to an
1594
-** instance of the [sqlite3_mutex_methods] structure. The argument specifies
1595
-** alternative low-level mutex routines to be used in place
1607
+** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
1608
+** pointer to an instance of the [sqlite3_mutex_methods] structure.
1609
+** The argument specifies alternative low-level mutex routines to be used in place
15961610
** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
15971611
** content of the [sqlite3_mutex_methods] structure before the call to
15981612
** [sqlite3_config()] returns. ^If SQLite is compiled with
15991613
** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
16001614
** the entire mutexing subsystem is omitted from the build and hence calls to
16011615
** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
16021616
** return [SQLITE_ERROR].</dd>
16031617
**
16041618
** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1605
-** <dd> ^(This option takes a single argument which is a pointer to an
1606
-** instance of the [sqlite3_mutex_methods] structure. The
1619
+** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
1620
+** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The
16071621
** [sqlite3_mutex_methods]
16081622
** structure is filled with the currently defined mutex routines.)^
16091623
** This option can be used to overload the default mutex allocation
16101624
** routines with a wrapper used to track mutex usage for performance
16111625
** profiling or testing, for example. ^If SQLite is compiled with
@@ -1613,28 +1627,28 @@
16131627
** the entire mutexing subsystem is omitted from the build and hence calls to
16141628
** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
16151629
** return [SQLITE_ERROR].</dd>
16161630
**
16171631
** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1618
-** <dd> ^(This option takes two arguments that determine the default
1619
-** memory allocation for the lookaside memory allocator on each
1620
-** [database connection]. The first argument is the
1632
+** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
1633
+** the default size of lookaside memory on each [database connection].
1634
+** The first argument is the
16211635
** size of each lookaside buffer slot and the second is the number of
1622
-** slots allocated to each database connection.)^ ^(This option sets the
1623
-** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1624
-** verb to [sqlite3_db_config()] can be used to change the lookaside
1636
+** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE
1637
+** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1638
+** option to [sqlite3_db_config()] can be used to change the lookaside
16251639
** configuration on individual connections.)^ </dd>
16261640
**
16271641
** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1628
-** <dd> ^(This option takes a single argument which is a pointer to
1629
-** an [sqlite3_pcache_methods2] object. This object specifies the interface
1630
-** to a custom page cache implementation.)^ ^SQLite makes a copy of the
1631
-** object and uses it for page cache memory allocations.</dd>
1642
+** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
1643
+** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
1644
+** the interface to a custom page cache implementation.)^
1645
+** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
16321646
**
16331647
** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1634
-** <dd> ^(This option takes a single argument which is a pointer to an
1635
-** [sqlite3_pcache_methods2] object. SQLite copies of the current
1648
+** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
1649
+** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of the current
16361650
** page cache implementation into that object.)^ </dd>
16371651
**
16381652
** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
16391653
** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
16401654
** global [error log].
@@ -1654,26 +1668,27 @@
16541668
** supplied by the application must not invoke any SQLite interface.
16551669
** In a multi-threaded application, the application-defined logger
16561670
** function must be threadsafe. </dd>
16571671
**
16581672
** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1659
-** <dd>^(This option takes a single argument of type int. If non-zero, then
1660
-** URI handling is globally enabled. If the parameter is zero, then URI handling
1661
-** is globally disabled.)^ ^If URI handling is globally enabled, all filenames
1662
-** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1673
+** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
1674
+** If non-zero, then URI handling is globally enabled. If the parameter is zero,
1675
+** then URI handling is globally disabled.)^ ^If URI handling is globally enabled,
1676
+** all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
16631677
** specified as part of [ATTACH] commands are interpreted as URIs, regardless
16641678
** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
16651679
** connection is opened. ^If it is globally disabled, filenames are
16661680
** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
16671681
** database connection is opened. ^(By default, URI handling is globally
16681682
** disabled. The default value may be changed by compiling with the
16691683
** [SQLITE_USE_URI] symbol defined.)^
16701684
**
16711685
** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1672
-** <dd>^This option takes a single integer argument which is interpreted as
1673
-** a boolean in order to enable or disable the use of covering indices for
1674
-** full table scans in the query optimizer. ^The default setting is determined
1686
+** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
1687
+** argument which is interpreted as a boolean in order to enable or disable
1688
+** the use of covering indices for full table scans in the query optimizer.
1689
+** ^The default setting is determined
16751690
** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
16761691
** if that compile-time option is omitted.
16771692
** The ability to disable the use of covering indices for full table scans
16781693
** is because some incorrectly coded legacy applications might malfunction
16791694
** when the optimization is enabled. Providing the ability to
@@ -1709,23 +1724,32 @@
17091724
** that are the default mmap size limit (the default setting for
17101725
** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
17111726
** ^The default setting can be overridden by each database connection using
17121727
** either the [PRAGMA mmap_size] command, or by using the
17131728
** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1714
-** cannot be changed at run-time. Nor may the maximum allowed mmap size
1715
-** exceed the compile-time maximum mmap size set by the
1729
+** will be silently truncated if necessary so that it does not exceed the
1730
+** compile-time maximum mmap size set by the
17161731
** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
17171732
** ^If either argument to this option is negative, then that argument is
17181733
** changed to its compile-time default.
17191734
**
17201735
** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
17211736
** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1722
-** <dd>^This option is only available if SQLite is compiled for Windows
1723
-** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1724
-** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1737
+** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
1738
+** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1739
+** ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
17251740
** that specifies the maximum size of the created heap.
17261741
** </dl>
1742
+**
1743
+** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
1744
+** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
1745
+** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
1746
+** is a pointer to an integer and writes into that integer the number of extra
1747
+** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. The amount of
1748
+** extra space required can change depending on the compiler,
1749
+** target platform, and SQLite version.
1750
+** </dl>
17271751
*/
17281752
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
17291753
#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
17301754
#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
17311755
#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1746,10 +1770,11 @@
17461770
#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
17471771
#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
17481772
#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
17491773
#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
17501774
#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
1775
+#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
17511776
17521777
/*
17531778
** CAPI3REF: Database Connection Configuration Options
17541779
**
17551780
** These constants are the available integer configuration options that
@@ -1873,51 +1898,49 @@
18731898
SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
18741899
18751900
/*
18761901
** CAPI3REF: Count The Number Of Rows Modified
18771902
**
1878
-** ^This function returns the number of database rows that were changed
1879
-** or inserted or deleted by the most recently completed SQL statement
1880
-** on the [database connection] specified by the first parameter.
1881
-** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
1882
-** or [DELETE] statement are counted. Auxiliary changes caused by
1883
-** triggers or [foreign key actions] are not counted.)^ Use the
1884
-** [sqlite3_total_changes()] function to find the total number of changes
1885
-** including changes caused by triggers and foreign key actions.
1886
-**
1887
-** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
1888
-** are not counted. Only real table changes are counted.
1889
-**
1890
-** ^(A "row change" is a change to a single row of a single table
1891
-** caused by an INSERT, DELETE, or UPDATE statement. Rows that
1892
-** are changed as side effects of [REPLACE] constraint resolution,
1893
-** rollback, ABORT processing, [DROP TABLE], or by any other
1894
-** mechanisms do not count as direct row changes.)^
1895
-**
1896
-** A "trigger context" is a scope of execution that begins and
1897
-** ends with the script of a [CREATE TRIGGER | trigger].
1898
-** Most SQL statements are
1899
-** evaluated outside of any trigger. This is the "top level"
1900
-** trigger context. If a trigger fires from the top level, a
1901
-** new trigger context is entered for the duration of that one
1902
-** trigger. Subtriggers create subcontexts for their duration.
1903
-**
1904
-** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
1905
-** not create a new trigger context.
1906
-**
1907
-** ^This function returns the number of direct row changes in the
1908
-** most recent INSERT, UPDATE, or DELETE statement within the same
1909
-** trigger context.
1910
-**
1911
-** ^Thus, when called from the top level, this function returns the
1912
-** number of changes in the most recent INSERT, UPDATE, or DELETE
1913
-** that also occurred at the top level. ^(Within the body of a trigger,
1914
-** the sqlite3_changes() interface can be called to find the number of
1915
-** changes in the most recently completed INSERT, UPDATE, or DELETE
1916
-** statement within the body of the same trigger.
1917
-** However, the number returned does not include changes
1918
-** caused by subtriggers since those have their own context.)^
1903
+** ^This function returns the number of rows modified, inserted or
1904
+** deleted by the most recently completed INSERT, UPDATE or DELETE
1905
+** statement on the database connection specified by the only parameter.
1906
+** ^Executing any other type of SQL statement does not modify the value
1907
+** returned by this function.
1908
+**
1909
+** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
1910
+** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
1911
+** [foreign key actions] or [REPLACE] constraint resolution are not counted.
1912
+**
1913
+** Changes to a view that are intercepted by
1914
+** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
1915
+** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
1916
+** DELETE statement run on a view is always zero. Only changes made to real
1917
+** tables are counted.
1918
+**
1919
+** Things are more complicated if the sqlite3_changes() function is
1920
+** executed while a trigger program is running. This may happen if the
1921
+** program uses the [changes() SQL function], or if some other callback
1922
+** function invokes sqlite3_changes() directly. Essentially:
1923
+**
1924
+** <ul>
1925
+** <li> ^(Before entering a trigger program the value returned by
1926
+** sqlite3_changes() function is saved. After the trigger program
1927
+** has finished, the original value is restored.)^
1928
+**
1929
+** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
1930
+** statement sets the value returned by sqlite3_changes()
1931
+** upon completion as normal. Of course, this value will not include
1932
+** any changes performed by sub-triggers, as the sqlite3_changes()
1933
+** value will be saved and restored after each sub-trigger has run.)^
1934
+** </ul>
1935
+**
1936
+** ^This means that if the changes() SQL function (or similar) is used
1937
+** by the first INSERT, UPDATE or DELETE statement within a trigger, it
1938
+** returns the value as set when the calling statement began executing.
1939
+** ^If it is used by the second or subsequent such statement within a trigger
1940
+** program, the value returned reflects the number of rows modified by the
1941
+** previous INSERT, UPDATE or DELETE statement within the same trigger.
19191942
**
19201943
** See also the [sqlite3_total_changes()] interface, the
19211944
** [count_changes pragma], and the [changes() SQL function].
19221945
**
19231946
** If a separate thread makes changes on the same database connection
@@ -1927,24 +1950,21 @@
19271950
SQLITE_API int sqlite3_changes(sqlite3*);
19281951
19291952
/*
19301953
** CAPI3REF: Total Number Of Rows Modified
19311954
**
1932
-** ^This function returns the number of row changes caused by [INSERT],
1933
-** [UPDATE] or [DELETE] statements since the [database connection] was opened.
1934
-** ^(The count returned by sqlite3_total_changes() includes all changes
1935
-** from all [CREATE TRIGGER | trigger] contexts and changes made by
1936
-** [foreign key actions]. However,
1937
-** the count does not include changes used to implement [REPLACE] constraints,
1938
-** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
1939
-** count does not include rows of views that fire an [INSTEAD OF trigger],
1940
-** though if the INSTEAD OF trigger makes changes of its own, those changes
1941
-** are counted.)^
1942
-** ^The sqlite3_total_changes() function counts the changes as soon as
1943
-** the statement that makes them is completed (when the statement handle
1944
-** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
1945
-**
1955
+** ^This function returns the total number of rows inserted, modified or
1956
+** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
1957
+** since the database connection was opened, including those executed as
1958
+** part of trigger programs. ^Executing any other type of SQL statement
1959
+** does not affect the value returned by sqlite3_total_changes().
1960
+**
1961
+** ^Changes made as part of [foreign key actions] are included in the
1962
+** count, but those made as part of REPLACE constraint resolution are
1963
+** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
1964
+** are not counted.
1965
+**
19461966
** See also the [sqlite3_changes()] interface, the
19471967
** [count_changes pragma], and the [total_changes() SQL function].
19481968
**
19491969
** If a separate thread makes changes on the same database connection
19501970
** while [sqlite3_total_changes()] is running then the value
@@ -2418,17 +2438,18 @@
24182438
** already uses the largest possible [ROWID]. The PRNG is also used for
24192439
** the build-in random() and randomblob() SQL functions. This interface allows
24202440
** applications to access the same PRNG for other purposes.
24212441
**
24222442
** ^A call to this routine stores N bytes of randomness into buffer P.
2423
-** ^If N is less than one, then P can be a NULL pointer.
2443
+** ^The P parameter can be a NULL pointer.
24242444
**
24252445
** ^If this routine has not been previously called or if the previous
2426
-** call had N less than one, then the PRNG is seeded using randomness
2427
-** obtained from the xRandomness method of the default [sqlite3_vfs] object.
2428
-** ^If the previous call to this routine had an N of 1 or more then
2429
-** the pseudo-randomness is generated
2446
+** call had N less than one or a NULL pointer for P, then the PRNG is
2447
+** seeded using randomness obtained from the xRandomness method of
2448
+** the default [sqlite3_vfs] object.
2449
+** ^If the previous call to this routine had an N of 1 or more and a
2450
+** non-NULL P then the pseudo-randomness is generated
24302451
** internally and without recourse to the [sqlite3_vfs] xRandomness
24312452
** method.
24322453
*/
24332454
SQLITE_API void sqlite3_randomness(int N, void *P);
24342455
@@ -4146,13 +4167,13 @@
41464167
** CAPI3REF: Text Encodings
41474168
**
41484169
** These constant define integer codes that represent the various
41494170
** text encodings supported by SQLite.
41504171
*/
4151
-#define SQLITE_UTF8 1
4152
-#define SQLITE_UTF16LE 2
4153
-#define SQLITE_UTF16BE 3
4172
+#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
4173
+#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
4174
+#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
41544175
#define SQLITE_UTF16 4 /* Use native byte order */
41554176
#define SQLITE_ANY 5 /* Deprecated */
41564177
#define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
41574178
41584179
/*
@@ -5638,31 +5659,47 @@
56385659
** in other words, the same BLOB that would be selected by:
56395660
**
56405661
** <pre>
56415662
** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
56425663
** </pre>)^
5664
+**
5665
+** ^(Parameter zDb is not the filename that contains the database, but
5666
+** rather the symbolic name of the database. For attached databases, this is
5667
+** the name that appears after the AS keyword in the [ATTACH] statement.
5668
+** For the main database file, the database name is "main". For TEMP
5669
+** tables, the database name is "temp".)^
56435670
**
56445671
** ^If the flags parameter is non-zero, then the BLOB is opened for read
5645
-** and write access. ^If it is zero, the BLOB is opened for read access.
5646
-** ^It is not possible to open a column that is part of an index or primary
5647
-** key for writing. ^If [foreign key constraints] are enabled, it is
5648
-** not possible to open a column that is part of a [child key] for writing.
5649
-**
5650
-** ^Note that the database name is not the filename that contains
5651
-** the database but rather the symbolic name of the database that
5652
-** appears after the AS keyword when the database is connected using [ATTACH].
5653
-** ^For the main database file, the database name is "main".
5654
-** ^For TEMP tables, the database name is "temp".
5655
-**
5656
-** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5657
-** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5658
-** to be a null pointer.)^
5659
-** ^This function sets the [database connection] error code and message
5660
-** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5661
-** functions. ^Note that the *ppBlob variable is always initialized in a
5662
-** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5663
-** regardless of the success or failure of this routine.
5672
+** and write access. ^If the flags parameter is zero, the BLOB is opened for
5673
+** read-only access.
5674
+**
5675
+** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored
5676
+** in *ppBlob. Otherwise an [error code] is returned and, unless the error
5677
+** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
5678
+** the API is not misused, it is always safe to call [sqlite3_blob_close()]
5679
+** on *ppBlob after this function it returns.
5680
+**
5681
+** This function fails with SQLITE_ERROR if any of the following are true:
5682
+** <ul>
5683
+** <li> ^(Database zDb does not exist)^,
5684
+** <li> ^(Table zTable does not exist within database zDb)^,
5685
+** <li> ^(Table zTable is a WITHOUT ROWID table)^,
5686
+** <li> ^(Column zColumn does not exist)^,
5687
+** <li> ^(Row iRow is not present in the table)^,
5688
+** <li> ^(The specified column of row iRow contains a value that is not
5689
+** a TEXT or BLOB value)^,
5690
+** <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE
5691
+** constraint and the blob is being opened for read/write access)^,
5692
+** <li> ^([foreign key constraints | Foreign key constraints] are enabled,
5693
+** column zColumn is part of a [child key] definition and the blob is
5694
+** being opened for read/write access)^.
5695
+** </ul>
5696
+**
5697
+** ^Unless it returns SQLITE_MISUSE, this function sets the
5698
+** [database connection] error code and message accessible via
5699
+** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5700
+**
56645701
**
56655702
** ^(If the row that a BLOB handle points to is modified by an
56665703
** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
56675704
** then the BLOB handle is marked as "expired".
56685705
** This is true if any column of the row is changed, even a column
@@ -5676,17 +5713,13 @@
56765713
** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
56775714
** the opened blob. ^The size of a blob may not be changed by this
56785715
** interface. Use the [UPDATE] SQL command to change the size of a
56795716
** blob.
56805717
**
5681
-** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID]
5682
-** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables.
5683
-**
56845718
** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5685
-** and the built-in [zeroblob] SQL function can be used, if desired,
5686
-** to create an empty, zero-filled blob in which to read or write using
5687
-** this interface.
5719
+** and the built-in [zeroblob] SQL function may be used to create a
5720
+** zero-filled blob to read or write using the incremental-blob interface.
56885721
**
56895722
** To avoid a resource leak, every open [BLOB handle] should eventually
56905723
** be released by a call to [sqlite3_blob_close()].
56915724
*/
56925725
SQLITE_API int sqlite3_blob_open(
@@ -5724,28 +5757,26 @@
57245757
SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
57255758
57265759
/*
57275760
** CAPI3REF: Close A BLOB Handle
57285761
**
5729
-** ^Closes an open [BLOB handle].
5730
-**
5731
-** ^Closing a BLOB shall cause the current transaction to commit
5732
-** if there are no other BLOBs, no pending prepared statements, and the
5733
-** database connection is in [autocommit mode].
5734
-** ^If any writes were made to the BLOB, they might be held in cache
5735
-** until the close operation if they will fit.
5736
-**
5737
-** ^(Closing the BLOB often forces the changes
5738
-** out to disk and so if any I/O errors occur, they will likely occur
5739
-** at the time when the BLOB is closed. Any errors that occur during
5740
-** closing are reported as a non-zero return value.)^
5741
-**
5742
-** ^(The BLOB is closed unconditionally. Even if this routine returns
5743
-** an error code, the BLOB is still closed.)^
5744
-**
5745
-** ^Calling this routine with a null pointer (such as would be returned
5746
-** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5762
+** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed
5763
+** unconditionally. Even if this routine returns an error code, the
5764
+** handle is still closed.)^
5765
+**
5766
+** ^If the blob handle being closed was opened for read-write access, and if
5767
+** the database is in auto-commit mode and there are no other open read-write
5768
+** blob handles or active write statements, the current transaction is
5769
+** committed. ^If an error occurs while committing the transaction, an error
5770
+** code is returned and the transaction rolled back.
5771
+**
5772
+** Calling this function with an argument that is not a NULL pointer or an
5773
+** open blob handle results in undefined behaviour. ^Calling this routine
5774
+** with a null pointer (such as would be returned by a failed call to
5775
+** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
5776
+** is passed a valid open blob handle, the values returned by the
5777
+** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
57475778
*/
57485779
SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
57495780
57505781
/*
57515782
** CAPI3REF: Return The Size Of An Open BLOB
@@ -5791,36 +5822,39 @@
57915822
SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
57925823
57935824
/*
57945825
** CAPI3REF: Write Data Into A BLOB Incrementally
57955826
**
5796
-** ^This function is used to write data into an open [BLOB handle] from a
5797
-** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5798
-** into the open BLOB, starting at offset iOffset.
5827
+** ^(This function is used to write data into an open [BLOB handle] from a
5828
+** caller-supplied buffer. N bytes of data are copied from the buffer Z
5829
+** into the open BLOB, starting at offset iOffset.)^
5830
+**
5831
+** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5832
+** Otherwise, an [error code] or an [extended error code] is returned.)^
5833
+** ^Unless SQLITE_MISUSE is returned, this function sets the
5834
+** [database connection] error code and message accessible via
5835
+** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
57995836
**
58005837
** ^If the [BLOB handle] passed as the first argument was not opened for
58015838
** writing (the flags parameter to [sqlite3_blob_open()] was zero),
58025839
** this function returns [SQLITE_READONLY].
58035840
**
5804
-** ^This function may only modify the contents of the BLOB; it is
5841
+** This function may only modify the contents of the BLOB; it is
58055842
** not possible to increase the size of a BLOB using this API.
58065843
** ^If offset iOffset is less than N bytes from the end of the BLOB,
5807
-** [SQLITE_ERROR] is returned and no data is written. ^If N is
5808
-** less than zero [SQLITE_ERROR] is returned and no data is written.
5809
-** The size of the BLOB (and hence the maximum value of N+iOffset)
5810
-** can be determined using the [sqlite3_blob_bytes()] interface.
5844
+** [SQLITE_ERROR] is returned and no data is written. The size of the
5845
+** BLOB (and hence the maximum value of N+iOffset) can be determined
5846
+** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less
5847
+** than zero [SQLITE_ERROR] is returned and no data is written.
58115848
**
58125849
** ^An attempt to write to an expired [BLOB handle] fails with an
58135850
** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
58145851
** before the [BLOB handle] expired are not rolled back by the
58155852
** expiration of the handle, though of course those changes might
58165853
** have been overwritten by the statement that expired the BLOB handle
58175854
** or by other independent statements.
58185855
**
5819
-** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5820
-** Otherwise, an [error code] or an [extended error code] is returned.)^
5821
-**
58225856
** This routine only works on a [BLOB handle] which has been created
58235857
** by a prior successful call to [sqlite3_blob_open()] and which has not
58245858
** been closed by [sqlite3_blob_close()]. Passing any other pointer in
58255859
** to this routine results in undefined and probably undesirable behavior.
58265860
**
@@ -5869,38 +5903,38 @@
58695903
** use by SQLite, code that links against SQLite is
58705904
** permitted to use any of these routines.
58715905
**
58725906
** The SQLite source code contains multiple implementations
58735907
** of these mutex routines. An appropriate implementation
5874
-** is selected automatically at compile-time. ^(The following
5908
+** is selected automatically at compile-time. The following
58755909
** implementations are available in the SQLite core:
58765910
**
58775911
** <ul>
58785912
** <li> SQLITE_MUTEX_PTHREADS
58795913
** <li> SQLITE_MUTEX_W32
58805914
** <li> SQLITE_MUTEX_NOOP
5881
-** </ul>)^
5915
+** </ul>
58825916
**
5883
-** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
5917
+** The SQLITE_MUTEX_NOOP implementation is a set of routines
58845918
** that does no real locking and is appropriate for use in
5885
-** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and
5919
+** a single-threaded application. The SQLITE_MUTEX_PTHREADS and
58865920
** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
58875921
** and Windows.
58885922
**
5889
-** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
5923
+** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
58905924
** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
58915925
** implementation is included with the library. In this case the
58925926
** application must supply a custom mutex implementation using the
58935927
** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
58945928
** before calling sqlite3_initialize() or any other public sqlite3_
5895
-** function that calls sqlite3_initialize().)^
5929
+** function that calls sqlite3_initialize().
58965930
**
58975931
** ^The sqlite3_mutex_alloc() routine allocates a new
5898
-** mutex and returns a pointer to it. ^If it returns NULL
5899
-** that means that a mutex could not be allocated. ^SQLite
5900
-** will unwind its stack and return an error. ^(The argument
5901
-** to sqlite3_mutex_alloc() is one of these integer constants:
5932
+** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
5933
+** routine returns NULL if it is unable to allocate the requested
5934
+** mutex. The argument to sqlite3_mutex_alloc() must one of these
5935
+** integer constants:
59025936
**
59035937
** <ul>
59045938
** <li> SQLITE_MUTEX_FAST
59055939
** <li> SQLITE_MUTEX_RECURSIVE
59065940
** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -5909,68 +5943,64 @@
59095943
** <li> SQLITE_MUTEX_STATIC_PRNG
59105944
** <li> SQLITE_MUTEX_STATIC_LRU
59115945
** <li> SQLITE_MUTEX_STATIC_PMEM
59125946
** <li> SQLITE_MUTEX_STATIC_APP1
59135947
** <li> SQLITE_MUTEX_STATIC_APP2
5914
-** </ul>)^
5948
+** <li> SQLITE_MUTEX_STATIC_APP3
5949
+** </ul>
59155950
**
59165951
** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
59175952
** cause sqlite3_mutex_alloc() to create
59185953
** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
59195954
** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
59205955
** The mutex implementation does not need to make a distinction
59215956
** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
5922
-** not want to. ^SQLite will only request a recursive mutex in
5923
-** cases where it really needs one. ^If a faster non-recursive mutex
5957
+** not want to. SQLite will only request a recursive mutex in
5958
+** cases where it really needs one. If a faster non-recursive mutex
59245959
** implementation is available on the host platform, the mutex subsystem
59255960
** might return such a mutex in response to SQLITE_MUTEX_FAST.
59265961
**
59275962
** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
59285963
** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
5929
-** a pointer to a static preexisting mutex. ^Six static mutexes are
5964
+** a pointer to a static preexisting mutex. ^Nine static mutexes are
59305965
** used by the current version of SQLite. Future versions of SQLite
59315966
** may add additional static mutexes. Static mutexes are for internal
59325967
** use by SQLite only. Applications that use SQLite mutexes should
59335968
** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
59345969
** SQLITE_MUTEX_RECURSIVE.
59355970
**
59365971
** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
59375972
** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
5938
-** returns a different mutex on every call. ^But for the static
5973
+** returns a different mutex on every call. ^For the static
59395974
** mutex types, the same mutex is returned on every call that has
59405975
** the same type number.
59415976
**
59425977
** ^The sqlite3_mutex_free() routine deallocates a previously
5943
-** allocated dynamic mutex. ^SQLite is careful to deallocate every
5944
-** dynamic mutex that it allocates. The dynamic mutexes must not be in
5945
-** use when they are deallocated. Attempting to deallocate a static
5946
-** mutex results in undefined behavior. ^SQLite never deallocates
5947
-** a static mutex.
5978
+** allocated dynamic mutex. Attempting to deallocate a static
5979
+** mutex results in undefined behavior.
59485980
**
59495981
** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
59505982
** to enter a mutex. ^If another thread is already within the mutex,
59515983
** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
59525984
** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
59535985
** upon successful entry. ^(Mutexes created using
59545986
** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
5955
-** In such cases the,
5987
+** In such cases, the
59565988
** mutex must be exited an equal number of times before another thread
5957
-** can enter.)^ ^(If the same thread tries to enter any other
5958
-** kind of mutex more than once, the behavior is undefined.
5959
-** SQLite will never exhibit
5960
-** such behavior in its own use of mutexes.)^
5989
+** can enter.)^ If the same thread tries to enter any mutex other
5990
+** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.
59615991
**
59625992
** ^(Some systems (for example, Windows 95) do not support the operation
59635993
** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
5964
-** will always return SQLITE_BUSY. The SQLite core only ever uses
5965
-** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
5994
+** will always return SQLITE_BUSY. The SQLite core only ever uses
5995
+** sqlite3_mutex_try() as an optimization so this is acceptable
5996
+** behavior.)^
59665997
**
59675998
** ^The sqlite3_mutex_leave() routine exits a mutex that was
5968
-** previously entered by the same thread. ^(The behavior
5999
+** previously entered by the same thread. The behavior
59696000
** is undefined if the mutex is not currently entered by the
5970
-** calling thread or is not currently allocated. SQLite will
5971
-** never do either.)^
6001
+** calling thread or is not currently allocated.
59726002
**
59736003
** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
59746004
** sqlite3_mutex_leave() is a NULL pointer, then all three routines
59756005
** behave as no-ops.
59766006
**
@@ -5987,13 +6017,13 @@
59876017
**
59886018
** An instance of this structure defines the low-level routines
59896019
** used to allocate and use mutexes.
59906020
**
59916021
** Usually, the default mutex implementations provided by SQLite are
5992
-** sufficient, however the user has the option of substituting a custom
6022
+** sufficient, however the application has the option of substituting a custom
59936023
** implementation for specialized deployments or systems for which SQLite
5994
-** does not provide a suitable implementation. In this case, the user
6024
+** does not provide a suitable implementation. In this case, the application
59956025
** creates and populates an instance of this structure to pass
59966026
** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
59976027
** Additionally, an instance of this structure can be used as an
59986028
** output variable when querying the system for the current mutex
59996029
** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6030,17 +6060,17 @@
60306060
** by this structure are not required to handle this case, the results
60316061
** of passing a NULL pointer instead of a valid mutex handle are undefined
60326062
** (i.e. it is acceptable to provide an implementation that segfaults if
60336063
** it is passed a NULL pointer).
60346064
**
6035
-** The xMutexInit() method must be threadsafe. ^It must be harmless to
6065
+** The xMutexInit() method must be threadsafe. It must be harmless to
60366066
** invoke xMutexInit() multiple times within the same process and without
60376067
** intervening calls to xMutexEnd(). Second and subsequent calls to
60386068
** xMutexInit() must be no-ops.
60396069
**
6040
-** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6041
-** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory
6070
+** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6071
+** and its associates). Similarly, xMutexAlloc() must not use SQLite memory
60426072
** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
60436073
** memory allocation for a fast or recursive mutex.
60446074
**
60456075
** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
60466076
** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6062,33 +6092,33 @@
60626092
60636093
/*
60646094
** CAPI3REF: Mutex Verification Routines
60656095
**
60666096
** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6067
-** are intended for use inside assert() statements. ^The SQLite core
6097
+** are intended for use inside assert() statements. The SQLite core
60686098
** never uses these routines except inside an assert() and applications
6069
-** are advised to follow the lead of the core. ^The SQLite core only
6099
+** are advised to follow the lead of the core. The SQLite core only
60706100
** provides implementations for these routines when it is compiled
6071
-** with the SQLITE_DEBUG flag. ^External mutex implementations
6101
+** with the SQLITE_DEBUG flag. External mutex implementations
60726102
** are only required to provide these routines if SQLITE_DEBUG is
60736103
** defined and if NDEBUG is not defined.
60746104
**
6075
-** ^These routines should return true if the mutex in their argument
6105
+** These routines should return true if the mutex in their argument
60766106
** is held or not held, respectively, by the calling thread.
60776107
**
6078
-** ^The implementation is not required to provide versions of these
6108
+** The implementation is not required to provide versions of these
60796109
** routines that actually work. If the implementation does not provide working
60806110
** versions of these routines, it should at least provide stubs that always
60816111
** return true so that one does not get spurious assertion failures.
60826112
**
6083
-** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6113
+** If the argument to sqlite3_mutex_held() is a NULL pointer then
60846114
** the routine should return 1. This seems counter-intuitive since
60856115
** clearly the mutex cannot be held if it does not exist. But
60866116
** the reason the mutex does not exist is because the build is not
60876117
** using mutexes. And we do not want the assert() containing the
60886118
** call to sqlite3_mutex_held() to fail, so a non-zero return is
6089
-** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6119
+** the appropriate thing to do. The sqlite3_mutex_notheld()
60906120
** interface should also return 1 when given a NULL pointer.
60916121
*/
60926122
#ifndef NDEBUG
60936123
SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
60946124
SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6816,10 +6846,14 @@
68166846
** sqlite3_backup_init(D,N,S,M) identify the [database connection]
68176847
** and database name of the source database, respectively.
68186848
** ^The source and destination [database connections] (parameters S and D)
68196849
** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
68206850
** an error.
6851
+**
6852
+** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if
6853
+** there is already a read or read-write transaction open on the
6854
+** destination database.
68216855
**
68226856
** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
68236857
** returned and an error code and error message are stored in the
68246858
** destination [database connection] D.
68256859
** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7409,10 +7443,102 @@
74097443
/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
74107444
#define SQLITE_FAIL 3
74117445
/* #define SQLITE_ABORT 4 // Also an error code */
74127446
#define SQLITE_REPLACE 5
74137447
7448
+/*
7449
+** CAPI3REF: Prepared Statement Scan Status Opcodes
7450
+** KEYWORDS: {scanstatus options}
7451
+**
7452
+** The following constants can be used for the T parameter to the
7453
+** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a
7454
+** different metric for sqlite3_stmt_scanstatus() to return.
7455
+**
7456
+** <dl>
7457
+** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
7458
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7459
+** total number of times that the X-th loop has run.</dd>
7460
+**
7461
+** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
7462
+** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7463
+** total number of rows examined by all iterations of the X-th loop.</dd>
7464
+**
7465
+** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
7466
+** <dd>^The "double" variable pointed to by the T parameter will be set to the
7467
+** query planner's estimate for the average number of rows output from each
7468
+** iteration of the X-th loop. If the query planner's estimates was accurate,
7469
+** then this value will approximate the quotient NVISIT/NLOOP and the
7470
+** product of this value for all prior loops with the same SELECTID will
7471
+** be the NLOOP value for the current loop.
7472
+**
7473
+** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
7474
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7475
+** a zero-terminated UTF-8 string containing the name of the index or table used
7476
+** for the X-th loop.
7477
+**
7478
+** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
7479
+** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7480
+** a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] description
7481
+** for the X-th loop.
7482
+**
7483
+** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
7484
+** <dd>^The "int" variable pointed to by the T parameter will be set to the
7485
+** "select-id" for the X-th loop. The select-id identifies which query or
7486
+** subquery the loop is part of. The main query has a select-id of zero.
7487
+** The select-id is the same value as is output in the first column
7488
+** of an [EXPLAIN QUERY PLAN] query.
7489
+** </dl>
7490
+*/
7491
+#define SQLITE_SCANSTAT_NLOOP 0
7492
+#define SQLITE_SCANSTAT_NVISIT 1
7493
+#define SQLITE_SCANSTAT_EST 2
7494
+#define SQLITE_SCANSTAT_NAME 3
7495
+#define SQLITE_SCANSTAT_EXPLAIN 4
7496
+#define SQLITE_SCANSTAT_SELECTID 5
7497
+
7498
+/*
7499
+** CAPI3REF: Prepared Statement Scan Status
7500
+**
7501
+** Return status data for a single loop within query pStmt.
7502
+**
7503
+** The "iScanStatusOp" parameter determines which status information to return.
7504
+** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior of
7505
+** this interface is undefined.
7506
+** ^The requested measurement is written into a variable pointed to by
7507
+** the "pOut" parameter.
7508
+** Parameter "idx" identifies the specific loop to retrieve statistics for.
7509
+** Loops are numbered starting from zero. ^If idx is out of range - less than
7510
+** zero or greater than or equal to the total number of loops used to implement
7511
+** the statement - a non-zero value is returned and the variable that pOut
7512
+** points to is unchanged.
7513
+**
7514
+** ^Statistics might not be available for all loops in all statements. ^In cases
7515
+** where there exist loops with no available statistics, this function behaves
7516
+** as if the loop did not exist - it returns non-zero and leave the variable
7517
+** that pOut points to unchanged.
7518
+**
7519
+** This API is only available if the library is built with pre-processor
7520
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7521
+**
7522
+** See also: [sqlite3_stmt_scanstatus_reset()]
7523
+*/
7524
+SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus(
7525
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
7526
+ int idx, /* Index of loop to report on */
7527
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
7528
+ void *pOut /* Result written here */
7529
+);
7530
+
7531
+/*
7532
+** CAPI3REF: Zero Scan-Status Counters
7533
+**
7534
+** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
7535
+**
7536
+** This API is only available if the library is built with pre-processor
7537
+** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7538
+*/
7539
+SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
74147540
74157541
74167542
/*
74177543
** Undo the hack that converts floating point types to integer for
74187544
** builds on processors without floating point support.
74197545
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -55,11 +55,11 @@
55
56
57 /*
58 ** These no-op macros are used in front of interfaces to mark those
59 ** interfaces as either deprecated or experimental. New applications
60 ** should not use deprecated interfaces - they are support for backwards
61 ** compatibility only. Application writers should be aware that
62 ** experimental interfaces are subject to change in point releases.
63 **
64 ** These macros used to resolve to various kinds of compiler magic that
65 ** would generate warning messages when they were used. But that
@@ -105,13 +105,13 @@
105 **
106 ** See also: [sqlite3_libversion()],
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.8.7.2"
111 #define SQLITE_VERSION_NUMBER 3008007
112 #define SQLITE_SOURCE_ID "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -1502,29 +1502,31 @@
1502 ** it is not possible to set the Serialized [threading mode] and
1503 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1504 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1505 **
1506 ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1507 ** <dd> ^(This option takes a single argument which is a pointer to an
1508 ** instance of the [sqlite3_mem_methods] structure. The argument specifies
 
1509 ** alternative low-level memory allocation routines to be used in place of
1510 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1511 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1512 ** before the [sqlite3_config()] call returns.</dd>
1513 **
1514 ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1515 ** <dd> ^(This option takes a single argument which is a pointer to an
1516 ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
 
1517 ** structure is filled with the currently defined memory allocation routines.)^
1518 ** This option can be used to overload the default memory allocation
1519 ** routines with a wrapper that simulations memory allocation failure or
1520 ** tracks memory usage, for example. </dd>
1521 **
1522 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1523 ** <dd> ^This option takes single argument of type int, interpreted as a
1524 ** boolean, which enables or disables the collection of memory allocation
1525 ** statistics. ^(When memory allocation statistics are disabled, the
1526 ** following SQLite interfaces become non-operational:
1527 ** <ul>
1528 ** <li> [sqlite3_memory_used()]
1529 ** <li> [sqlite3_memory_highwater()]
1530 ** <li> [sqlite3_soft_heap_limit64()]
@@ -1534,78 +1536,90 @@
1534 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1535 ** allocation statistics are disabled by default.
1536 ** </dd>
1537 **
1538 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1539 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1540 ** scratch memory. There are three arguments: A pointer an 8-byte
 
1541 ** aligned memory buffer from which the scratch allocations will be
1542 ** drawn, the size of each scratch allocation (sz),
1543 ** and the maximum number of scratch allocations (N). The sz
1544 ** argument must be a multiple of 16.
1545 ** The first argument must be a pointer to an 8-byte aligned buffer
1546 ** of at least sz*N bytes of memory.
1547 ** ^SQLite will use no more than two scratch buffers per thread. So
1548 ** N should be set to twice the expected maximum number of threads.
1549 ** ^SQLite will never require a scratch buffer that is more than 6
1550 ** times the database page size. ^If SQLite needs needs additional
1551 ** scratch memory beyond what is provided by this configuration option, then
1552 ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
 
 
 
 
 
 
1553 **
1554 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1555 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1556 ** the database page cache with the default page cache implementation.
 
1557 ** This configuration should not be used if an application-define page
1558 ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
1559 ** There are three arguments to this option: A pointer to 8-byte aligned
 
1560 ** memory, the size of each page buffer (sz), and the number of pages (N).
1561 ** The sz argument should be the size of the largest database page
1562 ** (a power of two between 512 and 32768) plus a little extra for each
1563 ** page header. ^The page header size is 20 to 40 bytes depending on
1564 ** the host architecture. ^It is harmless, apart from the wasted memory,
1565 ** to make sz a little too large. The first
1566 ** argument should point to an allocation of at least sz*N bytes of memory.
 
 
 
 
1567 ** ^SQLite will use the memory provided by the first argument to satisfy its
1568 ** memory needs for the first N pages that it adds to cache. ^If additional
1569 ** page cache memory is needed beyond what is provided by this option, then
1570 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1571 ** The pointer in the first argument must
1572 ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1573 ** will be undefined.</dd>
1574 **
1575 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1576 ** <dd> ^This option specifies a static memory buffer that SQLite will use
1577 ** for all of its dynamic memory allocation needs beyond those provided
1578 ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1579 ** There are three arguments: An 8-byte aligned pointer to the memory,
 
 
 
 
1580 ** the number of bytes in the memory buffer, and the minimum allocation size.
1581 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1582 ** to using its default memory allocator (the system malloc() implementation),
1583 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1584 ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1585 ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1586 ** allocator is engaged to handle all of SQLites memory allocation needs.
1587 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1588 ** boundary or subsequent behavior of SQLite will be undefined.
1589 ** The minimum allocation size is capped at 2**12. Reasonable values
1590 ** for the minimum allocation size are 2**5 through 2**8.</dd>
1591 **
1592 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1593 ** <dd> ^(This option takes a single argument which is a pointer to an
1594 ** instance of the [sqlite3_mutex_methods] structure. The argument specifies
1595 ** alternative low-level mutex routines to be used in place
1596 ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
1597 ** content of the [sqlite3_mutex_methods] structure before the call to
1598 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1599 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1600 ** the entire mutexing subsystem is omitted from the build and hence calls to
1601 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1602 ** return [SQLITE_ERROR].</dd>
1603 **
1604 ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1605 ** <dd> ^(This option takes a single argument which is a pointer to an
1606 ** instance of the [sqlite3_mutex_methods] structure. The
1607 ** [sqlite3_mutex_methods]
1608 ** structure is filled with the currently defined mutex routines.)^
1609 ** This option can be used to overload the default mutex allocation
1610 ** routines with a wrapper used to track mutex usage for performance
1611 ** profiling or testing, for example. ^If SQLite is compiled with
@@ -1613,28 +1627,28 @@
1613 ** the entire mutexing subsystem is omitted from the build and hence calls to
1614 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
1615 ** return [SQLITE_ERROR].</dd>
1616 **
1617 ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1618 ** <dd> ^(This option takes two arguments that determine the default
1619 ** memory allocation for the lookaside memory allocator on each
1620 ** [database connection]. The first argument is the
1621 ** size of each lookaside buffer slot and the second is the number of
1622 ** slots allocated to each database connection.)^ ^(This option sets the
1623 ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1624 ** verb to [sqlite3_db_config()] can be used to change the lookaside
1625 ** configuration on individual connections.)^ </dd>
1626 **
1627 ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1628 ** <dd> ^(This option takes a single argument which is a pointer to
1629 ** an [sqlite3_pcache_methods2] object. This object specifies the interface
1630 ** to a custom page cache implementation.)^ ^SQLite makes a copy of the
1631 ** object and uses it for page cache memory allocations.</dd>
1632 **
1633 ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1634 ** <dd> ^(This option takes a single argument which is a pointer to an
1635 ** [sqlite3_pcache_methods2] object. SQLite copies of the current
1636 ** page cache implementation into that object.)^ </dd>
1637 **
1638 ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
1639 ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
1640 ** global [error log].
@@ -1654,26 +1668,27 @@
1654 ** supplied by the application must not invoke any SQLite interface.
1655 ** In a multi-threaded application, the application-defined logger
1656 ** function must be threadsafe. </dd>
1657 **
1658 ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1659 ** <dd>^(This option takes a single argument of type int. If non-zero, then
1660 ** URI handling is globally enabled. If the parameter is zero, then URI handling
1661 ** is globally disabled.)^ ^If URI handling is globally enabled, all filenames
1662 ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1663 ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
1664 ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
1665 ** connection is opened. ^If it is globally disabled, filenames are
1666 ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
1667 ** database connection is opened. ^(By default, URI handling is globally
1668 ** disabled. The default value may be changed by compiling with the
1669 ** [SQLITE_USE_URI] symbol defined.)^
1670 **
1671 ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1672 ** <dd>^This option takes a single integer argument which is interpreted as
1673 ** a boolean in order to enable or disable the use of covering indices for
1674 ** full table scans in the query optimizer. ^The default setting is determined
 
1675 ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
1676 ** if that compile-time option is omitted.
1677 ** The ability to disable the use of covering indices for full table scans
1678 ** is because some incorrectly coded legacy applications might malfunction
1679 ** when the optimization is enabled. Providing the ability to
@@ -1709,23 +1724,32 @@
1709 ** that are the default mmap size limit (the default setting for
1710 ** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
1711 ** ^The default setting can be overridden by each database connection using
1712 ** either the [PRAGMA mmap_size] command, or by using the
1713 ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1714 ** cannot be changed at run-time. Nor may the maximum allowed mmap size
1715 ** exceed the compile-time maximum mmap size set by the
1716 ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
1717 ** ^If either argument to this option is negative, then that argument is
1718 ** changed to its compile-time default.
1719 **
1720 ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
1721 ** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1722 ** <dd>^This option is only available if SQLite is compiled for Windows
1723 ** with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1724 ** SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1725 ** that specifies the maximum size of the created heap.
1726 ** </dl>
 
 
 
 
 
 
 
 
 
1727 */
1728 #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
1729 #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
1730 #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
1731 #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1746,10 +1770,11 @@
1746 #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
1747 #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
1748 #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
1749 #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
1750 #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
 
1751
1752 /*
1753 ** CAPI3REF: Database Connection Configuration Options
1754 **
1755 ** These constants are the available integer configuration options that
@@ -1873,51 +1898,49 @@
1873 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
1874
1875 /*
1876 ** CAPI3REF: Count The Number Of Rows Modified
1877 **
1878 ** ^This function returns the number of database rows that were changed
1879 ** or inserted or deleted by the most recently completed SQL statement
1880 ** on the [database connection] specified by the first parameter.
1881 ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
1882 ** or [DELETE] statement are counted. Auxiliary changes caused by
1883 ** triggers or [foreign key actions] are not counted.)^ Use the
1884 ** [sqlite3_total_changes()] function to find the total number of changes
1885 ** including changes caused by triggers and foreign key actions.
1886 **
1887 ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
1888 ** are not counted. Only real table changes are counted.
1889 **
1890 ** ^(A "row change" is a change to a single row of a single table
1891 ** caused by an INSERT, DELETE, or UPDATE statement. Rows that
1892 ** are changed as side effects of [REPLACE] constraint resolution,
1893 ** rollback, ABORT processing, [DROP TABLE], or by any other
1894 ** mechanisms do not count as direct row changes.)^
1895 **
1896 ** A "trigger context" is a scope of execution that begins and
1897 ** ends with the script of a [CREATE TRIGGER | trigger].
1898 ** Most SQL statements are
1899 ** evaluated outside of any trigger. This is the "top level"
1900 ** trigger context. If a trigger fires from the top level, a
1901 ** new trigger context is entered for the duration of that one
1902 ** trigger. Subtriggers create subcontexts for their duration.
1903 **
1904 ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
1905 ** not create a new trigger context.
1906 **
1907 ** ^This function returns the number of direct row changes in the
1908 ** most recent INSERT, UPDATE, or DELETE statement within the same
1909 ** trigger context.
1910 **
1911 ** ^Thus, when called from the top level, this function returns the
1912 ** number of changes in the most recent INSERT, UPDATE, or DELETE
1913 ** that also occurred at the top level. ^(Within the body of a trigger,
1914 ** the sqlite3_changes() interface can be called to find the number of
1915 ** changes in the most recently completed INSERT, UPDATE, or DELETE
1916 ** statement within the body of the same trigger.
1917 ** However, the number returned does not include changes
1918 ** caused by subtriggers since those have their own context.)^
1919 **
1920 ** See also the [sqlite3_total_changes()] interface, the
1921 ** [count_changes pragma], and the [changes() SQL function].
1922 **
1923 ** If a separate thread makes changes on the same database connection
@@ -1927,24 +1950,21 @@
1927 SQLITE_API int sqlite3_changes(sqlite3*);
1928
1929 /*
1930 ** CAPI3REF: Total Number Of Rows Modified
1931 **
1932 ** ^This function returns the number of row changes caused by [INSERT],
1933 ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
1934 ** ^(The count returned by sqlite3_total_changes() includes all changes
1935 ** from all [CREATE TRIGGER | trigger] contexts and changes made by
1936 ** [foreign key actions]. However,
1937 ** the count does not include changes used to implement [REPLACE] constraints,
1938 ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
1939 ** count does not include rows of views that fire an [INSTEAD OF trigger],
1940 ** though if the INSTEAD OF trigger makes changes of its own, those changes
1941 ** are counted.)^
1942 ** ^The sqlite3_total_changes() function counts the changes as soon as
1943 ** the statement that makes them is completed (when the statement handle
1944 ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
1945 **
1946 ** See also the [sqlite3_changes()] interface, the
1947 ** [count_changes pragma], and the [total_changes() SQL function].
1948 **
1949 ** If a separate thread makes changes on the same database connection
1950 ** while [sqlite3_total_changes()] is running then the value
@@ -2418,17 +2438,18 @@
2418 ** already uses the largest possible [ROWID]. The PRNG is also used for
2419 ** the build-in random() and randomblob() SQL functions. This interface allows
2420 ** applications to access the same PRNG for other purposes.
2421 **
2422 ** ^A call to this routine stores N bytes of randomness into buffer P.
2423 ** ^If N is less than one, then P can be a NULL pointer.
2424 **
2425 ** ^If this routine has not been previously called or if the previous
2426 ** call had N less than one, then the PRNG is seeded using randomness
2427 ** obtained from the xRandomness method of the default [sqlite3_vfs] object.
2428 ** ^If the previous call to this routine had an N of 1 or more then
2429 ** the pseudo-randomness is generated
 
2430 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2431 ** method.
2432 */
2433 SQLITE_API void sqlite3_randomness(int N, void *P);
2434
@@ -4146,13 +4167,13 @@
4146 ** CAPI3REF: Text Encodings
4147 **
4148 ** These constant define integer codes that represent the various
4149 ** text encodings supported by SQLite.
4150 */
4151 #define SQLITE_UTF8 1
4152 #define SQLITE_UTF16LE 2
4153 #define SQLITE_UTF16BE 3
4154 #define SQLITE_UTF16 4 /* Use native byte order */
4155 #define SQLITE_ANY 5 /* Deprecated */
4156 #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
4157
4158 /*
@@ -5638,31 +5659,47 @@
5638 ** in other words, the same BLOB that would be selected by:
5639 **
5640 ** <pre>
5641 ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5642 ** </pre>)^
 
 
 
 
 
 
5643 **
5644 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5645 ** and write access. ^If it is zero, the BLOB is opened for read access.
5646 ** ^It is not possible to open a column that is part of an index or primary
5647 ** key for writing. ^If [foreign key constraints] are enabled, it is
5648 ** not possible to open a column that is part of a [child key] for writing.
5649 **
5650 ** ^Note that the database name is not the filename that contains
5651 ** the database but rather the symbolic name of the database that
5652 ** appears after the AS keyword when the database is connected using [ATTACH].
5653 ** ^For the main database file, the database name is "main".
5654 ** ^For TEMP tables, the database name is "temp".
5655 **
5656 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5657 ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5658 ** to be a null pointer.)^
5659 ** ^This function sets the [database connection] error code and message
5660 ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5661 ** functions. ^Note that the *ppBlob variable is always initialized in a
5662 ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5663 ** regardless of the success or failure of this routine.
 
 
 
 
 
 
 
 
 
 
5664 **
5665 ** ^(If the row that a BLOB handle points to is modified by an
5666 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5667 ** then the BLOB handle is marked as "expired".
5668 ** This is true if any column of the row is changed, even a column
@@ -5676,17 +5713,13 @@
5676 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5677 ** the opened blob. ^The size of a blob may not be changed by this
5678 ** interface. Use the [UPDATE] SQL command to change the size of a
5679 ** blob.
5680 **
5681 ** ^The [sqlite3_blob_open()] interface will fail for a [WITHOUT ROWID]
5682 ** table. Incremental BLOB I/O is not possible on [WITHOUT ROWID] tables.
5683 **
5684 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5685 ** and the built-in [zeroblob] SQL function can be used, if desired,
5686 ** to create an empty, zero-filled blob in which to read or write using
5687 ** this interface.
5688 **
5689 ** To avoid a resource leak, every open [BLOB handle] should eventually
5690 ** be released by a call to [sqlite3_blob_close()].
5691 */
5692 SQLITE_API int sqlite3_blob_open(
@@ -5724,28 +5757,26 @@
5724 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5725
5726 /*
5727 ** CAPI3REF: Close A BLOB Handle
5728 **
5729 ** ^Closes an open [BLOB handle].
5730 **
5731 ** ^Closing a BLOB shall cause the current transaction to commit
5732 ** if there are no other BLOBs, no pending prepared statements, and the
5733 ** database connection is in [autocommit mode].
5734 ** ^If any writes were made to the BLOB, they might be held in cache
5735 ** until the close operation if they will fit.
5736 **
5737 ** ^(Closing the BLOB often forces the changes
5738 ** out to disk and so if any I/O errors occur, they will likely occur
5739 ** at the time when the BLOB is closed. Any errors that occur during
5740 ** closing are reported as a non-zero return value.)^
5741 **
5742 ** ^(The BLOB is closed unconditionally. Even if this routine returns
5743 ** an error code, the BLOB is still closed.)^
5744 **
5745 ** ^Calling this routine with a null pointer (such as would be returned
5746 ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5747 */
5748 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5749
5750 /*
5751 ** CAPI3REF: Return The Size Of An Open BLOB
@@ -5791,36 +5822,39 @@
5791 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5792
5793 /*
5794 ** CAPI3REF: Write Data Into A BLOB Incrementally
5795 **
5796 ** ^This function is used to write data into an open [BLOB handle] from a
5797 ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5798 ** into the open BLOB, starting at offset iOffset.
 
 
 
 
 
 
5799 **
5800 ** ^If the [BLOB handle] passed as the first argument was not opened for
5801 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5802 ** this function returns [SQLITE_READONLY].
5803 **
5804 ** ^This function may only modify the contents of the BLOB; it is
5805 ** not possible to increase the size of a BLOB using this API.
5806 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5807 ** [SQLITE_ERROR] is returned and no data is written. ^If N is
5808 ** less than zero [SQLITE_ERROR] is returned and no data is written.
5809 ** The size of the BLOB (and hence the maximum value of N+iOffset)
5810 ** can be determined using the [sqlite3_blob_bytes()] interface.
5811 **
5812 ** ^An attempt to write to an expired [BLOB handle] fails with an
5813 ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
5814 ** before the [BLOB handle] expired are not rolled back by the
5815 ** expiration of the handle, though of course those changes might
5816 ** have been overwritten by the statement that expired the BLOB handle
5817 ** or by other independent statements.
5818 **
5819 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5820 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5821 **
5822 ** This routine only works on a [BLOB handle] which has been created
5823 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5824 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5825 ** to this routine results in undefined and probably undesirable behavior.
5826 **
@@ -5869,38 +5903,38 @@
5869 ** use by SQLite, code that links against SQLite is
5870 ** permitted to use any of these routines.
5871 **
5872 ** The SQLite source code contains multiple implementations
5873 ** of these mutex routines. An appropriate implementation
5874 ** is selected automatically at compile-time. ^(The following
5875 ** implementations are available in the SQLite core:
5876 **
5877 ** <ul>
5878 ** <li> SQLITE_MUTEX_PTHREADS
5879 ** <li> SQLITE_MUTEX_W32
5880 ** <li> SQLITE_MUTEX_NOOP
5881 ** </ul>)^
5882 **
5883 ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
5884 ** that does no real locking and is appropriate for use in
5885 ** a single-threaded application. ^The SQLITE_MUTEX_PTHREADS and
5886 ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
5887 ** and Windows.
5888 **
5889 ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
5890 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
5891 ** implementation is included with the library. In this case the
5892 ** application must supply a custom mutex implementation using the
5893 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
5894 ** before calling sqlite3_initialize() or any other public sqlite3_
5895 ** function that calls sqlite3_initialize().)^
5896 **
5897 ** ^The sqlite3_mutex_alloc() routine allocates a new
5898 ** mutex and returns a pointer to it. ^If it returns NULL
5899 ** that means that a mutex could not be allocated. ^SQLite
5900 ** will unwind its stack and return an error. ^(The argument
5901 ** to sqlite3_mutex_alloc() is one of these integer constants:
5902 **
5903 ** <ul>
5904 ** <li> SQLITE_MUTEX_FAST
5905 ** <li> SQLITE_MUTEX_RECURSIVE
5906 ** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -5909,68 +5943,64 @@
5909 ** <li> SQLITE_MUTEX_STATIC_PRNG
5910 ** <li> SQLITE_MUTEX_STATIC_LRU
5911 ** <li> SQLITE_MUTEX_STATIC_PMEM
5912 ** <li> SQLITE_MUTEX_STATIC_APP1
5913 ** <li> SQLITE_MUTEX_STATIC_APP2
5914 ** </ul>)^
 
5915 **
5916 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
5917 ** cause sqlite3_mutex_alloc() to create
5918 ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
5919 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
5920 ** The mutex implementation does not need to make a distinction
5921 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
5922 ** not want to. ^SQLite will only request a recursive mutex in
5923 ** cases where it really needs one. ^If a faster non-recursive mutex
5924 ** implementation is available on the host platform, the mutex subsystem
5925 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
5926 **
5927 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
5928 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
5929 ** a pointer to a static preexisting mutex. ^Six static mutexes are
5930 ** used by the current version of SQLite. Future versions of SQLite
5931 ** may add additional static mutexes. Static mutexes are for internal
5932 ** use by SQLite only. Applications that use SQLite mutexes should
5933 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
5934 ** SQLITE_MUTEX_RECURSIVE.
5935 **
5936 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
5937 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
5938 ** returns a different mutex on every call. ^But for the static
5939 ** mutex types, the same mutex is returned on every call that has
5940 ** the same type number.
5941 **
5942 ** ^The sqlite3_mutex_free() routine deallocates a previously
5943 ** allocated dynamic mutex. ^SQLite is careful to deallocate every
5944 ** dynamic mutex that it allocates. The dynamic mutexes must not be in
5945 ** use when they are deallocated. Attempting to deallocate a static
5946 ** mutex results in undefined behavior. ^SQLite never deallocates
5947 ** a static mutex.
5948 **
5949 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
5950 ** to enter a mutex. ^If another thread is already within the mutex,
5951 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
5952 ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
5953 ** upon successful entry. ^(Mutexes created using
5954 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
5955 ** In such cases the,
5956 ** mutex must be exited an equal number of times before another thread
5957 ** can enter.)^ ^(If the same thread tries to enter any other
5958 ** kind of mutex more than once, the behavior is undefined.
5959 ** SQLite will never exhibit
5960 ** such behavior in its own use of mutexes.)^
5961 **
5962 ** ^(Some systems (for example, Windows 95) do not support the operation
5963 ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
5964 ** will always return SQLITE_BUSY. The SQLite core only ever uses
5965 ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
 
5966 **
5967 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
5968 ** previously entered by the same thread. ^(The behavior
5969 ** is undefined if the mutex is not currently entered by the
5970 ** calling thread or is not currently allocated. SQLite will
5971 ** never do either.)^
5972 **
5973 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
5974 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
5975 ** behave as no-ops.
5976 **
@@ -5987,13 +6017,13 @@
5987 **
5988 ** An instance of this structure defines the low-level routines
5989 ** used to allocate and use mutexes.
5990 **
5991 ** Usually, the default mutex implementations provided by SQLite are
5992 ** sufficient, however the user has the option of substituting a custom
5993 ** implementation for specialized deployments or systems for which SQLite
5994 ** does not provide a suitable implementation. In this case, the user
5995 ** creates and populates an instance of this structure to pass
5996 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
5997 ** Additionally, an instance of this structure can be used as an
5998 ** output variable when querying the system for the current mutex
5999 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6030,17 +6060,17 @@
6030 ** by this structure are not required to handle this case, the results
6031 ** of passing a NULL pointer instead of a valid mutex handle are undefined
6032 ** (i.e. it is acceptable to provide an implementation that segfaults if
6033 ** it is passed a NULL pointer).
6034 **
6035 ** The xMutexInit() method must be threadsafe. ^It must be harmless to
6036 ** invoke xMutexInit() multiple times within the same process and without
6037 ** intervening calls to xMutexEnd(). Second and subsequent calls to
6038 ** xMutexInit() must be no-ops.
6039 **
6040 ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6041 ** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory
6042 ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
6043 ** memory allocation for a fast or recursive mutex.
6044 **
6045 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
6046 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6062,33 +6092,33 @@
6062
6063 /*
6064 ** CAPI3REF: Mutex Verification Routines
6065 **
6066 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6067 ** are intended for use inside assert() statements. ^The SQLite core
6068 ** never uses these routines except inside an assert() and applications
6069 ** are advised to follow the lead of the core. ^The SQLite core only
6070 ** provides implementations for these routines when it is compiled
6071 ** with the SQLITE_DEBUG flag. ^External mutex implementations
6072 ** are only required to provide these routines if SQLITE_DEBUG is
6073 ** defined and if NDEBUG is not defined.
6074 **
6075 ** ^These routines should return true if the mutex in their argument
6076 ** is held or not held, respectively, by the calling thread.
6077 **
6078 ** ^The implementation is not required to provide versions of these
6079 ** routines that actually work. If the implementation does not provide working
6080 ** versions of these routines, it should at least provide stubs that always
6081 ** return true so that one does not get spurious assertion failures.
6082 **
6083 ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6084 ** the routine should return 1. This seems counter-intuitive since
6085 ** clearly the mutex cannot be held if it does not exist. But
6086 ** the reason the mutex does not exist is because the build is not
6087 ** using mutexes. And we do not want the assert() containing the
6088 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
6089 ** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6090 ** interface should also return 1 when given a NULL pointer.
6091 */
6092 #ifndef NDEBUG
6093 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
6094 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6816,10 +6846,14 @@
6816 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6817 ** and database name of the source database, respectively.
6818 ** ^The source and destination [database connections] (parameters S and D)
6819 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6820 ** an error.
 
 
 
 
6821 **
6822 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6823 ** returned and an error code and error message are stored in the
6824 ** destination [database connection] D.
6825 ** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7409,10 +7443,102 @@
7409 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
7410 #define SQLITE_FAIL 3
7411 /* #define SQLITE_ABORT 4 // Also an error code */
7412 #define SQLITE_REPLACE 5
7413
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7414
7415
7416 /*
7417 ** Undo the hack that converts floating point types to integer for
7418 ** builds on processors without floating point support.
7419
--- src/sqlite3.h
+++ src/sqlite3.h
@@ -55,11 +55,11 @@
55
56
57 /*
58 ** These no-op macros are used in front of interfaces to mark those
59 ** interfaces as either deprecated or experimental. New applications
60 ** should not use deprecated interfaces - they are supported for backwards
61 ** compatibility only. Application writers should be aware that
62 ** experimental interfaces are subject to change in point releases.
63 **
64 ** These macros used to resolve to various kinds of compiler magic that
65 ** would generate warning messages when they were used. But that
@@ -105,13 +105,13 @@
105 **
106 ** See also: [sqlite3_libversion()],
107 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
108 ** [sqlite_version()] and [sqlite_source_id()].
109 */
110 #define SQLITE_VERSION "3.8.8"
111 #define SQLITE_VERSION_NUMBER 3008008
112 #define SQLITE_SOURCE_ID "2014-11-28 13:35:03 24fa2e9832daaa5d68ee28a00c56c55f97a4da9e"
113
114 /*
115 ** CAPI3REF: Run-Time Library Version Numbers
116 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
117 **
@@ -1502,29 +1502,31 @@
1502 ** it is not possible to set the Serialized [threading mode] and
1503 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1504 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1505 **
1506 ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1507 ** <dd> ^(The SQLITE_CONFIG_MALLOC option takes a single argument which is
1508 ** a pointer to an instance of the [sqlite3_mem_methods] structure.
1509 ** The argument specifies
1510 ** alternative low-level memory allocation routines to be used in place of
1511 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1512 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1513 ** before the [sqlite3_config()] call returns.</dd>
1514 **
1515 ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1516 ** <dd> ^(The SQLITE_CONFIG_GETMALLOC option takes a single argument which
1517 ** is a pointer to an instance of the [sqlite3_mem_methods] structure.
1518 ** The [sqlite3_mem_methods]
1519 ** structure is filled with the currently defined memory allocation routines.)^
1520 ** This option can be used to overload the default memory allocation
1521 ** routines with a wrapper that simulations memory allocation failure or
1522 ** tracks memory usage, for example. </dd>
1523 **
1524 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1525 ** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
1526 ** interpreted as a boolean, which enables or disables the collection of
1527 ** memory allocation statistics. ^(When memory allocation statistics are disabled, the
1528 ** following SQLite interfaces become non-operational:
1529 ** <ul>
1530 ** <li> [sqlite3_memory_used()]
1531 ** <li> [sqlite3_memory_highwater()]
1532 ** <li> [sqlite3_soft_heap_limit64()]
@@ -1534,78 +1536,90 @@
1536 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1537 ** allocation statistics are disabled by default.
1538 ** </dd>
1539 **
1540 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1541 ** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
1542 ** that SQLite can use for scratch memory. ^(There are three arguments
1543 ** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
1544 ** aligned memory buffer from which the scratch allocations will be
1545 ** drawn, the size of each scratch allocation (sz),
1546 ** and the maximum number of scratch allocations (N).)^
 
1547 ** The first argument must be a pointer to an 8-byte aligned buffer
1548 ** of at least sz*N bytes of memory.
1549 ** ^SQLite will not use more than one scratch buffers per thread.
1550 ** ^SQLite will never request a scratch buffer that is more than 6
1551 ** times the database page size.
1552 ** ^If SQLite needs needs additional
1553 ** scratch memory beyond what is provided by this configuration option, then
1554 ** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
1555 ** ^When the application provides any amount of scratch memory using
1556 ** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
1557 ** [sqlite3_malloc|heap allocations].
1558 ** This can help [Robson proof|prevent memory allocation failures] due to heap
1559 ** fragmentation in low-memory embedded systems.
1560 ** </dd>
1561 **
1562 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1563 ** <dd> ^The SQLITE_CONFIG_PAGECACHE option specifies a static memory buffer
1564 ** that SQLite can use for the database page cache with the default page
1565 ** cache implementation.
1566 ** This configuration should not be used if an application-define page
1567 ** cache implementation is loaded using the [SQLITE_CONFIG_PCACHE2]
1568 ** configuration option.
1569 ** ^There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned
1570 ** memory, the size of each page buffer (sz), and the number of pages (N).
1571 ** The sz argument should be the size of the largest database page
1572 ** (a power of two between 512 and 32768) plus some extra bytes for each
1573 ** page header. ^The number of extra bytes needed by the page header
1574 ** can be determined using the [SQLITE_CONFIG_PCACHE_HDRSZ] option
1575 ** to [sqlite3_config()].
1576 ** ^It is harmless, apart from the wasted memory,
1577 ** for the sz parameter to be larger than necessary. The first
1578 ** argument should pointer to an 8-byte aligned block of memory that
1579 ** is at least sz*N bytes of memory, otherwise subsequent behavior is
1580 ** undefined.
1581 ** ^SQLite will use the memory provided by the first argument to satisfy its
1582 ** memory needs for the first N pages that it adds to cache. ^If additional
1583 ** page cache memory is needed beyond what is provided by this option, then
1584 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.</dd>
 
 
 
1585 **
1586 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1587 ** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
1588 ** that SQLite will use for all of its dynamic memory allocation needs
1589 ** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1590 ** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
1591 ** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
1592 ** [SQLITE_ERROR] if invoked otherwise.
1593 ** ^There are three arguments to SQLITE_CONFIG_HEAP:
1594 ** An 8-byte aligned pointer to the memory,
1595 ** the number of bytes in the memory buffer, and the minimum allocation size.
1596 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1597 ** to using its default memory allocator (the system malloc() implementation),
1598 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1599 ** memory pointer is not NULL then the alternative memory
 
1600 ** allocator is engaged to handle all of SQLites memory allocation needs.
1601 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1602 ** boundary or subsequent behavior of SQLite will be undefined.
1603 ** The minimum allocation size is capped at 2**12. Reasonable values
1604 ** for the minimum allocation size are 2**5 through 2**8.</dd>
1605 **
1606 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1607 ** <dd> ^(The SQLITE_CONFIG_MUTEX option takes a single argument which is a
1608 ** pointer to an instance of the [sqlite3_mutex_methods] structure.
1609 ** The argument specifies alternative low-level mutex routines to be used in place
1610 ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
1611 ** content of the [sqlite3_mutex_methods] structure before the call to
1612 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1613 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1614 ** the entire mutexing subsystem is omitted from the build and hence calls to
1615 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1616 ** return [SQLITE_ERROR].</dd>
1617 **
1618 ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
1619 ** <dd> ^(The SQLITE_CONFIG_GETMUTEX option takes a single argument which
1620 ** is a pointer to an instance of the [sqlite3_mutex_methods] structure. The
1621 ** [sqlite3_mutex_methods]
1622 ** structure is filled with the currently defined mutex routines.)^
1623 ** This option can be used to overload the default mutex allocation
1624 ** routines with a wrapper used to track mutex usage for performance
1625 ** profiling or testing, for example. ^If SQLite is compiled with
@@ -1613,28 +1627,28 @@
1627 ** the entire mutexing subsystem is omitted from the build and hence calls to
1628 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
1629 ** return [SQLITE_ERROR].</dd>
1630 **
1631 ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1632 ** <dd> ^(The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
1633 ** the default size of lookaside memory on each [database connection].
1634 ** The first argument is the
1635 ** size of each lookaside buffer slot and the second is the number of
1636 ** slots allocated to each database connection.)^ ^(SQLITE_CONFIG_LOOKASIDE
1637 ** sets the <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1638 ** option to [sqlite3_db_config()] can be used to change the lookaside
1639 ** configuration on individual connections.)^ </dd>
1640 **
1641 ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
1642 ** <dd> ^(The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
1643 ** a pointer to an [sqlite3_pcache_methods2] object. This object specifies
1644 ** the interface to a custom page cache implementation.)^
1645 ** ^SQLite makes a copy of the [sqlite3_pcache_methods2] object.</dd>
1646 **
1647 ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
1648 ** <dd> ^(The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
1649 ** is a pointer to an [sqlite3_pcache_methods2] object. SQLite copies of the current
1650 ** page cache implementation into that object.)^ </dd>
1651 **
1652 ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
1653 ** <dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
1654 ** global [error log].
@@ -1654,26 +1668,27 @@
1668 ** supplied by the application must not invoke any SQLite interface.
1669 ** In a multi-threaded application, the application-defined logger
1670 ** function must be threadsafe. </dd>
1671 **
1672 ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
1673 ** <dd>^(The SQLITE_CONFIG_URI option takes a single argument of type int.
1674 ** If non-zero, then URI handling is globally enabled. If the parameter is zero,
1675 ** then URI handling is globally disabled.)^ ^If URI handling is globally enabled,
1676 ** all filenames passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
1677 ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
1678 ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
1679 ** connection is opened. ^If it is globally disabled, filenames are
1680 ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
1681 ** database connection is opened. ^(By default, URI handling is globally
1682 ** disabled. The default value may be changed by compiling with the
1683 ** [SQLITE_USE_URI] symbol defined.)^
1684 **
1685 ** [[SQLITE_CONFIG_COVERING_INDEX_SCAN]] <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
1686 ** <dd>^The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
1687 ** argument which is interpreted as a boolean in order to enable or disable
1688 ** the use of covering indices for full table scans in the query optimizer.
1689 ** ^The default setting is determined
1690 ** by the [SQLITE_ALLOW_COVERING_INDEX_SCAN] compile-time option, or is "on"
1691 ** if that compile-time option is omitted.
1692 ** The ability to disable the use of covering indices for full table scans
1693 ** is because some incorrectly coded legacy applications might malfunction
1694 ** when the optimization is enabled. Providing the ability to
@@ -1709,23 +1724,32 @@
1724 ** that are the default mmap size limit (the default setting for
1725 ** [PRAGMA mmap_size]) and the maximum allowed mmap size limit.
1726 ** ^The default setting can be overridden by each database connection using
1727 ** either the [PRAGMA mmap_size] command, or by using the
1728 ** [SQLITE_FCNTL_MMAP_SIZE] file control. ^(The maximum allowed mmap size
1729 ** will be silently truncated if necessary so that it does not exceed the
1730 ** compile-time maximum mmap size set by the
1731 ** [SQLITE_MAX_MMAP_SIZE] compile-time option.)^
1732 ** ^If either argument to this option is negative, then that argument is
1733 ** changed to its compile-time default.
1734 **
1735 ** [[SQLITE_CONFIG_WIN32_HEAPSIZE]]
1736 ** <dt>SQLITE_CONFIG_WIN32_HEAPSIZE
1737 ** <dd>^The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
1738 ** compiled for Windows with the [SQLITE_WIN32_MALLOC] pre-processor macro defined.
1739 ** ^SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
1740 ** that specifies the maximum size of the created heap.
1741 ** </dl>
1742 **
1743 ** [[SQLITE_CONFIG_PCACHE_HDRSZ]]
1744 ** <dt>SQLITE_CONFIG_PCACHE_HDRSZ
1745 ** <dd>^The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
1746 ** is a pointer to an integer and writes into that integer the number of extra
1747 ** bytes per page required for each page in [SQLITE_CONFIG_PAGECACHE]. The amount of
1748 ** extra space required can change depending on the compiler,
1749 ** target platform, and SQLite version.
1750 ** </dl>
1751 */
1752 #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
1753 #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
1754 #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
1755 #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
@@ -1746,10 +1770,11 @@
1770 #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
1771 #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
1772 #define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
1773 #define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
1774 #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
1775 #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
1776
1777 /*
1778 ** CAPI3REF: Database Connection Configuration Options
1779 **
1780 ** These constants are the available integer configuration options that
@@ -1873,51 +1898,49 @@
1898 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
1899
1900 /*
1901 ** CAPI3REF: Count The Number Of Rows Modified
1902 **
1903 ** ^This function returns the number of rows modified, inserted or
1904 ** deleted by the most recently completed INSERT, UPDATE or DELETE
1905 ** statement on the database connection specified by the only parameter.
1906 ** ^Executing any other type of SQL statement does not modify the value
1907 ** returned by this function.
1908 **
1909 ** ^Only changes made directly by the INSERT, UPDATE or DELETE statement are
1910 ** considered - auxiliary changes caused by [CREATE TRIGGER | triggers],
1911 ** [foreign key actions] or [REPLACE] constraint resolution are not counted.
1912 **
1913 ** Changes to a view that are intercepted by
1914 ** [INSTEAD OF trigger | INSTEAD OF triggers] are not counted. ^The value
1915 ** returned by sqlite3_changes() immediately after an INSERT, UPDATE or
1916 ** DELETE statement run on a view is always zero. Only changes made to real
1917 ** tables are counted.
1918 **
1919 ** Things are more complicated if the sqlite3_changes() function is
1920 ** executed while a trigger program is running. This may happen if the
1921 ** program uses the [changes() SQL function], or if some other callback
1922 ** function invokes sqlite3_changes() directly. Essentially:
1923 **
1924 ** <ul>
1925 ** <li> ^(Before entering a trigger program the value returned by
1926 ** sqlite3_changes() function is saved. After the trigger program
1927 ** has finished, the original value is restored.)^
1928 **
1929 ** <li> ^(Within a trigger program each INSERT, UPDATE and DELETE
1930 ** statement sets the value returned by sqlite3_changes()
1931 ** upon completion as normal. Of course, this value will not include
1932 ** any changes performed by sub-triggers, as the sqlite3_changes()
1933 ** value will be saved and restored after each sub-trigger has run.)^
1934 ** </ul>
1935 **
1936 ** ^This means that if the changes() SQL function (or similar) is used
1937 ** by the first INSERT, UPDATE or DELETE statement within a trigger, it
1938 ** returns the value as set when the calling statement began executing.
1939 ** ^If it is used by the second or subsequent such statement within a trigger
1940 ** program, the value returned reflects the number of rows modified by the
1941 ** previous INSERT, UPDATE or DELETE statement within the same trigger.
 
 
1942 **
1943 ** See also the [sqlite3_total_changes()] interface, the
1944 ** [count_changes pragma], and the [changes() SQL function].
1945 **
1946 ** If a separate thread makes changes on the same database connection
@@ -1927,24 +1950,21 @@
1950 SQLITE_API int sqlite3_changes(sqlite3*);
1951
1952 /*
1953 ** CAPI3REF: Total Number Of Rows Modified
1954 **
1955 ** ^This function returns the total number of rows inserted, modified or
1956 ** deleted by all [INSERT], [UPDATE] or [DELETE] statements completed
1957 ** since the database connection was opened, including those executed as
1958 ** part of trigger programs. ^Executing any other type of SQL statement
1959 ** does not affect the value returned by sqlite3_total_changes().
1960 **
1961 ** ^Changes made as part of [foreign key actions] are included in the
1962 ** count, but those made as part of REPLACE constraint resolution are
1963 ** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
1964 ** are not counted.
1965 **
 
 
 
1966 ** See also the [sqlite3_changes()] interface, the
1967 ** [count_changes pragma], and the [total_changes() SQL function].
1968 **
1969 ** If a separate thread makes changes on the same database connection
1970 ** while [sqlite3_total_changes()] is running then the value
@@ -2418,17 +2438,18 @@
2438 ** already uses the largest possible [ROWID]. The PRNG is also used for
2439 ** the build-in random() and randomblob() SQL functions. This interface allows
2440 ** applications to access the same PRNG for other purposes.
2441 **
2442 ** ^A call to this routine stores N bytes of randomness into buffer P.
2443 ** ^The P parameter can be a NULL pointer.
2444 **
2445 ** ^If this routine has not been previously called or if the previous
2446 ** call had N less than one or a NULL pointer for P, then the PRNG is
2447 ** seeded using randomness obtained from the xRandomness method of
2448 ** the default [sqlite3_vfs] object.
2449 ** ^If the previous call to this routine had an N of 1 or more and a
2450 ** non-NULL P then the pseudo-randomness is generated
2451 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2452 ** method.
2453 */
2454 SQLITE_API void sqlite3_randomness(int N, void *P);
2455
@@ -4146,13 +4167,13 @@
4167 ** CAPI3REF: Text Encodings
4168 **
4169 ** These constant define integer codes that represent the various
4170 ** text encodings supported by SQLite.
4171 */
4172 #define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
4173 #define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
4174 #define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
4175 #define SQLITE_UTF16 4 /* Use native byte order */
4176 #define SQLITE_ANY 5 /* Deprecated */
4177 #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
4178
4179 /*
@@ -5638,31 +5659,47 @@
5659 ** in other words, the same BLOB that would be selected by:
5660 **
5661 ** <pre>
5662 ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5663 ** </pre>)^
5664 **
5665 ** ^(Parameter zDb is not the filename that contains the database, but
5666 ** rather the symbolic name of the database. For attached databases, this is
5667 ** the name that appears after the AS keyword in the [ATTACH] statement.
5668 ** For the main database file, the database name is "main". For TEMP
5669 ** tables, the database name is "temp".)^
5670 **
5671 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5672 ** and write access. ^If the flags parameter is zero, the BLOB is opened for
5673 ** read-only access.
5674 **
5675 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is stored
5676 ** in *ppBlob. Otherwise an [error code] is returned and, unless the error
5677 ** code is SQLITE_MISUSE, *ppBlob is set to NULL.)^ ^This means that, provided
5678 ** the API is not misused, it is always safe to call [sqlite3_blob_close()]
5679 ** on *ppBlob after this function it returns.
5680 **
5681 ** This function fails with SQLITE_ERROR if any of the following are true:
5682 ** <ul>
5683 ** <li> ^(Database zDb does not exist)^,
5684 ** <li> ^(Table zTable does not exist within database zDb)^,
5685 ** <li> ^(Table zTable is a WITHOUT ROWID table)^,
5686 ** <li> ^(Column zColumn does not exist)^,
5687 ** <li> ^(Row iRow is not present in the table)^,
5688 ** <li> ^(The specified column of row iRow contains a value that is not
5689 ** a TEXT or BLOB value)^,
5690 ** <li> ^(Column zColumn is part of an index, PRIMARY KEY or UNIQUE
5691 ** constraint and the blob is being opened for read/write access)^,
5692 ** <li> ^([foreign key constraints | Foreign key constraints] are enabled,
5693 ** column zColumn is part of a [child key] definition and the blob is
5694 ** being opened for read/write access)^.
5695 ** </ul>
5696 **
5697 ** ^Unless it returns SQLITE_MISUSE, this function sets the
5698 ** [database connection] error code and message accessible via
5699 ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5700 **
5701 **
5702 ** ^(If the row that a BLOB handle points to is modified by an
5703 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5704 ** then the BLOB handle is marked as "expired".
5705 ** This is true if any column of the row is changed, even a column
@@ -5676,17 +5713,13 @@
5713 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5714 ** the opened blob. ^The size of a blob may not be changed by this
5715 ** interface. Use the [UPDATE] SQL command to change the size of a
5716 ** blob.
5717 **
 
 
 
5718 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5719 ** and the built-in [zeroblob] SQL function may be used to create a
5720 ** zero-filled blob to read or write using the incremental-blob interface.
 
5721 **
5722 ** To avoid a resource leak, every open [BLOB handle] should eventually
5723 ** be released by a call to [sqlite3_blob_close()].
5724 */
5725 SQLITE_API int sqlite3_blob_open(
@@ -5724,28 +5757,26 @@
5757 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5758
5759 /*
5760 ** CAPI3REF: Close A BLOB Handle
5761 **
5762 ** ^This function closes an open [BLOB handle]. ^(The BLOB handle is closed
5763 ** unconditionally. Even if this routine returns an error code, the
5764 ** handle is still closed.)^
5765 **
5766 ** ^If the blob handle being closed was opened for read-write access, and if
5767 ** the database is in auto-commit mode and there are no other open read-write
5768 ** blob handles or active write statements, the current transaction is
5769 ** committed. ^If an error occurs while committing the transaction, an error
5770 ** code is returned and the transaction rolled back.
5771 **
5772 ** Calling this function with an argument that is not a NULL pointer or an
5773 ** open blob handle results in undefined behaviour. ^Calling this routine
5774 ** with a null pointer (such as would be returned by a failed call to
5775 ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function
5776 ** is passed a valid open blob handle, the values returned by the
5777 ** sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
 
 
5778 */
5779 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5780
5781 /*
5782 ** CAPI3REF: Return The Size Of An Open BLOB
@@ -5791,36 +5822,39 @@
5822 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5823
5824 /*
5825 ** CAPI3REF: Write Data Into A BLOB Incrementally
5826 **
5827 ** ^(This function is used to write data into an open [BLOB handle] from a
5828 ** caller-supplied buffer. N bytes of data are copied from the buffer Z
5829 ** into the open BLOB, starting at offset iOffset.)^
5830 **
5831 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5832 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5833 ** ^Unless SQLITE_MISUSE is returned, this function sets the
5834 ** [database connection] error code and message accessible via
5835 ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions.
5836 **
5837 ** ^If the [BLOB handle] passed as the first argument was not opened for
5838 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5839 ** this function returns [SQLITE_READONLY].
5840 **
5841 ** This function may only modify the contents of the BLOB; it is
5842 ** not possible to increase the size of a BLOB using this API.
5843 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5844 ** [SQLITE_ERROR] is returned and no data is written. The size of the
5845 ** BLOB (and hence the maximum value of N+iOffset) can be determined
5846 ** using the [sqlite3_blob_bytes()] interface. ^If N or iOffset are less
5847 ** than zero [SQLITE_ERROR] is returned and no data is written.
5848 **
5849 ** ^An attempt to write to an expired [BLOB handle] fails with an
5850 ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
5851 ** before the [BLOB handle] expired are not rolled back by the
5852 ** expiration of the handle, though of course those changes might
5853 ** have been overwritten by the statement that expired the BLOB handle
5854 ** or by other independent statements.
5855 **
 
 
 
5856 ** This routine only works on a [BLOB handle] which has been created
5857 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5858 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5859 ** to this routine results in undefined and probably undesirable behavior.
5860 **
@@ -5869,38 +5903,38 @@
5903 ** use by SQLite, code that links against SQLite is
5904 ** permitted to use any of these routines.
5905 **
5906 ** The SQLite source code contains multiple implementations
5907 ** of these mutex routines. An appropriate implementation
5908 ** is selected automatically at compile-time. The following
5909 ** implementations are available in the SQLite core:
5910 **
5911 ** <ul>
5912 ** <li> SQLITE_MUTEX_PTHREADS
5913 ** <li> SQLITE_MUTEX_W32
5914 ** <li> SQLITE_MUTEX_NOOP
5915 ** </ul>
5916 **
5917 ** The SQLITE_MUTEX_NOOP implementation is a set of routines
5918 ** that does no real locking and is appropriate for use in
5919 ** a single-threaded application. The SQLITE_MUTEX_PTHREADS and
5920 ** SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
5921 ** and Windows.
5922 **
5923 ** If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
5924 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
5925 ** implementation is included with the library. In this case the
5926 ** application must supply a custom mutex implementation using the
5927 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
5928 ** before calling sqlite3_initialize() or any other public sqlite3_
5929 ** function that calls sqlite3_initialize().
5930 **
5931 ** ^The sqlite3_mutex_alloc() routine allocates a new
5932 ** mutex and returns a pointer to it. ^The sqlite3_mutex_alloc()
5933 ** routine returns NULL if it is unable to allocate the requested
5934 ** mutex. The argument to sqlite3_mutex_alloc() must one of these
5935 ** integer constants:
5936 **
5937 ** <ul>
5938 ** <li> SQLITE_MUTEX_FAST
5939 ** <li> SQLITE_MUTEX_RECURSIVE
5940 ** <li> SQLITE_MUTEX_STATIC_MASTER
@@ -5909,68 +5943,64 @@
5943 ** <li> SQLITE_MUTEX_STATIC_PRNG
5944 ** <li> SQLITE_MUTEX_STATIC_LRU
5945 ** <li> SQLITE_MUTEX_STATIC_PMEM
5946 ** <li> SQLITE_MUTEX_STATIC_APP1
5947 ** <li> SQLITE_MUTEX_STATIC_APP2
5948 ** <li> SQLITE_MUTEX_STATIC_APP3
5949 ** </ul>
5950 **
5951 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
5952 ** cause sqlite3_mutex_alloc() to create
5953 ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
5954 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
5955 ** The mutex implementation does not need to make a distinction
5956 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
5957 ** not want to. SQLite will only request a recursive mutex in
5958 ** cases where it really needs one. If a faster non-recursive mutex
5959 ** implementation is available on the host platform, the mutex subsystem
5960 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
5961 **
5962 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
5963 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
5964 ** a pointer to a static preexisting mutex. ^Nine static mutexes are
5965 ** used by the current version of SQLite. Future versions of SQLite
5966 ** may add additional static mutexes. Static mutexes are for internal
5967 ** use by SQLite only. Applications that use SQLite mutexes should
5968 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
5969 ** SQLITE_MUTEX_RECURSIVE.
5970 **
5971 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
5972 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
5973 ** returns a different mutex on every call. ^For the static
5974 ** mutex types, the same mutex is returned on every call that has
5975 ** the same type number.
5976 **
5977 ** ^The sqlite3_mutex_free() routine deallocates a previously
5978 ** allocated dynamic mutex. Attempting to deallocate a static
5979 ** mutex results in undefined behavior.
 
 
 
5980 **
5981 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
5982 ** to enter a mutex. ^If another thread is already within the mutex,
5983 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
5984 ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
5985 ** upon successful entry. ^(Mutexes created using
5986 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
5987 ** In such cases, the
5988 ** mutex must be exited an equal number of times before another thread
5989 ** can enter.)^ If the same thread tries to enter any mutex other
5990 ** than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.
 
 
5991 **
5992 ** ^(Some systems (for example, Windows 95) do not support the operation
5993 ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
5994 ** will always return SQLITE_BUSY. The SQLite core only ever uses
5995 ** sqlite3_mutex_try() as an optimization so this is acceptable
5996 ** behavior.)^
5997 **
5998 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
5999 ** previously entered by the same thread. The behavior
6000 ** is undefined if the mutex is not currently entered by the
6001 ** calling thread or is not currently allocated.
 
6002 **
6003 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
6004 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
6005 ** behave as no-ops.
6006 **
@@ -5987,13 +6017,13 @@
6017 **
6018 ** An instance of this structure defines the low-level routines
6019 ** used to allocate and use mutexes.
6020 **
6021 ** Usually, the default mutex implementations provided by SQLite are
6022 ** sufficient, however the application has the option of substituting a custom
6023 ** implementation for specialized deployments or systems for which SQLite
6024 ** does not provide a suitable implementation. In this case, the application
6025 ** creates and populates an instance of this structure to pass
6026 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
6027 ** Additionally, an instance of this structure can be used as an
6028 ** output variable when querying the system for the current mutex
6029 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
@@ -6030,17 +6060,17 @@
6060 ** by this structure are not required to handle this case, the results
6061 ** of passing a NULL pointer instead of a valid mutex handle are undefined
6062 ** (i.e. it is acceptable to provide an implementation that segfaults if
6063 ** it is passed a NULL pointer).
6064 **
6065 ** The xMutexInit() method must be threadsafe. It must be harmless to
6066 ** invoke xMutexInit() multiple times within the same process and without
6067 ** intervening calls to xMutexEnd(). Second and subsequent calls to
6068 ** xMutexInit() must be no-ops.
6069 **
6070 ** xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6071 ** and its associates). Similarly, xMutexAlloc() must not use SQLite memory
6072 ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
6073 ** memory allocation for a fast or recursive mutex.
6074 **
6075 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
6076 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
@@ -6062,33 +6092,33 @@
6092
6093 /*
6094 ** CAPI3REF: Mutex Verification Routines
6095 **
6096 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6097 ** are intended for use inside assert() statements. The SQLite core
6098 ** never uses these routines except inside an assert() and applications
6099 ** are advised to follow the lead of the core. The SQLite core only
6100 ** provides implementations for these routines when it is compiled
6101 ** with the SQLITE_DEBUG flag. External mutex implementations
6102 ** are only required to provide these routines if SQLITE_DEBUG is
6103 ** defined and if NDEBUG is not defined.
6104 **
6105 ** These routines should return true if the mutex in their argument
6106 ** is held or not held, respectively, by the calling thread.
6107 **
6108 ** The implementation is not required to provide versions of these
6109 ** routines that actually work. If the implementation does not provide working
6110 ** versions of these routines, it should at least provide stubs that always
6111 ** return true so that one does not get spurious assertion failures.
6112 **
6113 ** If the argument to sqlite3_mutex_held() is a NULL pointer then
6114 ** the routine should return 1. This seems counter-intuitive since
6115 ** clearly the mutex cannot be held if it does not exist. But
6116 ** the reason the mutex does not exist is because the build is not
6117 ** using mutexes. And we do not want the assert() containing the
6118 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
6119 ** the appropriate thing to do. The sqlite3_mutex_notheld()
6120 ** interface should also return 1 when given a NULL pointer.
6121 */
6122 #ifndef NDEBUG
6123 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
6124 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
@@ -6816,10 +6846,14 @@
6846 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6847 ** and database name of the source database, respectively.
6848 ** ^The source and destination [database connections] (parameters S and D)
6849 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6850 ** an error.
6851 **
6852 ** ^A call to sqlite3_backup_init() will fail, returning SQLITE_ERROR, if
6853 ** there is already a read or read-write transaction open on the
6854 ** destination database.
6855 **
6856 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6857 ** returned and an error code and error message are stored in the
6858 ** destination [database connection] D.
6859 ** ^The error code and message for the failed call to sqlite3_backup_init()
@@ -7409,10 +7443,102 @@
7443 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
7444 #define SQLITE_FAIL 3
7445 /* #define SQLITE_ABORT 4 // Also an error code */
7446 #define SQLITE_REPLACE 5
7447
7448 /*
7449 ** CAPI3REF: Prepared Statement Scan Status Opcodes
7450 ** KEYWORDS: {scanstatus options}
7451 **
7452 ** The following constants can be used for the T parameter to the
7453 ** [sqlite3_stmt_scanstatus(S,X,T,V)] interface. Each constant designates a
7454 ** different metric for sqlite3_stmt_scanstatus() to return.
7455 **
7456 ** <dl>
7457 ** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
7458 ** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7459 ** total number of times that the X-th loop has run.</dd>
7460 **
7461 ** [[SQLITE_SCANSTAT_NVISIT]] <dt>SQLITE_SCANSTAT_NVISIT</dt>
7462 ** <dd>^The [sqlite3_int64] variable pointed to by the T parameter will be set to the
7463 ** total number of rows examined by all iterations of the X-th loop.</dd>
7464 **
7465 ** [[SQLITE_SCANSTAT_EST]] <dt>SQLITE_SCANSTAT_EST</dt>
7466 ** <dd>^The "double" variable pointed to by the T parameter will be set to the
7467 ** query planner's estimate for the average number of rows output from each
7468 ** iteration of the X-th loop. If the query planner's estimates was accurate,
7469 ** then this value will approximate the quotient NVISIT/NLOOP and the
7470 ** product of this value for all prior loops with the same SELECTID will
7471 ** be the NLOOP value for the current loop.
7472 **
7473 ** [[SQLITE_SCANSTAT_NAME]] <dt>SQLITE_SCANSTAT_NAME</dt>
7474 ** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7475 ** a zero-terminated UTF-8 string containing the name of the index or table used
7476 ** for the X-th loop.
7477 **
7478 ** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
7479 ** <dd>^The "const char *" variable pointed to by the T parameter will be set to
7480 ** a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] description
7481 ** for the X-th loop.
7482 **
7483 ** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
7484 ** <dd>^The "int" variable pointed to by the T parameter will be set to the
7485 ** "select-id" for the X-th loop. The select-id identifies which query or
7486 ** subquery the loop is part of. The main query has a select-id of zero.
7487 ** The select-id is the same value as is output in the first column
7488 ** of an [EXPLAIN QUERY PLAN] query.
7489 ** </dl>
7490 */
7491 #define SQLITE_SCANSTAT_NLOOP 0
7492 #define SQLITE_SCANSTAT_NVISIT 1
7493 #define SQLITE_SCANSTAT_EST 2
7494 #define SQLITE_SCANSTAT_NAME 3
7495 #define SQLITE_SCANSTAT_EXPLAIN 4
7496 #define SQLITE_SCANSTAT_SELECTID 5
7497
7498 /*
7499 ** CAPI3REF: Prepared Statement Scan Status
7500 **
7501 ** Return status data for a single loop within query pStmt.
7502 **
7503 ** The "iScanStatusOp" parameter determines which status information to return.
7504 ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior of
7505 ** this interface is undefined.
7506 ** ^The requested measurement is written into a variable pointed to by
7507 ** the "pOut" parameter.
7508 ** Parameter "idx" identifies the specific loop to retrieve statistics for.
7509 ** Loops are numbered starting from zero. ^If idx is out of range - less than
7510 ** zero or greater than or equal to the total number of loops used to implement
7511 ** the statement - a non-zero value is returned and the variable that pOut
7512 ** points to is unchanged.
7513 **
7514 ** ^Statistics might not be available for all loops in all statements. ^In cases
7515 ** where there exist loops with no available statistics, this function behaves
7516 ** as if the loop did not exist - it returns non-zero and leave the variable
7517 ** that pOut points to unchanged.
7518 **
7519 ** This API is only available if the library is built with pre-processor
7520 ** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7521 **
7522 ** See also: [sqlite3_stmt_scanstatus_reset()]
7523 */
7524 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_stmt_scanstatus(
7525 sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
7526 int idx, /* Index of loop to report on */
7527 int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
7528 void *pOut /* Result written here */
7529 );
7530
7531 /*
7532 ** CAPI3REF: Zero Scan-Status Counters
7533 **
7534 ** ^Zero all [sqlite3_stmt_scanstatus()] related event counters.
7535 **
7536 ** This API is only available if the library is built with pre-processor
7537 ** symbol [SQLITE_ENABLE_STMT_SCANSTATUS] defined.
7538 */
7539 SQLITE_API SQLITE_EXPERIMENTAL void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
7540
7541
7542 /*
7543 ** Undo the hack that converts floating point types to integer for
7544 ** builds on processors without floating point support.
7545
+10 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
2828
2929
SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS
3030
3131
SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
3232
33
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
33
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
3434
35
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
35
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3636
3737
3838
RC=$(DMDIR)\bin\rcc
3939
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
4040
@@ -49,11 +49,11 @@
4949
5050
$(OBJDIR)\fossil.res: $B\win\fossil.rc
5151
$(RC) $(RCFLAGS) -o$@ $**
5252
5353
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54
- +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
54
+ +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
5555
+echo fossil >> $@
5656
+echo fossil >> $@
5757
+echo $(LIBS) >> $@
5858
+echo. >> $@
5959
+echo fossil >> $@
@@ -308,10 +308,16 @@
308308
$(OBJDIR)\finfo$O : finfo_.c finfo.h
309309
$(TCC) -o$@ -c finfo_.c
310310
311311
finfo_.c : $(SRCDIR)\finfo.c
312312
+translate$E $** > $@
313
+
314
+$(OBJDIR)\foci$O : foci_.c foci.h
315
+ $(TCC) -o$@ -c foci_.c
316
+
317
+foci_.c : $(SRCDIR)\foci.c
318
+ +translate$E $** > $@
313319
314320
$(OBJDIR)\fusefs$O : fusefs_.c fusefs.h
315321
$(TCC) -o$@ -c fusefs_.c
316322
317323
fusefs_.c : $(SRCDIR)\fusefs.c
@@ -796,7 +802,7 @@
796802
797803
zip_.c : $(SRCDIR)\zip.c
798804
+translate$E $** > $@
799805
800806
headers: makeheaders$E page_index.h builtin_data.h VERSION.h
801
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
807
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
802808
@copy /Y nul: headers
803809
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -308,10 +308,16 @@
308 $(OBJDIR)\finfo$O : finfo_.c finfo.h
309 $(TCC) -o$@ -c finfo_.c
310
311 finfo_.c : $(SRCDIR)\finfo.c
312 +translate$E $** > $@
 
 
 
 
 
 
313
314 $(OBJDIR)\fusefs$O : fusefs_.c fusefs.h
315 $(TCC) -o$@ -c fusefs_.c
316
317 fusefs_.c : $(SRCDIR)\fusefs.c
@@ -796,7 +802,7 @@
796
797 zip_.c : $(SRCDIR)\zip.c
798 +translate$E $** > $@
799
800 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
801 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
802 @copy /Y nul: headers
803
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -28,13 +28,13 @@
28
29 SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_OMIT_DEPRECATED -DSQLITE_ENABLE_EXPLAIN_COMMENTS
30
31 SHELL_OPTIONS = -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=fossil_open -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen
32
33 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c foci_.c fusefs_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c
34
35 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\builtin$O $(OBJDIR)\cache$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\unicode$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
36
37
38 RC=$(DMDIR)\bin\rcc
39 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
40
@@ -49,11 +49,11 @@
49
50 $(OBJDIR)\fossil.res: $B\win\fossil.rc
51 $(RC) $(RCFLAGS) -o$@ $**
52
53 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
54 +echo add allrepo attach bag bisect blob branch browse builtin cache captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo foci fusefs glob graph gzip http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path pivot popen pqueue printf rebuild regexp report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo unicode update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@
55 +echo fossil >> $@
56 +echo fossil >> $@
57 +echo $(LIBS) >> $@
58 +echo. >> $@
59 +echo fossil >> $@
@@ -308,10 +308,16 @@
308 $(OBJDIR)\finfo$O : finfo_.c finfo.h
309 $(TCC) -o$@ -c finfo_.c
310
311 finfo_.c : $(SRCDIR)\finfo.c
312 +translate$E $** > $@
313
314 $(OBJDIR)\foci$O : foci_.c foci.h
315 $(TCC) -o$@ -c foci_.c
316
317 foci_.c : $(SRCDIR)\foci.c
318 +translate$E $** > $@
319
320 $(OBJDIR)\fusefs$O : fusefs_.c fusefs.h
321 $(TCC) -o$@ -c fusefs_.c
322
323 fusefs_.c : $(SRCDIR)\fusefs.c
@@ -796,7 +802,7 @@
802
803 zip_.c : $(SRCDIR)\zip.c
804 +translate$E $** > $@
805
806 headers: makeheaders$E page_index.h builtin_data.h VERSION.h
807 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h builtin_.c:builtin.h cache_.c:cache.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h unicode_.c:unicode.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
808 @copy /Y nul: headers
809
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -374,10 +374,11 @@
374374
$(SRCDIR)/encode.c \
375375
$(SRCDIR)/event.c \
376376
$(SRCDIR)/export.c \
377377
$(SRCDIR)/file.c \
378378
$(SRCDIR)/finfo.c \
379
+ $(SRCDIR)/foci.c \
379380
$(SRCDIR)/fusefs.c \
380381
$(SRCDIR)/glob.c \
381382
$(SRCDIR)/graph.c \
382383
$(SRCDIR)/gzip.c \
383384
$(SRCDIR)/http.c \
@@ -491,10 +492,11 @@
491492
$(OBJDIR)/encode_.c \
492493
$(OBJDIR)/event_.c \
493494
$(OBJDIR)/export_.c \
494495
$(OBJDIR)/file_.c \
495496
$(OBJDIR)/finfo_.c \
497
+ $(OBJDIR)/foci_.c \
496498
$(OBJDIR)/fusefs_.c \
497499
$(OBJDIR)/glob_.c \
498500
$(OBJDIR)/graph_.c \
499501
$(OBJDIR)/gzip_.c \
500502
$(OBJDIR)/http_.c \
@@ -605,10 +607,11 @@
605607
$(OBJDIR)/encode.o \
606608
$(OBJDIR)/event.o \
607609
$(OBJDIR)/export.o \
608610
$(OBJDIR)/file.o \
609611
$(OBJDIR)/finfo.o \
612
+ $(OBJDIR)/foci.o \
610613
$(OBJDIR)/fusefs.o \
611614
$(OBJDIR)/glob.o \
612615
$(OBJDIR)/graph.o \
613616
$(OBJDIR)/gzip.o \
614617
$(OBJDIR)/http.o \
@@ -912,10 +915,11 @@
912915
$(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
913916
$(OBJDIR)/event_.c:$(OBJDIR)/event.h \
914917
$(OBJDIR)/export_.c:$(OBJDIR)/export.h \
915918
$(OBJDIR)/file_.c:$(OBJDIR)/file.h \
916919
$(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
920
+ $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
917921
$(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
918922
$(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
919923
$(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
920924
$(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
921925
$(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -1249,10 +1253,18 @@
12491253
12501254
$(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
12511255
$(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
12521256
12531257
$(OBJDIR)/finfo.h: $(OBJDIR)/headers
1258
+
1259
+$(OBJDIR)/foci_.c: $(SRCDIR)/foci.c $(TRANSLATE)
1260
+ $(TRANSLATE) $(SRCDIR)/foci.c >$@
1261
+
1262
+$(OBJDIR)/foci.o: $(OBJDIR)/foci_.c $(OBJDIR)/foci.h $(SRCDIR)/config.h
1263
+ $(XTCC) -o $(OBJDIR)/foci.o -c $(OBJDIR)/foci_.c
1264
+
1265
+$(OBJDIR)/foci.h: $(OBJDIR)/headers
12541266
12551267
$(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(TRANSLATE)
12561268
$(TRANSLATE) $(SRCDIR)/fusefs.c >$@
12571269
12581270
$(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
12591271
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -374,10 +374,11 @@
374 $(SRCDIR)/encode.c \
375 $(SRCDIR)/event.c \
376 $(SRCDIR)/export.c \
377 $(SRCDIR)/file.c \
378 $(SRCDIR)/finfo.c \
 
379 $(SRCDIR)/fusefs.c \
380 $(SRCDIR)/glob.c \
381 $(SRCDIR)/graph.c \
382 $(SRCDIR)/gzip.c \
383 $(SRCDIR)/http.c \
@@ -491,10 +492,11 @@
491 $(OBJDIR)/encode_.c \
492 $(OBJDIR)/event_.c \
493 $(OBJDIR)/export_.c \
494 $(OBJDIR)/file_.c \
495 $(OBJDIR)/finfo_.c \
 
496 $(OBJDIR)/fusefs_.c \
497 $(OBJDIR)/glob_.c \
498 $(OBJDIR)/graph_.c \
499 $(OBJDIR)/gzip_.c \
500 $(OBJDIR)/http_.c \
@@ -605,10 +607,11 @@
605 $(OBJDIR)/encode.o \
606 $(OBJDIR)/event.o \
607 $(OBJDIR)/export.o \
608 $(OBJDIR)/file.o \
609 $(OBJDIR)/finfo.o \
 
610 $(OBJDIR)/fusefs.o \
611 $(OBJDIR)/glob.o \
612 $(OBJDIR)/graph.o \
613 $(OBJDIR)/gzip.o \
614 $(OBJDIR)/http.o \
@@ -912,10 +915,11 @@
912 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
913 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
914 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
915 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
916 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
 
917 $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
918 $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
919 $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
920 $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
921 $(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -1249,10 +1253,18 @@
1249
1250 $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
1251 $(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
1252
1253 $(OBJDIR)/finfo.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
 
1254
1255 $(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(TRANSLATE)
1256 $(TRANSLATE) $(SRCDIR)/fusefs.c >$@
1257
1258 $(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
1259
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -374,10 +374,11 @@
374 $(SRCDIR)/encode.c \
375 $(SRCDIR)/event.c \
376 $(SRCDIR)/export.c \
377 $(SRCDIR)/file.c \
378 $(SRCDIR)/finfo.c \
379 $(SRCDIR)/foci.c \
380 $(SRCDIR)/fusefs.c \
381 $(SRCDIR)/glob.c \
382 $(SRCDIR)/graph.c \
383 $(SRCDIR)/gzip.c \
384 $(SRCDIR)/http.c \
@@ -491,10 +492,11 @@
492 $(OBJDIR)/encode_.c \
493 $(OBJDIR)/event_.c \
494 $(OBJDIR)/export_.c \
495 $(OBJDIR)/file_.c \
496 $(OBJDIR)/finfo_.c \
497 $(OBJDIR)/foci_.c \
498 $(OBJDIR)/fusefs_.c \
499 $(OBJDIR)/glob_.c \
500 $(OBJDIR)/graph_.c \
501 $(OBJDIR)/gzip_.c \
502 $(OBJDIR)/http_.c \
@@ -605,10 +607,11 @@
607 $(OBJDIR)/encode.o \
608 $(OBJDIR)/event.o \
609 $(OBJDIR)/export.o \
610 $(OBJDIR)/file.o \
611 $(OBJDIR)/finfo.o \
612 $(OBJDIR)/foci.o \
613 $(OBJDIR)/fusefs.o \
614 $(OBJDIR)/glob.o \
615 $(OBJDIR)/graph.o \
616 $(OBJDIR)/gzip.o \
617 $(OBJDIR)/http.o \
@@ -912,10 +915,11 @@
915 $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h \
916 $(OBJDIR)/event_.c:$(OBJDIR)/event.h \
917 $(OBJDIR)/export_.c:$(OBJDIR)/export.h \
918 $(OBJDIR)/file_.c:$(OBJDIR)/file.h \
919 $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h \
920 $(OBJDIR)/foci_.c:$(OBJDIR)/foci.h \
921 $(OBJDIR)/fusefs_.c:$(OBJDIR)/fusefs.h \
922 $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h \
923 $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h \
924 $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h \
925 $(OBJDIR)/http_.c:$(OBJDIR)/http.h \
@@ -1249,10 +1253,18 @@
1253
1254 $(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h
1255 $(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c
1256
1257 $(OBJDIR)/finfo.h: $(OBJDIR)/headers
1258
1259 $(OBJDIR)/foci_.c: $(SRCDIR)/foci.c $(TRANSLATE)
1260 $(TRANSLATE) $(SRCDIR)/foci.c >$@
1261
1262 $(OBJDIR)/foci.o: $(OBJDIR)/foci_.c $(OBJDIR)/foci.h $(SRCDIR)/config.h
1263 $(XTCC) -o $(OBJDIR)/foci.o -c $(OBJDIR)/foci_.c
1264
1265 $(OBJDIR)/foci.h: $(OBJDIR)/headers
1266
1267 $(OBJDIR)/fusefs_.c: $(SRCDIR)/fusefs.c $(TRANSLATE)
1268 $(TRANSLATE) $(SRCDIR)/fusefs.c >$@
1269
1270 $(OBJDIR)/fusefs.o: $(OBJDIR)/fusefs_.c $(OBJDIR)/fusefs.h $(SRCDIR)/config.h
1271
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -226,10 +226,11 @@
226226
encode_.c \
227227
event_.c \
228228
export_.c \
229229
file_.c \
230230
finfo_.c \
231
+ foci_.c \
231232
fusefs_.c \
232233
glob_.c \
233234
graph_.c \
234235
gzip_.c \
235236
http_.c \
@@ -342,10 +343,11 @@
342343
$(OX)\encode$O \
343344
$(OX)\event$O \
344345
$(OX)\export$O \
345346
$(OX)\file$O \
346347
$(OX)\finfo$O \
348
+ $(OX)\foci$O \
347349
$(OX)\fusefs$O \
348350
$(OX)\glob$O \
349351
$(OX)\graph$O \
350352
$(OX)\gzip$O \
351353
$(OX)\http$O \
@@ -511,10 +513,11 @@
511513
echo $(OX)\encode.obj >> $@
512514
echo $(OX)\event.obj >> $@
513515
echo $(OX)\export.obj >> $@
514516
echo $(OX)\file.obj >> $@
515517
echo $(OX)\finfo.obj >> $@
518
+ echo $(OX)\foci.obj >> $@
516519
echo $(OX)\fusefs.obj >> $@
517520
echo $(OX)\glob.obj >> $@
518521
echo $(OX)\graph.obj >> $@
519522
echo $(OX)\gzip.obj >> $@
520523
echo $(OX)\http.obj >> $@
@@ -881,10 +884,16 @@
881884
$(OX)\finfo$O : finfo_.c finfo.h
882885
$(TCC) /Fo$@ -c finfo_.c
883886
884887
finfo_.c : $(SRCDIR)\finfo.c
885888
translate$E $** > $@
889
+
890
+$(OX)\foci$O : foci_.c foci.h
891
+ $(TCC) /Fo$@ -c foci_.c
892
+
893
+foci_.c : $(SRCDIR)\foci.c
894
+ translate$E $** > $@
886895
887896
$(OX)\fusefs$O : fusefs_.c fusefs.h
888897
$(TCC) /Fo$@ -c fusefs_.c
889898
890899
fusefs_.c : $(SRCDIR)\fusefs.c
@@ -1403,10 +1412,11 @@
14031412
encode_.c:encode.h \
14041413
event_.c:event.h \
14051414
export_.c:export.h \
14061415
file_.c:file.h \
14071416
finfo_.c:finfo.h \
1417
+ foci_.c:foci.h \
14081418
fusefs_.c:fusefs.h \
14091419
glob_.c:glob.h \
14101420
graph_.c:graph.h \
14111421
gzip_.c:gzip.h \
14121422
http_.c:http.h \
14131423
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -226,10 +226,11 @@
226 encode_.c \
227 event_.c \
228 export_.c \
229 file_.c \
230 finfo_.c \
 
231 fusefs_.c \
232 glob_.c \
233 graph_.c \
234 gzip_.c \
235 http_.c \
@@ -342,10 +343,11 @@
342 $(OX)\encode$O \
343 $(OX)\event$O \
344 $(OX)\export$O \
345 $(OX)\file$O \
346 $(OX)\finfo$O \
 
347 $(OX)\fusefs$O \
348 $(OX)\glob$O \
349 $(OX)\graph$O \
350 $(OX)\gzip$O \
351 $(OX)\http$O \
@@ -511,10 +513,11 @@
511 echo $(OX)\encode.obj >> $@
512 echo $(OX)\event.obj >> $@
513 echo $(OX)\export.obj >> $@
514 echo $(OX)\file.obj >> $@
515 echo $(OX)\finfo.obj >> $@
 
516 echo $(OX)\fusefs.obj >> $@
517 echo $(OX)\glob.obj >> $@
518 echo $(OX)\graph.obj >> $@
519 echo $(OX)\gzip.obj >> $@
520 echo $(OX)\http.obj >> $@
@@ -881,10 +884,16 @@
881 $(OX)\finfo$O : finfo_.c finfo.h
882 $(TCC) /Fo$@ -c finfo_.c
883
884 finfo_.c : $(SRCDIR)\finfo.c
885 translate$E $** > $@
 
 
 
 
 
 
886
887 $(OX)\fusefs$O : fusefs_.c fusefs.h
888 $(TCC) /Fo$@ -c fusefs_.c
889
890 fusefs_.c : $(SRCDIR)\fusefs.c
@@ -1403,10 +1412,11 @@
1403 encode_.c:encode.h \
1404 event_.c:event.h \
1405 export_.c:export.h \
1406 file_.c:file.h \
1407 finfo_.c:finfo.h \
 
1408 fusefs_.c:fusefs.h \
1409 glob_.c:glob.h \
1410 graph_.c:graph.h \
1411 gzip_.c:gzip.h \
1412 http_.c:http.h \
1413
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -226,10 +226,11 @@
226 encode_.c \
227 event_.c \
228 export_.c \
229 file_.c \
230 finfo_.c \
231 foci_.c \
232 fusefs_.c \
233 glob_.c \
234 graph_.c \
235 gzip_.c \
236 http_.c \
@@ -342,10 +343,11 @@
343 $(OX)\encode$O \
344 $(OX)\event$O \
345 $(OX)\export$O \
346 $(OX)\file$O \
347 $(OX)\finfo$O \
348 $(OX)\foci$O \
349 $(OX)\fusefs$O \
350 $(OX)\glob$O \
351 $(OX)\graph$O \
352 $(OX)\gzip$O \
353 $(OX)\http$O \
@@ -511,10 +513,11 @@
513 echo $(OX)\encode.obj >> $@
514 echo $(OX)\event.obj >> $@
515 echo $(OX)\export.obj >> $@
516 echo $(OX)\file.obj >> $@
517 echo $(OX)\finfo.obj >> $@
518 echo $(OX)\foci.obj >> $@
519 echo $(OX)\fusefs.obj >> $@
520 echo $(OX)\glob.obj >> $@
521 echo $(OX)\graph.obj >> $@
522 echo $(OX)\gzip.obj >> $@
523 echo $(OX)\http.obj >> $@
@@ -881,10 +884,16 @@
884 $(OX)\finfo$O : finfo_.c finfo.h
885 $(TCC) /Fo$@ -c finfo_.c
886
887 finfo_.c : $(SRCDIR)\finfo.c
888 translate$E $** > $@
889
890 $(OX)\foci$O : foci_.c foci.h
891 $(TCC) /Fo$@ -c foci_.c
892
893 foci_.c : $(SRCDIR)\foci.c
894 translate$E $** > $@
895
896 $(OX)\fusefs$O : fusefs_.c fusefs.h
897 $(TCC) /Fo$@ -c fusefs_.c
898
899 fusefs_.c : $(SRCDIR)\fusefs.c
@@ -1403,10 +1412,11 @@
1412 encode_.c:encode.h \
1413 event_.c:event.h \
1414 export_.c:export.h \
1415 file_.c:file.h \
1416 finfo_.c:finfo.h \
1417 foci_.c:foci.h \
1418 fusefs_.c:fusefs.h \
1419 glob_.c:glob.h \
1420 graph_.c:graph.h \
1421 gzip_.c:gzip.h \
1422 http_.c:http.h \
1423

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button