1
0

createtab.test 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # 2007 May 02
  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 that it is OK to create new tables
  13. # and indices while creating existing tables and indices.
  14. #
  15. # $Id: createtab.test,v 1.3 2007/09/12 17:01:45 danielk1977 Exp $
  16. set testdir [file dirname $argv0]
  17. source $testdir/tester.tcl
  18. ifcapable autovacuum {
  19. set upperBound 2
  20. } else {
  21. set upperBound 0
  22. }
  23. # Run these tests for all possible values of autovacuum.
  24. #
  25. for {set av 0} {$av<=$upperBound} {incr av} {
  26. db close
  27. forcedelete test.db test.db-journal
  28. sqlite3 db test.db
  29. # Create a table that spans multiple pages. It is important
  30. # that part of the database be in pages beyond the root page.
  31. #
  32. do_test createtab-$av.1 {
  33. execsql "PRAGMA auto_vacuum=$av"
  34. execsql {
  35. PRAGMA page_size=1024;
  36. CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
  37. INSERT INTO t1 VALUES(1, hex(randomblob(200)));
  38. INSERT INTO t1 VALUES(2, hex(randomblob(200)));
  39. INSERT INTO t1 VALUES(3, hex(randomblob(200)));
  40. INSERT INTO t1 VALUES(4, hex(randomblob(200)));
  41. SELECT count(*) FROM t1;
  42. }
  43. } {4}
  44. set isUtf16 0
  45. ifcapable utf16 {
  46. set isUtf16 [expr {[execsql {PRAGMA encoding}] != "UTF-8"}]
  47. }
  48. do_test createtab-$av.2 {
  49. file size test.db
  50. } [expr {1024*(4+($av!=0)+(${isUtf16}*2))}]
  51. # Start reading the table
  52. #
  53. do_test createtab-$av.3 {
  54. set STMT [sqlite3_prepare db {SELECT x FROM t1} -1 TAIL]
  55. sqlite3_step $STMT
  56. } {SQLITE_ROW}
  57. do_test createtab-$av.4 {
  58. sqlite3_column_int $STMT 0
  59. } {1}
  60. # While still reading the table, create a new table.
  61. #
  62. do_test createtab-$av.5 {
  63. execsql {
  64. CREATE TABLE t2(a,b);
  65. INSERT INTO t2 VALUES(1,2);
  66. SELECT * FROM t2;
  67. }
  68. } {1 2}
  69. # Continue reading the original table.
  70. #
  71. do_test createtab-$av.6 {
  72. sqlite3_column_int $STMT 0
  73. } {1}
  74. do_test createtab-$av.7 {
  75. sqlite3_step $STMT
  76. } {SQLITE_ROW}
  77. do_test createtab-$av.8 {
  78. sqlite3_column_int $STMT 0
  79. } {2}
  80. # Do another cycle of creating a new database table while contining
  81. # to read the original table.
  82. #
  83. do_test createtab-$av.11 {
  84. execsql {
  85. CREATE TABLE t3(a,b);
  86. INSERT INTO t3 VALUES(4,5);
  87. SELECT * FROM t3;
  88. }
  89. } {4 5}
  90. do_test createtab-$av.12 {
  91. sqlite3_column_int $STMT 0
  92. } {2}
  93. do_test createtab-$av.13 {
  94. sqlite3_step $STMT
  95. } {SQLITE_ROW}
  96. do_test createtab-$av.14 {
  97. sqlite3_column_int $STMT 0
  98. } {3}
  99. # One more cycle.
  100. #
  101. do_test createtab-$av.21 {
  102. execsql {
  103. CREATE TABLE t4(a,b);
  104. INSERT INTO t4 VALUES('abc','xyz');
  105. SELECT * FROM t4;
  106. }
  107. } {abc xyz}
  108. do_test createtab-$av.22 {
  109. sqlite3_column_int $STMT 0
  110. } {3}
  111. do_test createtab-$av.23 {
  112. sqlite3_step $STMT
  113. } {SQLITE_ROW}
  114. do_test createtab-$av.24 {
  115. sqlite3_column_int $STMT 0
  116. } {4}
  117. # Finish reading. Do an integrity check on the database.
  118. #
  119. do_test createtab-$av.30 {
  120. sqlite3_step $STMT
  121. } {SQLITE_DONE}
  122. do_test createtab-$av.31 {
  123. sqlite3_finalize $STMT
  124. } {SQLITE_OK}
  125. do_test createtab-$av.32 {
  126. execsql {
  127. SELECT name FROM sqlite_master WHERE type='table' ORDER BY 1
  128. }
  129. } {t1 t2 t3 t4}
  130. integrity_check createtab-$av.40
  131. }
  132. finish_test