github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/minmax4.test (about)

     1  # 2012 February 02
     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  #
    12  # Test for queries of the form:  
    13  #
    14  #    SELECT p, max(q) FROM t1;
    15  #
    16  # Demonstration that the value returned for p is on the same row as 
    17  # the maximum q.
    18  #
    19  
    20  set testdir [file dirname $argv0]
    21  source $testdir/tester.tcl
    22  set testprefix minmax4
    23  
    24  ifcapable !compound {
    25    finish_test
    26    return
    27  }
    28  
    29  do_test minmax4-1.1 {
    30    db eval {
    31      CREATE TABLE t1(p,q);
    32      SELECT p, max(q) FROM t1;
    33    }
    34  } {{} {}}
    35  do_test minmax4-1.2 {
    36    db eval {
    37      SELECT p, min(q) FROM t1;
    38    }
    39  } {{} {}}
    40  do_test minmax4-1.3 {
    41    db eval {
    42      INSERT INTO t1 VALUES(1,2);
    43      SELECT p, max(q) FROM t1;
    44    }
    45  } {1 2}
    46  do_test minmax4-1.4 {
    47    db eval {
    48      SELECT p, min(q) FROM t1;
    49    }
    50  } {1 2}
    51  do_test minmax4-1.5 {
    52    db eval {
    53      INSERT INTO t1 VALUES(3,4);
    54      SELECT p, max(q) FROM t1;
    55    }
    56  } {3 4}
    57  do_test minmax4-1.6 {
    58    db eval {
    59      SELECT p, min(q) FROM t1;
    60      SELECT p FROM (SELECT p, min(q) FROM t1);
    61    }
    62  } {1 2 1}
    63  do_test minmax4-1.7 {
    64    db eval {
    65      INSERT INTO t1 VALUES(5,0);
    66      SELECT p, max(q) FROM t1;
    67      SELECT p FROM (SELECT max(q), p FROM t1);
    68    }
    69  } {3 4 3}
    70  do_test minmax4-1.8 {
    71    db eval {
    72      SELECT p, min(q) FROM t1;
    73    }
    74  } {5 0}
    75  do_test minmax4-1.9 {
    76    db eval {
    77      INSERT INTO t1 VALUES(6,1);
    78      SELECT p, max(q) FROM t1;
    79      SELECT p FROM (SELECT max(q), p FROM t1);
    80    }
    81  } {3 4 3}
    82  do_test minmax4-1.10 {
    83    db eval {
    84      SELECT p, min(q) FROM t1;
    85    }
    86  } {5 0}
    87  do_test minmax4-1.11 {
    88    db eval {
    89      INSERT INTO t1 VALUES(7,NULL);
    90      SELECT p, max(q) FROM t1;
    91    }
    92  } {3 4}
    93  do_test minmax4-1.12 {
    94    db eval {
    95      SELECT p, min(q) FROM t1;
    96    }
    97  } {5 0}
    98  do_test minmax4-1.13 {
    99    db eval {
   100      DELETE FROM t1 WHERE q IS NOT NULL;
   101      SELECT p, max(q) FROM t1;
   102    }
   103  } {7 {}}
   104  do_test minmax4-1.14 {
   105    db eval {
   106      SELECT p, min(q) FROM t1;
   107    }
   108  } {7 {}}
   109  
   110  do_test minmax4-2.1 {
   111    db eval {
   112      CREATE TABLE t2(a,b,c);
   113      INSERT INTO t2 VALUES
   114           (1,null,2),
   115           (1,2,3),
   116           (1,1,4),
   117           (2,3,5);
   118      SELECT a, max(b), c FROM t2 GROUP BY a ORDER BY a;
   119    }
   120  } {1 2 3 2 3 5}
   121  do_test minmax4-2.2 {
   122    db eval {
   123      SELECT a, min(b), c FROM t2 GROUP BY a ORDER BY a;
   124    }
   125  } {1 1 4 2 3 5}
   126  do_test minmax4-2.3 {
   127    db eval {
   128      SELECT a, min(b), avg(b), count(b), c FROM t2 GROUP BY a ORDER BY a DESC;
   129    }
   130  } {2 3 3.0 1 5 1 1 1.5 2 4}
   131  do_test minmax4-2.4 {
   132    db eval {
   133      SELECT a, min(b), max(b), c FROM t2 GROUP BY a ORDER BY a;
   134    }
   135  } {1 1 2 3 2 3 3 5}
   136  do_test minmax4-2.5 {
   137    db eval {
   138      SELECT a, max(b), min(b), c FROM t2 GROUP BY a ORDER BY a;
   139    }
   140  } {1 2 1 4 2 3 3 5}
   141  do_test minmax4-2.6 {
   142    db eval {
   143      SELECT a, max(b), b, max(c), c FROM t2 GROUP BY a ORDER BY a;
   144    }
   145  } {1 2 1 4 4 2 3 3 5 5}
   146  do_test minmax4-2.7 {
   147    db eval {
   148      SELECT a, min(b), b, min(c), c FROM t2 GROUP BY a ORDER BY a;
   149    }
   150  } {1 1 {} 2 2 2 3 3 5 5}
   151  
   152  #-------------------------------------------------------------------------
   153  foreach {tn sql} {
   154    1 { CREATE INDEX i1 ON t1(a) }
   155    2 { CREATE INDEX i1 ON t1(a DESC) }
   156    3 { }
   157  } {
   158    reset_db
   159    do_execsql_test 3.$tn.0 {
   160      CREATE TABLE t1(a, b);
   161      INSERT INTO t1 VALUES(NULL, 1);
   162    }
   163    execsql $sql
   164    do_execsql_test 3.$tn.1 {
   165      SELECT min(a), b FROM t1;
   166    } {{} 1}
   167    do_execsql_test 3.$tn.2 {
   168      SELECT min(a), b FROM t1 WHERE a<50;
   169    } {{} {}}
   170    do_execsql_test 3.$tn.3 {
   171      INSERT INTO t1 VALUES(2, 2);
   172    }
   173    do_execsql_test 3.$tn.4 {
   174      SELECT min(a), b FROM t1;
   175    } {2 2}
   176    do_execsql_test 3.$tn.5 {
   177      SELECT min(a), b FROM t1 WHERE a<50;
   178    } {2 2}
   179  }
   180  
   181  #-------------------------------------------------------------------------
   182  reset_db
   183  do_execsql_test 4.0 {
   184    CREATE TABLE t0 (c0, c1);
   185    CREATE INDEX i0 ON t0(c1, c1 + 1 DESC);
   186    INSERT INTO t0(c0) VALUES (1);
   187  }
   188  do_execsql_test 4.1 {
   189    SELECT MIN(t0.c1), t0.c0 FROM t0 WHERE t0.c1 ISNULL; 
   190  } {{} 1}
   191  
   192  #-------------------------------------------------------------------------
   193  reset_db
   194  do_execsql_test 5.0 {
   195    CREATE TABLE t1 (a, b);
   196    INSERT INTO t1 VALUES(123, NULL);
   197    CREATE INDEX i1 ON t1(a, b DESC);
   198  }
   199  do_execsql_test 5.1 {
   200    SELECT MIN(a) FROM t1 WHERE a=123;
   201  } {123}
   202  
   203  #-------------------------------------------------------------------------
   204  # Tests for ticket f8a7060ece.
   205  #
   206  reset_db
   207  do_execsql_test 6.1.0 {
   208    CREATE TABLE t1(a, b, c);
   209    INSERT INTO t1 VALUES(NULL, 1, 'x');
   210    CREATE INDEX i1 ON t1(a);
   211  }
   212  do_execsql_test 6.1.1 {
   213    SELECT min(a), b, c FROM t1 WHERE c='x';
   214  } {{} 1 x}
   215  do_execsql_test 6.1.2 {
   216    INSERT INTO t1 VALUES(1,    2, 'y');
   217  } {}
   218  do_execsql_test 6.1.3 {
   219    SELECT min(a), b, c FROM t1 WHERE c='x';
   220  } {{} 1 x}
   221  
   222  do_execsql_test 6.2.0 {
   223    CREATE TABLE t0(c0 UNIQUE, c1);
   224    INSERT INTO t0(c1) VALUES (0);
   225    INSERT INTO t0(c0) VALUES (0);
   226    CREATE VIEW v0(c0, c1) AS 
   227        SELECT t0.c1, t0.c0 FROM t0 WHERE CAST(t0.rowid AS INT) = 1;
   228  }
   229  do_execsql_test 6.2.1 {
   230    SELECT c0, c1 FROM v0;
   231  } {0 {}}
   232  do_execsql_test 6.2.2 {
   233    SELECT v0.c0, MIN(v0.c1) FROM v0;
   234  } {0 {}}
   235  
   236  finish_test