CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
tkt2767.test91 linesDownload Raw Back to test
1# 2007 Oct 32#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# This file is to test that ticket #2767 has been fixed.13# Ticket #2767 is for a VDBE stack overflow on BEFORE14# triggers that run RAISE(IGNORE).15#16# $Id: tkt2767.test,v 1.3 2009/04/07 14:14:23 danielk1977 Exp $17#18 19set testdir [file dirname $argv0]20source $testdir/tester.tcl21 22ifcapable !trigger { finish_test ; return }23 24do_test tkt2767-1.1 {25  execsql {26    -- Construct a table with many rows of data27    CREATE TABLE t1(x);28    INSERT INTO t1 VALUES(1);29    INSERT INTO t1 VALUES(2);30    INSERT INTO t1 SELECT x+2 FROM t1;31    INSERT INTO t1 SELECT x+4 FROM t1;32    INSERT INTO t1 SELECT x+8 FROM t1;33    INSERT INTO t1 SELECT x+16 FROM t1;34 35    -- BEFORE triggers that invoke raise(ignore).  The effect of36    -- these triggers should be to make INSERTs, UPDATEs, and DELETEs37    -- into no-ops.38    CREATE TRIGGER r1 BEFORE UPDATE ON t1 BEGIN39      SELECT raise(ignore);40    END;41    CREATE TRIGGER r2 BEFORE DELETE ON t1 BEGIN42      SELECT raise(ignore);43    END;44    CREATE TRIGGER r3 BEFORE INSERT ON t1 BEGIN45      SELECT raise(ignore);46    END;47 48    -- Verify the table content49    SELECT count(*), sum(x) FROM t1;50  }51} {32 528}52 53# Try to delete all elements of the table.  This will invoke the54# DELETE trigger 32 times, which should overflow the VDBE stack if55# the problem of #2767 is not fixed.  If the problem is fixed, all56# the deletes should be no-ops so the table should remain unchanged.57#58do_test tkt2767-1.2 {59  execsql {60    DELETE FROM t1 WHERE x>0;61    SELECT count(*), sum(x) FROM t1;62  }63} {32 528}64 65# Try to update all elements of the table.  This will invoke the66# UPDATE trigger 32 times, which should overflow the VDBE stack if67# the problem of #2767 is not fixed.  If the problem is fixed, all68# the updates should be no-ops so the table should remain unchanged.69#70do_test tkt2767-1.3 {71  execsql {72    UPDATE t1 SET x=x+1;73    SELECT count(*), sum(x) FROM t1;74  }75} {32 528}76 77# Invoke the insert trigger.  The insert trigger was working78# even prior to the fix of #2767.  But it seems good to go ahead79# and verify that it works.80#81do_test tkt2767-1.4 {82  execsql {83    INSERT INTO t1 SELECT x+32 FROM t1;84    SELECT count(*), sum(x) FROM t1;85  }86} {32 528}87 88 89 90finish_test91