Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/src/test_malloc.c

Issue 883353008: [sql] Import reference version of SQLite 3.8.7.4. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hold back encoding change which is messing up patch. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 ** 2007 August 15 2 ** 2007 August 15
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 227
228 if( rc==SQLITE_OK ){ 228 if( rc==SQLITE_OK ){
229 memfault.isInstalled = 1; 229 memfault.isInstalled = 1;
230 } 230 }
231 return rc; 231 return rc;
232 } 232 }
233 233
234 #ifdef SQLITE_TEST 234 #ifdef SQLITE_TEST
235 235
236 /* 236 /*
237 ** This function is implemented in test1.c. Returns a pointer to a static 237 ** This function is implemented in main.c. Returns a pointer to a static
238 ** buffer containing the symbolic SQLite error code that corresponds to 238 ** buffer containing the symbolic SQLite error code that corresponds to
239 ** the least-significant 8-bits of the integer passed as an argument. 239 ** the least-significant 8-bits of the integer passed as an argument.
240 ** For example: 240 ** For example:
241 ** 241 **
242 ** sqlite3TestErrorName(1) -> "SQLITE_ERROR" 242 ** sqlite3ErrName(1) -> "SQLITE_ERROR"
243 */ 243 */
244 const char *sqlite3TestErrorName(int); 244 extern const char *sqlite3ErrName(int);
245 245
246 /* 246 /*
247 ** Transform pointers to text and back again 247 ** Transform pointers to text and back again
248 */ 248 */
249 static void pointerToText(void *p, char *z){ 249 static void pointerToText(void *p, char *z){
250 static const char zHex[] = "0123456789abcdef"; 250 static const char zHex[] = "0123456789abcdef";
251 int i, k; 251 int i, k;
252 unsigned int u; 252 unsigned int u;
253 sqlite3_uint64 n; 253 sqlite3_uint64 n;
254 if( p==0 ){ 254 if( p==0 ){
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 int nPending; 689 int nPending;
690 if( objc!=1 ){ 690 if( objc!=1 ){
691 Tcl_WrongNumArgs(interp, 1, objv, ""); 691 Tcl_WrongNumArgs(interp, 1, objv, "");
692 return TCL_ERROR; 692 return TCL_ERROR;
693 } 693 }
694 nPending = faultsimPending(); 694 nPending = faultsimPending();
695 Tcl_SetObjResult(interp, Tcl_NewIntObj(nPending)); 695 Tcl_SetObjResult(interp, Tcl_NewIntObj(nPending));
696 return TCL_OK; 696 return TCL_OK;
697 } 697 }
698 698
699 /*
700 ** The following global variable keeps track of the number of tests
701 ** that have run. This variable is only useful when running in the
702 ** debugger.
703 */
704 static int sqlite3_memdebug_title_count = 0;
699 705
700 /* 706 /*
701 ** Usage: sqlite3_memdebug_settitle TITLE 707 ** Usage: sqlite3_memdebug_settitle TITLE
702 ** 708 **
703 ** Set a title string stored with each allocation. The TITLE is 709 ** Set a title string stored with each allocation. The TITLE is
704 ** typically the name of the test that was running when the 710 ** typically the name of the test that was running when the
705 ** allocation occurred. The TITLE is stored with the allocation 711 ** allocation occurred. The TITLE is stored with the allocation
706 ** and can be used to figure out which tests are leaking memory. 712 ** and can be used to figure out which tests are leaking memory.
707 ** 713 **
708 ** Each title overwrite the previous. 714 ** Each title overwrite the previous.
709 */ 715 */
710 static int test_memdebug_settitle( 716 static int test_memdebug_settitle(
711 void * clientData, 717 void * clientData,
712 Tcl_Interp *interp, 718 Tcl_Interp *interp,
713 int objc, 719 int objc,
714 Tcl_Obj *CONST objv[] 720 Tcl_Obj *CONST objv[]
715 ){ 721 ){
716 const char *zTitle; 722 sqlite3_memdebug_title_count++;
717 if( objc!=2 ){ 723 if( objc!=2 ){
718 Tcl_WrongNumArgs(interp, 1, objv, "TITLE"); 724 Tcl_WrongNumArgs(interp, 1, objv, "TITLE");
719 return TCL_ERROR; 725 return TCL_ERROR;
720 } 726 }
721 zTitle = Tcl_GetString(objv[1]);
722 #ifdef SQLITE_MEMDEBUG 727 #ifdef SQLITE_MEMDEBUG
723 { 728 {
729 const char *zTitle;
724 extern int sqlite3MemdebugSettitle(const char*); 730 extern int sqlite3MemdebugSettitle(const char*);
731 zTitle = Tcl_GetString(objv[1]);
725 sqlite3MemdebugSettitle(zTitle); 732 sqlite3MemdebugSettitle(zTitle);
726 } 733 }
727 #endif 734 #endif
728 return TCL_OK; 735 return TCL_OK;
729 } 736 }
730 737
731 #define MALLOC_LOG_FRAMES 10 738 #define MALLOC_LOG_FRAMES 10
732 #define MALLOC_LOG_KEYINTS ( \ 739 #define MALLOC_LOG_KEYINTS ( \
733 10 * ((sizeof(int)>=sizeof(void*)) ? 1 : sizeof(void*)/sizeof(int)) \ 740 10 * ((sizeof(int)>=sizeof(void*)) ? 1 : sizeof(void*)/sizeof(int)) \
734 ) 741 )
735 static Tcl_HashTable aMallocLog; 742 static Tcl_HashTable aMallocLog;
736 static int mallocLogEnabled = 0; 743 static int mallocLogEnabled = 0;
737 744
738 typedef struct MallocLog MallocLog; 745 typedef struct MallocLog MallocLog;
739 struct MallocLog { 746 struct MallocLog {
740 int nCall; 747 int nCall;
741 int nByte; 748 int nByte;
742 }; 749 };
743 750
744 #ifdef SQLITE_MEMDEBUG 751 #ifdef SQLITE_MEMDEBUG
745 static void test_memdebug_callback(int nByte, int nFrame, void **aFrame){ 752 static void test_memdebug_callback(int nByte, int nFrame, void **aFrame){
746 if( mallocLogEnabled ){ 753 if( mallocLogEnabled ){
747 MallocLog *pLog; 754 MallocLog *pLog;
748 Tcl_HashEntry *pEntry; 755 Tcl_HashEntry *pEntry;
749 int isNew; 756 int isNew;
750 757
751 int aKey[MALLOC_LOG_KEYINTS]; 758 int aKey[MALLOC_LOG_KEYINTS];
752 int nKey = sizeof(int)*MALLOC_LOG_KEYINTS; 759 unsigned int nKey = sizeof(int)*MALLOC_LOG_KEYINTS;
753 760
754 memset(aKey, 0, nKey); 761 memset(aKey, 0, nKey);
755 if( (sizeof(void*)*nFrame)<nKey ){ 762 if( (sizeof(void*)*nFrame)<nKey ){
756 nKey = nFrame*sizeof(void*); 763 nKey = nFrame*sizeof(void*);
757 } 764 }
758 memcpy(aKey, aFrame, nKey); 765 memcpy(aKey, aFrame, nKey);
759 766
760 pEntry = Tcl_CreateHashEntry(&aMallocLog, (const char *)aKey, &isNew); 767 pEntry = Tcl_CreateHashEntry(&aMallocLog, (const char *)aKey, &isNew);
761 if( isNew ){ 768 if( isNew ){
762 pLog = (MallocLog *)Tcl_Alloc(sizeof(MallocLog)); 769 pLog = (MallocLog *)Tcl_Alloc(sizeof(MallocLog));
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 } 880 }
874 881
875 return TCL_OK; 882 return TCL_OK;
876 } 883 }
877 884
878 /* 885 /*
879 ** Usage: sqlite3_config_scratch SIZE N 886 ** Usage: sqlite3_config_scratch SIZE N
880 ** 887 **
881 ** Set the scratch memory buffer using SQLITE_CONFIG_SCRATCH. 888 ** Set the scratch memory buffer using SQLITE_CONFIG_SCRATCH.
882 ** The buffer is static and is of limited size. N might be 889 ** The buffer is static and is of limited size. N might be
883 ** adjusted downward as needed to accomodate the requested size. 890 ** adjusted downward as needed to accommodate the requested size.
884 ** The revised value of N is returned. 891 ** The revised value of N is returned.
885 ** 892 **
886 ** A negative SIZE causes the buffer pointer to be NULL. 893 ** A negative SIZE causes the buffer pointer to be NULL.
887 */ 894 */
888 static int test_config_scratch( 895 static int test_config_scratch(
889 void * clientData, 896 void * clientData,
890 Tcl_Interp *interp, 897 Tcl_Interp *interp,
891 int objc, 898 int objc,
892 Tcl_Obj *CONST objv[] 899 Tcl_Obj *CONST objv[]
893 ){ 900 ){
(...skipping 19 matching lines...) Expand all
913 Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(N)); 920 Tcl_ListObjAppendElement(0, pResult, Tcl_NewIntObj(N));
914 Tcl_SetObjResult(interp, pResult); 921 Tcl_SetObjResult(interp, pResult);
915 return TCL_OK; 922 return TCL_OK;
916 } 923 }
917 924
918 /* 925 /*
919 ** Usage: sqlite3_config_pagecache SIZE N 926 ** Usage: sqlite3_config_pagecache SIZE N
920 ** 927 **
921 ** Set the page-cache memory buffer using SQLITE_CONFIG_PAGECACHE. 928 ** Set the page-cache memory buffer using SQLITE_CONFIG_PAGECACHE.
922 ** The buffer is static and is of limited size. N might be 929 ** The buffer is static and is of limited size. N might be
923 ** adjusted downward as needed to accomodate the requested size. 930 ** adjusted downward as needed to accommodate the requested size.
924 ** The revised value of N is returned. 931 ** The revised value of N is returned.
925 ** 932 **
926 ** A negative SIZE causes the buffer pointer to be NULL. 933 ** A negative SIZE causes the buffer pointer to be NULL.
927 */ 934 */
928 static int test_config_pagecache( 935 static int test_config_pagecache(
929 void * clientData, 936 void * clientData,
930 Tcl_Interp *interp, 937 Tcl_Interp *interp,
931 int objc, 938 int objc,
932 Tcl_Obj *CONST objv[] 939 Tcl_Obj *CONST objv[]
933 ){ 940 ){
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 /* 1033 /*
1027 ** Usage: sqlite3_config_lookaside SIZE COUNT 1034 ** Usage: sqlite3_config_lookaside SIZE COUNT
1028 ** 1035 **
1029 */ 1036 */
1030 static int test_config_lookaside( 1037 static int test_config_lookaside(
1031 void * clientData, 1038 void * clientData,
1032 Tcl_Interp *interp, 1039 Tcl_Interp *interp,
1033 int objc, 1040 int objc,
1034 Tcl_Obj *CONST objv[] 1041 Tcl_Obj *CONST objv[]
1035 ){ 1042 ){
1036 int rc;
1037 int sz, cnt; 1043 int sz, cnt;
1038 Tcl_Obj *pRet; 1044 Tcl_Obj *pRet;
1039 if( objc!=3 ){ 1045 if( objc!=3 ){
1040 Tcl_WrongNumArgs(interp, 1, objv, "SIZE COUNT"); 1046 Tcl_WrongNumArgs(interp, 1, objv, "SIZE COUNT");
1041 return TCL_ERROR; 1047 return TCL_ERROR;
1042 } 1048 }
1043 if( Tcl_GetIntFromObj(interp, objv[1], &sz) ) return TCL_ERROR; 1049 if( Tcl_GetIntFromObj(interp, objv[1], &sz) ) return TCL_ERROR;
1044 if( Tcl_GetIntFromObj(interp, objv[2], &cnt) ) return TCL_ERROR; 1050 if( Tcl_GetIntFromObj(interp, objv[2], &cnt) ) return TCL_ERROR;
1045 pRet = Tcl_NewObj(); 1051 pRet = Tcl_NewObj();
1046 Tcl_ListObjAppendElement( 1052 Tcl_ListObjAppendElement(
1047 interp, pRet, Tcl_NewIntObj(sqlite3GlobalConfig.szLookaside) 1053 interp, pRet, Tcl_NewIntObj(sqlite3GlobalConfig.szLookaside)
1048 ); 1054 );
1049 Tcl_ListObjAppendElement( 1055 Tcl_ListObjAppendElement(
1050 interp, pRet, Tcl_NewIntObj(sqlite3GlobalConfig.nLookaside) 1056 interp, pRet, Tcl_NewIntObj(sqlite3GlobalConfig.nLookaside)
1051 ); 1057 );
1052 rc = sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, cnt); 1058 sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, cnt);
1053 Tcl_SetObjResult(interp, pRet); 1059 Tcl_SetObjResult(interp, pRet);
1054 return TCL_OK; 1060 return TCL_OK;
1055 } 1061 }
1056 1062
1057 1063
1058 /* 1064 /*
1059 ** Usage: sqlite3_db_config_lookaside CONNECTION BUFID SIZE COUNT 1065 ** Usage: sqlite3_db_config_lookaside CONNECTION BUFID SIZE COUNT
1060 ** 1066 **
1061 ** There are two static buffers with BUFID 1 and 2. Each static buffer 1067 ** There are two static buffers with BUFID 1 and 2. Each static buffer
1062 ** is 10KB in size. A BUFID of 0 indicates that the buffer should be NULL 1068 ** is 10KB in size. A BUFID of 0 indicates that the buffer should be NULL
1063 ** which will cause sqlite3_db_config() to allocate space on its own. 1069 ** which will cause sqlite3_db_config() to allocate space on its own.
1064 */ 1070 */
1065 static int test_db_config_lookaside( 1071 static int test_db_config_lookaside(
1066 void * clientData, 1072 void * clientData,
1067 Tcl_Interp *interp, 1073 Tcl_Interp *interp,
1068 int objc, 1074 int objc,
1069 Tcl_Obj *CONST objv[] 1075 Tcl_Obj *CONST objv[]
1070 ){ 1076 ){
1071 int rc; 1077 int rc;
1072 int sz, cnt; 1078 int sz, cnt;
1073 sqlite3 *db; 1079 sqlite3 *db;
1074 int bufid; 1080 int bufid;
1075 static char azBuf[2][10000]; 1081 static char azBuf[2][10000];
1076 int getDbPointer(Tcl_Interp*, const char*, sqlite3**); 1082 extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
1077 if( objc!=5 ){ 1083 if( objc!=5 ){
1078 Tcl_WrongNumArgs(interp, 1, objv, "BUFID SIZE COUNT"); 1084 Tcl_WrongNumArgs(interp, 1, objv, "BUFID SIZE COUNT");
1079 return TCL_ERROR; 1085 return TCL_ERROR;
1080 } 1086 }
1081 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; 1087 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
1082 if( Tcl_GetIntFromObj(interp, objv[2], &bufid) ) return TCL_ERROR; 1088 if( Tcl_GetIntFromObj(interp, objv[2], &bufid) ) return TCL_ERROR;
1083 if( Tcl_GetIntFromObj(interp, objv[3], &sz) ) return TCL_ERROR; 1089 if( Tcl_GetIntFromObj(interp, objv[3], &sz) ) return TCL_ERROR;
1084 if( Tcl_GetIntFromObj(interp, objv[4], &cnt) ) return TCL_ERROR; 1090 if( Tcl_GetIntFromObj(interp, objv[4], &cnt) ) return TCL_ERROR;
1085 if( bufid==0 ){ 1091 if( bufid==0 ){
1086 rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, 0, sz, cnt); 1092 rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, 0, sz, cnt);
1087 }else if( bufid>=1 && bufid<=2 && sz*cnt<=sizeof(azBuf[0]) ){ 1093 }else if( bufid>=1 && bufid<=2 && sz*cnt<=sizeof(azBuf[0]) ){
1088 rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, azBuf[bufid], sz,cnt); 1094 rc = sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, azBuf[bufid], sz,cnt);
1089 }else{ 1095 }else{
1090 Tcl_AppendResult(interp, "illegal arguments - see documentation", (char*)0); 1096 Tcl_AppendResult(interp, "illegal arguments - see documentation", (char*)0);
1091 return TCL_ERROR; 1097 return TCL_ERROR;
1092 } 1098 }
1093 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); 1099 Tcl_SetObjResult(interp, Tcl_NewIntObj(rc));
1094 return TCL_OK; 1100 return TCL_OK;
1095 } 1101 }
1096 1102
1097 /* 1103 /*
1098 ** Usage: 1104 ** Usage: sqlite3_config_heap NBYTE NMINALLOC
1099 **
1100 ** sqlite3_config_heap NBYTE NMINALLOC
1101 */ 1105 */
1102 static int test_config_heap( 1106 static int test_config_heap(
1103 void * clientData, 1107 void * clientData,
1104 Tcl_Interp *interp, 1108 Tcl_Interp *interp,
1105 int objc, 1109 int objc,
1106 Tcl_Obj *CONST objv[] 1110 Tcl_Obj *CONST objv[]
1107 ){ 1111 ){
1108 static char *zBuf; /* Use this memory */ 1112 static char *zBuf; /* Use this memory */
1109 static int szBuf; /* Bytes allocated for zBuf */
1110 int nByte; /* Size of buffer to pass to sqlite3_config() */ 1113 int nByte; /* Size of buffer to pass to sqlite3_config() */
1111 int nMinAlloc; /* Size of minimum allocation */ 1114 int nMinAlloc; /* Size of minimum allocation */
1112 int rc; /* Return code of sqlite3_config() */ 1115 int rc; /* Return code of sqlite3_config() */
1113 1116
1114 Tcl_Obj * CONST *aArg = &objv[1]; 1117 Tcl_Obj * CONST *aArg = &objv[1];
1115 int nArg = objc-1; 1118 int nArg = objc-1;
1116 1119
1117 if( nArg!=2 ){ 1120 if( nArg!=2 ){
1118 Tcl_WrongNumArgs(interp, 1, objv, "NBYTE NMINALLOC"); 1121 Tcl_WrongNumArgs(interp, 1, objv, "NBYTE NMINALLOC");
1119 return TCL_ERROR; 1122 return TCL_ERROR;
1120 } 1123 }
1121 if( Tcl_GetIntFromObj(interp, aArg[0], &nByte) ) return TCL_ERROR; 1124 if( Tcl_GetIntFromObj(interp, aArg[0], &nByte) ) return TCL_ERROR;
1122 if( Tcl_GetIntFromObj(interp, aArg[1], &nMinAlloc) ) return TCL_ERROR; 1125 if( Tcl_GetIntFromObj(interp, aArg[1], &nMinAlloc) ) return TCL_ERROR;
1123 1126
1124 if( nByte==0 ){ 1127 if( nByte==0 ){
1125 free( zBuf ); 1128 free( zBuf );
1126 zBuf = 0; 1129 zBuf = 0;
1127 szBuf = 0;
1128 rc = sqlite3_config(SQLITE_CONFIG_HEAP, (void*)0, 0, 0); 1130 rc = sqlite3_config(SQLITE_CONFIG_HEAP, (void*)0, 0, 0);
1129 }else{ 1131 }else{
1130 zBuf = realloc(zBuf, nByte); 1132 zBuf = realloc(zBuf, nByte);
1131 szBuf = nByte;
1132 rc = sqlite3_config(SQLITE_CONFIG_HEAP, zBuf, nByte, nMinAlloc); 1133 rc = sqlite3_config(SQLITE_CONFIG_HEAP, zBuf, nByte, nMinAlloc);
1133 } 1134 }
1134 1135
1135 Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE); 1136 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1136 return TCL_OK; 1137 return TCL_OK;
1137 } 1138 }
1138 1139
1139 /* 1140 /*
1140 ** tclcmd: sqlite3_config_error [DB] 1141 ** Usage: sqlite3_config_heap_size NBYTE
1142 */
1143 static int test_config_heap_size(
1144 void * clientData,
1145 Tcl_Interp *interp,
1146 int objc,
1147 Tcl_Obj *CONST objv[]
1148 ){
1149 int nByte; /* Size to pass to sqlite3_config() */
1150 int rc; /* Return code of sqlite3_config() */
1151
1152 Tcl_Obj * CONST *aArg = &objv[1];
1153 int nArg = objc-1;
1154
1155 if( nArg!=1 ){
1156 Tcl_WrongNumArgs(interp, 1, objv, "NBYTE");
1157 return TCL_ERROR;
1158 }
1159 if( Tcl_GetIntFromObj(interp, aArg[0], &nByte) ) return TCL_ERROR;
1160
1161 rc = sqlite3_config(SQLITE_CONFIG_WIN32_HEAPSIZE, nByte);
1162
1163 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1164 return TCL_OK;
1165 }
1166
1167 /*
1168 ** Usage: sqlite3_config_error [DB]
1141 ** 1169 **
1142 ** Invoke sqlite3_config() or sqlite3_db_config() with invalid 1170 ** Invoke sqlite3_config() or sqlite3_db_config() with invalid
1143 ** opcodes and verify that they return errors. 1171 ** opcodes and verify that they return errors.
1144 */ 1172 */
1145 static int test_config_error( 1173 static int test_config_error(
1146 void * clientData, 1174 void * clientData,
1147 Tcl_Interp *interp, 1175 Tcl_Interp *interp,
1148 int objc, 1176 int objc,
1149 Tcl_Obj *CONST objv[] 1177 Tcl_Obj *CONST objv[]
1150 ){ 1178 ){
1151 sqlite3 *db; 1179 sqlite3 *db;
1152 int getDbPointer(Tcl_Interp*, const char*, sqlite3**); 1180 extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
1153 1181
1154 if( objc!=2 && objc!=1 ){ 1182 if( objc!=2 && objc!=1 ){
1155 Tcl_WrongNumArgs(interp, 1, objv, "[DB]"); 1183 Tcl_WrongNumArgs(interp, 1, objv, "[DB]");
1156 return TCL_ERROR; 1184 return TCL_ERROR;
1157 } 1185 }
1158 if( objc==2 ){ 1186 if( objc==2 ){
1159 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; 1187 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
1160 if( sqlite3_db_config(db, 99999)!=SQLITE_ERROR ){ 1188 if( sqlite3_db_config(db, 99999)!=SQLITE_ERROR ){
1161 Tcl_AppendResult(interp, 1189 Tcl_AppendResult(interp,
1162 "sqlite3_db_config(db, 99999) does not return SQLITE_ERROR", 1190 "sqlite3_db_config(db, 99999) does not return SQLITE_ERROR",
1163 (char*)0); 1191 (char*)0);
1164 return TCL_ERROR; 1192 return TCL_ERROR;
1165 } 1193 }
1166 }else{ 1194 }else{
1167 if( sqlite3_config(99999)!=SQLITE_ERROR ){ 1195 if( sqlite3_config(99999)!=SQLITE_ERROR ){
1168 Tcl_AppendResult(interp, 1196 Tcl_AppendResult(interp,
1169 "sqlite3_config(99999) does not return SQLITE_ERROR", 1197 "sqlite3_config(99999) does not return SQLITE_ERROR",
1170 (char*)0); 1198 (char*)0);
1171 return TCL_ERROR; 1199 return TCL_ERROR;
1172 } 1200 }
1173 } 1201 }
1174 return TCL_OK; 1202 return TCL_OK;
1175 } 1203 }
1176 1204
1177 /* 1205 /*
1178 ** Usage: 1206 ** Usage: sqlite3_config_uri BOOLEAN
1179 ** 1207 **
1180 ** sqlite3_dump_memsys3 FILENAME 1208 ** Enables or disables interpretation of URI parameters by default using
1181 ** sqlite3_dump_memsys5 FILENAME 1209 ** SQLITE_CONFIG_URI.
1210 */
1211 static int test_config_uri(
1212 void * clientData,
1213 Tcl_Interp *interp,
1214 int objc,
1215 Tcl_Obj *CONST objv[]
1216 ){
1217 int rc;
1218 int bOpenUri;
1219
1220 if( objc!=2 ){
1221 Tcl_WrongNumArgs(interp, 1, objv, "BOOL");
1222 return TCL_ERROR;
1223 }
1224 if( Tcl_GetBooleanFromObj(interp, objv[1], &bOpenUri) ){
1225 return TCL_ERROR;
1226 }
1227
1228 rc = sqlite3_config(SQLITE_CONFIG_URI, bOpenUri);
1229 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1230
1231 return TCL_OK;
1232 }
1233
1234 /*
1235 ** Usage: sqlite3_config_cis BOOLEAN
1236 **
1237 ** Enables or disables the use of the covering-index scan optimization.
1238 ** SQLITE_CONFIG_COVERING_INDEX_SCAN.
1239 */
1240 static int test_config_cis(
1241 void * clientData,
1242 Tcl_Interp *interp,
1243 int objc,
1244 Tcl_Obj *CONST objv[]
1245 ){
1246 int rc;
1247 int bUseCis;
1248
1249 if( objc!=2 ){
1250 Tcl_WrongNumArgs(interp, 1, objv, "BOOL");
1251 return TCL_ERROR;
1252 }
1253 if( Tcl_GetBooleanFromObj(interp, objv[1], &bUseCis) ){
1254 return TCL_ERROR;
1255 }
1256
1257 rc = sqlite3_config(SQLITE_CONFIG_COVERING_INDEX_SCAN, bUseCis);
1258 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1259
1260 return TCL_OK;
1261 }
1262
1263
1264 /*
1265 ** Usage: sqlite3_dump_memsys3 FILENAME
1266 ** sqlite3_dump_memsys5 FILENAME
1182 ** 1267 **
1183 ** Write a summary of unfreed memsys3 allocations to FILENAME. 1268 ** Write a summary of unfreed memsys3 allocations to FILENAME.
1184 */ 1269 */
1185 static int test_dump_memsys3( 1270 static int test_dump_memsys3(
1186 void * clientData, 1271 void * clientData,
1187 Tcl_Interp *interp, 1272 Tcl_Interp *interp,
1188 int objc, 1273 int objc,
1189 Tcl_Obj *CONST objv[] 1274 Tcl_Obj *CONST objv[]
1190 ){ 1275 ){
1191 if( objc!=2 ){ 1276 if( objc!=2 ){
1192 Tcl_WrongNumArgs(interp, 1, objv, "FILENAME"); 1277 Tcl_WrongNumArgs(interp, 1, objv, "FILENAME");
1193 return TCL_ERROR; 1278 return TCL_ERROR;
1194 } 1279 }
1195 1280
1196 switch( (int)clientData ){ 1281 switch( SQLITE_PTR_TO_INT(clientData) ){
1197 case 3: { 1282 case 3: {
1198 #ifdef SQLITE_ENABLE_MEMSYS3 1283 #ifdef SQLITE_ENABLE_MEMSYS3
1199 extern void sqlite3Memsys3Dump(const char*); 1284 extern void sqlite3Memsys3Dump(const char*);
1200 sqlite3Memsys3Dump(Tcl_GetString(objv[1])); 1285 sqlite3Memsys3Dump(Tcl_GetString(objv[1]));
1201 break; 1286 break;
1202 #endif 1287 #endif
1203 } 1288 }
1204 case 5: { 1289 case 5: {
1205 #ifdef SQLITE_ENABLE_MEMSYS5 1290 #ifdef SQLITE_ENABLE_MEMSYS5
1206 extern void sqlite3Memsys5Dump(const char*); 1291 extern void sqlite3Memsys5Dump(const char*);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 static int test_db_status( 1363 static int test_db_status(
1279 void * clientData, 1364 void * clientData,
1280 Tcl_Interp *interp, 1365 Tcl_Interp *interp,
1281 int objc, 1366 int objc,
1282 Tcl_Obj *CONST objv[] 1367 Tcl_Obj *CONST objv[]
1283 ){ 1368 ){
1284 int rc, iValue, mxValue; 1369 int rc, iValue, mxValue;
1285 int i, op, resetFlag; 1370 int i, op, resetFlag;
1286 const char *zOpName; 1371 const char *zOpName;
1287 sqlite3 *db; 1372 sqlite3 *db;
1288 int getDbPointer(Tcl_Interp*, const char*, sqlite3**); 1373 extern int getDbPointer(Tcl_Interp*, const char*, sqlite3**);
1289 static const struct { 1374 static const struct {
1290 const char *zName; 1375 const char *zName;
1291 int op; 1376 int op;
1292 } aOp[] = { 1377 } aOp[] = {
1293 { "LOOKASIDE_USED", SQLITE_DBSTATUS_LOOKASIDE_USED }, 1378 { "LOOKASIDE_USED", SQLITE_DBSTATUS_LOOKASIDE_USED },
1294 { "CACHE_USED", SQLITE_DBSTATUS_CACHE_USED }, 1379 { "CACHE_USED", SQLITE_DBSTATUS_CACHE_USED },
1295 { "SCHEMA_USED", SQLITE_DBSTATUS_SCHEMA_USED }, 1380 { "SCHEMA_USED", SQLITE_DBSTATUS_SCHEMA_USED },
1296 { "STMT_USED", SQLITE_DBSTATUS_STMT_USED }, 1381 { "STMT_USED", SQLITE_DBSTATUS_STMT_USED },
1297 { "LOOKASIDE_HIT", SQLITE_DBSTATUS_LOOKASIDE_HIT }, 1382 { "LOOKASIDE_HIT", SQLITE_DBSTATUS_LOOKASIDE_HIT },
1298 { "LOOKASIDE_MISS_SIZE", SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE }, 1383 { "LOOKASIDE_MISS_SIZE", SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE },
1299 { "LOOKASIDE_MISS_FULL", SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL } 1384 { "LOOKASIDE_MISS_FULL", SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL },
1385 { "CACHE_HIT", SQLITE_DBSTATUS_CACHE_HIT },
1386 { "CACHE_MISS", SQLITE_DBSTATUS_CACHE_MISS },
1387 { "CACHE_WRITE", SQLITE_DBSTATUS_CACHE_WRITE },
1388 { "DEFERRED_FKS", SQLITE_DBSTATUS_DEFERRED_FKS }
1300 }; 1389 };
1301 Tcl_Obj *pResult; 1390 Tcl_Obj *pResult;
1302 if( objc!=4 ){ 1391 if( objc!=4 ){
1303 Tcl_WrongNumArgs(interp, 1, objv, "PARAMETER RESETFLAG"); 1392 Tcl_WrongNumArgs(interp, 1, objv, "DB PARAMETER RESETFLAG");
1304 return TCL_ERROR; 1393 return TCL_ERROR;
1305 } 1394 }
1306 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; 1395 if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
1307 zOpName = Tcl_GetString(objv[2]); 1396 zOpName = Tcl_GetString(objv[2]);
1308 if( memcmp(zOpName, "SQLITE_", 7)==0 ) zOpName += 7; 1397 if( memcmp(zOpName, "SQLITE_", 7)==0 ) zOpName += 7;
1309 if( memcmp(zOpName, "DBSTATUS_", 9)==0 ) zOpName += 9; 1398 if( memcmp(zOpName, "DBSTATUS_", 9)==0 ) zOpName += 9;
1310 for(i=0; i<ArraySize(aOp); i++){ 1399 for(i=0; i<ArraySize(aOp); i++){
1311 if( strcmp(aOp[i].zName, zOpName)==0 ){ 1400 if( strcmp(aOp[i].zName, zOpName)==0 ){
1312 op = aOp[i].op; 1401 op = aOp[i].op;
1313 break; 1402 break;
(...skipping 27 matching lines...) Expand all
1341 int isInstall; 1430 int isInstall;
1342 1431
1343 if( objc!=2 ){ 1432 if( objc!=2 ){
1344 Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN"); 1433 Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN");
1345 return TCL_ERROR; 1434 return TCL_ERROR;
1346 } 1435 }
1347 if( TCL_OK!=Tcl_GetBooleanFromObj(interp, objv[1], &isInstall) ){ 1436 if( TCL_OK!=Tcl_GetBooleanFromObj(interp, objv[1], &isInstall) ){
1348 return TCL_ERROR; 1437 return TCL_ERROR;
1349 } 1438 }
1350 rc = faultsimInstall(isInstall); 1439 rc = faultsimInstall(isInstall);
1351 Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE); 1440 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1352 return TCL_OK; 1441 return TCL_OK;
1353 } 1442 }
1354 1443
1355 /* 1444 /*
1356 ** sqlite3_install_memsys3 1445 ** sqlite3_install_memsys3
1357 */ 1446 */
1358 static int test_install_memsys3( 1447 static int test_install_memsys3(
1359 void * clientData, 1448 void * clientData,
1360 Tcl_Interp *interp, 1449 Tcl_Interp *interp,
1361 int objc, 1450 int objc,
1362 Tcl_Obj *CONST objv[] 1451 Tcl_Obj *CONST objv[]
1363 ){ 1452 ){
1364 int rc = SQLITE_MISUSE; 1453 int rc = SQLITE_MISUSE;
1365 #ifdef SQLITE_ENABLE_MEMSYS3 1454 #ifdef SQLITE_ENABLE_MEMSYS3
1366 const sqlite3_mem_methods *sqlite3MemGetMemsys3(void); 1455 const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
1367 rc = sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetMemsys3()); 1456 rc = sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetMemsys3());
1368 #endif 1457 #endif
1369 Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE); 1458 Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE);
1370 return TCL_OK; 1459 return TCL_OK;
1371 } 1460 }
1372 1461
1373 static int test_vfs_oom_test( 1462 static int test_vfs_oom_test(
1374 void * clientData, 1463 void * clientData,
1375 Tcl_Interp *interp, 1464 Tcl_Interp *interp,
1376 int objc, 1465 int objc,
1377 Tcl_Obj *CONST objv[] 1466 Tcl_Obj *CONST objv[]
1378 ){ 1467 ){
1379 extern int sqlite3_memdebug_vfs_oom_test; 1468 extern int sqlite3_memdebug_vfs_oom_test;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 { "sqlite3_memdebug_settitle", test_memdebug_settitle ,0 }, 1501 { "sqlite3_memdebug_settitle", test_memdebug_settitle ,0 },
1413 { "sqlite3_memdebug_malloc_count", test_memdebug_malloc_count ,0 }, 1502 { "sqlite3_memdebug_malloc_count", test_memdebug_malloc_count ,0 },
1414 { "sqlite3_memdebug_log", test_memdebug_log ,0 }, 1503 { "sqlite3_memdebug_log", test_memdebug_log ,0 },
1415 { "sqlite3_config_scratch", test_config_scratch ,0 }, 1504 { "sqlite3_config_scratch", test_config_scratch ,0 },
1416 { "sqlite3_config_pagecache", test_config_pagecache ,0 }, 1505 { "sqlite3_config_pagecache", test_config_pagecache ,0 },
1417 { "sqlite3_config_alt_pcache", test_alt_pcache ,0 }, 1506 { "sqlite3_config_alt_pcache", test_alt_pcache ,0 },
1418 { "sqlite3_status", test_status ,0 }, 1507 { "sqlite3_status", test_status ,0 },
1419 { "sqlite3_db_status", test_db_status ,0 }, 1508 { "sqlite3_db_status", test_db_status ,0 },
1420 { "install_malloc_faultsim", test_install_malloc_faultsim ,0 }, 1509 { "install_malloc_faultsim", test_install_malloc_faultsim ,0 },
1421 { "sqlite3_config_heap", test_config_heap ,0 }, 1510 { "sqlite3_config_heap", test_config_heap ,0 },
1511 { "sqlite3_config_heap_size", test_config_heap_size ,0 },
1422 { "sqlite3_config_memstatus", test_config_memstatus ,0 }, 1512 { "sqlite3_config_memstatus", test_config_memstatus ,0 },
1423 { "sqlite3_config_lookaside", test_config_lookaside ,0 }, 1513 { "sqlite3_config_lookaside", test_config_lookaside ,0 },
1424 { "sqlite3_config_error", test_config_error ,0 }, 1514 { "sqlite3_config_error", test_config_error ,0 },
1515 { "sqlite3_config_uri", test_config_uri ,0 },
1516 { "sqlite3_config_cis", test_config_cis ,0 },
1425 { "sqlite3_db_config_lookaside",test_db_config_lookaside ,0 }, 1517 { "sqlite3_db_config_lookaside",test_db_config_lookaside ,0 },
1426 { "sqlite3_dump_memsys3", test_dump_memsys3 ,3 }, 1518 { "sqlite3_dump_memsys3", test_dump_memsys3 ,3 },
1427 { "sqlite3_dump_memsys5", test_dump_memsys3 ,5 }, 1519 { "sqlite3_dump_memsys5", test_dump_memsys3 ,5 },
1428 { "sqlite3_install_memsys3", test_install_memsys3 ,0 }, 1520 { "sqlite3_install_memsys3", test_install_memsys3 ,0 },
1429 { "sqlite3_memdebug_vfs_oom_test", test_vfs_oom_test ,0 }, 1521 { "sqlite3_memdebug_vfs_oom_test", test_vfs_oom_test ,0 },
1430 }; 1522 };
1431 int i; 1523 int i;
1432 for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ 1524 for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){
1433 ClientData c = (ClientData)aObjCmd[i].clientData; 1525 ClientData c = (ClientData)SQLITE_INT_TO_PTR(aObjCmd[i].clientData);
1434 Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, c, 0); 1526 Tcl_CreateObjCommand(interp, aObjCmd[i].zName, aObjCmd[i].xProc, c, 0);
1435 } 1527 }
1436 return TCL_OK; 1528 return TCL_OK;
1437 } 1529 }
1438 #endif 1530 #endif
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/src/test_loadext.c ('k') | third_party/sqlite/sqlite-src-3080704/src/test_multiplex.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698