mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Merge trunk enhancements.
FossilOrigin-Name: e8b02902c48f3668dcff7b1767347ac7ef3c971e
This commit is contained in:
26
manifest
26
manifest
@@ -1,5 +1,5 @@
|
||||
C Add\scode\sto\smaintain\sindexes\swith\sexpression\sarguments\sacross\sDELETE,\sINSERT,\nand\sUPDATE\sstatements.\s\sLegacy\stests\spass,\sbut\sthe\snew\scode\spaths\sare\sstill\nlargely\suntested.\s\sThe\squery\splanner\scurrently\smakes\sno\seffort\sto\suse\nexpression\sindexes.
|
||||
D 2015-08-25T16:57:52.554
|
||||
C Merge\strunk\senhancements.
|
||||
D 2015-08-25T19:24:11.597
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in e2218eb228374422969de7b1680eda6864affcef
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@@ -288,16 +288,16 @@ F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
||||
F src/ctime.c 5a0b735dc95604766f5dac73973658eef782ee8b
|
||||
F src/date.c 8ec787fed4929d8ccdf6b1bc360fccc3e1d2ca58
|
||||
F src/dbstat.c f402e77e25089c6003d0c60b3233b9b3947d599a
|
||||
F src/delete.c 07ba8cc1def3ed9a316c0073217c48ebff59062b
|
||||
F src/delete.c 224e5c9a0eae7fbdd3b461ca971465c992851354
|
||||
F src/expr.c 4a52fd29145d94c6f2e355ec67489dc8d309f05e
|
||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||
F src/fkey.c c9b63a217d86582c22121699a47f22f524608869
|
||||
F src/fkey.c 3ce33dd49f12c72376cec9adc7a4d8e7111cedcc
|
||||
F src/func.c 824bea430d3a2b7dbc62806ad54da8fdb8ed9e3f
|
||||
F src/global.c 508e4087f7b41d688e4762dcf4d4fe28cfbc87f9
|
||||
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
||||
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||
F src/insert.c 602809df9668a8418ea488a59a0bef787f0aec6f
|
||||
F src/insert.c a836e16cf9649bb48aa39ac484574a406d6d5034
|
||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
|
||||
F src/lempar.c 92bafa308607dd985ca389a788cd9e0a2b608712
|
||||
@@ -330,7 +330,7 @@ F src/parse.y f599aa5e871a493330d567ced93de696f61f48f7
|
||||
F src/pcache.c cde06aa50962595e412d497e22fd2e07878ba1f0
|
||||
F src/pcache.h 9968603796240cdf83da7e7bef76edf90619cea9
|
||||
F src/pcache1.c a3fe31b17e841ec70beee72a2c960e9c787a8857
|
||||
F src/pragma.c 669bc0fdb3fb5554e18330e8dd9743319bac16f4
|
||||
F src/pragma.c a239d2c8c6d87d589927547f234b0f6259c69f62
|
||||
F src/pragma.h 631a91c8b0e6ca8f051a1d8a4a0da4150e04620a
|
||||
F src/prepare.c 82e5db1013846a819f198336fed72c44c974e7b1
|
||||
F src/printf.c 2bc439ff20a4aad0e0ad50a37a67b5eae7d20edc
|
||||
@@ -342,7 +342,7 @@ F src/shell.c 5a08835e85c502978bde35a89d4045833f772876
|
||||
F src/sqlite.h.in 378bebc8fe6a88bade25e5f23b7e6123fdc64b00
|
||||
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
||||
F src/sqlite3ext.h f700e6a9dd1fdcccc9951ab022b366fb66b9e413
|
||||
F src/sqliteInt.h 5fe814323e6ea95685206f8764db29dba680c8e8
|
||||
F src/sqliteInt.h fd8c4823f478debee332db40222ea76c352eee37
|
||||
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
||||
F src/status.c f266ad8a2892d659b74f0f50cb6a88b6e7c12179
|
||||
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
||||
@@ -396,7 +396,7 @@ F src/threads.c 6bbcc9fe50c917864d48287b4792d46d6e873481
|
||||
F src/tokenize.c 57cb3720f53f84d811def2069c2b169b6be539a5
|
||||
F src/treeview.c c15df00728034549ff92d78ae851b44952736d3b
|
||||
F src/trigger.c 322f23aad694e8f31d384dcfa386d52a48d3c52f
|
||||
F src/update.c 798196d7693277d359846df7587fc15ee58a563f
|
||||
F src/update.c e1bea2b67d3453a4a7a49c60c48b5c1dda6d15c6
|
||||
F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
|
||||
F src/util.c bc9dd64b5db544218b871b66243871c202b2781f
|
||||
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
|
||||
@@ -414,9 +414,9 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
|
||||
F src/wal.c 6fb6b68969e4692593c2552c4e7bff5882de2cb8
|
||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||
F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
|
||||
F src/where.c 66518a14a1238611aa0744d6980b6b7f544f4816
|
||||
F src/where.c 30091fb355971e86fc4b6fa709ff7edda4b7a7d8
|
||||
F src/whereInt.h 880a8599226ac1c00203490d934f3ed79b292572
|
||||
F src/wherecode.c 69f19535a6de0cceb10e16b31a3a03463e31bc24
|
||||
F src/wherecode.c 3d9113cc307ffeed58db41fe9f2d807c94787ab5
|
||||
F src/whereexpr.c 1a308d1ee5144890d21ea9cf70d49bc96a83432b
|
||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
||||
@@ -1379,7 +1379,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 0ad0f8d77d8f95ca2ffb7745d18219f5e87dc89c
|
||||
R 457a1c92538887efc6aebf70344c3622
|
||||
P efaabdb71626bdc03768e87e186c72f6f3da75b2 1ee089a72d789002a0a377347fc51e08ab32fb14
|
||||
R 58e78bc0b300bf502ebd9a4f7f9bb701
|
||||
U drh
|
||||
Z d2f3b8f04887de8a5bca7c4f4441bcbc
|
||||
Z f8380f2d492a690cb53251fd6fe38f86
|
||||
|
||||
@@ -1 +1 @@
|
||||
efaabdb71626bdc03768e87e186c72f6f3da75b2
|
||||
e8b02902c48f3668dcff7b1767347ac7ef3c971e
|
||||
@@ -444,7 +444,7 @@ void sqlite3DeleteFrom(
|
||||
iKey = ++pParse->nMem;
|
||||
nKey = 0; /* Zero tells OP_Found to use a composite key */
|
||||
sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, iKey,
|
||||
sqlite3IndexAffinityStr(v, pPk), nPk);
|
||||
sqlite3IndexAffinityStr(pParse->db, pPk), nPk);
|
||||
sqlite3VdbeAddOp2(v, OP_IdxInsert, iEphCur, iKey);
|
||||
}else{
|
||||
/* Get the rowid of the row to be deleted and remember it in the RowSet */
|
||||
|
||||
@@ -416,7 +416,7 @@ static void fkLookupParent(
|
||||
}
|
||||
|
||||
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTemp, nCol, regRec,
|
||||
sqlite3IndexAffinityStr(v,pIdx), nCol);
|
||||
sqlite3IndexAffinityStr(pParse->db,pIdx), nCol);
|
||||
sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0); VdbeCoverage(v);
|
||||
|
||||
sqlite3ReleaseTempReg(pParse, regRec);
|
||||
|
||||
13
src/insert.c
13
src/insert.c
@@ -69,7 +69,7 @@ void sqlite3OpenTable(
|
||||
** is managed along with the rest of the Index structure. It will be
|
||||
** released when sqlite3DeleteIndex() is called.
|
||||
*/
|
||||
const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
|
||||
const char *sqlite3IndexAffinityStr(sqlite3 *db, Index *pIdx){
|
||||
if( !pIdx->zColAff ){
|
||||
/* The first time a column affinity string for a particular index is
|
||||
** required, it is allocated and populated here. It is then stored as
|
||||
@@ -81,7 +81,6 @@ const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
|
||||
*/
|
||||
int n;
|
||||
Table *pTab = pIdx->pTable;
|
||||
sqlite3 *db = sqlite3VdbeDb(v);
|
||||
pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1);
|
||||
if( !pIdx->zColAff ){
|
||||
db->mallocFailed = 1;
|
||||
@@ -105,6 +104,16 @@ const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
|
||||
return pIdx->zColAff;
|
||||
}
|
||||
|
||||
/*
|
||||
** Return the affinity for a single column of an index.
|
||||
*/
|
||||
char sqlite3IndexColumnAffinity(sqlite3 *db, Index *pIdx, int iCol){
|
||||
if( !pIdx->zColAff ){
|
||||
if( sqlite3IndexAffinityStr(db, pIdx)==0 ) return SQLITE_AFF_BLOB;
|
||||
}
|
||||
return pIdx->zColAff[iCol];
|
||||
}
|
||||
|
||||
/*
|
||||
** Compute the affinity string for table pTab, if it has not already been
|
||||
** computed. As an optimization, omit trailing SQLITE_AFF_BLOB affinities.
|
||||
|
||||
@@ -1342,7 +1342,7 @@ void sqlite3Pragma(
|
||||
}
|
||||
if( pParent ){
|
||||
sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, pFK->nCol, regKey,
|
||||
sqlite3IndexAffinityStr(v,pIdx), pFK->nCol);
|
||||
sqlite3IndexAffinityStr(db,pIdx), pFK->nCol);
|
||||
sqlite3VdbeAddOp4Int(v, OP_Found, i, addrOk, regKey, 0);
|
||||
VdbeCoverage(v);
|
||||
}
|
||||
|
||||
@@ -3553,7 +3553,8 @@ int sqlite3VarintLen(u64 v);
|
||||
#define putVarint sqlite3PutVarint
|
||||
|
||||
|
||||
const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
|
||||
const char *sqlite3IndexAffinityStr(sqlite3*, Index*);
|
||||
char sqlite3IndexColumnAffinity(sqlite3*, Index*, int);
|
||||
void sqlite3TableAffinity(Vdbe*, Table*, int);
|
||||
char sqlite3CompareAffinity(Expr *pExpr, char aff2);
|
||||
int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
|
||||
|
||||
@@ -394,7 +394,7 @@ void sqlite3Update(
|
||||
regKey = iPk;
|
||||
}else{
|
||||
sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, regKey,
|
||||
sqlite3IndexAffinityStr(v, pPk), nPk);
|
||||
sqlite3IndexAffinityStr(db, pPk), nPk);
|
||||
sqlite3VdbeAddOp2(v, OP_IdxInsert, iEph, regKey);
|
||||
}
|
||||
sqlite3WhereEnd(pWInfo);
|
||||
|
||||
11
src/where.c
11
src/where.c
@@ -1177,7 +1177,7 @@ static int whereRangeSkipScanEst(
|
||||
int nUpper = p->nSample+1;
|
||||
int rc = SQLITE_OK;
|
||||
int iCol = p->aiColumn[nEq];
|
||||
u8 aff = iCol>=0 ? p->pTable->aCol[iCol].affinity : SQLITE_AFF_INTEGER;
|
||||
u8 aff = sqlite3IndexColumnAffinity(db, p, iCol);
|
||||
CollSeq *pColl;
|
||||
|
||||
sqlite3_value *p1 = 0; /* Value extracted from pLower */
|
||||
@@ -1325,11 +1325,8 @@ static int whereRangeScanEst(
|
||||
testcase( pRec->nField!=pBuilder->nRecValid );
|
||||
pRec->nField = pBuilder->nRecValid;
|
||||
}
|
||||
if( nEq==p->nKeyCol ){
|
||||
aff = SQLITE_AFF_INTEGER;
|
||||
}else{
|
||||
aff = p->pTable->aCol[p->aiColumn[nEq]].affinity;
|
||||
}
|
||||
aff = sqlite3IndexColumnAffinity(pParse->db, p, nEq);
|
||||
assert( nEq!=p->nKeyCol || aff==SQLITE_AFF_INTEGER );
|
||||
/* Determine iLower and iUpper using ($P) only. */
|
||||
if( nEq==0 ){
|
||||
iLower = 0;
|
||||
@@ -1487,7 +1484,7 @@ static int whereEqualScanEst(
|
||||
return SQLITE_OK;
|
||||
}
|
||||
|
||||
aff = p->pTable->aCol[p->aiColumn[nEq-1]].affinity;
|
||||
aff = sqlite3IndexColumnAffinity(pParse->db, p, nEq-1);
|
||||
rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq-1, &bOk);
|
||||
pBuilder->pRec = pRec;
|
||||
if( rc!=SQLITE_OK ) return rc;
|
||||
|
||||
@@ -492,7 +492,7 @@ static int codeAllEqualityTerms(
|
||||
nReg = pLoop->u.btree.nEq + nExtraReg;
|
||||
pParse->nMem += nReg;
|
||||
|
||||
zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx));
|
||||
zAff = sqlite3DbStrDup(pParse->db,sqlite3IndexAffinityStr(pParse->db,pIdx));
|
||||
if( !zAff ){
|
||||
pParse->db->mallocFailed = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user