gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/whereB.test (about)

     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