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>