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.4 2005/01/21 03:12:16 danielk1977 Exp $ 16 17set testdir [file dirname $argv0] 18source $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. 33db collate BACKWARDS backwards_collate 34proc 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# 59do_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} {} 96do_test collate2-1.1 { 97 execsql { 98 SELECT a FROM collate2t1 WHERE a > 'aa' ORDER BY 1; 99 } 100} {ab bA bB ba bb} 101do_test collate2-1.2 { 102 execsql { 103 SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY 1, oid; 104 } 105} {ab aB Ab AB ba bA Ba BA bb bB Bb BB} 106do_test collate2-1.3 { 107 execsql { 108 SELECT c FROM collate2t1 WHERE c > 'aa' ORDER BY 1; 109 } 110} {ba Ab Bb ab bb} 111do_test collate2-1.4 { 112 execsql { 113 SELECT a FROM collate2t1 WHERE a < 'aa' ORDER BY 1; 114 } 115} {AA AB Aa Ab BA BB Ba Bb aA aB} 116do_test collate2-1.5 { 117 execsql { 118 SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY 1, oid; 119 } 120} {} 121do_test collate2-1.6 { 122 execsql { 123 SELECT c FROM collate2t1 WHERE c < 'aa' ORDER BY 1; 124 } 125} {AA BA aA bA AB BB aB bB Aa Ba} 126do_test collate2-1.7 { 127 execsql { 128 SELECT a FROM collate2t1 WHERE a = 'aa'; 129 } 130} {aa} 131do_test collate2-1.8 { 132 execsql { 133 SELECT b FROM collate2t1 WHERE b = 'aa' ORDER BY oid; 134 } 135} {aa aA Aa AA} 136do_test collate2-1.9 { 137 execsql { 138 SELECT c FROM collate2t1 WHERE c = 'aa'; 139 } 140} {aa} 141do_test collate2-1.10 { 142 execsql { 143 SELECT a FROM collate2t1 WHERE a >= 'aa' ORDER BY 1; 144 } 145} {aa ab bA bB ba bb} 146do_test collate2-1.11 { 147 execsql { 148 SELECT b FROM collate2t1 WHERE b >= 'aa' ORDER BY 1, oid; 149 } 150} {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} 151do_test collate2-1.12 { 152 execsql { 153 SELECT c FROM collate2t1 WHERE c >= 'aa' ORDER BY 1; 154 } 155} {aa ba Ab Bb ab bb} 156do_test collate2-1.13 { 157 execsql { 158 SELECT a FROM collate2t1 WHERE a <= 'aa' ORDER BY 1; 159 } 160} {AA AB Aa Ab BA BB Ba Bb aA aB aa} 161do_test collate2-1.14 { 162 execsql { 163 SELECT b FROM collate2t1 WHERE b <= 'aa' ORDER BY 1, oid; 164 } 165} {aa aA Aa AA} 166do_test collate2-1.15 { 167 execsql { 168 SELECT c FROM collate2t1 WHERE c <= 'aa' ORDER BY 1; 169 } 170} {AA BA aA bA AB BB aB bB Aa Ba aa} 171do_test collate2-1.16 { 172 execsql { 173 SELECT a FROM collate2t1 WHERE a BETWEEN 'Aa' AND 'Bb' ORDER BY 1; 174 } 175} {Aa Ab BA BB Ba Bb} 176do_test collate2-1.17 { 177 execsql { 178 SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; 179 } 180} {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} 181do_test collate2-1.18 { 182 execsql { 183 SELECT c FROM collate2t1 WHERE c BETWEEN 'Aa' AND 'Bb' ORDER BY 1; 184 } 185} {Aa Ba aa ba Ab Bb} 186do_test collate2-1.19 { 187 execsql { 188 SELECT a FROM collate2t1 WHERE 189 CASE a WHEN 'aa' THEN 1 ELSE 0 END 190 ORDER BY 1, oid; 191 } 192} {aa} 193do_test collate2-1.20 { 194 execsql { 195 SELECT b FROM collate2t1 WHERE 196 CASE b WHEN 'aa' THEN 1 ELSE 0 END 197 ORDER BY 1, oid; 198 } 199} {aa aA Aa AA} 200do_test collate2-1.21 { 201 execsql { 202 SELECT c FROM collate2t1 WHERE 203 CASE c WHEN 'aa' THEN 1 ELSE 0 END 204 ORDER BY 1, oid; 205 } 206} {aa} 207 208ifcapable subquery { 209 do_test collate2-1.22 { 210 execsql { 211 SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid; 212 } 213 } {aa bb} 214 do_test collate2-1.23 { 215 execsql { 216 SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid; 217 } 218 } {aa aA Aa AA bb bB Bb BB} 219 do_test collate2-1.24 { 220 execsql { 221 SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid; 222 } 223 } {aa bb} 224 do_test collate2-1.25 { 225 execsql { 226 SELECT a FROM collate2t1 227 WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 228 } 229 } {aa bb} 230 do_test collate2-1.26 { 231 execsql { 232 SELECT b FROM collate2t1 233 WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 234 } 235 } {aa bb aA bB Aa Bb AA BB} 236 do_test collate2-1.27 { 237 execsql { 238 SELECT c FROM collate2t1 239 WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 240 } 241 } {aa bb} 242} ;# ifcapable subquery 243 244do_test collate2-2.1 { 245 execsql { 246 SELECT a FROM collate2t1 WHERE NOT a > 'aa' ORDER BY 1; 247 } 248} {AA AB Aa Ab BA BB Ba Bb aA aB aa} 249do_test collate2-2.2 { 250 execsql { 251 SELECT b FROM collate2t1 WHERE NOT b > 'aa' ORDER BY 1, oid; 252 } 253} {aa aA Aa AA} 254do_test collate2-2.3 { 255 execsql { 256 SELECT c FROM collate2t1 WHERE NOT c > 'aa' ORDER BY 1; 257 } 258} {AA BA aA bA AB BB aB bB Aa Ba aa} 259do_test collate2-2.4 { 260 execsql { 261 SELECT a FROM collate2t1 WHERE NOT a < 'aa' ORDER BY 1; 262 } 263} {aa ab bA bB ba bb} 264do_test collate2-2.5 { 265 execsql { 266 SELECT b FROM collate2t1 WHERE NOT b < 'aa' ORDER BY 1, oid; 267 } 268} {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} 269do_test collate2-2.6 { 270 execsql { 271 SELECT c FROM collate2t1 WHERE NOT c < 'aa' ORDER BY 1; 272 } 273} {aa ba Ab Bb ab bb} 274do_test collate2-2.7 { 275 execsql { 276 SELECT a FROM collate2t1 WHERE NOT a = 'aa'; 277 } 278} {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 279do_test collate2-2.8 { 280 execsql { 281 SELECT b FROM collate2t1 WHERE NOT b = 'aa'; 282 } 283} {ab ba bb aB bA bB Ab Ba Bb AB BA BB} 284do_test collate2-2.9 { 285 execsql { 286 SELECT c FROM collate2t1 WHERE NOT c = 'aa'; 287 } 288} {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 289do_test collate2-2.10 { 290 execsql { 291 SELECT a FROM collate2t1 WHERE NOT a >= 'aa' ORDER BY 1; 292 } 293} {AA AB Aa Ab BA BB Ba Bb aA aB} 294do_test collate2-2.11 { 295 execsql { 296 SELECT b FROM collate2t1 WHERE NOT b >= 'aa' ORDER BY 1, oid; 297 } 298} {} 299do_test collate2-2.12 { 300 execsql { 301 SELECT c FROM collate2t1 WHERE NOT c >= 'aa' ORDER BY 1; 302 } 303} {AA BA aA bA AB BB aB bB Aa Ba} 304do_test collate2-2.13 { 305 execsql { 306 SELECT a FROM collate2t1 WHERE NOT a <= 'aa' ORDER BY 1; 307 } 308} {ab bA bB ba bb} 309do_test collate2-2.14 { 310 execsql { 311 SELECT b FROM collate2t1 WHERE NOT b <= 'aa' ORDER BY 1, oid; 312 } 313} {ab aB Ab AB ba bA Ba BA bb bB Bb BB} 314do_test collate2-2.15 { 315 execsql { 316 SELECT c FROM collate2t1 WHERE NOT c <= 'aa' ORDER BY 1; 317 } 318} {ba Ab Bb ab bb} 319do_test collate2-2.16 { 320 execsql { 321 SELECT a FROM collate2t1 WHERE a NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; 322 } 323} {AA AB aA aB aa ab bA bB ba bb} 324do_test collate2-2.17 { 325 execsql { 326 SELECT b FROM collate2t1 WHERE b NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; 327 } 328} {} 329do_test collate2-2.18 { 330 execsql { 331 SELECT c FROM collate2t1 WHERE c NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; 332 } 333} {AA BA aA bA AB BB aB bB ab bb} 334do_test collate2-2.19 { 335 execsql { 336 SELECT a FROM collate2t1 WHERE NOT CASE a WHEN 'aa' THEN 1 ELSE 0 END; 337 } 338} {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 339do_test collate2-2.20 { 340 execsql { 341 SELECT b FROM collate2t1 WHERE NOT CASE b WHEN 'aa' THEN 1 ELSE 0 END; 342 } 343} {{} ab ba bb aB bA bB Ab Ba Bb AB BA BB} 344do_test collate2-2.21 { 345 execsql { 346 SELECT c FROM collate2t1 WHERE NOT CASE c WHEN 'aa' THEN 1 ELSE 0 END; 347 } 348} {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 349 350ifcapable subquery { 351 do_test collate2-2.22 { 352 execsql { 353 SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb'); 354 } 355 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 356 do_test collate2-2.23 { 357 execsql { 358 SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb'); 359 } 360 } {ab ba aB bA Ab Ba AB BA} 361 do_test collate2-2.24 { 362 execsql { 363 SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb'); 364 } 365 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 366 do_test collate2-2.25 { 367 execsql { 368 SELECT a FROM collate2t1 369 WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 370 } 371 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 372 do_test collate2-2.26 { 373 execsql { 374 SELECT b FROM collate2t1 375 WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 376 } 377 } {ab ba aB bA Ab Ba AB BA} 378 do_test collate2-2.27 { 379 execsql { 380 SELECT c FROM collate2t1 381 WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); 382 } 383 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} 384} 385 386do_test collate2-3.1 { 387 execsql { 388 SELECT a > 'aa' FROM collate2t1; 389 } 390} {{} 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0} 391do_test collate2-3.2 { 392 execsql { 393 SELECT b > 'aa' FROM collate2t1; 394 } 395} {{} 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1} 396do_test collate2-3.3 { 397 execsql { 398 SELECT c > 'aa' FROM collate2t1; 399 } 400} {{} 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0} 401do_test collate2-3.4 { 402 execsql { 403 SELECT a < 'aa' FROM collate2t1; 404 } 405} {{} 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1} 406do_test collate2-3.5 { 407 execsql { 408 SELECT b < 'aa' FROM collate2t1; 409 } 410} {{} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 411do_test collate2-3.6 { 412 execsql { 413 SELECT c < 'aa' FROM collate2t1; 414 } 415} {{} 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1} 416do_test collate2-3.7 { 417 execsql { 418 SELECT a = 'aa' FROM collate2t1; 419 } 420} {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 421do_test collate2-3.8 { 422 execsql { 423 SELECT b = 'aa' FROM collate2t1; 424 } 425} {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} 426do_test collate2-3.9 { 427 execsql { 428 SELECT c = 'aa' FROM collate2t1; 429 } 430} {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 431do_test collate2-3.10 { 432 execsql { 433 SELECT a <= 'aa' FROM collate2t1; 434 } 435} {{} 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1} 436do_test collate2-3.11 { 437 execsql { 438 SELECT b <= 'aa' FROM collate2t1; 439 } 440} {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} 441do_test collate2-3.12 { 442 execsql { 443 SELECT c <= 'aa' FROM collate2t1; 444 } 445} {{} 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1} 446do_test collate2-3.13 { 447 execsql { 448 SELECT a >= 'aa' FROM collate2t1; 449 } 450} {{} 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0} 451do_test collate2-3.14 { 452 execsql { 453 SELECT b >= 'aa' FROM collate2t1; 454 } 455} {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} 456do_test collate2-3.15 { 457 execsql { 458 SELECT c >= 'aa' FROM collate2t1; 459 } 460} {{} 1 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0} 461do_test collate2-3.16 { 462 execsql { 463 SELECT a BETWEEN 'Aa' AND 'Bb' FROM collate2t1; 464 } 465} {{} 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1} 466do_test collate2-3.17 { 467 execsql { 468 SELECT b BETWEEN 'Aa' AND 'Bb' FROM collate2t1; 469 } 470} {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} 471do_test collate2-3.18 { 472 execsql { 473 SELECT c BETWEEN 'Aa' AND 'Bb' FROM collate2t1; 474 } 475} {{} 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0} 476do_test collate2-3.19 { 477 execsql { 478 SELECT CASE a WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; 479 } 480} {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 481do_test collate2-3.20 { 482 execsql { 483 SELECT CASE b WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; 484 } 485} {0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} 486do_test collate2-3.21 { 487 execsql { 488 SELECT CASE c WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; 489 } 490} {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 491 492ifcapable subquery { 493 do_test collate2-3.22 { 494 execsql { 495 SELECT a IN ('aa', 'bb') FROM collate2t1; 496 } 497 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} 498 do_test collate2-3.23 { 499 execsql { 500 SELECT b IN ('aa', 'bb') FROM collate2t1; 501 } 502 } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1} 503 do_test collate2-3.24 { 504 execsql { 505 SELECT c IN ('aa', 'bb') FROM collate2t1; 506 } 507 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} 508 do_test collate2-3.25 { 509 execsql { 510 SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 511 FROM collate2t1; 512 } 513 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} 514 do_test collate2-3.26 { 515 execsql { 516 SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 517 FROM collate2t1; 518 } 519 } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1} 520 do_test collate2-3.27 { 521 execsql { 522 SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) 523 FROM collate2t1; 524 } 525 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} 526} 527 528do_test collate2-4.0 { 529 execsql { 530 CREATE TABLE collate2t2(b COLLATE binary); 531 CREATE TABLE collate2t3(b text); 532 INSERT INTO collate2t2 VALUES('aa'); 533 INSERT INTO collate2t3 VALUES('aa'); 534 } 535} {} 536 537# Test that when both sides of a binary comparison operator have 538# default collation types, the collate type for the leftmost term 539# is used. 540do_test collate2-4.1 { 541 execsql { 542 SELECT collate2t1.a FROM collate2t1, collate2t2 543 WHERE collate2t1.b = collate2t2.b; 544 } 545} {aa aA Aa AA} 546do_test collate2-4.2 { 547 execsql { 548 SELECT collate2t1.a FROM collate2t1, collate2t2 549 WHERE collate2t2.b = collate2t1.b; 550 } 551} {aa} 552 553# Test that when one side has a default collation type and the other 554# does not, the collation type is used. 555do_test collate2-4.3 { 556 execsql { 557 SELECT collate2t1.a FROM collate2t1, collate2t3 558 WHERE collate2t1.b = collate2t3.b||''; 559 } 560} {aa aA Aa AA} 561do_test collate2-4.4 { 562 execsql { 563 SELECT collate2t1.a FROM collate2t1, collate2t3 564 WHERE collate2t3.b||'' = collate2t1.b; 565 } 566} {aa aA Aa AA} 567 568do_test collate2-4.5 { 569 execsql { 570 DROP TABLE collate2t3; 571 } 572} {} 573 574# 575# Test that the default collation types are used when the JOIN syntax 576# is used in place of a WHERE clause. 577# 578# SQLite transforms the JOIN syntax into a WHERE clause internally, so 579# the focus of these tests is to ensure that the table on the left-hand-side 580# of the join determines the collation type used. 581# 582do_test collate2-5.0 { 583 execsql { 584 SELECT collate2t1.b FROM collate2t1 JOIN collate2t2 USING (b); 585 } 586} {aa aA Aa AA} 587do_test collate2-5.1 { 588 execsql { 589 SELECT collate2t1.b FROM collate2t2 JOIN collate2t1 USING (b); 590 } 591} {aa} 592do_test collate2-5.2 { 593 execsql { 594 SELECT collate2t1.b FROM collate2t1 NATURAL JOIN collate2t2; 595 } 596} {aa aA Aa AA} 597do_test collate2-5.3 { 598 execsql { 599 SELECT collate2t1.b FROM collate2t2 NATURAL JOIN collate2t1; 600 } 601} {aa} 602do_test collate2-5.4 { 603 execsql { 604 SELECT collate2t2.b FROM collate2t1 LEFT OUTER JOIN collate2t2 USING (b) order by collate2t1.oid; 605 } 606} {{} aa {} {} {} aa {} {} {} aa {} {} {} aa {} {} {}} 607do_test collate2-5.5 { 608 execsql { 609 SELECT collate2t1.b, collate2t2.b FROM collate2t2 LEFT OUTER JOIN collate2t1 USING (b); 610 } 611} {aa aa} 612 613finish_test 614