Annotation of embedaddon/sqlite3/test/wherelimit.test, revision 1.1.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>