mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-08 03:22:21 +03:00
Simplifications to the expression code generator. Remove about 80 lines of
older and obsolete code. FossilOrigin-Name: 53f5cfe11516d0496c7760378b6305c3088d479f
This commit is contained in:
20
manifest
20
manifest
@@ -1,8 +1,8 @@
|
|||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
Hash: SHA1
|
Hash: SHA1
|
||||||
|
|
||||||
C Enhance\sthe\sANALYZE\scommand\sso\sthat\sit\sgathers\sstatistics\sin\sthe\ssqlite_stat1\ntable\seven\sfor\stables\sthat\sare\sempty\sor\shave\sno\sindices.
|
C Simplifications\sto\sthe\sexpression\scode\sgenerator.\s\sRemove\sabout\s80\slines\sof\nolder\sand\sobsolete\scode.
|
||||||
D 2010-09-25T22:32:56
|
D 2010-09-27T18:14:12
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee
|
F Makefile.in c599a15d268b1db2aeadea19df2adc3bf2eb6bee
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -130,7 +130,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
|||||||
F src/ctime.c 4f3aadad62c6c9f0d4e5a96718516ac4e3c598df
|
F src/ctime.c 4f3aadad62c6c9f0d4e5a96718516ac4e3c598df
|
||||||
F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20
|
F src/date.c 5dd8448a0bfea8d31fb14cff487d0c06ff8c8b20
|
||||||
F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd
|
F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd
|
||||||
F src/expr.c 21ad2494bd7c0826072216ea0f20db86a0a4ac82
|
F src/expr.c d2ffe8ed8eed8208c3e550cfba98a2a301a64108
|
||||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||||
F src/fkey.c 58bbf52c6ddd3f64ca40a3230f9e548a83a5cb16
|
F src/fkey.c 58bbf52c6ddd3f64ca40a3230f9e548a83a5cb16
|
||||||
F src/func.c caa6c5134106d95cced4db80ce3fdcdde4f6c8d4
|
F src/func.c caa6c5134106d95cced4db80ce3fdcdde4f6c8d4
|
||||||
@@ -180,7 +180,7 @@ F src/select.c b0b124781474e4e0c8f64022875e5e2009e13443
|
|||||||
F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056
|
F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056
|
||||||
F src/sqlite.h.in dae3f74d7b2b516967ede39b8e503718b571d9da
|
F src/sqlite.h.in dae3f74d7b2b516967ede39b8e503718b571d9da
|
||||||
F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89
|
F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89
|
||||||
F src/sqliteInt.h d8ae67308fec3f2abdce817a630aceae42ad8043
|
F src/sqliteInt.h 224c8e31f88489ea015c695bcf1877f3701b404c
|
||||||
F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
|
F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
|
||||||
F src/status.c 496913d4e8441195f6f2a75b1c95993a45b9b30b
|
F src/status.c 496913d4e8441195f6f2a75b1c95993a45b9b30b
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
@@ -870,14 +870,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 20e16fef55c355a1d7e97d0c390769b941e83fdb
|
P a7645d293801da64a7579737d0a8b48117af2e2c
|
||||||
R 96b44d864f75b35f18ba4c7ab3226d4c
|
R 31b9d8f725b1355a3ecd589f9c768e32
|
||||||
U drh
|
U drh
|
||||||
Z e1547e0aba5840882b569e70505d3edd
|
Z da56ebaf0e041408b3401a85ccd2b2a6
|
||||||
-----BEGIN PGP SIGNATURE-----
|
-----BEGIN PGP SIGNATURE-----
|
||||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
iD8DBQFMnnieoxKgR168RlERAs7CAJ9XFT8WTA9gYf6noiCftlq/XsWqugCfaGoh
|
iD8DBQFMoN73oxKgR168RlERAqBjAJ4/xTLrVYlxWxhlWBOiHhf+ogrH4gCdGQFv
|
||||||
P4TBzZ9lm4AFS3sK2f1UkgA=
|
0abukVW0mExAm/y5XFe9a7M=
|
||||||
=phK5
|
=VfNl
|
||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
a7645d293801da64a7579737d0a8b48117af2e2c
|
53f5cfe11516d0496c7760378b6305c3088d479f
|
||||||
86
src/expr.c
86
src/expr.c
@@ -2234,73 +2234,6 @@ static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
|
|||||||
}
|
}
|
||||||
#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
|
#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
|
||||||
|
|
||||||
/*
|
|
||||||
** If the last instruction coded is an ephemeral copy of any of
|
|
||||||
** the registers in the nReg registers beginning with iReg, then
|
|
||||||
** convert the last instruction from OP_SCopy to OP_Copy.
|
|
||||||
*/
|
|
||||||
void sqlite3ExprHardCopy(Parse *pParse, int iReg, int nReg){
|
|
||||||
VdbeOp *pOp;
|
|
||||||
Vdbe *v;
|
|
||||||
|
|
||||||
assert( pParse->db->mallocFailed==0 );
|
|
||||||
v = pParse->pVdbe;
|
|
||||||
assert( v!=0 );
|
|
||||||
pOp = sqlite3VdbeGetOp(v, -1);
|
|
||||||
assert( pOp!=0 );
|
|
||||||
if( pOp->opcode==OP_SCopy && pOp->p1>=iReg && pOp->p1<iReg+nReg ){
|
|
||||||
pOp->opcode = OP_Copy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Generate code to store the value of the iAlias-th alias in register
|
|
||||||
** target. The first time this is called, pExpr is evaluated to compute
|
|
||||||
** the value of the alias. The value is stored in an auxiliary register
|
|
||||||
** and the number of that register is returned. On subsequent calls,
|
|
||||||
** the register number is returned without generating any code.
|
|
||||||
**
|
|
||||||
** Note that in order for this to work, code must be generated in the
|
|
||||||
** same order that it is executed.
|
|
||||||
**
|
|
||||||
** Aliases are numbered starting with 1. So iAlias is in the range
|
|
||||||
** of 1 to pParse->nAlias inclusive.
|
|
||||||
**
|
|
||||||
** pParse->aAlias[iAlias-1] records the register number where the value
|
|
||||||
** of the iAlias-th alias is stored. If zero, that means that the
|
|
||||||
** alias has not yet been computed.
|
|
||||||
*/
|
|
||||||
static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr, int target){
|
|
||||||
#if 0
|
|
||||||
sqlite3 *db = pParse->db;
|
|
||||||
int iReg;
|
|
||||||
if( pParse->nAliasAlloc<pParse->nAlias ){
|
|
||||||
pParse->aAlias = sqlite3DbReallocOrFree(db, pParse->aAlias,
|
|
||||||
sizeof(pParse->aAlias[0])*pParse->nAlias );
|
|
||||||
testcase( db->mallocFailed && pParse->nAliasAlloc>0 );
|
|
||||||
if( db->mallocFailed ) return 0;
|
|
||||||
memset(&pParse->aAlias[pParse->nAliasAlloc], 0,
|
|
||||||
(pParse->nAlias-pParse->nAliasAlloc)*sizeof(pParse->aAlias[0]));
|
|
||||||
pParse->nAliasAlloc = pParse->nAlias;
|
|
||||||
}
|
|
||||||
assert( iAlias>0 && iAlias<=pParse->nAlias );
|
|
||||||
iReg = pParse->aAlias[iAlias-1];
|
|
||||||
if( iReg==0 ){
|
|
||||||
if( pParse->iCacheLevel>0 ){
|
|
||||||
iReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
|
|
||||||
}else{
|
|
||||||
iReg = ++pParse->nMem;
|
|
||||||
sqlite3ExprCode(pParse, pExpr, iReg);
|
|
||||||
pParse->aAlias[iAlias-1] = iReg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return iReg;
|
|
||||||
#else
|
|
||||||
UNUSED_PARAMETER(iAlias);
|
|
||||||
return sqlite3ExprCodeTarget(pParse, pExpr, target);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Generate code into the current Vdbe to evaluate the given
|
** Generate code into the current Vdbe to evaluate the given
|
||||||
** expression. Attempt to store the results in register "target".
|
** expression. Attempt to store the results in register "target".
|
||||||
@@ -2409,7 +2342,7 @@ int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TK_AS: {
|
case TK_AS: {
|
||||||
inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft, target);
|
inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifndef SQLITE_OMIT_CAST
|
#ifndef SQLITE_OMIT_CAST
|
||||||
@@ -3112,17 +3045,12 @@ int sqlite3ExprCodeExprList(
|
|||||||
assert( target>0 );
|
assert( target>0 );
|
||||||
n = pList->nExpr;
|
n = pList->nExpr;
|
||||||
for(pItem=pList->a, i=0; i<n; i++, pItem++){
|
for(pItem=pList->a, i=0; i<n; i++, pItem++){
|
||||||
if( pItem->iAlias ){
|
Expr *pExpr = pItem->pExpr;
|
||||||
int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr, target+i);
|
int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
|
||||||
Vdbe *v = sqlite3GetVdbe(pParse);
|
assert( pParse->pVdbe || pParse->db->mallocFailed );
|
||||||
if( iReg!=target+i ){
|
if( inReg!=target+i && pParse->pVdbe ){
|
||||||
sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i);
|
sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
|
||||||
}
|
inReg, target+i);
|
||||||
}else{
|
|
||||||
sqlite3ExprCode(pParse, pItem->pExpr, target+i);
|
|
||||||
}
|
|
||||||
if( doHardCopy && !pParse->db->mallocFailed ){
|
|
||||||
sqlite3ExprHardCopy(pParse, target, n);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
@@ -2702,7 +2702,6 @@ void sqlite3ExprCachePop(Parse*, int);
|
|||||||
void sqlite3ExprCacheRemove(Parse*, int, int);
|
void sqlite3ExprCacheRemove(Parse*, int, int);
|
||||||
void sqlite3ExprCacheClear(Parse*);
|
void sqlite3ExprCacheClear(Parse*);
|
||||||
void sqlite3ExprCacheAffinityChange(Parse*, int, int);
|
void sqlite3ExprCacheAffinityChange(Parse*, int, int);
|
||||||
void sqlite3ExprHardCopy(Parse*,int,int);
|
|
||||||
int sqlite3ExprCode(Parse*, Expr*, int);
|
int sqlite3ExprCode(Parse*, Expr*, int);
|
||||||
int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
|
int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
|
||||||
int sqlite3ExprCodeTarget(Parse*, Expr*, int);
|
int sqlite3ExprCodeTarget(Parse*, Expr*, int);
|
||||||
|
|||||||
Reference in New Issue
Block a user