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