/ Hex Artifact Content
Login

Artifact 10cd6addb2fa9093df4751a1b92b50440175dd5468a6ec84d0386e78f087db0e:


0000: 23 20 32 30 30 34 20 4a 75 6e 20 32 37 0a 23 0a  # 2004 Jun 27.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20  ***.# This file 
0170: 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65  implements regre
0180: 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20  ssion tests for 
0190: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
01a0: 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d  #.# This file im
01b0: 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20 66  plements tests f
01c0: 6f 72 20 6d 69 73 63 65 6c 6c 61 6e 6f 75 73 20  or miscellanous 
01d0: 66 65 61 74 75 72 65 73 20 74 68 61 74 20 77 65  features that we
01e0: 72 65 0a 23 20 6c 65 66 74 20 6f 75 74 20 6f 66  re.# left out of
01f0: 20 6f 74 68 65 72 20 74 65 73 74 20 66 69 6c 65   other test file
0200: 73 2e 0a 23 0a 23 20 24 49 64 3a 20 6d 69 73 63  s..#.# $Id: misc
0210: 34 2e 74 65 73 74 2c 76 20 31 2e 32 33 20 32 30  4.test,v 1.23 20
0220: 30 37 2f 31 32 2f 30 38 20 31 38 3a 30 31 3a 33  07/12/08 18:01:3
0230: 31 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74  1 drh Exp $..set
0240: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0250: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0260: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0270: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 50 72 65  ester.tcl..# Pre
0280: 70 61 72 65 20 61 20 73 74 61 74 65 6d 65 6e 74  pare a statement
0290: 20 74 68 61 74 20 77 69 6c 6c 20 63 72 65 61 74   that will creat
02a0: 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61  e a temporary ta
02b0: 62 6c 65 2e 20 20 54 68 65 6e 20 64 6f 0a 23 20  ble.  Then do.# 
02c0: 61 20 72 6f 6c 6c 62 61 63 6b 2e 20 20 54 68 65  a rollback.  The
02d0: 6e 20 74 72 79 20 74 6f 20 65 78 65 63 75 74 65  n try to execute
02e0: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
02f0: 61 74 65 6d 65 6e 74 2e 0a 23 0a 64 6f 5f 74 65  atement..#.do_te
0300: 73 74 20 6d 69 73 63 34 2d 31 2e 31 20 7b 0a 20  st misc4-1.1 {. 
0310: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
0320: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
0330: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
0340: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0350: 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20  ABLE t1(x);.    
0360: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0370: 41 4c 55 45 53 28 31 29 3b 0a 20 20 7d 0a 7d 20  ALUES(1);.  }.} 
0380: 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  {}..ifcapable te
0390: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
03a0: 20 6d 69 73 63 34 2d 31 2e 32 20 7b 0a 20 20 20   misc4-1.2 {.   
03b0: 20 73 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45   set sql {CREATE
03c0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 20 41   TEMP TABLE t2 A
03d0: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
03e0: 74 31 7d 0a 20 20 20 20 73 65 74 20 73 74 6d 74  t1}.    set stmt
03f0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
0400: 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  e $DB $sql -1 TA
0410: 49 4c 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  IL].    execsql 
0420: 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20  {.      BEGIN;. 
0430: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
0440: 45 20 74 33 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t3(a,b,c);.   
0450: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0460: 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  1 SELECT * FROM 
0470: 74 31 3b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41  t1;.      ROLLBA
0480: 43 4b 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  CK;.    }.  } {}
0490: 0a 0a 20 20 23 20 42 65 63 61 75 73 65 20 74 68  ..  # Because th
04a0: 65 20 70 72 65 76 69 6f 75 73 20 74 72 61 6e 73  e previous trans
04b0: 61 63 74 69 6f 6e 20 69 6e 63 6c 75 64 65 64 20  action included 
04c0: 61 20 44 44 4c 20 73 74 61 74 65 6d 65 6e 74 20  a DDL statement 
04d0: 61 6e 64 0a 20 20 23 20 77 61 73 20 72 6f 6c 6c  and.  # was roll
04e0: 65 64 20 62 61 63 6b 2c 20 73 74 61 74 65 6d 65  ed back, stateme
04f0: 6e 74 20 24 73 74 6d 74 20 77 61 73 20 6d 61 72  nt $stmt was mar
0500: 6b 65 64 20 61 73 20 65 78 70 69 72 65 64 2e 20  ked as expired. 
0510: 45 78 65 63 75 74 69 6e 67 20 69 74 0a 20 20 23  Executing it.  #
0520: 20 6e 6f 77 20 72 65 74 75 72 6e 73 20 53 51 4c   now returns SQL
0530: 49 54 45 5f 53 43 48 45 4d 41 2e 0a 20 20 64 6f  ITE_SCHEMA..  do
0540: 5f 74 65 73 74 20 6d 69 73 63 34 2d 31 2e 32 2e  _test misc4-1.2.
0550: 31 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 73 71  1 {.    list [sq
0560: 6c 69 74 65 33 5f 73 74 65 70 20 24 73 74 6d 74  lite3_step $stmt
0570: 5d 20 5b 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ] [sqlite3_final
0580: 69 7a 65 20 24 73 74 6d 74 5d 0a 20 20 7d 20 7b  ize $stmt].  } {
0590: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 53 51 4c  SQLITE_ERROR SQL
05a0: 49 54 45 5f 53 43 48 45 4d 41 7d 0a 20 20 64 6f  ITE_SCHEMA}.  do
05b0: 5f 74 65 73 74 20 6d 69 73 63 34 2d 31 2e 32 2e  _test misc4-1.2.
05c0: 32 20 7b 0a 20 20 20 20 73 65 74 20 73 74 6d 74  2 {.    set stmt
05d0: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
05e0: 65 20 24 44 42 20 24 73 71 6c 20 2d 31 20 54 41  e $DB $sql -1 TA
05f0: 49 4c 5d 0a 20 20 20 20 73 65 74 20 54 41 49 4c  IL].    set TAIL
0600: 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 6f 5f 74 65  .  } {}..  do_te
0610: 73 74 20 6d 69 73 63 34 2d 31 2e 33 20 7b 0a 20  st misc4-1.3 {. 
0620: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
0630: 24 73 74 6d 74 0a 20 20 7d 20 53 51 4c 49 54 45  $stmt.  } SQLITE
0640: 5f 44 4f 4e 45 0a 20 20 64 6f 5f 74 65 73 74 20  _DONE.  do_test 
0650: 6d 69 73 63 34 2d 31 2e 34 20 7b 0a 20 20 20 20  misc4-1.4 {.    
0660: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
0670: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
0680: 6d 70 2e 74 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  mp.t2;.    }.  }
0690: 20 7b 31 7d 0a 20 20 0a 20 20 23 20 44 72 6f 70   {1}.  .  # Drop
06a0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 74   the temporary t
06b0: 61 62 6c 65 2c 20 74 68 65 6e 20 72 65 72 75 6e  able, then rerun
06c0: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 20 73   the prepared  s
06d0: 74 61 74 65 6d 65 6e 74 20 74 6f 0a 20 20 23 20  tatement to.  # 
06e0: 72 65 63 72 65 61 74 65 20 69 74 20 61 67 61 69  recreate it agai
06f0: 6e 2e 20 20 54 68 69 73 20 72 65 63 72 65 61 74  n.  This recreat
0700: 65 73 20 74 69 63 6b 65 74 20 23 38 30 37 2e 0a  es ticket #807..
0710: 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69    #.  do_test mi
0720: 73 63 34 2d 31 2e 35 20 7b 0a 20 20 20 20 65 78  sc4-1.5 {.    ex
0730: 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  ecsql {DROP TABL
0740: 45 20 74 32 7d 0a 20 20 20 20 73 71 6c 69 74 65  E t2}.    sqlite
0750: 33 5f 72 65 73 65 74 20 24 73 74 6d 74 0a 20 20  3_reset $stmt.  
0760: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
0770: 73 74 6d 74 0a 20 20 7d 20 7b 53 51 4c 49 54 45  stmt.  } {SQLITE
0780: 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73  _ERROR}.  do_tes
0790: 74 20 6d 69 73 63 34 2d 31 2e 36 20 7b 0a 20 20  t misc4-1.6 {.  
07a0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
07b0: 7a 65 20 24 73 74 6d 74 0a 20 20 7d 20 7b 53 51  ze $stmt.  } {SQ
07c0: 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a 7d 0a 0a  LITE_SCHEMA}.}..
07d0: 23 20 50 72 65 70 61 72 65 20 62 75 74 20 64 6f  # Prepare but do
07e0: 20 6e 6f 74 20 65 78 65 63 75 74 65 20 76 61 72   not execute var
07f0: 69 6f 75 73 20 43 52 45 41 54 45 20 73 74 61 74  ious CREATE stat
0800: 65 6d 65 6e 74 73 2e 20 20 54 68 65 6e 20 62 65  ements.  Then be
0810: 66 6f 72 65 0a 23 20 74 68 6f 73 65 20 73 74 61  fore.# those sta
0820: 74 65 6d 65 6e 74 73 20 61 72 65 20 65 78 65 63  tements are exec
0830: 75 74 65 64 2c 20 74 72 79 20 74 6f 20 75 73 65  uted, try to use
0840: 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64   the tables, ind
0850: 69 63 65 73 2c 20 76 69 65 77 73 2c 0a 23 20 61  ices, views,.# a
0860: 72 65 20 74 72 69 67 67 65 72 73 20 74 68 61 74  re triggers that
0870: 20 77 65 72 65 20 63 72 65 61 74 65 64 2e 0a 23   were created..#
0880: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 34 2d 32  .do_test misc4-2
0890: 2e 31 20 7b 0a 20 20 73 65 74 20 73 74 6d 74 20  .1 {.  set stmt 
08a0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
08b0: 20 24 44 42 20 7b 43 52 45 41 54 45 20 54 41 42   $DB {CREATE TAB
08c0: 4c 45 20 74 33 28 78 29 3b 7d 20 2d 31 20 54 41  LE t3(x);} -1 TA
08d0: 49 4c 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  IL].  catchsql {
08e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
08f0: 20 74 33 20 56 41 4c 55 45 53 28 31 29 3b 0a 20   t3 VALUES(1);. 
0900: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68   }.} {1 {no such
0910: 20 74 61 62 6c 65 3a 20 74 33 7d 7d 0a 64 6f 5f   table: t3}}.do_
0920: 74 65 73 74 20 6d 69 73 63 34 2d 32 2e 32 20 7b  test misc4-2.2 {
0930: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
0940: 24 73 74 6d 74 0a 7d 20 53 51 4c 49 54 45 5f 44  $stmt.} SQLITE_D
0950: 4f 4e 45 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  ONE.do_test misc
0960: 34 2d 32 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  4-2.3 {.  sqlite
0970: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74  3_finalize $stmt
0980: 0a 7d 20 53 51 4c 49 54 45 5f 4f 4b 0a 64 6f 5f  .} SQLITE_OK.do_
0990: 74 65 73 74 20 6d 69 73 63 34 2d 32 2e 34 20 7b  test misc4-2.4 {
09a0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
09b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
09c0: 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 7d 0a   VALUES(1);.  }.
09d0: 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 54 69 63 6b  } {0 {}}..# Tick
09e0: 65 74 20 23 39 36 36 0a 23 0a 64 6f 5f 74 65 73  et #966.#.do_tes
09f0: 74 20 6d 69 73 63 34 2d 33 2e 31 20 7b 0a 20 20  t misc4-3.1 {.  
0a00: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 43  execsql { .    C
0a10: 52 45 41 54 45 20 54 41 42 4c 45 20 54 61 62 6c  REATE TABLE Tabl
0a20: 65 31 28 49 44 20 69 6e 74 65 67 65 72 20 70 72  e1(ID integer pr
0a30: 69 6d 61 72 79 20 6b 65 79 2c 20 56 61 6c 75 65  imary key, Value
0a40: 20 54 45 58 54 29 3b 0a 20 20 20 20 49 4e 53 45   TEXT);.    INSE
0a50: 52 54 20 49 4e 54 4f 20 54 61 62 6c 65 31 20 56  RT INTO Table1 V
0a60: 41 4c 55 45 53 28 31 2c 20 27 78 27 29 3b 0a 20  ALUES(1, 'x');. 
0a70: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0a80: 54 61 62 6c 65 32 28 49 44 20 69 6e 74 65 67 65  Table2(ID intege
0a90: 72 20 4e 4f 54 20 4e 55 4c 4c 2c 20 56 61 6c 75  r NOT NULL, Valu
0aa0: 65 20 54 45 58 54 29 3b 0a 20 20 20 20 49 4e 53  e TEXT);.    INS
0ab0: 45 52 54 20 49 4e 54 4f 20 54 61 62 6c 65 32 20  ERT INTO Table2 
0ac0: 56 41 4c 55 45 53 28 31 2c 20 27 7a 27 29 3b 0a  VALUES(1, 'z');.
0ad0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0ae0: 54 61 62 6c 65 32 20 56 41 4c 55 45 53 20 28 31  Table2 VALUES (1
0af0: 2c 20 27 61 27 29 3b 0a 20 20 7d 0a 20 20 63 61  , 'a');.  }.  ca
0b00: 74 63 68 73 71 6c 20 7b 20 0a 20 20 20 20 53 45  tchsql { .    SE
0b10: 4c 45 43 54 20 49 44 2c 20 6d 61 78 28 56 61 6c  LECT ID, max(Val
0b20: 75 65 29 20 46 52 4f 4d 20 54 61 62 6c 65 32 20  ue) FROM Table2 
0b30: 47 52 4f 55 50 20 42 59 20 31 2c 20 32 20 4f 52  GROUP BY 1, 2 OR
0b40: 44 45 52 20 42 59 20 31 2c 20 32 3b 0a 20 20 7d  DER BY 1, 2;.  }
0b50: 0a 7d 20 7b 31 20 7b 61 67 67 72 65 67 61 74 65  .} {1 {aggregate
0b60: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
0b70: 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 74 68  ot allowed in th
0b80: 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
0b90: 65 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 63 6f  e}}.ifcapable co
0ba0: 6d 70 6f 75 6e 64 20 7b 0a 20 20 64 6f 5f 74 65  mpound {.  do_te
0bb0: 73 74 20 6d 69 73 63 34 2d 33 2e 32 20 7b 0a 20  st misc4-3.2 {. 
0bc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
0bd0: 20 20 20 53 45 4c 45 43 54 20 49 44 2c 20 56 61     SELECT ID, Va
0be0: 6c 75 65 20 46 52 4f 4d 20 54 61 62 6c 65 31 0a  lue FROM Table1.
0bf0: 20 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 20 53           UNION S
0c00: 45 4c 45 43 54 20 49 44 2c 20 6d 61 78 28 56 61  ELECT ID, max(Va
0c10: 6c 75 65 29 20 46 52 4f 4d 20 54 61 62 6c 65 32  lue) FROM Table2
0c20: 20 47 52 4f 55 50 20 42 59 20 31 0a 20 20 20 20   GROUP BY 1.    
0c30: 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32 3b    ORDER BY 1, 2;
0c40: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 78 20  .    }.  } {1 x 
0c50: 31 20 7a 7d 0a 20 20 64 6f 5f 74 65 73 74 20 6d  1 z}.  do_test m
0c60: 69 73 63 34 2d 33 2e 33 20 7b 0a 20 20 20 20 63  isc4-3.3 {.    c
0c70: 61 74 63 68 73 71 6c 20 7b 20 0a 20 20 20 20 20  atchsql { .     
0c80: 20 53 45 4c 45 43 54 20 49 44 2c 20 56 61 6c 75   SELECT ID, Valu
0c90: 65 20 46 52 4f 4d 20 54 61 62 6c 65 31 0a 20 20  e FROM Table1.  
0ca0: 20 20 20 20 20 20 20 55 4e 49 4f 4e 20 53 45 4c         UNION SEL
0cb0: 45 43 54 20 49 44 2c 20 6d 61 78 28 56 61 6c 75  ECT ID, max(Valu
0cc0: 65 29 20 46 52 4f 4d 20 54 61 62 6c 65 32 20 47  e) FROM Table2 G
0cd0: 52 4f 55 50 20 42 59 20 31 2c 20 32 0a 20 20 20  ROUP BY 1, 2.   
0ce0: 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32     ORDER BY 1, 2
0cf0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
0d00: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
0d10: 6f 6e 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ons are not allo
0d20: 77 65 64 20 69 6e 20 74 68 65 20 47 52 4f 55 50  wed in the GROUP
0d30: 20 42 59 20 63 6c 61 75 73 65 7d 7d 0a 20 20 64   BY clause}}.  d
0d40: 6f 5f 74 65 73 74 20 6d 69 73 63 34 2d 33 2e 34  o_test misc4-3.4
0d50: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
0d60: 7b 20 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  { .      SELECT 
0d70: 49 44 2c 20 6d 61 78 28 56 61 6c 75 65 29 20 46  ID, max(Value) F
0d80: 52 4f 4d 20 54 61 62 6c 65 32 20 47 52 4f 55 50  ROM Table2 GROUP
0d90: 20 42 59 20 31 2c 20 32 0a 20 20 20 20 20 20 20   BY 1, 2.       
0da0: 20 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 49    UNION SELECT I
0db0: 44 2c 20 56 61 6c 75 65 20 46 52 4f 4d 20 54 61  D, Value FROM Ta
0dc0: 62 6c 65 31 0a 20 20 20 20 20 20 4f 52 44 45 52  ble1.      ORDER
0dd0: 20 42 59 20 31 2c 20 32 3b 0a 20 20 20 20 7d 0a   BY 1, 2;.    }.
0de0: 20 20 7d 20 7b 31 20 7b 61 67 67 72 65 67 61 74    } {1 {aggregat
0df0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
0e00: 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 74  not allowed in t
0e10: 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
0e20: 73 65 7d 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  se}}.} ;# ifcapa
0e30: 62 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a 0a 23 20  ble compound..# 
0e40: 54 69 63 6b 65 74 20 23 31 30 34 37 2e 20 20 4d  Ticket #1047.  M
0e50: 61 6b 65 20 73 75 72 65 20 63 6f 6c 75 6d 6e 20  ake sure column 
0e60: 74 79 70 65 73 20 61 72 65 20 70 72 65 73 65 72  types are preser
0e70: 76 65 64 20 69 6e 20 73 75 62 71 75 65 72 69 65  ved in subquerie
0e80: 73 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73  s..#.ifcapable s
0e90: 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74  ubquery {.  do_t
0ea0: 65 73 74 20 6d 69 73 63 34 2d 34 2e 31 20 7b 0a  est misc4-4.1 {.
0eb0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
0ec0: 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65      create table
0ed0: 20 61 28 6b 65 79 20 76 61 72 63 68 61 72 2c 20   a(key varchar, 
0ee0: 64 61 74 61 20 76 61 72 63 68 61 72 29 3b 0a 20  data varchar);. 
0ef0: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
0f00: 65 20 62 28 6b 65 79 20 76 61 72 63 68 61 72 2c  e b(key varchar,
0f10: 20 70 65 72 69 6f 64 20 69 6e 74 65 67 65 72 29   period integer)
0f20: 3b 0a 20 20 20 20 20 20 69 6e 73 65 72 74 20 69  ;.      insert i
0f30: 6e 74 6f 20 61 20 76 61 6c 75 65 73 28 27 30 31  nto a values('01
0f40: 27 2c 27 64 61 74 61 30 31 27 29 3b 0a 20 20 20  ','data01');.   
0f50: 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 61     insert into a
0f60: 20 76 61 6c 75 65 73 28 27 2b 31 27 2c 27 64 61   values('+1','da
0f70: 74 61 2b 31 27 29 3b 0a 20 20 20 20 20 20 0a 20  ta+1');.      . 
0f80: 20 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f       insert into
0f90: 20 62 20 76 61 6c 75 65 73 20 28 27 30 31 27 2c   b values ('01',
0fa0: 31 29 3b 0a 20 20 20 20 20 20 69 6e 73 65 72 74  1);.      insert
0fb0: 20 69 6e 74 6f 20 62 20 76 61 6c 75 65 73 20 28   into b values (
0fc0: 27 30 31 27 2c 32 29 3b 0a 20 20 20 20 20 20 69  '01',2);.      i
0fd0: 6e 73 65 72 74 20 69 6e 74 6f 20 62 20 76 61 6c  nsert into b val
0fe0: 75 65 73 20 28 27 2b 31 27 2c 33 29 3b 0a 20 20  ues ('+1',3);.  
0ff0: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
1000: 62 20 76 61 6c 75 65 73 20 28 27 2b 31 27 2c 34  b values ('+1',4
1010: 29 3b 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20  );.      .      
1020: 73 65 6c 65 63 74 20 61 2e 2a 2c 20 78 2e 2a 0a  select a.*, x.*.
1030: 20 20 20 20 20 20 20 20 66 72 6f 6d 20 61 2c 20          from a, 
1040: 28 73 65 6c 65 63 74 20 6b 65 79 2c 73 75 6d 28  (select key,sum(
1050: 70 65 72 69 6f 64 29 20 66 72 6f 6d 20 62 20 67  period) from b g
1060: 72 6f 75 70 20 62 79 20 6b 65 79 29 20 61 73 20  roup by key) as 
1070: 78 0a 20 20 20 20 20 20 20 20 77 68 65 72 65 20  x.        where 
1080: 61 2e 6b 65 79 3d 78 2e 6b 65 79 20 6f 72 64 65  a.key=x.key orde
1090: 72 20 62 79 20 31 20 64 65 73 63 3b 0a 20 20 20  r by 1 desc;.   
10a0: 20 7d 0a 20 20 7d 20 7b 30 31 20 64 61 74 61 30   }.  } {01 data0
10b0: 31 20 30 31 20 33 20 2b 31 20 64 61 74 61 2b 31  1 01 3 +1 data+1
10c0: 20 2b 31 20 37 7d 0a 0a 20 20 23 20 54 68 69 73   +1 7}..  # This
10d0: 20 74 65 73 74 20 63 61 73 65 20 74 65 73 74 73   test case tests
10e0: 20 74 68 65 20 73 61 6d 65 20 70 72 6f 70 65 72   the same proper
10f0: 74 79 20 61 73 20 6d 69 73 63 34 2d 34 2e 31 2c  ty as misc4-4.1,
1100: 20 62 75 74 20 69 74 20 69 73 0a 20 20 23 20 61   but it is.  # a
1110: 20 62 69 74 20 73 6d 61 6c 6c 65 72 20 77 68 69   bit smaller whi
1120: 63 68 20 6d 61 6b 65 73 20 69 74 20 65 61 73 69  ch makes it easi
1130: 65 72 20 74 6f 20 77 6f 72 6b 20 77 69 74 68 20  er to work with 
1140: 77 68 69 6c 65 20 64 65 62 75 67 67 69 6e 67 2e  while debugging.
1150: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 34  .  do_test misc4
1160: 2d 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -4.2 {.    execs
1170: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
1180: 45 20 54 41 42 4c 45 20 61 62 28 61 20 54 45 58  E TABLE ab(a TEX
1190: 54 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20 20  T, b TEXT);.    
11a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
11b0: 20 56 41 4c 55 45 53 28 27 30 31 27 2c 20 27 31   VALUES('01', '1
11c0: 27 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78  ');.    }.    ex
11d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  ecsql {.      se
11e0: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 61 62 2c 20  lect * from ab, 
11f0: 28 73 65 6c 65 63 74 20 62 20 66 72 6f 6d 20 61  (select b from a
1200: 62 29 20 61 73 20 78 20 77 68 65 72 65 20 78 2e  b) as x where x.
1210: 62 20 3d 20 61 62 2e 61 3b 0a 20 20 20 20 7d 0a  b = ab.a;.    }.
1220: 20 20 7d 20 7b 7d 0a 7d 0a 0a 0a 23 20 54 69 63    } {}.}...# Tic
1230: 6b 65 74 20 23 31 30 33 36 2e 20 20 57 68 65 6e  ket #1036.  When
1240: 20 63 72 65 61 74 69 6e 67 20 74 61 62 6c 65 73   creating tables
1250: 20 66 72 6f 6d 20 61 20 53 45 4c 45 43 54 20 6f   from a SELECT o
1260: 6e 20 61 20 76 69 65 77 2c 20 75 73 65 20 74 68  n a view, use th
1270: 65 0a 23 20 73 68 6f 72 74 20 6e 61 6d 65 73 20  e.# short names 
1280: 6f 66 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 69 66  of columns..#.if
1290: 63 61 70 61 62 6c 65 20 76 69 65 77 20 7b 0a 20  capable view {. 
12a0: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 34 2d 35   do_test misc4-5
12b0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
12c0: 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20   {.      create 
12d0: 74 61 62 6c 65 20 74 34 28 61 2c 62 29 3b 0a 20  table t4(a,b);. 
12e0: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
12f0: 65 20 74 35 28 61 2c 63 29 3b 0a 20 20 20 20 20  e t5(a,c);.     
1300: 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 34 20   insert into t4 
1310: 76 61 6c 75 65 73 20 28 31 2c 32 29 3b 0a 20 20  values (1,2);.  
1320: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
1330: 74 35 20 76 61 6c 75 65 73 20 28 31 2c 33 29 3b  t5 values (1,3);
1340: 0a 20 20 20 20 20 20 63 72 65 61 74 65 20 76 69  .      create vi
1350: 65 77 20 6d 79 76 69 65 77 20 61 73 20 73 65 6c  ew myview as sel
1360: 65 63 74 20 74 34 2e 61 20 61 20 66 72 6f 6d 20  ect t4.a a from 
1370: 74 34 20 69 6e 6e 65 72 20 6a 6f 69 6e 20 74 35  t4 inner join t5
1380: 20 6f 6e 20 74 34 2e 61 3d 74 35 2e 61 3b 0a 20   on t4.a=t5.a;. 
1390: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
13a0: 65 20 70 72 6f 62 6c 65 6d 20 61 73 20 73 65 6c  e problem as sel
13b0: 65 63 74 20 2a 20 66 72 6f 6d 20 6d 79 76 69 65  ect * from myvie
13c0: 77 3b 20 0a 20 20 20 20 7d 0a 20 20 20 20 65 78  w; .    }.    ex
13d0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 73  ecsql2 {.      s
13e0: 65 6c 65 63 74 20 2a 20 46 52 4f 4d 20 70 72 6f  elect * FROM pro
13f0: 62 6c 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  blem;.    }.  } 
1400: 7b 61 20 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {a 1}.  do_test 
1410: 6d 69 73 63 34 2d 35 2e 32 20 7b 0a 20 20 20 20  misc4-5.2 {.    
1420: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20  execsql2 {.     
1430: 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 74 36   create table t6
1440: 20 61 73 20 73 65 6c 65 63 74 20 2a 20 66 72 6f   as select * fro
1450: 6d 20 74 34 2c 20 74 35 3b 0a 20 20 20 20 20 20  m t4, t5;.      
1460: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 36  select * from t6
1470: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 20 31  ;.    }.  } {a 1
1480: 20 62 20 32 20 61 3a 31 20 31 20 63 20 33 7d 0a   b 2 a:1 1 c 3}.
1490: 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 30 38  }..# Ticket #108
14a0: 36 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 34 2d  6.do_test misc4-
14b0: 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.1 {.  execsql 
14c0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
14d0: 4c 45 20 61 62 63 28 61 29 3b 0a 20 20 20 20 49  LE abc(a);.    I
14e0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56  NSERT INTO abc V
14f0: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 43 52  ALUES(1);.    CR
1500: 45 41 54 45 20 54 41 42 4c 45 20 64 65 66 28 64  EATE TABLE def(d
1510: 2c 20 65 2c 20 66 2c 20 50 52 49 4d 41 52 59 20  , e, f, PRIMARY 
1520: 4b 45 59 28 64 2c 20 65 29 29 3b 0a 20 20 7d 0a  KEY(d, e));.  }.
1530: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  } {}.do_test mis
1540: 63 34 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  c4-6.2 {.  execs
1550: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1560: 61 20 46 52 4f 4d 20 61 62 63 20 4c 45 46 54 20  a FROM abc LEFT 
1570: 4a 4f 49 4e 20 64 65 66 20 4f 4e 20 28 61 62 63  JOIN def ON (abc
1580: 2e 61 3d 64 65 66 2e 64 29 3b 0a 20 20 7d 0a 7d  .a=def.d);.  }.}
1590: 20 7b 31 7d 0a 0a 23 20 32 30 31 35 2d 30 35 2d   {1}..# 2015-05-
15a0: 31 35 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  15.  Error messa
15b0: 67 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 70 72  ge formatting pr
15c0: 6f 62 6c 65 6d 2e 0a 23 0a 64 62 20 63 6c 6f 73  oblem..#.db clos
15d0: 65 0a 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65  e.sqlite3 db :me
15e0: 6d 6f 72 79 3a 0a 73 71 6c 69 74 65 33 5f 64 62  mory:.sqlite3_db
15f0: 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e  _config db DEFEN
1600: 53 49 56 45 20 30 0a 64 6f 5f 63 61 74 63 68 73  SIVE 0.do_catchs
1610: 71 6c 5f 74 65 73 74 20 6d 69 73 63 34 2d 37 2e  ql_test misc4-7.
1620: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
1630: 4c 45 20 74 37 28 78 29 3b 0a 20 20 50 52 41 47  LE t7(x);.  PRAG
1640: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
1650: 6d 61 3d 4f 4e 3b 0a 20 20 55 50 44 41 54 45 20  ma=ON;.  UPDATE 
1660: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45  sqlite_master SE
1670: 54 20 73 71 6c 3d 27 43 52 45 41 54 45 20 54 41  T sql='CREATE TA
1680: 42 4c 45 20 5b 4d 25 73 25 73 25 73 25 73 25 73  BLE [M%s%s%s%s%s
1690: 25 73 25 73 25 73 25 73 25 73 25 73 25 73 25 73  %s%s%s%s%s%s%s%s
16a0: 27 3b 0a 20 20 56 41 43 55 55 4d 3b 0a 7d 20 7b  ';.  VACUUM;.} {
16b0: 31 20 7b 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20  1 {unrecognized 
16c0: 74 6f 6b 65 6e 3a 20 22 5b 4d 25 73 25 73 25 73  token: "[M%s%s%s
16d0: 25 73 25 73 25 73 25 73 25 73 25 73 25 73 25 73  %s%s%s%s%s%s%s%s
16e0: 25 73 25 73 22 7d 7d 0a 0a 23 20 32 30 31 35 2d  %s%s"}}..# 2015-
16f0: 30 35 2d 31 38 2e 20 20 55 73 65 20 6f 66 20 65  05-18.  Use of e
1700: 70 68 65 72 6d 65 72 61 6c 20 4d 65 6d 20 63 6f  phermeral Mem co
1710: 6e 74 65 6e 74 20 61 66 74 65 72 20 74 68 65 20  ntent after the 
1720: 63 75 72 73 6f 72 20 74 68 61 74 20 68 6f 6c 64  cursor that hold
1730: 73 0a 23 20 74 68 65 20 63 61 6e 6f 6e 69 63 61  s.# the canonica
1740: 6c 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6d 6f  l content has mo
1750: 76 65 64 20 6f 6e 2e 0a 23 0a 64 6f 5f 65 78 65  ved on..#.do_exe
1760: 63 73 71 6c 5f 74 65 73 74 20 6d 69 73 63 34 2d  csql_test misc4-
1770: 37 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 54  7.2 {.  CREATE T
1780: 41 42 4c 45 20 74 30 28 61 2c 62 29 3b 0a 20 20  ABLE t0(a,b);.  
1790: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 30 20 56  INSERT INTO t0 V
17a0: 41 4c 55 45 53 28 31 2c 30 29 2c 28 32 2c 30 29  ALUES(1,0),(2,0)
17b0: 3b 0a 20 20 55 50 44 41 54 45 20 74 30 20 53 45  ;.  UPDATE t0 SE
17c0: 54 20 62 3d 39 20 57 48 45 52 45 20 61 20 41 4e  T b=9 WHERE a AN
17d0: 44 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  D (SELECT a FROM
17e0: 20 74 30 20 57 48 45 52 45 20 61 29 3b 0a 20 20   t0 WHERE a);.  
17f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 30  SELECT * FROM t0
1800: 20 4f 52 44 45 52 20 42 59 20 2b 61 3b 0a 7d 20   ORDER BY +a;.} 
1810: 7b 31 20 39 20 32 20 39 7d 0a 0a 66 69 6e 69 73  {1 9 2 9}..finis
1820: 68 5f 74 65 73 74 0a                             h_test.