Annotation of embedaddon/sqlite3/test/table.test, revision 1.1.1.1
1.1 misho 1: # 2001 September 15
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 file is testing the CREATE TABLE statement.
13: #
14: # $Id: table.test,v 1.53 2009/06/05 17:09:12 drh Exp $
15:
16: set testdir [file dirname $argv0]
17: source $testdir/tester.tcl
18:
19: # Create a basic table and verify it is added to sqlite_master
20: #
21: do_test table-1.1 {
22: execsql {
23: CREATE TABLE test1 (
24: one varchar(10),
25: two text
26: )
27: }
28: execsql {
29: SELECT sql FROM sqlite_master WHERE type!='meta'
30: }
31: } {{CREATE TABLE test1 (
32: one varchar(10),
33: two text
34: )}}
35:
36:
37: # Verify the other fields of the sqlite_master file.
38: #
39: do_test table-1.3 {
40: execsql {SELECT name, tbl_name, type FROM sqlite_master WHERE type!='meta'}
41: } {test1 test1 table}
42:
43: # Close and reopen the database. Verify that everything is
44: # still the same.
45: #
46: do_test table-1.4 {
47: db close
48: sqlite3 db test.db
49: execsql {SELECT name, tbl_name, type from sqlite_master WHERE type!='meta'}
50: } {test1 test1 table}
51:
52: # Drop the database and make sure it disappears.
53: #
54: do_test table-1.5 {
55: execsql {DROP TABLE test1}
56: execsql {SELECT * FROM sqlite_master WHERE type!='meta'}
57: } {}
58:
59: # Close and reopen the database. Verify that the table is
60: # still gone.
61: #
62: do_test table-1.6 {
63: db close
64: sqlite3 db test.db
65: execsql {SELECT name FROM sqlite_master WHERE type!='meta'}
66: } {}
67:
68: # Repeat the above steps, but this time quote the table name.
69: #
70: do_test table-1.10 {
71: execsql {CREATE TABLE "create" (f1 int)}
72: execsql {SELECT name FROM sqlite_master WHERE type!='meta'}
73: } {create}
74: do_test table-1.11 {
75: execsql {DROP TABLE "create"}
76: execsql {SELECT name FROM "sqlite_master" WHERE type!='meta'}
77: } {}
78: do_test table-1.12 {
79: execsql {CREATE TABLE test1("f1 ho" int)}
80: execsql {SELECT name as "X" FROM sqlite_master WHERE type!='meta'}
81: } {test1}
82: do_test table-1.13 {
83: execsql {DROP TABLE "TEST1"}
84: execsql {SELECT name FROM "sqlite_master" WHERE type!='meta'}
85: } {}
86:
87:
88:
89: # Verify that we cannot make two tables with the same name
90: #
91: do_test table-2.1 {
92: execsql {CREATE TABLE TEST2(one text)}
93: catchsql {CREATE TABLE test2(two text default 'hi')}
94: } {1 {table test2 already exists}}
95: do_test table-2.1.1 {
96: catchsql {CREATE TABLE "test2" (two)}
97: } {1 {table "test2" already exists}}
98: do_test table-2.1b {
99: set v [catch {execsql {CREATE TABLE sqlite_master(two text)}} msg]
100: lappend v $msg
101: } {1 {object name reserved for internal use: sqlite_master}}
102: do_test table-2.1c {
103: db close
104: sqlite3 db test.db
105: set v [catch {execsql {CREATE TABLE sqlite_master(two text)}} msg]
106: lappend v $msg
107: } {1 {object name reserved for internal use: sqlite_master}}
108: do_test table-2.1d {
109: catchsql {CREATE TABLE IF NOT EXISTS test2(x,y)}
110: } {0 {}}
111: do_test table-2.1e {
112: catchsql {CREATE TABLE IF NOT EXISTS test2(x UNIQUE, y TEXT PRIMARY KEY)}
113: } {0 {}}
114: do_test table-2.1f {
115: execsql {DROP TABLE test2; SELECT name FROM sqlite_master WHERE type!='meta'}
116: } {}
117:
118: # Verify that we cannot make a table with the same name as an index
119: #
120: do_test table-2.2a {
121: execsql {CREATE TABLE test2(one text)}
122: execsql {CREATE INDEX test3 ON test2(one)}
123: catchsql {CREATE TABLE test3(two text)}
124: } {1 {there is already an index named test3}}
125: do_test table-2.2b {
126: db close
127: sqlite3 db test.db
128: set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
129: lappend v $msg
130: } {1 {there is already an index named test3}}
131: do_test table-2.2c {
132: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
133: } {test2 test3}
134: do_test table-2.2d {
135: execsql {DROP INDEX test3}
136: set v [catch {execsql {CREATE TABLE test3(two text)}} msg]
137: lappend v $msg
138: } {0 {}}
139: do_test table-2.2e {
140: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
141: } {test2 test3}
142: do_test table-2.2f {
143: execsql {DROP TABLE test2; DROP TABLE test3}
144: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
145: } {}
146:
147: # Create a table with many field names
148: #
149: set big_table \
150: {CREATE TABLE big(
151: f1 varchar(20),
152: f2 char(10),
153: f3 varchar(30) primary key,
154: f4 text,
155: f5 text,
156: f6 text,
157: f7 text,
158: f8 text,
159: f9 text,
160: f10 text,
161: f11 text,
162: f12 text,
163: f13 text,
164: f14 text,
165: f15 text,
166: f16 text,
167: f17 text,
168: f18 text,
169: f19 text,
170: f20 text
171: )}
172: do_test table-3.1 {
173: execsql $big_table
174: execsql {SELECT sql FROM sqlite_master WHERE type=='table'}
175: } \{$big_table\}
176: do_test table-3.2 {
177: set v [catch {execsql {CREATE TABLE BIG(xyz foo)}} msg]
178: lappend v $msg
179: } {1 {table BIG already exists}}
180: do_test table-3.3 {
181: set v [catch {execsql {CREATE TABLE biG(xyz foo)}} msg]
182: lappend v $msg
183: } {1 {table biG already exists}}
184: do_test table-3.4 {
185: set v [catch {execsql {CREATE TABLE bIg(xyz foo)}} msg]
186: lappend v $msg
187: } {1 {table bIg already exists}}
188: do_test table-3.5 {
189: db close
190: sqlite3 db test.db
191: set v [catch {execsql {CREATE TABLE Big(xyz foo)}} msg]
192: lappend v $msg
193: } {1 {table Big already exists}}
194: do_test table-3.6 {
195: execsql {DROP TABLE big}
196: execsql {SELECT name FROM sqlite_master WHERE type!='meta'}
197: } {}
198:
199: # Try creating large numbers of tables
200: #
201: set r {}
202: for {set i 1} {$i<=100} {incr i} {
203: lappend r [format test%03d $i]
204: }
205: do_test table-4.1 {
206: for {set i 1} {$i<=100} {incr i} {
207: set sql "CREATE TABLE [format test%03d $i] ("
208: for {set k 1} {$k<$i} {incr k} {
209: append sql "field$k text,"
210: }
211: append sql "last_field text)"
212: execsql $sql
213: }
214: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
215: } $r
216: do_test table-4.1b {
217: db close
218: sqlite3 db test.db
219: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
220: } $r
221:
222: # Drop the even numbered tables
223: #
224: set r {}
225: for {set i 1} {$i<=100} {incr i 2} {
226: lappend r [format test%03d $i]
227: }
228: do_test table-4.2 {
229: for {set i 2} {$i<=100} {incr i 2} {
230: # if {$i==38} {execsql {pragma vdbe_trace=on}}
231: set sql "DROP TABLE [format TEST%03d $i]"
232: execsql $sql
233: }
234: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
235: } $r
236: #exit
237:
238: # Drop the odd number tables
239: #
240: do_test table-4.3 {
241: for {set i 1} {$i<=100} {incr i 2} {
242: set sql "DROP TABLE [format test%03d $i]"
243: execsql $sql
244: }
245: execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name}
246: } {}
247:
248: # Try to drop a table that does not exist
249: #
250: do_test table-5.1.1 {
251: catchsql {DROP TABLE test009}
252: } {1 {no such table: test009}}
253: do_test table-5.1.2 {
254: catchsql {DROP TABLE IF EXISTS test009}
255: } {0 {}}
256:
257: # Try to drop sqlite_master
258: #
259: do_test table-5.2 {
260: catchsql {DROP TABLE IF EXISTS sqlite_master}
261: } {1 {table sqlite_master may not be dropped}}
262:
263: # Dropping sqlite_statN tables is OK.
264: #
265: do_test table-5.2.1 {
266: db eval {
267: ANALYZE;
268: DROP TABLE IF EXISTS sqlite_stat1;
269: DROP TABLE IF EXISTS sqlite_stat2;
270: DROP TABLE IF EXISTS sqlite_stat3;
271: SELECT name FROM sqlite_master WHERE name GLOB 'sqlite_stat*';
272: }
273: } {}
274:
275: # Make sure an EXPLAIN does not really create a new table
276: #
277: do_test table-5.3 {
278: ifcapable {explain} {
279: execsql {EXPLAIN CREATE TABLE test1(f1 int)}
280: }
281: execsql {SELECT name FROM sqlite_master WHERE type!='meta'}
282: } {}
283:
284: # Make sure an EXPLAIN does not really drop an existing table
285: #
286: do_test table-5.4 {
287: execsql {CREATE TABLE test1(f1 int)}
288: ifcapable {explain} {
289: execsql {EXPLAIN DROP TABLE test1}
290: }
291: execsql {SELECT name FROM sqlite_master WHERE type!='meta'}
292: } {test1}
293:
294: # Create a table with a goofy name
295: #
296: #do_test table-6.1 {
297: # execsql {CREATE TABLE 'Spaces In This Name!'(x int)}
298: # execsql {INSERT INTO 'spaces in this name!' VALUES(1)}
299: # set list [glob -nocomplain testdb/spaces*.tbl]
300: #} {testdb/spaces+in+this+name+.tbl}
301:
302: # Try using keywords as table names or column names.
303: #
304: do_test table-7.1 {
305: set v [catch {execsql {
306: CREATE TABLE weird(
307: desc text,
308: asc text,
309: key int,
310: [14_vac] boolean,
311: fuzzy_dog_12 varchar(10),
312: begin blob,
313: end clob
314: )
315: }} msg]
316: lappend v $msg
317: } {0 {}}
318: do_test table-7.2 {
319: execsql {
320: INSERT INTO weird VALUES('a','b',9,0,'xyz','hi','y''all');
321: SELECT * FROM weird;
322: }
323: } {a b 9 0 xyz hi y'all}
324: do_test table-7.3 {
325: execsql2 {
326: SELECT * FROM weird;
327: }
328: } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all}
329: do_test table-7.3 {
330: execsql {
331: CREATE TABLE savepoint(release);
332: INSERT INTO savepoint(release) VALUES(10);
333: UPDATE savepoint SET release = 5;
334: SELECT release FROM savepoint;
335: }
336: } {5}
337:
338: # Try out the CREATE TABLE AS syntax
339: #
340: do_test table-8.1 {
341: execsql2 {
342: CREATE TABLE t2 AS SELECT * FROM weird;
343: SELECT * FROM t2;
344: }
345: } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all}
346: do_test table-8.1.1 {
347: execsql {
348: SELECT sql FROM sqlite_master WHERE name='t2';
349: }
350: } {{CREATE TABLE t2(
351: "desc" TEXT,
352: "asc" TEXT,
353: "key" INT,
354: "14_vac" NUM,
355: fuzzy_dog_12 TEXT,
356: "begin",
357: "end" TEXT
358: )}}
359: do_test table-8.2 {
360: execsql {
361: CREATE TABLE "t3""xyz"(a,b,c);
362: INSERT INTO [t3"xyz] VALUES(1,2,3);
363: SELECT * FROM [t3"xyz];
364: }
365: } {1 2 3}
366: do_test table-8.3 {
367: execsql2 {
368: CREATE TABLE [t4"abc] AS SELECT count(*) as cnt, max(b+c) FROM [t3"xyz];
369: SELECT * FROM [t4"abc];
370: }
371: } {cnt 1 max(b+c) 5}
372:
373: # Update for v3: The declaration type of anything except a column is now a
374: # NULL pointer, so the created table has no column types. (Changed result
375: # from {{CREATE TABLE 't4"abc'(cnt NUMERIC,"max(b+c)" NUMERIC)}}).
376: do_test table-8.3.1 {
377: execsql {
378: SELECT sql FROM sqlite_master WHERE name='t4"abc'
379: }
380: } {{CREATE TABLE "t4""abc"(cnt,"max(b+c)")}}
381:
382: ifcapable tempdb {
383: do_test table-8.4 {
384: execsql2 {
385: CREATE TEMPORARY TABLE t5 AS SELECT count(*) AS [y'all] FROM [t3"xyz];
386: SELECT * FROM t5;
387: }
388: } {y'all 1}
389: }
390:
391: do_test table-8.5 {
392: db close
393: sqlite3 db test.db
394: execsql2 {
395: SELECT * FROM [t4"abc];
396: }
397: } {cnt 1 max(b+c) 5}
398: do_test table-8.6 {
399: execsql2 {
400: SELECT * FROM t2;
401: }
402: } {desc a asc b key 9 14_vac 0 fuzzy_dog_12 xyz begin hi end y'all}
403: do_test table-8.7 {
404: catchsql {
405: SELECT * FROM t5;
406: }
407: } {1 {no such table: t5}}
408: do_test table-8.8 {
409: catchsql {
410: CREATE TABLE t5 AS SELECT * FROM no_such_table;
411: }
412: } {1 {no such table: no_such_table}}
413:
414: do_test table-8.9 {
415: execsql {
416: CREATE TABLE t10("col.1" [char.3]);
417: CREATE TABLE t11 AS SELECT * FROM t10;
418: SELECT sql FROM sqlite_master WHERE name = 't11';
419: }
420: } {{CREATE TABLE t11("col.1" TEXT)}}
421: do_test table-8.10 {
422: execsql {
423: CREATE TABLE t12(
424: a INTEGER,
425: b VARCHAR(10),
426: c VARCHAR(1,10),
427: d VARCHAR(+1,-10),
428: e VARCHAR (+1,-10),
429: f "VARCHAR (+1,-10, 5)",
430: g BIG INTEGER
431: );
432: CREATE TABLE t13 AS SELECT * FROM t12;
433: SELECT sql FROM sqlite_master WHERE name = 't13';
434: }
435: } {{CREATE TABLE t13(
436: a INT,
437: b TEXT,
438: c TEXT,
439: d TEXT,
440: e TEXT,
441: f TEXT,
442: g INT
443: )}}
444:
445: # Make sure we cannot have duplicate column names within a table.
446: #
447: do_test table-9.1 {
448: catchsql {
449: CREATE TABLE t6(a,b,a);
450: }
451: } {1 {duplicate column name: a}}
452: do_test table-9.2 {
453: catchsql {
454: CREATE TABLE t6(a varchar(100), b blob, a integer);
455: }
456: } {1 {duplicate column name: a}}
457:
458: # Check the foreign key syntax.
459: #
460: ifcapable {foreignkey} {
461: do_test table-10.1 {
462: catchsql {
463: CREATE TABLE t6(a REFERENCES t4(a) NOT NULL);
464: INSERT INTO t6 VALUES(NULL);
465: }
466: } {1 {t6.a may not be NULL}}
467: do_test table-10.2 {
468: catchsql {
469: DROP TABLE t6;
470: CREATE TABLE t6(a REFERENCES t4(a) MATCH PARTIAL);
471: }
472: } {0 {}}
473: do_test table-10.3 {
474: catchsql {
475: DROP TABLE t6;
476: CREATE TABLE t6(a REFERENCES t4 MATCH FULL ON DELETE SET NULL NOT NULL);
477: }
478: } {0 {}}
479: do_test table-10.4 {
480: catchsql {
481: DROP TABLE t6;
482: CREATE TABLE t6(a REFERENCES t4 MATCH FULL ON UPDATE SET DEFAULT DEFAULT 1);
483: }
484: } {0 {}}
485: do_test table-10.5 {
486: catchsql {
487: DROP TABLE t6;
488: CREATE TABLE t6(a NOT NULL NOT DEFERRABLE INITIALLY IMMEDIATE);
489: }
490: } {0 {}}
491: do_test table-10.6 {
492: catchsql {
493: DROP TABLE t6;
494: CREATE TABLE t6(a NOT NULL DEFERRABLE INITIALLY DEFERRED);
495: }
496: } {0 {}}
497: do_test table-10.7 {
498: catchsql {
499: DROP TABLE t6;
500: CREATE TABLE t6(a,
501: FOREIGN KEY (a) REFERENCES t4(b) DEFERRABLE INITIALLY DEFERRED
502: );
503: }
504: } {0 {}}
505: do_test table-10.8 {
506: catchsql {
507: DROP TABLE t6;
508: CREATE TABLE t6(a,b,c,
509: FOREIGN KEY (b,c) REFERENCES t4(x,y) MATCH PARTIAL
510: ON UPDATE SET NULL ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
511: );
512: }
513: } {0 {}}
514: do_test table-10.9 {
515: catchsql {
516: DROP TABLE t6;
517: CREATE TABLE t6(a,b,c,
518: FOREIGN KEY (b,c) REFERENCES t4(x)
519: );
520: }
521: } {1 {number of columns in foreign key does not match the number of columns in the referenced table}}
522: do_test table-10.10 {
523: catchsql {DROP TABLE t6}
524: catchsql {
525: CREATE TABLE t6(a,b,c,
526: FOREIGN KEY (b,c) REFERENCES t4(x,y,z)
527: );
528: }
529: } {1 {number of columns in foreign key does not match the number of columns in the referenced table}}
530: do_test table-10.11 {
531: catchsql {DROP TABLE t6}
532: catchsql {
533: CREATE TABLE t6(a,b, c REFERENCES t4(x,y));
534: }
535: } {1 {foreign key on c should reference only one column of table t4}}
536: do_test table-10.12 {
537: catchsql {DROP TABLE t6}
538: catchsql {
539: CREATE TABLE t6(a,b,c,
540: FOREIGN KEY (b,x) REFERENCES t4(x,y)
541: );
542: }
543: } {1 {unknown column "x" in foreign key definition}}
544: do_test table-10.13 {
545: catchsql {DROP TABLE t6}
546: catchsql {
547: CREATE TABLE t6(a,b,c,
548: FOREIGN KEY (x,b) REFERENCES t4(x,y)
549: );
550: }
551: } {1 {unknown column "x" in foreign key definition}}
552: } ;# endif foreignkey
553:
554: # Test for the "typeof" function. More tests for the
555: # typeof() function are found in bind.test and types.test.
556: #
557: do_test table-11.1 {
558: execsql {
559: CREATE TABLE t7(
560: a integer primary key,
561: b number(5,10),
562: c character varying (8),
563: d VARCHAR(9),
564: e clob,
565: f BLOB,
566: g Text,
567: h
568: );
569: INSERT INTO t7(a) VALUES(1);
570: SELECT typeof(a), typeof(b), typeof(c), typeof(d),
571: typeof(e), typeof(f), typeof(g), typeof(h)
572: FROM t7 LIMIT 1;
573: }
574: } {integer null null null null null null null}
575: do_test table-11.2 {
576: execsql {
577: SELECT typeof(a+b), typeof(a||b), typeof(c+d), typeof(c||d)
578: FROM t7 LIMIT 1;
579: }
580: } {null null null null}
581:
582: # Test that when creating a table using CREATE TABLE AS, column types are
583: # assigned correctly for (SELECT ...) and 'x AS y' expressions.
584: do_test table-12.1 {
585: ifcapable subquery {
586: execsql {
587: CREATE TABLE t8 AS SELECT b, h, a as i, (SELECT f FROM t7) as j FROM t7;
588: }
589: } else {
590: execsql {
591: CREATE TABLE t8 AS SELECT b, h, a as i, f as j FROM t7;
592: }
593: }
594: } {}
595: do_test table-12.2 {
596: execsql {
597: SELECT sql FROM sqlite_master WHERE tbl_name = 't8'
598: }
599: } {{CREATE TABLE t8(b NUM,h,i INT,j)}}
600:
601: #--------------------------------------------------------------------
602: # Test cases table-13.*
603: #
604: # Test the ability to have default values of CURRENT_TIME, CURRENT_DATE
605: # and CURRENT_TIMESTAMP.
606: #
607: do_test table-13.1 {
608: execsql {
609: CREATE TABLE tablet8(
610: a integer primary key,
611: tm text DEFAULT CURRENT_TIME,
612: dt text DEFAULT CURRENT_DATE,
613: dttm text DEFAULT CURRENT_TIMESTAMP
614: );
615: SELECT * FROM tablet8;
616: }
617: } {}
618: set i 0
619: unset -nocomplain date time seconds
620: foreach {date time seconds} {
621: 1976-07-04 12:00:00 205329600
622: 1994-04-16 14:00:00 766504800
623: 2000-01-01 00:00:00 946684800
624: 2003-12-31 12:34:56 1072874096
625: } {
626: incr i
627: set sqlite_current_time $seconds
628: do_test table-13.2.$i {
629: execsql "
630: INSERT INTO tablet8(a) VALUES($i);
631: SELECT tm, dt, dttm FROM tablet8 WHERE a=$i;
632: "
633: } [list $time $date [list $date $time]]
634: }
635: set sqlite_current_time 0
636:
637: #--------------------------------------------------------------------
638: # Test cases table-14.*
639: #
640: # Test that a table cannot be created or dropped while other virtual
641: # machines are active. This is required because otherwise when in
642: # auto-vacuum mode the btree-layer may need to move the root-pages of
643: # a table for which there is an open cursor.
644: #
645: # 2007-05-02: A open btree cursor no longer blocks CREATE TABLE.
646: # But DROP TABLE is still prohibited because we do not want to
647: # delete a table out from under a running query.
648: #
649:
650: # db eval {
651: # pragma vdbe_trace = 0;
652: # }
653: # Try to create a table from within a callback:
654: unset -nocomplain result
655: do_test table-14.1 {
656: set rc [
657: catch {
658: db eval {SELECT * FROM tablet8 LIMIT 1} {} {
659: db eval {CREATE TABLE t9(a, b, c)}
660: }
661: } msg
662: ]
663: set result [list $rc $msg]
664: } {0 {}}
665:
666: # Try to drop a table from within a callback:
667: do_test table-14.2 {
668: set rc [
669: catch {
670: db eval {SELECT * FROM tablet8 LIMIT 1} {} {
671: db eval {DROP TABLE t9;}
672: }
673: } msg
674: ]
675: set result [list $rc $msg]
676: } {1 {database table is locked}}
677:
678: ifcapable attach {
679: # Now attach a database and ensure that a table can be created in the
680: # attached database whilst in a callback from a query on the main database.
681: do_test table-14.3 {
682: forcedelete test2.db
683: forcedelete test2.db-journal
684: execsql {
685: ATTACH 'test2.db' as aux;
686: }
687: db eval {SELECT * FROM tablet8 LIMIT 1} {} {
688: db eval {CREATE TABLE aux.t1(a, b, c)}
689: }
690: } {}
691:
692: # On the other hand, it should be impossible to drop a table when any VMs
693: # are active. This is because VerifyCookie instructions may have already
694: # been executed, and btree root-pages may not move after this (which a
695: # delete table might do).
696: do_test table-14.4 {
697: set rc [
698: catch {
699: db eval {SELECT * FROM tablet8 LIMIT 1} {} {
700: db eval {DROP TABLE aux.t1;}
701: }
702: } msg
703: ]
704: set result [list $rc $msg]
705: } {1 {database table is locked}}
706: }
707:
708: # Create and drop 2000 tables. This is to check that the balance_shallow()
709: # routine works correctly on the sqlite_master table. At one point it
710: # contained a bug that would prevent the right-child pointer of the
711: # child page from being copied to the root page.
712: #
713: do_test table-15.1 {
714: execsql {BEGIN}
715: for {set i 0} {$i<2000} {incr i} {
716: execsql "CREATE TABLE tbl$i (a, b, c)"
717: }
718: execsql {COMMIT}
719: } {}
720: do_test table-15.2 {
721: execsql {BEGIN}
722: for {set i 0} {$i<2000} {incr i} {
723: execsql "DROP TABLE tbl$i"
724: }
725: execsql {COMMIT}
726: } {}
727:
728: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>