Annotation of embedaddon/sqlite3/test/in.test, revision 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 IN and BETWEEN operator.
! 13: #
! 14: # $Id: in.test,v 1.22 2008/08/04 03:51:24 danielk1977 Exp $
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18:
! 19: # Generate the test data we will need for the first squences of tests.
! 20: #
! 21: do_test in-1.0 {
! 22: execsql {
! 23: BEGIN;
! 24: CREATE TABLE t1(a int, b int);
! 25: }
! 26: for {set i 1} {$i<=10} {incr i} {
! 27: execsql "INSERT INTO t1 VALUES($i,[expr {1<<$i}])"
! 28: }
! 29: execsql {
! 30: COMMIT;
! 31: SELECT count(*) FROM t1;
! 32: }
! 33: } {10}
! 34:
! 35: # Do basic testing of BETWEEN.
! 36: #
! 37: do_test in-1.1 {
! 38: execsql {SELECT a FROM t1 WHERE b BETWEEN 10 AND 50 ORDER BY a}
! 39: } {4 5}
! 40: do_test in-1.2 {
! 41: execsql {SELECT a FROM t1 WHERE b NOT BETWEEN 10 AND 50 ORDER BY a}
! 42: } {1 2 3 6 7 8 9 10}
! 43: do_test in-1.3 {
! 44: execsql {SELECT a FROM t1 WHERE b BETWEEN a AND a*5 ORDER BY a}
! 45: } {1 2 3 4}
! 46: do_test in-1.4 {
! 47: execsql {SELECT a FROM t1 WHERE b NOT BETWEEN a AND a*5 ORDER BY a}
! 48: } {5 6 7 8 9 10}
! 49: do_test in-1.6 {
! 50: execsql {SELECT a FROM t1 WHERE b BETWEEN a AND a*5 OR b=512 ORDER BY a}
! 51: } {1 2 3 4 9}
! 52: do_test in-1.7 {
! 53: execsql {SELECT a+ 100*(a BETWEEN 1 and 3) FROM t1 ORDER BY b}
! 54: } {101 102 103 4 5 6 7 8 9 10}
! 55:
! 56: # The rest of this file concentrates on testing the IN operator.
! 57: # Skip this if the library is compiled with SQLITE_OMIT_SUBQUERY
! 58: # (because the IN operator is unavailable).
! 59: #
! 60: ifcapable !subquery {
! 61: finish_test
! 62: return
! 63: }
! 64:
! 65: # Testing of the IN operator using static lists on the right-hand side.
! 66: #
! 67: do_test in-2.1 {
! 68: execsql {SELECT a FROM t1 WHERE b IN (8,12,16,24,32) ORDER BY a}
! 69: } {3 4 5}
! 70: do_test in-2.2 {
! 71: execsql {SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) ORDER BY a}
! 72: } {1 2 6 7 8 9 10}
! 73: do_test in-2.3 {
! 74: execsql {SELECT a FROM t1 WHERE b IN (8,12,16,24,32) OR b=512 ORDER BY a}
! 75: } {3 4 5 9}
! 76: do_test in-2.4 {
! 77: execsql {SELECT a FROM t1 WHERE b NOT IN (8,12,16,24,32) OR b=512 ORDER BY a}
! 78: } {1 2 6 7 8 9 10}
! 79: do_test in-2.5 {
! 80: execsql {SELECT a+100*(b IN (8,16,24)) FROM t1 ORDER BY b}
! 81: } {1 2 103 104 5 6 7 8 9 10}
! 82:
! 83: do_test in-2.6 {
! 84: execsql {SELECT a FROM t1 WHERE b IN (b+8,64)}
! 85: } {6}
! 86: do_test in-2.7 {
! 87: execsql {SELECT a FROM t1 WHERE b IN (max(5,10,b),20)}
! 88: } {4 5 6 7 8 9 10}
! 89: do_test in-2.8 {
! 90: execsql {SELECT a FROM t1 WHERE b IN (8*2,64/2) ORDER BY b}
! 91: } {4 5}
! 92: do_test in-2.9 {
! 93: execsql {SELECT a FROM t1 WHERE b IN (max(5,10),20)}
! 94: } {}
! 95: do_test in-2.10 {
! 96: execsql {SELECT a FROM t1 WHERE min(0,b IN (a,30))}
! 97: } {}
! 98: do_test in-2.11 {
! 99: set v [catch {execsql {SELECT a FROM t1 WHERE c IN (10,20)}} msg]
! 100: lappend v $msg
! 101: } {1 {no such column: c}}
! 102:
! 103: # Testing the IN operator where the right-hand side is a SELECT
! 104: #
! 105: do_test in-3.1 {
! 106: execsql {
! 107: SELECT a FROM t1
! 108: WHERE b IN (SELECT b FROM t1 WHERE a<5)
! 109: ORDER BY a
! 110: }
! 111: } {1 2 3 4}
! 112: do_test in-3.2 {
! 113: execsql {
! 114: SELECT a FROM t1
! 115: WHERE b IN (SELECT b FROM t1 WHERE a<5) OR b==512
! 116: ORDER BY a
! 117: }
! 118: } {1 2 3 4 9}
! 119: do_test in-3.3 {
! 120: execsql {
! 121: SELECT a + 100*(b IN (SELECT b FROM t1 WHERE a<5)) FROM t1 ORDER BY b
! 122: }
! 123: } {101 102 103 104 5 6 7 8 9 10}
! 124:
! 125: # Make sure the UPDATE and DELETE commands work with IN-SELECT
! 126: #
! 127: do_test in-4.1 {
! 128: execsql {
! 129: UPDATE t1 SET b=b*2
! 130: WHERE b IN (SELECT b FROM t1 WHERE a>8)
! 131: }
! 132: execsql {SELECT b FROM t1 ORDER BY b}
! 133: } {2 4 8 16 32 64 128 256 1024 2048}
! 134: do_test in-4.2 {
! 135: execsql {
! 136: DELETE FROM t1 WHERE b IN (SELECT b FROM t1 WHERE a>8)
! 137: }
! 138: execsql {SELECT a FROM t1 ORDER BY a}
! 139: } {1 2 3 4 5 6 7 8}
! 140: do_test in-4.3 {
! 141: execsql {
! 142: DELETE FROM t1 WHERE b NOT IN (SELECT b FROM t1 WHERE a>4)
! 143: }
! 144: execsql {SELECT a FROM t1 ORDER BY a}
! 145: } {5 6 7 8}
! 146:
! 147: # Do an IN with a constant RHS but where the RHS has many, many
! 148: # elements. We need to test that collisions in the hash table
! 149: # are resolved properly.
! 150: #
! 151: do_test in-5.1 {
! 152: execsql {
! 153: INSERT INTO t1 VALUES('hello', 'world');
! 154: SELECT * FROM t1
! 155: WHERE a IN (
! 156: 'Do','an','IN','with','a','constant','RHS','but','where','the',
! 157: 'has','many','elements','We','need','to','test','that',
! 158: 'collisions','hash','table','are','resolved','properly',
! 159: 'This','in-set','contains','thirty','one','entries','hello');
! 160: }
! 161: } {hello world}
! 162:
! 163: # Make sure the IN operator works with INTEGER PRIMARY KEY fields.
! 164: #
! 165: do_test in-6.1 {
! 166: execsql {
! 167: CREATE TABLE ta(a INTEGER PRIMARY KEY, b);
! 168: INSERT INTO ta VALUES(1,1);
! 169: INSERT INTO ta VALUES(2,2);
! 170: INSERT INTO ta VALUES(3,3);
! 171: INSERT INTO ta VALUES(4,4);
! 172: INSERT INTO ta VALUES(6,6);
! 173: INSERT INTO ta VALUES(8,8);
! 174: INSERT INTO ta VALUES(10,
! 175: 'This is a key that is long enough to require a malloc in the VDBE');
! 176: SELECT * FROM ta WHERE a<10;
! 177: }
! 178: } {1 1 2 2 3 3 4 4 6 6 8 8}
! 179: do_test in-6.2 {
! 180: execsql {
! 181: CREATE TABLE tb(a INTEGER PRIMARY KEY, b);
! 182: INSERT INTO tb VALUES(1,1);
! 183: INSERT INTO tb VALUES(2,2);
! 184: INSERT INTO tb VALUES(3,3);
! 185: INSERT INTO tb VALUES(5,5);
! 186: INSERT INTO tb VALUES(7,7);
! 187: INSERT INTO tb VALUES(9,9);
! 188: INSERT INTO tb VALUES(11,
! 189: 'This is a key that is long enough to require a malloc in the VDBE');
! 190: SELECT * FROM tb WHERE a<10;
! 191: }
! 192: } {1 1 2 2 3 3 5 5 7 7 9 9}
! 193: do_test in-6.3 {
! 194: execsql {
! 195: SELECT a FROM ta WHERE b IN (SELECT a FROM tb);
! 196: }
! 197: } {1 2 3}
! 198: do_test in-6.4 {
! 199: execsql {
! 200: SELECT a FROM ta WHERE b NOT IN (SELECT a FROM tb);
! 201: }
! 202: } {4 6 8 10}
! 203: do_test in-6.5 {
! 204: execsql {
! 205: SELECT a FROM ta WHERE b IN (SELECT b FROM tb);
! 206: }
! 207: } {1 2 3 10}
! 208: do_test in-6.6 {
! 209: execsql {
! 210: SELECT a FROM ta WHERE b NOT IN (SELECT b FROM tb);
! 211: }
! 212: } {4 6 8}
! 213: do_test in-6.7 {
! 214: execsql {
! 215: SELECT a FROM ta WHERE a IN (SELECT a FROM tb);
! 216: }
! 217: } {1 2 3}
! 218: do_test in-6.8 {
! 219: execsql {
! 220: SELECT a FROM ta WHERE a NOT IN (SELECT a FROM tb);
! 221: }
! 222: } {4 6 8 10}
! 223: do_test in-6.9 {
! 224: execsql {
! 225: SELECT a FROM ta WHERE a IN (SELECT b FROM tb);
! 226: }
! 227: } {1 2 3}
! 228: do_test in-6.10 {
! 229: execsql {
! 230: SELECT a FROM ta WHERE a NOT IN (SELECT b FROM tb);
! 231: }
! 232: } {4 6 8 10}
! 233:
! 234: # Tests of IN operator against empty sets. (Ticket #185)
! 235: #
! 236: do_test in-7.1 {
! 237: execsql {
! 238: SELECT a FROM t1 WHERE a IN ();
! 239: }
! 240: } {}
! 241: do_test in-7.2 {
! 242: execsql {
! 243: SELECT a FROM t1 WHERE a IN (5);
! 244: }
! 245: } {5}
! 246: do_test in-7.3 {
! 247: execsql {
! 248: SELECT a FROM t1 WHERE a NOT IN () ORDER BY a;
! 249: }
! 250: } {5 6 7 8 hello}
! 251: do_test in-7.4 {
! 252: execsql {
! 253: SELECT a FROM t1 WHERE a IN (5) AND b IN ();
! 254: }
! 255: } {}
! 256: do_test in-7.5 {
! 257: execsql {
! 258: SELECT a FROM t1 WHERE a IN (5) AND b NOT IN ();
! 259: }
! 260: } {5}
! 261: do_test in-7.6 {
! 262: execsql {
! 263: SELECT a FROM ta WHERE a IN ();
! 264: }
! 265: } {}
! 266: do_test in-7.7 {
! 267: execsql {
! 268: SELECT a FROM ta WHERE a NOT IN ();
! 269: }
! 270: } {1 2 3 4 6 8 10}
! 271:
! 272: do_test in-8.1 {
! 273: execsql {
! 274: SELECT b FROM t1 WHERE a IN ('hello','there')
! 275: }
! 276: } {world}
! 277: do_test in-8.2 {
! 278: execsql {
! 279: SELECT b FROM t1 WHERE a IN ("hello",'there')
! 280: }
! 281: } {world}
! 282:
! 283: # Test constructs of the form: expr IN tablename
! 284: #
! 285: do_test in-9.1 {
! 286: execsql {
! 287: CREATE TABLE t4 AS SELECT a FROM tb;
! 288: SELECT * FROM t4;
! 289: }
! 290: } {1 2 3 5 7 9 11}
! 291: do_test in-9.2 {
! 292: execsql {
! 293: SELECT b FROM t1 WHERE a IN t4;
! 294: }
! 295: } {32 128}
! 296: do_test in-9.3 {
! 297: execsql {
! 298: SELECT b FROM t1 WHERE a NOT IN t4;
! 299: }
! 300: } {64 256 world}
! 301: do_test in-9.4 {
! 302: catchsql {
! 303: SELECT b FROM t1 WHERE a NOT IN tb;
! 304: }
! 305: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 306:
! 307: # IN clauses in CHECK constraints. Ticket #1645
! 308: #
! 309: do_test in-10.1 {
! 310: execsql {
! 311: CREATE TABLE t5(
! 312: a INTEGER,
! 313: CHECK( a IN (111,222,333) )
! 314: );
! 315: INSERT INTO t5 VALUES(111);
! 316: SELECT * FROM t5;
! 317: }
! 318: } {111}
! 319: do_test in-10.2 {
! 320: catchsql {
! 321: INSERT INTO t5 VALUES(4);
! 322: }
! 323: } {1 {constraint failed}}
! 324:
! 325: # Ticket #1821
! 326: #
! 327: # Type affinity applied to the right-hand side of an IN operator.
! 328: #
! 329: do_test in-11.1 {
! 330: execsql {
! 331: CREATE TABLE t6(a,b NUMERIC);
! 332: INSERT INTO t6 VALUES(1,2);
! 333: INSERT INTO t6 VALUES(2,3);
! 334: SELECT * FROM t6 WHERE b IN (2);
! 335: }
! 336: } {1 2}
! 337: do_test in-11.2 {
! 338: # The '2' should be coerced into 2 because t6.b is NUMERIC
! 339: execsql {
! 340: SELECT * FROM t6 WHERE b IN ('2');
! 341: }
! 342: } {1 2}
! 343: do_test in-11.3 {
! 344: # No coercion should occur here because of the unary + before b.
! 345: execsql {
! 346: SELECT * FROM t6 WHERE +b IN ('2');
! 347: }
! 348: } {}
! 349: do_test in-11.4 {
! 350: # No coercion because column a as affinity NONE
! 351: execsql {
! 352: SELECT * FROM t6 WHERE a IN ('2');
! 353: }
! 354: } {}
! 355: do_test in-11.5 {
! 356: execsql {
! 357: SELECT * FROM t6 WHERE a IN (2);
! 358: }
! 359: } {2 3}
! 360: do_test in-11.6 {
! 361: # No coercion because column a as affinity NONE
! 362: execsql {
! 363: SELECT * FROM t6 WHERE +a IN ('2');
! 364: }
! 365: } {}
! 366:
! 367: # Test error conditions with expressions of the form IN(<compound select>).
! 368: #
! 369: ifcapable compound {
! 370: do_test in-12.1 {
! 371: execsql {
! 372: CREATE TABLE t2(a, b, c);
! 373: CREATE TABLE t3(a, b, c);
! 374: }
! 375: } {}
! 376: do_test in-12.2 {
! 377: catchsql {
! 378: SELECT * FROM t2 WHERE a IN (
! 379: SELECT a, b FROM t3 UNION ALL SELECT a, b FROM t2
! 380: );
! 381: }
! 382: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 383: do_test in-12.3 {
! 384: catchsql {
! 385: SELECT * FROM t2 WHERE a IN (
! 386: SELECT a, b FROM t3 UNION SELECT a, b FROM t2
! 387: );
! 388: }
! 389: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 390: do_test in-12.4 {
! 391: catchsql {
! 392: SELECT * FROM t2 WHERE a IN (
! 393: SELECT a, b FROM t3 EXCEPT SELECT a, b FROM t2
! 394: );
! 395: }
! 396: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 397: do_test in-12.5 {
! 398: catchsql {
! 399: SELECT * FROM t2 WHERE a IN (
! 400: SELECT a, b FROM t3 INTERSECT SELECT a, b FROM t2
! 401: );
! 402: }
! 403: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 404: do_test in-12.6 {
! 405: catchsql {
! 406: SELECT * FROM t2 WHERE a IN (
! 407: SELECT a, b FROM t3 UNION ALL SELECT a FROM t2
! 408: );
! 409: }
! 410: } {1 {SELECTs to the left and right of UNION ALL do not have the same number of result columns}}
! 411: do_test in-12.7 {
! 412: catchsql {
! 413: SELECT * FROM t2 WHERE a IN (
! 414: SELECT a, b FROM t3 UNION SELECT a FROM t2
! 415: );
! 416: }
! 417: } {1 {SELECTs to the left and right of UNION do not have the same number of result columns}}
! 418: do_test in-12.8 {
! 419: catchsql {
! 420: SELECT * FROM t2 WHERE a IN (
! 421: SELECT a, b FROM t3 EXCEPT SELECT a FROM t2
! 422: );
! 423: }
! 424: } {1 {SELECTs to the left and right of EXCEPT do not have the same number of result columns}}
! 425: do_test in-12.9 {
! 426: catchsql {
! 427: SELECT * FROM t2 WHERE a IN (
! 428: SELECT a, b FROM t3 INTERSECT SELECT a FROM t2
! 429: );
! 430: }
! 431: } {1 {SELECTs to the left and right of INTERSECT do not have the same number of result columns}}
! 432: }
! 433:
! 434: do_test in-12.10 {
! 435: catchsql {
! 436: SELECT * FROM t2 WHERE a IN (
! 437: SELECT a FROM t3 UNION ALL SELECT a, b FROM t2
! 438: );
! 439: }
! 440: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 441: do_test in-12.11 {
! 442: catchsql {
! 443: SELECT * FROM t2 WHERE a IN (
! 444: SELECT a FROM t3 UNION SELECT a, b FROM t2
! 445: );
! 446: }
! 447: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 448: do_test in-12.12 {
! 449: catchsql {
! 450: SELECT * FROM t2 WHERE a IN (
! 451: SELECT a FROM t3 EXCEPT SELECT a, b FROM t2
! 452: );
! 453: }
! 454: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 455: do_test in-12.13 {
! 456: catchsql {
! 457: SELECT * FROM t2 WHERE a IN (
! 458: SELECT a FROM t3 INTERSECT SELECT a, b FROM t2
! 459: );
! 460: }
! 461: } {1 {only a single result allowed for a SELECT that is part of an expression}}
! 462:
! 463:
! 464: #------------------------------------------------------------------------
! 465: # The following tests check that NULL is handled correctly when it
! 466: # appears as part of a set of values on the right-hand side of an
! 467: # IN or NOT IN operator.
! 468: #
! 469: # When it appears in such a set, NULL is handled as an "unknown value".
! 470: # If, because of the unknown value in the set, the result of the expression
! 471: # cannot be determined, then it itself evaluates to NULL.
! 472: #
! 473:
! 474: # Warm body test to demonstrate the principles being tested:
! 475: #
! 476: do_test in-13.1 {
! 477: db nullvalue "null"
! 478: execsql { SELECT
! 479: 1 IN (NULL, 1, 2), -- The value 1 is a member of the set, return true.
! 480: 3 IN (NULL, 1, 2), -- Ambiguous, return NULL.
! 481: 1 NOT IN (NULL, 1, 2), -- The value 1 is a member of the set, return false.
! 482: 3 NOT IN (NULL, 1, 2) -- Ambiguous, return NULL.
! 483: }
! 484: } {1 null 0 null}
! 485:
! 486: do_test in-13.2 {
! 487: execsql {
! 488: CREATE TABLE t7(a, b, c NOT NULL);
! 489: INSERT INTO t7 VALUES(1, 1, 1);
! 490: INSERT INTO t7 VALUES(2, 2, 2);
! 491: INSERT INTO t7 VALUES(3, 3, 3);
! 492: INSERT INTO t7 VALUES(NULL, 4, 4);
! 493: INSERT INTO t7 VALUES(NULL, 5, 5);
! 494: }
! 495: } {}
! 496:
! 497: do_test in-13.3 {
! 498: execsql { SELECT 2 IN (SELECT a FROM t7) }
! 499: } {1}
! 500: do_test in-13.4 {
! 501: execsql { SELECT 6 IN (SELECT a FROM t7) }
! 502: } {null}
! 503:
! 504: do_test in-13.5 {
! 505: execsql { SELECT 2 IN (SELECT b FROM t7) }
! 506: } {1}
! 507: do_test in-13.6 {
! 508: execsql { SELECT 6 IN (SELECT b FROM t7) }
! 509: } {0}
! 510:
! 511: do_test in-13.7 {
! 512: execsql { SELECT 2 IN (SELECT c FROM t7) }
! 513: } {1}
! 514: do_test in-13.8 {
! 515: execsql { SELECT 6 IN (SELECT c FROM t7) }
! 516: } {0}
! 517:
! 518: do_test in-13.9 {
! 519: execsql {
! 520: SELECT
! 521: 2 NOT IN (SELECT a FROM t7),
! 522: 6 NOT IN (SELECT a FROM t7),
! 523: 2 NOT IN (SELECT b FROM t7),
! 524: 6 NOT IN (SELECT b FROM t7),
! 525: 2 NOT IN (SELECT c FROM t7),
! 526: 6 NOT IN (SELECT c FROM t7)
! 527: }
! 528: } {0 null 0 1 0 1}
! 529:
! 530: do_test in-13.10 {
! 531: execsql {
! 532: SELECT b IN (
! 533: SELECT inside.a
! 534: FROM t7 AS inside
! 535: WHERE inside.b BETWEEN outside.b+1 AND outside.b+2
! 536: )
! 537: FROM t7 AS outside ORDER BY b;
! 538: }
! 539: } {0 null null null 0}
! 540:
! 541: do_test in-13.11 {
! 542: execsql {
! 543: SELECT b NOT IN (
! 544: SELECT inside.a
! 545: FROM t7 AS inside
! 546: WHERE inside.b BETWEEN outside.b+1 AND outside.b+2
! 547: )
! 548: FROM t7 AS outside ORDER BY b;
! 549: }
! 550: } {1 null null null 1}
! 551:
! 552: do_test in-13.12 {
! 553: execsql {
! 554: CREATE INDEX i1 ON t7(a);
! 555: CREATE INDEX i2 ON t7(b);
! 556: CREATE INDEX i3 ON t7(c);
! 557: }
! 558: execsql {
! 559: SELECT
! 560: 2 IN (SELECT a FROM t7),
! 561: 6 IN (SELECT a FROM t7),
! 562: 2 IN (SELECT b FROM t7),
! 563: 6 IN (SELECT b FROM t7),
! 564: 2 IN (SELECT c FROM t7),
! 565: 6 IN (SELECT c FROM t7)
! 566: }
! 567: } {1 null 1 0 1 0}
! 568:
! 569: do_test in-13.13 {
! 570: execsql {
! 571: SELECT
! 572: 2 NOT IN (SELECT a FROM t7),
! 573: 6 NOT IN (SELECT a FROM t7),
! 574: 2 NOT IN (SELECT b FROM t7),
! 575: 6 NOT IN (SELECT b FROM t7),
! 576: 2 NOT IN (SELECT c FROM t7),
! 577: 6 NOT IN (SELECT c FROM t7)
! 578: }
! 579: } {0 null 0 1 0 1}
! 580:
! 581: do_test in-13.14 {
! 582: execsql {
! 583: BEGIN TRANSACTION;
! 584: CREATE TABLE a(id INTEGER);
! 585: INSERT INTO a VALUES(1);
! 586: INSERT INTO a VALUES(2);
! 587: INSERT INTO a VALUES(3);
! 588: CREATE TABLE b(id INTEGER);
! 589: INSERT INTO b VALUES(NULL);
! 590: INSERT INTO b VALUES(3);
! 591: INSERT INTO b VALUES(4);
! 592: INSERT INTO b VALUES(5);
! 593: COMMIT;
! 594: SELECT * FROM a WHERE id NOT IN (SELECT id FROM b);
! 595: }
! 596: } {}
! 597: do_test in-13.14 {
! 598: execsql {
! 599: CREATE INDEX i5 ON b(id);
! 600: SELECT * FROM a WHERE id NOT IN (SELECT id FROM b);
! 601: }
! 602: } {}
! 603:
! 604:
! 605: do_test in-13.X {
! 606: db nullvalue ""
! 607: } {}
! 608:
! 609: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>