mirror of https://github.com/sqlite/sqlite
Fix problems with INSERT INTO ... SELECT ... statements that write to tables with __hidden__ columns.
FossilOrigin-Name: 59bd0ec7d4327852ee8c0206b2c59d0a12484db8
This commit is contained in:
parent
1a1d3cd2f3
commit
ba68f8f3f5
22
manifest
22
manifest
|
@ -1,5 +1,5 @@
|
|||
C Create\sthe\snew\sTK_ASTERISK\stoken\sto\srepresent\sthe\s"*"\sin\s"SELECT\s*".\s\sFormerly\nthat\soperator\swas\sTK_ALL,\swhich\swas\salso\sused\sfor\sUNION\sALL.\s\sLess\sconfusion\sif\nthey\soperator\ssymbols\sare\sdistinct.
|
||||
D 2015-11-19T16:33:31.729
|
||||
C Fix\sproblems\swith\sINSERT\sINTO\s...\sSELECT\s...\sstatements\sthat\swrite\sto\stables\swith\s__hidden__\scolumns.
|
||||
D 2015-11-19T16:46:46.075
|
||||
F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1
|
||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||
F Makefile.msc e928e68168df69b353300ac87c10105206653a03
|
||||
|
@ -285,7 +285,7 @@ F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79
|
|||
F src/btree.c d3bdd8462a86492e2ebc9aca4a0168429017de25
|
||||
F src/btree.h 2d76dee44704c47eed323356a758662724b674a0
|
||||
F src/btreeInt.h 3ab435ed27adea54d040584b0bcc488ee7db1e38
|
||||
F src/build.c c909d178ef900f56aaafa4a509fd1b12a7d52ea6
|
||||
F src/build.c 5a3b71786e2b96d2bb92d40f190eb1fe736f25ca
|
||||
F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0
|
||||
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
||||
F src/ctime.c 509ef9c64d1321f42448f111da86400b1799218a
|
||||
|
@ -300,7 +300,7 @@ F src/global.c 508e4087f7b41d688e4762dcf4d4fe28cfbc87f9
|
|||
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
||||
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||
F src/insert.c 7aa0846b25ab53e33a16fc3b9417ff87b3c60183
|
||||
F src/insert.c edb295a0b669e2dedba65cd546789770ae061277
|
||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
|
||||
F src/loadext.c 18586e45a215325f15096821e9c082035d4fb810
|
||||
|
@ -339,12 +339,12 @@ F src/printf.c f8fc8f04e75b1e983ef2793c27ec7a43b287e94a
|
|||
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
||||
F src/resolve.c 1954a0f01bf65d78d7d559aea3d5c67f33376d91
|
||||
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
|
||||
F src/select.c e8eccb5b4482965f56fc46c69e75ce2da941b18e
|
||||
F src/select.c 3492a2794b8ff04dce2a91a284492df5725045f5
|
||||
F src/shell.c f0f59ea60ad297f671b7ae0fb957a736ad17c92c
|
||||
F src/sqlite.h.in fa62718f73553f06b2f2e362fd09ccb4e1cbb626
|
||||
F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
|
||||
F src/sqlite3ext.h 4b66e3e3435da4b4c8c83696d0349f0c503b3924
|
||||
F src/sqliteInt.h 339067553cebac9ba7ec0c616b135db7905c20c9
|
||||
F src/sqliteInt.h 921678cb43bb7f63364e56757c07f3e6e0eb45c6
|
||||
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
||||
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
||||
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
||||
|
@ -762,7 +762,7 @@ F test/fuzzer1.test d4c52aaf3ef923da293a2653cfab33d02f718a36
|
|||
F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
|
||||
F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
|
||||
F test/hexlit.test 1d312fa816dfd3650a3bb488093bc09a0c927f67
|
||||
F test/hidden.test 9de6b1631ac23b27801868abaccd1a7f3e96a6f2
|
||||
F test/hidden.test df1540ad1017b49a0681ba3b01e0cde051dbeb58
|
||||
F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f
|
||||
F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
|
||||
F test/ieee754.test 118b665a97a8df0e8f2fbdb07d113e596f4a6b53
|
||||
|
@ -1404,7 +1404,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
|||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 011904cad2be2ce34e2f37ffae8ff2f1044a2969
|
||||
R 40ad63765b750992e100464bfa82981f
|
||||
U drh
|
||||
Z 1545ad0787e026d6592cfaa98e731337
|
||||
P 201ac6d449431dadc6b29faecd68b559bd64bc9f
|
||||
R 1ed430a49a13a08f14d4334a2efebccc
|
||||
U dan
|
||||
Z 390e482d41754a020737571e763bbfaa
|
||||
|
|
|
@ -1 +1 @@
|
|||
201ac6d449431dadc6b29faecd68b559bd64bc9f
|
||||
59bd0ec7d4327852ee8c0206b2c59d0a12484db8
|
|
@ -1052,10 +1052,12 @@ begin_table_error:
|
|||
/* Set properties of a table column based on the (magical)
|
||||
** name of the column.
|
||||
*/
|
||||
void sqlite3ColumnPropertiesFromName(Column *pCol){
|
||||
void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){
|
||||
#if SQLITE_ENABLE_HIDDEN_COLUMNS
|
||||
if( sqlite3_strnicmp(pCol->zName, "__hidden__", 10)==0 ){
|
||||
pCol->colFlags |= COLFLAG_HIDDEN;
|
||||
}else if( pTab && pCol!=pTab->aCol && (pCol[-1].colFlags & COLFLAG_HIDDEN) ){
|
||||
pTab->tabFlags |= TF_OOOHidden;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -1103,7 +1105,7 @@ void sqlite3AddColumn(Parse *pParse, Token *pName){
|
|||
pCol = &p->aCol[p->nCol];
|
||||
memset(pCol, 0, sizeof(p->aCol[0]));
|
||||
pCol->zName = z;
|
||||
sqlite3ColumnPropertiesFromName(pCol);
|
||||
sqlite3ColumnPropertiesFromName(p, pCol);
|
||||
|
||||
/* If there is no type specified, columns have the default affinity
|
||||
** 'BLOB'. If there is a type specified, then sqlite3AddColumnType() will
|
||||
|
|
|
@ -1909,6 +1909,11 @@ static int xferOptimization(
|
|||
for(i=0; i<pDest->nCol; i++){
|
||||
Column *pDestCol = &pDest->aCol[i];
|
||||
Column *pSrcCol = &pSrc->aCol[i];
|
||||
#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
|
||||
if( (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN ){
|
||||
return 0; /* Neither table may have __hidden__ columns */
|
||||
}
|
||||
#endif
|
||||
if( pDestCol->affinity!=pSrcCol->affinity ){
|
||||
return 0; /* Affinity must be the same on all columns */
|
||||
}
|
||||
|
|
|
@ -1659,7 +1659,7 @@ int sqlite3ColumnsFromExprList(
|
|||
if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt);
|
||||
}
|
||||
pCol->zName = zName;
|
||||
sqlite3ColumnPropertiesFromName(pCol);
|
||||
sqlite3ColumnPropertiesFromName(0, pCol);
|
||||
if( zName && sqlite3HashInsert(&ht, zName, pCol)==pCol ){
|
||||
db->mallocFailed = 1;
|
||||
}
|
||||
|
|
|
@ -3331,7 +3331,7 @@ void sqlite3OpenMasterTable(Parse *, int);
|
|||
Index *sqlite3PrimaryKeyIndex(Table*);
|
||||
i16 sqlite3ColumnOfIndex(Index*, i16);
|
||||
void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
|
||||
void sqlite3ColumnPropertiesFromName(Column*);
|
||||
void sqlite3ColumnPropertiesFromName(Table*, Column*);
|
||||
void sqlite3AddColumn(Parse*,Token*);
|
||||
void sqlite3AddNotNull(Parse*, int);
|
||||
void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
|
||||
|
|
|
@ -71,4 +71,31 @@ foreach {tn view} {
|
|||
} {1 2 3 4 5 {} 7 8 9}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test INSERT INTO ... SELECT ... statements that write to tables with
|
||||
# hidden columns.
|
||||
#
|
||||
do_execsql_test 3.1 {
|
||||
CREATE TABLE t4(a, __hidden__b, c);
|
||||
INSERT INTO t4 SELECT 1, 2;
|
||||
SELECT a, __hidden__b, c FROM t4;
|
||||
} {1 {} 2}
|
||||
|
||||
do_execsql_test 3.2.1 {
|
||||
CREATE TABLE t5(__hidden__a, b, c);
|
||||
CREATE TABLE t6(__hidden__a, b, c);
|
||||
INSERT INTO t6(__hidden__a, b, c) VALUES(1, 2, 3);
|
||||
INSERT INTO t6(__hidden__a, b, c) VALUES(4, 5, 6);
|
||||
INSERT INTO t6(__hidden__a, b, c) VALUES(7, 8, 9);
|
||||
}
|
||||
|
||||
do_execsql_test 3.2.2 {
|
||||
INSERT INTO t5 SELECT * FROM t6;
|
||||
SELECT * FROM t5;
|
||||
} {2 3 5 6 8 9}
|
||||
|
||||
do_execsql_test 3.2.3 {
|
||||
SELECT __hidden__a FROM t5;
|
||||
} {{} {} {}}
|
||||
|
||||
finish_test
|
||||
|
|
Loading…
Reference in New Issue