mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
Split the sqlite3ColumnExpr() routine out into two routines, one that works
as before and the second sqlite3ColumnExprAuth() to deal with the authenticator in places where that is needed. FossilOrigin-Name: 51a1149bdcbe142b8eb92c2b817d3973bf88aaa73859e0c475505aa201da920b
This commit is contained in:
31
manifest
31
manifest
@@ -1,5 +1,5 @@
|
||||
C An\sattempt\sto\smake\sthe\sauthorizer\seffective\sat\spreventing\sthe\suse\sof\nsome\sfunctions\swithin\sthe\sDEFAULT\sclause\sof\sa\stable.
|
||||
D 2026-08-26T19:37:23.291
|
||||
C Split\sthe\ssqlite3ColumnExpr()\sroutine\sout\sinto\stwo\sroutines,\sone\sthat\sworks\nas\sbefore\sand\sthe\ssecond\ssqlite3ColumnExprAuth()\sto\sdeal\swith\sthe\nauthenticator\sin\splaces\swhere\sthat\sis\sneeded.
|
||||
D 2026-08-26T21:04:25.031
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -676,7 +676,7 @@ F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d
|
||||
F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
||||
F sqlite3.1 1b9c24374a85dfc7eb8fa7c4266ee0db4f9609cceecfc5481cd8307e5af04366
|
||||
F sqlite3.pc.in e6dee284fba59ef500092fdc1843df3be8433323a3733c91da96690a50a5b398
|
||||
F src/alter.c b62e69718e3d300d0e0c08c954e0571d850b98b85ba0cd833160aad2496e1671
|
||||
F src/alter.c 82f7d0c073d9612c1223369ef55e1cedd4cb9041cc017a5ac8ec38c2f5bfcb26
|
||||
F src/analyze.c 73162482c656187823217f4c00758c9ee13a420c8745bc542129e0279b792287
|
||||
F src/attach.c c58278c7d2d954785591c4fde81669ec3e4d52f348c453b028a19ae8adf4f338
|
||||
F src/auth.c b5ece4e1edccad082c0332fa0087df225473bae0feea9269f824312201377185
|
||||
@@ -686,7 +686,7 @@ F src/btmutex.c 30dada73a819a1ef5b7583786370dce1842e12e1ad941e4d05ac29695528daea
|
||||
F src/btree.c d454bbda4b2a25b7a852c70ab61bcd6c0e5b3f6cda212d6e7529177c0518fb0e
|
||||
F src/btree.h 2ee0ddfdf4f8530ad1d46afffd7da21a0e243bfab10973011ac6f6b7fb4109a1
|
||||
F src/btreeInt.h df956bca48cd49d2a38886bc3b02045c039e8a16353f86fccd116c6487f79d82
|
||||
F src/build.c bc234dd29b71501e2238d4df1ce1af36c4f2c1c8b669248a22cd0178bd3850c2
|
||||
F src/build.c bf548c70d9950bcb0f25bea215b0e4c02f39d72278fd73f81307ae00409ec495
|
||||
F src/callback.c 3605bbf02bd7ed46c79cd48346db4a32fc51d67624400539c0532f4eead804ad
|
||||
F src/carray.c 22879bbd9e14fc4868f223b0d49bcdbbda4616c89f1519ec6a5e64b98a4137b1
|
||||
F src/complete.c f216b970ce99c5a657556cf1f17e7ddd494515d3beb63df426bf59ff43bd3d9a
|
||||
@@ -694,16 +694,16 @@ F src/date.c e1a002a4199bfa85e8778c0f72182c679580b131147d8e46d9221cfceffb8500
|
||||
F src/dbpage.c ec8590c5e7a564cef28ca3c6156521316a4d26cb572a34841b0bcb26b67b3f97
|
||||
F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
|
||||
F src/delete.c 59eeca3fb88c29329afc41bb803ee568b120d9dd7470b5f38ab55cc38390b451
|
||||
F src/expr.c bca3bb56cc9f79afaf3fc8ff5b1b90bc6666f5fa5b6e7a531e2a558e4d0e6920
|
||||
F src/expr.c 3e4b36f0517128ea7e0a349373816d783b7313f8b8c59bbc6779f3200ed69ea4
|
||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 0a72ed1a189c141a196a54dae32d94d20c483954041c33facc0e324cd18ade1d
|
||||
F src/fkey.c 26788ae6c785d70f9829c4176e9764447014fc73e6ba31e9f1881720a64ae7f1
|
||||
F src/func.c d833ab92ed95e84af60247e7d752cda33234d8979173442079d54d96e9853dd9
|
||||
F src/global.c 7eea537ac0c113ac55cb2dd4d8fc2a6a91ae478be34231b4efaffc46817fee85
|
||||
F src/hash.c 03c8c0f4be9e8bcb6de65aa26d34a61d48a9430747084a69f9469fbb00ea52ca
|
||||
F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
|
||||
F src/hwtime.h 5cb15147c8583d0fc4748e1c12ea6f38c9deaeefa147a4d8d379fd9bc81fee9a
|
||||
F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
||||
F src/insert.c 423ed92248bf83e133021d50129e257f05e7513ad84a0b0b0fd993ccce9eee7d
|
||||
F src/insert.c 68b898cb17607b36fa751b8985da06531932c502d77186f82842817286c7fd03
|
||||
F src/json.c 507a7be1d4c7ca435a6b22e742cc344a3f318d68b49995dadb921502b374aa18
|
||||
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
|
||||
F src/loadext.c 5cd4cd7ec6e1a46416806899086363fbf95eecd3bfb9a388b436c9a77243c902
|
||||
@@ -737,7 +737,7 @@ F src/parse.y d5a3c5b0277a441c38b35071c05e2b61ff5fc918a63309c809f4b6706179c320
|
||||
F src/pcache.c 588cc3c5ccaaadde689ed35ce5c5c891a1f7b1f4d1f56f6cf0143b74d8ee6484
|
||||
F src/pcache.h 00c5797ddf546ee0fe2828d7f75d1afbf1b40ba054f362905326c5ccca15e60c
|
||||
F src/pcache1.c 6bc38b44961f767985ae5022fb7887eda206040f57475812473929c702f6799d
|
||||
F src/pragma.c 9ee911bc2a0b06c133e066400ff309a76cf675d0a37d5a1beaf09d124303a3f7
|
||||
F src/pragma.c 959c32cfd1fb186546e5c4d4383258cc709596b2acdac72ef5ce6a27b9486bf2
|
||||
F src/prepare.c 8954bb69defe377cd6a926f8c61d8215ea4f1974838d3ec6f22681a2c0a2939f
|
||||
F src/printf.c 1ee57184d4b8f36333f6b5a9904984594b977798aaeee76a39103a99436e794c
|
||||
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
|
||||
@@ -748,7 +748,7 @@ F src/shell.c.in af532e274c05b70578de3d9350bee1d16ba668259e85410cb592fbf0c097ebe
|
||||
F src/sqlite.h.in efc3f7aa00a2bb01c087435e6fa5f86103e310e6c3ea072b12cc110cf2715a75
|
||||
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
|
||||
F src/sqlite3ext.h 0efd4723bad9124ea1f581d9f1ea0254ac1c6f3e5fb29e4f3dcf36c72485a456
|
||||
F src/sqliteInt.h 6f536be43ec05f706174490c9a78c9d0802b98b4a6d69dc8097fa48af92fb137
|
||||
F src/sqliteInt.h 17bd8fbcc55552f20e87913a07ca793a0091fb5cc5aa5da4f68e6d87491f5923
|
||||
F src/sqliteLimit.h c433b3fdb5e52f4226bf78d7e8081dff8fd8fbb0ce0cb1a5fee282aaa8976813
|
||||
F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592
|
||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||
@@ -805,7 +805,7 @@ F src/threads.c 85d8b9f05f78211c61e3739ab5db761d7118766d1916ae7f2764735106bc4e13
|
||||
F src/tokenize.c e9d52d9f7374d82dadcd11726bea8a597d43709d6672704f3f0375bf1d726912
|
||||
F src/treeview.c feaa59f14db4f7b5aacca9c5ad5aeb562c1f98262c1ffd74371f4186ade91fc5
|
||||
F src/trigger.c d6d8991ca346eb6f56e50a3c5df486176b67a9179336798a75bb05e622c72cac
|
||||
F src/update.c f82960cd70c97fd169b5094e5bcdac8b5beb903cdc239312d20e11c5b965c2d2
|
||||
F src/update.c dad5c89cbeee91cab10cd5c746be2be220e1155f9444f28c6a720441a88a965c
|
||||
F src/upsert.c dd9f0fcccbfb4f20e1026a21a7254ba3f2c08e9cfa92affaff5b5ec3b00ea549
|
||||
F src/utf.c 7267c3fb9e2467020507601af3354c2446c61f444387e094c779dccd5ca62165
|
||||
F src/util.c cfdf9c6e5323af886d5ce766709da607ba1d14193ad3a15f4f462a45420e8211
|
||||
@@ -825,7 +825,7 @@ F src/vxworks.h 9d18819c5235b49c2340a8a4d48195ec5d5afb637b152406de95a9436beeaeab
|
||||
F src/wal.c cb28ab3a71cb73ea422a2fcc26283b65a1e5a2a65c44de86951c7d6a186381ac
|
||||
F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
|
||||
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
|
||||
F src/where.c a562a3343fb9ce17356bd7016ad48c7ff300ed5e7cdd290bbbbe1e607d88b0f9
|
||||
F src/where.c 523806acab93c82979a37143ac76b51fde659bf69e3aa7d1aa3e472963d276c4
|
||||
F src/whereInt.h f039ad303bc2913de673e431821ef8db3b619d249e6e5548d90072a684e72285
|
||||
F src/wherecode.c 0e5772dedc65a4f4eee3399b04c6b0b02ccdb4949c5b08c558e3678c5aa102ae
|
||||
F src/whereexpr.c 76f72a95c5cf0e8a8edb679ca4fb7afa17ba45ff4effe73c414266510109e701
|
||||
@@ -2219,11 +2219,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
|
||||
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
|
||||
P da1e7d73c64d0a0c140c17794a60772d842d38204cf9a1b16c9ba338d733e9b9
|
||||
R f9853f77aa2bcedb4a95ab10848f4515
|
||||
T *branch * authorize-default
|
||||
T *sym-authorize-default *
|
||||
T -sym-trunk *
|
||||
P 321e41b09179acba59958bdd6b07e4b7d915b9c0dfca143e4914b3690692c201
|
||||
R 613e1004f09be2b0d449123efd47588e
|
||||
U drh
|
||||
Z c4dd722908e51122ee262e39364ad14a
|
||||
Z 0e7a3160f3611cf6d33df1a7f0ae6582
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
321e41b09179acba59958bdd6b07e4b7d915b9c0dfca143e4914b3690692c201
|
||||
51a1149bdcbe142b8eb92c2b817d3973bf88aaa73859e0c475505aa201da920b
|
||||
|
||||
@@ -359,7 +359,7 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
|
||||
zDb = db->aDb[iDb].zDbSName;
|
||||
zTab = &pNew->zName[16]; /* Skip the "sqlite_altertab_" prefix on the name */
|
||||
pCol = &pNew->aCol[pNew->nCol-1];
|
||||
pDflt = sqlite3ColumnExpr(0, pNew, pCol);
|
||||
pDflt = sqlite3ColumnExpr(pNew, pCol);
|
||||
pTab = sqlite3FindTable(db, zTab, zDb);
|
||||
assert( pTab );
|
||||
|
||||
@@ -1642,7 +1642,7 @@ static void renameColumnFunc(
|
||||
}
|
||||
#ifndef SQLITE_OMIT_GENERATED_COLUMNS
|
||||
for(i=0; i<sParse.pNewTable->nCol; i++){
|
||||
Expr *pExpr = sqlite3ColumnExpr(0, sParse.pNewTable,
|
||||
Expr *pExpr = sqlite3ColumnExpr(sParse.pNewTable,
|
||||
&sParse.pNewTable->aCol[i]);
|
||||
sqlite3WalkExpr(&sWalker, pExpr);
|
||||
}
|
||||
@@ -2011,7 +2011,7 @@ static void renameQuotefixFunc(
|
||||
#ifndef SQLITE_OMIT_GENERATED_COLUMNS
|
||||
for(i=0; i<sParse.pNewTable->nCol; i++){
|
||||
sqlite3WalkExpr(&sWalker,
|
||||
sqlite3ColumnExpr(0, sParse.pNewTable,
|
||||
sqlite3ColumnExpr(sParse.pNewTable,
|
||||
&sParse.pNewTable->aCol[i]));
|
||||
}
|
||||
#endif /* SQLITE_OMIT_GENERATED_COLUMNS */
|
||||
|
||||
12
src/build.c
12
src/build.c
@@ -734,14 +734,16 @@ static void sqlite3FuncAuth(Parse *pParse, Expr *pExpr){
|
||||
** callback on any function calls within the expression and raises an error
|
||||
** if that callback ever returns anything other then SQLITE_OK.
|
||||
*/
|
||||
Expr *sqlite3ColumnExpr(Parse *pParse, Table *pTab, Column *pCol){
|
||||
Expr *pExpr;
|
||||
Expr *sqlite3ColumnExpr(Table *pTab, Column *pCol){
|
||||
if( pCol->iDflt==0 ) return 0;
|
||||
if( !IsOrdinaryTable(pTab) ) return 0;
|
||||
if( NEVER(pTab->u.tab.pDfltList==0) ) return 0;
|
||||
if( NEVER(pTab->u.tab.pDfltList->nExpr<pCol->iDflt) ) return 0;
|
||||
pExpr = pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr;
|
||||
if( pParse && pParse->db->xAuth!=0 ){
|
||||
return pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr;
|
||||
}
|
||||
Expr *sqlite3ColumnExprAuth(Table *pTab, Column *pCol, Parse *pParse){
|
||||
Expr *pExpr = sqlite3ColumnExpr(pTab,pCol);
|
||||
if( pParse->db->xAuth!=0 ){
|
||||
sqlite3FuncAuth(pParse, pExpr);
|
||||
}
|
||||
return pExpr;
|
||||
@@ -2828,7 +2830,7 @@ void sqlite3EndTable(
|
||||
for(ii=0; ii<p->nCol; ii++){
|
||||
u32 colFlags = p->aCol[ii].colFlags;
|
||||
if( (colFlags & COLFLAG_GENERATED)!=0 ){
|
||||
Expr *pX = sqlite3ColumnExpr(0, p, &p->aCol[ii]);
|
||||
Expr *pX = sqlite3ColumnExpr(p, &p->aCol[ii]);
|
||||
testcase( colFlags & COLFLAG_VIRTUAL );
|
||||
testcase( colFlags & COLFLAG_STORED );
|
||||
if( sqlite3ResolveSelfReference(pParse, p, NC_GenCol, pX, 0) ){
|
||||
|
||||
@@ -4502,7 +4502,7 @@ void sqlite3ExprCodeGeneratedColumn(
|
||||
}else{
|
||||
iAddr = 0;
|
||||
}
|
||||
sqlite3ExprCodeCopy(pParse, sqlite3ColumnExpr(0,pTab,pCol), regOut);
|
||||
sqlite3ExprCodeCopy(pParse, sqlite3ColumnExpr(pTab,pCol), regOut);
|
||||
if( (pCol->colFlags & COLFLAG_VIRTUAL)!=0
|
||||
&& (pTab->tabFlags & TF_Strict)!=0
|
||||
){
|
||||
|
||||
@@ -1306,7 +1306,7 @@ static Trigger *fkActionTrigger(
|
||||
testcase( pCol->colFlags & COLFLAG_STORED );
|
||||
pDflt = 0;
|
||||
}else{
|
||||
pDflt = sqlite3ColumnExpr(0, pFKey->pFrom, pCol);
|
||||
pDflt = sqlite3ColumnExprAuth(pFKey->pFrom, pCol, pParse);
|
||||
}
|
||||
if( pDflt ){
|
||||
pNew = sqlite3ExprDup(db, pDflt, 0);
|
||||
|
||||
18
src/insert.c
18
src/insert.c
@@ -360,7 +360,7 @@ void sqlite3ComputeGeneratedColumns(
|
||||
int x;
|
||||
pCol->colFlags |= COLFLAG_BUSY;
|
||||
w.eCode = 0;
|
||||
sqlite3WalkExpr(&w, sqlite3ColumnExpr(0, pTab, pCol));
|
||||
sqlite3WalkExpr(&w, sqlite3ColumnExpr(pTab, pCol));
|
||||
pCol->colFlags &= ~COLFLAG_BUSY;
|
||||
if( w.eCode & COLFLAG_NOTAVAIL ){
|
||||
pRedo = pCol;
|
||||
@@ -1387,7 +1387,7 @@ void sqlite3Insert(
|
||||
/* Hidden columns that are not explicitly named in the INSERT
|
||||
** get their default value */
|
||||
sqlite3ExprCodeFactorable(pParse,
|
||||
sqlite3ColumnExpr(pParse, pTab, &pTab->aCol[i]),
|
||||
sqlite3ColumnExprAuth(pTab, &pTab->aCol[i], pParse),
|
||||
iRegStore);
|
||||
continue;
|
||||
}
|
||||
@@ -1399,7 +1399,7 @@ void sqlite3Insert(
|
||||
/* A column not named in the insert column list gets its
|
||||
** default value */
|
||||
sqlite3ExprCodeFactorable(pParse,
|
||||
sqlite3ColumnExpr(pParse, pTab, &pTab->aCol[i]),
|
||||
sqlite3ColumnExprAuth(pTab, &pTab->aCol[i], pParse),
|
||||
iRegStore);
|
||||
continue;
|
||||
}
|
||||
@@ -1407,7 +1407,7 @@ void sqlite3Insert(
|
||||
}else if( nColumn==0 ){
|
||||
/* This is INSERT INTO ... DEFAULT VALUES. Load the default value. */
|
||||
sqlite3ExprCodeFactorable(pParse,
|
||||
sqlite3ColumnExpr(pParse, pTab, &pTab->aCol[i]),
|
||||
sqlite3ColumnExprAuth(pTab, &pTab->aCol[i], pParse),
|
||||
iRegStore);
|
||||
continue;
|
||||
}else{
|
||||
@@ -2005,7 +2005,7 @@ void sqlite3GenerateConstraintChecks(
|
||||
assert( (pCol->colFlags & COLFLAG_GENERATED)==0 );
|
||||
nSeenReplace++;
|
||||
sqlite3ExprCodeCopy(pParse,
|
||||
sqlite3ColumnExpr(pParse, pTab, pCol), iReg);
|
||||
sqlite3ColumnExprAuth(pTab, pCol, pParse), iReg);
|
||||
sqlite3VdbeJumpHere(v, addr1);
|
||||
break;
|
||||
}
|
||||
@@ -3216,8 +3216,8 @@ static int xferOptimization(
|
||||
*/
|
||||
if( (pDestCol->colFlags & COLFLAG_GENERATED)!=0 ){
|
||||
if( sqlite3ExprCompare(0,
|
||||
sqlite3ColumnExpr(0, pSrc, pSrcCol),
|
||||
sqlite3ColumnExpr(0, pDest, pDestCol), -1)!=0 ){
|
||||
sqlite3ColumnExpr(pSrc, pSrcCol),
|
||||
sqlite3ColumnExpr(pDest, pDestCol), -1)!=0 ){
|
||||
testcase( pDestCol->colFlags & COLFLAG_VIRTUAL );
|
||||
testcase( pDestCol->colFlags & COLFLAG_STORED );
|
||||
return 0; /* Different generator expressions */
|
||||
@@ -3236,8 +3236,8 @@ static int xferOptimization(
|
||||
}
|
||||
/* Default values for second and subsequent columns need to match. */
|
||||
if( (pDestCol->colFlags & COLFLAG_GENERATED)==0 && i>0 ){
|
||||
Expr *pDestExpr = sqlite3ColumnExpr(0, pDest, pDestCol);
|
||||
Expr *pSrcExpr = sqlite3ColumnExpr(0, pSrc, pSrcCol);
|
||||
Expr *pDestExpr = sqlite3ColumnExpr(pDest, pDestCol);
|
||||
Expr *pSrcExpr = sqlite3ColumnExpr(pSrc, pSrcCol);
|
||||
assert( pDestExpr==0 || pDestExpr->op==TK_SPAN );
|
||||
assert( pDestExpr==0 || !ExprHasProperty(pDestExpr, EP_IntValue) );
|
||||
assert( pSrcExpr==0 || pSrcExpr->op==TK_SPAN );
|
||||
|
||||
@@ -1242,7 +1242,7 @@ void sqlite3Pragma(
|
||||
}else{
|
||||
for(k=1; k<=pTab->nCol && pPk->aiColumn[k-1]!=i; k++){}
|
||||
}
|
||||
pColExpr = sqlite3ColumnExpr(0,pTab,pCol);
|
||||
pColExpr = sqlite3ColumnExpr(pTab,pCol);
|
||||
assert( pColExpr==0 || pColExpr->op==TK_SPAN || isHidden>=2 );
|
||||
assert( pColExpr==0 || !ExprHasProperty(pColExpr, EP_IntValue)
|
||||
|| isHidden>=2 );
|
||||
@@ -1933,8 +1933,8 @@ void sqlite3Pragma(
|
||||
}else{
|
||||
if( pCol->iDflt ){
|
||||
sqlite3_value *pDfltValue = 0;
|
||||
sqlite3ValueFromExpr(db, sqlite3ColumnExpr(0,pTab,pCol), ENC(db),
|
||||
pCol->affinity, &pDfltValue);
|
||||
sqlite3ValueFromExpr(db, sqlite3ColumnExprAuth(pTab,pCol,pParse),
|
||||
ENC(db), pCol->affinity, &pDfltValue);
|
||||
if( pDfltValue ){
|
||||
p4 = sqlite3_value_type(pDfltValue);
|
||||
sqlite3ValueFree(pDfltValue);
|
||||
|
||||
@@ -5075,7 +5075,8 @@ void sqlite3ResetOneSchema(sqlite3*,int);
|
||||
void sqlite3CollapseDatabaseArray(sqlite3*);
|
||||
void sqlite3CommitInternalChanges(sqlite3*);
|
||||
void sqlite3ColumnSetExpr(Parse*,Table*,Column*,Expr*);
|
||||
Expr *sqlite3ColumnExpr(Parse*,Table*,Column*);
|
||||
Expr *sqlite3ColumnExpr(Table*,Column*);
|
||||
Expr *sqlite3ColumnExprAuth(Table*,Column*,Parse*);
|
||||
void sqlite3ColumnSetColl(sqlite3*,Column*,const char*zColl);
|
||||
const char *sqlite3ColumnColl(Column*);
|
||||
void sqlite3DeleteColumnNames(sqlite3*,Table*);
|
||||
|
||||
@@ -66,11 +66,12 @@ void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
|
||||
if( pCol->iDflt ){
|
||||
sqlite3_value *pValue = 0;
|
||||
u8 enc = ENC(sqlite3VdbeDb(v));
|
||||
Parse *pParse = sqlite3VdbeParser(v);
|
||||
assert( !IsView(pTab) );
|
||||
VdbeComment((v, "%s.%s", pTab->zName, pCol->zCnName));
|
||||
assert( i<pTab->nCol );
|
||||
sqlite3ValueFromExpr(sqlite3VdbeDb(v),
|
||||
sqlite3ColumnExpr(0,pTab,pCol), enc,
|
||||
sqlite3ColumnExprAuth(pTab,pCol,pParse), enc,
|
||||
pCol->affinity, &pValue);
|
||||
if( pValue ){
|
||||
sqlite3VdbeAppendP4(v, pValue, P4_MEM);
|
||||
@@ -539,7 +540,7 @@ void sqlite3Update(
|
||||
if( aXRef[i]>=0 ) continue;
|
||||
if( (pTab->aCol[i].colFlags & COLFLAG_GENERATED)==0 ) continue;
|
||||
if( sqlite3ExprReferencesUpdatedColumn(
|
||||
sqlite3ColumnExpr(0,pTab, &pTab->aCol[i]),
|
||||
sqlite3ColumnExpr(pTab, &pTab->aCol[i]),
|
||||
aXRef, chngRowid)
|
||||
){
|
||||
aXRef[i] = 99999;
|
||||
|
||||
@@ -6692,7 +6692,7 @@ static SQLITE_NOINLINE void whereAddIndexedExpr(
|
||||
if( j==XN_EXPR ){
|
||||
pExpr = pIdx->aColExpr->a[i].pExpr;
|
||||
}else if( j>=0 && (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)!=0 ){
|
||||
pExpr = sqlite3ColumnExpr(0, pTab, &pTab->aCol[j]);
|
||||
pExpr = sqlite3ColumnExpr(pTab, &pTab->aCol[j]);
|
||||
}else{
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user