Annotation of embedaddon/sqlite3/test/autoinc.test, revision 1.1.1.1
1.1 misho 1: # 2004 November 12
2: #
3: # The author disclaims copyright to this source code. In place of
4: # 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: # This file implements regression tests for SQLite library. The
12: # focus of this script is testing the AUTOINCREMENT features.
13: #
14: # $Id: autoinc.test,v 1.14 2009/06/23 20:28:54 drh Exp $
15: #
16:
17: set testdir [file dirname $argv0]
18: source $testdir/tester.tcl
19:
20: # If the library is not compiled with autoincrement support then
21: # skip all tests in this file.
22: #
23: ifcapable {!autoinc} {
24: finish_test
25: return
26: }
27:
28: sqlite3_db_config_lookaside db 0 0 0
29:
30: # The database is initially empty.
31: #
32: do_test autoinc-1.1 {
33: execsql {
34: SELECT name FROM sqlite_master WHERE type='table';
35: }
36: } {}
37:
38: # Add a table with the AUTOINCREMENT feature. Verify that the
39: # SQLITE_SEQUENCE table gets created.
40: #
41: do_test autoinc-1.2 {
42: execsql {
43: CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
44: SELECT name FROM sqlite_master WHERE type='table';
45: }
46: } {t1 sqlite_sequence}
47:
48: # The SQLITE_SEQUENCE table is initially empty
49: #
50: do_test autoinc-1.3 {
51: execsql {
52: SELECT * FROM sqlite_sequence;
53: }
54: } {}
55: do_test autoinc-1.3.1 {
56: catchsql {
57: CREATE INDEX seqidx ON sqlite_sequence(name)
58: }
59: } {1 {table sqlite_sequence may not be indexed}}
60:
61: # Close and reopen the database. Verify that everything is still there.
62: #
63: do_test autoinc-1.4 {
64: db close
65: sqlite3 db test.db
66: execsql {
67: SELECT * FROM sqlite_sequence;
68: }
69: } {}
70:
71: # We are not allowed to drop the sqlite_sequence table.
72: #
73: do_test autoinc-1.5 {
74: catchsql {DROP TABLE sqlite_sequence}
75: } {1 {table sqlite_sequence may not be dropped}}
76: do_test autoinc-1.6 {
77: execsql {SELECT name FROM sqlite_master WHERE type='table'}
78: } {t1 sqlite_sequence}
79:
80: # Insert an entries into the t1 table and make sure the largest key
81: # is always recorded in the sqlite_sequence table.
82: #
83: do_test autoinc-2.1 {
84: execsql {
85: SELECT * FROM sqlite_sequence
86: }
87: } {}
88: do_test autoinc-2.2 {
89: execsql {
90: INSERT INTO t1 VALUES(12,34);
91: SELECT * FROM sqlite_sequence;
92: }
93: } {t1 12}
94: do_test autoinc-2.3 {
95: execsql {
96: INSERT INTO t1 VALUES(1,23);
97: SELECT * FROM sqlite_sequence;
98: }
99: } {t1 12}
100: do_test autoinc-2.4 {
101: execsql {
102: INSERT INTO t1 VALUES(123,456);
103: SELECT * FROM sqlite_sequence;
104: }
105: } {t1 123}
106: do_test autoinc-2.5 {
107: execsql {
108: INSERT INTO t1 VALUES(NULL,567);
109: SELECT * FROM sqlite_sequence;
110: }
111: } {t1 124}
112: do_test autoinc-2.6 {
113: execsql {
114: DELETE FROM t1 WHERE y=567;
115: SELECT * FROM sqlite_sequence;
116: }
117: } {t1 124}
118: do_test autoinc-2.7 {
119: execsql {
120: INSERT INTO t1 VALUES(NULL,567);
121: SELECT * FROM sqlite_sequence;
122: }
123: } {t1 125}
124: do_test autoinc-2.8 {
125: execsql {
126: DELETE FROM t1;
127: SELECT * FROM sqlite_sequence;
128: }
129: } {t1 125}
130: do_test autoinc-2.9 {
131: execsql {
132: INSERT INTO t1 VALUES(12,34);
133: SELECT * FROM sqlite_sequence;
134: }
135: } {t1 125}
136: do_test autoinc-2.10 {
137: execsql {
138: INSERT INTO t1 VALUES(125,456);
139: SELECT * FROM sqlite_sequence;
140: }
141: } {t1 125}
142: do_test autoinc-2.11 {
143: execsql {
144: INSERT INTO t1 VALUES(-1234567,-1);
145: SELECT * FROM sqlite_sequence;
146: }
147: } {t1 125}
148: do_test autoinc-2.12 {
149: execsql {
150: INSERT INTO t1 VALUES(234,5678);
151: SELECT * FROM sqlite_sequence;
152: }
153: } {t1 234}
154: do_test autoinc-2.13 {
155: execsql {
156: DELETE FROM t1;
157: INSERT INTO t1 VALUES(NULL,1);
158: SELECT * FROM sqlite_sequence;
159: }
160: } {t1 235}
161: do_test autoinc-2.14 {
162: execsql {
163: SELECT * FROM t1;
164: }
165: } {235 1}
166:
167: # Manually change the autoincrement values in sqlite_sequence.
168: #
169: do_test autoinc-2.20 {
170: execsql {
171: UPDATE sqlite_sequence SET seq=1234 WHERE name='t1';
172: INSERT INTO t1 VALUES(NULL,2);
173: SELECT * FROM t1;
174: }
175: } {235 1 1235 2}
176: do_test autoinc-2.21 {
177: execsql {
178: SELECT * FROM sqlite_sequence;
179: }
180: } {t1 1235}
181: do_test autoinc-2.22 {
182: execsql {
183: UPDATE sqlite_sequence SET seq=NULL WHERE name='t1';
184: INSERT INTO t1 VALUES(NULL,3);
185: SELECT * FROM t1;
186: }
187: } {235 1 1235 2 1236 3}
188: do_test autoinc-2.23 {
189: execsql {
190: SELECT * FROM sqlite_sequence;
191: }
192: } {t1 1236}
193: do_test autoinc-2.24 {
194: execsql {
195: UPDATE sqlite_sequence SET seq='a-string' WHERE name='t1';
196: INSERT INTO t1 VALUES(NULL,4);
197: SELECT * FROM t1;
198: }
199: } {235 1 1235 2 1236 3 1237 4}
200: do_test autoinc-2.25 {
201: execsql {
202: SELECT * FROM sqlite_sequence;
203: }
204: } {t1 1237}
205: do_test autoinc-2.26 {
206: execsql {
207: DELETE FROM sqlite_sequence WHERE name='t1';
208: INSERT INTO t1 VALUES(NULL,5);
209: SELECT * FROM t1;
210: }
211: } {235 1 1235 2 1236 3 1237 4 1238 5}
212: do_test autoinc-2.27 {
213: execsql {
214: SELECT * FROM sqlite_sequence;
215: }
216: } {t1 1238}
217: do_test autoinc-2.28 {
218: execsql {
219: UPDATE sqlite_sequence SET seq='12345678901234567890'
220: WHERE name='t1';
221: INSERT INTO t1 VALUES(NULL,6);
222: SELECT * FROM t1;
223: }
224: } {235 1 1235 2 1236 3 1237 4 1238 5 1239 6}
225: do_test autoinc-2.29 {
226: execsql {
227: SELECT * FROM sqlite_sequence;
228: }
229: } {t1 1239}
230:
231: # Test multi-row inserts
232: #
233: do_test autoinc-2.50 {
234: execsql {
235: DELETE FROM t1 WHERE y>=3;
236: INSERT INTO t1 SELECT NULL, y+2 FROM t1;
237: SELECT * FROM t1;
238: }
239: } {235 1 1235 2 1240 3 1241 4}
240: do_test autoinc-2.51 {
241: execsql {
242: SELECT * FROM sqlite_sequence
243: }
244: } {t1 1241}
245:
246: ifcapable tempdb {
247: do_test autoinc-2.52 {
248: execsql {
249: CREATE TEMP TABLE t2 AS SELECT y FROM t1;
250: }
251: execsql {
252: INSERT INTO t1 SELECT NULL, y+4 FROM t2;
253: SELECT * FROM t1;
254: }
255: } {235 1 1235 2 1240 3 1241 4 1242 5 1243 6 1244 7 1245 8}
256: do_test autoinc-2.53 {
257: execsql {
258: SELECT * FROM sqlite_sequence
259: }
260: } {t1 1245}
261: do_test autoinc-2.54 {
262: execsql {
263: DELETE FROM t1;
264: INSERT INTO t1 SELECT NULL, y FROM t2;
265: SELECT * FROM t1;
266: }
267: } {1246 1 1247 2 1248 3 1249 4}
268: do_test autoinc-2.55 {
269: execsql {
270: SELECT * FROM sqlite_sequence
271: }
272: } {t1 1249}
273: }
274:
275: # Create multiple AUTOINCREMENT tables. Make sure all sequences are
276: # tracked separately and do not interfere with one another.
277: #
278: do_test autoinc-2.70 {
279: catchsql {
280: DROP TABLE t2;
281: }
282: execsql {
283: CREATE TABLE t2(d, e INTEGER PRIMARY KEY AUTOINCREMENT, f);
284: INSERT INTO t2(d) VALUES(1);
285: SELECT * FROM sqlite_sequence;
286: }
287: } [ifcapable tempdb {list t1 1249 t2 1} else {list t1 1241 t2 1}]
288: do_test autoinc-2.71 {
289: execsql {
290: INSERT INTO t2(d) VALUES(2);
291: SELECT * FROM sqlite_sequence;
292: }
293: } [ifcapable tempdb {list t1 1249 t2 2} else {list t1 1241 t2 2}]
294: do_test autoinc-2.72 {
295: execsql {
296: INSERT INTO t1(x) VALUES(10000);
297: SELECT * FROM sqlite_sequence;
298: }
299: } {t1 10000 t2 2}
300: do_test autoinc-2.73 {
301: execsql {
302: CREATE TABLE t3(g INTEGER PRIMARY KEY AUTOINCREMENT, h);
303: INSERT INTO t3(h) VALUES(1);
304: SELECT * FROM sqlite_sequence;
305: }
306: } {t1 10000 t2 2 t3 1}
307: do_test autoinc-2.74 {
308: execsql {
309: INSERT INTO t2(d,e) VALUES(3,100);
310: SELECT * FROM sqlite_sequence;
311: }
312: } {t1 10000 t2 100 t3 1}
313:
314:
315: # When a table with an AUTOINCREMENT is deleted, the corresponding entry
316: # in the SQLITE_SEQUENCE table should also be deleted. But the SQLITE_SEQUENCE
317: # table itself should remain behind.
318: #
319: do_test autoinc-3.1 {
320: execsql {SELECT name FROM sqlite_sequence}
321: } {t1 t2 t3}
322: do_test autoinc-3.2 {
323: execsql {
324: DROP TABLE t1;
325: SELECT name FROM sqlite_sequence;
326: }
327: } {t2 t3}
328: do_test autoinc-3.3 {
329: execsql {
330: DROP TABLE t3;
331: SELECT name FROM sqlite_sequence;
332: }
333: } {t2}
334: do_test autoinc-3.4 {
335: execsql {
336: DROP TABLE t2;
337: SELECT name FROM sqlite_sequence;
338: }
339: } {}
340:
341: # AUTOINCREMENT on TEMP tables.
342: #
343: ifcapable tempdb {
344: do_test autoinc-4.1 {
345: execsql {
346: SELECT 1, name FROM sqlite_master WHERE type='table';
347: SELECT 2, name FROM sqlite_temp_master WHERE type='table';
348: }
349: } {1 sqlite_sequence}
350: do_test autoinc-4.2 {
351: execsql {
352: CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
353: CREATE TEMP TABLE t3(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
354: SELECT 1, name FROM sqlite_master WHERE type='table';
355: SELECT 2, name FROM sqlite_temp_master WHERE type='table';
356: }
357: } {1 sqlite_sequence 1 t1 2 t3 2 sqlite_sequence}
358: do_test autoinc-4.3 {
359: execsql {
360: SELECT 1, * FROM main.sqlite_sequence;
361: SELECT 2, * FROM temp.sqlite_sequence;
362: }
363: } {}
364: do_test autoinc-4.4 {
365: execsql {
366: INSERT INTO t1 VALUES(10,1);
367: INSERT INTO t3 VALUES(20,2);
368: INSERT INTO t1 VALUES(NULL,3);
369: INSERT INTO t3 VALUES(NULL,4);
370: }
371: } {}
372:
373: ifcapable compound {
374: do_test autoinc-4.4.1 {
375: execsql {
376: SELECT * FROM t1 UNION ALL SELECT * FROM t3;
377: }
378: } {10 1 11 3 20 2 21 4}
379: } ;# ifcapable compound
380:
381: do_test autoinc-4.5 {
382: execsql {
383: SELECT 1, * FROM main.sqlite_sequence;
384: SELECT 2, * FROM temp.sqlite_sequence;
385: }
386: } {1 t1 11 2 t3 21}
387: do_test autoinc-4.6 {
388: execsql {
389: INSERT INTO t1 SELECT * FROM t3;
390: SELECT 1, * FROM main.sqlite_sequence;
391: SELECT 2, * FROM temp.sqlite_sequence;
392: }
393: } {1 t1 21 2 t3 21}
394: do_test autoinc-4.7 {
395: execsql {
396: INSERT INTO t3 SELECT x+100, y FROM t1;
397: SELECT 1, * FROM main.sqlite_sequence;
398: SELECT 2, * FROM temp.sqlite_sequence;
399: }
400: } {1 t1 21 2 t3 121}
401: do_test autoinc-4.8 {
402: execsql {
403: DROP TABLE t3;
404: SELECT 1, * FROM main.sqlite_sequence;
405: SELECT 2, * FROM temp.sqlite_sequence;
406: }
407: } {1 t1 21}
408: do_test autoinc-4.9 {
409: execsql {
410: CREATE TEMP TABLE t2(p INTEGER PRIMARY KEY AUTOINCREMENT, q);
411: INSERT INTO t2 SELECT * FROM t1;
412: DROP TABLE t1;
413: SELECT 1, * FROM main.sqlite_sequence;
414: SELECT 2, * FROM temp.sqlite_sequence;
415: }
416: } {2 t2 21}
417: do_test autoinc-4.10 {
418: execsql {
419: DROP TABLE t2;
420: SELECT 1, * FROM main.sqlite_sequence;
421: SELECT 2, * FROM temp.sqlite_sequence;
422: }
423: } {}
424: }
425:
426: # Make sure AUTOINCREMENT works on ATTACH-ed tables.
427: #
428: ifcapable tempdb&&attach {
429: do_test autoinc-5.1 {
430: forcedelete test2.db
431: forcedelete test2.db-journal
432: sqlite3 db2 test2.db
433: execsql {
434: CREATE TABLE t4(m INTEGER PRIMARY KEY AUTOINCREMENT, n);
435: CREATE TABLE t5(o, p INTEGER PRIMARY KEY AUTOINCREMENT);
436: } db2;
437: execsql {
438: ATTACH 'test2.db' as aux;
439: SELECT 1, * FROM main.sqlite_sequence;
440: SELECT 2, * FROM temp.sqlite_sequence;
441: SELECT 3, * FROM aux.sqlite_sequence;
442: }
443: } {}
444: do_test autoinc-5.2 {
445: execsql {
446: INSERT INTO t4 VALUES(NULL,1);
447: SELECT 1, * FROM main.sqlite_sequence;
448: SELECT 2, * FROM temp.sqlite_sequence;
449: SELECT 3, * FROM aux.sqlite_sequence;
450: }
451: } {3 t4 1}
452: do_test autoinc-5.3 {
453: execsql {
454: INSERT INTO t5 VALUES(100,200);
455: SELECT * FROM sqlite_sequence
456: } db2
457: } {t4 1 t5 200}
458: do_test autoinc-5.4 {
459: execsql {
460: SELECT 1, * FROM main.sqlite_sequence;
461: SELECT 2, * FROM temp.sqlite_sequence;
462: SELECT 3, * FROM aux.sqlite_sequence;
463: }
464: } {3 t4 1 3 t5 200}
465: }
466:
467: # Requirement REQ00310: Make sure an insert fails if the sequence is
468: # already at its maximum value.
469: #
470: ifcapable {rowid32} {
471: do_test autoinc-6.1 {
472: execsql {
473: CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w);
474: INSERT INTO t6 VALUES(2147483647,1);
475: SELECT seq FROM main.sqlite_sequence WHERE name='t6';
476: }
477: } 2147483647
478: }
479: ifcapable {!rowid32} {
480: do_test autoinc-6.1 {
481: execsql {
482: CREATE TABLE t6(v INTEGER PRIMARY KEY AUTOINCREMENT, w);
483: INSERT INTO t6 VALUES(9223372036854775807,1);
484: SELECT seq FROM main.sqlite_sequence WHERE name='t6';
485: }
486: } 9223372036854775807
487: }
488: do_test autoinc-6.2 {
489: catchsql {
490: INSERT INTO t6 VALUES(NULL,1);
491: }
492: } {1 {database or disk is full}}
493:
494: # Allow the AUTOINCREMENT keyword inside the parentheses
495: # on a separate PRIMARY KEY designation.
496: #
497: do_test autoinc-7.1 {
498: execsql {
499: CREATE TABLE t7(x INTEGER, y REAL, PRIMARY KEY(x AUTOINCREMENT));
500: INSERT INTO t7(y) VALUES(123);
501: INSERT INTO t7(y) VALUES(234);
502: DELETE FROM t7;
503: INSERT INTO t7(y) VALUES(345);
504: SELECT * FROM t7;
505: }
506: } {3 345.0}
507:
508: # Test that if the AUTOINCREMENT is applied to a non integer primary key
509: # the error message is sensible.
510: do_test autoinc-7.2 {
511: catchsql {
512: CREATE TABLE t8(x TEXT PRIMARY KEY AUTOINCREMENT);
513: }
514: } {1 {AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY}}
515:
516:
517: # Ticket #1283. Make sure that preparing but never running a statement
518: # that creates the sqlite_sequence table does not mess up the database.
519: #
520: do_test autoinc-8.1 {
521: catch {db2 close}
522: catch {db close}
523: forcedelete test.db
524: sqlite3 db test.db
525: set DB [sqlite3_connection_pointer db]
526: set STMT [sqlite3_prepare $DB {
527: CREATE TABLE t1(
528: x INTEGER PRIMARY KEY AUTOINCREMENT
529: )
530: } -1 TAIL]
531: sqlite3_finalize $STMT
532: set STMT [sqlite3_prepare $DB {
533: CREATE TABLE t1(
534: x INTEGER PRIMARY KEY AUTOINCREMENT
535: )
536: } -1 TAIL]
537: sqlite3_step $STMT
538: sqlite3_finalize $STMT
539: execsql {
540: INSERT INTO t1 VALUES(NULL);
541: SELECT * FROM t1;
542: }
543: } {1}
544:
545: # Ticket #3148
546: # Make sure the sqlite_sequence table is not damaged when doing
547: # an empty insert - an INSERT INTO ... SELECT ... where the SELECT
548: # clause returns an empty set.
549: #
550: do_test autoinc-9.1 {
551: db eval {
552: CREATE TABLE t2(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
553: INSERT INTO t2 VALUES(NULL, 1);
554: CREATE TABLE t3(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
555: INSERT INTO t3 SELECT * FROM t2 WHERE y>1;
556:
557: SELECT * FROM sqlite_sequence WHERE name='t3';
558: }
559: } {t3 0}
560:
561: ifcapable trigger {
562: catchsql { pragma recursive_triggers = off }
563:
564: # Ticket #3928. Make sure that triggers to not make extra slots in
565: # the SQLITE_SEQUENCE table.
566: #
567: do_test autoinc-3928.1 {
568: db eval {
569: CREATE TABLE t3928(a INTEGER PRIMARY KEY AUTOINCREMENT, b);
570: CREATE TRIGGER t3928r1 BEFORE INSERT ON t3928 BEGIN
571: INSERT INTO t3928(b) VALUES('before1');
572: INSERT INTO t3928(b) VALUES('before2');
573: END;
574: CREATE TRIGGER t3928r2 AFTER INSERT ON t3928 BEGIN
575: INSERT INTO t3928(b) VALUES('after1');
576: INSERT INTO t3928(b) VALUES('after2');
577: END;
578: INSERT INTO t3928(b) VALUES('test');
579: SELECT * FROM t3928 ORDER BY a;
580: }
581: } {1 before1 2 after1 3 after2 4 before2 5 after1 6 after2 7 test 8 before1 9 before2 10 after1 11 before1 12 before2 13 after2}
582: do_test autoinc-3928.2 {
583: db eval {
584: SELECT * FROM sqlite_sequence WHERE name='t3928'
585: }
586: } {t3928 13}
587:
588: do_test autoinc-3928.3 {
589: db eval {
590: DROP TRIGGER t3928r1;
591: DROP TRIGGER t3928r2;
592: CREATE TRIGGER t3928r3 BEFORE UPDATE ON t3928
593: WHEN typeof(new.b)=='integer' BEGIN
594: INSERT INTO t3928(b) VALUES('before-int-' || new.b);
595: END;
596: CREATE TRIGGER t3928r4 AFTER UPDATE ON t3928
597: WHEN typeof(new.b)=='integer' BEGIN
598: INSERT INTO t3928(b) VALUES('after-int-' || new.b);
599: END;
600: DELETE FROM t3928 WHERE a!=1;
601: UPDATE t3928 SET b=456 WHERE a=1;
602: SELECT * FROM t3928 ORDER BY a;
603: }
604: } {1 456 14 before-int-456 15 after-int-456}
605: do_test autoinc-3928.4 {
606: db eval {
607: SELECT * FROM sqlite_sequence WHERE name='t3928'
608: }
609: } {t3928 15}
610:
611: do_test autoinc-3928.5 {
612: db eval {
613: CREATE TABLE t3928b(x);
614: INSERT INTO t3928b VALUES(100);
615: INSERT INTO t3928b VALUES(200);
616: INSERT INTO t3928b VALUES(300);
617: DELETE FROM t3928;
618: CREATE TABLE t3928c(y INTEGER PRIMARY KEY AUTOINCREMENT, z);
619: CREATE TRIGGER t3928br1 BEFORE DELETE ON t3928b BEGIN
620: INSERT INTO t3928(b) VALUES('before-del-'||old.x);
621: INSERT INTO t3928c(z) VALUES('before-del-'||old.x);
622: END;
623: CREATE TRIGGER t3928br2 AFTER DELETE ON t3928b BEGIN
624: INSERT INTO t3928(b) VALUES('after-del-'||old.x);
625: INSERT INTO t3928c(z) VALUES('after-del-'||old.x);
626: END;
627: DELETE FROM t3928b;
628: SELECT * FROM t3928 ORDER BY a;
629: }
630: } {16 before-del-100 17 after-del-100 18 before-del-200 19 after-del-200 20 before-del-300 21 after-del-300}
631: do_test autoinc-3928.6 {
632: db eval {
633: SELECT * FROM t3928c ORDER BY y;
634: }
635: } {1 before-del-100 2 after-del-100 3 before-del-200 4 after-del-200 5 before-del-300 6 after-del-300}
636: do_test autoinc-3928.7 {
637: db eval {
638: SELECT * FROM sqlite_sequence WHERE name LIKE 't3928%' ORDER BY name;
639: }
640: } {t3928 21 t3928c 6}
641:
642: # Ticket [a696379c1f0886615541a48b35bd8181a80e88f8]
643: do_test autoinc-a69637.1 {
644: db eval {
645: CREATE TABLE ta69637_1(x INTEGER PRIMARY KEY AUTOINCREMENT, y);
646: CREATE TABLE ta69637_2(z);
647: CREATE TRIGGER ra69637_1 AFTER INSERT ON ta69637_2 BEGIN
648: INSERT INTO ta69637_1(y) VALUES(new.z+1);
649: END;
650: INSERT INTO ta69637_2 VALUES(123);
651: SELECT * FROM ta69637_1;
652: }
653: } {1 124}
654: do_test autoinc-a69637.2 {
655: db eval {
656: CREATE VIEW va69637_2 AS SELECT * FROM ta69637_2;
657: CREATE TRIGGER ra69637_2 INSTEAD OF INSERT ON va69637_2 BEGIN
658: INSERT INTO ta69637_1(y) VALUES(new.z+10000);
659: END;
660: INSERT INTO va69637_2 VALUES(123);
661: SELECT * FROM ta69637_1;
662: }
663: } {1 124 2 10123}
664: }
665:
666:
667:
668: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>