Annotation of embedaddon/sqlite3/test/collate2.test, revision 1.1
1.1 ! misho 1: #
! 2: # 2001 September 15
! 3: #
! 4: # The author disclaims copyright to this source code. In place of
! 5: # a legal notice, here is a blessing:
! 6: #
! 7: # May you do good and not evil.
! 8: # May you find forgiveness for yourself and forgive others.
! 9: # May you share freely, never taking more than you give.
! 10: #
! 11: #***********************************************************************
! 12: # This file implements regression tests for SQLite library. The
! 13: # focus of this script is page cache subsystem.
! 14: #
! 15: # $Id: collate2.test,v 1.6 2008/08/20 16:35:10 drh Exp $
! 16:
! 17: set testdir [file dirname $argv0]
! 18: source $testdir/tester.tcl
! 19:
! 20: #
! 21: # Tests are organised as follows:
! 22: #
! 23: # collate2-1.* WHERE <expr> expressions (sqliteExprIfTrue).
! 24: # collate2-2.* WHERE NOT <expr> expressions (sqliteExprIfFalse).
! 25: # collate2-3.* SELECT <expr> expressions (sqliteExprCode).
! 26: # collate2-4.* Precedence of collation/data types in binary comparisons
! 27: # collate2-5.* JOIN syntax.
! 28: #
! 29:
! 30: # Create a collation type BACKWARDS for use in testing. This collation type
! 31: # is similar to the built-in TEXT collation type except the order of
! 32: # characters in each string is reversed before the comparison is performed.
! 33: db collate BACKWARDS backwards_collate
! 34: proc backwards_collate {a b} {
! 35: set ra {};
! 36: set rb {}
! 37: foreach c [split $a {}] { set ra $c$ra }
! 38: foreach c [split $b {}] { set rb $c$rb }
! 39: return [string compare $ra $rb]
! 40: }
! 41:
! 42: # The following values are used in these tests:
! 43: # NULL aa ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB
! 44: #
! 45: # The collation orders for each of the tested collation types are:
! 46: #
! 47: # BINARY: NULL AA AB Aa Ab BA BB Ba Bb aA aB aa ab bA bB ba bb
! 48: # NOCASE: NULL aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB
! 49: # BACKWARDS: NULL AA BA aA bA AB BB aB bB Aa Ba aa ba Ab Bb ab bb
! 50: #
! 51: # These tests verify that the default collation type for a column is used
! 52: # for comparison operators (<, >, <=, >=, =) involving that column and
! 53: # an expression that is not a column with a default collation type.
! 54: #
! 55: # The collation sequences BINARY and NOCASE are built-in, the BACKWARDS
! 56: # collation sequence is implemented by the TCL proc backwards_collate
! 57: # above.
! 58: #
! 59: do_test collate2-1.0 {
! 60: execsql {
! 61: CREATE TABLE collate2t1(
! 62: a COLLATE BINARY,
! 63: b COLLATE NOCASE,
! 64: c COLLATE BACKWARDS
! 65: );
! 66: INSERT INTO collate2t1 VALUES( NULL, NULL, NULL );
! 67:
! 68: INSERT INTO collate2t1 VALUES( 'aa', 'aa', 'aa' );
! 69: INSERT INTO collate2t1 VALUES( 'ab', 'ab', 'ab' );
! 70: INSERT INTO collate2t1 VALUES( 'ba', 'ba', 'ba' );
! 71: INSERT INTO collate2t1 VALUES( 'bb', 'bb', 'bb' );
! 72:
! 73: INSERT INTO collate2t1 VALUES( 'aA', 'aA', 'aA' );
! 74: INSERT INTO collate2t1 VALUES( 'aB', 'aB', 'aB' );
! 75: INSERT INTO collate2t1 VALUES( 'bA', 'bA', 'bA' );
! 76: INSERT INTO collate2t1 VALUES( 'bB', 'bB', 'bB' );
! 77:
! 78: INSERT INTO collate2t1 VALUES( 'Aa', 'Aa', 'Aa' );
! 79: INSERT INTO collate2t1 VALUES( 'Ab', 'Ab', 'Ab' );
! 80: INSERT INTO collate2t1 VALUES( 'Ba', 'Ba', 'Ba' );
! 81: INSERT INTO collate2t1 VALUES( 'Bb', 'Bb', 'Bb' );
! 82:
! 83: INSERT INTO collate2t1 VALUES( 'AA', 'AA', 'AA' );
! 84: INSERT INTO collate2t1 VALUES( 'AB', 'AB', 'AB' );
! 85: INSERT INTO collate2t1 VALUES( 'BA', 'BA', 'BA' );
! 86: INSERT INTO collate2t1 VALUES( 'BB', 'BB', 'BB' );
! 87: }
! 88: if {[info exists collate_test_use_index]} {
! 89: execsql {
! 90: CREATE INDEX collate2t1_i1 ON collate2t1(a);
! 91: CREATE INDEX collate2t1_i2 ON collate2t1(b);
! 92: CREATE INDEX collate2t1_i3 ON collate2t1(c);
! 93: }
! 94: }
! 95: } {}
! 96: do_test collate2-1.1 {
! 97: execsql {
! 98: SELECT a FROM collate2t1 WHERE a > 'aa' ORDER BY 1;
! 99: }
! 100: } {ab bA bB ba bb}
! 101: do_test collate2-1.1.1 {
! 102: execsql {
! 103: SELECT a FROM collate2t1 WHERE a COLLATE binary > 'aa' ORDER BY 1;
! 104: }
! 105: } {ab bA bB ba bb}
! 106: do_test collate2-1.1.2 {
! 107: execsql {
! 108: SELECT a FROM collate2t1 WHERE b COLLATE binary > 'aa' ORDER BY 1;
! 109: }
! 110: } {ab bA bB ba bb}
! 111: do_test collate2-1.1.3 {
! 112: execsql {
! 113: SELECT a FROM collate2t1 WHERE c COLLATE binary > 'aa' ORDER BY 1;
! 114: }
! 115: } {ab bA bB ba bb}
! 116: do_test collate2-1.2 {
! 117: execsql {
! 118: SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY 1, oid;
! 119: }
! 120: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 121: do_test collate2-1.2.1 {
! 122: execsql {
! 123: SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa'
! 124: ORDER BY 1, oid;
! 125: }
! 126: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 127: do_test collate2-1.2.2 {
! 128: execsql {
! 129: SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa'
! 130: ORDER BY 1, oid;
! 131: }
! 132: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 133: do_test collate2-1.2.3 {
! 134: execsql {
! 135: SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa'
! 136: ORDER BY 1, oid;
! 137: }
! 138: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 139: do_test collate2-1.2.4 {
! 140: execsql {
! 141: SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY +b;
! 142: }
! 143: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 144: do_test collate2-1.2.5 {
! 145: execsql {
! 146: SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa' ORDER BY +b;
! 147: }
! 148: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 149: do_test collate2-1.2.6 {
! 150: execsql {
! 151: SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa' ORDER BY +b;
! 152: }
! 153: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 154: do_test collate2-1.2.7 {
! 155: execsql {
! 156: SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa' ORDER BY +b;
! 157: }
! 158: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 159: do_test collate2-1.3 {
! 160: execsql {
! 161: SELECT c FROM collate2t1 WHERE c > 'aa' ORDER BY 1;
! 162: }
! 163: } {ba Ab Bb ab bb}
! 164: do_test collate2-1.3.1 {
! 165: execsql {
! 166: SELECT c FROM collate2t1 WHERE a COLLATE backwards > 'aa'
! 167: ORDER BY 1;
! 168: }
! 169: } {ba Ab Bb ab bb}
! 170: do_test collate2-1.3.2 {
! 171: execsql {
! 172: SELECT c FROM collate2t1 WHERE b COLLATE backwards > 'aa'
! 173: ORDER BY 1;
! 174: }
! 175: } {ba Ab Bb ab bb}
! 176: do_test collate2-1.3.3 {
! 177: execsql {
! 178: SELECT c FROM collate2t1 WHERE c COLLATE backwards > 'aa'
! 179: ORDER BY 1;
! 180: }
! 181: } {ba Ab Bb ab bb}
! 182: do_test collate2-1.4 {
! 183: execsql {
! 184: SELECT a FROM collate2t1 WHERE a < 'aa' ORDER BY 1;
! 185: }
! 186: } {AA AB Aa Ab BA BB Ba Bb aA aB}
! 187: do_test collate2-1.5 {
! 188: execsql {
! 189: SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY 1, oid;
! 190: }
! 191: } {}
! 192: do_test collate2-1.5.1 {
! 193: execsql {
! 194: SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY +b;
! 195: }
! 196: } {}
! 197: do_test collate2-1.6 {
! 198: execsql {
! 199: SELECT c FROM collate2t1 WHERE c < 'aa' ORDER BY 1;
! 200: }
! 201: } {AA BA aA bA AB BB aB bB Aa Ba}
! 202: do_test collate2-1.7 {
! 203: execsql {
! 204: SELECT a FROM collate2t1 WHERE a = 'aa';
! 205: }
! 206: } {aa}
! 207: do_test collate2-1.8 {
! 208: execsql {
! 209: SELECT b FROM collate2t1 WHERE b = 'aa' ORDER BY oid;
! 210: }
! 211: } {aa aA Aa AA}
! 212: do_test collate2-1.9 {
! 213: execsql {
! 214: SELECT c FROM collate2t1 WHERE c = 'aa';
! 215: }
! 216: } {aa}
! 217: do_test collate2-1.10 {
! 218: execsql {
! 219: SELECT a FROM collate2t1 WHERE a >= 'aa' ORDER BY 1;
! 220: }
! 221: } {aa ab bA bB ba bb}
! 222: do_test collate2-1.11 {
! 223: execsql {
! 224: SELECT b FROM collate2t1 WHERE b >= 'aa' ORDER BY 1, oid;
! 225: }
! 226: } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 227: do_test collate2-1.12 {
! 228: execsql {
! 229: SELECT c FROM collate2t1 WHERE c >= 'aa' ORDER BY 1;
! 230: }
! 231: } {aa ba Ab Bb ab bb}
! 232: do_test collate2-1.13 {
! 233: execsql {
! 234: SELECT a FROM collate2t1 WHERE a <= 'aa' ORDER BY 1;
! 235: }
! 236: } {AA AB Aa Ab BA BB Ba Bb aA aB aa}
! 237: do_test collate2-1.14 {
! 238: execsql {
! 239: SELECT b FROM collate2t1 WHERE b <= 'aa' ORDER BY 1, oid;
! 240: }
! 241: } {aa aA Aa AA}
! 242: do_test collate2-1.15 {
! 243: execsql {
! 244: SELECT c FROM collate2t1 WHERE c <= 'aa' ORDER BY 1;
! 245: }
! 246: } {AA BA aA bA AB BB aB bB Aa Ba aa}
! 247: do_test collate2-1.16 {
! 248: execsql {
! 249: SELECT a FROM collate2t1 WHERE a BETWEEN 'Aa' AND 'Bb' ORDER BY 1;
! 250: }
! 251: } {Aa Ab BA BB Ba Bb}
! 252: do_test collate2-1.17 {
! 253: execsql {
! 254: SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid;
! 255: }
! 256: } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 257: do_test collate2-1.17.1 {
! 258: execsql {
! 259: SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY +b;
! 260: }
! 261: } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 262: do_test collate2-1.18 {
! 263: execsql {
! 264: SELECT c FROM collate2t1 WHERE c BETWEEN 'Aa' AND 'Bb' ORDER BY 1;
! 265: }
! 266: } {Aa Ba aa ba Ab Bb}
! 267: do_test collate2-1.19 {
! 268: execsql {
! 269: SELECT a FROM collate2t1 WHERE
! 270: CASE a WHEN 'aa' THEN 1 ELSE 0 END
! 271: ORDER BY 1, oid;
! 272: }
! 273: } {aa}
! 274: do_test collate2-1.20 {
! 275: execsql {
! 276: SELECT b FROM collate2t1 WHERE
! 277: CASE b WHEN 'aa' THEN 1 ELSE 0 END
! 278: ORDER BY 1, oid;
! 279: }
! 280: } {aa aA Aa AA}
! 281: do_test collate2-1.21 {
! 282: execsql {
! 283: SELECT c FROM collate2t1 WHERE
! 284: CASE c WHEN 'aa' THEN 1 ELSE 0 END
! 285: ORDER BY 1, oid;
! 286: }
! 287: } {aa}
! 288:
! 289: ifcapable subquery {
! 290: do_test collate2-1.22 {
! 291: execsql {
! 292: SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid;
! 293: }
! 294: } {aa bb}
! 295: do_test collate2-1.23 {
! 296: execsql {
! 297: SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid;
! 298: }
! 299: } {aa aA Aa AA bb bB Bb BB}
! 300: do_test collate2-1.24 {
! 301: execsql {
! 302: SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid;
! 303: }
! 304: } {aa bb}
! 305: do_test collate2-1.25 {
! 306: execsql {
! 307: SELECT a FROM collate2t1
! 308: WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 309: }
! 310: } {aa bb}
! 311: do_test collate2-1.26 {
! 312: execsql {
! 313: SELECT b FROM collate2t1
! 314: WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 315: }
! 316: } {aa bb aA bB Aa Bb AA BB}
! 317: do_test collate2-1.27 {
! 318: execsql {
! 319: SELECT c FROM collate2t1
! 320: WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 321: }
! 322: } {aa bb}
! 323: } ;# ifcapable subquery
! 324:
! 325: do_test collate2-2.1 {
! 326: execsql {
! 327: SELECT a FROM collate2t1 WHERE NOT a > 'aa' ORDER BY 1;
! 328: }
! 329: } {AA AB Aa Ab BA BB Ba Bb aA aB aa}
! 330: do_test collate2-2.2 {
! 331: execsql {
! 332: SELECT b FROM collate2t1 WHERE NOT b > 'aa' ORDER BY 1, oid;
! 333: }
! 334: } {aa aA Aa AA}
! 335: do_test collate2-2.3 {
! 336: execsql {
! 337: SELECT c FROM collate2t1 WHERE NOT c > 'aa' ORDER BY 1;
! 338: }
! 339: } {AA BA aA bA AB BB aB bB Aa Ba aa}
! 340: do_test collate2-2.4 {
! 341: execsql {
! 342: SELECT a FROM collate2t1 WHERE NOT a < 'aa' ORDER BY 1;
! 343: }
! 344: } {aa ab bA bB ba bb}
! 345: do_test collate2-2.5 {
! 346: execsql {
! 347: SELECT b FROM collate2t1 WHERE NOT b < 'aa' ORDER BY 1, oid;
! 348: }
! 349: } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 350: do_test collate2-2.6 {
! 351: execsql {
! 352: SELECT c FROM collate2t1 WHERE NOT c < 'aa' ORDER BY 1;
! 353: }
! 354: } {aa ba Ab Bb ab bb}
! 355: do_test collate2-2.7 {
! 356: execsql {
! 357: SELECT a FROM collate2t1 WHERE NOT a = 'aa';
! 358: }
! 359: } {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 360: do_test collate2-2.8 {
! 361: execsql {
! 362: SELECT b FROM collate2t1 WHERE NOT b = 'aa';
! 363: }
! 364: } {ab ba bb aB bA bB Ab Ba Bb AB BA BB}
! 365: do_test collate2-2.9 {
! 366: execsql {
! 367: SELECT c FROM collate2t1 WHERE NOT c = 'aa';
! 368: }
! 369: } {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 370: do_test collate2-2.10 {
! 371: execsql {
! 372: SELECT a FROM collate2t1 WHERE NOT a >= 'aa' ORDER BY 1;
! 373: }
! 374: } {AA AB Aa Ab BA BB Ba Bb aA aB}
! 375: do_test collate2-2.11 {
! 376: execsql {
! 377: SELECT b FROM collate2t1 WHERE NOT b >= 'aa' ORDER BY 1, oid;
! 378: }
! 379: } {}
! 380: do_test collate2-2.12 {
! 381: execsql {
! 382: SELECT c FROM collate2t1 WHERE NOT c >= 'aa' ORDER BY 1;
! 383: }
! 384: } {AA BA aA bA AB BB aB bB Aa Ba}
! 385: do_test collate2-2.13 {
! 386: execsql {
! 387: SELECT a FROM collate2t1 WHERE NOT a <= 'aa' ORDER BY 1;
! 388: }
! 389: } {ab bA bB ba bb}
! 390: do_test collate2-2.14 {
! 391: execsql {
! 392: SELECT b FROM collate2t1 WHERE NOT b <= 'aa' ORDER BY 1, oid;
! 393: }
! 394: } {ab aB Ab AB ba bA Ba BA bb bB Bb BB}
! 395: do_test collate2-2.15 {
! 396: execsql {
! 397: SELECT c FROM collate2t1 WHERE NOT c <= 'aa' ORDER BY 1;
! 398: }
! 399: } {ba Ab Bb ab bb}
! 400: do_test collate2-2.16 {
! 401: execsql {
! 402: SELECT a FROM collate2t1 WHERE a NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1;
! 403: }
! 404: } {AA AB aA aB aa ab bA bB ba bb}
! 405: do_test collate2-2.17 {
! 406: execsql {
! 407: SELECT b FROM collate2t1 WHERE b NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid;
! 408: }
! 409: } {}
! 410: do_test collate2-2.18 {
! 411: execsql {
! 412: SELECT c FROM collate2t1 WHERE c NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1;
! 413: }
! 414: } {AA BA aA bA AB BB aB bB ab bb}
! 415: do_test collate2-2.19 {
! 416: execsql {
! 417: SELECT a FROM collate2t1 WHERE NOT CASE a WHEN 'aa' THEN 1 ELSE 0 END;
! 418: }
! 419: } {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 420: do_test collate2-2.20 {
! 421: execsql {
! 422: SELECT b FROM collate2t1 WHERE NOT CASE b WHEN 'aa' THEN 1 ELSE 0 END;
! 423: }
! 424: } {{} ab ba bb aB bA bB Ab Ba Bb AB BA BB}
! 425: do_test collate2-2.21 {
! 426: execsql {
! 427: SELECT c FROM collate2t1 WHERE NOT CASE c WHEN 'aa' THEN 1 ELSE 0 END;
! 428: }
! 429: } {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 430:
! 431: ifcapable subquery {
! 432: do_test collate2-2.22 {
! 433: execsql {
! 434: SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb');
! 435: }
! 436: } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 437: do_test collate2-2.23 {
! 438: execsql {
! 439: SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb');
! 440: }
! 441: } {ab ba aB bA Ab Ba AB BA}
! 442: do_test collate2-2.24 {
! 443: execsql {
! 444: SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb');
! 445: }
! 446: } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 447: do_test collate2-2.25 {
! 448: execsql {
! 449: SELECT a FROM collate2t1
! 450: WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 451: }
! 452: } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 453: do_test collate2-2.26 {
! 454: execsql {
! 455: SELECT b FROM collate2t1
! 456: WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 457: }
! 458: } {ab ba aB bA Ab Ba AB BA}
! 459: do_test collate2-2.27 {
! 460: execsql {
! 461: SELECT c FROM collate2t1
! 462: WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'));
! 463: }
! 464: } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB}
! 465: }
! 466:
! 467: do_test collate2-3.1 {
! 468: execsql {
! 469: SELECT a > 'aa' FROM collate2t1;
! 470: }
! 471: } {{} 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0}
! 472: do_test collate2-3.2 {
! 473: execsql {
! 474: SELECT b > 'aa' FROM collate2t1;
! 475: }
! 476: } {{} 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1}
! 477: do_test collate2-3.3 {
! 478: execsql {
! 479: SELECT c > 'aa' FROM collate2t1;
! 480: }
! 481: } {{} 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0}
! 482: do_test collate2-3.4 {
! 483: execsql {
! 484: SELECT a < 'aa' FROM collate2t1;
! 485: }
! 486: } {{} 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1}
! 487: do_test collate2-3.5 {
! 488: execsql {
! 489: SELECT b < 'aa' FROM collate2t1;
! 490: }
! 491: } {{} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
! 492: do_test collate2-3.6 {
! 493: execsql {
! 494: SELECT c < 'aa' FROM collate2t1;
! 495: }
! 496: } {{} 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1}
! 497: do_test collate2-3.7 {
! 498: execsql {
! 499: SELECT a = 'aa' FROM collate2t1;
! 500: }
! 501: } {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
! 502: do_test collate2-3.8 {
! 503: execsql {
! 504: SELECT b = 'aa' FROM collate2t1;
! 505: }
! 506: } {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0}
! 507: do_test collate2-3.9 {
! 508: execsql {
! 509: SELECT c = 'aa' FROM collate2t1;
! 510: }
! 511: } {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
! 512: do_test collate2-3.10 {
! 513: execsql {
! 514: SELECT a <= 'aa' FROM collate2t1;
! 515: }
! 516: } {{} 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1}
! 517: do_test collate2-3.11 {
! 518: execsql {
! 519: SELECT b <= 'aa' FROM collate2t1;
! 520: }
! 521: } {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0}
! 522: do_test collate2-3.12 {
! 523: execsql {
! 524: SELECT c <= 'aa' FROM collate2t1;
! 525: }
! 526: } {{} 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1}
! 527: do_test collate2-3.13 {
! 528: execsql {
! 529: SELECT a >= 'aa' FROM collate2t1;
! 530: }
! 531: } {{} 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0}
! 532: do_test collate2-3.14 {
! 533: execsql {
! 534: SELECT b >= 'aa' FROM collate2t1;
! 535: }
! 536: } {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1}
! 537: do_test collate2-3.15 {
! 538: execsql {
! 539: SELECT c >= 'aa' FROM collate2t1;
! 540: }
! 541: } {{} 1 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0}
! 542: do_test collate2-3.16 {
! 543: execsql {
! 544: SELECT a BETWEEN 'Aa' AND 'Bb' FROM collate2t1;
! 545: }
! 546: } {{} 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1}
! 547: do_test collate2-3.17 {
! 548: execsql {
! 549: SELECT b BETWEEN 'Aa' AND 'Bb' FROM collate2t1;
! 550: }
! 551: } {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1}
! 552: do_test collate2-3.18 {
! 553: execsql {
! 554: SELECT c BETWEEN 'Aa' AND 'Bb' FROM collate2t1;
! 555: }
! 556: } {{} 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0}
! 557: do_test collate2-3.19 {
! 558: execsql {
! 559: SELECT CASE a WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1;
! 560: }
! 561: } {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
! 562: do_test collate2-3.20 {
! 563: execsql {
! 564: SELECT CASE b WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1;
! 565: }
! 566: } {0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0}
! 567: do_test collate2-3.21 {
! 568: execsql {
! 569: SELECT CASE c WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1;
! 570: }
! 571: } {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
! 572:
! 573: ifcapable subquery {
! 574: do_test collate2-3.22 {
! 575: execsql {
! 576: SELECT a IN ('aa', 'bb') FROM collate2t1;
! 577: }
! 578: } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
! 579: do_test collate2-3.23 {
! 580: execsql {
! 581: SELECT b IN ('aa', 'bb') FROM collate2t1;
! 582: }
! 583: } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
! 584: do_test collate2-3.24 {
! 585: execsql {
! 586: SELECT c IN ('aa', 'bb') FROM collate2t1;
! 587: }
! 588: } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
! 589: do_test collate2-3.25 {
! 590: execsql {
! 591: SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'))
! 592: FROM collate2t1;
! 593: }
! 594: } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
! 595: do_test collate2-3.26 {
! 596: execsql {
! 597: SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'))
! 598: FROM collate2t1;
! 599: }
! 600: } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1}
! 601: do_test collate2-3.27 {
! 602: execsql {
! 603: SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb'))
! 604: FROM collate2t1;
! 605: }
! 606: } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0}
! 607: }
! 608:
! 609: do_test collate2-4.0 {
! 610: execsql {
! 611: CREATE TABLE collate2t2(b COLLATE binary);
! 612: CREATE TABLE collate2t3(b text);
! 613: INSERT INTO collate2t2 VALUES('aa');
! 614: INSERT INTO collate2t3 VALUES('aa');
! 615: }
! 616: } {}
! 617:
! 618: # Test that when both sides of a binary comparison operator have
! 619: # default collation types, the collate type for the leftmost term
! 620: # is used.
! 621: do_test collate2-4.1 {
! 622: execsql {
! 623: SELECT collate2t1.a FROM collate2t1, collate2t2
! 624: WHERE collate2t1.b = collate2t2.b;
! 625: }
! 626: } {aa aA Aa AA}
! 627: do_test collate2-4.2 {
! 628: execsql {
! 629: SELECT collate2t1.a FROM collate2t1, collate2t2
! 630: WHERE collate2t2.b = collate2t1.b;
! 631: }
! 632: } {aa}
! 633:
! 634: # Test that when one side has a default collation type and the other
! 635: # does not, the collation type is used.
! 636: do_test collate2-4.3 {
! 637: execsql {
! 638: SELECT collate2t1.a FROM collate2t1, collate2t3
! 639: WHERE collate2t1.b = collate2t3.b||'';
! 640: }
! 641: } {aa aA Aa AA}
! 642: do_test collate2-4.4 {
! 643: execsql {
! 644: SELECT collate2t1.a FROM collate2t1, collate2t3
! 645: WHERE collate2t3.b||'' = collate2t1.b;
! 646: }
! 647: } {aa aA Aa AA}
! 648:
! 649: do_test collate2-4.5 {
! 650: execsql {
! 651: DROP TABLE collate2t3;
! 652: }
! 653: } {}
! 654:
! 655: #
! 656: # Test that the default collation types are used when the JOIN syntax
! 657: # is used in place of a WHERE clause.
! 658: #
! 659: # SQLite transforms the JOIN syntax into a WHERE clause internally, so
! 660: # the focus of these tests is to ensure that the table on the left-hand-side
! 661: # of the join determines the collation type used.
! 662: #
! 663: do_test collate2-5.0 {
! 664: execsql {
! 665: SELECT collate2t1.b FROM collate2t1 JOIN collate2t2 USING (b);
! 666: }
! 667: } {aa aA Aa AA}
! 668: do_test collate2-5.1 {
! 669: execsql {
! 670: SELECT collate2t1.b FROM collate2t2 JOIN collate2t1 USING (b);
! 671: }
! 672: } {aa}
! 673: do_test collate2-5.2 {
! 674: execsql {
! 675: SELECT collate2t1.b FROM collate2t1 NATURAL JOIN collate2t2;
! 676: }
! 677: } {aa aA Aa AA}
! 678: do_test collate2-5.3 {
! 679: execsql {
! 680: SELECT collate2t1.b FROM collate2t2 NATURAL JOIN collate2t1;
! 681: }
! 682: } {aa}
! 683: do_test collate2-5.4 {
! 684: execsql {
! 685: SELECT collate2t2.b FROM collate2t1 LEFT OUTER JOIN collate2t2 USING (b) order by collate2t1.oid;
! 686: }
! 687: } {{} aa {} {} {} aa {} {} {} aa {} {} {} aa {} {} {}}
! 688: do_test collate2-5.5 {
! 689: execsql {
! 690: SELECT collate2t1.b, collate2t2.b FROM collate2t2 LEFT OUTER JOIN collate2t1 USING (b);
! 691: }
! 692: } {aa aa}
! 693:
! 694: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>