mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Changes to the way that the default BINARY collating sequence is recorded
result in a slightly smaller and slightly faster executable. More work could be done to make this cleaner. FossilOrigin-Name: 2081d75767dc590b4c8457e5f8e5f18ba5f8eaa7
This commit is contained in:
26
manifest
26
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Simplification\sto\sthe\sxfer-optimization\slogic.
|
C Changes\sto\sthe\sway\sthat\sthe\sdefault\sBINARY\scollating\ssequence\sis\srecorded\nresult\sin\sa\sslightly\ssmaller\sand\sslightly\sfaster\sexecutable.\s\sMore\swork\scould\nbe\sdone\sto\smake\sthis\scleaner.
|
||||||
D 2015-12-30T15:18:16.130
|
D 2015-12-30T16:51:20.187
|
||||||
F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
|
F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 5fff077fcc46de7714ed6eebb6159a4c00eab751
|
F Makefile.msc 5fff077fcc46de7714ed6eebb6159a4c00eab751
|
||||||
@@ -279,7 +279,7 @@ F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
|
|||||||
F src/btree.c 84ede51e371a11c3dbb3e24ccc5e3e99594a6c00
|
F src/btree.c 84ede51e371a11c3dbb3e24ccc5e3e99594a6c00
|
||||||
F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
|
F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
|
||||||
F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
|
F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
|
||||||
F src/build.c e83da4d004a4e050c01acbb821ff7a7b1019c29b
|
F src/build.c 5a8611a01cbf67c736d81304e054ec361ef8963d
|
||||||
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
|
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
|
||||||
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
||||||
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
||||||
@@ -288,17 +288,17 @@ F src/dbstat.c ffd63fc8ba7541476ced189b95e95d7f2bc63f78
|
|||||||
F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
|
F src/delete.c 00af9f08a15ddc5cba5962d3d3e5bf2d67b2e7da
|
||||||
F src/expr.c 38790e65d1219f2b7dc26458f39a5252fe7c60cd
|
F src/expr.c 38790e65d1219f2b7dc26458f39a5252fe7c60cd
|
||||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||||
F src/fkey.c 31900763094a3736a5fc887469202eb579fef2d0
|
F src/fkey.c e18b3dff7d47c7bcac5ac4fc178a89b9fd322b44
|
||||||
F src/func.c cf5e10af9125b245f1b962e8ba4d520a37818795
|
F src/func.c cf5e10af9125b245f1b962e8ba4d520a37818795
|
||||||
F src/global.c 508e4087f7b41d688e4762dcf4d4fe28cfbc87f9
|
F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260
|
||||||
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
||||||
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
||||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||||
F src/insert.c 756ae3281e465e5d489a3409ccb4f1041069d530
|
F src/insert.c 6b45cc86967da11aa024d034745f93f66d53f650
|
||||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||||
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
|
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
|
||||||
F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
|
F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
|
||||||
F src/main.c 2f33510a6a392c606fe64964e695e55ad124242f
|
F src/main.c b9641a4f650230bfc5dbb0bebf7b33ff4d27586a
|
||||||
F src/malloc.c 8f787669e79de26efc42272b5797bc00fff527c6
|
F src/malloc.c 8f787669e79de26efc42272b5797bc00fff527c6
|
||||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||||
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
||||||
@@ -338,7 +338,7 @@ F src/shell.c abbc74ea43dbf2f306ea18282d666683fb5efab2
|
|||||||
F src/sqlite.h.in 7d87d71b9a4689c51fa092f48f16590ff71558e3
|
F src/sqlite.h.in 7d87d71b9a4689c51fa092f48f16590ff71558e3
|
||||||
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
||||||
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
||||||
F src/sqliteInt.h 6e0c1082268e99aa337de1547df32b220e812fb3
|
F src/sqliteInt.h 526c8514d0cb0768d014d04445c6eebd1d0b1a2c
|
||||||
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
||||||
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
||||||
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
||||||
@@ -412,8 +412,8 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
|
|||||||
F src/wal.c 974928c988681c5157202c79dd9f26afaa7b5086
|
F src/wal.c 974928c988681c5157202c79dd9f26afaa7b5086
|
||||||
F src/wal.h 907943dfdef10b583e81906679a347e0ec6f1b1b
|
F src/wal.h 907943dfdef10b583e81906679a347e0ec6f1b1b
|
||||||
F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
|
F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
|
||||||
F src/where.c b18edbb9e5afabb77f4f27550c471c5c824e0fe7
|
F src/where.c c6d3d2f6af57d574a7365ee2b225a5024f2a6bec
|
||||||
F src/whereInt.h e20801d89e34de1912bb6a3babb30c390da27add
|
F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a
|
||||||
F src/wherecode.c dfbfe198e418b01f208b489e088edd230c91a4e7
|
F src/wherecode.c dfbfe198e418b01f208b489e088edd230c91a4e7
|
||||||
F src/whereexpr.c eebba8340c90de73b3d3bbe8c43b84559b8e6e2c
|
F src/whereexpr.c eebba8340c90de73b3d3bbe8c43b84559b8e6e2c
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
@@ -1406,7 +1406,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 0a99a8c4facf65ec67d8d86108c9a3f723f7cbd6
|
P f35ba018da843897acca58f70541b940598bc271
|
||||||
R 5e4c4e8e37aad85efb78266b71a902b5
|
R 73bd359208653598962819ad055e1d11
|
||||||
U drh
|
U drh
|
||||||
Z 91b12f25ba51396a818d59a327f065c9
|
Z 53e385ce34cbe66e9c94953f6b43b3a2
|
||||||
|
@@ -1 +1 @@
|
|||||||
f35ba018da843897acca58f70541b940598bc271
|
2081d75767dc590b4c8457e5f8e5f18ba5f8eaa7
|
17
src/build.c
17
src/build.c
@@ -1635,7 +1635,7 @@ static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){
|
|||||||
zExtra = sqlite3DbMallocZero(db, nByte);
|
zExtra = sqlite3DbMallocZero(db, nByte);
|
||||||
if( zExtra==0 ) return SQLITE_NOMEM;
|
if( zExtra==0 ) return SQLITE_NOMEM;
|
||||||
memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn);
|
memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn);
|
||||||
pIdx->azColl = (char**)zExtra;
|
pIdx->azColl = (const char**)zExtra;
|
||||||
zExtra += sizeof(char*)*N;
|
zExtra += sizeof(char*)*N;
|
||||||
memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn);
|
memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn);
|
||||||
pIdx->aiColumn = (i16*)zExtra;
|
pIdx->aiColumn = (i16*)zExtra;
|
||||||
@@ -1816,7 +1816,7 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
|
|||||||
if( !hasColumn(pPk->aiColumn, j, i) ){
|
if( !hasColumn(pPk->aiColumn, j, i) ){
|
||||||
assert( j<pPk->nColumn );
|
assert( j<pPk->nColumn );
|
||||||
pPk->aiColumn[j] = i;
|
pPk->aiColumn[j] = i;
|
||||||
pPk->azColl[j] = "BINARY";
|
pPk->azColl[j] = sqlite3StrBINARY;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2866,7 +2866,7 @@ Index *sqlite3AllocateIndexObject(
|
|||||||
p = sqlite3DbMallocZero(db, nByte + nExtra);
|
p = sqlite3DbMallocZero(db, nByte + nExtra);
|
||||||
if( p ){
|
if( p ){
|
||||||
char *pExtra = ((char*)p)+ROUND8(sizeof(Index));
|
char *pExtra = ((char*)p)+ROUND8(sizeof(Index));
|
||||||
p->azColl = (char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol);
|
p->azColl = (const char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol);
|
||||||
p->aiRowLogEst = (LogEst*)pExtra; pExtra += sizeof(LogEst)*(nCol+1);
|
p->aiRowLogEst = (LogEst*)pExtra; pExtra += sizeof(LogEst)*(nCol+1);
|
||||||
p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol;
|
p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol;
|
||||||
p->aSortOrder = (u8*)pExtra;
|
p->aSortOrder = (u8*)pExtra;
|
||||||
@@ -3143,7 +3143,7 @@ Index *sqlite3CreateIndex(
|
|||||||
for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
|
for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
|
||||||
Expr *pCExpr; /* The i-th index expression */
|
Expr *pCExpr; /* The i-th index expression */
|
||||||
int requestedSortOrder; /* ASC or DESC on the i-th expression */
|
int requestedSortOrder; /* ASC or DESC on the i-th expression */
|
||||||
char *zColl; /* Collation sequence name */
|
const char *zColl; /* Collation sequence name */
|
||||||
|
|
||||||
sqlite3StringToId(pListItem->pExpr);
|
sqlite3StringToId(pListItem->pExpr);
|
||||||
sqlite3ResolveSelfReference(pParse, pTab, NC_IdxExpr, pListItem->pExpr, 0);
|
sqlite3ResolveSelfReference(pParse, pTab, NC_IdxExpr, pListItem->pExpr, 0);
|
||||||
@@ -3189,7 +3189,7 @@ Index *sqlite3CreateIndex(
|
|||||||
}else if( j>=0 ){
|
}else if( j>=0 ){
|
||||||
zColl = pTab->aCol[j].zColl;
|
zColl = pTab->aCol[j].zColl;
|
||||||
}
|
}
|
||||||
if( !zColl ) zColl = "BINARY";
|
if( !zColl ) zColl = sqlite3StrBINARY;
|
||||||
if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
|
if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
|
||||||
goto exit_create_index;
|
goto exit_create_index;
|
||||||
}
|
}
|
||||||
@@ -3218,7 +3218,7 @@ Index *sqlite3CreateIndex(
|
|||||||
assert( i==pIndex->nColumn );
|
assert( i==pIndex->nColumn );
|
||||||
}else{
|
}else{
|
||||||
pIndex->aiColumn[i] = XN_ROWID;
|
pIndex->aiColumn[i] = XN_ROWID;
|
||||||
pIndex->azColl[i] = "BINARY";
|
pIndex->azColl[i] = sqlite3StrBINARY;
|
||||||
}
|
}
|
||||||
sqlite3DefaultRowEst(pIndex);
|
sqlite3DefaultRowEst(pIndex);
|
||||||
if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex);
|
if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex);
|
||||||
@@ -4342,9 +4342,8 @@ KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
|
|||||||
if( pKey ){
|
if( pKey ){
|
||||||
assert( sqlite3KeyInfoIsWriteable(pKey) );
|
assert( sqlite3KeyInfoIsWriteable(pKey) );
|
||||||
for(i=0; i<nCol; i++){
|
for(i=0; i<nCol; i++){
|
||||||
char *zColl = pIdx->azColl[i];
|
const char *zColl = pIdx->azColl[i];
|
||||||
assert( zColl!=0 );
|
pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 :
|
||||||
pKey->aColl[i] = strcmp(zColl,"BINARY")==0 ? 0 :
|
|
||||||
sqlite3LocateCollSeq(pParse, zColl);
|
sqlite3LocateCollSeq(pParse, zColl);
|
||||||
pKey->aSortOrder[i] = pIdx->aSortOrder[i];
|
pKey->aSortOrder[i] = pIdx->aSortOrder[i];
|
||||||
}
|
}
|
||||||
|
@@ -249,7 +249,7 @@ int sqlite3FkLocateIndex(
|
|||||||
int i, j;
|
int i, j;
|
||||||
for(i=0; i<nCol; i++){
|
for(i=0; i<nCol; i++){
|
||||||
i16 iCol = pIdx->aiColumn[i]; /* Index of column in parent tbl */
|
i16 iCol = pIdx->aiColumn[i]; /* Index of column in parent tbl */
|
||||||
char *zDfltColl; /* Def. collation for column */
|
const char *zDfltColl; /* Def. collation for column */
|
||||||
char *zIdxCol; /* Name of indexed column */
|
char *zIdxCol; /* Name of indexed column */
|
||||||
|
|
||||||
if( iCol<0 ) break; /* No foreign keys against expression indexes */
|
if( iCol<0 ) break; /* No foreign keys against expression indexes */
|
||||||
@@ -258,9 +258,7 @@ int sqlite3FkLocateIndex(
|
|||||||
** the default collation sequence for the column, this index is
|
** the default collation sequence for the column, this index is
|
||||||
** unusable. Bail out early in this case. */
|
** unusable. Bail out early in this case. */
|
||||||
zDfltColl = pParent->aCol[iCol].zColl;
|
zDfltColl = pParent->aCol[iCol].zColl;
|
||||||
if( !zDfltColl ){
|
if( !zDfltColl ) zDfltColl = sqlite3StrBINARY;
|
||||||
zDfltColl = "BINARY";
|
|
||||||
}
|
|
||||||
if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
|
if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
|
||||||
|
|
||||||
zIdxCol = pParent->aCol[iCol].zName;
|
zIdxCol = pParent->aCol[iCol].zName;
|
||||||
|
@@ -260,3 +260,8 @@ int sqlite3PendingByte = 0x40000000;
|
|||||||
** the vdbe.c file.
|
** the vdbe.c file.
|
||||||
*/
|
*/
|
||||||
const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
|
const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Name of the default collating sequence
|
||||||
|
*/
|
||||||
|
const char sqlite3StrBINARY[] = "BINARY";
|
||||||
|
@@ -2052,9 +2052,10 @@ static int xferOptimization(
|
|||||||
** a VACUUM command. In that case keys may not be written in strictly
|
** a VACUUM command. In that case keys may not be written in strictly
|
||||||
** sorted order. */
|
** sorted order. */
|
||||||
for(i=0; i<pSrcIdx->nColumn; i++){
|
for(i=0; i<pSrcIdx->nColumn; i++){
|
||||||
char *zColl = pSrcIdx->azColl[i];
|
const char *zColl = pSrcIdx->azColl[i];
|
||||||
assert( zColl!=0 );
|
assert( sqlite3_stricmp(sqlite3StrBINARY, zColl)!=0
|
||||||
if( sqlite3_stricmp("BINARY", zColl) ) break;
|
|| sqlite3StrBINARY==zColl );
|
||||||
|
if( sqlite3_stricmp(sqlite3StrBINARY, zColl) ) break;
|
||||||
}
|
}
|
||||||
if( i==pSrcIdx->nColumn ){
|
if( i==pSrcIdx->nColumn ){
|
||||||
idxInsFlags = OPFLAG_USESEEKRESULT;
|
idxInsFlags = OPFLAG_USESEEKRESULT;
|
||||||
|
11
src/main.c
11
src/main.c
@@ -2829,9 +2829,9 @@ static int openDatabase(
|
|||||||
** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating
|
** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating
|
||||||
** functions:
|
** functions:
|
||||||
*/
|
*/
|
||||||
createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
|
createCollation(db, sqlite3StrBINARY, SQLITE_UTF8, 0, binCollFunc, 0);
|
||||||
createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
|
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0);
|
||||||
createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
|
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0);
|
||||||
createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
|
createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
|
||||||
createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
|
createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
|
||||||
if( db->mallocFailed ){
|
if( db->mallocFailed ){
|
||||||
@@ -2840,7 +2840,7 @@ static int openDatabase(
|
|||||||
/* EVIDENCE-OF: R-08308-17224 The default collating function for all
|
/* EVIDENCE-OF: R-08308-17224 The default collating function for all
|
||||||
** strings is BINARY.
|
** strings is BINARY.
|
||||||
*/
|
*/
|
||||||
db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
|
db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, sqlite3StrBINARY, 0);
|
||||||
assert( db->pDfltColl!=0 );
|
assert( db->pDfltColl!=0 );
|
||||||
|
|
||||||
/* Parse the filename/URI argument. */
|
/* Parse the filename/URI argument. */
|
||||||
@@ -3340,7 +3340,7 @@ int sqlite3_table_column_metadata(
|
|||||||
primarykey = 1;
|
primarykey = 1;
|
||||||
}
|
}
|
||||||
if( !zCollSeq ){
|
if( !zCollSeq ){
|
||||||
zCollSeq = "BINARY";
|
zCollSeq = sqlite3StrBINARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
error_out:
|
error_out:
|
||||||
@@ -3948,4 +3948,3 @@ void sqlite3_snapshot_free(sqlite3_snapshot *pSnapshot){
|
|||||||
sqlite3_free(pSnapshot);
|
sqlite3_free(pSnapshot);
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_ENABLE_SNAPSHOT */
|
#endif /* SQLITE_ENABLE_SNAPSHOT */
|
||||||
|
|
||||||
|
@@ -1932,7 +1932,7 @@ struct Index {
|
|||||||
Index *pNext; /* The next index associated with the same table */
|
Index *pNext; /* The next index associated with the same table */
|
||||||
Schema *pSchema; /* Schema containing this index */
|
Schema *pSchema; /* Schema containing this index */
|
||||||
u8 *aSortOrder; /* for each column: True==DESC, False==ASC */
|
u8 *aSortOrder; /* for each column: True==DESC, False==ASC */
|
||||||
char **azColl; /* Array of collation sequence names for index */
|
const char **azColl; /* Array of collation sequence names for index */
|
||||||
Expr *pPartIdxWhere; /* WHERE clause for partial indices */
|
Expr *pPartIdxWhere; /* WHERE clause for partial indices */
|
||||||
ExprList *aColExpr; /* Column expressions */
|
ExprList *aColExpr; /* Column expressions */
|
||||||
int tnum; /* DB Page containing root of this index */
|
int tnum; /* DB Page containing root of this index */
|
||||||
@@ -3699,6 +3699,7 @@ int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
|
|||||||
void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
|
void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
|
||||||
#ifndef SQLITE_AMALGAMATION
|
#ifndef SQLITE_AMALGAMATION
|
||||||
extern const unsigned char sqlite3OpcodeProperty[];
|
extern const unsigned char sqlite3OpcodeProperty[];
|
||||||
|
extern const char sqlite3StrBINARY[];
|
||||||
extern const unsigned char sqlite3UpperToLower[];
|
extern const unsigned char sqlite3UpperToLower[];
|
||||||
extern const unsigned char sqlite3CtypeMap[];
|
extern const unsigned char sqlite3CtypeMap[];
|
||||||
extern const Token sqlite3IntTokens[];
|
extern const Token sqlite3IntTokens[];
|
||||||
|
@@ -718,7 +718,7 @@ static void constructAutomaticIndex(
|
|||||||
idxCols |= cMask;
|
idxCols |= cMask;
|
||||||
pIdx->aiColumn[n] = pTerm->u.leftColumn;
|
pIdx->aiColumn[n] = pTerm->u.leftColumn;
|
||||||
pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
|
pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
|
||||||
pIdx->azColl[n] = pColl ? pColl->zName : "BINARY";
|
pIdx->azColl[n] = pColl ? pColl->zName : sqlite3StrBINARY;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -730,20 +730,20 @@ static void constructAutomaticIndex(
|
|||||||
for(i=0; i<mxBitCol; i++){
|
for(i=0; i<mxBitCol; i++){
|
||||||
if( extraCols & MASKBIT(i) ){
|
if( extraCols & MASKBIT(i) ){
|
||||||
pIdx->aiColumn[n] = i;
|
pIdx->aiColumn[n] = i;
|
||||||
pIdx->azColl[n] = "BINARY";
|
pIdx->azColl[n] = sqlite3StrBINARY;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( pSrc->colUsed & MASKBIT(BMS-1) ){
|
if( pSrc->colUsed & MASKBIT(BMS-1) ){
|
||||||
for(i=BMS-1; i<pTable->nCol; i++){
|
for(i=BMS-1; i<pTable->nCol; i++){
|
||||||
pIdx->aiColumn[n] = i;
|
pIdx->aiColumn[n] = i;
|
||||||
pIdx->azColl[n] = "BINARY";
|
pIdx->azColl[n] = sqlite3StrBINARY;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert( n==nKeyCol );
|
assert( n==nKeyCol );
|
||||||
pIdx->aiColumn[n] = XN_ROWID;
|
pIdx->aiColumn[n] = XN_ROWID;
|
||||||
pIdx->azColl[n] = "BINARY";
|
pIdx->azColl[n] = sqlite3StrBINARY;
|
||||||
|
|
||||||
/* Create the automatic index */
|
/* Create the automatic index */
|
||||||
assert( pLevel->iIdxCur>=0 );
|
assert( pLevel->iIdxCur>=0 );
|
||||||
|
@@ -288,7 +288,7 @@ struct WhereTerm {
|
|||||||
struct WhereScan {
|
struct WhereScan {
|
||||||
WhereClause *pOrigWC; /* Original, innermost WhereClause */
|
WhereClause *pOrigWC; /* Original, innermost WhereClause */
|
||||||
WhereClause *pWC; /* WhereClause currently being scanned */
|
WhereClause *pWC; /* WhereClause currently being scanned */
|
||||||
char *zCollName; /* Required collating sequence, if not NULL */
|
const char *zCollName; /* Required collating sequence, if not NULL */
|
||||||
Expr *pIdxExpr; /* Search for this index expression */
|
Expr *pIdxExpr; /* Search for this index expression */
|
||||||
char idxaff; /* Must match this affinity, if zCollName!=NULL */
|
char idxaff; /* Must match this affinity, if zCollName!=NULL */
|
||||||
unsigned char nEquiv; /* Number of entries in aEquiv[] */
|
unsigned char nEquiv; /* Number of entries in aEquiv[] */
|
||||||
|
Reference in New Issue
Block a user