Annotation of embedaddon/sqlite3/test/bigrow.test, revision 1.1
1.1 ! misho 1: # 2001 September 23
! 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 stressing the library by putting large amounts
! 13: # of data in a single row of a table.
! 14: #
! 15: # $Id: bigrow.test,v 1.5 2004/08/07 23:54:48 drh Exp $
! 16:
! 17: set testdir [file dirname $argv0]
! 18: source $testdir/tester.tcl
! 19:
! 20: # Make a big string that we can use for test data
! 21: #
! 22: do_test bigrow-1.0 {
! 23: set ::bigstr {}
! 24: for {set i 1} {$i<=9999} {incr i} {
! 25: set sep [string index "abcdefghijklmnopqrstuvwxyz" [expr {$i%26}]]
! 26: append ::bigstr "$sep [format %04d $i] "
! 27: }
! 28: string length $::bigstr
! 29: } {69993}
! 30:
! 31: # Make a table into which we can insert some but records.
! 32: #
! 33: do_test bigrow-1.1 {
! 34: execsql {
! 35: CREATE TABLE t1(a text, b text, c text);
! 36: SELECT name FROM sqlite_master
! 37: WHERE type='table' OR type='index'
! 38: ORDER BY name
! 39: }
! 40: } {t1}
! 41:
! 42: do_test bigrow-1.2 {
! 43: set ::big1 [string range $::bigstr 0 65519]
! 44: set sql "INSERT INTO t1 VALUES('abc',"
! 45: append sql "'$::big1', 'xyz');"
! 46: execsql $sql
! 47: execsql {SELECT a, c FROM t1}
! 48: } {abc xyz}
! 49: do_test bigrow-1.3 {
! 50: execsql {SELECT b FROM t1}
! 51: } [list $::big1]
! 52: do_test bigrow-1.4 {
! 53: set ::big2 [string range $::bigstr 0 65520]
! 54: set sql "INSERT INTO t1 VALUES('abc2',"
! 55: append sql "'$::big2', 'xyz2');"
! 56: set r [catch {execsql $sql} msg]
! 57: lappend r $msg
! 58: } {0 {}}
! 59: do_test bigrow-1.4.1 {
! 60: execsql {SELECT b FROM t1 ORDER BY c}
! 61: } [list $::big1 $::big2]
! 62: do_test bigrow-1.4.2 {
! 63: execsql {SELECT c FROM t1 ORDER BY c}
! 64: } {xyz xyz2}
! 65: do_test bigrow-1.4.3 {
! 66: execsql {DELETE FROM t1 WHERE a='abc2'}
! 67: execsql {SELECT c FROM t1}
! 68: } {xyz}
! 69:
! 70: do_test bigrow-1.5 {
! 71: execsql {
! 72: UPDATE t1 SET a=b, b=a;
! 73: SELECT b,c FROM t1
! 74: }
! 75: } {abc xyz}
! 76: do_test bigrow-1.6 {
! 77: execsql {
! 78: SELECT * FROM t1
! 79: }
! 80: } [list $::big1 abc xyz]
! 81: do_test bigrow-1.7 {
! 82: execsql {
! 83: INSERT INTO t1 VALUES('1','2','3');
! 84: INSERT INTO t1 VALUES('A','B','C');
! 85: SELECT b FROM t1 WHERE a=='1';
! 86: }
! 87: } {2}
! 88: do_test bigrow-1.8 {
! 89: execsql "SELECT b FROM t1 WHERE a=='$::big1'"
! 90: } {abc}
! 91: do_test bigrow-1.9 {
! 92: execsql "SELECT b FROM t1 WHERE a!='$::big1' ORDER BY a"
! 93: } {2 B}
! 94:
! 95: # Try doing some indexing on big columns
! 96: #
! 97: do_test bigrow-2.1 {
! 98: execsql {
! 99: CREATE INDEX i1 ON t1(a)
! 100: }
! 101: execsql "SELECT b FROM t1 WHERE a=='$::big1'"
! 102: } {abc}
! 103: do_test bigrow-2.2 {
! 104: execsql {
! 105: UPDATE t1 SET a=b, b=a
! 106: }
! 107: execsql "SELECT b FROM t1 WHERE a=='abc'"
! 108: } [list $::big1]
! 109: do_test bigrow-2.3 {
! 110: execsql {
! 111: UPDATE t1 SET a=b, b=a
! 112: }
! 113: execsql "SELECT b FROM t1 WHERE a=='$::big1'"
! 114: } {abc}
! 115: catch {unset ::bigstr}
! 116: catch {unset ::big1}
! 117: catch {unset ::big2}
! 118:
! 119: # Mosts of the tests above were created back when rows were limited in
! 120: # size to 64K. Now rows can be much bigger. Test that logic. Also
! 121: # make sure things work correctly at the transition boundries between
! 122: # row sizes of 256 to 257 bytes and from 65536 to 65537 bytes.
! 123: #
! 124: # We begin by testing the 256..257 transition.
! 125: #
! 126: do_test bigrow-3.1 {
! 127: execsql {
! 128: DELETE FROM t1;
! 129: INSERT INTO t1(a,b,c) VALUES('one','abcdefghijklmnopqrstuvwxyz0123','hi');
! 130: }
! 131: execsql {SELECT a,length(b),c FROM t1}
! 132: } {one 30 hi}
! 133: do_test bigrow-3.2 {
! 134: execsql {
! 135: UPDATE t1 SET b=b||b;
! 136: UPDATE t1 SET b=b||b;
! 137: UPDATE t1 SET b=b||b;
! 138: }
! 139: execsql {SELECT a,length(b),c FROM t1}
! 140: } {one 240 hi}
! 141: for {set i 1} {$i<10} {incr i} {
! 142: do_test bigrow-3.3.$i {
! 143: execsql "UPDATE t1 SET b=b||'$i'"
! 144: execsql {SELECT a,length(b),c FROM t1}
! 145: } "one [expr {240+$i}] hi"
! 146: }
! 147:
! 148: # Now test the 65536..65537 row-size transition.
! 149: #
! 150: do_test bigrow-4.1 {
! 151: execsql {
! 152: DELETE FROM t1;
! 153: INSERT INTO t1(a,b,c) VALUES('one','abcdefghijklmnopqrstuvwxyz0123','hi');
! 154: }
! 155: execsql {SELECT a,length(b),c FROM t1}
! 156: } {one 30 hi}
! 157: do_test bigrow-4.2 {
! 158: execsql {
! 159: UPDATE t1 SET b=b||b;
! 160: UPDATE t1 SET b=b||b;
! 161: UPDATE t1 SET b=b||b;
! 162: UPDATE t1 SET b=b||b;
! 163: UPDATE t1 SET b=b||b;
! 164: UPDATE t1 SET b=b||b;
! 165: UPDATE t1 SET b=b||b;
! 166: UPDATE t1 SET b=b||b;
! 167: UPDATE t1 SET b=b||b;
! 168: UPDATE t1 SET b=b||b;
! 169: UPDATE t1 SET b=b||b;
! 170: UPDATE t1 SET b=b||b;
! 171: }
! 172: execsql {SELECT a,length(b),c FROM t1}
! 173: } {one 122880 hi}
! 174: do_test bigrow-4.3 {
! 175: execsql {
! 176: UPDATE t1 SET b=substr(b,1,65515)
! 177: }
! 178: execsql {SELECT a,length(b),c FROM t1}
! 179: } {one 65515 hi}
! 180: for {set i 1} {$i<10} {incr i} {
! 181: do_test bigrow-4.4.$i {
! 182: execsql "UPDATE t1 SET b=b||'$i'"
! 183: execsql {SELECT a,length(b),c FROM t1}
! 184: } "one [expr {65515+$i}] hi"
! 185: }
! 186:
! 187: # Check to make sure the library recovers safely if a row contains
! 188: # too much data.
! 189: #
! 190: do_test bigrow-5.1 {
! 191: execsql {
! 192: DELETE FROM t1;
! 193: INSERT INTO t1(a,b,c) VALUES('one','abcdefghijklmnopqrstuvwxyz0123','hi');
! 194: }
! 195: execsql {SELECT a,length(b),c FROM t1}
! 196: } {one 30 hi}
! 197: set i 1
! 198: for {set sz 60} {$sz<1048560} {incr sz $sz} {
! 199: do_test bigrow-5.2.$i {
! 200: execsql {
! 201: UPDATE t1 SET b=b||b;
! 202: SELECT a,length(b),c FROM t1;
! 203: }
! 204: } "one $sz hi"
! 205: incr i
! 206: }
! 207: do_test bigrow-5.3 {
! 208: catchsql {UPDATE t1 SET b=b||b}
! 209: } {0 {}}
! 210: do_test bigrow-5.4 {
! 211: execsql {SELECT length(b) FROM t1}
! 212: } 1966080
! 213: do_test bigrow-5.5 {
! 214: catchsql {UPDATE t1 SET b=b||b}
! 215: } {0 {}}
! 216: do_test bigrow-5.6 {
! 217: execsql {SELECT length(b) FROM t1}
! 218: } 3932160
! 219: do_test bigrow-5.99 {
! 220: execsql {DROP TABLE t1}
! 221: } {}
! 222:
! 223: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>