xref: /sqlite-3.40.0/test/altermalloc3.test (revision ca29bbce)
1c2a878edSdan# 2021 February 18
2c2a878edSdan#
3c2a878edSdan# The author disclaims copyright to this source code.  In place of
4c2a878edSdan# a legal notice, here is a blessing:
5c2a878edSdan#
6c2a878edSdan#    May you do good and not evil.
7c2a878edSdan#    May you find forgiveness for yourself and forgive others.
8c2a878edSdan#    May you share freely, never taking more than you give.
9c2a878edSdan#
10c2a878edSdan#*************************************************************************
11c2a878edSdan#
12c2a878edSdan
13c2a878edSdanset testdir [file dirname $argv0]
14c2a878edSdansource $testdir/tester.tcl
15c2a878edSdansource $testdir/malloc_common.tcl
16c2a878edSdanset testprefix altermalloc3
17c2a878edSdan
18c2a878edSdan# If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
19c2a878edSdanifcapable !altertable {
20c2a878edSdan  finish_test
21c2a878edSdan  return
22c2a878edSdan}
23c2a878edSdan
24*ca29bbceSdan
257b57aa3dSdanset ::TMPDBERROR [list 1 \
267b57aa3dSdan  {unable to open a temporary database file for storing temporary tables}
277b57aa3dSdan]
287b57aa3dSdan
29c2a878edSdando_execsql_test 1.0 {
301fffa73eSdan  CREATE TABLE x1(
311fffa73eSdan      one, two, three, PRIMARY KEY(one),
321fffa73eSdan      CHECK (three!="xyz"), CHECK (two!="one")
331fffa73eSdan  ) WITHOUT ROWID;
341fffa73eSdan  CREATE INDEX x1i ON x1(one+"two"+"four") WHERE "five";
351fffa73eSdan  CREATE TEMP TRIGGER AFTER INSERT ON x1 BEGIN
361fffa73eSdan    UPDATE x1 SET two=new.three || "new" WHERE one=new.one||"";
371fffa73eSdan  END;
38c2a878edSdan  CREATE TABLE t1(a, b, c, d, PRIMARY KEY(d, b)) WITHOUT ROWID;
39c2a878edSdan  INSERT INTO t1 VALUES(1, 2, 3, 4);
40c2a878edSdan}
41c2a878edSdanfaultsim_save_and_close
42c2a878edSdan
43c2a878edSdando_faultsim_test 1 -prep {
44c2a878edSdan  faultsim_restore_and_reopen
45c2a878edSdan} -body {
46c2a878edSdan  execsql { ALTER TABLE t1 DROP COLUMN c }
47c2a878edSdan} -test {
487b57aa3dSdan  faultsim_test_result {0 {}} $::TMPDBERROR
49c2a878edSdan}
50c2a878edSdan
51*ca29bbceSdan
525a69d19eSdan#-------------------------------------------------------------------------
535a69d19eSdan# dbsqlfuzz e3dd84cda3848016a6a6024c7249d09bc2ef2615
545a69d19eSdan#
555a69d19eSdanreset_db
565a69d19eSdando_execsql_test 2.0 {
575a69d19eSdan  CREATE TABLE t2(k,v);
585a69d19eSdan  CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
595a69d19eSdan    UPDATE t2 SET (k,v)= (
605a69d19eSdan       (WITH cte1(a) AS ( SELECT 1 FROM ( SELECT * FROM t2 ) )
615a69d19eSdan       SELECT a FROM cte1
625a69d19eSdan    ), 1);
635a69d19eSdan  END;
64*ca29bbceSdan
65*ca29bbceSdan  CREATE TRIGGER r1 AFTER INSERT ON t2 BEGIN
66*ca29bbceSdan    UPDATE t2 SET k=1 FROM t2 AS one, t2 AS two NATURAL JOIN t2 AS three
67*ca29bbceSdan    WHERE one.k=two.v;
68*ca29bbceSdan  END;
695a69d19eSdan}
705a69d19eSdan
715a69d19eSdanfaultsim_save_and_close
725a69d19eSdanfaultsim_restore_and_reopen
735a69d19eSdan
745a69d19eSdando_execsql_test 2.1 {
755a69d19eSdan  ALTER TABLE t2 RENAME TO t2x;
765a69d19eSdan}
775a69d19eSdan
785a69d19eSdando_faultsim_test 2.2 -prep {
795a69d19eSdan  faultsim_restore_and_reopen
805a69d19eSdan  db eval { SELECT * FROM sqlite_master }
815a69d19eSdan} -body {
825a69d19eSdan  execsql {
835a69d19eSdan    ALTER TABLE t2 RENAME TO t2x;
845a69d19eSdan  }
855a69d19eSdan} -test {
867b57aa3dSdan  faultsim_test_result {0 {}} $::TMPDBERROR
875a69d19eSdan}
88c2a878edSdan
89c2a878edSdanfinish_test
90