Annotation of embedaddon/sqlite3/test/whereB.test, revision 1.1
1.1 ! misho 1: # 2009 August 13
! 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 WHERE clause conditions with
! 13: # subtle affinity issues.
! 14: #
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18:
! 19: # For this set of tests:
! 20: #
! 21: # * t1.y holds an integer value with affinity NONE
! 22: # * t2.b holds a text value with affinity TEXT
! 23: #
! 24: # These values are not equal and because neither affinity is NUMERIC
! 25: # no type conversion occurs.
! 26: #
! 27: do_test whereB-1.1 {
! 28: db eval {
! 29: CREATE TABLE t1(x,y); -- affinity of t1.y is NONE
! 30: INSERT INTO t1 VALUES(1,99);
! 31:
! 32: CREATE TABLE t2(a, b TEXT); -- affinity of t2.b is TEXT
! 33: CREATE INDEX t2b ON t2(b);
! 34: INSERT INTO t2 VALUES(2,99);
! 35:
! 36: SELECT x, a, y=b FROM t1, t2 ORDER BY +x, +a;
! 37: }
! 38: } {1 2 0}
! 39: do_test whereB-1.2 {
! 40: db eval {
! 41: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 42: }
! 43: } {}
! 44: do_test whereB-1.3 {
! 45: db eval {
! 46: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 47: }
! 48: } {}
! 49: do_test whereB-1.4 {
! 50: db eval {
! 51: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 52: }
! 53: } {}
! 54: do_test whereB-1.100 {
! 55: db eval {
! 56: DROP INDEX t2b;
! 57: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 58: }
! 59: } {}
! 60: do_test whereB-1.101 {
! 61: db eval {
! 62: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 63: }
! 64: } {}
! 65: do_test whereB-1.102 {
! 66: db eval {
! 67: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 68: }
! 69: } {}
! 70:
! 71: # For this set of tests:
! 72: #
! 73: # * t1.y holds a text value with affinity TEXT
! 74: # * t2.b holds an integer value with affinity NONE
! 75: #
! 76: # These values are not equal and because neither affinity is NUMERIC
! 77: # no type conversion occurs.
! 78: #
! 79: do_test whereB-2.1 {
! 80: db eval {
! 81: DROP TABLE t1;
! 82: DROP TABLE t2;
! 83:
! 84: CREATE TABLE t1(x, y TEXT); -- affinity of t1.y is TEXT
! 85: INSERT INTO t1 VALUES(1,99);
! 86:
! 87: CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE
! 88: CREATE INDEX t2b ON t2(b);
! 89: INSERT INTO t2 VALUES(2,99);
! 90:
! 91: SELECT x, a, y=b FROM t1, t2 ORDER BY +x, +a;
! 92: }
! 93: } {1 2 0}
! 94: do_test whereB-2.2 {
! 95: db eval {
! 96: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 97: }
! 98: } {}
! 99: do_test whereB-2.3 {
! 100: db eval {
! 101: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 102: }
! 103: } {}
! 104: do_test whereB-2.4 {
! 105: db eval {
! 106: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 107: }
! 108: } {}
! 109: do_test whereB-2.100 {
! 110: db eval {
! 111: DROP INDEX t2b;
! 112: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 113: }
! 114: } {}
! 115: do_test whereB-2.101 {
! 116: db eval {
! 117: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 118: }
! 119: } {}
! 120: do_test whereB-2.102 {
! 121: db eval {
! 122: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 123: }
! 124: } {}
! 125:
! 126: # For this set of tests:
! 127: #
! 128: # * t1.y holds a text value with affinity NONE
! 129: # * t2.b holds an integer value with affinity NONE
! 130: #
! 131: # These values are not equal and because neither affinity is NUMERIC
! 132: # no type conversion occurs.
! 133: #
! 134: do_test whereB-3.1 {
! 135: db eval {
! 136: DROP TABLE t1;
! 137: DROP TABLE t2;
! 138:
! 139: CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE
! 140: INSERT INTO t1 VALUES(1,99);
! 141:
! 142: CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE
! 143: CREATE INDEX t2b ON t2(b);
! 144: INSERT INTO t2 VALUES(2,'99');
! 145:
! 146: SELECT x, a, y=b FROM t1, t2;
! 147: }
! 148: } {1 2 0}
! 149: do_test whereB-3.2 {
! 150: db eval {
! 151: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 152: }
! 153: } {}
! 154: do_test whereB-3.3 {
! 155: db eval {
! 156: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 157: }
! 158: } {}
! 159: do_test whereB-3.4 {
! 160: db eval {
! 161: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 162: }
! 163: } {}
! 164: do_test whereB-3.100 {
! 165: db eval {
! 166: DROP INDEX t2b;
! 167: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 168: }
! 169: } {}
! 170: do_test whereB-3.101 {
! 171: db eval {
! 172: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 173: }
! 174: } {}
! 175: do_test whereB-3.102 {
! 176: db eval {
! 177: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 178: }
! 179: } {}
! 180:
! 181:
! 182: # For this set of tests:
! 183: #
! 184: # * t1.y holds a text value with affinity NONE
! 185: # * t2.b holds an integer value with affinity NUMERIC
! 186: #
! 187: # Because t2.b has a numeric affinity, type conversion should occur
! 188: # and the two fields should be equal.
! 189: #
! 190: do_test whereB-4.1 {
! 191: db eval {
! 192: DROP TABLE t1;
! 193: DROP TABLE t2;
! 194:
! 195: CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE
! 196: INSERT INTO t1 VALUES(1,'99');
! 197:
! 198: CREATE TABLE t2(a, b NUMERIC); -- affinity of t2.b is NUMERIC
! 199: CREATE INDEX t2b ON t2(b);
! 200: INSERT INTO t2 VALUES(2,99);
! 201:
! 202: SELECT x, a, y=b FROM t1, t2;
! 203: }
! 204: } {1 2 1}
! 205: do_test whereB-4.2 {
! 206: db eval {
! 207: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 208: }
! 209: } {1 2 1}
! 210: do_test whereB-4.3 {
! 211: db eval {
! 212: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 213: }
! 214: } {1 2 1}
! 215: do_test whereB-4.4 {
! 216: # In this case the unary "+" operator removes the column affinity so
! 217: # the columns compare false
! 218: db eval {
! 219: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 220: }
! 221: } {}
! 222: do_test whereB-4.100 {
! 223: db eval {
! 224: DROP INDEX t2b;
! 225: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 226: }
! 227: } {1 2 1}
! 228: do_test whereB-4.101 {
! 229: db eval {
! 230: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 231: }
! 232: } {1 2 1}
! 233: do_test whereB-4.102 {
! 234: # In this case the unary "+" operator removes the column affinity so
! 235: # the columns compare false
! 236: db eval {
! 237: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 238: }
! 239: } {}
! 240:
! 241:
! 242:
! 243: # For this set of tests:
! 244: #
! 245: # * t1.y holds a text value with affinity NONE
! 246: # * t2.b holds an integer value with affinity INTEGER
! 247: #
! 248: # Because t2.b has a numeric affinity, type conversion should occur
! 249: # and the two fields should be equal.
! 250: #
! 251: do_test whereB-5.1 {
! 252: db eval {
! 253: DROP TABLE t1;
! 254: DROP TABLE t2;
! 255:
! 256: CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE
! 257: INSERT INTO t1 VALUES(1,'99');
! 258:
! 259: CREATE TABLE t2(a, b INT); -- affinity of t2.b is INTEGER
! 260: CREATE INDEX t2b ON t2(b);
! 261: INSERT INTO t2 VALUES(2,99);
! 262:
! 263: SELECT x, a, y=b FROM t1, t2;
! 264: }
! 265: } {1 2 1}
! 266: do_test whereB-5.2 {
! 267: db eval {
! 268: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 269: }
! 270: } {1 2 1}
! 271: do_test whereB-5.3 {
! 272: db eval {
! 273: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 274: }
! 275: } {1 2 1}
! 276: do_test whereB-5.4 {
! 277: # In this case the unary "+" operator removes the column affinity so
! 278: # the columns compare false
! 279: db eval {
! 280: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 281: }
! 282: } {}
! 283: do_test whereB-5.100 {
! 284: db eval {
! 285: DROP INDEX t2b;
! 286: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 287: }
! 288: } {1 2 1}
! 289: do_test whereB-5.101 {
! 290: db eval {
! 291: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 292: }
! 293: } {1 2 1}
! 294: do_test whereB-5.102 {
! 295: # In this case the unary "+" operator removes the column affinity so
! 296: # the columns compare false
! 297: db eval {
! 298: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 299: }
! 300: } {}
! 301:
! 302:
! 303: # For this set of tests:
! 304: #
! 305: # * t1.y holds a text value with affinity NONE
! 306: # * t2.b holds an integer value with affinity REAL
! 307: #
! 308: # Because t2.b has a numeric affinity, type conversion should occur
! 309: # and the two fields should be equal.
! 310: #
! 311: do_test whereB-6.1 {
! 312: db eval {
! 313: DROP TABLE t1;
! 314: DROP TABLE t2;
! 315:
! 316: CREATE TABLE t1(x, y BLOB); -- affinity of t1.y is NONE
! 317: INSERT INTO t1 VALUES(1,'99');
! 318:
! 319: CREATE TABLE t2(a, b REAL); -- affinity of t2.b is REAL
! 320: CREATE INDEX t2b ON t2(b);
! 321: INSERT INTO t2 VALUES(2,99.0);
! 322:
! 323: SELECT x, a, y=b FROM t1, t2;
! 324: }
! 325: } {1 2 1}
! 326: do_test whereB-6.2 {
! 327: db eval {
! 328: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 329: }
! 330: } {1 2 1}
! 331: do_test whereB-6.3 {
! 332: db eval {
! 333: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 334: }
! 335: } {1 2 1}
! 336: do_test whereB-6.4 {
! 337: # In this case the unary "+" operator removes the column affinity so
! 338: # the columns compare false
! 339: db eval {
! 340: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 341: }
! 342: } {}
! 343: do_test whereB-6.100 {
! 344: db eval {
! 345: DROP INDEX t2b;
! 346: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 347: }
! 348: } {1 2 1}
! 349: do_test whereB-6.101 {
! 350: db eval {
! 351: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 352: }
! 353: } {1 2 1}
! 354: do_test whereB-6.102 {
! 355: # In this case the unary "+" operator removes the column affinity so
! 356: # the columns compare false
! 357: db eval {
! 358: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 359: }
! 360: } {}
! 361:
! 362:
! 363: # For this set of tests:
! 364: #
! 365: # * t1.y holds an integer value with affinity NUMERIC
! 366: # * t2.b holds a text value with affinity NONE
! 367: #
! 368: # Because t1.y has a numeric affinity, type conversion should occur
! 369: # and the two fields should be equal.
! 370: #
! 371: do_test whereB-7.1 {
! 372: db eval {
! 373: DROP TABLE t1;
! 374: DROP TABLE t2;
! 375:
! 376: CREATE TABLE t1(x, y NUMERIC); -- affinity of t1.y is NUMERIC
! 377: INSERT INTO t1 VALUES(1,99);
! 378:
! 379: CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE
! 380: CREATE INDEX t2b ON t2(b);
! 381: INSERT INTO t2 VALUES(2,'99');
! 382:
! 383: SELECT x, a, y=b FROM t1, t2;
! 384: }
! 385: } {1 2 1}
! 386: do_test whereB-7.2 {
! 387: db eval {
! 388: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 389: }
! 390: } {1 2 1}
! 391: do_test whereB-7.3 {
! 392: db eval {
! 393: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 394: }
! 395: } {1 2 1}
! 396: do_test whereB-7.4 {
! 397: # In this case the unary "+" operator removes the column affinity so
! 398: # the columns compare false
! 399: db eval {
! 400: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 401: }
! 402: } {}
! 403: do_test whereB-7.100 {
! 404: db eval {
! 405: DROP INDEX t2b;
! 406: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 407: }
! 408: } {1 2 1}
! 409: do_test whereB-7.101 {
! 410: db eval {
! 411: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 412: }
! 413: } {1 2 1}
! 414: do_test whereB-7.102 {
! 415: # In this case the unary "+" operator removes the column affinity so
! 416: # the columns compare false
! 417: db eval {
! 418: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 419: }
! 420: } {}
! 421:
! 422: # For this set of tests:
! 423: #
! 424: # * t1.y holds an integer value with affinity INTEGER
! 425: # * t2.b holds a text value with affinity NONE
! 426: #
! 427: # Because t1.y has a numeric affinity, type conversion should occur
! 428: # and the two fields should be equal.
! 429: #
! 430: do_test whereB-8.1 {
! 431: db eval {
! 432: DROP TABLE t1;
! 433: DROP TABLE t2;
! 434:
! 435: CREATE TABLE t1(x, y INT); -- affinity of t1.y is INTEGER
! 436: INSERT INTO t1 VALUES(1,99);
! 437:
! 438: CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE
! 439: CREATE INDEX t2b ON t2(b);
! 440: INSERT INTO t2 VALUES(2,'99');
! 441:
! 442: SELECT x, a, y=b FROM t1, t2;
! 443: }
! 444: } {1 2 1}
! 445: do_test whereB-8.2 {
! 446: db eval {
! 447: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 448: }
! 449: } {1 2 1}
! 450: do_test whereB-8.3 {
! 451: db eval {
! 452: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 453: }
! 454: } {1 2 1}
! 455: do_test whereB-8.4 {
! 456: # In this case the unary "+" operator removes the column affinity so
! 457: # the columns compare false
! 458: db eval {
! 459: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 460: }
! 461: } {}
! 462: do_test whereB-8.100 {
! 463: db eval {
! 464: DROP INDEX t2b;
! 465: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 466: }
! 467: } {1 2 1}
! 468: do_test whereB-8.101 {
! 469: db eval {
! 470: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 471: }
! 472: } {1 2 1}
! 473: do_test whereB-8.102 {
! 474: # In this case the unary "+" operator removes the column affinity so
! 475: # the columns compare false
! 476: db eval {
! 477: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 478: }
! 479: } {}
! 480:
! 481: # For this set of tests:
! 482: #
! 483: # * t1.y holds an integer value with affinity REAL
! 484: # * t2.b holds a text value with affinity NONE
! 485: #
! 486: # Because t1.y has a numeric affinity, type conversion should occur
! 487: # and the two fields should be equal.
! 488: #
! 489: do_test whereB-9.1 {
! 490: db eval {
! 491: DROP TABLE t1;
! 492: DROP TABLE t2;
! 493:
! 494: CREATE TABLE t1(x, y REAL); -- affinity of t1.y is REAL
! 495: INSERT INTO t1 VALUES(1,99.0);
! 496:
! 497: CREATE TABLE t2(a, b BLOB); -- affinity of t2.b is NONE
! 498: CREATE INDEX t2b ON t2(b);
! 499: INSERT INTO t2 VALUES(2,'99');
! 500:
! 501: SELECT x, a, y=b FROM t1, t2;
! 502: }
! 503: } {1 2 1}
! 504: do_test whereB-9.2 {
! 505: db eval {
! 506: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 507: }
! 508: } {1 2 1}
! 509: do_test whereB-9.3 {
! 510: db eval {
! 511: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 512: }
! 513: } {1 2 1}
! 514: do_test whereB-9.4 {
! 515: # In this case the unary "+" operator removes the column affinity so
! 516: # the columns compare false
! 517: db eval {
! 518: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 519: }
! 520: } {}
! 521: do_test whereB-9.100 {
! 522: db eval {
! 523: DROP INDEX t2b;
! 524: SELECT x, a, y=b FROM t1, t2 WHERE y=b;
! 525: }
! 526: } {1 2 1}
! 527: do_test whereB-9.101 {
! 528: db eval {
! 529: SELECT x, a, y=b FROM t1, t2 WHERE b=y;
! 530: }
! 531: } {1 2 1}
! 532: do_test whereB-9.102 {
! 533: # In this case the unary "+" operator removes the column affinity so
! 534: # the columns compare false
! 535: db eval {
! 536: SELECT x, a, y=b FROM t1, t2 WHERE +y=+b;
! 537: }
! 538: } {}
! 539:
! 540:
! 541:
! 542:
! 543: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>