Annotation of embedaddon/sqlite3/test/wherelimit.test, revision 1.1
1.1 ! misho 1: # 2008 October 6
! 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 LIMIT ... OFFSET ... clause
! 13: # of UPDATE and DELETE statements.
! 14: #
! 15: # $Id: wherelimit.test,v 1.2 2008/10/10 18:25:46 shane Exp $
! 16:
! 17: set testdir [file dirname $argv0]
! 18: source $testdir/tester.tcl
! 19:
! 20: proc create_test_data {size} {
! 21: # Build some test data
! 22: #
! 23: execsql {
! 24: DROP TABLE IF EXISTS t1;
! 25: CREATE TABLE t1(x int, y int);
! 26: BEGIN;
! 27: }
! 28: for {set i 1} {$i<=$size} {incr i} {
! 29: for {set j 1} {$j<=$size} {incr j} {
! 30: execsql "INSERT INTO t1 VALUES([expr {$i}],[expr {$j}])"
! 31: }
! 32: }
! 33: execsql {
! 34: COMMIT;
! 35: }
! 36: return {}
! 37: }
! 38:
! 39: ifcapable {update_delete_limit} {
! 40:
! 41: # check syntax error support
! 42: do_test wherelimit-0.1 {
! 43: catchsql {DELETE FROM t1 ORDER BY x}
! 44: } {1 {ORDER BY without LIMIT on DELETE}}
! 45: do_test wherelimit-0.2 {
! 46: catchsql {DELETE FROM t1 WHERE x=1 ORDER BY x}
! 47: } {1 {ORDER BY without LIMIT on DELETE}}
! 48: do_test wherelimit-0.3 {
! 49: catchsql {UPDATE t1 SET y=1 WHERE x=1 ORDER BY x}
! 50: } {1 {ORDER BY without LIMIT on UPDATE}}
! 51:
! 52: # no AS on table sources
! 53: do_test wherelimit-0.4 {
! 54: catchsql {DELETE FROM t1 AS a WHERE x=1}
! 55: } {1 {near "AS": syntax error}}
! 56: do_test wherelimit-0.5 {
! 57: catchsql {UPDATE t1 AS a SET y=1 WHERE x=1}
! 58: } {1 {near "AS": syntax error}}
! 59:
! 60: # OFFSET w/o LIMIT
! 61: do_test wherelimit-0.6 {
! 62: catchsql {DELETE FROM t1 WHERE x=1 OFFSET 2}
! 63: } {1 {near "OFFSET": syntax error}}
! 64: do_test wherelimit-0.7 {
! 65: catchsql {UPDATE t1 SET y=1 WHERE x=1 OFFSET 2}
! 66: } {1 {near "OFFSET": syntax error}}
! 67:
! 68:
! 69: # check deletes w/o where clauses but with limit/offsets
! 70: create_test_data 5
! 71: do_test wherelimit-1.0 {
! 72: execsql {SELECT count(*) FROM t1}
! 73: } {25}
! 74: do_test wherelimit-1.1 {
! 75: execsql {DELETE FROM t1}
! 76: execsql {SELECT count(*) FROM t1}
! 77: } {0}
! 78: create_test_data 5
! 79: do_test wherelimit-1.2 {
! 80: execsql {DELETE FROM t1 LIMIT 5}
! 81: execsql {SELECT count(*) FROM t1}
! 82: } {20}
! 83: do_test wherelimit-1.3 {
! 84: # limit 5
! 85: execsql {DELETE FROM t1 ORDER BY x LIMIT 5}
! 86: execsql {SELECT count(*) FROM t1}
! 87: } {15}
! 88: do_test wherelimit-1.4 {
! 89: # limit 5, offset 2
! 90: execsql {DELETE FROM t1 ORDER BY x LIMIT 5 OFFSET 2}
! 91: execsql {SELECT count(*) FROM t1}
! 92: } {10}
! 93: do_test wherelimit-1.5 {
! 94: # limit 5, offset -2
! 95: execsql {DELETE FROM t1 ORDER BY x LIMIT 5 OFFSET -2}
! 96: execsql {SELECT count(*) FROM t1}
! 97: } {5}
! 98: do_test wherelimit-1.6 {
! 99: # limit -5 (no limit), offset 2
! 100: execsql {DELETE FROM t1 ORDER BY x LIMIT 2, -5}
! 101: execsql {SELECT count(*) FROM t1}
! 102: } {2}
! 103: do_test wherelimit-1.7 {
! 104: # limit 5, offset -2 (no offset)
! 105: execsql {DELETE FROM t1 ORDER BY x LIMIT -2, 5}
! 106: execsql {SELECT count(*) FROM t1}
! 107: } {0}
! 108: create_test_data 5
! 109: do_test wherelimit-1.8 {
! 110: # limit -5 (no limit), offset -2 (no offset)
! 111: execsql {DELETE FROM t1 ORDER BY x LIMIT -2, -5}
! 112: execsql {SELECT count(*) FROM t1}
! 113: } {0}
! 114: create_test_data 3
! 115: do_test wherelimit-1.9 {
! 116: # limit 5, offset 2
! 117: execsql {DELETE FROM t1 ORDER BY x LIMIT 2, 5}
! 118: execsql {SELECT count(*) FROM t1}
! 119: } {4}
! 120: do_test wherelimit-1.10 {
! 121: # limit 5, offset 5
! 122: execsql {DELETE FROM t1 ORDER BY x LIMIT 5 OFFSET 5}
! 123: execsql {SELECT count(*) FROM t1}
! 124: } {4}
! 125: do_test wherelimit-1.11 {
! 126: # limit 50, offset 30
! 127: execsql {DELETE FROM t1 ORDER BY x LIMIT 50 OFFSET 30}
! 128: execsql {SELECT count(*) FROM t1}
! 129: } {4}
! 130: do_test wherelimit-1.12 {
! 131: # limit 50, offset 30
! 132: execsql {DELETE FROM t1 ORDER BY x LIMIT 30, 50}
! 133: execsql {SELECT count(*) FROM t1}
! 134: } {4}
! 135: do_test wherelimit-1.13 {
! 136: execsql {DELETE FROM t1 ORDER BY x LIMIT 50 OFFSET 50}
! 137: execsql {SELECT count(*) FROM t1}
! 138: } {4}
! 139:
! 140:
! 141: create_test_data 6
! 142: do_test wherelimit-2.0 {
! 143: execsql {SELECT count(*) FROM t1}
! 144: } {36}
! 145: do_test wherelimit-2.1 {
! 146: execsql {DELETE FROM t1 WHERE x=1}
! 147: execsql {SELECT count(*) FROM t1}
! 148: } {30}
! 149: create_test_data 6
! 150: do_test wherelimit-2.2 {
! 151: execsql {DELETE FROM t1 WHERE x=1 LIMIT 5}
! 152: execsql {SELECT count(*) FROM t1}
! 153: } {31}
! 154: do_test wherelimit-2.3 {
! 155: # limit 5
! 156: execsql {DELETE FROM t1 WHERE x=1 ORDER BY x LIMIT 5}
! 157: execsql {SELECT count(*) FROM t1}
! 158: } {30}
! 159: do_test wherelimit-2.4 {
! 160: # limit 5, offset 2
! 161: execsql {DELETE FROM t1 WHERE x=2 ORDER BY x LIMIT 5 OFFSET 2}
! 162: execsql {SELECT count(*) FROM t1}
! 163: } {26}
! 164: do_test wherelimit-2.5 {
! 165: # limit 5, offset -2
! 166: execsql {DELETE FROM t1 WHERE x=2 ORDER BY x LIMIT 5 OFFSET -2}
! 167: execsql {SELECT count(*) FROM t1}
! 168: } {24}
! 169: do_test wherelimit-2.6 {
! 170: # limit -5 (no limit), offset 2
! 171: execsql {DELETE FROM t1 WHERE x=3 ORDER BY x LIMIT 2, -5}
! 172: execsql {SELECT count(*) FROM t1}
! 173: } {20}
! 174: do_test wherelimit-2.7 {
! 175: # limit 5, offset -2 (no offset)
! 176: execsql {DELETE FROM t1 WHERE x=3 ORDER BY x LIMIT -2, 5}
! 177: execsql {SELECT count(*) FROM t1}
! 178: } {18}
! 179: do_test wherelimit-2.8 {
! 180: # limit -5 (no limit), offset -2 (no offset)
! 181: execsql {DELETE FROM t1 WHERE x=4 ORDER BY x LIMIT -2, -5}
! 182: execsql {SELECT count(*) FROM t1}
! 183: } {12}
! 184: create_test_data 6
! 185: do_test wherelimit-2.9 {
! 186: # limit 5, offset 2
! 187: execsql {DELETE FROM t1 WHERE x=5 ORDER BY x LIMIT 2, 5}
! 188: execsql {SELECT count(*) FROM t1}
! 189: } {32}
! 190: do_test wherelimit-2.10 {
! 191: # limit 5, offset 5
! 192: execsql {DELETE FROM t1 WHERE x=6 ORDER BY x LIMIT 5 OFFSET 5}
! 193: execsql {SELECT count(*) FROM t1}
! 194: } {31}
! 195: do_test wherelimit-2.11 {
! 196: # limit 50, offset 30
! 197: execsql {DELETE FROM t1 WHERE x=1 ORDER BY x LIMIT 50 OFFSET 30}
! 198: execsql {SELECT count(*) FROM t1}
! 199: } {31}
! 200: do_test wherelimit-2.12 {
! 201: # limit 50, offset 30
! 202: execsql {DELETE FROM t1 WHERE x=2 ORDER BY x LIMIT 30, 50}
! 203: execsql {SELECT count(*) FROM t1}
! 204: } {31}
! 205: do_test wherelimit-2.13 {
! 206: execsql {DELETE FROM t1 WHERE x=3 ORDER BY x LIMIT 50 OFFSET 50}
! 207: execsql {SELECT count(*) FROM t1}
! 208: } {31}
! 209:
! 210:
! 211: create_test_data 6
! 212: do_test wherelimit-3.0 {
! 213: execsql {SELECT count(*) FROM t1}
! 214: } {36}
! 215: do_test wherelimit-3.1 {
! 216: execsql {UPDATE t1 SET y=1 WHERE x=1}
! 217: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 218: } {11}
! 219: create_test_data 6
! 220: do_test wherelimit-3.2 {
! 221: execsql {UPDATE t1 SET y=1 WHERE x=1 LIMIT 5}
! 222: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 223: } {10}
! 224: do_test wherelimit-3.3 {
! 225: # limit 5
! 226: execsql {UPDATE t1 SET y=2 WHERE x=2 ORDER BY x LIMIT 5}
! 227: execsql {SELECT count(*) FROM t1 WHERE y=2}
! 228: } {9}
! 229: create_test_data 6
! 230: do_test wherelimit-3.4 {
! 231: # limit 5, offset 2
! 232: execsql {UPDATE t1 SET y=2 WHERE x=2 ORDER BY x LIMIT 5 OFFSET 2}
! 233: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 234: } {6}
! 235: do_test wherelimit-3.5 {
! 236: # limit 5, offset -2
! 237: execsql {UPDATE t1 SET y=2 WHERE x=2 ORDER BY x LIMIT 5 OFFSET -2}
! 238: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 239: } {5}
! 240: do_test wherelimit-3.6 {
! 241: # limit -5 (no limit), offset 2
! 242: execsql {UPDATE t1 SET y=3 WHERE x=3 ORDER BY x LIMIT 2, -5}
! 243: execsql {SELECT count(*) FROM t1 WHERE y=3}
! 244: } {8}
! 245: do_test wherelimit-3.7 {
! 246: # limit 5, offset -2 (no offset)
! 247: execsql {UPDATE t1 SET y=3 WHERE x=3 ORDER BY x LIMIT -2, 5}
! 248: execsql {SELECT count(*) FROM t1 WHERE y=3}
! 249: } {10}
! 250:
! 251: do_test wherelimit-3.8 {
! 252: # limit -5 (no limit), offset -2 (no offset)
! 253: execsql {UPDATE t1 SET y=4 WHERE x=4 ORDER BY x LIMIT -2, -5}
! 254: execsql {SELECT count(*) FROM t1 WHERE y=4}
! 255: } {9}
! 256: create_test_data 6
! 257: do_test wherelimit-3.9 {
! 258: # limit 5, offset 2
! 259: execsql {UPDATE t1 SET y=4 WHERE x=5 ORDER BY x LIMIT 2, 5}
! 260: execsql {SELECT count(*) FROM t1 WHERE y=4}
! 261: } {9}
! 262: do_test wherelimit-3.10 {
! 263: # limit 5, offset 5
! 264: execsql {UPDATE t1 SET y=4 WHERE x=6 ORDER BY x LIMIT 5 OFFSET 5}
! 265: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 266: } {6}
! 267: do_test wherelimit-3.11 {
! 268: # limit 50, offset 30
! 269: execsql {UPDATE t1 SET y=1 WHERE x=1 ORDER BY x LIMIT 50 OFFSET 30}
! 270: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 271: } {6}
! 272: do_test wherelimit-3.12 {
! 273: # limit 50, offset 30
! 274: execsql {UPDATE t1 SET y=1 WHERE x=2 ORDER BY x LIMIT 30, 50}
! 275: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 276: } {6}
! 277: do_test wherelimit-3.13 {
! 278: execsql {UPDATE t1 SET y=1 WHERE x=3 ORDER BY x LIMIT 50 OFFSET 50}
! 279: execsql {SELECT count(*) FROM t1 WHERE y=1}
! 280: } {6}
! 281:
! 282: }
! 283:
! 284: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>