1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

Add OOM tests for the new code on this branch.

FossilOrigin-Name: e4a18601e5093896e5b323c21aec986b07259353d2ef9455d0a81c6846f40282
This commit is contained in:
dan
2020-04-30 18:28:40 +00:00
parent 1e113844fc
commit 8b023cf592
6 changed files with 143 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
C Report\san\serror\sif\san\sUPDATE...FROM\sstatement\shas\san\sORDER\sBY\sbut\sno\sLIMIT\sclause.\sAdd\stests\sfor\smulti-column\sprimary\skeys.
D 2020-04-30T15:49:56.938
C Add\sOOM\stests\sfor\sthe\snew\scode\son\sthis\sbranch.
D 2020-04-30T18:28:40.716
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -476,7 +476,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
F src/btree.c 02376eb7d49ccf31b53c2504f045ad74687c142a5c15ca837516e59e737867dc
F src/btree.h 32672fa1aa74a7e9ab3aae822f94ffc8e732b1eb005988dc2283f91dc7573398
F src/btreeInt.h 887cdd2ea7f4a65143074a8a7c8928b0546f8c18dda3c06a408ce7992cbab0c0
F src/build.c 8debc951e3f7e5152bbb7e6b2f26cad7b00a1db068c69af7db4aab136486e541
F src/build.c d43ee335c3efc4005b4dcd07aecd1f9e231c10320fe8f65b0bf81f0b4b98eace
F src/callback.c d0b853dd413255d2e337b34545e54d888ea02f20da5ad0e63585b389624c4a6c
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/ctime.c 6a77ec9e0eb87aea929e002c816298907e337094a7b556898ae2d1e6be209f90
@@ -599,7 +599,7 @@ F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c
F src/tokenize.c eee7bae3ec0bc4abee951554bf46a8ba567c0f7752ac90c820ed8afff4c612dc
F src/treeview.c 82c6391a3ba76215d4185fd4719a56ec4caf186a40c8a7b6e6ba4ae4467c2742
F src/trigger.c 4ada1037cc99777f647a882cdacbd1a4deb6567b69daf02946286401b88cdc04
F src/update.c 0f27f4b1128a447df648ba458b08dc119d0974af052a555e038dcce27f7a4bf6
F src/update.c 2f63f9e13c34e4f9fc238e769d8879697d905e542d2e6f9a7a68ea1a5289c631
F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78
F src/utf.c 95fb6e03a5ca679045c5adccd05380f0addccabef5911abddcb06af069500ab7
F src/util.c 3b6cedf7a0c69bd6e1acce832873952d416212d6293b18d03064e07d7a9b5118
@@ -1618,7 +1618,8 @@ F test/update.test e906ca7cb1dc6f52af1ea243e08f727edfa79f924c2691f2f9e72481f8473
F test/update2.test 67455bc61fcbcf96923c45b3bc4f87bc72be7d67575ad35f134906148c7b06d3
F test/upfrom1.tcl 62efddee869b3a6f3e076b2816793fec9422e38d10ea42b63da733cdd2b1ad8e
F test/upfrom1.test 543389b4eef43c7a21079df018cf95e29d7c2a4efd09b2597e54a03bbdbd30b9
F test/upfrom2.test cbf5e1cb5066c9c04034ccb7a937f10a752ee7291670a1fdb4218aedcdaa960e
F test/upfrom2.test 1dded7ed03e8b335b7ac38f9d70b60380df9049ea13076832ab86fd5b78b4926
F test/upfromfault.test 1e68cc570695a0f8cd16ce09c14210fc43928c7b47b3eda38a99abb0b80c9a65
F test/upsert1.test 88f9e258c6a0eeeb85937b08831e8daad440ba41f125af48439e9d33f266fb18
F test/upsert2.test 9c3cdbb1a890227f6504ce4b0e3de68f4cdfa16bb21d8641208a9239896c5a09
F test/upsert3.test 88d7d590a1948a9cb6eac1b54b0642f67a9f35a1fc0f19b200e97d5d39e3179c
@@ -1865,7 +1866,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P b717dc3c5fafb9b86a141e7ecffc030fd9b36aa57a0b3e5200d64ad23a0aa13d
R 8112d214c23c0825cafbe3ae9671b4b5
P ffcdb6689123bb871c9bd8f977197f86f37c42e9094e2d4bb187ff479f74cf65
R 9834e1157ceceff37925bd1917b38659
U dan
Z 00088545d453cb111fa959dd326ff545
Z 98f1c8c70109f9d7189dd668536b4270

View File

@@ -1 +1 @@
ffcdb6689123bb871c9bd8f977197f86f37c42e9094e2d4bb187ff479f74cf65
e4a18601e5093896e5b323c21aec986b07259353d2ef9455d0a81c6846f40282

View File

@@ -4501,15 +4501,15 @@ void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
** are deleted by this function.
*/
SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){
if( p2 && p1 ){
assert( p1->nSrc==1 );
p1 = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, p1->nSrc);
if( p1 ){
assert( p1->nSrc==1+p2->nSrc );
assert( p1 && p1->nSrc==1 );
if( p2 ){
SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, 1);
if( pNew==0 ){
sqlite3SrcListDelete(pParse->db, p2);
}else{
p1 = pNew;
memcpy(&p1->a[1], p2->a, p2->nSrc*sizeof(struct SrcList_item));
sqlite3_free(p2);
}else{
sqlite3SrcListDelete(pParse->db, p2);
}
}
return p1;

View File

@@ -229,11 +229,14 @@ static void updatePopulateEphTable(
);
}
}
assert( pChanges || db->mallocFailed );
if( pChanges ){
for(i=0; i<pChanges->nExpr; i++){
pList = sqlite3ExprListAppend(pParse, pList,
sqlite3ExprDup(db, pChanges->a[i].pExpr, 0)
);
}
}
pSelect = sqlite3SelectNew(
pParse, pList, pSrc, pWhere2, pGroupBy, 0, pOrderBy2, 0, pLimit2
);

View File

@@ -289,6 +289,31 @@ eval [string map [list %WO% $wo %TN% $tn] {
}]
}}
reset_db
do_execsql_test 3.0 {
CREATE TABLE data(x, y, z);
CREATE VIEW t1 AS SELECT * FROM data;
CREATE TRIGGER t1_insert INSTEAD OF INSERT ON t1 BEGIN
INSERT INTO data VALUES(new.x, new.y, new.z);
END;
CREATE TRIGGER t1_update INSTEAD OF UPDATE ON t1 BEGIN
INSERT INTO log VALUES(old.z || '->' || new.z);
END;
CREATE TABLE log(t TEXT);
INSERT INTO t1 VALUES(1, 'i', 'one');
INSERT INTO t1 VALUES(2, 'ii', 'two');
INSERT INTO t1 VALUES(3, 'iii', 'three');
INSERT INTO t1 VALUES(4, 'iv', 'four');
}
do_execsql_test 3.1 {
WITH input(k, v) AS (
VALUES(3, 'thirty'), (1, 'ten')
)
UPDATE t1 SET z=v FROM input WHERE x=k;
}
finish_test

94
test/upfromfault.test Normal file
View File

@@ -0,0 +1,94 @@
# 2020 April 29
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix upfromfault
foreach {tn sql} {
1 {
CREATE TABLE t1(x PRIMARY KEY, y, z UNIQUE);
CREATE INDEX t1y ON t1(y);
}
2 {
CREATE TABLE t1(x PRIMARY KEY, y, z UNIQUE) WITHOUT ROWID;
CREATE INDEX t1y ON t1(y);
}
3 {
CREATE TABLE t1(x, y, z UNIQUE, PRIMARY KEY(x,y)) WITHOUT ROWID;
}
4 {
CREATE VIRTUAL TABLE t1 USING fts5(x, y, z);
}
5 {
CREATE TABLE real(x, y, z);
CREATE VIEW t1 AS SELECT * FROM real;
CREATE TRIGGER t1_insert INSTEAD OF INSERT ON t1 BEGIN
INSERT INTO real VALUES(new.x, new.y, new.z);
END;
CREATE TRIGGER t1_update INSTEAD OF UPDATE ON t1 BEGIN
INSERT INTO log VALUES(old.z || '->' || new.z);
UPDATE real SET y=new.y, z=new.z WHERE x=old.x;
END;
}
} {
if {$tn<5} continue
reset_db
ifcapable !fts5 { if {$tn==4} continue }
execsql $sql
do_execsql_test 1.$tn.0 {
CREATE TABLE log(t TEXT);
INSERT INTO t1 VALUES(1, 'i', 'one');
INSERT INTO t1 VALUES(2, 'ii', 'two');
INSERT INTO t1 VALUES(3, 'iii', 'three');
INSERT INTO t1 VALUES(4, 'iv', 'four');
}
if {$tn!=4 && $tn!=5} {
do_execsql_test 1.$tn.0b {
CREATE TRIGGER tr1 BEFORE UPDATE ON t1 BEGIN
INSERT INTO log VALUES(old.z || '->' || new.z);
END;
CREATE TRIGGER tr2 AFTER UPDATE ON t1 BEGIN
INSERT INTO log VALUES(old.y || '->' || new.y);
END;
}
}
faultsim_save_and_close
do_faultsim_test 1.$tn -prep {
faultsim_restore_and_reopen
execsql { SELECT * FROM t1 }
} -body {
execsql {
WITH data(k, v) AS (
VALUES(3, 'thirty'), (1, 'ten')
)
UPDATE t1 SET z=v FROM data WHERE x=k;
}
} -test {
faultsim_test_result {0 {}} {1 {vtable constructor failed: t1}}
if {$testrc==0} {
set res [execsql { SELECT * FROM t1 }]
if {$res!="1 i ten 2 ii two 3 iii thirty 4 iv four"} {
error "unexpected result: $res"
}
}
}
}
finish_test