xref: /sqlite-3.40.0/ext/session/session4.test (revision 43ff906d)
1f51e5f6cSdan# 2011 March 25
2f51e5f6cSdan#
3f51e5f6cSdan# The author disclaims copyright to this source code.  In place of
4f51e5f6cSdan# a legal notice, here is a blessing:
5f51e5f6cSdan#
6f51e5f6cSdan#    May you do good and not evil.
7f51e5f6cSdan#    May you find forgiveness for yourself and forgive others.
8f51e5f6cSdan#    May you share freely, never taking more than you give.
9f51e5f6cSdan#
10f51e5f6cSdan#***********************************************************************
11f51e5f6cSdan# This file implements regression tests for the session module.
12f51e5f6cSdan#
13f51e5f6cSdan
14*43ff906dSmistachkinpackage require Tcl 8.6
15*43ff906dSmistachkin
16f51e5f6cSdanif {![info exists testdir]} {
17f51e5f6cSdan  set testdir [file join [file dirname [info script]] .. .. test]
18f51e5f6cSdan}
19f51e5f6cSdansource [file join [file dirname [info script]] session_common.tcl]
20f51e5f6cSdansource $testdir/tester.tcl
219b1c62d4Sdrhifcapable !session {finish_test; return}
22f51e5f6cSdan
23f51e5f6cSdanset testprefix session4
24f51e5f6cSdan
25f51e5f6cSdando_test 1.0 {
26f51e5f6cSdan  execsql {
27f51e5f6cSdan    CREATE TABLE x(a, b, c, d, e, PRIMARY KEY(c, e));
28f51e5f6cSdan    INSERT INTO x VALUES(65.21, X'28B0', 16.35, NULL, 'doers');
29f51e5f6cSdan    INSERT INTO x VALUES(NULL, 78.49, 2, X'60', -66);
30f51e5f6cSdan    INSERT INTO x VALUES('cathedral', NULL, 35, NULL, X'B220937E80A2D8');
31f51e5f6cSdan    INSERT INTO x VALUES(NULL, 'masking', -91.37, NULL, X'596D');
32f51e5f6cSdan    INSERT INTO x VALUES(19, 'domains', 'espouse', -94, 'throw');
33f51e5f6cSdan  }
34f51e5f6cSdan
35f51e5f6cSdan  set changeset [changeset_from_sql {
36f51e5f6cSdan    DELETE FROM x WHERE e = -66;
37f51e5f6cSdan    UPDATE x SET a = 'parameterizable', b = 31.8 WHERE c = 35;
38f51e5f6cSdan    INSERT INTO x VALUES(-75.61, -17, 16.85, NULL, X'D73DB02678');
39f51e5f6cSdan  }]
40f51e5f6cSdan  set {} {}
41f51e5f6cSdan} {}
42f51e5f6cSdan
43f51e5f6cSdan
44f51e5f6cSdan# This currently causes crashes. sqlite3changeset_invert() does not handle
45f51e5f6cSdan# corrupt changesets well.
46f51e5f6cSdanif 0 {
47f51e5f6cSdan  do_test 1.1 {
48f51e5f6cSdan    for {set i 0} {$i < [string length $changeset]} {incr i} {
49f51e5f6cSdan      set before [string range $changeset 0 [expr $i-1]]
50f51e5f6cSdan      set after  [string range $changeset [expr $i+1] end]
51f51e5f6cSdan      for {set j 10} {$j < 260} {incr j} {
52f51e5f6cSdan        set x [binary format "a*ca*" $before $j $after]
53f51e5f6cSdan        catch { sqlite3changeset_invert $x }
54f51e5f6cSdan      }
55f51e5f6cSdan    }
56f51e5f6cSdan  } {}
57f51e5f6cSdan}
58f51e5f6cSdan
59f51e5f6cSdando_test 1.2 {
60f51e5f6cSdan  set x [binary format "ca*" 0 [string range $changeset 1 end]]
61f51e5f6cSdan  list [catch { sqlite3changeset_invert $x } msg] $msg
62f51e5f6cSdan} {1 SQLITE_CORRUPT}
63f51e5f6cSdan
64e5754eecSdando_test 1.3 {
65e5754eecSdan  set x [binary format "ca*" 0 [string range $changeset 1 end]]
66e5754eecSdan  list [catch { sqlite3changeset_apply db $x xConflict } msg] $msg
67e5754eecSdan} {1 SQLITE_CORRUPT}
68e5754eecSdan
69dd8a4af8Sdan#-------------------------------------------------------------------------
70dd8a4af8Sdanreset_db
71dd8a4af8Sdando_execsql_test 2.0 {
72dd8a4af8Sdan  CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d);
73dd8a4af8Sdan  CREATE TABLE t2(e TEXT PRIMARY KEY NOT NULL,f,g);
74dd8a4af8Sdan  CREATE TABLE t3(w REAL PRIMARY KEY NOT NULL,x,y);
75dd8a4af8Sdan  CREATE TABLE t4(z PRIMARY KEY) WITHOUT ROWID;
76dd8a4af8Sdan}
77dd8a4af8Sdan
78dd8a4af8Sdanforeach {tn blob} {
79e341ec69Sdan  1 54010174340012000000
80e341ec69Sdan  2 54fefe8bcb0012000300
81e341ec69Sdan  3 5480809280808001017434001200fb
82e341ec69Sdan  4 50af9c939c9c9cb09c9c6400b09c9c6400
83e341ec69Sdan  5 12000300
84e341ec69Sdan  6 09847304
85e341ec69Sdan  7 5401017434001208
86e341ec69Sdan  8 54010174340012fc0386868600
87e341ec69Sdan  9 54010174340012FC0386868600
88e341ec69Sdan  10 548894FEFE
89e341ec69Sdan  11 54010171340012E703ABFA7433FD1200
90e341ec69Sdan  12 540101743400120003FFED00010000000000000002120002400C00000000000054040100000074310017000100000000000000050100000000000000030100000000000000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F030378797A005403010000743200090003037838790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
91e341ec69Sdan  13 540101743400120003001200010000000000000002120002400C0000000000005404010000007431001700010000000000000005010000000000000003010000000000000004000001000000000000000401000000000000000300170001000000000000000703FC87797A01000000000000000F000001000000000000000F030378797A005403010000743200090003037838790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
92e341ec69Sdan  14 540101743400120003001200010000000000000002120002400C00000000000054040100000074310017000100000000000000050100000000000000030100000000000000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F03FC87797A005403010000743200090003037838790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
93e341ec69Sdan  15 540101743400120003001200010000000000000002120002400C00000000000054040100000074310017000100000000000000050100000000000000030100000000000000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F030378797A005403010000743200090003FC8738790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
94e341ec69Sdan  16 540101743400120003001200010000000000000002120002400C00000000000054040100000074310017000100000000000000050100000000000000030100000000000000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F030378797A00540301000074320009000303783879010000000080000000020000000000000000090003FC87327902400C0000000000000304666F7572
95e341ec69Sdan  17 540101743400120003FFE3000412F7010000E600000000021202120002400C0000000000005B0401000000743100171C0304646F750002400C000000000000540401000000D3310017000100000000000000050100000000000378797A405403000002F10100000100000000000004090001000100000007030378797A0100000000000D0007000001000000002300000F1B0378797A405403013900743200090003038C3879010000000000000000000002120002400C0000000000005B0401000000743117170003047C5E00FF
96e341ec69Sdan  18 54010174340012000300120001000000E6FF100000120002401E00000000000054040100000074310017000100040000010000000000000004FFFF7FFF0000000000010000010000001000000007030378797A01000000000000000F000000000000FA0304666F7572
97e341ec69Sdan  19 540101743400120003001200010000000000000002121B02400C00000000000054040000000074310017000100000000000000050100000000000000030100000000000000040000010000000000000004010000000000000003001700010000000000000007030378817A01000000000000000F000001000000000100000F030378797A005403010000743200090003FFE809000303780000000000000304666F7572
98e341ec69Sdan  20 5401017D3400120003001200010000000000000002120002400CFC00000000005404010000007431001700010000000000000005010000000000000003010000000000000004000001000000000000000401000000000000000300170001000000000000000703FFFF797A01000000000000000F000001000000000000000F030378797A005403010000743200090003037838790100000000800000000200000000000000000900030378326C02400C0000000000000304666F7572
99e341ec69Sdan  21 5401017434001200030012000100FFE20000000002120002400C00000000000054040100E0007431001700010000E99D000000020000000003FFE70009000303783279020004000001030000000000002117000003001700012701000100000000743100000100000000008000090003037F387901000000008000000002000000000400000009005303010A00FF7FFFFF00000000000304664F6572
100e341ec69Sdan  22 540101743400120003FFFF7FFF0000000000000002120002400C00000000000054040100000074310017000100000000000000050100000000000000030100010000000000000000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F030378797A005403010000743200090003037838790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
101e341ec69Sdan  23 540101742700120100120003F5FF0300
102e341ec69Sdan  24 5401017434E312540101743400120003FFFC00
103e341ec69Sdan  25 540101743400540101743D3D3D3D3D3D3D3D3D3D3D3D3D3400120003FFED000300
104e341ec69Sdan  26 5401017446EA5301743D1D3D3D01743D1D3D3DCF3D3D3D1A3D3D3D3D3400120003FFFF000000
105e341ec69Sdan  27 540101743400540101743D3D3D3D3D3D3D3D3D3D251000120003FF81000000000000
106e341ec69Sdan  28 540101340012000397FF3D7F3D3400120003001200540101743D3D3D3D3D3D393D3D3D12000300
107e341ec69Sdan  29 500174340050010F74340012000300120003FFE5
108e341ec69Sdan  30 5004007233E900177FEF0054257F0002EF001200031E12000300
109e341ec69Sdan  31 5001015001015252525250010174340012EF039A9A0100E351525D52525252525252525252525252525252525250010174340012EF039A0100009A9A9A9A9A9BA3B200120003010040743400
110e341ec69Sdan  32 5401017400123400120003FFFC00
111e341ec69Sdan  33 540101743400120003001200010000000000004002120002400C0000000000005404010000007431001700010000000000000005010000000000000003010000000000000004000001000000000000000401000000000000000300170001000000000000000703FC87797A01000000000000000F000001000000000000000F030378797A005403010000743200090003037838790100000000800000000200000000000000000900030378327902400C0000000000000304666F7572
112e341ec69Sdan  34 54040100000074310017000100000002000015050100000000000000030100000000140000040000010000000000000004010000000000000003001700010000000000000007030378797A01000000000000000F000001000000000000000F030378797A0054030100007432000900030378387901000000008E000000020000000000000000090003FFFF000002400C0000000000000304666F7572
113e341ec69Sdan  35 540101743400120003001200010000000000000002120002400C00000000000050060100000074310017000100000000000000050100000000000000030100000003001700010000666F7572
114e341ec69Sdan  36 540101743400120003001200010000000000000002120002400C00000000000050050100000074310017000100000000000000050100000000000000030100000003001700010000666F7572
115e341ec69Sdan  37 540101743400120003001200010000000000000002120002400C00000000000050040100008074310017000100000000000000050100000000000000030100000003001700010000666F7572
116e341ec69Sdan  38 540101743400120003001200010000000000000002120002400C00000000000050040100000074310017000000000000000000050100000000000000030100000003001700010000666F7572
117e341ec69Sdan  39 540101743400120003001200010000000000000002120002400C00000000000050040100018074310017000100000000000000050100000000000000030100000003001700010000666F7572
118e341ec69Sdan  40 540101743400120003001200010000000000000002120002400C0000000000005004FEFFFFFF74310017000100000000000000050100000000000000030100000003001700010000666F7572
119e341ec69Sdan  41 540101743400120003001200010000000000000002120002400C00000000000050040100000074310017000004000000000000050100000000000000030100000003001700010000666F7572
120e341ec69Sdan  42 540101743400120003001200010000000000000002120002400C0000000000005005FFFF050074310017000100000000000000050100000000000000030100000003001700010000666F7572
121e341ec69Sdan  43 540101743400120003001200010000000000000002120002400C000000000000500401006E0074310017000300000000001221050100000000000000030100000003001700010000666F7572
122e341ec69Sdan  44 540101743400120003001200010000000000020000120002400C00000000000050050100000074310017000100000000000000050100004000000000030100000025001700010000666F7572
123e341ec69Sdan  45 540101743400120003001200010000000000ECFF02120002400C000000000000500401F9FF00743100170001000000000000000500E1000000000000030100000003000000000000666F7572
124e341ec69Sdan  46 54010174340B0B0B0B0B0B0B0B0B0B0B0B0B0B0B00120003001200010000000000000002120002400C00000000000050040100000074310017010000000000000000050100FFE900000000030100000003007F00000000666F7572
125e341ec69Sdan  47 54010103001200010000000000020002120002400C0000000000005004010000F374310017000100000000000000050100000000000000030100000003001700010000666F8E72
126e341ec69Sdan  48 540101743400120003001200010000000000000002120002400C00000000000050030012000174310017000700000000000000050100002000000001000000000003001700010000666F7572
127e341ec69Sdan  49 540101743400120004001200010000000000000002120002400C0000000000005004010000FC733100170001000000000000000501000000000000000301000000F6FF17000100007C6F7572
128e341ec69Sdan  50 54010174FFDDFF8003001200010000100000000002120002400C000000000000500401000000743100170000000005010000000000000000000003010072
129e341ec69Sdan  51 540101743200120003001200010000000000000002120002400C00000000000050040100001074310017000000000003010000120300170100000000000000050100000000000000030100000003001700010000666F7572
130e341ec69Sdan  52 540101745401017434001200010000000000001702120002400C00000000000050040100001A74310017000100000000000100000100000000000000030100000003001700010000666F7572
131e341ec69Sdan  53 540101743400120003001200010000000000000002120002400C000000000000500401000000743100170001000002400C00000000000050040110000074310017000000000000050100000000000000030100000003001700010000666F7572
132e341ec69Sdan  54 540101743400120003001200010000000000000002120002400C000000000002120002400C00000000000050040100000074310017FF0050040100000074310017FF7F00000000000000050100000000000000030100000003001700010000666F7572
133e341ec69Sdan  55 540101743400120003001200010000000000000002120002400C00000000000050040100000074310017000100010080000001000000020003010100000300170100000003001700010000666F7572
1346344eddaSdan  56 5487ffffff7f
135dd8a4af8Sdan} {
136dd8a4af8Sdan  do_test 2.$tn {
137dd8a4af8Sdan    set changeset [binary decode hex $blob]
138e341ec69Sdan#set fd [open x.change w+]
139e341ec69Sdan#fconfigure $fd -encoding binary -translation binary
140e341ec69Sdan#puts -nonewline $fd $changeset
141e341ec69Sdan#close $fd
142dd8a4af8Sdan    list [catch { sqlite3changeset_apply db $changeset xConflict } msg] $msg
143dd8a4af8Sdan  } {1 SQLITE_CORRUPT}
144dd8a4af8Sdan}
145dd8a4af8Sdan
146f51e5f6cSdanfinish_test
147