/ Hex Artifact Content
Login

Artifact ee9b70a38369ae44360febb411976aa3c8cf2689:


0000: 23 20 32 30 31 30 20 53 65 70 74 65 6d 62 65 72  # 2010 September
0010: 20 32 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   25.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 2a 0a 23 0a 23 20 54 68  *********.#.# Th
0170: 69 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e  is file implemen
0180: 74 73 20 74 65 73 74 73 20 74 6f 20 76 65 72 69  ts tests to veri
0190: 66 79 20 74 68 61 74 20 74 68 65 20 22 74 65 73  fy that the "tes
01a0: 74 61 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 73  table statements
01b0: 22 20 69 6e 20 0a 23 20 74 68 65 20 6c 61 6e 67  " in .# the lang
01c0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2e 68 74 6d  _createtable.htm
01d0: 6c 20 64 6f 63 75 6d 65 6e 74 20 61 72 65 20 63  l document are c
01e0: 6f 72 72 65 63 74 2e 0a 23 0a 0a 73 65 74 20 74  orrect..#..set t
01f0: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0200: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0210: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0220: 74 65 72 2e 74 63 6c 0a 0a 73 65 74 20 3a 3a 74  ter.tcl..set ::t
0230: 65 73 74 70 72 65 66 69 78 20 65 5f 63 72 65 61  estprefix e_crea
0240: 74 65 74 61 62 6c 65 0a 0a 23 20 54 65 73 74 20  tetable..# Test 
0250: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0260: 23 20 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c  #   e_createtabl
0270: 65 2d 30 2e 2a 3a 20 54 65 73 74 20 74 68 61 74  e-0.*: Test that
0280: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
0290: 72 61 6d 73 20 61 72 65 20 63 6f 72 72 65 63 74  rams are correct
02a0: 2e 0a 23 0a 23 20 20 20 65 5f 63 72 65 61 74 65  ..#.#   e_create
02b0: 74 61 62 6c 65 2d 31 2e 2a 3a 20 54 65 73 74 20  table-1.*: Test 
02c0: 73 74 61 74 65 6d 65 6e 74 73 20 72 65 6c 61 74  statements relat
02d0: 65 64 20 74 6f 20 74 61 62 6c 65 20 61 6e 64 20  ed to table and 
02e0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 2c 20  database names, 
02f0: 0a 23 20 20 20 20 20 20 20 74 68 65 20 54 45 4d  .#       the TEM
0300: 50 20 61 6e 64 20 54 45 4d 50 4f 52 41 52 59 20  P and TEMPORARY 
0310: 6b 65 79 77 6f 72 64 73 2c 20 61 6e 64 20 74 68  keywords, and th
0320: 65 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  e IF NOT EXISTS 
0330: 63 6c 61 75 73 65 2e 0a 23 0a 23 20 20 20 65 5f  clause..#.#   e_
0340: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 2a 3a  createtable-2.*:
0350: 20 54 65 73 74 20 22 43 52 45 41 54 45 20 54 41   Test "CREATE TA
0360: 42 4c 45 20 41 53 22 20 73 74 61 74 65 6d 65 6e  BLE AS" statemen
0370: 74 73 2e 0a 23 0a 0a 70 72 6f 63 20 64 6f 5f 63  ts..#..proc do_c
0380: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
0390: 20 7b 6e 6d 20 61 72 67 73 7d 20 7b 0a 20 20 75   {nm args} {.  u
03a0: 70 6c 65 76 65 6c 20 64 6f 5f 73 65 6c 65 63 74  plevel do_select
03b0: 5f 74 65 73 74 73 20 5b 6c 69 73 74 20 65 5f 63  _tests [list e_c
03c0: 72 65 61 74 65 74 61 62 6c 65 2d 24 6e 6d 5d 20  reatetable-$nm] 
03d0: 24 61 72 67 73 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d  $args.}...#-----
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0420: 2d 2d 2d 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d  ----.# This comm
0430: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 65  and returns a se
0440: 72 69 61 6c 69 7a 65 64 20 74 63 6c 20 61 72 72  rialized tcl arr
0450: 61 79 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  ay mapping from 
0460: 74 68 65 20 6e 61 6d 65 20 6f 66 0a 23 20 65 61  the name of.# ea
0470: 63 68 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ch attached data
0480: 62 61 73 65 20 74 6f 20 61 20 6c 69 73 74 20 6f  base to a list o
0490: 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 61 74  f tables in that
04a0: 20 64 61 74 61 62 61 73 65 2e 20 46 6f 72 20 65   database. For e
04b0: 78 61 6d 70 6c 65 2c 0a 23 20 69 66 20 74 68 65  xample,.# if the
04c0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
04d0: 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68   is created with
04e0: 3a 0a 23 0a 23 20 20 20 43 52 45 41 54 45 20 54  :.#.#   CREATE T
04f0: 41 42 4c 45 20 74 31 28 78 29 3b 0a 23 20 20 20  ABLE t1(x);.#   
0500: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
0510: 45 20 74 32 28 78 29 3b 0a 23 20 20 20 43 52 45  E t2(x);.#   CRE
0520: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
0530: 33 28 78 29 3b 0a 23 0a 23 20 54 68 65 6e 20 74  3(x);.#.# Then t
0540: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  his command retu
0550: 72 6e 73 20 22 6d 61 69 6e 20 74 31 20 74 65 6d  rns "main t1 tem
0560: 70 20 7b 74 32 20 74 33 7d 22 2e 0a 23 0a 70 72  p {t2 t3}"..#.pr
0570: 6f 63 20 74 61 62 6c 65 5f 6c 69 73 74 20 7b 7d  oc table_list {}
0580: 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69   {.  set res [li
0590: 73 74 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 20  st].  db eval { 
05a0: 70 72 61 67 6d 61 20 64 61 74 61 62 61 73 65 5f  pragma database_
05b0: 6c 69 73 74 20 7d 20 61 20 7b 0a 20 20 20 20 73  list } a {.    s
05c0: 65 74 20 64 62 6e 61 6d 65 20 24 61 28 6e 61 6d  et dbname $a(nam
05d0: 65 29 0a 20 20 20 20 73 65 74 20 6d 61 73 74 65  e).    set maste
05e0: 72 20 24 61 28 6e 61 6d 65 29 2e 73 71 6c 69 74  r $a(name).sqlit
05f0: 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 69 66 20  e_master.    if 
0600: 7b 24 64 62 6e 61 6d 65 20 3d 3d 20 22 74 65 6d  {$dbname == "tem
0610: 70 22 7d 20 7b 20 73 65 74 20 6d 61 73 74 65 72  p"} { set master
0620: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
0630: 74 65 72 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e  ter }.    lappen
0640: 64 20 72 65 73 20 24 64 62 6e 61 6d 65 20 5b 0a  d res $dbname [.
0650: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 22 53        db eval "S
0660: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74  ELECT DISTINCT t
0670: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 24 6d 61  bl_name FROM $ma
0680: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 74 62  ster ORDER BY tb
0690: 6c 5f 6e 61 6d 65 22 0a 20 20 20 20 5d 0a 20 20  l_name".    ].  
06a0: 7d 0a 20 20 73 65 74 20 72 65 73 0a 7d 0a 0a 0a  }.  set res.}...
06b0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
06c0: 65 73 74 73 20 30 2e 31 2e 31 20 2d 72 65 70 61  ests 0.1.1 -repa
06d0: 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f  ir {.  drop_all_
06e0: 74 61 62 6c 65 73 0a 7d 20 7b 0a 20 20 31 20 20  tables.} {.  1  
06f0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
0700: 31 28 63 31 20 6f 6e 65 29 22 20 20 20 20 20 20  1(c1 one)"      
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0720: 20 20 7b 7d 0a 20 20 32 20 20 20 22 43 52 45 41    {}.  2   "CREA
0730: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 6f  TE TABLE t1(c1 o
0740: 6e 65 20 74 77 6f 29 22 20 20 20 20 20 20 20 20  ne two)"        
0750: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0760: 20 33 20 20 20 22 43 52 45 41 54 45 20 54 41 42   3   "CREATE TAB
0770: 4c 45 20 74 31 28 63 31 20 6f 6e 65 20 74 77 6f  LE t1(c1 one two
0780: 20 74 68 72 65 65 29 22 20 20 20 20 20 20 20 20   three)"        
0790: 20 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 22        {}.  4   "
07a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
07b0: 63 31 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  c1 one two three
07c0: 20 66 6f 75 72 29 22 20 20 20 20 20 20 20 20 20   four)"         
07d0: 7b 7d 0a 20 20 35 20 20 20 22 43 52 45 41 54 45  {}.  5   "CREATE
07e0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 6f 6e 65   TABLE t1(c1 one
07f0: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 28   two three four(
0800: 31 34 29 29 22 20 20 20 20 20 7b 7d 0a 20 20 36  14))"     {}.  6
0810: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
0820: 20 74 31 28 63 31 20 6f 6e 65 20 74 77 6f 20 74   t1(c1 one two t
0830: 68 72 65 65 20 66 6f 75 72 28 31 34 2c 20 32 32  hree four(14, 22
0840: 29 29 22 20 7b 7d 0a 20 20 37 20 20 20 22 43 52  ))" {}.  7   "CR
0850: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
0860: 20 76 61 72 28 2b 31 34 2c 20 2d 32 32 2e 33 29   var(+14, -22.3)
0870: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  )"            {}
0880: 0a 20 20 38 20 20 20 22 43 52 45 41 54 45 20 54  .  8   "CREATE T
0890: 41 42 4c 45 20 74 31 28 63 31 20 76 61 72 28 31  ABLE t1(c1 var(1
08a0: 2e 30 65 31 30 29 29 22 20 20 20 20 20 20 20 20  .0e10))"        
08b0: 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 64 6f 5f          {}.}.do_
08c0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
08d0: 73 20 30 2e 31 2e 32 20 2d 65 72 72 6f 72 20 7b  s 0.1.2 -error {
08e0: 0a 20 20 6e 65 61 72 20 22 25 73 22 3a 20 73 79  .  near "%s": sy
08f0: 6e 74 61 78 20 65 72 72 6f 72 0a 7d 20 7b 0a 20  ntax error.} {. 
0900: 20 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42   1   "CREATE TAB
0910: 4c 45 20 74 31 28 63 31 20 6f 6e 65 28 6e 75 6d  LE t1(c1 one(num
0920: 62 65 72 29 29 22 20 20 20 20 20 20 20 20 20 20  ber))"          
0930: 20 20 20 20 20 20 7b 6e 75 6d 62 65 72 7d 0a 7d        {number}.}
0940: 0a 0a 0a 23 20 73 79 6e 74 61 78 20 64 69 61 67  ...# syntax diag
0950: 72 61 6d 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74  ram column-const
0960: 72 61 69 6e 74 0a 23 0a 64 6f 5f 63 72 65 61 74  raint.#.do_creat
0970: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 30 2e 32  etable_tests 0.2
0980: 2e 31 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 64  .1 -repair {.  d
0990: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a  rop_all_tables .
09a0: 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41    execsql { CREA
09b0: 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 50 52  TE TABLE t2(x PR
09c0: 49 4d 41 52 59 20 4b 45 59 29 20 7d 0a 7d 20 7b  IMARY KEY) }.} {
09d0: 0a 20 20 31 2e 31 20 20 20 22 43 52 45 41 54 45  .  1.1   "CREATE
09e0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
09f0: 74 20 50 52 49 4d 41 52 59 20 4b 45 59 29 22 20  t PRIMARY KEY)" 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 32          {}.  1.2
0a20: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
0a30: 20 74 31 28 63 31 20 74 65 78 74 20 50 52 49 4d   t1(c1 text PRIM
0a40: 41 52 59 20 4b 45 59 20 41 53 43 29 22 20 20 20  ARY KEY ASC)"   
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 20 7b 7d 0a 20 20 31 2e 33 20 20 20 22 43 52    {}.  1.3   "CR
0a70: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
0a80: 20 74 65 78 74 20 50 52 49 4d 41 52 59 20 4b 45   text PRIMARY KE
0a90: 59 20 44 45 53 43 29 22 20 20 20 20 20 20 20 20  Y DESC)"        
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0ab0: 20 31 2e 34 20 20 20 22 43 52 45 41 54 45 20 54   1.4   "CREATE T
0ac0: 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20  ABLE t1(c1 text 
0ad0: 43 4f 4e 53 54 52 41 49 4e 54 20 63 6f 6e 73 20  CONSTRAINT cons 
0ae0: 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43  PRIMARY KEY DESC
0af0: 29 22 20 20 20 20 7b 7d 0a 0a 20 20 32 2e 31 20  )"    {}..  2.1 
0b00: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0b10: 74 31 28 63 31 20 74 65 78 74 20 4e 4f 54 20 4e  t1(c1 text NOT N
0b20: 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20  ULL)"           
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 7b 7d 0a 20 20 32 2e 32 20 20 20 22 43 52 45   {}.  2.2   "CRE
0b50: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
0b60: 74 65 78 74 20 43 4f 4e 53 54 52 41 49 4e 54 20  text CONSTRAINT 
0b70: 6e 6d 20 4e 4f 54 20 4e 55 4c 4c 29 22 20 20 20  nm NOT NULL)"   
0b80: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
0b90: 32 2e 33 20 20 20 22 43 52 45 41 54 45 20 54 41  2.3   "CREATE TA
0ba0: 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 4e  BLE t1(c1 text N
0bb0: 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20  ULL)"           
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 7b 7d 0a 20 20 32 2e 34 20 20 20       {}.  2.4   
0be0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0bf0: 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41  (c1 text CONSTRA
0c00: 49 4e 54 20 6e 6d 20 4e 55 4c 4c 29 22 20 20 20  INT nm NULL)"   
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0c20: 7d 0a 0a 20 20 33 2e 31 20 20 20 22 43 52 45 41  }..  3.1   "CREA
0c30: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0c40: 65 78 74 20 55 4e 49 51 55 45 29 22 20 20 20 20  ext UNIQUE)"    
0c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c60: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33            {}.  3
0c70: 2e 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .2   "CREATE TAB
0c80: 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 43 4f  LE t1(c1 text CO
0c90: 4e 53 54 52 41 49 4e 54 20 75 6e 20 55 4e 49 51  NSTRAINT un UNIQ
0ca0: 55 45 29 22 20 20 20 20 20 20 20 20 20 20 20 20  UE)"            
0cb0: 20 20 20 20 7b 7d 0a 0a 20 20 34 2e 31 20 20 20      {}..  4.1   
0cc0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0cd0: 28 63 31 20 74 65 78 74 20 43 48 45 43 4b 28 63  (c1 text CHECK(c
0ce0: 31 21 3d 30 29 29 22 20 20 20 20 20 20 20 20 20  1!=0))"         
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0d00: 7d 0a 20 20 34 2e 32 20 20 20 22 43 52 45 41 54  }.  4.2   "CREAT
0d10: 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65  E TABLE t1(c1 te
0d20: 78 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 63 68  xt CONSTRAINT ch
0d30: 6b 20 43 48 45 43 4b 28 63 31 21 3d 30 29 29 22  k CHECK(c1!=0))"
0d40: 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 35           {}..  5
0d50: 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .1   "CREATE TAB
0d60: 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 44 45  LE t1(c1 text DE
0d70: 46 41 55 4c 54 20 31 29 22 20 20 20 20 20 20 20  FAULT 1)"       
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d90: 20 20 20 20 7b 7d 0a 20 20 35 2e 32 20 20 20 22      {}.  5.2   "
0da0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0db0: 63 31 20 74 65 78 74 20 44 45 46 41 55 4c 54 20  c1 text DEFAULT 
0dc0: 2d 31 29 22 20 20 20 20 20 20 20 20 20 20 20 20  -1)"            
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
0de0: 0a 20 20 35 2e 33 20 20 20 22 43 52 45 41 54 45  .  5.3   "CREATE
0df0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
0e00: 74 20 44 45 46 41 55 4c 54 20 2b 31 29 22 20 20  t DEFAULT +1)"  
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e20: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e 34          {}.  5.4
0e30: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
0e40: 20 74 31 28 63 31 20 74 65 78 74 20 44 45 46 41   t1(c1 text DEFA
0e50: 55 4c 54 20 2d 34 35 2e 38 65 32 32 29 22 20 20  ULT -45.8e22)"  
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 7b 7d 0a 20 20 35 2e 35 20 20 20 22 43 52    {}.  5.5   "CR
0e80: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
0e90: 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 28 31   text DEFAULT (1
0ea0: 2b 31 29 29 22 20 20 20 20 20 20 20 20 20 20 20  +1))"           
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0ec0: 20 35 2e 36 20 20 20 22 43 52 45 41 54 45 20 54   5.6   "CREATE T
0ed0: 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20  ABLE t1(c1 text 
0ee0: 43 4f 4e 53 54 52 41 49 4e 54 20 5c 22 31 20 32  CONSTRAINT \"1 2
0ef0: 5c 22 20 44 45 46 41 55 4c 54 20 28 31 2b 31 29  \" DEFAULT (1+1)
0f00: 29 22 20 20 20 20 7b 7d 0a 0a 20 20 36 2e 31 20  )"    {}..  6.1 
0f10: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0f20: 74 31 28 63 31 20 74 65 78 74 20 43 4f 4c 4c 41  t1(c1 text COLLA
0f30: 54 45 20 6e 6f 63 61 73 65 29 22 20 20 20 20 20  TE nocase)"     
0f40: 20 20 20 7b 7d 0a 20 20 36 2e 32 20 20 20 22 43     {}.  6.2   "C
0f50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0f60: 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41 49 4e  1 text CONSTRAIN
0f70: 54 20 27 61 20 78 27 20 43 4f 4c 4c 41 54 45 20  T 'a x' COLLATE 
0f80: 6e 6f 63 61 73 65 29 22 20 20 20 20 20 7b 7d 0a  nocase)"     {}.
0f90: 0a 20 20 37 2e 31 20 20 20 22 43 52 45 41 54 45  .  7.1   "CREATE
0fa0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 52 45 46   TABLE t1(c1 REF
0fb0: 45 52 45 4e 43 45 53 20 74 32 29 22 20 20 20 20  ERENCES t2)"    
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 37 2e 32          {}.  7.2
0fe0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
0ff0: 20 74 31 28 63 31 20 43 4f 4e 53 54 52 41 49 4e   t1(c1 CONSTRAIN
1000: 54 20 61 62 63 20 52 45 46 45 52 45 4e 43 45 53  T abc REFERENCES
1010: 20 74 32 29 22 20 20 20 20 20 20 20 20 20 20 20   t2)"           
1020: 20 20 7b 7d 0a 0a 20 20 38 2e 31 20 20 20 7b 0a    {}..  8.1   {.
1030: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1040: 20 74 31 28 63 31 20 0a 20 20 20 20 20 20 50 52   t1(c1 .      PR
1050: 49 4d 41 52 59 20 4b 45 59 20 4e 4f 54 20 4e 55  IMARY KEY NOT NU
1060: 4c 4c 20 55 4e 49 51 55 45 20 43 48 45 43 4b 28  LL UNIQUE CHECK(
1070: 63 31 20 49 53 20 27 74 65 6e 27 29 20 44 45 46  c1 IS 'ten') DEF
1080: 41 55 4c 54 20 31 32 33 20 52 45 46 45 52 45 4e  AULT 123 REFEREN
1090: 43 45 53 20 74 31 0a 20 20 20 20 29 3b 0a 20 20  CES t1.    );.  
10a0: 7d 20 7b 7d 0a 20 20 38 2e 32 20 20 20 7b 0a 20  } {}.  8.2   {. 
10b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
10c0: 74 31 28 63 31 20 0a 20 20 20 20 20 20 52 45 46  t1(c1 .      REF
10d0: 45 52 45 4e 43 45 53 20 74 31 20 44 45 46 41 55  ERENCES t1 DEFAU
10e0: 4c 54 20 31 32 33 20 43 48 45 43 4b 28 63 31 20  LT 123 CHECK(c1 
10f0: 49 53 20 27 74 65 6e 27 29 20 55 4e 49 51 55 45  IS 'ten') UNIQUE
1100: 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52   NOT NULL PRIMAR
1110: 59 20 4b 45 59 20 0a 20 20 20 20 29 3b 0a 20 20  Y KEY .    );.  
1120: 7d 20 7b 7d 0a 7d 0a 0a 23 20 2d 2d 20 73 79 6e  } {}.}..# -- syn
1130: 74 61 78 20 64 69 61 67 72 61 6d 20 74 61 62 6c  tax diagram tabl
1140: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 23 0a 64  e-constraint.#.d
1150: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
1160: 73 74 73 20 30 2e 33 2e 31 20 2d 72 65 70 61 69  sts 0.3.1 -repai
1170: 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74  r {.  drop_all_t
1180: 61 62 6c 65 73 20 0a 20 20 65 78 65 63 73 71 6c  ables .  execsql
1190: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
11a0: 74 32 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59  t2(x PRIMARY KEY
11b0: 29 20 7d 0a 7d 20 7b 0a 20 20 31 2e 31 20 20 20  ) }.} {.  1.1   
11c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
11d0: 28 63 31 2c 20 63 32 2c 20 50 52 49 4d 41 52 59  (c1, c2, PRIMARY
11e0: 20 4b 45 59 28 63 31 29 29 22 20 20 20 20 20 20   KEY(c1))"      
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1200: 20 20 20 7b 7d 0a 20 20 31 2e 32 20 20 20 22 43     {}.  1.2   "C
1210: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
1220: 31 2c 20 63 32 2c 20 50 52 49 4d 41 52 59 20 4b  1, c2, PRIMARY K
1230: 45 59 28 63 31 2c 20 63 32 29 29 22 20 20 20 20  EY(c1, c2))"    
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 7b 7d 0a 20 20 31 2e 33 20 20 20 22 43 52 45   {}.  1.3   "CRE
1260: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c  ATE TABLE t1(c1,
1270: 20 63 32 2c 20 50 52 49 4d 41 52 59 20 4b 45 59   c2, PRIMARY KEY
1280: 28 63 31 2c 20 63 32 29 20 4f 4e 20 43 4f 4e 46  (c1, c2) ON CONF
1290: 4c 49 43 54 20 49 47 4e 4f 52 45 29 22 20 20 7b  LICT IGNORE)"  {
12a0: 7d 0a 0a 20 20 32 2e 31 20 20 20 22 43 52 45 41  }..  2.1   "CREA
12b0: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20  TE TABLE t1(c1, 
12c0: 63 32 2c 20 55 4e 49 51 55 45 28 63 31 29 29 22  c2, UNIQUE(c1))"
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
12f0: 0a 20 20 32 2e 32 20 20 20 22 43 52 45 41 54 45  .  2.2   "CREATE
1300: 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20 63 32   TABLE t1(c1, c2
1310: 2c 20 55 4e 49 51 55 45 28 63 31 2c 20 63 32 29  , UNIQUE(c1, c2)
1320: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
1330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
1340: 20 32 2e 33 20 20 20 22 43 52 45 41 54 45 20 54   2.3   "CREATE T
1350: 41 42 4c 45 20 74 31 28 63 31 2c 20 63 32 2c 20  ABLE t1(c1, c2, 
1360: 55 4e 49 51 55 45 28 63 31 2c 20 63 32 29 20 4f  UNIQUE(c1, c2) O
1370: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1380: 45 29 22 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20  E)"       {}..  
1390: 33 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41  3.1   "CREATE TA
13a0: 42 4c 45 20 74 31 28 63 31 2c 20 63 32 2c 20 43  BLE t1(c1, c2, C
13b0: 48 45 43 4b 28 63 31 20 49 53 20 4e 4f 54 20 63  HECK(c1 IS NOT c
13c0: 32 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20  2))"            
13d0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 34           {}..  4
13e0: 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .1   "CREATE TAB
13f0: 4c 45 20 74 31 28 63 31 2c 20 63 32 2c 20 46 4f  LE t1(c1, c2, FO
1400: 52 45 49 47 4e 20 4b 45 59 28 63 31 29 20 52 45  REIGN KEY(c1) RE
1410: 46 45 52 45 4e 43 45 53 20 74 32 29 22 20 20 20  FERENCES t2)"   
1420: 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20          {}.}..# 
1430: 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  -- syntax diagra
1440: 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 23 0a 64  m column-def.#.d
1450: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
1460: 73 74 73 20 30 2e 34 2e 31 20 2d 72 65 70 61 69  sts 0.4.1 -repai
1470: 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74  r {.  drop_all_t
1480: 61 62 6c 65 73 20 0a 7d 20 7b 0a 20 20 31 20 20  ables .} {.  1  
1490: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
14a0: 20 74 31 28 0a 20 20 20 20 20 20 20 20 20 20 20   t1(.           
14b0: 63 6f 6c 31 2c 0a 20 20 20 20 20 20 20 20 20 20  col1,.          
14c0: 20 63 6f 6c 32 20 54 45 58 54 2c 0a 20 20 20 20   col2 TEXT,.    
14d0: 20 20 20 20 20 20 20 63 6f 6c 33 20 49 4e 54 45         col3 INTE
14e0: 47 45 52 20 55 4e 49 51 55 45 2c 0a 20 20 20 20  GER UNIQUE,.    
14f0: 20 20 20 20 20 20 20 63 6f 6c 34 20 56 41 52 43         col4 VARC
1500: 48 41 52 28 31 30 2c 20 31 30 29 20 50 52 49 4d  HAR(10, 10) PRIM
1510: 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20  ARY KEY,.       
1520: 20 20 20 20 22 6e 61 6d 65 20 77 69 74 68 20 73      "name with s
1530: 70 61 63 65 73 22 20 52 45 46 45 52 45 4e 43 45  paces" REFERENCE
1540: 53 20 74 31 0a 20 20 20 20 20 20 20 20 20 29 3b  S t1.         );
1550: 0a 20 20 20 20 20 20 20 20 7d 20 7b 7d 0a 7d 0a  .        } {}.}.
1560: 0a 23 20 2d 2d 20 73 79 6e 74 61 78 20 64 69 61  .# -- syntax dia
1570: 67 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c  gram create-tabl
1580: 65 2d 73 74 6d 74 0a 23 0a 64 6f 5f 63 72 65 61  e-stmt.#.do_crea
1590: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 30 2e  tetable_tests 0.
15a0: 35 2e 31 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  5.1 -repair {.  
15b0: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 20  drop_all_tables 
15c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45  .  execsql { CRE
15d0: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20  ATE TABLE t2(a, 
15e0: 62 2c 20 63 29 20 7d 0a 7d 20 7b 0a 20 20 31 20  b, c) }.} {.  1 
15f0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
1600: 45 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20  E t1(a, b, c)"  
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22 43 52    {}.  2     "CR
1640: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
1650: 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20  t1(a, b, c)"    
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1670: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
1680: 33 20 20 20 20 20 22 43 52 45 41 54 45 20 54 45  3     "CREATE TE
1690: 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 74 31  MPORARY TABLE t1
16a0: 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20  (a, b, c)"      
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c0: 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 20 22      {}.  4     "
16d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
16e0: 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28 61 2c  NOT EXISTS t1(a,
16f0: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
1710: 20 20 35 20 20 20 20 20 22 43 52 45 41 54 45 20    5     "CREATE 
1720: 54 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f  TEMP TABLE IF NO
1730: 54 20 45 58 49 53 54 53 20 74 31 28 61 2c 20 62  T EXISTS t1(a, b
1740: 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20 20  , c)"           
1750: 20 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 20        {}.  6    
1760: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
1770: 52 59 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  RY TABLE IF NOT 
1780: 45 58 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20  EXISTS t1(a, b, 
1790: 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b  c)"            {
17a0: 7d 0a 0a 20 20 37 20 20 20 20 20 22 43 52 45 41  }..  7     "CREA
17b0: 54 45 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31  TE TABLE main.t1
17c0: 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20  (a, b, c)"      
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 38 20           {}.  8 
17f0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
1800: 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 28 61   TABLE temp.t1(a
1810: 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20  , b, c)"        
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 7b 7d 0a 20 20 39 20 20 20 20 20 22 43 52    {}.  9     "CR
1840: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
1850: 41 42 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c 20  ABLE temp.t1(a, 
1860: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1870: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
1880: 31 30 20 20 20 20 22 43 52 45 41 54 45 20 54 41  10    "CREATE TA
1890: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
18a0: 53 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62 2c 20  S main.t1(a, b, 
18b0: 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  c)"             
18c0: 20 20 20 20 7b 7d 0a 20 20 31 31 20 20 20 20 22      {}.  11    "
18d0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
18e0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
18f0: 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63 29  temp.t1(a, b, c)
1900: 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  "            {}.
1910: 20 20 31 32 20 20 20 20 22 43 52 45 41 54 45 20    12    "CREATE 
1920: 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20  TEMPORARY TABLE 
1930: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65  IF NOT EXISTS te
1940: 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20  mp.t1(a, b, c)" 
1950: 20 20 20 20 20 20 7b 7d 0a 0a 20 20 31 33 20 20        {}..  13  
1960: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1970: 74 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  t1 AS SELECT * F
1980: 52 4f 4d 20 74 32 22 20 20 20 20 20 20 20 20 20  ROM t2"         
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a0: 7b 7d 0a 20 20 31 34 20 20 20 20 22 43 52 45 41  {}.  14    "CREA
19b0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
19c0: 20 41 53 20 53 45 4c 45 43 54 20 63 2c 20 62 2c   AS SELECT c, b,
19d0: 20 61 20 46 52 4f 4d 20 74 32 22 20 20 20 20 20   a FROM t2"     
19e0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 35           {}.  15
19f0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
1a00: 45 20 74 31 20 41 53 20 53 45 4c 45 43 54 20 63  E t1 AS SELECT c
1a10: 6f 75 6e 74 28 2a 29 2c 20 6d 61 78 28 62 29 2c  ount(*), max(b),
1a20: 20 6d 69 6e 28 61 29 20 46 52 4f 4d 20 74 32 22   min(a) FROM t2"
1a30: 20 20 7b 7d 0a 7d 0a 0a 23 0a 23 20 20 20 31 3a    {}.}..#.#   1:
1a40: 20 20 20 20 20 20 20 20 20 45 78 70 6c 69 63 69           Explici
1a50: 74 20 70 61 72 65 6e 74 2d 6b 65 79 20 63 6f 6c  t parent-key col
1a60: 75 6d 6e 73 2e 0a 23 20 20 20 32 3a 20 20 20 20  umns..#   2:    
1a70: 20 20 20 20 20 49 6d 70 6c 69 63 69 74 20 63 68       Implicit ch
1a80: 69 6c 64 2d 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e  ild-key columns.
1a90: 0a 23 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20  .#.#   1:       
1aa0: 20 20 4d 41 54 43 48 20 46 55 4c 4c 0a 23 20 20    MATCH FULL.#  
1ab0: 20 32 3a 20 20 20 20 20 20 20 20 20 4d 41 54 43   2:         MATC
1ac0: 48 20 50 41 52 54 49 41 4c 0a 23 20 20 20 33 3a  H PARTIAL.#   3:
1ad0: 20 20 20 20 20 20 20 20 20 4d 41 54 43 48 20 53           MATCH S
1ae0: 49 4d 50 4c 45 0a 23 20 20 20 34 3a 20 20 20 20  IMPLE.#   4:    
1af0: 20 20 20 20 20 4d 41 54 43 48 20 53 54 49 43 4b       MATCH STICK
1b00: 0a 23 20 20 20 35 3a 20 20 20 20 20 20 20 20 20  .#   5:         
1b10: 0a 23 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20  .#.#   1:       
1b20: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
1b30: 4e 55 4c 4c 0a 23 20 20 20 32 3a 20 20 20 20 20  NULL.#   2:     
1b40: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45      ON DELETE SE
1b50: 54 20 44 45 46 41 55 4c 54 0a 23 20 20 20 33 3a  T DEFAULT.#   3:
1b60: 20 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45           ON DELE
1b70: 54 45 20 43 41 53 43 41 44 45 0a 23 20 20 20 34  TE CASCADE.#   4
1b80: 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c  :         ON DEL
1b90: 45 54 45 20 52 45 53 54 52 49 43 54 0a 23 20 20  ETE RESTRICT.#  
1ba0: 20 35 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 44   5:         ON D
1bb0: 45 4c 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e 0a  ELETE NO ACTION.
1bc0: 23 20 20 20 36 3a 0a 23 0a 23 20 20 20 31 3a 20  #   6:.#.#   1: 
1bd0: 20 20 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54          ON UPDAT
1be0: 45 20 53 45 54 20 4e 55 4c 4c 0a 23 20 20 20 32  E SET NULL.#   2
1bf0: 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 55 50 44  :         ON UPD
1c00: 41 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 0a  ATE SET DEFAULT.
1c10: 23 20 20 20 33 3a 20 20 20 20 20 20 20 20 20 4f  #   3:         O
1c20: 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45  N UPDATE CASCADE
1c30: 0a 23 20 20 20 34 3a 20 20 20 20 20 20 20 20 20  .#   4:         
1c40: 4f 4e 20 55 50 44 41 54 45 20 52 45 53 54 52 49  ON UPDATE RESTRI
1c50: 43 54 0a 23 20 20 20 35 3a 20 20 20 20 20 20 20  CT.#   5:       
1c60: 20 20 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41    ON UPDATE NO A
1c70: 43 54 49 4f 4e 0a 23 20 20 20 36 3a 0a 23 0a 23  CTION.#   6:.#.#
1c80: 20 20 20 31 3a 20 20 20 20 20 20 20 20 20 4e 4f     1:         NO
1c90: 54 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49  T DEFERRABLE INI
1ca0: 54 49 41 4c 4c 59 20 44 45 46 45 52 52 45 44 0a  TIALLY DEFERRED.
1cb0: 23 20 20 20 32 3a 20 20 20 20 20 20 20 20 20 4e  #   2:         N
1cc0: 4f 54 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  OT DEFERRABLE IN
1cd0: 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54  ITIALLY IMMEDIAT
1ce0: 45 0a 23 20 20 20 33 3a 20 20 20 20 20 20 20 20  E.#   3:        
1cf0: 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a   NOT DEFERRABLE.
1d00: 23 20 20 20 34 3a 20 20 20 20 20 20 20 20 20 44  #   4:         D
1d10: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
1d20: 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 23 20 20  LLY DEFERRED.#  
1d30: 20 35 3a 20 20 20 20 20 20 20 20 20 44 45 46 45   5:         DEFE
1d40: 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59  RRABLE INITIALLY
1d50: 20 49 4d 4d 45 44 49 41 54 45 0a 23 20 20 20 36   IMMEDIATE.#   6
1d60: 3a 20 20 20 20 20 20 20 20 20 44 45 46 45 52 52  :         DEFERR
1d70: 41 42 4c 45 0a 23 20 20 20 37 3a 20 20 20 20 20  ABLE.#   7:     
1d80: 20 20 20 20 0a 23 0a 64 6f 5f 63 72 65 61 74 65      .#.do_create
1d90: 74 61 62 6c 65 5f 74 65 73 74 73 20 30 2e 36 2e  table_tests 0.6.
1da0: 31 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72  1 -repair {.  dr
1db0: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20  op_all_tables . 
1dc0: 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54   execsql { CREAT
1dd0: 45 20 54 41 42 4c 45 20 74 32 28 78 20 50 52 49  E TABLE t2(x PRI
1de0: 4d 41 52 59 20 4b 45 59 2c 20 79 29 20 7d 0a 20  MARY KEY, y) }. 
1df0: 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54   execsql { CREAT
1e00: 45 20 54 41 42 4c 45 20 74 33 28 69 2c 20 6a 2c  E TABLE t3(i, j,
1e10: 20 55 4e 49 51 55 45 28 69 2c 20 6a 29 20 29 20   UNIQUE(i, j) ) 
1e20: 7d 0a 7d 20 7b 0a 20 20 31 31 31 34 36 20 7b 20  }.} {.  11146 { 
1e30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1e40: 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45  a .    REFERENCE
1e50: 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 46 55  S t2(x) MATCH FU
1e60: 4c 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  LL .    ON DELET
1e70: 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50  E SET NULL ON UP
1e80: 44 41 54 45 20 52 45 53 54 52 49 43 54 20 44 45  DATE RESTRICT DE
1e90: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
1ea0: 0a 20 20 31 31 34 31 32 20 7b 20 43 52 45 41 54  .  11412 { CREAT
1eb0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
1ec0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28    REFERENCES t2(
1ed0: 78 29 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  x) .    ON DELET
1ee0: 45 20 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50  E RESTRICT ON UP
1ef0: 44 41 54 45 20 53 45 54 20 4e 55 4c 4c 20 4d 41  DATE SET NULL MA
1f00: 54 43 48 20 46 55 4c 4c 20 0a 20 20 20 20 4e 4f  TCH FULL .    NO
1f10: 54 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49  T DEFERRABLE INI
1f20: 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45  TIALLY IMMEDIATE
1f30: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 32 31 33 35  .  )} {}.  12135
1f40: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
1f50: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
1f60: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
1f70: 20 50 41 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e   PARTIAL .    ON
1f80: 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c   DELETE SET NULL
1f90: 20 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43 41   ON UPDATE CASCA
1fa0: 44 45 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e  DE DEFERRABLE IN
1fb0: 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54  ITIALLY IMMEDIAT
1fc0: 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 32 34 32  E.  )} {}.  1242
1fd0: 37 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  7 { CREATE TABLE
1fe0: 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52   t1(a .    REFER
1ff0: 45 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43  ENCES t2(x) MATC
2000: 48 20 50 41 52 54 49 41 4c 20 0a 20 20 20 20 4f  H PARTIAL .    O
2010: 4e 20 44 45 4c 45 54 45 20 52 45 53 54 52 49 43  N DELETE RESTRIC
2020: 54 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20  T ON UPDATE SET 
2030: 44 45 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d  DEFAULT .  )} {}
2040: 0a 20 20 31 32 34 34 36 20 7b 20 43 52 45 41 54  .  12446 { CREAT
2050: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2060: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28    REFERENCES t2(
2070: 78 29 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c  x) MATCH PARTIAL
2080: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
2090: 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41  RESTRICT ON UPDA
20a0: 54 45 20 52 45 53 54 52 49 43 54 20 44 45 46 45  TE RESTRICT DEFE
20b0: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
20c0: 20 31 32 35 32 32 20 7b 20 43 52 45 41 54 45 20   12522 { CREATE 
20d0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
20e0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29  REFERENCES t2(x)
20f0: 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a   MATCH PARTIAL .
2100: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 4e 4f      ON DELETE NO
2110: 20 41 43 54 49 4f 4e 20 4f 4e 20 55 50 44 41 54   ACTION ON UPDAT
2120: 45 20 53 45 54 20 44 45 46 41 55 4c 54 20 4e 4f  E SET DEFAULT NO
2130: 54 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49  T DEFERRABLE INI
2140: 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45  TIALLY IMMEDIATE
2150: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 31 33 33  .  )} {}.  13133
2160: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
2170: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2180: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
2190: 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20   SIMPLE .    ON 
21a0: 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20  DELETE SET NULL 
21b0: 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44  ON UPDATE CASCAD
21c0: 45 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45  E NOT DEFERRABLE
21d0: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 32 31 36  .  )} {}.  13216
21e0: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
21f0: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2200: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
2210: 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20   SIMPLE .    ON 
2220: 44 45 4c 45 54 45 20 53 45 54 20 44 45 46 41 55  DELETE SET DEFAU
2230: 4c 54 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54  LT ON UPDATE SET
2240: 20 4e 55 4c 4c 20 44 45 46 45 52 52 41 42 4c 45   NULL DEFERRABLE
2250: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 32 36 33  .  )} {}.  13263
2260: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
2270: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2280: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
2290: 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20   SIMPLE .    ON 
22a0: 44 45 4c 45 54 45 20 53 45 54 20 44 45 46 41 55  DELETE SET DEFAU
22b0: 4c 54 20 20 4e 4f 54 20 44 45 46 45 52 52 41 42  LT  NOT DEFERRAB
22c0: 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 34  LE.  )} {}.  134
22d0: 32 31 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  21 { CREATE TABL
22e0: 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45  E t1(a .    REFE
22f0: 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54  RENCES t2(x) MAT
2300: 43 48 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f  CH SIMPLE .    O
2310: 4e 20 44 45 4c 45 54 45 20 52 45 53 54 52 49 43  N DELETE RESTRIC
2320: 54 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20  T ON UPDATE SET 
2330: 44 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45  DEFAULT NOT DEFE
2340: 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59  RRABLE INITIALLY
2350: 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b   DEFERRED.  )} {
2360: 7d 0a 20 20 31 33 34 33 32 20 7b 20 43 52 45 41  }.  13432 { CREA
2370: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20  TE TABLE t1(a . 
2380: 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32     REFERENCES t2
2390: 28 78 29 20 4d 41 54 43 48 20 53 49 4d 50 4c 45  (x) MATCH SIMPLE
23a0: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
23b0: 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41  RESTRICT ON UPDA
23c0: 54 45 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44  TE CASCADE NOT D
23d0: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
23e0: 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20  LLY IMMEDIATE.  
23f0: 29 7d 20 7b 7d 0a 20 20 31 33 35 32 33 20 7b 20  )} {}.  13523 { 
2400: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2410: 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45  a .    REFERENCE
2420: 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53 49  S t2(x) MATCH SI
2430: 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c  MPLE .    ON DEL
2440: 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 4f 4e  ETE NO ACTION ON
2450: 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46 41   UPDATE SET DEFA
2460: 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52 41 42  ULT NOT DEFERRAB
2470: 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 34 33  LE.  )} {}.  143
2480: 33 36 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  36 { CREATE TABL
2490: 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45  E t1(a .    REFE
24a0: 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54  RENCES t2(x) MAT
24b0: 43 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e  CH STICK .    ON
24c0: 20 44 45 4c 45 54 45 20 43 41 53 43 41 44 45 20   DELETE CASCADE 
24d0: 4f 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44  ON UPDATE CASCAD
24e0: 45 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  E DEFERRABLE.  )
24f0: 7d 20 7b 7d 0a 20 20 31 34 36 31 31 20 7b 20 43  } {}.  14611 { C
2500: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2510: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2520: 20 74 32 28 78 29 20 4d 41 54 43 48 20 53 54 49   t2(x) MATCH STI
2530: 43 4b 20 0a 20 20 20 20 4f 4e 20 55 50 44 41 54  CK .    ON UPDAT
2540: 45 20 53 45 54 20 4e 55 4c 4c 20 4e 4f 54 20 44  E SET NULL NOT D
2550: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
2560: 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 20 20 29  LLY DEFERRED.  )
2570: 7d 20 7b 7d 0a 20 20 31 35 31 35 35 20 7b 20 43  } {}.  15155 { C
2580: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2590: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
25a0: 20 74 32 28 78 29 0a 20 20 20 20 4f 4e 20 44 45   t2(x).    ON DE
25b0: 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e  LETE SET NULL ON
25c0: 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f   UPDATE NO ACTIO
25d0: 4e 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49  N DEFERRABLE INI
25e0: 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45  TIALLY IMMEDIATE
25f0: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 35 34 35 33  .  )} {}.  15453
2600: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
2610: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2620: 4e 43 45 53 20 74 32 28 78 29 20 4f 4e 20 44 45  NCES t2(x) ON DE
2630: 4c 45 54 45 20 52 45 53 54 52 49 43 54 20 4f 4e  LETE RESTRICT ON
2640: 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f   UPDATE NO ACTIO
2650: 4e 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45  N NOT DEFERRABLE
2660: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 35 36 36 31  .  )} {}.  15661
2670: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
2680: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2690: 4e 43 45 53 20 74 32 28 78 29 20 4e 4f 54 20 44  NCES t2(x) NOT D
26a0: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
26b0: 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 20 20 29  LLY DEFERRED.  )
26c0: 7d 20 7b 7d 0a 20 20 32 31 31 31 35 20 7b 20 43  } {}.  21115 { C
26d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
26e0: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
26f0: 20 74 32 20 4d 41 54 43 48 20 46 55 4c 4c 20 0a   t2 MATCH FULL .
2700: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45      ON DELETE SE
2710: 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45  T NULL ON UPDATE
2720: 20 53 45 54 20 4e 55 4c 4c 20 44 45 46 45 52 52   SET NULL DEFERR
2730: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49  ABLE INITIALLY I
2740: 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d  MMEDIATE.  )} {}
2750: 0a 20 20 32 31 31 32 33 20 7b 20 43 52 45 41 54  .  21123 { CREAT
2760: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2770: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2780: 4d 41 54 43 48 20 46 55 4c 4c 20 0a 20 20 20 20  MATCH FULL .    
2790: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55  ON DELETE SET NU
27a0: 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54  LL ON UPDATE SET
27b0: 20 44 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46   DEFAULT NOT DEF
27c0: 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a  ERRABLE.  )} {}.
27d0: 20 20 32 31 32 31 37 20 7b 20 43 52 45 41 54 45    21217 { CREATE
27e0: 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20   TABLE t1(a .   
27f0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d   REFERENCES t2 M
2800: 41 54 43 48 20 46 55 4c 4c 20 4f 4e 20 44 45 4c  ATCH FULL ON DEL
2810: 45 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20  ETE SET DEFAULT 
2820: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 4e 55  ON UPDATE SET NU
2830: 4c 4c 20 0a 20 20 29 7d 20 7b 7d 0a 20 20 32 31  LL .  )} {}.  21
2840: 33 36 32 20 7b 20 43 52 45 41 54 45 20 54 41 42  362 { CREATE TAB
2850: 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46  LE t1(a .    REF
2860: 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43 48  ERENCES t2 MATCH
2870: 20 46 55 4c 4c 20 0a 20 20 20 20 4f 4e 20 44 45   FULL .    ON DE
2880: 4c 45 54 45 20 43 41 53 43 41 44 45 20 4e 4f 54  LETE CASCADE NOT
2890: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
28a0: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a  IALLY IMMEDIATE.
28b0: 20 20 29 7d 20 7b 7d 0a 20 20 32 32 31 34 33 20    )} {}.  22143 
28c0: 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  { CREATE TABLE t
28d0: 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e  1(a .    REFEREN
28e0: 43 45 53 20 74 32 20 4d 41 54 43 48 20 50 41 52  CES t2 MATCH PAR
28f0: 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c  TIAL .    ON DEL
2900: 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20  ETE SET NULL ON 
2910: 55 50 44 41 54 45 20 52 45 53 54 52 49 43 54 20  UPDATE RESTRICT 
2920: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
2930: 20 29 7d 20 7b 7d 0a 20 20 32 32 31 35 36 20 7b   )} {}.  22156 {
2940: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2950: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2960: 45 53 20 74 32 20 4d 41 54 43 48 20 50 41 52 54  ES t2 MATCH PART
2970: 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  IAL .    ON DELE
2980: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55  TE SET NULL ON U
2990: 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20  PDATE NO ACTION 
29a0: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
29b0: 7b 7d 0a 20 20 32 32 33 32 37 20 7b 20 43 52 45  {}.  22327 { CRE
29c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
29d0: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
29e0: 32 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20  2 MATCH PARTIAL 
29f0: 4f 4e 20 44 45 4c 45 54 45 20 43 41 53 43 41 44  ON DELETE CASCAD
2a00: 45 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20  E ON UPDATE SET 
2a10: 44 45 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d  DEFAULT .  )} {}
2a20: 0a 20 20 32 32 36 36 33 20 7b 20 43 52 45 41 54  .  22663 { CREAT
2a30: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2a40: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2a50: 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 4e 4f  MATCH PARTIAL NO
2a60: 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  T DEFERRABLE.  )
2a70: 7d 20 7b 7d 0a 20 20 32 33 32 33 36 20 7b 20 43  } {}.  23236 { C
2a80: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2a90: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2aa0: 20 74 32 20 4d 41 54 43 48 20 53 49 4d 50 4c 45   t2 MATCH SIMPLE
2ab0: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
2ac0: 53 45 54 20 44 45 46 41 55 4c 54 20 4f 4e 20 55  SET DEFAULT ON U
2ad0: 50 44 41 54 45 20 43 41 53 43 41 44 45 20 44 45  PDATE CASCADE DE
2ae0: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
2af0: 0a 20 20 32 34 31 35 35 20 7b 20 43 52 45 41 54  .  24155 { CREAT
2b00: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2b10: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2b20: 4d 41 54 43 48 20 53 54 49 43 4b 20 0a 20 20 20  MATCH STICK .   
2b30: 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e   ON DELETE SET N
2b40: 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 4e 4f  ULL ON UPDATE NO
2b50: 20 41 43 54 49 4f 4e 20 44 45 46 45 52 52 41 42   ACTION DEFERRAB
2b60: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
2b70: 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20  EDIATE.  )} {}. 
2b80: 20 32 34 35 32 32 20 7b 20 43 52 45 41 54 45 20   24522 { CREATE 
2b90: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2ba0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2bb0: 54 43 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f  TCH STICK .    O
2bc0: 4e 20 44 45 4c 45 54 45 20 4e 4f 20 41 43 54 49  N DELETE NO ACTI
2bd0: 4f 4e 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54  ON ON UPDATE SET
2be0: 20 44 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46   DEFAULT NOT DEF
2bf0: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
2c00: 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d  Y IMMEDIATE.  )}
2c10: 20 7b 7d 0a 20 20 32 34 36 32 35 20 7b 20 43 52   {}.  24625 { CR
2c20: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2c30: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
2c40: 74 32 20 4d 41 54 43 48 20 53 54 49 43 4b 20 0a  t2 MATCH STICK .
2c50: 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20 53 45      ON UPDATE SE
2c60: 54 20 44 45 46 41 55 4c 54 20 44 45 46 45 52 52  T DEFAULT DEFERR
2c70: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49  ABLE INITIALLY I
2c80: 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d  MMEDIATE.  )} {}
2c90: 0a 20 20 32 35 34 35 34 20 7b 20 43 52 45 41 54  .  25454 { CREAT
2ca0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2cb0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2cc0: 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52  .    ON DELETE R
2cd0: 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54  ESTRICT ON UPDAT
2ce0: 45 20 4e 4f 20 41 43 54 49 4f 4e 20 44 45 46 45  E NO ACTION DEFE
2cf0: 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59  RRABLE INITIALLY
2d00: 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b   DEFERRED.  )} {
2d10: 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }.}..#----------
2d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2d60: 23 20 54 65 73 74 20 63 61 73 65 73 20 65 5f 63  # Test cases e_c
2d70: 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 2a 20 2d  reatetable-1.* -
2d80: 20 74 65 73 74 20 73 74 61 74 65 6d 65 6e 74 73   test statements
2d90: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 61 62 6c   related to tabl
2da0: 65 20 61 6e 64 0a 23 20 64 61 74 61 62 61 73 65  e and.# database
2db0: 20 6e 61 6d 65 73 2c 20 74 68 65 20 54 45 4d 50   names, the TEMP
2dc0: 20 61 6e 64 20 54 45 4d 50 4f 52 41 52 59 20 6b   and TEMPORARY k
2dd0: 65 79 77 6f 72 64 73 2c 20 61 6e 64 20 74 68 65  eywords, and the
2de0: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 0a 23   IF NOT EXISTS.#
2df0: 20 63 6c 61 75 73 65 2e 0a 23 0a 64 72 6f 70 5f   clause..#.drop_
2e00: 61 6c 6c 5f 74 61 62 6c 65 73 0a 66 6f 72 63 65  all_tables.force
2e10: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 32 20  delete test.db2 
2e20: 74 65 73 74 2e 64 62 33 0a 0a 64 6f 5f 65 78 65  test.db3..do_exe
2e30: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
2e40: 74 65 74 61 62 6c 65 2d 31 2e 30 20 7b 0a 20 20  tetable-1.0 {.  
2e50: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 32  ATTACH 'test.db2
2e60: 27 20 41 53 20 61 75 78 61 3b 0a 20 20 41 54 54  ' AS auxa;.  ATT
2e70: 41 43 48 20 27 74 65 73 74 2e 64 62 33 27 20 41  ACH 'test.db3' A
2e80: 53 20 61 75 78 62 3b 0a 7d 20 7b 7d 0a 0a 23 20  S auxb;.} {}..# 
2e90: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
2ea0: 37 38 39 39 2d 30 34 35 35 34 20 54 61 62 6c 65  7899-04554 Table
2eb0: 20 6e 61 6d 65 73 20 74 68 61 74 20 62 65 67 69   names that begi
2ec0: 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22  n with "sqlite_"
2ed0: 20 61 72 65 0a 23 20 72 65 73 65 72 76 65 64 20   are.# reserved 
2ee0: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65  for internal use
2ef0: 2e 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  . It is an error
2f00: 20 74 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63   to attempt to c
2f10: 72 65 61 74 65 20 61 20 74 61 62 6c 65 0a 23 20  reate a table.# 
2f20: 77 69 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74  with a name that
2f30: 20 73 74 61 72 74 73 20 77 69 74 68 20 22 73 71   starts with "sq
2f40: 6c 69 74 65 5f 22 2e 0a 23 0a 64 6f 5f 63 72 65  lite_"..#.do_cre
2f50: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
2f60: 2e 31 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20  .1.1 -error {.  
2f70: 6f 62 6a 65 63 74 20 6e 61 6d 65 20 72 65 73 65  object name rese
2f80: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
2f90: 6c 20 75 73 65 3a 20 25 73 0a 7d 20 7b 0a 20 20  l use: %s.} {.  
2fa0: 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  1    "CREATE TAB
2fb0: 4c 45 20 73 71 6c 69 74 65 5f 61 62 63 28 61 2c  LE sqlite_abc(a,
2fc0: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 73   b, c)"        s
2fd0: 71 6c 69 74 65 5f 61 62 63 0a 20 20 32 20 20 20  qlite_abc.  2   
2fe0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
2ff0: 65 6d 70 2e 73 71 6c 69 74 65 5f 68 65 6c 6c 6f  emp.sqlite_hello
3000: 77 6f 72 6c 64 28 78 29 22 20 20 73 71 6c 69 74  world(x)"  sqlit
3010: 65 5f 68 65 6c 6c 6f 77 6f 72 6c 64 0a 20 20 33  e_helloworld.  3
3020: 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c      {CREATE TABL
3030: 45 20 61 75 78 61 2e 22 73 71 6c 69 74 65 5f 5f  E auxa."sqlite__
3040: 22 28 78 2c 20 79 29 7d 20 20 20 20 20 20 73 71  "(x, y)}      sq
3050: 6c 69 74 65 5f 5f 0a 20 20 34 20 20 20 20 7b 43  lite__.  4    {C
3060: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 62  REATE TABLE auxb
3070: 2e 22 73 71 6c 69 74 65 5f 22 28 7a 29 7d 20 20  ."sqlite_"(z)}  
3080: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 5f 0a          sqlite_.
3090: 20 20 35 20 20 20 20 7b 43 52 45 41 54 45 20 54    5    {CREATE T
30a0: 41 42 4c 45 20 22 53 51 4c 49 54 45 5f 54 42 4c  ABLE "SQLITE_TBL
30b0: 22 28 7a 29 7d 20 20 20 20 20 20 20 20 20 20 20  "(z)}           
30c0: 20 53 51 4c 49 54 45 5f 54 42 4c 0a 7d 0a 64 6f   SQLITE_TBL.}.do
30d0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
30e0: 74 73 20 31 2e 31 2e 32 20 7b 0a 20 20 31 20 20  ts 1.1.2 {.  1  
30f0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3100: 73 71 6c 69 74 5f 61 62 63 28 61 2c 20 62 2c 20  sqlit_abc(a, b, 
3110: 63 29 22 20 20 20 20 20 20 20 20 20 7b 7d 0a 20  c)"         {}. 
3120: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
3130: 42 4c 45 20 74 65 6d 70 2e 73 71 6c 69 74 65 68  BLE temp.sqliteh
3140: 65 6c 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20 20  elloworld(x)"   
3150: 7b 7d 0a 20 20 33 20 20 20 20 7b 43 52 45 41 54  {}.  3    {CREAT
3160: 45 20 54 41 42 4c 45 20 61 75 78 61 2e 22 73 71  E TABLE auxa."sq
3170: 6c 69 74 65 22 28 78 2c 20 79 29 7d 20 20 20 20  lite"(x, y)}    
3180: 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 7b 43      {}.  4    {C
3190: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 62  REATE TABLE auxb
31a0: 2e 22 73 71 6c 69 74 65 2d 22 28 7a 29 7d 20 20  ."sqlite-"(z)}  
31b0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20          {}.  5  
31c0: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
31d0: 22 53 51 4c 49 54 45 2d 54 42 4c 22 28 7a 29 7d  "SQLITE-TBL"(z)}
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d              {}.}
31f0: 0a 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  ...# EVIDENCE-OF
3200: 3a 20 52 2d 31 30 31 39 35 2d 33 31 30 32 33 20  : R-10195-31023 
3210: 49 66 20 61 20 3c 64 61 74 61 62 61 73 65 2d 6e  If a <database-n
3220: 61 6d 65 3e 20 69 73 20 73 70 65 63 69 66 69 65  ame> is specifie
3230: 64 2c 20 69 74 0a 23 20 6d 75 73 74 20 62 65 20  d, it.# must be 
3240: 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 22  either "main", "
3250: 74 65 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61  temp", or the na
3260: 6d 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65  me of an attache
3270: 64 20 64 61 74 61 62 61 73 65 2e 0a 23 0a 23 20  d database..#.# 
3280: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
3290: 39 38 32 32 2d 30 37 38 32 32 20 49 6e 20 74 68  9822-07822 In th
32a0: 69 73 20 63 61 73 65 20 74 68 65 20 6e 65 77 20  is case the new 
32b0: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
32c0: 20 69 6e 0a 23 20 74 68 65 20 6e 61 6d 65 64 20   in.# the named 
32d0: 64 61 74 61 62 61 73 65 2e 0a 23 0a 23 20 20 20  database..#.#   
32e0: 54 65 73 74 20 63 61 73 65 73 20 31 2e 32 2e 2a  Test cases 1.2.*
32f0: 20 74 65 73 74 20 74 68 65 20 66 69 72 73 74 20   test the first 
3300: 6f 66 20 74 68 65 20 74 77 6f 20 72 65 71 75 69  of the two requi
3310: 72 65 6d 65 6e 74 73 20 61 62 6f 76 65 2e 20 54  rements above. T
3320: 68 65 0a 23 20 20 20 73 65 63 6f 6e 64 20 69 73  he.#   second is
3330: 20 76 65 72 69 66 69 65 64 20 62 79 20 63 61 73   verified by cas
3340: 65 73 20 31 2e 33 2e 2a 2e 0a 23 0a 64 6f 5f 63  es 1.3.*..#.do_c
3350: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
3360: 20 31 2e 32 2e 31 20 2d 65 72 72 6f 72 20 7b 0a   1.2.1 -error {.
3370: 20 20 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61    unknown databa
3380: 73 65 20 25 73 0a 7d 20 7b 0a 20 20 31 20 20 20  se %s.} {.  1   
3390: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 67   "CREATE TABLE g
33a0: 65 6f 72 67 65 2e 74 31 28 61 2c 20 62 29 22 20  eorge.t1(a, b)" 
33b0: 20 20 20 20 20 20 20 20 20 20 20 67 65 6f 72 67             georg
33c0: 65 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45  e.  2    "CREATE
33d0: 20 54 41 42 4c 45 20 5f 2e 74 31 28 61 2c 20 62   TABLE _.t1(a, b
33e0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
33f0: 20 20 20 5f 0a 7d 0a 64 6f 5f 63 72 65 61 74 65     _.}.do_create
3400: 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 32 2e  table_tests 1.2.
3410: 32 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41  2 {.  1    "CREA
3420: 54 45 20 54 41 42 4c 45 20 6d 61 69 6e 2e 61 62  TE TABLE main.ab
3430: 63 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20  c(a, b, c)"     
3440: 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22       {}.  2    "
3450: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d  CREATE TABLE tem
3460: 70 2e 68 65 6c 6c 6f 77 6f 72 6c 64 28 78 29 22  p.helloworld(x)"
3470: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20           {}.  3 
3480: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
3490: 20 61 75 78 61 2e 22 74 20 31 22 28 78 2c 20 79   auxa."t 1"(x, y
34a0: 29 7d 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  )}           {}.
34b0: 20 20 34 20 20 20 20 7b 43 52 45 41 54 45 20 54    4    {CREATE T
34c0: 41 42 4c 45 20 61 75 78 62 2e 78 79 7a 28 7a 29  ABLE auxb.xyz(z)
34d0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
34e0: 20 7b 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74   {}.}.drop_all_t
34f0: 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74  ables.do_createt
3500: 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 33 20 2d  able_tests 1.3 -
3510: 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e 73  tclquery {.  uns
3520: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58  et -nocomplain X
3530: 0a 20 20 61 72 72 61 79 20 73 65 74 20 58 20 5b  .  array set X [
3540: 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c 69  table_list].  li
3550: 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58 28 74  st $X(main) $X(t
3560: 65 6d 70 29 20 24 58 28 61 75 78 61 29 20 24 58  emp) $X(auxa) $X
3570: 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20 20  (auxb).} {.  1  
3580: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3590: 6d 61 69 6e 2e 61 62 63 28 61 2c 20 62 2c 20 63  main.abc(a, b, c
35a0: 29 22 20 20 7b 61 62 63 20 7b 7d 20 7b 7d 20 7b  )"  {abc {} {} {
35b0: 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54  }}.  2    "CREAT
35c0: 45 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28  E TABLE main.t1(
35d0: 61 2c 20 62 2c 20 63 29 22 20 20 20 7b 7b 61 62  a, b, c)"   {{ab
35e0: 63 20 74 31 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  c t1} {} {} {}}.
35f0: 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54    3    "CREATE T
3600: 41 42 4c 45 20 74 65 6d 70 2e 74 6d 70 28 61 2c  ABLE temp.tmp(a,
3610: 20 62 2c 20 63 29 22 20 20 7b 7b 61 62 63 20 74   b, c)"  {{abc t
3620: 31 7d 20 74 6d 70 20 7b 7d 20 7b 7d 7d 0a 20 20  1} tmp {} {}}.  
3630: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  4    "CREATE TAB
3640: 4c 45 20 61 75 78 62 2e 74 62 6c 28 78 2c 20 79  LE auxb.tbl(x, y
3650: 29 22 20 20 20 20 20 7b 7b 61 62 63 20 74 31 7d  )"     {{abc t1}
3660: 20 74 6d 70 20 7b 7d 20 74 62 6c 7d 0a 20 20 35   tmp {} tbl}.  5
3670: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
3680: 45 20 61 75 78 62 2e 74 31 28 6b 2c 20 76 29 22  E auxb.t1(k, v)"
3690: 20 20 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20        {{abc t1} 
36a0: 74 6d 70 20 7b 7d 20 7b 74 31 20 74 62 6c 7d 7d  tmp {} {t1 tbl}}
36b0: 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20  .  6    "CREATE 
36c0: 54 41 42 4c 45 20 61 75 78 61 2e 6e 65 78 74 28  TABLE auxa.next(
36d0: 63 2c 20 64 29 22 20 20 20 20 7b 7b 61 62 63 20  c, d)"    {{abc 
36e0: 74 31 7d 20 74 6d 70 20 6e 65 78 74 20 7b 74 31  t1} tmp next {t1
36f0: 20 74 62 6c 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44   tbl}}.}..# EVID
3700: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 38 38 39 35  ENCE-OF: R-18895
3710: 2d 32 37 33 36 35 20 49 66 20 74 68 65 20 22 54  -27365 If the "T
3720: 45 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41  EMP" or "TEMPORA
3730: 52 59 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75  RY" keyword occu
3740: 72 73 0a 23 20 62 65 74 77 65 65 6e 20 74 68 65  rs.# between the
3750: 20 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54   "CREATE" and "T
3760: 41 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e  ABLE" then the n
3770: 65 77 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  ew table is crea
3780: 74 65 64 20 69 6e 20 74 68 65 0a 23 20 74 65 6d  ted in the.# tem
3790: 70 20 64 61 74 61 62 61 73 65 2e 0a 23 0a 64 72  p database..#.dr
37a0: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
37b0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
37c0: 74 73 20 31 2e 34 20 2d 74 63 6c 71 75 65 72 79  ts 1.4 -tclquery
37d0: 20 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f   {.  unset -noco
37e0: 6d 70 6c 61 69 6e 20 58 0a 20 20 61 72 72 61 79  mplain X.  array
37f0: 20 73 65 74 20 58 20 5b 74 61 62 6c 65 5f 6c 69   set X [table_li
3800: 73 74 5d 0a 20 20 6c 69 73 74 20 24 58 28 6d 61  st].  list $X(ma
3810: 69 6e 29 20 24 58 28 74 65 6d 70 29 20 24 58 28  in) $X(temp) $X(
3820: 61 75 78 61 29 20 24 58 28 61 75 78 62 29 0a 7d  auxa) $X(auxb).}
3830: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
3840: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28  E TEMP TABLE t1(
3850: 61 2c 20 62 29 22 20 20 20 20 20 20 7b 7b 7d 20  a, b)"      {{} 
3860: 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20  t1 {} {}}.  2   
3870: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
3880: 52 59 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62  RY TABLE t2(a, b
3890: 29 22 20 7b 7b 7d 20 7b 74 31 20 74 32 7d 20 7b  )" {{} {t1 t2} {
38a0: 7d 20 7b 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  } {}}.}..# EVIDE
38b0: 4e 43 45 2d 4f 46 3a 20 52 2d 34 39 34 33 39 2d  NCE-OF: R-49439-
38c0: 34 37 35 36 31 20 49 74 20 69 73 20 61 6e 20 65  47561 It is an e
38d0: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
38e0: 62 6f 74 68 20 61 0a 23 20 3c 64 61 74 61 62 61  both a.# <databa
38f0: 73 65 2d 6e 61 6d 65 3e 20 61 6e 64 20 74 68 65  se-name> and the
3900: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
3910: 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65  RY keyword, unle
3920: 73 73 20 74 68 65 0a 23 20 3c 64 61 74 61 62 61  ss the.# <databa
3930: 73 65 2d 6e 61 6d 65 3e 20 69 73 20 22 74 65 6d  se-name> is "tem
3940: 70 22 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  p"..#.drop_all_t
3950: 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74  ables.do_createt
3960: 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e 31  able_tests 1.5.1
3970: 20 2d 65 72 72 6f 72 20 7b 0a 20 20 74 65 6d 70   -error {.  temp
3980: 6f 72 61 72 79 20 74 61 62 6c 65 20 6e 61 6d 65  orary table name
3990: 20 6d 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69   must be unquali
39a0: 66 69 65 64 0a 7d 20 7b 0a 20 20 31 20 20 20 20  fied.} {.  1    
39b0: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
39c0: 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62 29  LE main.t1(a, b)
39d0: 22 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20  "        {}.  2 
39e0: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f     "CREATE TEMPO
39f0: 52 41 52 59 20 54 41 42 4c 45 20 61 75 78 61 2e  RARY TABLE auxa.
3a00: 74 32 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20  t2(a, b)"   {}. 
3a10: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 45   3    "CREATE TE
3a20: 4d 50 20 54 41 42 4c 45 20 61 75 78 62 2e 74 33  MP TABLE auxb.t3
3a30: 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b  (a, b)"        {
3a40: 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  }.  4    "CREATE
3a50: 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
3a60: 20 6d 61 69 6e 2e 78 78 78 28 78 29 22 20 20 20   main.xxx(x)"   
3a70: 20 20 7b 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f    {}.}.drop_all_
3a80: 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65  tables.do_create
3a90: 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e  table_tests 1.5.
3aa0: 32 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20  2 -tclquery {.  
3ab0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
3ac0: 6e 20 58 0a 20 20 61 72 72 61 79 20 73 65 74 20  n X.  array set 
3ad0: 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20  X [table_list]. 
3ae0: 20 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20 24   list $X(main) $
3af0: 58 28 74 65 6d 70 29 20 24 58 28 61 75 78 61 29  X(temp) $X(auxa)
3b00: 20 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20   $X(auxb).} {.  
3b10: 31 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d  1    "CREATE TEM
3b20: 50 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 28  P TABLE temp.t1(
3b30: 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7b  a, b)"        {{
3b40: 7d 20 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20  } t1 {} {}}.  2 
3b50: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f     "CREATE TEMPO
3b60: 52 41 52 59 20 54 41 42 4c 45 20 74 65 6d 70 2e  RARY TABLE temp.
3b70: 74 32 28 61 2c 20 62 29 22 20 20 20 7b 7b 7d 20  t2(a, b)"   {{} 
3b80: 7b 74 31 20 74 32 7d 20 7b 7d 20 7b 7d 7d 0a 20  {t1 t2} {} {}}. 
3b90: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 45   3    "CREATE TE
3ba0: 4d 50 20 54 41 42 4c 45 20 54 45 4d 50 2e 74 33  MP TABLE TEMP.t3
3bb0: 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b  (a, b)"        {
3bc0: 7b 7d 20 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d  {} {t1 t2 t3} {}
3bd0: 20 7b 7d 7d 0a 20 20 34 20 20 20 20 22 43 52 45   {}}.  4    "CRE
3be0: 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
3bf0: 42 4c 45 20 54 45 4d 50 2e 78 78 78 28 78 29 22  BLE TEMP.xxx(x)"
3c00: 20 20 20 20 20 7b 7b 7d 20 7b 74 31 20 74 32 20       {{} {t1 t2 
3c10: 74 33 20 78 78 78 7d 20 7b 7d 20 7b 7d 7d 0a 7d  t3 xxx} {} {}}.}
3c20: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
3c30: 20 52 2d 30 30 39 31 37 2d 30 39 33 39 33 20 49   R-00917-09393 I
3c40: 66 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  f no database na
3c50: 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20  me is specified 
3c60: 61 6e 64 20 74 68 65 0a 23 20 54 45 4d 50 20 6b  and the.# TEMP k
3c70: 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72  eyword is not pr
3c80: 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74  esent then the t
3c90: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
3ca0: 69 6e 20 74 68 65 20 6d 61 69 6e 0a 23 20 64 61  in the main.# da
3cb0: 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61  tabase..#.drop_a
3cc0: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
3cd0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
3ce0: 2e 36 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20  .6 -tclquery {. 
3cf0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
3d00: 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73 65 74  in X.  array set
3d10: 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a   X [table_list].
3d20: 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20    list $X(main) 
3d30: 24 58 28 74 65 6d 70 29 20 24 58 28 61 75 78 61  $X(temp) $X(auxa
3d40: 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20  ) $X(auxb).} {. 
3d50: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
3d60: 42 4c 45 20 74 31 28 61 2c 20 62 29 22 20 20 20  BLE t1(a, b)"   
3d70: 7b 74 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20  {t1 {} {} {}}.  
3d80: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
3d90: 4c 45 20 74 32 28 61 2c 20 62 29 22 20 20 20 7b  LE t2(a, b)"   {
3da0: 7b 74 31 20 74 32 7d 20 7b 7d 20 7b 7d 20 7b 7d  {t1 t2} {} {} {}
3db0: 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45  }.  3    "CREATE
3dc0: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 29 22   TABLE t3(a, b)"
3dd0: 20 20 20 7b 7b 74 31 20 74 32 20 74 33 7d 20 7b     {{t1 t2 t3} {
3de0: 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20 20  } {} {}}.  4    
3df0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 78  "CREATE TABLE xx
3e00: 78 28 78 29 22 20 20 20 20 20 7b 7b 74 31 20 74  x(x)"     {{t1 t
3e10: 32 20 74 33 20 78 78 78 7d 20 7b 7d 20 7b 7d 20  2 t3 xxx} {} {} 
3e20: 7b 7d 7d 0a 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f  {}}.}..drop_all_
3e30: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
3e40: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
3e50: 61 62 6c 65 2d 31 2e 37 2e 30 20 7b 0a 20 20 43  able-1.7.0 {.  C
3e60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
3e70: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
3e80: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29  NDEX i1 ON t1(x)
3e90: 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20  ;.  CREATE VIEW 
3ea0: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20   v1 AS SELECT * 
3eb0: 46 52 4f 4d 20 74 31 3b 0a 0a 20 20 43 52 45 41  FROM t1;..  CREA
3ec0: 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62  TE TABLE auxa.tb
3ed0: 6c 31 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41  l1(x, y);.  CREA
3ee0: 54 45 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64  TE INDEX auxa.id
3ef0: 78 31 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20  x1 ON tbl1(x);. 
3f00: 20 43 52 45 41 54 45 20 56 49 45 57 20 61 75 78   CREATE VIEW aux
3f10: 61 2e 76 69 65 77 31 20 41 53 20 53 45 4c 45 43  a.view1 AS SELEC
3f20: 54 20 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d  T * FROM tbl1;.}
3f30: 20 7b 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d   {}..# EVIDENCE-
3f40: 4f 46 3a 20 52 2d 30 31 32 33 32 2d 35 34 38 33  OF: R-01232-5483
3f50: 38 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20  8 It is usually 
3f60: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
3f70: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 0a 23 20  mpt to create.# 
3f80: 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61  a new table in a
3f90: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 61   database that a
3fa0: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
3fb0: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
3fc0: 72 20 76 69 65 77 0a 23 20 6f 66 20 74 68 65 20  r view.# of the 
3fd0: 73 61 6d 65 20 6e 61 6d 65 2e 0a 23 0a 23 20 20  same name..#.#  
3fe0: 20 54 65 73 74 20 63 61 73 65 73 20 31 2e 37 2e   Test cases 1.7.
3ff0: 31 2e 2a 20 76 65 72 69 66 79 20 74 68 61 74 20  1.* verify that 
4000: 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65  creating a table
4010: 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 77   in a database w
4020: 69 74 68 20 61 0a 23 20 20 20 74 61 62 6c 65 2f  ith a.#   table/
4030: 69 6e 64 65 78 2f 76 69 65 77 20 6f 66 20 74 68  index/view of th
4040: 65 20 73 61 6d 65 20 6e 61 6d 65 20 64 6f 65 73  e same name does
4050: 20 66 61 69 6c 2e 20 31 2e 37 2e 32 2e 2a 20 74   fail. 1.7.2.* t
4060: 65 73 74 73 20 74 68 61 74 20 63 72 65 61 74 69  ests that creati
4070: 6e 67 0a 23 20 20 20 61 20 74 61 62 6c 65 20 77  ng.#   a table w
4080: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
4090: 65 20 61 73 20 61 20 74 61 62 6c 65 2f 69 6e 64  e as a table/ind
40a0: 65 78 2f 76 69 65 77 20 69 6e 20 61 20 64 69 66  ex/view in a dif
40b0: 66 65 72 65 6e 74 20 64 61 74 61 62 61 73 65 0a  ferent database.
40c0: 23 20 20 20 69 73 20 4f 6b 2e 0a 23 0a 64 6f 5f  #   is Ok..#.do_
40d0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
40e0: 73 20 31 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b  s 1.7.1 -error {
40f0: 20 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22   %s } {.  1    "
4100: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4110: 61 2c 20 62 29 22 20 20 20 7b 7b 74 61 62 6c 65  a, b)"   {{table
4120: 20 74 31 20 61 6c 72 65 61 64 79 20 65 78 69 73   t1 already exis
4130: 74 73 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45  ts}}.  2    "CRE
4140: 41 54 45 20 54 41 42 4c 45 20 69 31 28 61 2c 20  ATE TABLE i1(a, 
4150: 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73  b)"   {{there is
4160: 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65   already an inde
4170: 78 20 6e 61 6d 65 64 20 69 31 7d 7d 0a 20 20 33  x named i1}}.  3
4180: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4190: 45 20 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7b  E v1(a, b)"   {{
41a0: 74 61 62 6c 65 20 76 31 20 61 6c 72 65 61 64 79  table v1 already
41b0: 20 65 78 69 73 74 73 7d 7d 0a 20 20 34 20 20 20   exists}}.  4   
41c0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   "CREATE TABLE a
41d0: 75 78 61 2e 74 62 6c 31 28 61 2c 20 62 29 22 20  uxa.tbl1(a, b)" 
41e0: 20 20 7b 7b 74 61 62 6c 65 20 74 62 6c 31 20 61    {{table tbl1 a
41f0: 6c 72 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a  lready exists}}.
4200: 20 20 35 20 20 20 20 22 43 52 45 41 54 45 20 54    5    "CREATE T
4210: 41 42 4c 45 20 61 75 78 61 2e 69 64 78 31 28 61  ABLE auxa.idx1(a
4220: 2c 20 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20  , b)"   {{there 
4230: 69 73 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e  is already an in
4240: 64 65 78 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d  dex named idx1}}
4250: 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20  .  6    "CREATE 
4260: 54 41 42 4c 45 20 61 75 78 61 2e 76 69 65 77 31  TABLE auxa.view1
4270: 28 61 2c 20 62 29 22 20 20 7b 7b 74 61 62 6c 65  (a, b)"  {{table
4280: 20 76 69 65 77 31 20 61 6c 72 65 61 64 79 20 65   view1 already e
4290: 78 69 73 74 73 7d 7d 0a 7d 0a 64 6f 5f 63 72 65  xists}}.}.do_cre
42a0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
42b0: 2e 37 2e 32 20 7b 0a 20 20 31 20 20 20 20 22 43  .7.2 {.  1    "C
42c0: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
42d0: 2e 74 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a  .t1(a, b)"   {}.
42e0: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
42f0: 41 42 4c 45 20 61 75 78 61 2e 69 31 28 61 2c 20  ABLE auxa.i1(a, 
4300: 62 29 22 20 20 20 7b 7d 0a 20 20 33 20 20 20 20  b)"   {}.  3    
4310: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
4320: 78 61 2e 76 31 28 61 2c 20 62 29 22 20 20 20 7b  xa.v1(a, b)"   {
4330: 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  }.  4    "CREATE
4340: 20 54 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62   TABLE tbl1(a, b
4350: 29 22 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20  )"      {}.  5  
4360: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4370: 69 64 78 31 28 61 2c 20 62 29 22 20 20 20 20 20  idx1(a, b)"     
4380: 20 7b 7d 0a 20 20 36 20 20 20 20 22 43 52 45 41   {}.  6    "CREA
4390: 54 45 20 54 41 42 4c 45 20 76 69 65 77 31 28 61  TE TABLE view1(a
43a0: 2c 20 62 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a  , b)"     {}.}..
43b0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
43c0: 2d 33 33 39 31 37 2d 32 34 30 38 36 20 48 6f 77  -33917-24086 How
43d0: 65 76 65 72 2c 20 69 66 20 74 68 65 20 22 49 46  ever, if the "IF
43e0: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
43f0: 75 73 65 20 69 73 0a 23 20 73 70 65 63 69 66 69  use is.# specifi
4400: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
4410: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
4420: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 61 20 74  tatement and a t
4430: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 0a  able or view of.
4440: 23 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  # the same name 
4450: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20  already exists, 
4460: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
4470: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 70 6c 79 20   command simply 
4480: 68 61 73 20 6e 6f 0a 23 20 65 66 66 65 63 74 20  has no.# effect 
4490: 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65  (and no error me
44a0: 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65  ssage is returne
44b0: 64 29 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  d)..#.drop_all_t
44c0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
44d0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
44e0: 62 6c 65 2d 31 2e 38 2e 30 20 7b 0a 20 20 43 52  ble-1.8.0 {.  CR
44f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
4500: 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e   y);.  CREATE IN
4510: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b  DEX i1 ON t1(x);
4520: 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20 20  .  CREATE VIEW  
4530: 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  v1 AS SELECT * F
4540: 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41 54 45  ROM t1;.  CREATE
4550: 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31   TABLE auxa.tbl1
4560: 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45  (x, y);.  CREATE
4570: 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31   INDEX auxa.idx1
4580: 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43   ON tbl1(x);.  C
4590: 52 45 41 54 45 20 56 49 45 57 20 61 75 78 61 2e  REATE VIEW auxa.
45a0: 76 69 65 77 31 20 41 53 20 53 45 4c 45 43 54 20  view1 AS SELECT 
45b0: 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b  * FROM tbl1;.} {
45c0: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
45d0: 5f 74 65 73 74 73 20 31 2e 38 20 7b 0a 20 20 31  _tests 1.8 {.  1
45e0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
45f0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
4600: 74 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 20  t1(a, b)"       
4610: 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52     {}.  2    "CR
4620: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
4630: 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 74 62  T EXISTS auxa.tb
4640: 6c 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20  l1(a, b)"   {}. 
4650: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
4660: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
4670: 53 20 76 31 28 61 2c 20 62 29 22 20 20 20 20 20  S v1(a, b)"     
4680: 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22       {}.  4    "
4690: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
46a0: 4e 4f 54 20 45 58 49 53 54 53 20 61 75 78 61 2e  NOT EXISTS auxa.
46b0: 76 69 65 77 31 28 61 2c 20 62 29 22 20 20 7b 7d  view1(a, b)"  {}
46c0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
46d0: 46 3a 20 52 2d 31 36 34 36 35 2d 34 30 30 37 38  F: R-16465-40078
46e0: 20 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69   An error is sti
46f0: 6c 6c 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  ll returned if t
4700: 68 65 20 74 61 62 6c 65 0a 23 20 63 61 6e 6e 6f  he table.# canno
4710: 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63  t be created bec
4720: 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74  ause of an exist
4730: 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20  ing index, even 
4740: 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54 0a 23  if the "IF NOT.#
4750: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
4760: 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 23 0a  is specified..#.
4770: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
4780: 65 73 74 73 20 31 2e 39 20 2d 65 72 72 6f 72 20  ests 1.9 -error 
4790: 7b 20 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20  { %s } {.  1    
47a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
47b0: 20 4e 4f 54 20 45 58 49 53 54 53 20 69 31 28 61   NOT EXISTS i1(a
47c0: 2c 20 62 29 22 20 20 20 0a 20 20 20 20 20 20 20  , b)"   .       
47d0: 7b 7b 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  {{there is alrea
47e0: 64 79 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65  dy an index name
47f0: 64 20 69 31 7d 7d 0a 20 20 32 20 20 20 20 22 43  d i1}}.  2    "C
4800: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
4810: 4f 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 69  OT EXISTS auxa.i
4820: 64 78 31 28 61 2c 20 62 29 22 20 20 20 0a 20 20  dx1(a, b)"   .  
4830: 20 20 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20       {{there is 
4840: 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78  already an index
4850: 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d 0a 7d 0a   named idx1}}.}.
4860: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4870: 52 2d 30 35 35 31 33 2d 33 33 38 31 39 20 49 74  R-05513-33819 It
4880: 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
4890: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
48a0: 6c 65 20 74 68 61 74 0a 23 20 68 61 73 20 74 68  le that.# has th
48b0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
48c0: 6e 20 65 78 69 73 74 69 6e 67 20 74 72 69 67 67  n existing trigg
48d0: 65 72 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  er..#.drop_all_t
48e0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
48f0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
4900: 62 6c 65 2d 31 2e 31 30 2e 30 20 7b 0a 20 20 43  ble-1.10.0 {.  C
4910: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
4920: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , y);.  CREATE T
4930: 41 42 4c 45 20 61 75 78 62 2e 74 32 28 78 2c 20  ABLE auxb.t2(x, 
4940: 79 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52  y);..  CREATE TR
4950: 49 47 47 45 52 20 74 72 31 20 41 46 54 45 52 20  IGGER tr1 AFTER 
4960: 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47  INSERT ON t1 BEG
4970: 49 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 31 3b  IN.    SELECT 1;
4980: 0a 20 20 45 4e 44 3b 0a 20 20 43 52 45 41 54 45  .  END;.  CREATE
4990: 20 54 52 49 47 47 45 52 20 61 75 78 62 2e 74 72   TRIGGER auxb.tr
49a0: 32 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  2 AFTER INSERT O
49b0: 4e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 53  N t2 BEGIN.    S
49c0: 45 4c 45 43 54 20 31 3b 0a 20 20 45 4e 44 3b 0a  ELECT 1;.  END;.
49d0: 7d 20 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61  } {}.do_createta
49e0: 62 6c 65 5f 74 65 73 74 73 20 31 2e 31 30 20 7b  ble_tests 1.10 {
49f0: 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20  .  1    "CREATE 
4a00: 54 41 42 4c 45 20 74 72 31 28 61 2c 20 62 29 22  TABLE tr1(a, b)"
4a10: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32            {}.  2
4a20: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4a30: 45 20 74 72 32 28 61 2c 20 62 29 22 20 20 20 20  E tr2(a, b)"    
4a40: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
4a50: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
4a60: 78 62 2e 74 72 31 28 61 2c 20 62 29 22 20 20 20  xb.tr1(a, b)"   
4a70: 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45    {}.  4    "CRE
4a80: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 74  ATE TABLE auxb.t
4a90: 72 32 28 61 2c 20 62 29 22 20 20 20 20 20 7b 7d  r2(a, b)"     {}
4aa0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
4ab0: 46 3a 20 52 2d 32 32 32 38 33 2d 31 34 31 37 39  F: R-22283-14179
4ac0: 20 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f   Tables are remo
4ad0: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 44 52  ved using the DR
4ae0: 4f 50 20 54 41 42 4c 45 0a 23 20 73 74 61 74 65  OP TABLE.# state
4af0: 6d 65 6e 74 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  ment..#.drop_all
4b00: 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73  _tables.do_execs
4b10: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
4b20: 74 61 62 6c 65 2d 31 2e 31 31 2e 30 20 7b 0a 20  table-1.11.0 {. 
4b30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
4b40: 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  (a, b);.  CREATE
4b50: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b   TABLE t2(a, b);
4b60: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
4b70: 61 75 78 61 2e 74 33 28 61 2c 20 62 29 3b 0a 20  auxa.t3(a, b);. 
4b80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
4b90: 78 61 2e 74 34 28 61 2c 20 62 29 3b 0a 7d 20 7b  xa.t4(a, b);.} {
4ba0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
4bb0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
4bc0: 2d 31 2e 31 31 2e 31 2e 31 20 7b 0a 20 20 53 45  -1.11.1.1 {.  SE
4bd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
4be0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4bf0: 74 32 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  t2;.  SELECT * F
4c00: 52 4f 4d 20 74 33 3b 0a 20 20 53 45 4c 45 43 54  ROM t3;.  SELECT
4c10: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 7d 20 7b 7d   * FROM t4;.} {}
4c20: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4c30: 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d    e_createtable-
4c40: 31 2e 31 31 2e 31 2e 32 20 7b 20 44 52 4f 50 20  1.11.1.2 { DROP 
4c50: 54 41 42 4c 45 20 74 31 20 7d 20 7b 7d 0a 64 6f  TABLE t1 } {}.do
4c60: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65  _catchsql_test e
4c70: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31  _createtable-1.1
4c80: 31 2e 31 2e 33 20 7b 20 0a 20 20 53 45 4c 45 43  1.1.3 { .  SELEC
4c90: 54 20 2a 20 46 52 4f 4d 20 74 31 20 0a 7d 20 7b  T * FROM t1 .} {
4ca0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
4cb0: 3a 20 74 31 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  : t1}}.do_execsq
4cc0: 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74 65  l_test  e_create
4cd0: 74 61 62 6c 65 2d 31 2e 31 31 2e 31 2e 34 20 7b  table-1.11.1.4 {
4ce0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 33 20 7d   DROP TABLE t3 }
4cf0: 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f   {}.do_catchsql_
4d00: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
4d10: 6c 65 2d 31 2e 31 31 2e 31 2e 35 20 7b 20 0a 20  le-1.11.1.5 { . 
4d20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
4d30: 33 20 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68  3 .} {1 {no such
4d40: 20 74 61 62 6c 65 3a 20 74 33 7d 7d 0a 0a 64 6f   table: t3}}..do
4d50: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
4d60: 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31  createtable-1.11
4d70: 2e 32 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .2.1 {.  SELECT 
4d80: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4d90: 5f 6d 61 73 74 65 72 3b 0a 20 20 53 45 4c 45 43  _master;.  SELEC
4da0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 61 75 78 61  T name FROM auxa
4db0: 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a  .sqlite_master;.
4dc0: 7d 20 7b 74 32 20 74 34 7d 0a 64 6f 5f 65 78 65  } {t2 t4}.do_exe
4dd0: 63 73 71 6c 5f 74 65 73 74 20 20 65 5f 63 72 65  csql_test  e_cre
4de0: 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e  atetable-1.11.2.
4df0: 32 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  2 { DROP TABLE t
4e00: 32 20 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  2 } {}.do_execsq
4e10: 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74 65  l_test  e_create
4e20: 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 33 20 7b  table-1.11.2.3 {
4e30: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 34 20 7d   DROP TABLE t4 }
4e40: 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   {}.do_execsql_t
4e50: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
4e60: 65 2d 31 2e 31 31 2e 32 2e 34 20 7b 0a 20 20 53  e-1.11.2.4 {.  S
4e70: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
4e80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
4e90: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
4ea0: 4d 20 61 75 78 61 2e 73 71 6c 69 74 65 5f 6d 61  M auxa.sqlite_ma
4eb0: 73 74 65 72 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d  ster;.} {}..#---
4ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f00: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
4f10: 73 65 73 20 65 5f 63 72 65 61 74 65 74 61 62 6c  ses e_createtabl
4f20: 65 2d 32 2e 2a 20 2d 20 74 65 73 74 20 73 74 61  e-2.* - test sta
4f30: 74 65 6d 65 6e 74 73 20 72 65 6c 61 74 65 64 20  tements related 
4f40: 74 6f 20 74 68 65 20 43 52 45 41 54 45 0a 23 20  to the CREATE.# 
4f50: 54 41 42 4c 45 20 41 53 20 2e 2e 2e 20 53 45 4c  TABLE AS ... SEL
4f60: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ECT statement..#
4f70: 0a 0a 23 20 54 68 72 65 65 20 54 63 6c 20 63 6f  ..# Three Tcl co
4f80: 6d 6d 61 6e 64 73 3a 0a 23 0a 23 20 20 20 73 65  mmands:.#.#   se
4f90: 6c 65 63 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  lect_column_name
4fa0: 73 20 53 51 4c 0a 23 20 20 20 20 20 54 68 65 20  s SQL.#     The 
4fb0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
4fc0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
4fd0: 65 6e 74 2e 20 52 65 74 75 72 6e 20 61 20 6c 69  ent. Return a li
4fe0: 73 74 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 0a  st of the names.
4ff0: 23 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6c  #     of the col
5000: 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 65 73 75  umns of the resu
5010: 6c 74 2d 73 65 74 20 74 68 61 74 20 77 6f 75 6c  lt-set that woul
5020: 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79  d be returned by
5030: 20 65 78 65 63 75 74 69 6e 67 0a 23 20 20 20 20   executing.#    
5040: 20 74 68 65 20 53 45 4c 45 43 54 2e 0a 23 0a 23   the SELECT..#.#
5050: 20 20 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f     table_column_
5060: 6e 61 6d 65 73 20 54 42 4c 0a 23 20 20 20 20 20  names TBL.#     
5070: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  The argument mus
5080: 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d  t be a table nam
5090: 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  e. Return a list
50a0: 20 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73   of column names
50b0: 2c 20 66 72 6f 6d 0a 23 20 20 20 20 20 6c 65 66  , from.#     lef
50c0: 74 20 74 6f 20 72 69 67 68 74 2c 20 66 6f 72 20  t to right, for 
50d0: 74 68 65 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20  the table..#.#  
50e0: 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65   table_column_de
50f0: 63 6c 74 79 70 65 73 20 54 42 4c 0a 23 20 20 20  cltypes TBL.#   
5100: 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d    The argument m
5110: 75 73 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e  ust be a table n
5120: 61 6d 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69  ame. Return a li
5130: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  st of column dec
5140: 6c 61 72 65 64 0a 23 20 20 20 20 20 74 79 70 65  lared.#     type
5150: 73 2c 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  s, from left to 
5160: 72 69 67 68 74 2c 20 66 6f 72 20 74 68 65 20 74  right, for the t
5170: 61 62 6c 65 2e 0a 23 0a 70 72 6f 63 20 73 63 69  able..#.proc sci
5180: 20 7b 73 65 6c 65 63 74 20 63 6d 64 7d 20 7b 0a   {select cmd} {.
5190: 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d    set res [list]
51a0: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
51b0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
51c0: 64 62 20 24 73 65 6c 65 63 74 20 2d 31 20 64 75  db $select -1 du
51d0: 6d 6d 79 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  mmy].  for {set 
51e0: 69 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69  i 0} {$i < [sqli
51f0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
5200: 20 24 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69   $STMT]} {incr i
5210: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
5220: 72 65 73 20 5b 24 63 6d 64 20 24 53 54 4d 54 20  res [$cmd $STMT 
5230: 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  $i].  }.  sqlite
5240: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5250: 0a 20 20 73 65 74 20 72 65 73 0a 7d 0a 70 72 6f  .  set res.}.pro
5260: 63 20 74 63 69 20 7b 74 62 6c 20 63 6d 64 7d 20  c tci {tbl cmd} 
5270: 7b 20 73 63 69 20 22 53 45 4c 45 43 54 20 2a 20  { sci "SELECT * 
5280: 46 52 4f 4d 20 24 74 62 6c 22 20 24 63 6d 64 20  FROM $tbl" $cmd 
5290: 7d 0a 70 72 6f 63 20 73 65 6c 65 63 74 5f 63 6f  }.proc select_co
52a0: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 7b 73  lumn_names    {s
52b0: 71 6c 7d 20 7b 20 73 63 69 20 24 73 71 6c 20 73  ql} { sci $sql s
52c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
52d0: 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65 5f  me }.proc table_
52e0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20  column_names    
52f0: 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20 24 74 62   {tbl} { tci $tb
5300: 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  l sqlite3_column
5310: 5f 6e 61 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62  _name }.proc tab
5320: 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  le_column_declty
5330: 70 65 73 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20  pes {tbl} { tci 
5340: 24 74 62 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  $tbl sqlite3_col
5350: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 7d 0a 0a  umn_decltype }..
5360: 23 20 43 72 65 61 74 65 20 61 20 64 61 74 61 62  # Create a datab
5370: 61 73 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73  ase schema. This
5380: 20 73 63 68 65 6d 61 20 69 73 20 75 73 65 64 20   schema is used 
5390: 62 79 20 74 65 73 74 73 20 32 2e 31 2e 2a 20 74  by tests 2.1.* t
53a0: 68 72 6f 75 67 68 20 32 2e 33 2e 2a 2e 0a 23 0a  hrough 2.3.*..#.
53b0: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
53c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
53d0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e  e_createtable-2.
53e0: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
53f0: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t1(a, b, c);.
5400: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5410: 32 28 64 2c 20 65 2c 20 66 29 3b 0a 20 20 43 52  2(d, e, f);.  CR
5420: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 67 20  EATE TABLE t3(g 
5430: 42 49 47 49 4e 54 2c 20 68 20 56 41 52 43 48 41  BIGINT, h VARCHA
5440: 52 28 31 30 29 29 3b 0a 20 20 43 52 45 41 54 45  R(10));.  CREATE
5450: 20 54 41 42 4c 45 20 74 34 28 69 20 42 4c 4f 42   TABLE t4(i BLOB
5460: 2c 20 6a 20 41 4e 59 4f 4c 44 41 54 41 29 3b 0a  , j ANYOLDATA);.
5470: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5480: 35 28 6b 20 46 4c 4f 41 54 2c 20 6c 20 49 4e 54  5(k FLOAT, l INT
5490: 45 47 45 52 29 3b 0a 20 20 43 52 45 41 54 45 20  EGER);.  CREATE 
54a0: 54 41 42 4c 45 20 74 36 28 6d 20 44 45 46 41 55  TABLE t6(m DEFAU
54b0: 4c 54 20 31 30 2c 20 6e 20 44 45 46 41 55 4c 54  LT 10, n DEFAULT
54c0: 20 35 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   5, PRIMARY KEY(
54d0: 6d 2c 20 6e 29 29 3b 0a 20 20 43 52 45 41 54 45  m, n));.  CREATE
54e0: 20 54 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45   TABLE t7(x INTE
54f0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 29  GER PRIMARY KEY)
5500: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
5510: 20 74 38 28 6f 20 43 4f 4c 4c 41 54 45 20 6e 6f   t8(o COLLATE no
5520: 63 61 73 65 20 44 45 46 41 55 4c 54 20 27 61 62  case DEFAULT 'ab
5530: 63 27 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  c');.  CREATE TA
5540: 42 4c 45 20 74 39 28 70 20 4e 4f 54 20 4e 55 4c  BLE t9(p NOT NUL
5550: 4c 2c 20 71 20 44 4f 55 42 4c 45 20 43 48 45 43  L, q DOUBLE CHEC
5560: 4b 20 28 71 21 3d 30 29 2c 20 72 20 53 54 52 49  K (q!=0), r STRI
5570: 4e 47 20 55 4e 49 51 55 45 29 3b 0a 7d 20 7b 7d  NG UNIQUE);.} {}
5580: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
5590: 20 52 2d 36 34 38 32 38 2d 35 39 35 36 38 20 54   R-64828-59568 T
55a0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65  he table has the
55b0: 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20   same number of 
55c0: 63 6f 6c 75 6d 6e 73 20 61 73 0a 23 20 74 68 65  columns as.# the
55d0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
55e0: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
55f0: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
5600: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
5610: 69 73 0a 23 20 74 68 65 20 73 61 6d 65 20 61 73  is.# the same as
5620: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
5630: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
5640: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
5650: 75 6c 74 20 73 65 74 20 6f 66 0a 23 20 74 68 65  ult set of.# the
5660: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
5670: 74 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  t..#.do_createta
5680: 62 6c 65 5f 74 65 73 74 73 20 32 2e 31 20 2d 74  ble_tests 2.1 -t
5690: 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c  clquery {.  tabl
56a0: 65 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 78  e_column_names x
56b0: 31 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  1.} -repair {.  
56c0: 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
56d0: 54 41 42 4c 45 20 78 31 20 7d 0a 7d 20 7b 0a 20  TABLE x1 }.} {. 
56e0: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
56f0: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
5700: 20 2a 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20   * FROM t1"     
5710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5720: 7b 61 20 62 20 63 7d 0a 20 20 32 20 20 20 20 22  {a b c}.  2    "
5730: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20  CREATE TABLE x1 
5740: 41 53 20 53 45 4c 45 43 54 20 63 2c 20 62 2c 20  AS SELECT c, b, 
5750: 61 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20  a FROM t1"      
5760: 20 20 20 20 20 20 20 20 20 7b 63 20 62 20 61 7d           {c b a}
5770: 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20  .  3    "CREATE 
5780: 54 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45  TABLE x1 AS SELE
5790: 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32  CT * FROM t1, t2
57a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
57b0: 20 20 7b 61 20 62 20 63 20 64 20 65 20 66 7d 0a    {a b c d e f}.
57c0: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
57d0: 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43  ABLE x1 AS SELEC
57e0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
57f0: 74 31 22 20 20 20 20 20 20 20 20 20 20 20 20 20  t1"             
5800: 20 7b 63 6f 75 6e 74 28 2a 29 7d 0a 20 20 35 20   {count(*)}.  5 
5810: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
5820: 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 63 6f   x1 AS SELECT co
5830: 75 6e 74 28 61 29 20 41 53 20 61 2c 20 6d 61 78  unt(a) AS a, max
5840: 28 62 29 20 46 52 4f 4d 20 74 31 22 20 7b 61 20  (b) FROM t1" {a 
5850: 6d 61 78 28 62 29 7d 0a 7d 0a 0a 23 20 45 56 49  max(b)}.}..# EVI
5860: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 37 31 31  DENCE-OF: R-3711
5870: 31 2d 32 32 38 35 35 20 54 68 65 20 64 65 63 6c  1-22855 The decl
5880: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
5890: 68 20 63 6f 6c 75 6d 6e 20 69 73 0a 23 20 64 65  h column is.# de
58a0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
58b0: 65 78 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e  expression affin
58c0: 69 74 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ity of the corre
58d0: 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
58e0: 69 6f 6e 0a 23 20 69 6e 20 74 68 65 20 72 65 73  ion.# in the res
58f0: 75 6c 74 20 73 65 74 20 6f 66 20 74 68 65 20 53  ult set of the S
5900: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
5910: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 20 45 78 70   as follows: Exp
5920: 72 65 73 73 69 6f 6e 0a 23 20 41 66 66 69 6e 69  ression.# Affini
5930: 74 79 20 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  ty Column Declar
5940: 65 64 20 54 79 70 65 20 54 45 58 54 20 22 54 45  ed Type TEXT "TE
5950: 58 54 22 20 4e 55 4d 45 52 49 43 20 22 4e 55 4d  XT" NUMERIC "NUM
5960: 22 20 49 4e 54 45 47 45 52 20 22 49 4e 54 22 0a  " INTEGER "INT".
5970: 23 20 52 45 41 4c 20 22 52 45 41 4c 22 20 4e 4f  # REAL "REAL" NO
5980: 4e 45 20 22 22 20 28 65 6d 70 74 79 20 73 74 72  NE "" (empty str
5990: 69 6e 67 29 0a 23 0a 64 6f 5f 63 72 65 61 74 65  ing).#.do_create
59a0: 74 61 62 6c 65 5f 74 65 73 74 73 20 32 2e 32 20  table_tests 2.2 
59b0: 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61  -tclquery {.  ta
59c0: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  ble_column_declt
59d0: 79 70 65 73 20 78 31 0a 7d 20 2d 72 65 70 61 69  ypes x1.} -repai
59e0: 72 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  r {.  catchsql {
59f0: 20 44 52 4f 50 20 54 41 42 4c 45 20 78 31 20 7d   DROP TABLE x1 }
5a00: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
5a10: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5a20: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
5a30: 22 20 20 20 20 20 7b 22 22 7d 0a 20 20 32 20 20  "     {""}.  2  
5a40: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
5a50: 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  x1 AS SELECT * F
5a60: 52 4f 4d 20 74 33 22 20 20 20 20 20 7b 49 4e 54  ROM t3"     {INT
5a70: 20 54 45 58 54 7d 0a 20 20 33 20 20 20 20 22 43   TEXT}.  3    "C
5a80: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41  REATE TABLE x1 A
5a90: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
5aa0: 74 34 22 20 20 20 20 20 7b 22 22 20 4e 55 4d 7d  t4"     {"" NUM}
5ab0: 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20  .  4    "CREATE 
5ac0: 54 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45  TABLE x1 AS SELE
5ad0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 22 20 20 20  CT * FROM t5"   
5ae0: 20 20 7b 52 45 41 4c 20 49 4e 54 7d 0a 7d 0a 0a    {REAL INT}.}..
5af0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
5b00: 2d 31 36 36 36 37 2d 30 39 37 37 32 20 41 20 74  -16667-09772 A t
5b10: 61 62 6c 65 20 63 72 65 61 74 65 64 20 75 73 69  able created usi
5b20: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
5b30: 41 53 20 68 61 73 0a 23 20 6e 6f 20 50 52 49 4d  AS has.# no PRIM
5b40: 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 20 63  ARY KEY and no c
5b50: 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66 20 61 6e  onstraints of an
5b60: 79 20 6b 69 6e 64 2e 20 54 68 65 20 64 65 66 61  y kind. The defa
5b70: 75 6c 74 20 76 61 6c 75 65 20 6f 66 0a 23 20 65  ult value of.# e
5b80: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55  ach column is NU
5b90: 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  LL. The default 
5ba0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
5bb0: 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ce for each colu
5bc0: 6d 6e 20 6f 66 0a 23 20 74 68 65 20 6e 65 77 20  mn of.# the new 
5bd0: 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e  table is BINARY.
5be0: 0a 23 0a 23 20 20 20 54 68 65 20 66 6f 6c 6c 6f  .#.#   The follo
5bf0: 77 69 6e 67 20 74 65 73 74 73 20 63 72 65 61 74  wing tests creat
5c00: 65 20 74 61 62 6c 65 73 20 62 61 73 65 64 20 6f  e tables based o
5c10: 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  n SELECT stateme
5c20: 6e 74 73 20 74 68 61 74 20 72 65 61 64 0a 23 20  nts that read.# 
5c30: 20 20 66 72 6f 6d 20 74 61 62 6c 65 73 20 74 68    from tables th
5c40: 61 74 20 68 61 76 65 20 70 72 69 6d 61 72 79 20  at have primary 
5c50: 6b 65 79 73 2c 20 63 6f 6e 73 74 72 61 69 6e 74  keys, constraint
5c60: 73 20 61 6e 64 20 65 78 70 6c 69 63 69 74 20 64  s and explicit d
5c70: 65 66 61 75 6c 74 20 0a 23 20 20 20 63 6f 6c 6c  efault .#   coll
5c80: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e  ation sequences.
5c90: 20 4e 6f 6e 65 20 6f 66 20 74 68 69 73 20 69 73   None of this is
5ca0: 20 74 72 61 6e 73 66 65 72 65 64 20 74 6f 20 74   transfered to t
5cb0: 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
5cc0: 0a 23 20 20 20 74 68 65 20 6e 65 77 20 74 61 62  .#   the new tab
5cd0: 6c 65 20 61 73 20 73 74 6f 72 65 64 20 69 6e 20  le as stored in 
5ce0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
5cf0: 72 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 54  r table..#.#   T
5d00: 65 73 74 73 20 32 2e 33 2e 32 2e 2a 20 73 68 6f  ests 2.3.2.* sho
5d10: 77 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75  w that the defau
5d20: 6c 74 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68  lt value of each
5d30: 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e   column is NULL.
5d40: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
5d50: 65 5f 74 65 73 74 73 20 32 2e 33 2e 31 20 2d 71  e_tests 2.3.1 -q
5d60: 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20  uery {.  SELECT 
5d70: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
5d80: 6d 61 73 74 65 72 20 4f 52 44 45 52 20 42 59 20  master ORDER BY 
5d90: 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54  rowid DESC LIMIT
5da0: 20 31 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43   1.} {.  1    "C
5db0: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41  REATE TABLE x1 A
5dc0: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
5dd0: 74 36 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42  t6" {{CREATE TAB
5de0: 4c 45 20 78 31 28 6d 2c 6e 29 7d 7d 0a 20 20 32  LE x1(m,n)}}.  2
5df0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
5e00: 45 20 78 32 20 41 53 20 53 45 4c 45 43 54 20 2a  E x2 AS SELECT *
5e10: 20 46 52 4f 4d 20 74 37 22 20 7b 7b 43 52 45 41   FROM t7" {{CREA
5e20: 54 45 20 54 41 42 4c 45 20 78 32 28 78 20 49 4e  TE TABLE x2(x IN
5e30: 54 29 7d 7d 0a 20 20 33 20 20 20 20 22 43 52 45  T)}}.  3    "CRE
5e40: 41 54 45 20 54 41 42 4c 45 20 78 33 20 41 53 20  ATE TABLE x3 AS 
5e50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38  SELECT * FROM t8
5e60: 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  " {{CREATE TABLE
5e70: 20 78 33 28 6f 29 7d 7d 0a 20 20 34 20 20 20 20   x3(o)}}.  4    
5e80: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 34  "CREATE TABLE x4
5e90: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
5ea0: 4d 20 74 39 22 20 7b 7b 43 52 45 41 54 45 20 54  M t9" {{CREATE T
5eb0: 41 42 4c 45 20 78 34 28 70 2c 71 20 52 45 41 4c  ABLE x4(p,q REAL
5ec0: 2c 72 20 4e 55 4d 29 7d 7d 0a 7d 0a 64 6f 5f 65  ,r NUM)}}.}.do_e
5ed0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
5ee0: 65 61 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e  eatetable-2.3.2.
5ef0: 31 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  1 {.  INSERT INT
5f00: 4f 20 78 31 20 44 45 46 41 55 4c 54 20 56 41 4c  O x1 DEFAULT VAL
5f10: 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  UES;.  INSERT IN
5f20: 54 4f 20 78 32 20 44 45 46 41 55 4c 54 20 56 41  TO x2 DEFAULT VA
5f30: 4c 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49  LUES;.  INSERT I
5f40: 4e 54 4f 20 78 33 20 44 45 46 41 55 4c 54 20 56  NTO x3 DEFAULT V
5f50: 41 4c 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20  ALUES;.  INSERT 
5f60: 49 4e 54 4f 20 78 34 20 44 45 46 41 55 4c 54 20  INTO x4 DEFAULT 
5f70: 56 41 4c 55 45 53 3b 0a 7d 20 7b 7d 0a 64 62 20  VALUES;.} {}.db 
5f80: 6e 75 6c 6c 76 61 6c 75 65 20 6e 75 6c 6c 0a 64  nullvalue null.d
5f90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
5fa0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 33  _createtable-2.3
5fb0: 2e 32 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20  .2.2 { SELECT * 
5fc0: 46 52 4f 4d 20 78 31 20 7d 20 7b 6e 75 6c 6c 20  FROM x1 } {null 
5fd0: 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  null}.do_execsql
5fe0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
5ff0: 62 6c 65 2d 32 2e 33 2e 32 2e 33 20 7b 20 53 45  ble-2.3.2.3 { SE
6000: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 20 7d  LECT * FROM x2 }
6010: 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73   {null}.do_execs
6020: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6030: 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 34 20 7b 20  table-2.3.2.4 { 
6040: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 33  SELECT * FROM x3
6050: 20 7d 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65   } {null}.do_exe
6060: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
6070: 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 35 20  tetable-2.3.2.5 
6080: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
6090: 78 34 20 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20  x4 } {null null 
60a0: 6e 75 6c 6c 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c  null}.db nullval
60b0: 75 65 20 7b 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f  ue {}..drop_all_
60c0: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
60d0: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
60e0: 61 62 6c 65 2d 32 2e 34 2e 30 20 7b 0a 20 20 43  able-2.4.0 {.  C
60f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
6100: 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , y);.  INSERT I
6110: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69  NTO t1 VALUES('i
6120: 27 2c 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49  ',   'one');.  I
6130: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6140: 4c 55 45 53 28 27 69 69 27 2c 20 20 27 74 77 6f  LUES('ii',  'two
6150: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
6160: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69 69 69  O t1 VALUES('iii
6170: 27 2c 20 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b  ', 'three');.} {
6180: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
6190: 3a 20 52 2d 32 34 31 35 33 2d 32 38 33 35 32 20  : R-24153-28352 
61a0: 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
61b0: 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c  sing CREATE TABL
61c0: 45 20 41 53 20 61 72 65 0a 23 20 69 6e 69 74 69  E AS are.# initi
61d0: 61 6c 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77  ally populated w
61e0: 69 74 68 20 74 68 65 20 72 6f 77 73 20 6f 66 20  ith the rows of 
61f0: 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
6200: 20 74 68 65 20 53 45 4c 45 43 54 0a 23 20 73 74   the SELECT.# st
6210: 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20 45 56 49  atement..#.# EVI
6220: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 32 32  DENCE-OF: R-0822
6230: 34 2d 33 30 32 34 39 20 52 6f 77 73 20 61 72 65  4-30249 Rows are
6240: 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67   assigned contig
6250: 75 6f 75 73 6c 79 20 61 73 63 65 6e 64 69 6e 67  uously ascending
6260: 0a 23 20 72 6f 77 69 64 20 76 61 6c 75 65 73 2c  .# rowid values,
6270: 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
6280: 2c 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  , in the order t
6290: 68 61 74 20 74 68 65 79 20 61 72 65 20 72 65 74  hat they are ret
62a0: 75 72 6e 65 64 20 62 79 0a 23 20 74 68 65 20 53  urned by.# the S
62b0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
62c0: 0a 23 0a 23 20 20 20 45 61 63 68 20 74 65 73 74  .#.#   Each test
62d0: 20 63 61 73 65 20 62 65 6c 6f 77 20 69 73 20 73   case below is s
62e0: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
62f0: 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20  name of a table 
6300: 74 6f 20 63 72 65 61 74 65 0a 23 20 20 20 75 73  to create.#   us
6310: 69 6e 67 20 22 43 52 45 41 54 45 20 54 41 42 4c  ing "CREATE TABL
6320: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
6330: 2e 2e 2e 22 20 61 6e 64 20 61 20 53 45 4c 45 43  ..." and a SELEC
6340: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 75  T statement to u
6350: 73 65 20 69 6e 0a 23 20 20 20 63 72 65 61 74 69  se in.#   creati
6360: 6e 67 20 69 74 2e 20 54 68 65 20 74 61 62 6c 65  ng it. The table
6370: 20 69 73 20 63 72 65 61 74 65 64 2e 20 0a 23 0a   is created. .#.
6380: 23 20 20 20 54 65 73 74 20 63 61 73 65 73 20 32  #   Test cases 2
6390: 2e 34 2e 2a 2e 31 20 63 68 65 63 6b 20 74 68 61  .4.*.1 check tha
63a0: 74 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62  t after it has b
63b0: 65 65 6e 20 63 72 65 61 74 65 64 2c 20 74 68 65  een created, the
63c0: 20 64 61 74 61 20 69 6e 20 74 68 65 0a 23 20 20   data in the.#  
63d0: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 73 61   table is the sa
63e0: 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 20 72  me as the data r
63f0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
6400: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
6410: 65 78 65 63 75 74 65 64 20 61 73 0a 23 20 20 20  executed as.#   
6420: 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  a standalone com
6430: 6d 61 6e 64 2c 20 76 65 72 69 66 79 69 6e 67 20  mand, verifying 
6440: 74 68 65 20 66 69 72 73 74 20 74 65 73 74 61 62  the first testab
6450: 6c 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  le statement abo
6460: 76 65 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63  ve..#.#   Test c
6470: 61 73 65 73 20 32 2e 34 2e 2a 2e 32 20 63 68 65  ases 2.4.*.2 che
6480: 63 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77 69  ck that the rowi
6490: 64 73 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65  ds were allocate
64a0: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 23  d contiguously.#
64b0: 20 20 20 61 73 20 72 65 71 75 69 72 65 64 20 62     as required b
64c0: 79 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 73  y the second tes
64d0: 74 61 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 20  table statement 
64e0: 61 62 6f 76 65 2e 20 54 68 61 74 20 74 68 65 20  above. That the 
64f0: 72 6f 77 69 64 73 0a 23 20 20 20 66 72 6f 6d 20  rowids.#   from 
6500: 74 68 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62  the contiguous b
6510: 6c 6f 63 6b 20 77 65 72 65 20 61 6c 6c 6f 63 61  lock were alloca
6520: 74 65 64 20 74 6f 20 72 6f 77 73 20 69 6e 20 74  ted to rows in t
6530: 68 65 20 6f 72 64 65 72 20 72 6f 77 73 20 61 72  he order rows ar
6540: 65 0a 23 20 20 20 72 65 74 75 72 6e 65 64 20 62  e.#   returned b
6550: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
6560: 74 65 6d 65 6e 74 20 69 73 20 76 65 72 69 66 69  tement is verifi
6570: 65 64 20 62 79 20 32 2e 34 2e 2a 2e 31 2e 0a 23  ed by 2.4.*.1..#
6580: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6590: 52 2d 33 32 33 36 35 2d 30 39 30 34 33 20 41 20  R-32365-09043 A 
65a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
65b0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
65c0: 74 65 6d 65 6e 74 0a 23 20 63 72 65 61 74 65 73  tement.# creates
65d0: 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61   and populates a
65e0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
65f0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
6600: 75 6c 74 73 20 6f 66 20 61 0a 23 20 53 45 4c 45  ults of a.# SELE
6610: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a  CT statement..#.
6620: 23 20 20 20 54 68 65 20 61 62 6f 76 65 20 69 73  #   The above is
6630: 20 61 6c 73 6f 20 63 6f 6e 73 69 64 65 72 65 64   also considered
6640: 20 74 6f 20 62 65 20 74 65 73 74 65 64 20 62 79   to be tested by
6650: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20   the following. 
6660: 49 74 20 69 73 0a 23 20 20 20 63 6c 65 61 72 20  It is.#   clear 
6670: 74 68 61 74 20 74 61 62 6c 65 73 20 61 72 65 20  that tables are 
6680: 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 61 6e  being created an
6690: 64 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 74  d populated by t
66a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 69 6e 0a 23 20  he command in.# 
66b0: 20 20 71 75 65 73 74 69 6f 6e 2e 0a 23 0a 66 6f    question..#.fo
66c0: 72 65 61 63 68 20 7b 74 6e 20 74 62 6c 20 73 65  reach {tn tbl se
66d0: 6c 65 63 74 7d 20 7b 0a 20 20 31 20 20 20 78 31  lect} {.  1   x1
66e0: 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f     "SELECT * FRO
66f0: 4d 20 74 31 22 0a 20 20 32 20 20 20 78 32 20 20  M t1".  2   x2  
6700: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
6710: 74 31 20 4f 52 44 45 52 20 42 59 20 78 20 44 45  t1 ORDER BY x DE
6720: 53 43 22 0a 20 20 33 20 20 20 78 33 20 20 20 22  SC".  3   x3   "
6730: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
6740: 20 4f 52 44 45 52 20 42 59 20 78 20 41 53 43 22   ORDER BY x ASC"
6750: 0a 7d 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20  .} {.  # Create 
6760: 74 68 65 20 74 61 62 6c 65 20 75 73 69 6e 67 20  the table using 
6770: 61 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  a "CREATE TABLE 
6780: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e  ... AS SELECT ..
6790: 2e 22 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 65 78  ." command..  ex
67a0: 65 63 73 71 6c 20 5b 73 75 62 73 74 20 7b 43 52  ecsql [subst {CR
67b0: 45 41 54 45 20 54 41 42 4c 45 20 24 74 62 6c 20  EATE TABLE $tbl 
67c0: 41 53 20 24 73 65 6c 65 63 74 7d 5d 0a 0a 20 20  AS $select}]..  
67d0: 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65  # Check that the
67e0: 20 72 6f 77 73 20 69 6e 73 65 72 74 65 64 20 69   rows inserted i
67f0: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 2c 20 73  nto the table, s
6800: 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
6810: 6e 67 20 72 6f 77 69 64 0a 20 20 23 20 6f 72 64  ng rowid.  # ord
6820: 65 72 2c 20 6d 61 74 63 68 20 74 68 6f 73 65 20  er, match those 
6830: 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
6840: 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
6850: 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 61 0a   statement as a.
6860: 20 20 23 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63    # standalone c
6870: 6f 6d 6d 61 6e 64 2e 0a 20 20 64 6f 5f 65 78 65  ommand..  do_exe
6880: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
6890: 74 65 74 61 62 6c 65 2d 32 2e 34 2e 24 74 6e 2e  tetable-2.4.$tn.
68a0: 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 53  1 [subst {.    S
68b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62  ELECT * FROM $tb
68c0: 6c 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  l ORDER BY rowid
68d0: 3b 0a 20 20 7d 5d 20 5b 65 78 65 63 73 71 6c 20  ;.  }] [execsql 
68e0: 24 73 65 6c 65 63 74 5d 0a 0a 20 20 23 20 43 68  $select]..  # Ch
68f0: 65 63 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77  eck that the row
6900: 69 64 73 20 69 6e 20 74 68 65 20 6e 65 77 20 74  ids in the new t
6910: 61 62 6c 65 20 61 72 65 20 61 20 63 6f 6e 74 69  able are a conti
6920: 67 75 6f 75 73 20 62 6c 6f 63 6b 20 73 74 61 72  guous block star
6930: 74 69 6e 67 0a 20 20 23 20 77 69 74 68 20 72 6f  ting.  # with ro
6940: 77 69 64 20 31 2e 20 4e 6f 74 65 20 74 68 61 74  wid 1. Note that
6950: 20 74 68 69 73 20 77 69 6c 6c 20 66 61 69 6c 20   this will fail 
6960: 69 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  if SELECT statem
6970: 65 6e 74 20 24 73 65 6c 65 63 74 20 0a 20 20 23  ent $select .  #
6980: 20 72 65 74 75 72 6e 73 20 30 20 72 6f 77 73 20   returns 0 rows 
6990: 28 61 73 20 6d 61 78 28 72 6f 77 69 64 29 20 77  (as max(rowid) w
69a0: 69 6c 6c 20 62 65 20 4e 55 4c 4c 29 2e 0a 20 20  ill be NULL)..  
69b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
69c0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e  e_createtable-2.
69d0: 34 2e 24 74 6e 2e 32 20 5b 73 75 62 73 74 20 7b  4.$tn.2 [subst {
69e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28  .    SELECT min(
69f0: 72 6f 77 69 64 29 2c 20 63 6f 75 6e 74 28 72 6f  rowid), count(ro
6a00: 77 69 64 29 3d 3d 6d 61 78 28 72 6f 77 69 64 29  wid)==max(rowid)
6a10: 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 7d 5d 20   FROM $tbl.  }] 
6a20: 7b 31 20 31 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  {1 1}.}..#------
6a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a70: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
6a80: 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 20 64 65 66  s for column def
6a90: 69 6e 74 69 6f 6e 73 20 69 6e 20 43 52 45 41 54  intions in CREAT
6aa0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
6ab0: 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 23  ts that do not.#
6ac0: 20 75 73 65 20 61 20 53 45 4c 45 43 54 20 73 74   use a SELECT st
6ad0: 61 74 65 6d 65 6e 74 2e 20 4e 6f 74 20 69 6e 63  atement. Not inc
6ae0: 6c 75 64 69 6e 67 20 64 61 74 61 20 63 6f 6e 73  luding data cons
6af0: 74 72 61 69 6e 74 73 2e 20 49 6e 20 6f 74 68 65  traints. In othe
6b00: 72 20 77 6f 72 64 73 2c 0a 23 20 74 65 73 74 73  r words,.# tests
6b10: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
6b20: 63 61 74 69 6f 6e 20 6f 66 3a 0a 23 0a 23 20 20  cation of:.#.#  
6b30: 20 2a 20 64 65 63 6c 61 72 65 64 20 74 79 70 65   * declared type
6b40: 73 2c 0a 23 20 20 20 2a 20 64 65 66 61 75 6c 74  s,.#   * default
6b50: 20 76 61 6c 75 65 73 2c 20 61 6e 64 0a 23 20 20   values, and.#  
6b60: 20 2a 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61   * default colla
6b70: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 0a  tion sequences..
6b80: 23 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  #..# EVIDENCE-OF
6b90: 3a 20 52 2d 32 37 32 31 39 2d 34 39 30 35 37 20  : R-27219-49057 
6ba0: 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20  Unlike most SQL 
6bb0: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
6bc0: 65 20 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 73  e does not.# res
6bd0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
6be0: 66 20 64 61 74 61 20 74 68 61 74 20 6d 61 79 20  f data that may 
6bf0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
6c00: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
6c10: 6f 6e 0a 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73  on.# the columns
6c20: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e 0a   declared type..
6c30: 23 0a 23 20 20 20 54 65 73 74 20 74 68 69 73 20  #.#   Test this 
6c40: 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 66 65  by creating a fe
6c50: 77 20 74 61 62 6c 65 73 20 77 69 74 68 20 76 61  w tables with va
6c60: 72 69 65 64 20 64 65 63 6c 61 72 65 64 20 74 79  ried declared ty
6c70: 70 65 73 2c 20 74 68 65 6e 0a 23 20 20 20 69 6e  pes, then.#   in
6c80: 73 65 72 74 69 6e 67 20 76 61 72 69 6f 75 73 20  serting various 
6c90: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 20  different types 
6ca0: 6f 66 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 74  of values into t
6cb0: 68 65 6d 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f  hem..#.drop_all_
6cc0: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
6cd0: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
6ce0: 61 62 6c 65 2d 33 2e 31 2e 30 20 7b 0a 20 20 43  able-3.1.0 {.  C
6cf0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
6d00: 20 56 41 52 43 48 41 52 28 31 30 29 2c 20 79 20   VARCHAR(10), y 
6d10: 49 4e 54 45 47 45 52 2c 20 7a 20 44 4f 55 42 4c  INTEGER, z DOUBL
6d20: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
6d30: 4c 45 20 74 32 28 61 20 44 41 54 45 54 49 4d 45  LE t2(a DATETIME
6d40: 2c 20 62 20 53 54 52 49 4e 47 2c 20 63 20 52 45  , b STRING, c RE
6d50: 41 4c 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  AL);.  CREATE TA
6d60: 42 4c 45 20 74 33 28 6f 2c 20 74 29 3b 0a 7d 20  BLE t3(o, t);.} 
6d70: 7b 7d 0a 0a 23 20 76 61 6c 75 65 20 74 79 70 65  {}..# value type
6d80: 20 2d 3e 20 64 65 63 6c 61 72 65 64 20 63 6f 6c   -> declared col
6d90: 75 6d 6e 20 74 79 70 65 0a 23 20 2d 2d 2d 2d 2d  umn type.# -----
6da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
6dc0: 69 6e 74 65 67 65 72 20 20 20 20 2d 3e 20 56 41  integer    -> VA
6dd0: 52 43 48 41 52 28 31 30 29 0a 23 20 73 74 72 69  RCHAR(10).# stri
6de0: 6e 67 20 20 20 20 20 2d 3e 20 49 4e 54 45 47 45  ng     -> INTEGE
6df0: 52 0a 23 20 62 6c 6f 62 20 20 20 20 20 20 20 2d  R.# blob       -
6e00: 3e 20 44 4f 55 42 4c 45 0a 23 0a 64 6f 5f 65 78  > DOUBLE.#.do_ex
6e10: 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  ecsql_test e_cre
6e20: 61 74 65 74 61 62 6c 65 2d 33 2e 31 2e 31 20 7b  atetable-3.1.1 {
6e30: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
6e40: 31 20 56 41 4c 55 45 53 28 31 34 2c 20 27 71 75  1 VALUES(14, 'qu
6e50: 69 74 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74  ite a lengthy st
6e60: 72 69 6e 67 27 2c 20 58 27 35 35 35 36 35 35 27  ring', X'555655'
6e70: 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  );.  SELECT * FR
6e80: 4f 4d 20 74 31 3b 0a 7d 20 7b 31 34 20 7b 71 75  OM t1;.} {14 {qu
6e90: 69 74 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74  ite a lengthy st
6ea0: 72 69 6e 67 7d 20 55 56 55 7d 0a 0a 23 20 73 74  ring} UVU}..# st
6eb0: 72 69 6e 67 20 20 20 20 20 2d 3e 20 44 41 54 45  ring     -> DATE
6ec0: 54 49 4d 45 0a 23 20 69 6e 74 65 67 65 72 20 20  TIME.# integer  
6ed0: 20 20 2d 3e 20 53 54 52 49 4e 47 0a 23 20 74 69    -> STRING.# ti
6ee0: 6d 65 20 20 20 20 20 20 20 2d 3e 20 52 45 41 4c  me       -> REAL
6ef0: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
6f00: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
6f10: 2d 33 2e 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52  -3.1.2 {.  INSER
6f20: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
6f30: 28 27 6e 6f 74 20 61 20 64 61 74 65 74 69 6d 65  ('not a datetime
6f40: 27 2c 20 31 33 2c 20 27 31 32 3a 34 31 3a 35 39  ', 13, '12:41:59
6f50: 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  ');.  SELECT * F
6f60: 52 4f 4d 20 74 32 3b 0a 7d 20 7b 7b 6e 6f 74 20  ROM t2;.} {{not 
6f70: 61 20 64 61 74 65 74 69 6d 65 7d 20 31 33 20 31  a datetime} 13 1
6f80: 32 3a 34 31 3a 35 39 7d 0a 0a 23 20 45 56 49 44  2:41:59}..# EVID
6f90: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 30 35 36 35  ENCE-OF: R-10565
6fa0: 2d 30 39 35 35 37 20 54 68 65 20 64 65 63 6c 61  -09557 The decla
6fb0: 72 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f  red type of a co
6fc0: 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a  lumn is used to.
6fd0: 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  # determine the 
6fe0: 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
6ff0: 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 23 0a 23  column only..#.#
7000: 20 20 20 20 20 41 66 66 69 6e 69 74 69 65 73 20       Affinities 
7010: 61 72 65 20 74 65 73 74 65 64 20 69 6e 20 6d 6f  are tested in mo
7020: 72 65 20 64 65 74 61 69 6c 20 65 6c 73 65 77 68  re detail elsewh
7030: 65 72 65 20 28 73 65 65 20 64 6f 63 75 6d 65 6e  ere (see documen
7040: 74 0a 23 20 20 20 20 20 64 61 74 61 74 79 70 65  t.#     datatype
7050: 33 2e 68 74 6d 6c 29 2e 20 48 65 72 65 2c 20 6a  3.html). Here, j
7060: 75 73 74 20 74 65 73 74 20 74 68 61 74 20 61 66  ust test that af
7070: 66 69 6e 69 74 79 20 74 72 61 6e 73 66 6f 72 6d  finity transform
7080: 61 74 69 6f 6e 73 0a 23 20 20 20 20 20 63 6f 6e  ations.#     con
7090: 73 69 73 74 65 6e 74 20 77 69 74 68 20 74 68 65  sistent with the
70a0: 20 65 78 70 65 63 74 65 64 20 61 66 66 69 6e 69   expected affini
70b0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
70c0: 6e 20 28 62 61 73 65 64 20 6f 6e 0a 23 20 20 20  n (based on.#   
70d0: 20 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74    the declared t
70e0: 79 70 65 29 20 61 70 70 65 61 72 20 74 6f 20 74  ype) appear to t
70f0: 61 6b 65 20 70 6c 61 63 65 2e 0a 23 0a 23 20 41  ake place..#.# A
7100: 66 66 69 6e 69 74 69 65 73 20 6f 66 20 74 31 20  ffinities of t1 
7110: 28 74 65 73 74 20 63 61 73 65 73 20 33 2e 32 2e  (test cases 3.2.
7120: 31 2e 2a 29 3a 20 54 45 58 54 2c 20 49 4e 54 45  1.*): TEXT, INTE
7130: 47 45 52 2c 20 52 45 41 4c 0a 23 20 41 66 66 69  GER, REAL.# Affi
7140: 6e 69 74 69 65 73 20 6f 66 20 74 32 20 28 74 65  nities of t2 (te
7150: 73 74 20 63 61 73 65 73 20 33 2e 32 2e 32 2e 2a  st cases 3.2.2.*
7160: 29 3a 20 4e 55 4d 45 52 49 43 2c 20 4e 55 4d 45  ): NUMERIC, NUME
7170: 52 49 43 2c 20 52 45 41 4c 0a 23 20 41 66 66 69  RIC, REAL.# Affi
7180: 6e 69 74 69 65 73 20 6f 66 20 74 33 20 28 74 65  nities of t3 (te
7190: 73 74 20 63 61 73 65 73 20 33 2e 32 2e 33 2e 2a  st cases 3.2.3.*
71a0: 29 3a 20 4e 4f 4e 45 2c 20 4e 4f 4e 45 0a 23 0a  ): NONE, NONE.#.
71b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
71c0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
71d0: 32 2e 30 20 7b 20 44 45 4c 45 54 45 20 46 52 4f  2.0 { DELETE FRO
71e0: 4d 20 74 31 3b 20 44 45 4c 45 54 45 20 46 52 4f  M t1; DELETE FRO
71f0: 4d 20 74 32 3b 20 7d 20 7b 7d 0a 0a 64 6f 5f 63  M t2; } {}..do_c
7200: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
7210: 20 33 2e 32 2e 31 20 2d 71 75 65 72 79 20 7b 0a   3.2.1 -query {.
7220: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78    SELECT quote(x
7230: 29 2c 20 71 75 6f 74 65 28 79 29 2c 20 71 75 6f  ), quote(y), quo
7240: 74 65 28 7a 29 20 46 52 4f 4d 20 74 31 20 4f 52  te(z) FROM t1 OR
7250: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
7260: 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20  C LIMIT 1;.} {. 
7270: 20 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   1   "INSERT INT
7280: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 35 2c 20  O t1 VALUES(15, 
7290: 20 20 27 32 32 2e 30 27 2c 20 27 31 34 27 29 22    '22.0', '14')"
72a0: 20 20 20 7b 27 31 35 27 20 32 32 20 31 34 2e 30     {'15' 22 14.0
72b0: 7d 0a 20 20 32 20 20 20 22 49 4e 53 45 52 54 20  }.  2   "INSERT 
72c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
72d0: 32 2e 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29  2.0, 22.0, 22.0)
72e0: 22 20 20 20 20 20 7b 27 32 32 2e 30 27 20 32 32  "     {'22.0' 22
72f0: 20 32 32 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61   22.0}.}.do_crea
7300: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e  tetable_tests 3.
7310: 32 2e 32 20 2d 71 75 65 72 79 20 7b 0a 20 20 53  2.2 -query {.  S
7320: 45 4c 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20  ELECT quote(a), 
7330: 71 75 6f 74 65 28 62 29 2c 20 71 75 6f 74 65 28  quote(b), quote(
7340: 63 29 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52  c) FROM t2 ORDER
7350: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c   BY rowid DESC L
7360: 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20  IMIT 1;.} {.  1 
7370: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
7380: 32 20 56 41 4c 55 45 53 28 31 35 2c 20 20 20 27  2 VALUES(15,   '
7390: 32 32 2e 30 27 2c 20 27 31 34 27 29 22 20 20 20  22.0', '14')"   
73a0: 7b 31 35 20 20 20 32 32 20 20 31 34 2e 30 7d 0a  {15   22  14.0}.
73b0: 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e    2   "INSERT IN
73c0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32 2e  TO t2 VALUES(22.
73d0: 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20  0, 22.0, 22.0)" 
73e0: 20 20 20 20 7b 32 32 20 20 20 32 32 20 20 32 32      {22   22  22
73f0: 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74  .0}.}.do_createt
7400: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33  able_tests 3.2.3
7410: 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45   -query {.  SELE
7420: 43 54 20 71 75 6f 74 65 28 6f 29 2c 20 71 75 6f  CT quote(o), quo
7430: 74 65 28 74 29 20 46 52 4f 4d 20 74 33 20 4f 52  te(t) FROM t3 OR
7440: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
7450: 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20  C LIMIT 1;.} {. 
7460: 20 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   1   "INSERT INT
7470: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 31 35 27  O t3 VALUES('15'
7480: 2c 20 27 32 32 2e 30 27 29 22 20 20 20 20 20 20  , '22.0')"      
7490: 20 20 20 7b 27 31 35 27 20 27 32 32 2e 30 27 7d     {'15' '22.0'}
74a0: 0a 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49  .  2   "INSERT I
74b0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 35  NTO t3 VALUES(15
74c0: 2c 20 32 32 2e 30 29 22 20 20 20 20 20 20 20 20  , 22.0)"        
74d0: 20 20 20 20 20 7b 31 35 20 32 32 2e 30 7d 0a 7d       {15 22.0}.}
74e0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
74f0: 20 52 2d 34 32 33 31 36 2d 30 39 35 38 32 20 49   R-42316-09582 I
7500: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78  f there is no ex
7510: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
7520: 6c 61 75 73 65 0a 23 20 61 74 74 61 63 68 65 64  lause.# attached
7530: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
7540: 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  inition, then th
7550: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7560: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 23 20  of the column.# 
7570: 69 73 20 4e 55 4c 4c 2e 0a 23 0a 23 20 20 20 20  is NULL..#.#    
7580: 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c   None of the col
7590: 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20 74 31  umns in table t1
75a0: 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
75b0: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
75c0: 2e 0a 23 20 20 20 20 20 53 6f 20 74 65 73 74 69  ..#     So testi
75d0: 6e 67 20 74 68 61 74 20 74 68 65 20 64 65 66 61  ng that the defa
75e0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ult value of all
75f0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c   columns in tabl
7600: 65 20 74 31 20 69 73 0a 23 20 20 20 20 20 4e 55  e t1 is.#     NU
7610: 4c 4c 20 73 65 72 76 65 73 20 74 6f 20 76 65 72  LL serves to ver
7620: 69 66 79 20 74 68 65 20 61 62 6f 76 65 2e 0a 23  ify the above..#
7630: 20 20 20 20 20 0a 64 6f 5f 63 72 65 61 74 65 74       .do_createt
7640: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33  able_tests 3.2.3
7650: 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45   -query {.  SELE
7660: 43 54 20 71 75 6f 74 65 28 78 29 2c 20 71 75 6f  CT quote(x), quo
7670: 74 65 28 79 29 2c 20 71 75 6f 74 65 28 7a 29 20  te(y), quote(z) 
7680: 46 52 4f 4d 20 74 31 0a 7d 20 2d 72 65 70 61 69  FROM t1.} -repai
7690: 72 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  r {.  execsql { 
76a0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d  DELETE FROM t1 }
76b0: 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
76c0: 52 54 20 49 4e 54 4f 20 74 31 28 78 2c 20 79 29  RT INTO t1(x, y)
76d0: 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20 27   VALUES('abc', '
76e0: 78 79 7a 27 29 22 20 20 20 7b 27 61 62 63 27 20  xyz')"   {'abc' 
76f0: 27 78 79 7a 27 20 4e 55 4c 4c 7d 0a 20 20 32 20  'xyz' NULL}.  2 
7700: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
7710: 31 28 78 2c 20 7a 29 20 56 41 4c 55 45 53 28 27  1(x, z) VALUES('
7720: 61 62 63 27 2c 20 27 78 79 7a 27 29 22 20 20 20  abc', 'xyz')"   
7730: 7b 27 61 62 63 27 20 4e 55 4c 4c 20 27 78 79 7a  {'abc' NULL 'xyz
7740: 27 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54  '}.  3   "INSERT
7750: 20 49 4e 54 4f 20 74 31 20 44 45 46 41 55 4c 54   INTO t1 DEFAULT
7760: 20 56 41 4c 55 45 53 22 20 20 20 20 20 20 20 20   VALUES"        
7770: 20 20 20 20 20 20 20 7b 4e 55 4c 4c 20 4e 55 4c         {NULL NUL
7780: 4c 20 4e 55 4c 4c 7d 0a 7d 0a 0a 23 20 45 56 49  L NULL}.}..# EVI
7790: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 32 39 34  DENCE-OF: R-6294
77a0: 30 2d 34 33 30 30 35 20 41 6e 20 65 78 70 6c 69  0-43005 An expli
77b0: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
77c0: 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 20 74  se may specify t
77d0: 68 61 74 0a 23 20 74 68 65 20 64 65 66 61 75 6c  hat.# the defaul
77e0: 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  t value is NULL,
77f0: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   a string consta
7800: 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  nt, a blob const
7810: 61 6e 74 2c 20 61 0a 23 20 73 69 67 6e 65 64 2d  ant, a.# signed-
7820: 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63  number, or any c
7830: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
7840: 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  on enclosed in p
7850: 61 72 65 6e 74 68 65 73 65 73 2e 20 41 6e 0a 23  arentheses. An.#
7860: 20 65 78 70 6c 69 63 69 74 20 64 65 66 61 75 6c   explicit defaul
7870: 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f  t value may also
7880: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73   be one of the s
7890: 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65  pecial case-inde
78a0: 70 65 6e 64 65 6e 74 0a 23 20 6b 65 79 77 6f 72  pendent.# keywor
78b0: 64 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds CURRENT_TIME,
78c0: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
78d0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
78e0: 4d 50 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  MP..#.do_execsql
78f0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
7900: 62 6c 65 2d 33 2e 33 2e 31 20 7b 0a 20 20 43 52  ble-3.3.1 {.  CR
7910: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 0a 20  EATE TABLE t4(. 
7920: 20 20 20 61 20 44 45 46 41 55 4c 54 20 4e 55 4c     a DEFAULT NUL
7930: 4c 2c 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54  L,.    b DEFAULT
7940: 20 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e   'string constan
7950: 74 27 2c 0a 20 20 20 20 63 20 44 45 46 41 55 4c  t',.    c DEFAUL
7960: 54 20 58 27 34 32 34 43 34 46 34 32 27 2c 0a 20  T X'424C4F42',. 
7970: 20 20 20 64 20 44 45 46 41 55 4c 54 20 31 2c 0a     d DEFAULT 1,.
7980: 20 20 20 20 65 20 44 45 46 41 55 4c 54 20 2d 31      e DEFAULT -1
7990: 2c 0a 20 20 20 20 66 20 44 45 46 41 55 4c 54 20  ,.    f DEFAULT 
79a0: 33 2e 31 34 2c 0a 20 20 20 20 67 20 44 45 46 41  3.14,.    g DEFA
79b0: 55 4c 54 20 2d 33 2e 31 34 2c 0a 20 20 20 20 68  ULT -3.14,.    h
79c0: 20 44 45 46 41 55 4c 54 20 28 20 73 75 62 73 74   DEFAULT ( subst
79d0: 72 28 27 61 62 63 64 27 2c 20 30 2c 20 32 29 20  r('abcd', 0, 2) 
79e0: 7c 7c 20 27 63 64 27 20 29 2c 0a 20 20 20 20 69  || 'cd' ),.    i
79f0: 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54   DEFAULT CURRENT
7a00: 5f 54 49 4d 45 2c 0a 20 20 20 20 6a 20 44 45 46  _TIME,.    j DEF
7a10: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54  AULT CURRENT_DAT
7a20: 45 2c 0a 20 20 20 20 6b 20 44 45 46 41 55 4c 54  E,.    k DEFAULT
7a30: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
7a40: 4d 50 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 0a 23 20  MP.  );.} {}..# 
7a50: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
7a60: 30 32 38 38 2d 34 33 31 36 39 20 46 6f 72 20 74  0288-43169 For t
7a70: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
7a80: 68 65 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  he DEFAULT claus
7a90: 65 2c 20 61 6e 0a 23 20 65 78 70 72 65 73 73 69  e, an.# expressi
7aa0: 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  on is considered
7ab0: 20 63 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64   constant provid
7ac0: 65 64 20 74 68 61 74 20 69 74 20 64 6f 65 73 20  ed that it does 
7ad0: 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 23 20 61 6e  not contain.# an
7ae0: 79 20 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72  y sub-queries or
7af0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
7b00: 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f  s enclosed in do
7b10: 75 62 6c 65 20 71 75 6f 74 65 73 2e 0a 23 0a 64  uble quotes..#.d
7b20: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
7b30: 73 74 73 20 33 2e 34 2e 31 20 2d 65 72 72 6f 72  sts 3.4.1 -error
7b40: 20 7b 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c   {.  default val
7b50: 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 5b 78 5d  ue of column [x]
7b60: 20 69 73 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74   is not constant
7b70: 0a 7d 20 7b 0a 20 20 31 20 20 20 7b 43 52 45 41  .} {.  1   {CREA
7b80: 54 45 20 54 41 42 4c 45 20 74 35 28 78 20 44 45  TE TABLE t5(x DE
7b90: 46 41 55 4c 54 20 28 20 28 53 45 4c 45 43 54 20  FAULT ( (SELECT 
7ba0: 31 29 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20  1) ))}  {}.  2  
7bb0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
7bc0: 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 22 61  5(x DEFAULT ( "a
7bd0: 62 63 22 20 29 29 7d 20 20 7b 7d 0a 20 20 33 20  bc" ))}  {}.  3 
7be0: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
7bf0: 74 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 31  t5(x DEFAULT ( 1
7c00: 20 49 4e 20 28 53 45 4c 45 43 54 20 31 29 20 29   IN (SELECT 1) )
7c10: 29 7d 20 20 7b 7d 0a 20 20 34 20 20 20 7b 43 52  )}  {}.  4   {CR
7c20: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 78 20  EATE TABLE t5(x 
7c30: 44 45 46 41 55 4c 54 20 28 20 45 58 49 53 54 53  DEFAULT ( EXISTS
7c40: 20 28 53 45 4c 45 43 54 20 31 29 20 29 29 7d 20   (SELECT 1) ))} 
7c50: 20 7b 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   {}.}.do_createt
7c60: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 34 2e 32  able_tests 3.4.2
7c70: 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61 74   -repair {.  cat
7c80: 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42  chsql { DROP TAB
7c90: 4c 45 20 74 35 20 7d 0a 7d 20 7b 0a 20 20 31 20  LE t5 }.} {.  1 
7ca0: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
7cb0: 74 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 27  t5(x DEFAULT ( '
7cc0: 61 62 63 27 20 29 29 7d 20 20 7b 7d 0a 20 20 32  abc' ))}  {}.  2
7cd0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
7ce0: 20 74 35 28 78 20 44 45 46 41 55 4c 54 20 28 20   t5(x DEFAULT ( 
7cf0: 31 20 49 4e 20 28 31 2c 20 32 2c 20 33 29 20 29  1 IN (1, 2, 3) )
7d00: 29 7d 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44  )}  {}.}..# EVID
7d10: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 38 38 31 34  ENCE-OF: R-18814
7d20: 2d 32 33 35 30 31 20 45 61 63 68 20 74 69 6d 65  -23501 Each time
7d30: 20 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74   a row is insert
7d40: 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ed into the tabl
7d50: 65 0a 23 20 62 79 20 61 6e 20 49 4e 53 45 52 54  e.# by an INSERT
7d60: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
7d70: 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65  does not provide
7d80: 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73   explicit values
7d90: 20 66 6f 72 20 61 6c 6c 0a 23 20 74 61 62 6c 65   for all.# table
7da0: 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c   columns the val
7db0: 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ues stored in th
7dc0: 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65  e new row are de
7dd0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69  termined by thei
7de0: 72 0a 23 20 64 65 66 61 75 6c 74 20 76 61 6c 75  r.# default valu
7df0: 65 73 0a 23 0a 23 20 20 20 20 20 56 65 72 69 66  es.#.#     Verif
7e00: 79 20 74 68 69 73 20 77 69 74 68 20 73 6f 6d 65  y this with some
7e10: 20 61 73 73 65 72 74 20 73 74 61 74 65 6d 65 6e   assert statemen
7e20: 74 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c  ts for which all
7e30: 2c 20 73 6f 6d 65 20 61 6e 64 20 6e 6f 0a 23 20  , some and no.# 
7e40: 20 20 20 20 63 6f 6c 75 6d 6e 73 20 6c 61 63 6b      columns lack
7e50: 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73   explicit values
7e60: 2e 0a 23 0a 73 65 74 20 73 71 6c 69 74 65 5f 63  ..#.set sqlite_c
7e70: 75 72 72 65 6e 74 5f 74 69 6d 65 20 31 30 30 30  urrent_time 1000
7e80: 30 30 30 30 30 30 0a 64 6f 5f 63 72 65 61 74 65  000000.do_create
7e90: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 35 20  table_tests 3.5 
7ea0: 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43  -query {.  SELEC
7eb0: 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74  T quote(a), quot
7ec0: 65 28 62 29 2c 20 71 75 6f 74 65 28 63 29 2c 20  e(b), quote(c), 
7ed0: 71 75 6f 74 65 28 64 29 2c 20 71 75 6f 74 65 28  quote(d), quote(
7ee0: 65 29 2c 20 71 75 6f 74 65 28 66 29 2c 20 0a 20  e), quote(f), . 
7ef0: 20 20 20 20 20 20 20 20 71 75 6f 74 65 28 67 29          quote(g)
7f00: 2c 20 71 75 6f 74 65 28 68 29 2c 20 71 75 6f 74  , quote(h), quot
7f10: 65 28 69 29 2c 20 71 75 6f 74 65 28 6a 29 2c 20  e(i), quote(j), 
7f20: 71 75 6f 74 65 28 6b 29 0a 20 20 46 52 4f 4d 20  quote(k).  FROM 
7f30: 74 34 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  t4 ORDER BY rowi
7f40: 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a  d DESC LIMIT 1;.
7f50: 7d 20 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20  } {.  1 "INSERT 
7f60: 49 4e 54 4f 20 74 34 20 44 45 46 41 55 4c 54 20  INTO t4 DEFAULT 
7f70: 56 41 4c 55 45 53 22 20 7b 0a 20 20 20 20 4e 55  VALUES" {.    NU
7f80: 4c 4c 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e 73  LL {'string cons
7f90: 74 61 6e 74 27 7d 20 58 27 34 32 34 43 34 46 34  tant'} X'424C4F4
7fa0: 32 27 20 31 20 2d 31 20 33 2e 31 34 20 2d 33 2e  2' 1 -1 3.14 -3.
7fb0: 31 34 20 0a 20 20 20 20 27 61 63 64 27 20 27 30  14 .    'acd' '0
7fc0: 31 3a 34 36 3a 34 30 27 20 27 32 30 30 31 2d 30  1:46:40' '2001-0
7fd0: 39 2d 30 39 27 20 7b 27 32 30 30 31 2d 30 39 2d  9-09' {'2001-09-
7fe0: 30 39 20 30 31 3a 34 36 3a 34 30 27 7d 0a 20 20  09 01:46:40'}.  
7ff0: 7d 0a 0a 20 20 32 20 22 49 4e 53 45 52 54 20 49  }..  2 "INSERT I
8000: 4e 54 4f 20 74 34 28 61 2c 20 62 2c 20 63 29 20  NTO t4(a, b, c) 
8010: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 22  VALUES(1, 2, 3)"
8020: 20 7b 0a 20 20 20 20 31 20 32 20 33 20 31 20 2d   {.    1 2 3 1 -
8030: 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 27 61 63  1 3.14 -3.14 'ac
8040: 64 27 20 27 30 31 3a 34 36 3a 34 30 27 20 27 32  d' '01:46:40' '2
8050: 30 30 31 2d 30 39 2d 30 39 27 20 7b 27 32 30 30  001-09-09' {'200
8060: 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30  1-09-09 01:46:40
8070: 27 7d 0a 20 20 7d 0a 0a 20 20 33 20 22 49 4e 53  '}.  }..  3 "INS
8080: 45 52 54 20 49 4e 54 4f 20 74 34 28 6b 2c 20 6a  ERT INTO t4(k, j
8090: 2c 20 69 29 20 56 41 4c 55 45 53 28 31 2c 20 32  , i) VALUES(1, 2
80a0: 2c 20 33 29 22 20 7b 0a 20 20 20 20 4e 55 4c 4c  , 3)" {.    NULL
80b0: 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   {'string consta
80c0: 6e 74 27 7d 20 58 27 34 32 34 43 34 46 34 32 27  nt'} X'424C4F42'
80d0: 20 31 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34   1 -1 3.14 -3.14
80e0: 20 27 61 63 64 27 20 33 20 32 20 31 0a 20 20 7d   'acd' 3 2 1.  }
80f0: 0a 0a 20 20 34 20 22 49 4e 53 45 52 54 20 49 4e  ..  4 "INSERT IN
8100: 54 4f 20 74 34 28 61 2c 62 2c 63 2c 64 2c 65 2c  TO t4(a,b,c,d,e,
8110: 66 2c 67 2c 68 2c 69 2c 6a 2c 6b 29 20 56 41 4c  f,g,h,i,j,k) VAL
8120: 55 45 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36 2c  UES(1,2,3,4,5,6,
8130: 37 2c 38 2c 39 2c 31 30 2c 31 31 29 22 20 7b 0a  7,8,9,10,11)" {.
8140: 20 20 20 20 31 20 32 20 33 20 34 20 35 20 36 20      1 2 3 4 5 6 
8150: 37 20 38 20 39 20 31 30 20 31 31 0a 20 20 7d 0a  7 8 9 10 11.  }.
8160: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
8170: 3a 20 52 2d 31 32 35 37 32 2d 36 32 35 30 31 20  : R-12572-62501 
8180: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
8190: 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  alue of the colu
81a0: 6d 6e 20 69 73 20 61 0a 23 20 63 6f 6e 73 74 61  mn is a.# consta
81b0: 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62  nt NULL, text, b
81c0: 6c 6f 62 20 6f 72 20 73 69 67 6e 65 64 2d 6e 75  lob or signed-nu
81d0: 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e  mber value, then
81e0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 0a 23   that value is.#
81f0: 20 75 73 65 64 20 64 69 72 65 63 74 6c 79 20 69   used directly i
8200: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 23  n the new row..#
8210: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
8220: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
8230: 2e 36 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  .6.1 {.  CREATE 
8240: 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 61 20  TABLE t5(.    a 
8250: 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 20 0a  DEFAULT NULL,  .
8260: 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 27 74      b DEFAULT 't
8270: 65 78 74 20 76 61 6c 75 65 27 2c 20 20 0a 20 20  ext value',  .  
8280: 20 20 63 20 44 45 46 41 55 4c 54 20 58 27 34 32    c DEFAULT X'42
8290: 34 43 34 46 34 32 27 2c 0a 20 20 20 20 64 20 44  4C4F42',.    d D
82a0: 45 46 41 55 4c 54 20 2d 34 35 36 37 38 2e 36 2c  EFAULT -45678.6,
82b0: 0a 20 20 20 20 65 20 44 45 46 41 55 4c 54 20 33  .    e DEFAULT 3
82c0: 39 34 35 30 37 0a 20 20 29 3b 0a 7d 20 7b 7d 0a  94507.  );.} {}.
82d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
82e0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
82f0: 36 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  6.2 {.  INSERT I
8300: 4e 54 4f 20 74 35 20 44 45 46 41 55 4c 54 20 56  NTO t5 DEFAULT V
8310: 41 4c 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20  ALUES;.  SELECT 
8320: 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28  quote(a), quote(
8330: 62 29 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75  b), quote(c), qu
8340: 6f 74 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29  ote(d), quote(e)
8350: 20 46 52 4f 4d 20 74 35 3b 0a 7d 20 7b 4e 55 4c   FROM t5;.} {NUL
8360: 4c 20 7b 27 74 65 78 74 20 76 61 6c 75 65 27 7d  L {'text value'}
8370: 20 58 27 34 32 34 43 34 46 34 32 27 20 2d 34 35   X'424C4F42' -45
8380: 36 37 38 2e 36 20 33 39 34 35 30 37 7d 0a 0a 23  678.6 394507}..#
8390: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
83a0: 36 30 36 31 36 2d 35 30 32 35 31 20 49 66 20 74  60616-50251 If t
83b0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
83c0: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20   of a column is 
83d0: 61 6e 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 20  an.# expression 
83e0: 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20  in parentheses, 
83f0: 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73 73  then the express
8400: 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
8410: 20 6f 6e 63 65 20 66 6f 72 0a 23 20 65 61 63 68   once for.# each
8420: 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e   row inserted an
8430: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 75 73  d the results us
8440: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
8450: 77 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63 61  w..#.#   Test ca
8460: 73 65 20 33 2e 36 2e 34 20 64 65 6d 6f 6e 73 74  se 3.6.4 demonst
8470: 72 61 74 65 73 20 74 68 61 74 20 74 68 65 20 65  rates that the e
8480: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
8490: 6c 75 61 74 65 64 20 0a 23 20 20 20 73 65 70 61  luated .#   sepa
84a0: 72 61 74 65 6c 79 20 66 6f 72 20 65 61 63 68 20  rately for each 
84b0: 72 6f 77 20 69 66 20 74 68 65 20 49 4e 53 45 52  row if the INSER
84c0: 54 20 69 73 20 61 6e 20 22 49 4e 53 45 52 54 20  T is an "INSERT 
84d0: 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
84e0: 2e 2e 2e 22 0a 23 20 20 20 63 6f 6d 6d 61 6e 64  ...".#   command
84f0: 2e 0a 23 0a 73 65 74 20 3a 3a 6e 65 78 74 69 6e  ..#.set ::nextin
8500: 74 20 30 0a 70 72 6f 63 20 6e 65 78 74 69 6e 74  t 0.proc nextint
8510: 20 7b 7d 20 7b 20 69 6e 63 72 20 3a 3a 6e 65 78   {} { incr ::nex
8520: 74 69 6e 74 20 7d 0a 64 62 20 66 75 6e 63 20 6e  tint }.db func n
8530: 65 78 74 69 6e 74 20 6e 65 78 74 69 6e 74 0a 0a  extint nextint..
8540: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
8550: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
8560: 37 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  7.1 {.  CREATE T
8570: 41 42 4c 45 20 74 36 28 61 20 44 45 46 41 55 4c  ABLE t6(a DEFAUL
8580: 54 20 28 20 6e 65 78 74 69 6e 74 28 29 20 29 2c  T ( nextint() ),
8590: 20 62 20 44 45 46 41 55 4c 54 20 28 20 6e 65 78   b DEFAULT ( nex
85a0: 74 69 6e 74 28 29 20 29 29 3b 0a 7d 20 7b 7d 0a  tint() ));.} {}.
85b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
85c0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
85d0: 37 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  7.2 {.  INSERT I
85e0: 4e 54 4f 20 74 36 20 44 45 46 41 55 4c 54 20 56  NTO t6 DEFAULT V
85f0: 41 4c 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20  ALUES;.  SELECT 
8600: 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28  quote(a), quote(
8610: 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31  b) FROM t6;.} {1
8620: 20 32 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   2}.do_execsql_t
8630: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
8640: 65 2d 33 2e 37 2e 33 20 7b 0a 20 20 49 4e 53 45  e-3.7.3 {.  INSE
8650: 52 54 20 49 4e 54 4f 20 74 36 28 61 29 20 56 41  RT INTO t6(a) VA
8660: 4c 55 45 53 28 27 58 27 29 3b 0a 20 20 53 45 4c  LUES('X');.  SEL
8670: 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75  ECT quote(a), qu
8680: 6f 74 65 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a  ote(b) FROM t6;.
8690: 7d 20 7b 31 20 32 20 27 58 27 20 33 7d 0a 64 6f  } {1 2 'X' 3}.do
86a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
86b0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e  createtable-3.7.
86c0: 34 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  4 {.  INSERT INT
86d0: 4f 20 74 36 28 61 29 20 53 45 4c 45 43 54 20 61  O t6(a) SELECT a
86e0: 20 46 52 4f 4d 20 74 36 3b 0a 20 20 53 45 4c 45   FROM t6;.  SELE
86f0: 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f  CT quote(a), quo
8700: 74 65 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d  te(b) FROM t6;.}
8710: 20 7b 31 20 32 20 27 58 27 20 33 20 31 20 34 20   {1 2 'X' 3 1 4 
8720: 27 58 27 20 35 7d 0a 0a 23 20 45 56 49 44 45 4e  'X' 5}..# EVIDEN
8730: 43 45 2d 4f 46 3a 20 52 2d 31 35 33 36 33 2d 35  CE-OF: R-15363-5
8740: 35 32 33 30 20 49 66 20 74 68 65 20 64 65 66 61  5230 If the defa
8750: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63  ult value of a c
8760: 6f 6c 75 6d 6e 20 69 73 0a 23 20 43 55 52 52 45  olumn is.# CURRE
8770: 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54  NT_TIME, CURRENT
8780: 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54  _DATE or CURRENT
8790: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e  _TIMESTAMP, then
87a0: 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 0a   the value used.
87b0: 23 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  # in the new row
87c0: 20 69 73 20 61 20 74 65 78 74 20 72 65 70 72 65   is a text repre
87d0: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
87e0: 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61 74   current UTC dat
87f0: 65 20 61 6e 64 2f 6f 72 0a 23 20 74 69 6d 65 2e  e and/or.# time.
8800: 0a 23 0a 23 20 20 20 20 20 54 68 69 73 20 69 73  .#.#     This is
8810: 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 74 65   difficult to te
8820: 73 74 20 6c 69 74 65 72 61 6c 6c 79 20 77 69 74  st literally wit
8830: 68 6f 75 74 20 6b 6e 6f 77 69 6e 67 20 77 68 61  hout knowing wha
8840: 74 20 74 69 6d 65 20 74 68 65 20 0a 23 20 20 20  t time the .#   
8850: 20 20 75 73 65 72 20 77 69 6c 6c 20 72 75 6e 20    user will run 
8860: 74 68 65 20 74 65 73 74 73 2e 20 49 6e 73 74 65  the tests. Inste
8870: 61 64 2c 20 77 65 20 74 65 73 74 20 74 68 61 74  ad, we test that
8880: 20 74 68 65 20 74 68 72 65 65 20 63 61 73 65 73   the three cases
8890: 0a 23 20 20 20 20 20 61 62 6f 76 65 20 73 65 74  .#     above set
88a0: 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 74 68   the value to th
88b0: 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 20 61  e current date a
88c0: 6e 64 2f 6f 72 20 74 69 6d 65 20 61 63 63 6f 72  nd/or time accor
88d0: 64 69 6e 67 20 74 6f 0a 23 20 20 20 20 20 74 68  ding to.#     th
88e0: 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 28 29  e xCurrentTime()
88f0: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 56   method of the V
8900: 46 53 2e 20 57 68 69 63 68 20 69 73 20 75 73 75  FS. Which is usu
8910: 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 0a 23 20  ally the same.# 
8920: 20 20 20 20 61 73 20 55 54 43 2e 20 49 6e 20 74      as UTC. In t
8930: 68 69 73 20 63 61 73 65 2c 20 68 6f 77 65 76 65  his case, howeve
8940: 72 2c 20 77 65 20 69 6e 73 74 72 75 6d 65 6e 74  r, we instrument
8950: 20 69 74 20 74 6f 20 61 6c 77 61 79 73 20 72 65   it to always re
8960: 74 75 72 6e 0a 23 20 20 20 20 20 61 20 74 69 6d  turn.#     a tim
8970: 65 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  e equivalent to 
8980: 22 32 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34  "2001-09-09 01:4
8990: 36 3a 34 30 20 55 54 43 22 2e 0a 23 0a 73 65 74  6:40 UTC"..#.set
89a0: 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f   sqlite_current_
89b0: 74 69 6d 65 20 31 30 30 30 30 30 30 30 30 30 0a  time 1000000000.
89c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
89d0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
89e0: 38 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  8.1 {.  CREATE T
89f0: 41 42 4c 45 20 74 37 28 0a 20 20 20 20 61 20 44  ABLE t7(.    a D
8a00: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
8a10: 49 4d 45 2c 20 0a 20 20 20 20 62 20 44 45 46 41  IME, .    b DEFA
8a20: 55 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ULT CURRENT_DATE
8a30: 2c 20 0a 20 20 20 20 63 20 44 45 46 41 55 4c 54  , .    c DEFAULT
8a40: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
8a50: 4d 50 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f  MP.  );.} {}.do_
8a60: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
8a70: 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e 32  reatetable-3.8.2
8a80: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
8a90: 20 74 37 20 44 45 46 41 55 4c 54 20 56 41 4c 55   t7 DEFAULT VALU
8aa0: 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f  ES;.  SELECT quo
8ab0: 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29 2c  te(a), quote(b),
8ac0: 20 71 75 6f 74 65 28 63 29 20 46 52 4f 4d 20 74   quote(c) FROM t
8ad0: 37 3b 0a 7d 20 7b 27 30 31 3a 34 36 3a 34 30 27  7;.} {'01:46:40'
8ae0: 20 27 32 30 30 31 2d 30 39 2d 30 39 27 20 7b 27   '2001-09-09' {'
8af0: 32 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36  2001-09-09 01:46
8b00: 3a 34 30 27 7d 7d 0a 0a 0a 23 20 45 56 49 44 45  :40'}}...# EVIDE
8b10: 4e 43 45 2d 4f 46 3a 20 52 2d 36 32 33 32 37 2d  NCE-OF: R-62327-
8b20: 35 33 38 34 33 20 46 6f 72 20 43 55 52 52 45 4e  53843 For CURREN
8b30: 54 5f 54 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d  T_TIME, the form
8b40: 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65 0a  at of the value.
8b50: 23 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e  # is "HH:MM:SS".
8b60: 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .#.# EVIDENCE-OF
8b70: 3a 20 52 2d 30 33 37 37 35 2d 34 33 34 37 31 20  : R-03775-43471 
8b80: 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45  For CURRENT_DATE
8b90: 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 0a  , "YYYY-MM-DD"..
8ba0: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
8bb0: 20 52 2d 30 37 36 37 37 2d 34 34 39 32 36 20 54   R-07677-44926 T
8bc0: 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55  he format for CU
8bd0: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20  RRENT_TIMESTAMP 
8be0: 69 73 0a 23 20 22 59 59 59 59 2d 4d 4d 2d 44 44  is.# "YYYY-MM-DD
8bf0: 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 23 0a 23 20   HH:MM:SS"..#.# 
8c00: 20 20 20 20 54 68 65 20 74 68 72 65 65 20 61 62      The three ab
8c10: 6f 76 65 20 61 72 65 20 64 65 6d 6f 6e 73 74 72  ove are demonstr
8c20: 61 74 65 64 20 62 79 20 74 65 73 74 73 20 31 2c  ated by tests 1,
8c30: 20 32 20 61 6e 64 20 33 20 62 65 6c 6f 77 2e 20   2 and 3 below. 
8c40: 0a 23 20 20 20 20 20 52 65 73 70 65 63 74 69 76  .#     Respectiv
8c50: 65 6c 79 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65  ely..#.do_create
8c60: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 38 2e  table_tests 3.8.
8c70: 33 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c  3 -query {.  SEL
8c80: 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d  ECT a, b, c FROM
8c90: 20 74 37 20 4f 52 44 45 52 20 42 59 20 72 6f 77   t7 ORDER BY row
8ca0: 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b  id DESC LIMIT 1;
8cb0: 0a 7d 20 7b 0a 20 20 31 20 22 49 4e 53 45 52 54  .} {.  1 "INSERT
8cc0: 20 49 4e 54 4f 20 74 37 28 62 2c 20 63 29 20 56   INTO t7(b, c) V
8cd0: 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29 22  ALUES('x', 'y')"
8ce0: 20 7b 30 31 3a 34 36 3a 34 30 20 78 20 79 7d 0a   {01:46:40 x y}.
8cf0: 20 20 32 20 22 49 4e 53 45 52 54 20 49 4e 54 4f    2 "INSERT INTO
8d00: 20 74 37 28 63 2c 20 61 29 20 56 41 4c 55 45 53   t7(c, a) VALUES
8d10: 28 27 78 27 2c 20 27 79 27 29 22 20 7b 79 20 32  ('x', 'y')" {y 2
8d20: 30 30 31 2d 30 39 2d 30 39 20 78 7d 0a 20 20 33  001-09-09 x}.  3
8d30: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37   "INSERT INTO t7
8d40: 28 61 2c 20 62 29 20 56 41 4c 55 45 53 28 27 78  (a, b) VALUES('x
8d50: 27 2c 20 27 79 27 29 22 20 7b 78 20 79 20 7b 32  ', 'y')" {x y {2
8d60: 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a  001-09-09 01:46:
8d70: 34 30 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  40}}.}..# EVIDEN
8d80: 43 45 2d 4f 46 3a 20 52 2d 35 35 30 36 31 2d 34  CE-OF: R-55061-4
8d90: 37 37 35 34 20 54 68 65 20 43 4f 4c 4c 41 54 45  7754 The COLLATE
8da0: 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65   clause specifie
8db0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 0a  s the name of a.
8dc0: 23 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  # collating sequ
8dd0: 65 6e 63 65 20 74 6f 20 75 73 65 20 61 73 20 74  ence to use as t
8de0: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8df0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f  tion sequence fo
8e00: 72 20 74 68 65 0a 23 20 63 6f 6c 75 6d 6e 2e 0a  r the.# column..
8e10: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
8e20: 20 52 2d 34 30 32 37 35 2d 35 34 33 36 33 20 49   R-40275-54363 I
8e30: 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61  f no COLLATE cla
8e40: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
8e50: 2c 20 74 68 65 0a 23 20 64 65 66 61 75 6c 74 20  , the.# default 
8e60: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
8e70: 63 65 20 69 73 20 42 49 4e 41 52 59 2e 0a 23 0a  ce is BINARY..#.
8e80: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
8e90: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2d  e_createtable-3-
8ea0: 39 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  9.1 {.  CREATE T
8eb0: 41 42 4c 45 20 74 38 28 61 20 43 4f 4c 4c 41 54  ABLE t8(a COLLAT
8ec0: 45 20 6e 6f 63 61 73 65 2c 20 62 20 43 4f 4c 4c  E nocase, b COLL
8ed0: 41 54 45 20 72 74 72 69 6d 2c 20 63 20 43 4f 4c  ATE rtrim, c COL
8ee0: 4c 41 54 45 20 62 69 6e 61 72 79 2c 20 64 29 3b  LATE binary, d);
8ef0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
8f00: 38 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20  8 VALUES('abc', 
8f10: 20 20 27 61 62 63 27 2c 20 20 20 27 61 62 63 27    'abc',   'abc'
8f20: 2c 20 20 20 27 61 62 63 27 29 3b 0a 20 20 49 4e  ,   'abc');.  IN
8f30: 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c  SERT INTO t8 VAL
8f40: 55 45 53 28 27 61 62 63 20 20 27 2c 20 27 61 62  UES('abc  ', 'ab
8f50: 63 20 20 27 2c 20 27 61 62 63 20 20 27 2c 20 27  c  ', 'abc  ', '
8f60: 61 62 63 20 20 27 29 3b 0a 20 20 49 4e 53 45 52  abc  ');.  INSER
8f70: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
8f80: 28 27 41 42 43 20 20 27 2c 20 27 41 42 43 20 20  ('ABC  ', 'ABC  
8f90: 27 2c 20 27 41 42 43 20 20 27 2c 20 27 41 42 43  ', 'ABC  ', 'ABC
8fa0: 20 20 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49    ');.  INSERT I
8fb0: 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27 41  NTO t8 VALUES('A
8fc0: 42 43 27 2c 20 20 20 27 41 42 43 27 2c 20 20 20  BC',   'ABC',   
8fd0: 27 41 42 43 27 2c 20 20 20 27 41 42 43 27 29 3b  'ABC',   'ABC');
8fe0: 0a 7d 20 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74  .} {}.do_createt
8ff0: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 39 20 7b  able_tests 3.9 {
9000: 0a 20 20 32 20 20 20 20 22 53 45 4c 45 43 54 20  .  2    "SELECT 
9010: 61 20 46 52 4f 4d 20 74 38 20 4f 52 44 45 52 20  a FROM t8 ORDER 
9020: 42 59 20 61 2c 20 72 6f 77 69 64 22 20 20 20 20  BY a, rowid"    
9030: 7b 61 62 63 20 41 42 43 20 7b 61 62 63 20 20 7d  {abc ABC {abc  }
9040: 20 7b 41 42 43 20 20 7d 7d 0a 20 20 33 20 20 20   {ABC  }}.  3   
9050: 20 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20   "SELECT b FROM 
9060: 74 38 20 4f 52 44 45 52 20 42 59 20 62 2c 20 72  t8 ORDER BY b, r
9070: 6f 77 69 64 22 20 20 20 20 7b 7b 41 42 43 20 20  owid"    {{ABC  
9080: 7d 20 41 42 43 20 61 62 63 20 7b 61 62 63 20 20  } ABC abc {abc  
9090: 7d 7d 0a 20 20 34 20 20 20 20 22 53 45 4c 45 43  }}.  4    "SELEC
90a0: 54 20 63 20 46 52 4f 4d 20 74 38 20 4f 52 44 45  T c FROM t8 ORDE
90b0: 52 20 42 59 20 63 2c 20 72 6f 77 69 64 22 20 20  R BY c, rowid"  
90c0: 20 20 7b 41 42 43 20 7b 41 42 43 20 20 7d 20 61    {ABC {ABC  } a
90d0: 62 63 20 7b 61 62 63 20 20 7d 7d 0a 20 20 35 20  bc {abc  }}.  5 
90e0: 20 20 20 22 53 45 4c 45 43 54 20 64 20 46 52 4f     "SELECT d FRO
90f0: 4d 20 74 38 20 4f 52 44 45 52 20 42 59 20 64 2c  M t8 ORDER BY d,
9100: 20 72 6f 77 69 64 22 20 20 20 20 7b 41 42 43 20   rowid"    {ABC 
9110: 7b 41 42 43 20 20 7d 20 61 62 63 20 7b 61 62 63  {ABC  } abc {abc
9120: 20 20 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e    }}.}..# EVIDEN
9130: 43 45 2d 4f 46 3a 20 52 2d 32 35 34 37 33 2d 32  CE-OF: R-25473-2
9140: 30 35 35 37 20 54 68 65 20 6e 75 6d 62 65 72 20  0557 The number 
9150: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  of columns in a 
9160: 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64  table is limited
9170: 0a 23 20 62 79 20 74 68 65 20 53 51 4c 49 54 45  .# by the SQLITE
9180: 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 20 63 6f 6d 70  _MAX_COLUMN comp
9190: 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74  ile-time paramet
91a0: 65 72 2e 0a 23 0a 70 72 6f 63 20 63 6f 6c 75 6d  er..#.proc colum
91b0: 6e 73 20 7b 6e 7d 20 7b 0a 20 20 73 65 74 20 72  ns {n} {.  set r
91c0: 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20  es [list].  for 
91d0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
91e0: 24 6e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 20 6c  $n} {incr i} { l
91f0: 61 70 70 65 6e 64 20 72 65 73 20 22 63 24 69 22  append res "c$i"
9200: 20 7d 0a 20 20 6a 6f 69 6e 20 24 72 65 73 20 22   }.  join $res "
9210: 2c 20 22 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  , ".}.do_execsql
9220: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
9230: 62 6c 65 2d 33 2e 31 30 2e 31 20 5b 73 75 62 73  ble-3.10.1 [subs
9240: 74 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  t {.  CREATE TAB
9250: 4c 45 20 74 39 28 5b 63 6f 6c 75 6d 6e 73 20 24  LE t9([columns $
9260: 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c  ::SQLITE_MAX_COL
9270: 55 4d 4e 5d 29 3b 0a 7d 5d 20 7b 7d 0a 64 6f 5f  UMN]);.}] {}.do_
9280: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f  catchsql_test e_
9290: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 30  createtable-3.10
92a0: 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52  .2 [subst {.  CR
92b0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 5b  EATE TABLE t10([
92c0: 63 6f 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24 3a  columns [expr $:
92d0: 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55  :SQLITE_MAX_COLU
92e0: 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b  MN+1]]);.}] {1 {
92f0: 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73  too many columns
9300: 20 6f 6e 20 74 31 30 7d 7d 0a 0a 23 20 45 56 49   on t10}}..# EVI
9310: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 37 37 37  DENCE-OF: R-2777
9320: 35 2d 36 34 37 32 31 20 42 6f 74 68 20 6f 66 20  5-64721 Both of 
9330: 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e  these limits can
9340: 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a 23   be lowered at.#
9350: 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74   runtime using t
9360: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
9370: 28 29 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61  () C/C++ interfa
9380: 63 65 2e 0a 23 0a 23 20 20 20 41 20 33 30 2c 30  ce..#.#   A 30,0
9390: 30 30 20 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e  00 byte blob con
93a0: 73 75 6d 65 73 20 33 30 2c 30 30 33 20 62 79 74  sumes 30,003 byt
93b0: 65 73 20 6f 66 20 72 65 63 6f 72 64 20 73 70 61  es of record spa
93c0: 63 65 2e 20 41 20 72 65 63 6f 72 64 20 0a 23 20  ce. A record .# 
93d0: 20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20    that contains 
93e0: 33 20 73 75 63 68 20 62 6c 6f 62 73 20 63 6f 6e  3 such blobs con
93f0: 73 75 6d 65 73 20 28 33 30 2c 30 30 30 2a 33 29  sumes (30,000*3)
9400: 2b 31 20 62 79 74 65 73 20 6f 66 20 73 70 61 63  +1 bytes of spac
9410: 65 2e 20 54 65 73 74 73 0a 23 20 20 20 33 2e 31  e. Tests.#   3.1
9420: 31 2e 34 20 61 6e 64 20 33 2e 31 31 2e 35 2c 20  1.4 and 3.11.5, 
9430: 77 68 69 63 68 20 76 65 72 69 66 79 20 74 68 61  which verify tha
9440: 74 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  t SQLITE_MAX_LEN
9450: 47 54 48 20 6d 61 79 20 62 65 20 6c 6f 77 65 72  GTH may be lower
9460: 65 64 0a 23 20 20 20 61 74 20 72 75 6e 74 69 6d  ed.#   at runtim
9470: 65 2c 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20  e, are based on 
9480: 74 68 69 73 20 63 61 6c 63 75 6c 61 74 69 6f 6e  this calculation
9490: 2e 0a 23 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69  ..#.sqlite3_limi
94a0: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
94b0: 54 5f 43 4f 4c 55 4d 4e 20 35 30 30 0a 64 6f 5f  T_COLUMN 500.do_
94c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
94d0: 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 31 2e  reatetable-3.11.
94e0: 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52 45  1 [subst {.  CRE
94f0: 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 5b 63  ATE TABLE t10([c
9500: 6f 6c 75 6d 6e 73 20 35 30 30 5d 29 3b 0a 7d 5d  olumns 500]);.}]
9510: 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f   {}.do_catchsql_
9520: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
9530: 6c 65 2d 33 2e 31 31 2e 32 20 5b 73 75 62 73 74  le-3.11.2 [subst
9540: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
9550: 45 20 74 31 31 28 5b 63 6f 6c 75 6d 6e 73 20 35  E t11([columns 5
9560: 30 31 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f  01]);.}] {1 {too
9570: 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e   many columns on
9580: 20 74 31 31 7d 7d 0a 0a 23 20 43 68 65 63 6b 20   t11}}..# Check 
9590: 74 68 61 74 20 69 74 20 69 73 20 6e 6f 74 20 70  that it is not p
95a0: 6f 73 73 69 62 6c 65 20 74 6f 20 72 61 69 73 65  ossible to raise
95b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 6d 69   the column limi
95c0: 74 20 61 62 6f 76 65 20 69 74 73 20 0a 23 20 64  t above its .# d
95d0: 65 66 61 75 6c 74 20 63 6f 6d 70 69 6c 65 20 74  efault compile t
95e0: 69 6d 65 20 76 61 6c 75 65 2e 0a 23 0a 73 71 6c  ime value..#.sql
95f0: 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51  ite3_limit db SQ
9600: 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
9610: 4e 20 5b 65 78 70 72 20 24 3a 3a 53 51 4c 49 54  N [expr $::SQLIT
9620: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2b 32 5d 0a  E_MAX_COLUMN+2].
9630: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
9640: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
9650: 2e 31 31 2e 33 20 5b 73 75 62 73 74 20 7b 0a 20  .11.3 [subst {. 
9660: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
9670: 31 28 5b 63 6f 6c 75 6d 6e 73 20 5b 65 78 70 72  1([columns [expr
9680: 20 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43   $::SQLITE_MAX_C
9690: 4f 4c 55 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b  OLUMN+1]]);.}] {
96a0: 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75  1 {too many colu
96b0: 6d 6e 73 20 6f 6e 20 74 31 31 7d 7d 0a 0a 73 71  mns on t11}}..sq
96c0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
96d0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
96e0: 54 48 20 39 30 30 31 30 0a 64 6f 5f 65 78 65 63  TH 90010.do_exec
96f0: 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74  sql_test e_creat
9700: 65 74 61 62 6c 65 2d 33 2e 31 31 2e 34 20 7b 0a  etable-3.11.4 {.
9710: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
9720: 31 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 49  12(a, b, c);.  I
9730: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56  NSERT INTO t12 V
9740: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
9750: 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c  (30000),randombl
9760: 6f 62 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d  ob(30000),random
9770: 62 6c 6f 62 28 33 30 30 30 30 29 29 3b 0a 7d 20  blob(30000));.} 
9780: 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  {}.do_catchsql_t
9790: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
97a0: 65 2d 33 2e 31 31 2e 35 20 7b 0a 20 20 49 4e 53  e-3.11.5 {.  INS
97b0: 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41 4c  ERT INTO t12 VAL
97c0: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  UES(randomblob(3
97d0: 30 30 30 31 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62  0001),randomblob
97e0: 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c  (30000),randombl
97f0: 6f 62 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b 31  ob(30000));.} {1
9800: 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62   {string or blob
9810: 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a 23 2d 2d 2d   too big}}..#---
9820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9860: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 73 20 66  ------.# Tests f
9870: 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 72 65  or statements re
9880: 67 61 72 64 69 6e 67 20 63 6f 6e 73 74 72 61 69  garding constrai
9890: 6e 74 73 20 28 50 52 49 4d 41 52 59 20 4b 45 59  nts (PRIMARY KEY
98a0: 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 0a 23  , UNIQUE, NOT .#
98b0: 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20   NULL and CHECK 
98c0: 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 23 0a  constraints)..#.
98d0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
98e0: 52 2d 35 32 33 38 32 2d 35 34 32 34 38 20 45 61  R-52382-54248 Ea
98f0: 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c 69  ch table in SQLi
9900: 74 65 20 6d 61 79 20 68 61 76 65 20 61 74 20 6d  te may have at m
9910: 6f 73 74 20 6f 6e 65 0a 23 20 50 52 49 4d 41 52  ost one.# PRIMAR
9920: 59 20 4b 45 59 2e 0a 23 20 0a 23 20 45 56 49 44  Y KEY..# .# EVID
9930: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 38 30 38 30  ENCE-OF: R-18080
9940: 2d 34 37 32 37 31 20 49 66 20 74 68 65 72 65 20  -47271 If there 
9950: 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  is more than one
9960: 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 23 20 63   PRIMARY KEY.# c
9970: 6c 61 75 73 65 20 69 6e 20 61 20 73 69 6e 67 6c  lause in a singl
9980: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
9990: 74 61 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20  tatement, it is 
99a0: 61 6e 20 65 72 72 6f 72 2e 0a 23 0a 23 20 20 20  an error..#.#   
99b0: 20 20 54 6f 20 74 65 73 74 20 74 68 65 20 74 77    To test the tw
99c0: 6f 20 61 62 6f 76 65 2c 20 73 68 6f 77 20 74 68  o above, show th
99d0: 61 74 20 7a 65 72 6f 20 70 72 69 6d 61 72 79 20  at zero primary 
99e0: 6b 65 79 73 20 69 73 20 4f 6b 2c 20 6f 6e 65 20  keys is Ok, one 
99f0: 70 72 69 6d 61 72 79 0a 23 20 20 20 20 20 6b 65  primary.#     ke
9a00: 79 20 69 73 20 4f 6b 2c 20 61 6e 64 20 74 77 6f  y is Ok, and two
9a10: 20 6f 72 20 6d 6f 72 65 20 70 72 69 6d 61 72 79   or more primary
9a20: 20 6b 65 79 73 20 69 73 20 61 6e 20 65 72 72 6f   keys is an erro
9a30: 72 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  r..#.drop_all_ta
9a40: 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61  bles.do_createta
9a50: 62 6c 65 5f 74 65 73 74 73 20 34 2e 31 2e 31 20  ble_tests 4.1.1 
9a60: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
9a70: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
9a80: 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  c)"             
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
9ab0: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
9ac0: 4c 45 20 74 32 28 61 20 50 52 49 4d 41 52 59 20  LE t2(a PRIMARY 
9ad0: 4b 45 59 2c 20 62 2c 20 63 29 22 20 20 20 20 20  KEY, b, c)"     
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
9b00: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
9b10: 33 28 61 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41  3(a, b, c, PRIMA
9b20: 52 59 20 4b 45 59 28 61 29 29 22 20 20 20 20 20  RY KEY(a))"     
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52     {}.  4    "CR
9b50: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
9b60: 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b   b, c, PRIMARY K
9b70: 45 59 28 63 2c 62 2c 61 29 29 22 20 20 20 20 20  EY(c,b,a))"     
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9b90: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
9ba0: 6c 65 5f 74 65 73 74 73 20 34 2e 31 2e 32 20 2d  le_tests 4.1.2 -
9bb0: 65 72 72 6f 72 20 7b 0a 20 20 74 61 62 6c 65 20  error {.  table 
9bc0: 22 74 35 22 20 68 61 73 20 6d 6f 72 65 20 74 68  "t5" has more th
9bd0: 61 6e 20 6f 6e 65 20 70 72 69 6d 61 72 79 20 6b  an one primary k
9be0: 65 79 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  ey.} {.  1    "C
9bf0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
9c00: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20   PRIMARY KEY, b 
9c10: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22  PRIMARY KEY, c)"
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c30: 7b 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54  {}.  2    "CREAT
9c40: 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62 20  E TABLE t5(a, b 
9c50: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 2c 20  PRIMARY KEY, c, 
9c60: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22  PRIMARY KEY(a))"
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
9c80: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
9c90: 42 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52  BLE t5(a INTEGER
9ca0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20   PRIMARY KEY, b 
9cb0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22  PRIMARY KEY, c)"
9cc0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20 20          {}.  4  
9cd0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
9ce0: 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t5(a INTEGER PRI
9cf0: 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20  MARY KEY, b, c, 
9d00: 50 52 49 4d 41 52 59 20 4b 45 59 28 62 2c 20 63  PRIMARY KEY(b, c
9d10: 29 29 22 20 7b 7d 0a 20 20 35 20 20 20 20 22 43  ))" {}.  5    "C
9d20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
9d30: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
9d40: 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   c, PRIMARY KEY(
9d50: 61 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20  a))"            
9d60: 7b 7d 0a 20 20 36 20 20 20 20 22 43 52 45 41 54  {}.  6    "CREAT
9d70: 45 20 54 41 42 4c 45 20 74 35 28 61 20 49 4e 54  E TABLE t5(a INT
9d80: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
9d90: 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20  , b, c, PRIMARY 
9da0: 4b 45 59 28 61 29 29 22 20 20 20 20 7b 7d 0a 7d  KEY(a))"    {}.}
9db0: 0a 0a 70 72 6f 63 20 74 61 62 6c 65 5f 70 6b 20  ..proc table_pk 
9dc0: 7b 74 62 6c 7d 20 7b 20 0a 20 20 73 65 74 20 70  {tbl} { .  set p
9dd0: 6b 20 5b 6c 69 73 74 5d 0a 20 20 64 62 20 65 76  k [list].  db ev
9de0: 61 6c 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65  al "pragma table
9df0: 5f 69 6e 66 6f 28 24 74 62 6c 29 22 20 61 20 7b  _info($tbl)" a {
9e00: 0a 20 20 20 20 69 66 20 7b 24 61 28 70 6b 29 7d  .    if {$a(pk)}
9e10: 20 7b 20 6c 61 70 70 65 6e 64 20 70 6b 20 24 61   { lappend pk $a
9e20: 28 6e 61 6d 65 29 20 7d 0a 20 20 7d 0a 20 20 73  (name) }.  }.  s
9e30: 65 74 20 70 6b 0a 7d 0a 0a 23 20 45 56 49 44 45  et pk.}..# EVIDE
9e40: 4e 43 45 2d 4f 46 3a 20 52 2d 34 31 34 31 31 2d  NCE-OF: R-41411-
9e50: 31 38 38 33 37 20 49 66 20 74 68 65 20 6b 65 79  18837 If the key
9e60: 77 6f 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45  words PRIMARY KE
9e70: 59 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  Y are added to a
9e80: 0a 23 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  .# column defini
9e90: 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70  tion, then the p
9ea0: 72 69 6d 61 72 79 20 6b 65 79 20 66 6f 72 20 74  rimary key for t
9eb0: 68 65 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74  he table consist
9ec0: 73 20 6f 66 20 74 68 61 74 0a 23 20 73 69 6e 67  s of that.# sing
9ed0: 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 20  le column..#.#  
9ee0: 20 20 20 54 68 65 20 61 62 6f 76 65 20 69 73 20     The above is 
9ef0: 74 65 73 74 65 64 20 62 79 20 34 2e 32 2e 31 2e  tested by 4.2.1.
9f00: 2a 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  *.#.# EVIDENCE-O
9f10: 46 3a 20 52 2d 33 31 37 37 35 2d 34 38 32 30 34  F: R-31775-48204
9f20: 20 4f 72 2c 20 69 66 20 61 20 50 52 49 4d 41 52   Or, if a PRIMAR
9f30: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 69 73 20  Y KEY clause is 
9f40: 73 70 65 63 69 66 69 65 64 20 61 73 0a 23 20 61  specified as.# a
9f50: 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e   table-constrain
9f60: 74 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  t, then the prim
9f70: 61 72 79 20 6b 65 79 20 6f 66 20 74 68 65 20 74  ary key of the t
9f80: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
9f90: 20 74 68 65 0a 23 20 6c 69 73 74 20 6f 66 20 63   the.# list of c
9fa0: 6f 6c 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64  olumns specified
9fb0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
9fc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
9fd0: 73 65 2e 0a 23 0a 23 20 20 20 20 20 54 68 65 20  se..#.#     The 
9fe0: 61 62 6f 76 65 20 69 73 20 74 65 73 74 65 64 20  above is tested 
9ff0: 62 79 20 34 2e 32 2e 32 2e 2a 0a 23 0a 64 6f 5f  by 4.2.2.*.#.do_
a000: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
a010: 73 20 34 2e 32 20 2d 72 65 70 61 69 72 20 7b 0a  s 4.2 -repair {.
a020: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
a030: 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 2d  P TABLE t5 }.} -
a040: 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62  tclquery {.  tab
a050: 6c 65 5f 70 6b 20 74 35 0a 7d 20 7b 0a 20 20 31  le_pk t5.} {.  1
a060: 2e 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41  .1    "CREATE TA
a070: 42 4c 45 20 74 35 28 61 2c 20 62 20 49 4e 54 45  BLE t5(a, b INTE
a080: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
a090: 20 63 29 22 20 20 20 20 20 20 20 7b 62 7d 0a 20   c)"       {b}. 
a0a0: 20 31 2e 32 20 20 20 20 22 43 52 45 41 54 45 20   1.2    "CREATE 
a0b0: 54 41 42 4c 45 20 74 35 28 61 20 50 52 49 4d 41  TABLE t5(a PRIMA
a0c0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 29 22 20 20  RY KEY, b, c)"  
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61 7d               {a}
a0e0: 0a 0a 20 20 32 2e 31 20 20 20 20 22 43 52 45 41  ..  2.1    "CREA
a0f0: 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62  TE TABLE t5(a, b
a100: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
a110: 28 61 29 29 22 20 20 20 20 20 20 20 20 20 20 20  (a))"           
a120: 7b 61 7d 0a 20 20 32 2e 32 20 20 20 20 22 43 52  {a}.  2.2    "CR
a130: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c  EATE TABLE t5(a,
a140: 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b   b, c, PRIMARY K
a150: 45 59 28 63 2c 62 2c 61 29 29 22 20 20 20 20 20  EY(c,b,a))"     
a160: 20 20 7b 61 20 62 20 63 7d 0a 20 20 32 2e 33 20    {a b c}.  2.3 
a170: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
a180: 20 74 35 28 61 2c 20 62 20 49 4e 54 45 47 45 52   t5(a, b INTEGER
a190: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29   PRIMARY KEY, c)
a1a0: 22 20 20 20 20 20 20 20 7b 62 7d 0a 7d 0a 0a 23  "       {b}.}..#
a1b0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
a1c0: 33 33 39 38 36 2d 30 39 34 31 30 20 45 61 63 68  33986-09410 Each
a1d0: 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20   row in a table 
a1e0: 77 69 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b  with a primary k
a1f0: 65 79 20 6d 75 73 74 0a 23 20 66 65 61 74 75 72  ey must.# featur
a200: 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  e a unique combi
a210: 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73  nation of values
a220: 20 69 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20   in its primary 
a230: 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 23  key columns..#.#
a240: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
a250: 33 39 31 30 32 2d 30 36 37 33 37 20 49 66 20 61  39102-06737 If a
a260: 6e 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  n INSERT or UPDA
a270: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  TE statement att
a280: 65 6d 70 74 73 0a 23 20 74 6f 20 6d 6f 64 69 66  empts.# to modif
a290: 79 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74  y the table cont
a2a0: 65 6e 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20  ent so that two 
a2b0: 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 66 65 61  or more rows fea
a2c0: 74 75 72 65 20 69 64 65 6e 74 69 63 61 6c 0a 23  ture identical.#
a2d0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c   primary key val
a2e0: 75 65 73 2c 20 69 74 20 69 73 20 61 20 63 6f 6e  ues, it is a con
a2f0: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
a300: 6e 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  n..#.drop_all_ta
a310: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
a320: 74 65 73 74 20 34 2e 33 2e 30 20 7b 0a 20 20 43  test 4.3.0 {.  C
a330: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
a340: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29   PRIMARY KEY, y)
a350: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
a360: 74 31 20 56 41 4c 55 45 53 28 30 2c 20 20 20 20  t1 VALUES(0,    
a370: 20 20 20 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20        'zero');. 
a380: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
a390: 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 20 20 20  VALUES(45.5,    
a3a0: 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53     'one');.  INS
a3b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
a3c0: 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27  ES('brambles', '
a3d0: 74 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  two');.  INSERT 
a3e0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58  INTO t1 VALUES(X
a3f0: 27 41 42 43 44 45 46 27 2c 20 20 27 74 68 72 65  'ABCDEF',  'thre
a400: 65 27 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 54  e');..  CREATE T
a410: 41 42 4c 45 20 74 32 28 78 2c 20 79 2c 20 50 52  ABLE t2(x, y, PR
a420: 49 4d 41 52 59 20 4b 45 59 28 78 2c 20 79 29 29  IMARY KEY(x, y))
a430: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
a440: 74 32 20 56 41 4c 55 45 53 28 30 2c 20 20 20 20  t2 VALUES(0,    
a450: 20 20 20 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20        'zero');. 
a460: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
a470: 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 20 20 20  VALUES(45.5,    
a480: 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53     'one');.  INS
a490: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a4a0: 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27  ES('brambles', '
a4b0: 74 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  two');.  INSERT 
a4c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58  INTO t2 VALUES(X
a4d0: 27 41 42 43 44 45 46 27 2c 20 20 27 74 68 72 65  'ABCDEF',  'thre
a4e0: 65 27 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 63 72  e');.} {}..do_cr
a4f0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
a500: 34 2e 33 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25  4.3.1 -error { %
a510: 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20 7b  s not unique } {
a520: 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20  .  1    "INSERT 
a530: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30  INTO t1 VALUES(0
a540: 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20 20  , 0)"           
a550: 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78        {"column x
a560: 20 69 73 22 7d 0a 20 20 32 20 20 20 20 22 49 4e   is"}.  2    "IN
a570: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
a580: 55 45 53 28 34 35 2e 35 2c 20 27 61 62 63 27 29  UES(45.5, 'abc')
a590: 22 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c  "          {"col
a5a0: 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 33 20 20  umn x is"}.  3  
a5b0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
a5c0: 31 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 27 61  1 VALUES(0.0, 'a
a5d0: 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20 20  bc')"           
a5e0: 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a  {"column x is"}.
a5f0: 20 20 34 20 20 20 20 22 49 4e 53 45 52 54 20 49    4    "INSERT I
a600: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 62  NTO t1 VALUES('b
a610: 72 61 6d 62 6c 65 73 27 2c 20 27 61 62 63 27 29  rambles', 'abc')
a620: 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20  "    {"column x 
a630: 69 73 22 7d 0a 20 20 35 20 20 20 20 22 49 4e 53  is"}.  5    "INS
a640: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
a650: 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 27 61  ES(X'ABCDEF', 'a
a660: 62 63 27 29 22 20 20 20 20 20 7b 22 63 6f 6c 75  bc')"     {"colu
a670: 6d 6e 20 78 20 69 73 22 7d 0a 0a 20 20 36 20 20  mn x is"}..  6  
a680: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
a690: 32 20 56 41 4c 55 45 53 28 30 2c 20 27 7a 65 72  2 VALUES(0, 'zer
a6a0: 6f 27 29 22 20 20 20 20 20 20 20 20 20 20 20 20  o')"            
a6b0: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
a6c0: 72 65 22 7d 0a 20 20 37 20 20 20 20 22 49 4e 53  re"}.  7    "INS
a6d0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a6e0: 45 53 28 34 35 2e 35 2c 20 27 6f 6e 65 27 29 22  ES(45.5, 'one')"
a6f0: 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75            {"colu
a700: 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20  mns x, y are"}. 
a710: 20 38 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   8    "INSERT IN
a720: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2e 30  TO t2 VALUES(0.0
a730: 2c 20 27 7a 65 72 6f 27 29 22 20 20 20 20 20 20  , 'zero')"      
a740: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c      {"columns x,
a750: 20 79 20 61 72 65 22 7d 0a 20 20 39 20 20 20 20   y are"}.  9    
a760: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
a770: 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65 73  VALUES('brambles
a780: 27 2c 20 27 74 77 6f 27 29 22 20 20 20 20 7b 22  ', 'two')"    {"
a790: 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65  columns x, y are
a7a0: 22 7d 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52  "}.  10   "INSER
a7b0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
a7c0: 28 58 27 41 42 43 44 45 46 27 2c 20 27 74 68 72  (X'ABCDEF', 'thr
a7d0: 65 65 27 29 22 20 20 20 7b 22 63 6f 6c 75 6d 6e  ee')"   {"column
a7e0: 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 64  s x, y are"}.}.d
a7f0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
a800: 73 74 73 20 34 2e 33 2e 32 20 7b 0a 20 20 31 20  sts 4.3.2 {.  1 
a810: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a820: 74 31 20 56 41 4c 55 45 53 28 2d 31 2c 20 30 29  t1 VALUES(-1, 0)
a830: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
a840: 20 7b 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45   {}.  2    "INSE
a850: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a860: 53 28 34 35 2e 32 2c 20 27 61 62 63 27 29 22 20  S(45.2, 'abc')" 
a870: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20           {}.  3 
a880: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a890: 74 31 20 56 41 4c 55 45 53 28 30 2e 30 31 2c 20  t1 VALUES(0.01, 
a8a0: 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20 20  'abc')"         
a8b0: 20 7b 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45   {}.  4    "INSE
a8c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a8d0: 53 28 27 62 72 61 6d 62 6c 65 27 2c 20 27 61 62  S('bramble', 'ab
a8e0: 63 27 29 22 20 20 20 20 20 7b 7d 0a 20 20 35 20  c')"     {}.  5 
a8f0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a900: 74 31 20 56 41 4c 55 45 53 28 58 27 41 42 43 44  t1 VALUES(X'ABCD
a910: 45 45 27 2c 20 27 61 62 63 27 29 22 20 20 20 20  EE', 'abc')"    
a920: 20 7b 7d 0a 0a 20 20 36 20 20 20 20 22 49 4e 53   {}..  6    "INS
a930: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a940: 45 53 28 30 2c 20 30 29 22 20 20 20 20 20 20 20  ES(0, 0)"       
a950: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 37            {}.  7
a960: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
a970: 20 74 32 20 56 41 4c 55 45 53 28 34 35 2e 35 2c   t2 VALUES(45.5,
a980: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20   'abc')"        
a990: 20 20 7b 7d 0a 20 20 38 20 20 20 20 22 49 4e 53    {}.  8    "INS
a9a0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a9b0: 45 53 28 30 2e 30 2c 20 27 61 62 63 27 29 22 20  ES(0.0, 'abc')" 
a9c0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 39            {}.  9
a9d0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
a9e0: 20 74 32 20 56 41 4c 55 45 53 28 27 62 72 61 6d   t2 VALUES('bram
a9f0: 62 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20 20  bles', 'abc')"  
aa00: 20 20 7b 7d 0a 20 20 31 30 20 20 20 22 49 4e 53    {}.  10   "INS
aa10: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
aa20: 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 27 61  ES(X'ABCDEF', 'a
aa30: 62 63 27 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 64  bc')"     {}.}.d
aa40: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
aa50: 73 74 73 20 34 2e 33 2e 33 20 2d 65 72 72 6f 72  sts 4.3.3 -error
aa60: 20 7b 20 25 73 20 6e 6f 74 20 75 6e 69 71 75 65   { %s not unique
aa70: 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 55 50 44   } {.  1    "UPD
aa80: 41 54 45 20 74 31 20 53 45 54 20 78 3d 30 20 20  ATE t1 SET x=0  
aa90: 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 79           WHERE y
aaa0: 3d 27 74 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c  ='two'"    {"col
aab0: 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20  umn x is"}.  2  
aac0: 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54    "UPDATE t1 SET
aad0: 20 78 3d 27 62 72 61 6d 62 6c 65 73 27 20 20 57   x='brambles'  W
aae0: 48 45 52 45 20 79 3d 27 74 68 72 65 65 27 22 20  HERE y='three'" 
aaf0: 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d   {"column x is"}
ab00: 0a 20 20 33 20 20 20 20 22 55 50 44 41 54 45 20  .  3    "UPDATE 
ab10: 74 31 20 53 45 54 20 78 3d 34 35 2e 35 20 20 20  t1 SET x=45.5   
ab20: 20 20 20 20 20 57 48 45 52 45 20 79 3d 27 7a 65       WHERE y='ze
ab30: 72 6f 27 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 20  ro'"   {"column 
ab40: 78 20 69 73 22 7d 0a 20 20 34 20 20 20 20 22 55  x is"}.  4    "U
ab50: 50 44 41 54 45 20 74 31 20 53 45 54 20 78 3d 58  PDATE t1 SET x=X
ab60: 27 41 42 43 44 45 46 27 20 20 20 57 48 45 52 45  'ABCDEF'   WHERE
ab70: 20 79 3d 27 6f 6e 65 27 22 20 20 20 20 7b 22 63   y='one'"    {"c
ab80: 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 35  olumn x is"}.  5
ab90: 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53      "UPDATE t1 S
aba0: 45 54 20 78 3d 30 2e 30 20 20 20 20 20 20 20 20  ET x=0.0        
abb0: 20 57 48 45 52 45 20 79 3d 27 74 68 72 65 65 27   WHERE y='three'
abc0: 22 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73  "  {"column x is
abd0: 22 7d 0a 0a 20 20 36 20 20 20 20 22 55 50 44 41  "}..  6    "UPDA
abe0: 54 45 20 74 32 20 53 45 54 20 78 3d 30 2c 20 79  TE t2 SET x=0, y
abf0: 3d 27 7a 65 72 6f 27 20 57 48 45 52 45 20 79 3d  ='zero' WHERE y=
ac00: 27 74 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75  'two'"    {"colu
ac10: 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20  mns x, y are"}. 
ac20: 20 37 20 20 20 20 22 55 50 44 41 54 45 20 74 32   7    "UPDATE t2
ac30: 20 53 45 54 20 78 3d 27 62 72 61 6d 62 6c 65 73   SET x='brambles
ac40: 27 2c 20 79 3d 27 74 77 6f 27 20 57 48 45 52 45  ', y='two' WHERE
ac50: 20 79 3d 27 74 68 72 65 65 27 22 20 20 0a 20 20   y='three'"  .  
ac60: 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78       {"columns x
ac70: 2c 20 79 20 61 72 65 22 7d 0a 20 20 38 20 20 20  , y are"}.  8   
ac80: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
ac90: 78 3d 34 35 2e 35 2c 20 79 3d 27 6f 6e 65 27 20  x=45.5, y='one' 
aca0: 57 48 45 52 45 20 79 3d 27 7a 65 72 6f 27 22 20  WHERE y='zero'" 
acb0: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
acc0: 72 65 22 7d 0a 20 20 39 20 20 20 20 22 55 50 44  re"}.  9    "UPD
acd0: 41 54 45 20 74 32 20 53 45 54 20 78 3d 58 27 41  ATE t2 SET x=X'A
ace0: 42 43 44 45 46 27 2c 20 79 3d 27 74 68 72 65 65  BCDEF', y='three
acf0: 27 20 57 48 45 52 45 20 79 3d 27 6f 6e 65 27 22  ' WHERE y='one'"
ad00: 20 0a 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d   .       {"colum
ad10: 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20  ns x, y are"}.  
ad20: 31 30 20 20 20 22 55 50 44 41 54 45 20 74 32 20  10   "UPDATE t2 
ad30: 53 45 54 20 78 3d 30 2e 30 2c 20 79 3d 27 7a 65  SET x=0.0, y='ze
ad40: 72 6f 27 20 20 20 20 20 20 20 20 57 48 45 52 45  ro'        WHERE
ad50: 20 79 3d 27 74 68 72 65 65 27 22 20 20 0a 20 20   y='three'"  .  
ad60: 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78       {"columns x
ad70: 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 0a 0a 23 20  , y are"}.}...# 
ad80: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
ad90: 32 35 37 32 2d 30 32 30 37 38 20 46 6f 72 20 74  2572-02078 For t
ada0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
adb0: 65 74 65 72 6d 69 6e 69 6e 67 20 74 68 65 0a 23  etermining the.#
adc0: 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70   uniqueness of p
add0: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
ade0: 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  s, NULL values a
adf0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
ae00: 73 74 69 6e 63 74 0a 23 20 66 72 6f 6d 20 61 6c  stinct.# from al
ae10: 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20  l other values, 
ae20: 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20  including other 
ae30: 4e 55 4c 4c 73 2e 0a 23 0a 64 6f 5f 63 72 65 61  NULLs..#.do_crea
ae40: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
ae50: 34 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45  4 {.  1    "INSE
ae60: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
ae70: 53 28 4e 55 4c 4c 2c 20 30 29 22 20 20 20 20 20  S(NULL, 0)"     
ae80: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20           {}.  2 
ae90: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aea0: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
aeb0: 30 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  0)"             
aec0: 20 7b 7d 0a 20 20 33 20 20 20 20 22 49 4e 53 45   {}.  3    "INSE
aed0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
aee0: 53 28 4e 55 4c 4c 2c 20 30 29 22 20 20 20 20 20  S(NULL, 0)"     
aef0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 34           {}..  4
af00: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
af10: 20 74 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t2 VALUES(NULL,
af20: 20 27 7a 65 72 6f 27 29 22 20 20 20 20 20 20 20   'zero')"       
af30: 20 20 7b 7d 0a 20 20 35 20 20 20 20 22 49 4e 53    {}.  5    "INS
af40: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
af50: 45 53 28 4e 55 4c 4c 2c 20 27 6f 6e 65 27 29 22  ES(NULL, 'one')"
af60: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 36            {}.  6
af70: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
af80: 20 74 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t2 VALUES(NULL,
af90: 20 27 74 77 6f 27 29 22 20 20 20 20 20 20 20 20   'two')"        
afa0: 20 20 7b 7d 0a 20 20 37 20 20 20 20 22 49 4e 53    {}.  7    "INS
afb0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
afc0: 45 53 28 4e 55 4c 4c 2c 20 27 74 68 72 65 65 27  ES(NULL, 'three'
afd0: 29 22 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20  )"        {}..  
afe0: 38 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  8    "INSERT INT
aff0: 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2c 20 4e  O t2 VALUES(0, N
b000: 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20  ULL)"           
b010: 20 20 20 7b 7d 0a 20 20 39 20 20 20 20 22 49 4e     {}.  9    "IN
b020: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
b030: 55 45 53 28 34 35 2e 35 2c 20 4e 55 4c 4c 29 22  UES(45.5, NULL)"
b040: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
b050: 31 30 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  10   "INSERT INT
b060: 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2e 30 2c  O t2 VALUES(0.0,
b070: 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20   NULL)"         
b080: 20 20 20 7b 7d 0a 20 20 31 31 20 20 20 22 49 4e     {}.  11   "IN
b090: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
b0a0: 55 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20  UES('brambles', 
b0b0: 4e 55 4c 4c 29 22 20 20 20 20 20 7b 7d 0a 20 20  NULL)"     {}.  
b0c0: 31 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  12   "INSERT INT
b0d0: 4f 20 74 32 20 56 41 4c 55 45 53 28 58 27 41 42  O t2 VALUES(X'AB
b0e0: 43 44 45 46 27 2c 20 4e 55 4c 4c 29 22 20 20 20  CDEF', NULL)"   
b0f0: 20 20 20 7b 7d 0a 0a 20 20 31 33 20 20 20 22 49     {}..  13   "I
b100: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
b110: 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  LUES(NULL, NULL)
b120: 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20  "           {}. 
b130: 20 31 34 20 20 20 22 49 4e 53 45 52 54 20 49 4e   14   "INSERT IN
b140: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55 4c  TO t2 VALUES(NUL
b150: 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20  L, NULL)"       
b160: 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44      {}.}..# EVID
b170: 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 31 38 36 36  ENCE-OF: R-61866
b180: 2d 33 38 30 35 33 20 55 6e 6c 65 73 73 20 74 68  -38053 Unless th
b190: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 49  e column is an I
b1a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
b1b0: 45 59 0a 23 20 53 51 4c 69 74 65 20 61 6c 6c 6f  EY.# SQLite allo
b1c0: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
b1d0: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
b1e0: 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 20 20 20 20  column..#.#     
b1f0: 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73  If the column is
b200: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
b210: 61 72 79 20 6b 65 79 2c 20 61 74 74 65 6d 70 74  ary key, attempt
b220: 69 6e 67 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ing to insert a 
b230: 4e 55 4c 4c 0a 23 20 20 20 20 20 69 6e 74 6f 20  NULL.#     into 
b240: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 72 69 67 67  the column trigg
b250: 65 72 73 20 74 68 65 20 61 75 74 6f 2d 69 6e 63  ers the auto-inc
b260: 72 65 6d 65 6e 74 20 62 65 68 61 76 69 6f 72 2e  rement behavior.
b270: 20 41 74 74 65 6d 70 74 69 6e 67 0a 23 20 20 20   Attempting.#   
b280: 20 20 74 6f 20 75 73 65 20 55 50 44 41 54 45 20    to use UPDATE 
b290: 74 6f 20 73 65 74 20 61 6e 20 69 70 6b 20 63 6f  to set an ipk co
b2a0: 6c 75 6d 6e 20 74 6f 20 61 20 4e 55 4c 4c 20 76  lumn to a NULL v
b2b0: 61 6c 75 65 20 69 73 20 61 6e 20 65 72 72 6f 72  alue is an error
b2c0: 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ..#.do_createtab
b2d0: 6c 65 5f 74 65 73 74 73 20 34 2e 35 2e 31 20 7b  le_tests 4.5.1 {
b2e0: 0a 20 20 31 20 20 20 20 22 53 45 4c 45 43 54 20  .  1    "SELECT 
b2f0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
b300: 20 57 48 45 52 45 20 78 20 49 53 20 4e 55 4c 4c   WHERE x IS NULL
b310: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
b320: 20 20 20 20 33 0a 20 20 32 20 20 20 20 22 53 45      3.  2    "SE
b330: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
b340: 4f 4d 20 74 32 20 57 48 45 52 45 20 78 20 49 53  OM t2 WHERE x IS
b350: 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20   NULL"          
b360: 20 20 20 20 20 20 20 20 20 36 0a 20 20 33 20 20           6.  3  
b370: 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
b380: 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45  *) FROM t2 WHERE
b390: 20 79 20 49 53 20 4e 55 4c 4c 22 20 20 20 20 20   y IS NULL"     
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 37 0a                7.
b3b0: 20 20 34 20 20 20 20 22 53 45 4c 45 43 54 20 63    4    "SELECT c
b3c0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 20  ount(*) FROM t2 
b3d0: 57 48 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 20  WHERE x IS NULL 
b3e0: 41 4e 44 20 79 20 49 53 20 4e 55 4c 4c 22 20 20  AND y IS NULL"  
b3f0: 20 20 20 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71     2.}.do_execsq
b400: 6c 5f 74 65 73 74 20 34 2e 35 2e 32 20 7b 0a 20  l_test 4.5.2 {. 
b410: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
b420: 28 73 2c 20 75 20 49 4e 54 45 47 45 52 20 50 52  (s, u INTEGER PR
b430: 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 3b 0a 20  IMARY KEY, v);. 
b440: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
b450: 56 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20  VALUES(1, NULL, 
b460: 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2);.  INSERT INT
b470: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 78 27 2c  O t3 VALUES('x',
b480: 20 4e 55 4c 4c 2c 20 27 79 27 29 3b 0a 20 20 53   NULL, 'y');.  S
b490: 45 4c 45 43 54 20 75 20 46 52 4f 4d 20 74 33 3b  ELECT u FROM t3;
b4a0: 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 63 61 74 63  .} {1 2}.do_catc
b4b0: 68 73 71 6c 5f 74 65 73 74 20 34 2e 35 2e 33 20  hsql_test 4.5.3 
b4c0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
b4d0: 74 33 20 56 41 4c 55 45 53 28 32 2c 20 35 2c 20  t3 VALUES(2, 5, 
b4e0: 33 29 3b 0a 20 20 55 50 44 41 54 45 20 74 33 20  3);.  UPDATE t3 
b4f0: 53 45 54 20 75 20 3d 20 4e 55 4c 4c 20 57 48 45  SET u = NULL WHE
b500: 52 45 20 73 20 3d 20 32 3b 0a 7d 20 7b 31 20 7b  RE s = 2;.} {1 {
b510: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
b520: 68 7d 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  h}}..# EVIDENCE-
b530: 4f 46 3a 20 52 2d 30 30 32 32 37 2d 32 31 30 38  OF: R-00227-2108
b540: 30 20 41 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  0 A UNIQUE const
b550: 72 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72  raint is similar
b560: 20 74 6f 20 61 20 50 52 49 4d 41 52 59 0a 23 20   to a PRIMARY.# 
b570: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  KEY constraint, 
b580: 65 78 63 65 70 74 20 74 68 61 74 20 61 20 73 69  except that a si
b590: 6e 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68  ngle table may h
b5a0: 61 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  ave any number o
b5b0: 66 0a 23 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  f.# UNIQUE const
b5c0: 72 61 69 6e 74 73 2e 0a 23 0a 64 72 6f 70 5f 61  raints..#.drop_a
b5d0: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
b5e0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34  atetable_tests 4
b5f0: 2e 36 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .6 {.  1    "CRE
b600: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 55  ATE TABLE t1(a U
b610: 4e 49 51 55 45 2c 20 62 20 55 4e 49 51 55 45 29  NIQUE, b UNIQUE)
b620: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
b630: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
b640: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
b650: 74 32 28 61 20 55 4e 49 51 55 45 2c 20 62 2c 20  t2(a UNIQUE, b, 
b660: 63 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29 29  c, UNIQUE(c, b))
b670: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  "             {}
b680: 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20  .  3    "CREATE 
b690: 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63  TABLE t3(a, b, c
b6a0: 2c 20 55 4e 49 51 55 45 28 61 29 2c 20 55 4e 49  , UNIQUE(a), UNI
b6b0: 51 55 45 28 62 29 2c 20 55 4e 49 51 55 45 28 63  QUE(b), UNIQUE(c
b6c0: 29 29 22 20 7b 7d 0a 20 20 34 20 20 20 20 22 43  ))" {}.  4    "C
b6d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
b6e0: 2c 20 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 61  , b, c, UNIQUE(a
b6f0: 2c 20 62 2c 20 63 29 29 22 20 20 20 20 20 20 20  , b, c))"       
b700: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a            {}.}..
b710: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
b720: 2d 35 35 32 34 30 2d 35 38 38 37 37 20 46 6f 72  -55240-58877 For
b730: 20 65 61 63 68 20 55 4e 49 51 55 45 20 63 6f 6e   each UNIQUE con
b740: 73 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74  straint on the t
b750: 61 62 6c 65 2c 0a 23 20 65 61 63 68 20 72 6f 77  able,.# each row
b760: 20 6d 75 73 74 20 66 65 61 74 75 72 65 20 61 20   must feature a 
b770: 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
b780: 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  on of values in 
b790: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 23 20 69 64  the columns.# id
b7a0: 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
b7b0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
b7c0: 74 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  t..#.# EVIDENCE-
b7d0: 4f 46 3a 20 52 2d 34 37 37 33 33 2d 35 31 34 38  OF: R-47733-5148
b7e0: 30 20 49 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  0 If an INSERT o
b7f0: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
b800: 6e 74 20 61 74 74 65 6d 70 74 73 0a 23 20 74 6f  nt attempts.# to
b810: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
b820: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
b830: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
b840: 77 73 20 66 65 61 74 75 72 65 20 69 64 65 6e 74  ws feature ident
b850: 69 63 61 6c 0a 23 20 76 61 6c 75 65 73 20 69 6e  ical.# values in
b860: 20 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e   a set of column
b870: 73 20 74 68 61 74 20 61 72 65 20 73 75 62 6a 65  s that are subje
b880: 63 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20 63  ct to a UNIQUE c
b890: 6f 6e 73 74 72 61 69 6e 74 2c 20 69 74 0a 23 20  onstraint, it.# 
b8a0: 69 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  is a constraint 
b8b0: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f  violation..#.do_
b8c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 37  execsql_test 4.7
b8d0: 2e 30 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .0 {.  INSERT IN
b8e0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
b8f0: 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2);.  INSERT INT
b900: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2e 33 2c  O t1 VALUES(4.3,
b910: 20 35 2e 35 29 3b 0a 20 20 49 4e 53 45 52 54 20   5.5);.  INSERT 
b920: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
b930: 72 65 76 65 61 6c 27 2c 20 27 76 61 72 69 61 62  reveal', 'variab
b940: 6c 65 6e 65 73 73 27 29 3b 0a 20 20 49 4e 53 45  leness');.  INSE
b950: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
b960: 53 28 58 27 31 32 33 34 35 36 27 2c 20 58 27 36  S(X'123456', X'6
b970: 35 34 33 32 31 27 29 3b 0a 0a 20 20 49 4e 53 45  54321');..  INSE
b980: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
b990: 53 28 27 78 79 78 27 2c 20 31 2c 20 31 29 3b 0a  S('xyx', 1, 1);.
b9a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
b9b0: 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32   VALUES('xyx', 2
b9c0: 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 1);.  INSERT I
b9d0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 75  NTO t4 VALUES('u
b9e0: 76 77 27 2c 20 31 2c 20 31 29 3b 0a 7d 0a 64 6f  vw', 1, 1);.}.do
b9f0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
ba00: 74 73 20 34 2e 37 2e 31 20 2d 65 72 72 6f 72 20  ts 4.7.1 -error 
ba10: 7b 20 25 73 20 6e 6f 74 20 75 6e 69 71 75 65 20  { %s not unique 
ba20: 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45  } {.  1    "INSE
ba30: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
ba40: 53 28 31 2c 20 27 6f 6e 65 27 29 22 20 20 20 20  S(1, 'one')"    
ba50: 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d           {{colum
ba60: 6e 20 61 20 69 73 7d 7d 0a 20 20 32 20 20 20 20  n a is}}.  2    
ba70: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
ba80: 56 41 4c 55 45 53 28 34 2e 33 2c 20 27 74 77 6f  VALUES(4.3, 'two
ba90: 27 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b  ')"           {{
baa0: 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20  column a is}}.  
bab0: 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  3    "INSERT INT
bac0: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 72 65 76  O t1 VALUES('rev
bad0: 65 61 6c 27 2c 20 27 74 68 72 65 65 27 29 22 20  eal', 'three')" 
bae0: 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73     {{column a is
baf0: 7d 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52  }}.  4    "INSER
bb00: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
bb10: 28 58 27 31 32 33 34 35 36 27 2c 20 27 66 6f 75  (X'123456', 'fou
bb20: 72 27 29 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e  r')"    {{column
bb30: 20 61 20 69 73 7d 7d 0a 0a 20 20 35 20 20 20 20   a is}}..  5    
bb40: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61  "UPDATE t1 SET a
bb50: 20 3d 20 31 20 57 48 45 52 45 20 72 6f 77 69 64   = 1 WHERE rowid
bb60: 3d 32 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b  =2"           {{
bb70: 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20  column a is}}.  
bb80: 36 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20  6    "UPDATE t1 
bb90: 53 45 54 20 61 20 3d 20 34 2e 33 20 57 48 45 52  SET a = 4.3 WHER
bba0: 45 20 72 6f 77 69 64 3d 33 22 20 20 20 20 20 20  E rowid=3"      
bbb0: 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73     {{column a is
bbc0: 7d 7d 0a 20 20 37 20 20 20 20 22 55 50 44 41 54  }}.  7    "UPDAT
bbd0: 45 20 74 31 20 53 45 54 20 61 20 3d 20 27 72 65  E t1 SET a = 're
bbe0: 76 65 61 6c 27 20 57 48 45 52 45 20 72 6f 77 69  veal' WHERE rowi
bbf0: 64 3d 34 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e  d=4"    {{column
bc00: 20 61 20 69 73 7d 7d 0a 20 20 38 20 20 20 20 22   a is}}.  8    "
bc10: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
bc20: 3d 20 58 27 31 32 33 34 35 36 27 20 57 48 45 52  = X'123456' WHER
bc30: 45 20 72 6f 77 69 64 3d 31 22 20 20 20 7b 7b 63  E rowid=1"   {{c
bc40: 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 0a 20 20  olumn a is}}..  
bc50: 39 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  9    "INSERT INT
bc60: 4f 20 74 34 20 56 41 4c 55 45 53 28 27 78 79 78  O t4 VALUES('xyx
bc70: 27 2c 20 31 2c 20 31 29 22 20 20 20 20 20 20 20  ', 1, 1)"       
bc80: 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20     {{columns a, 
bc90: 62 2c 20 63 20 61 72 65 7d 7d 0a 20 20 31 30 20  b, c are}}.  10 
bca0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
bcb0: 34 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20  4 VALUES('xyx', 
bcc0: 32 2c 20 31 29 22 20 20 20 20 20 20 20 20 20 20  2, 1)"          
bcd0: 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20  {{columns a, b, 
bce0: 63 20 61 72 65 7d 7d 0a 20 20 31 31 20 20 20 22  c are}}.  11   "
bcf0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
bd00: 41 4c 55 45 53 28 27 75 76 77 27 2c 20 31 2c 20  ALUES('uvw', 1, 
bd10: 31 29 22 20 20 20 20 20 20 20 20 20 20 7b 7b 63  1)"          {{c
bd20: 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61  olumns a, b, c a
bd30: 72 65 7d 7d 0a 0a 20 20 31 32 20 20 20 22 55 50  re}}..  12   "UP
bd40: 44 41 54 45 20 74 34 20 53 45 54 20 61 3d 27 78  DATE t4 SET a='x
bd50: 79 78 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d  yx' WHERE rowid=
bd60: 33 22 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c  3"         {{col
bd70: 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61 72 65  umns a, b, c are
bd80: 7d 7d 0a 20 20 31 33 20 20 20 22 55 50 44 41 54  }}.  13   "UPDAT
bd90: 45 20 74 34 20 53 45 54 20 62 3d 31 20 57 48 45  E t4 SET b=1 WHE
bda0: 52 45 20 72 6f 77 69 64 3d 32 22 20 20 20 20 20  RE rowid=2"     
bdb0: 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e          {{column
bdc0: 73 20 61 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a  s a, b, c are}}.
bdd0: 20 20 31 34 20 20 20 22 55 50 44 41 54 45 20 74    14   "UPDATE t
bde0: 34 20 53 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20  4 SET a=0, b=0, 
bdf0: 63 3d 30 22 20 20 20 20 20 20 20 20 20 20 20 20  c=0"            
be00: 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61       {{columns a
be10: 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a 7d 0a 0a  , b, c are}}.}..
be20: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
be30: 2d 32 31 32 38 39 2d 31 31 35 35 39 20 41 73 20  -21289-11559 As 
be40: 77 69 74 68 20 50 52 49 4d 41 52 59 20 4b 45 59  with PRIMARY KEY
be50: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 66 6f   constraints, fo
be60: 72 20 74 68 65 0a 23 20 70 75 72 70 6f 73 65 73  r the.# purposes
be70: 20 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   of UNIQUE const
be80: 72 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75  raints NULL valu
be90: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
bea0: 64 20 64 69 73 74 69 6e 63 74 0a 23 20 66 72 6f  d distinct.# fro
beb0: 6d 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75  m all other valu
bec0: 65 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74  es (including ot
bed0: 68 65 72 20 4e 55 4c 4c 73 29 2e 0a 23 0a 64 6f  her NULLs)..#.do
bee0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
bef0: 74 73 20 34 2e 38 20 7b 0a 20 20 31 20 20 20 20  ts 4.8 {.  1    
bf00: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
bf10: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c  VALUES(NULL, NUL
bf20: 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d  L)"           {}
bf30: 0a 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20  .  2    "INSERT 
bf40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e  INTO t1 VALUES(N
bf50: 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20  ULL, NULL)"     
bf60: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
bf70: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61  "UPDATE t1 SET a
bf80: 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20   = NULL"        
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
bfa0: 0a 20 20 34 20 20 20 20 22 55 50 44 41 54 45 20  .  4    "UPDATE 
bfb0: 74 31 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22  t1 SET b = NULL"
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 20 20 7b 7d 0a 0a 20 20 35 20 20 20        {}..  5   
bfe0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34   "INSERT INTO t4
bff0: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55   VALUES(NULL, NU
c000: 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 7b  LL, NULL)"     {
c010: 7d 0a 20 20 36 20 20 20 20 22 49 4e 53 45 52 54  }.  6    "INSERT
c020: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
c030: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  NULL, NULL, NULL
c040: 29 22 20 20 20 20 20 7b 7d 0a 20 20 37 20 20 20  )"     {}.  7   
c050: 20 22 55 50 44 41 54 45 20 74 34 20 53 45 54 20   "UPDATE t4 SET 
c060: 61 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20  a = NULL"       
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c080: 7d 0a 20 20 38 20 20 20 20 22 55 50 44 41 54 45  }.  8    "UPDATE
c090: 20 74 34 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c   t4 SET b = NULL
c0a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
c0b0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 39 20 20 20         {}.  9   
c0c0: 20 22 55 50 44 41 54 45 20 74 34 20 53 45 54 20   "UPDATE t4 SET 
c0d0: 63 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20  c = NULL"       
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c0f0: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
c100: 4f 46 3a 20 52 2d 32 36 39 38 33 2d 32 36 33 37  OF: R-26983-2637
c110: 37 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  7 INTEGER PRIMAR
c120: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 61 73  Y KEY columns as
c130: 69 64 65 2c 20 62 6f 74 68 0a 23 20 55 4e 49 51  ide, both.# UNIQ
c140: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
c150: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  EY constraints a
c160: 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  re implemented b
c170: 79 20 63 72 65 61 74 69 6e 67 20 61 6e 0a 23 20  y creating an.# 
c180: 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74  index in the dat
c190: 61 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61  abase (in the sa
c1a0: 6d 65 20 77 61 79 20 61 73 20 61 20 22 43 52 45  me way as a "CRE
c1b0: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
c1c0: 22 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  ".# statement wo
c1d0: 75 6c 64 29 2e 0a 64 6f 5f 63 72 65 61 74 65 74  uld)..do_createt
c1e0: 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 39 20 2d  able_tests 4.9 -
c1f0: 72 65 70 61 69 72 20 64 72 6f 70 5f 61 6c 6c 5f  repair drop_all_
c200: 74 61 62 6c 65 73 20 2d 71 75 65 72 79 20 7b 0a  tables -query {.
c210: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
c220: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  ) FROM sqlite_ma
c230: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d  ster WHERE type=
c240: 27 69 6e 64 65 78 27 0a 7d 20 7b 0a 20 20 31 20  'index'.} {.  1 
c250: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
c260: 20 74 31 28 61 20 54 45 58 54 20 50 52 49 4d 41   t1(a TEXT PRIMA
c270: 52 59 20 4b 45 59 2c 20 62 29 22 20 20 20 20 20  RY KEY, b)"     
c280: 20 20 20 20 20 20 20 20 20 31 0a 20 20 32 20 20           1.  2  
c290: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
c2a0: 74 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t1(a INTEGER PRI
c2b0: 4d 41 52 59 20 4b 45 59 2c 20 62 29 22 20 20 20  MARY KEY, b)"   
c2c0: 20 20 20 20 20 20 20 20 30 0a 20 20 33 20 20 20          0.  3   
c2d0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
c2e0: 31 28 61 20 54 45 58 54 20 55 4e 49 51 55 45 2c  1(a TEXT UNIQUE,
c2f0: 20 62 29 22 20 20 20 20 20 20 20 20 20 20 20 20   b)"            
c300: 20 20 20 20 20 20 20 31 0a 20 20 34 20 20 20 20         1.  4    
c310: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
c320: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
c330: 62 20 54 45 58 54 20 55 4e 49 51 55 45 29 22 20  b TEXT UNIQUE)" 
c340: 20 20 20 20 20 20 32 0a 20 20 35 20 20 20 20 22        2.  5    "
c350: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c360: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
c370: 2c 20 63 2c 20 55 4e 49 51 55 45 28 63 2c 20 62  , c, UNIQUE(c, b
c380: 29 29 22 20 20 32 0a 7d 0a 0a 23 20 45 56 49 44  ))"  2.}..# EVID
c390: 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 32 35 32  ENCE-OF: R-02252
c3a0: 2d 33 33 31 31 36 20 53 75 63 68 20 61 6e 20 69  -33116 Such an i
c3b0: 6e 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b  ndex is used lik
c3c0: 65 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65  e any other inde
c3d0: 78 0a 23 20 69 6e 20 74 68 65 20 64 61 74 61 62  x.# in the datab
c3e0: 61 73 65 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20  ase to optimize 
c3f0: 71 75 65 72 69 65 73 2e 0a 23 0a 64 6f 5f 65 78  queries..#.do_ex
c400: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 30 2e  ecsql_test 4.10.
c410: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
c420: 4c 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41  LE t1(a, b PRIMA
c430: 52 59 20 4b 45 59 29 3b 0a 20 20 43 52 45 41 54  RY KEY);.  CREAT
c440: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c  E TABLE t2(a, b,
c450: 20 63 2c 20 55 4e 49 51 55 45 28 62 2c 20 63 29   c, UNIQUE(b, c)
c460: 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61  );.}.do_createta
c470: 62 6c 65 5f 74 65 73 74 73 20 34 2e 31 30 20 7b  ble_tests 4.10 {
c480: 0a 20 20 31 20 20 20 20 22 45 58 50 4c 41 49 4e  .  1    "EXPLAIN
c490: 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45   QUERY PLAN SELE
c4a0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
c4b0: 52 45 20 62 20 3d 20 35 22 20 0a 20 20 20 20 20  RE b = 5" .     
c4c0: 20 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48    {0 0 0 {SEARCH
c4d0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
c4e0: 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74  INDEX sqlite_aut
c4f0: 6f 69 6e 64 65 78 5f 74 31 5f 31 20 28 62 3d 3f  oindex_t1_1 (b=?
c500: 29 7d 7d 0a 0a 20 20 32 20 20 20 20 22 45 58 50  )}}..  2    "EXP
c510: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
c520: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
c530: 20 4f 52 44 45 52 20 42 59 20 62 2c 20 63 22 0a   ORDER BY b, c".
c540: 20 20 20 20 20 20 20 7b 30 20 30 20 30 20 7b 53         {0 0 0 {S
c550: 43 41 4e 20 54 41 42 4c 45 20 74 32 20 55 53 49  CAN TABLE t2 USI
c560: 4e 47 20 49 4e 44 45 58 20 73 71 6c 69 74 65 5f  NG INDEX sqlite_
c570: 61 75 74 6f 69 6e 64 65 78 5f 74 32 5f 31 7d 7d  autoindex_t2_1}}
c580: 0a 0a 20 20 33 20 20 20 20 22 45 58 50 4c 41 49  ..  3    "EXPLAI
c590: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c  N QUERY PLAN SEL
c5a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20 57 48  ECT * FROM t2 WH
c5b0: 45 52 45 20 62 3d 31 30 20 41 4e 44 20 63 3e 31  ERE b=10 AND c>1
c5c0: 30 22 0a 20 20 20 20 20 20 20 7b 30 20 30 20 30  0".       {0 0 0
c5d0: 20 7b 53 45 41 52 43 48 20 54 41 42 4c 45 20 74   {SEARCH TABLE t
c5e0: 32 20 55 53 49 4e 47 20 49 4e 44 45 58 20 73 71  2 USING INDEX sq
c5f0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
c600: 32 5f 31 20 28 62 3d 3f 20 41 4e 44 20 63 3e 3f  2_1 (b=? AND c>?
c610: 29 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  )}}.}..# EVIDENC
c620: 45 2d 4f 46 3a 20 52 2d 34 35 34 39 33 2d 33 35  E-OF: R-45493-35
c630: 36 35 33 20 41 20 43 48 45 43 4b 20 63 6f 6e 73  653 A CHECK cons
c640: 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20 61 74  traint may be at
c650: 74 61 63 68 65 64 20 74 6f 20 61 0a 23 20 63 6f  tached to a.# co
c660: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  lumn definition 
c670: 6f 72 20 73 70 65 63 69 66 69 65 64 20 61 73 20  or specified as 
c680: 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69  a table constrai
c690: 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63 65 20  nt. In practice 
c6a0: 69 74 0a 23 20 6d 61 6b 65 73 20 6e 6f 20 64 69  it.# makes no di
c6b0: 66 66 65 72 65 6e 63 65 2e 0a 23 0a 23 20 20 20  fference..#.#   
c6c0: 41 6c 6c 20 74 68 65 20 74 65 73 74 73 20 74 68  All the tests th
c6d0: 61 74 20 64 65 61 6c 20 77 69 74 68 20 43 48 45  at deal with CHE
c6e0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 62  CK constraints b
c6f0: 65 6c 6f 77 20 28 34 2e 31 31 2e 2a 20 61 6e 64  elow (4.11.* and
c700: 20 0a 23 20 20 20 34 2e 31 32 2e 2a 29 20 61 72   .#   4.12.*) ar
c710: 65 20 72 75 6e 20 6f 6e 63 65 20 66 6f 72 20 61  e run once for a
c720: 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20   table with the 
c730: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
c740: 20 61 74 74 61 63 68 65 64 0a 23 20 20 20 74 6f   attached.#   to
c750: 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69   a column defini
c760: 74 69 6f 6e 2c 20 61 6e 64 20 6f 6e 63 65 20 77  tion, and once w
c770: 69 74 68 20 61 20 74 61 62 6c 65 20 77 68 65 72  ith a table wher
c780: 65 20 74 68 65 20 63 68 65 63 6b 20 0a 23 20 20  e the check .#  
c790: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 73 70   condition is sp
c7a0: 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62  ecified as a tab
c7b0: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23  le constraint..#
c7c0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
c7d0: 52 2d 35 35 34 33 35 2d 31 34 33 30 33 20 45 61  R-55435-14303 Ea
c7e0: 63 68 20 74 69 6d 65 20 61 20 6e 65 77 20 72 6f  ch time a new ro
c7f0: 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
c800: 74 6f 20 74 68 65 0a 23 20 74 61 62 6c 65 20 6f  to the.# table o
c810: 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 6f  r an existing ro
c820: 77 20 69 73 20 75 70 64 61 74 65 64 2c 20 74 68  w is updated, th
c830: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 73  e expression ass
c840: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23 20 65  ociated with.# e
c850: 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  ach CHECK constr
c860: 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65  aint is evaluate
c870: 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61 20  d and cast to a 
c880: 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69 6e  NUMERIC value in
c890: 20 74 68 65 0a 23 20 73 61 6d 65 20 77 61 79 20   the.# same way 
c8a0: 61 73 20 61 20 43 41 53 54 20 65 78 70 72 65 73  as a CAST expres
c8b0: 73 69 6f 6e 2e 20 49 66 20 74 68 65 20 72 65 73  sion. If the res
c8c0: 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e 74  ult is zero (int
c8d0: 65 67 65 72 20 76 61 6c 75 65 20 30 0a 23 20 6f  eger value 0.# o
c8e0: 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e 30  r real value 0.0
c8f0: 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74 72  ), then a constr
c900: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 68  aint violation h
c910: 61 73 20 6f 63 63 75 72 72 65 64 2e 0a 23 0a 64  as occurred..#.d
c920: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
c930: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
c940: 2e 31 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  .11 {.  CREATE T
c950: 41 42 4c 45 20 78 31 28 61 20 54 45 58 54 2c 20  ABLE x1(a TEXT, 
c960: 62 20 49 4e 54 45 47 45 52 20 43 48 45 43 4b 28  b INTEGER CHECK(
c970: 20 62 3e 30 20 29 29 3b 0a 20 20 43 52 45 41 54   b>0 ));.  CREAT
c980: 45 20 54 41 42 4c 45 20 74 31 28 61 20 54 45 58  E TABLE t1(a TEX
c990: 54 2c 20 62 20 49 4e 54 45 47 45 52 2c 20 43 48  T, b INTEGER, CH
c9a0: 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20 20 49  ECK( b>0 ));.  I
c9b0: 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41  NSERT INTO x1 VA
c9c0: 4c 55 45 53 28 27 78 27 2c 20 27 78 78 27 29 3b  LUES('x', 'xx');
c9d0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
c9e0: 31 20 56 41 4c 55 45 53 28 27 79 27 2c 20 27 79  1 VALUES('y', 'y
c9f0: 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  y');.  INSERT IN
ca00: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20 46  TO t1 SELECT * F
ca10: 52 4f 4d 20 78 31 3b 0a 0a 20 20 43 52 45 41 54  ROM x1;..  CREAT
ca20: 45 20 54 41 42 4c 45 20 78 32 28 61 20 43 48 45  E TABLE x2(a CHE
ca30: 43 4b 28 20 61 7c 7c 62 20 29 2c 20 62 29 3b 0a  CK( a||b ), b);.
ca40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
ca50: 32 28 61 2c 20 62 2c 20 43 48 45 43 4b 28 20 61  2(a, b, CHECK( a
ca60: 7c 7c 62 20 29 29 3b 0a 20 20 49 4e 53 45 52 54  ||b ));.  INSERT
ca70: 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28   INTO x2 VALUES(
ca80: 31 2c 20 27 78 78 27 29 3b 0a 20 20 49 4e 53 45  1, 'xx');.  INSE
ca90: 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45  RT INTO x2 VALUE
caa0: 53 28 31 2c 20 27 79 79 27 29 3b 0a 20 20 49 4e  S(1, 'yy');.  IN
cab0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
cac0: 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a 7d  ECT * FROM x2;.}
cad0: 0a 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  ..do_createtable
cae0: 5f 74 65 73 74 73 20 34 2e 31 31 20 2d 65 72 72  _tests 4.11 -err
caf0: 6f 72 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66  or {constraint f
cb00: 61 69 6c 65 64 7d 20 7b 0a 20 20 31 61 20 20 20  ailed} {.  1a   
cb10: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31   "INSERT INTO x1
cb20: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 30   VALUES('one', 0
cb30: 29 22 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 62  )"       {}.  1b
cb40: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
cb50: 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   t1 VALUES('one'
cb60: 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b 7d 0a 0a  , -4.0)"    {}..
cb70: 20 20 32 61 20 20 20 20 22 49 4e 53 45 52 54 20    2a    "INSERT 
cb80: 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28 27  INTO x2 VALUES('
cb90: 61 62 63 27 2c 20 31 29 22 20 20 20 20 20 20 20  abc', 1)"       
cba0: 7b 7d 0a 20 20 32 62 20 20 20 20 22 49 4e 53 45  {}.  2b    "INSE
cbb0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
cbc0: 53 28 27 61 62 63 27 2c 20 31 29 22 20 20 20 20  S('abc', 1)"    
cbd0: 20 20 20 7b 7d 0a 0a 20 20 33 61 20 20 20 20 22     {}..  3a    "
cbe0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56  INSERT INTO x2 V
cbf0: 41 4c 55 45 53 28 30 2c 20 27 61 62 63 27 29 22  ALUES(0, 'abc')"
cc00: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 62 20 20         {}.  3b  
cc10: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
cc20: 32 20 56 41 4c 55 45 53 28 30 2c 20 27 61 62 63  2 VALUES(0, 'abc
cc30: 27 29 22 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20  ')"       {}..  
cc40: 34 61 20 20 20 20 22 55 50 44 41 54 45 20 74 31  4a    "UPDATE t1
cc50: 20 53 45 54 20 62 3d 2d 31 20 57 48 45 52 45 20   SET b=-1 WHERE 
cc60: 72 6f 77 69 64 3d 31 22 20 20 20 20 20 20 7b 7d  rowid=1"      {}
cc70: 0a 20 20 34 62 20 20 20 20 22 55 50 44 41 54 45  .  4b    "UPDATE
cc80: 20 78 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45   x1 SET b=-1 WHE
cc90: 52 45 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20  RE rowid=1"     
cca0: 20 7b 7d 0a 0a 20 20 34 61 20 20 20 20 22 55 50   {}..  4a    "UP
ccb0: 44 41 54 45 20 78 32 20 53 45 54 20 61 3d 27 27  DATE x2 SET a=''
ccc0: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20   WHERE rowid=1" 
ccd0: 20 20 20 20 20 7b 7d 0a 20 20 34 62 20 20 20 20       {}.  4b    
cce0: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 61  "UPDATE t2 SET a
ccf0: 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d  ='' WHERE rowid=
cd00: 31 22 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20  1"      {}.}..# 
cd10: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
cd20: 34 31 30 39 2d 33 39 31 30 38 20 49 66 20 74 68  4109-39108 If th
cd30: 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73 69  e CHECK expressi
cd40: 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
cd50: 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61 6e 79 20 6f  NULL,.# or any o
cd60: 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  ther non-zero va
cd70: 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20 61  lue, it is not a
cd80: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
cd90: 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 63 72 65 61  ation..#.do_crea
cda0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
cdb0: 31 32 20 7b 0a 20 20 31 61 20 20 20 20 22 49 4e  12 {.  1a    "IN
cdc0: 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c  SERT INTO x1 VAL
cdd0: 55 45 53 28 27 6f 6e 65 27 2c 20 4e 55 4c 4c 29  UES('one', NULL)
cde0: 22 20 20 20 20 7b 7d 0a 20 20 31 62 20 20 20 20  "    {}.  1b    
cdf0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
ce00: 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e 55  VALUES('one', NU
ce10: 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a 20 20 32 61  LL)"    {}..  2a
ce20: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ce30: 20 78 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   x1 VALUES('one'
ce40: 2c 20 32 29 22 20 20 20 20 7b 7d 0a 20 20 32 62  , 2)"    {}.  2b
ce50: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ce60: 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   t1 VALUES('one'
ce70: 2c 20 32 29 22 20 20 20 20 7b 7d 0a 0a 20 20 33  , 2)"    {}..  3
ce80: 61 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  a    "INSERT INT
ce90: 4f 20 78 32 20 56 41 4c 55 45 53 28 31 2c 20 27  O x2 VALUES(1, '
cea0: 61 62 63 27 29 22 20 20 20 20 20 20 20 7b 7d 0a  abc')"       {}.
ceb0: 20 20 33 62 20 20 20 20 22 49 4e 53 45 52 54 20    3b    "INSERT 
cec0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
ced0: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20  , 'abc')"       
cee0: 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  {}.}..# EVIDENCE
cef0: 2d 4f 46 3a 20 52 2d 30 32 30 36 30 2d 36 34 35  -OF: R-02060-645
cf00: 34 37 20 41 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  47 A NOT NULL co
cf10: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c  nstraint may onl
cf20: 79 20 62 65 20 61 74 74 61 63 68 65 64 0a 23 20  y be attached.# 
cf30: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
cf40: 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20 73 70 65 63  nition, not spec
cf50: 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65  ified as a table
cf60: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23 0a 64   constraint..#.d
cf70: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
cf80: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
cf90: 73 74 73 20 34 2e 31 33 2e 31 20 7b 0a 20 20 31  sts 4.13.1 {.  1
cfa0: 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42       "CREATE TAB
cfb0: 4c 45 20 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c  LE t1(a NOT NULL
cfc0: 2c 20 62 29 22 20 20 20 20 20 20 20 20 20 20 20  , b)"           
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22      {}.  2     "
cff0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
d000: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4e 4f  a PRIMARY KEY NO
d010: 54 20 4e 55 4c 4c 2c 20 62 29 22 20 20 20 20 20  T NULL, b)"     
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
d030: 0a 20 20 33 20 20 20 20 20 22 43 52 45 41 54 45  .  3     "CREATE
d040: 20 54 41 42 4c 45 20 74 33 28 61 20 4e 4f 54 20   TABLE t3(a NOT 
d050: 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c  NULL, b NOT NULL
d060: 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 55 4e 49  , c NOT NULL UNI
d070: 51 55 45 29 22 20 20 20 7b 7d 0a 7d 0a 64 6f 5f  QUE)"   {}.}.do_
d080: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
d090: 73 20 34 2e 31 33 2e 32 20 2d 65 72 72 6f 72 20  s 4.13.2 -error 
d0a0: 7b 0a 20 20 6e 65 61 72 20 22 4e 4f 54 22 3a 20  {.  near "NOT": 
d0b0: 73 79 6e 74 61 78 20 65 72 72 6f 72 0a 7d 20 7b  syntax error.} {
d0c0: 0a 20 20 31 20 20 20 20 20 22 43 52 45 41 54 45  .  1     "CREATE
d0d0: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
d0e0: 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20 20 20  NOT NULL(a))"   
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 7b 7d 0a 20 20 32 20 20 20 20 20 22 43 52 45 41  {}.  2     "CREA
d110: 54 45 20 54 41 42 4c 45 20 74 34 28 61 20 50 52  TE TABLE t4(a PR
d120: 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 4e 4f  IMARY KEY, b, NO
d130: 54 20 4e 55 4c 4c 28 61 29 29 22 20 20 20 20 20  T NULL(a))"     
d140: 20 20 7b 7d 0a 20 20 33 20 20 20 20 20 22 43 52    {}.  3     "CR
d150: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
d160: 20 62 2c 20 63 20 55 4e 49 51 55 45 2c 20 4e 4f   b, c UNIQUE, NO
d170: 54 20 4e 55 4c 4c 28 61 2c 20 62 2c 20 63 29 29  T NULL(a, b, c))
d180: 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44  "   {}.}..# EVID
d190: 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 37 39 35  ENCE-OF: R-31795
d1a0: 2d 35 37 36 34 33 20 61 20 4e 4f 54 20 4e 55 4c  -57643 a NOT NUL
d1b0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69 63  L constraint dic
d1c0: 74 61 74 65 73 20 74 68 61 74 20 74 68 65 0a 23  tates that the.#
d1d0: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c 75   associated colu
d1e0: 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61  mn may not conta
d1f0: 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e  in a NULL value.
d200: 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73   Attempting to s
d210: 65 74 20 74 68 65 0a 23 20 63 6f 6c 75 6d 6e 20  et the.# column 
d220: 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77 68  value to NULL wh
d230: 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20 6e  en inserting a n
d240: 65 77 20 72 6f 77 20 6f 72 20 75 70 64 61 74 69  ew row or updati
d250: 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 23  ng an existing.#
d260: 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63 6f   one causes a co
d270: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
d280: 6f 6e 2e 0a 23 0a 23 20 20 20 20 20 54 68 65 73  on..#.#     Thes
d290: 65 20 74 65 73 74 73 20 75 73 65 20 74 68 65 20  e tests use the 
d2a0: 74 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 62  tables created b
d2b0: 79 20 34 2e 31 33 2e 0a 23 0a 64 6f 5f 65 78 65  y 4.13..#.do_exe
d2c0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 34 2e 30  csql_test 4.14.0
d2d0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
d2e0: 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c 20   t1 VALUES('x', 
d2f0: 27 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  'y');.  INSERT I
d300: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 7a  NTO t1 VALUES('z
d310: 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49 4e 53  ', NULL);..  INS
d320: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
d330: 45 53 28 27 78 27 2c 20 27 79 27 29 3b 0a 20 20  ES('x', 'y');.  
d340: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
d350: 41 4c 55 45 53 28 27 7a 27 2c 20 4e 55 4c 4c 29  ALUES('z', NULL)
d360: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
d370: 20 74 33 20 56 41 4c 55 45 53 28 27 78 27 2c 20   t3 VALUES('x', 
d380: 27 79 27 2c 20 27 7a 27 29 3b 0a 20 20 49 4e 53  'y', 'z');.  INS
d390: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
d3a0: 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 7d 0a 64  ES(1, 2, 3);.}.d
d3b0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
d3c0: 73 74 73 20 34 2e 31 34 20 2d 65 72 72 6f 72 20  sts 4.14 -error 
d3d0: 7b 0a 20 20 25 73 20 6d 61 79 20 6e 6f 74 20 62  {.  %s may not b
d3e0: 65 20 4e 55 4c 4c 0a 7d 20 7b 0a 20 20 31 20 20  e NULL.} {.  1  
d3f0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
d400: 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27  1 VALUES(NULL, '
d410: 61 27 29 22 20 20 20 20 20 20 20 20 20 7b 74 31  a')"         {t1
d420: 2e 61 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45  .a}.  2    "INSE
d430: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
d440: 53 28 4e 55 4c 4c 2c 20 27 62 27 29 22 20 20 20  S(NULL, 'b')"   
d450: 20 20 20 20 20 20 7b 74 32 2e 61 7d 0a 20 20 33        {t2.a}.  3
d460: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
d470: 20 74 33 20 56 41 4c 55 45 53 28 27 63 27 2c 20   t3 VALUES('c', 
d480: 27 64 27 2c 20 4e 55 4c 4c 29 22 20 20 20 20 7b  'd', NULL)"    {
d490: 74 33 2e 63 7d 0a 20 20 34 20 20 20 20 22 49 4e  t3.c}.  4    "IN
d4a0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
d4b0: 55 45 53 28 27 65 27 2c 20 4e 55 4c 4c 2c 20 27  UES('e', NULL, '
d4c0: 66 27 29 22 20 20 20 20 7b 74 33 2e 62 7d 0a 20  f')"    {t3.b}. 
d4d0: 20 35 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   5    "INSERT IN
d4e0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c  TO t3 VALUES(NUL
d4f0: 4c 2c 20 27 67 27 2c 20 27 68 27 29 22 20 20 20  L, 'g', 'h')"   
d500: 20 7b 74 33 2e 61 7d 0a 7d 0a 0a 23 20 45 56 49   {t3.a}.}..# EVI
d510: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 32 35 31  DENCE-OF: R-4251
d520: 31 2d 33 39 34 35 39 20 50 52 49 4d 41 52 59 20  1-39459 PRIMARY 
d530: 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64 20  KEY, UNIQUE and 
d540: 4e 4f 54 20 4e 55 4c 4c 0a 23 20 63 6f 6e 73 74  NOT NULL.# const
d550: 72 61 69 6e 74 73 20 6d 61 79 20 62 65 20 65 78  raints may be ex
d560: 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e 65  plicitly assigne
d570: 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  d a default conf
d580: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
d590: 23 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20 69  # algorithm by i
d5a0: 6e 63 6c 75 64 69 6e 67 20 61 20 63 6f 6e 66 6c  ncluding a confl
d5b0: 69 63 74 2d 63 6c 61 75 73 65 20 69 6e 20 74 68  ict-clause in th
d5c0: 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  eir definitions.
d5d0: 0a 23 0a 23 20 20 20 20 20 43 6f 6e 66 6c 69 63  .#.#     Conflic
d5e0: 74 20 63 6c 61 75 73 65 73 3a 20 41 42 4f 52 54  t clauses: ABORT
d5f0: 2c 20 52 4f 4c 4c 42 41 43 4b 2c 20 49 47 4e 4f  , ROLLBACK, IGNO
d600: 52 45 2c 20 46 41 49 4c 2c 20 52 45 50 4c 41 43  RE, FAIL, REPLAC
d610: 45 0a 23 0a 23 20 20 20 20 20 54 65 73 74 20 63  E.#.#     Test c
d620: 61 73 65 73 20 34 2e 31 35 2e 2a 2c 20 34 2e 31  ases 4.15.*, 4.1
d630: 36 2e 2a 20 61 6e 64 20 34 2e 31 37 2e 2a 20 66  6.* and 4.17.* f
d640: 6f 63 75 73 20 6f 6e 20 50 52 49 4d 41 52 59 20  ocus on PRIMARY 
d650: 4b 45 59 2c 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20  KEY, NOT NULL.# 
d660: 20 20 20 20 61 6e 64 20 55 4e 49 51 55 45 20 63      and UNIQUE c
d670: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 72 65 73 70  onstraints, resp
d680: 65 63 74 69 76 65 6c 79 2e 0a 23 0a 64 72 6f 70  ectively..#.drop
d690: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65  _all_tables.do_e
d6a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 35  xecsql_test 4.15
d6b0: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .0 {.  CREATE TA
d6c0: 42 4c 45 20 74 31 5f 61 62 28 61 20 50 52 49 4d  BLE t1_ab(a PRIM
d6d0: 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c  ARY KEY ON CONFL
d6e0: 49 43 54 20 41 42 4f 52 54 2c 20 62 29 3b 0a 20  ICT ABORT, b);. 
d6f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
d700: 5f 72 6f 28 61 20 50 52 49 4d 41 52 59 20 4b 45  _ro(a PRIMARY KE
d710: 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 4f  Y ON CONFLICT RO
d720: 4c 4c 42 41 43 4b 2c 20 62 29 3b 0a 20 20 43 52  LLBACK, b);.  CR
d730: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 69 67  EATE TABLE t1_ig
d740: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f  (a PRIMARY KEY O
d750: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
d760: 45 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20  E, b);.  CREATE 
d770: 54 41 42 4c 45 20 74 31 5f 66 61 28 61 20 50 52  TABLE t1_fa(a PR
d780: 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e  IMARY KEY ON CON
d790: 46 4c 49 43 54 20 46 41 49 4c 2c 20 62 29 3b 0a  FLICT FAIL, b);.
d7a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
d7b0: 31 5f 72 65 28 61 20 50 52 49 4d 41 52 59 20 4b  1_re(a PRIMARY K
d7c0: 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  EY ON CONFLICT R
d7d0: 45 50 4c 41 43 45 2c 20 62 29 3b 0a 20 20 43 52  EPLACE, b);.  CR
d7e0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 78 78  EATE TABLE t1_xx
d7f0: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
d800: 62 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  b);..  INSERT IN
d810: 54 4f 20 74 31 5f 61 62 20 56 41 4c 55 45 53 28  TO t1_ab VALUES(
d820: 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53  1, 'one');.  INS
d830: 45 52 54 20 49 4e 54 4f 20 74 31 5f 61 62 20 56  ERT INTO t1_ab V
d840: 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b  ALUES(2, 'two');
d850: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
d860: 31 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20 46 52  1_ro SELECT * FR
d870: 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49 4e 53 45  OM t1_ab;.  INSE
d880: 52 54 20 49 4e 54 4f 20 74 31 5f 69 67 20 53 45  RT INTO t1_ig SE
d890: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 5f 61  LECT * FROM t1_a
d8a0: 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  b;.  INSERT INTO
d8b0: 20 74 31 5f 66 61 20 53 45 4c 45 43 54 20 2a 20   t1_fa SELECT * 
d8c0: 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49 4e  FROM t1_ab;.  IN
d8d0: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 72 65 20  SERT INTO t1_re 
d8e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
d8f0: 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  _ab;.  INSERT IN
d900: 54 4f 20 74 31 5f 78 78 20 53 45 4c 45 43 54 20  TO t1_xx SELECT 
d910: 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 0a 20  * FROM t1_ab;.. 
d920: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
d930: 5f 61 62 28 61 2c 20 62 20 4e 4f 54 20 4e 55 4c  _ab(a, b NOT NUL
d940: 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 41 42  L ON CONFLICT AB
d950: 4f 52 54 29 3b 0a 20 20 43 52 45 41 54 45 20 54  ORT);.  CREATE T
d960: 41 42 4c 45 20 74 32 5f 72 6f 28 61 2c 20 62 20  ABLE t2_ro(a, b 
d970: 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46  NOT NULL ON CONF
d980: 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b 29 3b 0a  LICT ROLLBACK);.
d990: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
d9a0: 32 5f 69 67 28 61 2c 20 62 20 4e 4f 54 20 4e 55  2_ig(a, b NOT NU
d9b0: 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  LL ON CONFLICT I
d9c0: 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45 41 54 45  GNORE);.  CREATE
d9d0: 20 54 41 42 4c 45 20 74 32 5f 66 61 28 61 2c 20   TABLE t2_fa(a, 
d9e0: 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f  b NOT NULL ON CO
d9f0: 4e 46 4c 49 43 54 20 46 41 49 4c 29 3b 0a 20 20  NFLICT FAIL);.  
da00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 5f  CREATE TABLE t2_
da10: 72 65 28 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c  re(a, b NOT NULL
da20: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45 50   ON CONFLICT REP
da30: 4c 41 43 45 29 3b 0a 20 20 43 52 45 41 54 45 20  LACE);.  CREATE 
da40: 54 41 42 4c 45 20 74 32 5f 78 78 28 61 2c 20 62  TABLE t2_xx(a, b
da50: 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49   NOT NULL);..  I
da60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 61 62  NSERT INTO t2_ab
da70: 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27   VALUES(1, 'one'
da80: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
da90: 20 74 32 5f 61 62 20 56 41 4c 55 45 53 28 32 2c   t2_ab VALUES(2,
daa0: 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53 45 52   'two');.  INSER
dab0: 54 20 49 4e 54 4f 20 74 32 5f 72 6f 20 53 45 4c  T INTO t2_ro SEL
dac0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62  ECT * FROM t2_ab
dad0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
dae0: 74 32 5f 69 67 20 53 45 4c 45 43 54 20 2a 20 46  t2_ig SELECT * F
daf0: 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20 49 4e 53  ROM t2_ab;.  INS
db00: 45 52 54 20 49 4e 54 4f 20 74 32 5f 66 61 20 53  ERT INTO t2_fa S
db10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f  ELECT * FROM t2_
db20: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
db30: 4f 20 74 32 5f 72 65 20 53 45 4c 45 43 54 20 2a  O t2_re SELECT *
db40: 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20 49   FROM t2_ab;.  I
db50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 78 78  NSERT INTO t2_xx
db60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
db70: 32 5f 61 62 3b 0a 0a 20 20 43 52 45 41 54 45 20  2_ab;..  CREATE 
db80: 54 41 42 4c 45 20 74 33 5f 61 62 28 61 2c 20 62  TABLE t3_ab(a, b
db90: 2c 20 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f  , UNIQUE(a, b) O
dba0: 4e 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54  N CONFLICT ABORT
dbb0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
dbc0: 45 20 74 33 5f 72 6f 28 61 2c 20 62 2c 20 55 4e  E t3_ro(a, b, UN
dbd0: 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f  IQUE(a, b) ON CO
dbe0: 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b 29  NFLICT ROLLBACK)
dbf0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
dc00: 20 74 33 5f 69 67 28 61 2c 20 62 2c 20 55 4e 49   t3_ig(a, b, UNI
dc10: 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e  QUE(a, b) ON CON
dc20: 46 4c 49 43 54 20 49 47 4e 4f 52 45 29 3b 0a 20  FLICT IGNORE);. 
dc30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
dc40: 5f 66 61 28 61 2c 20 62 2c 20 55 4e 49 51 55 45  _fa(a, b, UNIQUE
dc50: 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49  (a, b) ON CONFLI
dc60: 43 54 20 46 41 49 4c 29 3b 0a 20 20 43 52 45 41  CT FAIL);.  CREA
dc70: 54 45 20 54 41 42 4c 45 20 74 33 5f 72 65 28 61  TE TABLE t3_re(a
dc80: 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62  , b, UNIQUE(a, b
dc90: 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45  ) ON CONFLICT RE
dca0: 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41 54 45  PLACE);.  CREATE
dcb0: 20 54 41 42 4c 45 20 74 33 5f 78 78 28 61 2c 20   TABLE t3_xx(a, 
dcc0: 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62 29 29  b, UNIQUE(a, b))
dcd0: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
dce0: 20 74 33 5f 61 62 20 56 41 4c 55 45 53 28 31 2c   t3_ab VALUES(1,
dcf0: 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52   'one');.  INSER
dd00: 54 20 49 4e 54 4f 20 74 33 5f 61 62 20 56 41 4c  T INTO t3_ab VAL
dd10: 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20  UES(2, 'two');. 
dd20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f   INSERT INTO t3_
dd30: 72 6f 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  ro SELECT * FROM
dd40: 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54   t3_ab;.  INSERT
dd50: 20 49 4e 54 4f 20 74 33 5f 69 67 20 53 45 4c 45   INTO t3_ig SELE
dd60: 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f 61 62 3b  CT * FROM t3_ab;
dd70: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
dd80: 33 5f 66 61 20 53 45 4c 45 43 54 20 2a 20 46 52  3_fa SELECT * FR
dd90: 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53 45  OM t3_ab;.  INSE
dda0: 52 54 20 49 4e 54 4f 20 74 33 5f 72 65 20 53 45  RT INTO t3_re SE
ddb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f 61  LECT * FROM t3_a
ddc0: 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  b;.  INSERT INTO
ddd0: 20 74 33 5f 78 78 20 53 45 4c 45 43 54 20 2a 20   t3_xx SELECT * 
dde0: 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 7d 0a 0a 66  FROM t3_ab;.}..f
ddf0: 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c 20 72  oreach {tn tbl r
de00: 65 73 20 61 63 20 64 61 74 61 7d 20 7b 0a 20 20  es ac data} {.  
de10: 31 20 20 20 74 31 5f 61 62 20 20 20 20 7b 31 20  1   t1_ab    {1 
de20: 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74  {column a is not
de30: 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f   unique}} 0 {1 o
de40: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
de50: 7d 0a 20 20 32 20 20 20 74 31 5f 72 6f 20 20 20  }.  2   t1_ro   
de60: 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73   {1 {column a is
de70: 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31 20   not unique}} 1 
de80: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20  {1 one 2 two}.  
de90: 33 20 20 20 74 31 5f 66 61 20 20 20 20 7b 31 20  3   t1_fa    {1 
dea0: 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74  {column a is not
deb0: 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f   unique}} 0 {1 o
dec0: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
ded0: 20 34 20 73 74 72 69 6e 67 7d 0a 20 20 34 20 20   4 string}.  4  
dee0: 20 74 31 5f 69 67 20 20 20 20 7b 30 20 7b 7d 7d   t1_ig    {0 {}}
def0: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
df00: 33 20 74 68 72 65 65 20 34 20 73 74 72 69 6e 67  3 three 4 string
df10: 20 36 20 73 74 72 69 6e 67 7d 0a 20 20 35 20 20   6 string}.  5  
df20: 20 74 31 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d   t1_re    {0 {}}
df30: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
df40: 34 20 73 74 72 69 6e 67 20 33 20 73 74 72 69 6e  4 string 3 strin
df50: 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20 36 20  g 6 string}.  6 
df60: 20 20 74 31 5f 78 78 20 20 20 20 7b 31 20 7b 63    t1_xx    {1 {c
df70: 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74 20 75  olumn a is not u
df80: 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f 6e 65  nique}} 0 {1 one
df90: 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a   2 two 3 three}.
dfa0: 7d 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 43  } {.  catchsql C
dfb0: 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78 65 63 73  OMMIT.  do_execs
dfc0: 71 6c 5f 74 65 73 74 20 20 34 2e 31 35 2e 24 74  ql_test  4.15.$t
dfd0: 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49 4e 53 45  n.1 "BEGIN; INSE
dfe0: 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 56 41 4c  RT INTO $tbl VAL
dff0: 55 45 53 28 33 2c 20 27 74 68 72 65 65 27 29 22  UES(3, 'three')"
e000: 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f  ..  do_catchsql_
e010: 74 65 73 74 20 34 2e 31 35 2e 24 74 6e 2e 32 20  test 4.15.$tn.2 
e020: 22 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  " .    INSERT IN
e030: 54 4f 20 24 74 62 6c 20 53 45 4c 45 43 54 20 28  TO $tbl SELECT (
e040: 28 61 25 32 29 2a 61 2b 33 29 2c 20 27 73 74 72  (a%2)*a+3), 'str
e050: 69 6e 67 27 20 46 52 4f 4d 20 24 74 62 6c 3b 0a  ing' FROM $tbl;.
e060: 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f 74    " $res..  do_t
e070: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
e080: 65 2d 34 2e 31 35 2e 24 74 6e 2e 33 20 7b 20 73  e-4.15.$tn.3 { s
e090: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
e0a0: 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63 0a 20  ommit db } $ac. 
e0b0: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
e0c0: 20 34 2e 31 35 2e 24 74 6e 2e 34 20 22 53 45 4c   4.15.$tn.4 "SEL
e0d0: 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 22  ECT * FROM $tbl"
e0e0: 20 24 64 61 74 61 0a 7d 0a 66 6f 72 65 61 63 68   $data.}.foreach
e0f0: 20 7b 74 6e 20 74 62 6c 20 72 65 73 20 61 63 20   {tn tbl res ac 
e100: 64 61 74 61 7d 20 7b 0a 20 20 31 20 20 20 74 32  data} {.  1   t2
e110: 5f 61 62 20 20 20 20 7b 31 20 7b 74 32 5f 61 62  _ab    {1 {t2_ab
e120: 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65 20 4e 55  .b may not be NU
e130: 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20  LL}} 0 {1 one 2 
e140: 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32  two 3 three}.  2
e150: 20 20 20 74 32 5f 72 6f 20 20 20 20 7b 31 20 7b     t2_ro    {1 {
e160: 74 32 5f 72 6f 2e 62 20 6d 61 79 20 6e 6f 74 20  t2_ro.b may not 
e170: 62 65 20 4e 55 4c 4c 7d 7d 20 31 20 7b 31 20 6f  be NULL}} 1 {1 o
e180: 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20 20 20  ne 2 two}.  3   
e190: 74 32 5f 66 61 20 20 20 20 7b 31 20 7b 74 32 5f  t2_fa    {1 {t2_
e1a0: 66 61 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65 20  fa.b may not be 
e1b0: 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65 20  NULL}} 0 {1 one 
e1c0: 32 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20  2 two 3 three 4 
e1d0: 78 78 7d 0a 20 20 34 20 20 20 74 32 5f 69 67 20  xx}.  4   t2_ig 
e1e0: 20 20 20 7b 30 20 7b 7d 7d 20 30 20 7b 31 20 6f     {0 {}} 0 {1 o
e1f0: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
e200: 20 34 20 78 78 20 36 20 78 78 7d 0a 20 20 35 20   4 xx 6 xx}.  5 
e210: 20 20 74 32 5f 72 65 20 20 20 20 7b 31 20 7b 74    t2_re    {1 {t
e220: 32 5f 72 65 2e 62 20 6d 61 79 20 6e 6f 74 20 62  2_re.b may not b
e230: 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e  e NULL}} 0 {1 on
e240: 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d  e 2 two 3 three}
e250: 0a 20 20 36 20 20 20 74 32 5f 78 78 20 20 20 20  .  6   t2_xx    
e260: 7b 31 20 7b 74 32 5f 78 78 2e 62 20 6d 61 79 20  {1 {t2_xx.b may 
e270: 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 20 30 20  not be NULL}} 0 
e280: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74  {1 one 2 two 3 t
e290: 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61 74 63  hree}.} {.  catc
e2a0: 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 64 6f  hsql COMMIT.  do
e2b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34  _execsql_test  4
e2c0: 2e 31 36 2e 24 74 6e 2e 31 20 22 42 45 47 49 4e  .16.$tn.1 "BEGIN
e2d0: 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74  ; INSERT INTO $t
e2e0: 62 6c 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68  bl VALUES(3, 'th
e2f0: 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63 61 74  ree')"..  do_cat
e300: 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 36 2e  chsql_test 4.16.
e310: 24 74 6e 2e 32 20 22 20 0a 20 20 20 20 49 4e 53  $tn.2 " .    INS
e320: 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 53 45  ERT INTO $tbl SE
e330: 4c 45 43 54 20 61 2b 33 2c 20 43 41 53 45 20 61  LECT a+3, CASE a
e340: 20 57 48 45 4e 20 32 20 54 48 45 4e 20 4e 55 4c   WHEN 2 THEN NUL
e350: 4c 20 45 4c 53 45 20 27 78 78 27 20 45 4e 44 20  L ELSE 'xx' END 
e360: 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22 20 24 72  FROM $tbl.  " $r
e370: 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74 20 65 5f  es..  do_test e_
e380: 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e 31 36  createtable-4.16
e390: 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69 74 65 33  .$tn.3 { sqlite3
e3a0: 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
e3b0: 64 62 20 7d 20 24 61 63 0a 20 20 64 6f 5f 65 78  db } $ac.  do_ex
e3c0: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 36 2e  ecsql_test 4.16.
e3d0: 24 74 6e 2e 34 20 22 53 45 4c 45 43 54 20 2a 20  $tn.4 "SELECT * 
e3e0: 46 52 4f 4d 20 24 74 62 6c 22 20 24 64 61 74 61  FROM $tbl" $data
e3f0: 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74  .}.foreach {tn t
e400: 62 6c 20 72 65 73 20 61 63 20 64 61 74 61 7d 20  bl res ac data} 
e410: 7b 0a 20 20 31 20 20 20 74 33 5f 61 62 20 20 20  {.  1   t3_ab   
e420: 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20   {1 {columns a, 
e430: 62 20 61 72 65 20 6e 6f 74 20 75 6e 69 71 75 65  b are not unique
e440: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e450: 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32 20 20  o 3 three}.  2  
e460: 20 74 33 5f 72 6f 20 20 20 20 7b 31 20 7b 63 6f   t3_ro    {1 {co
e470: 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20 6e  lumns a, b are n
e480: 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31 20 7b 31  ot unique}} 1 {1
e490: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20   one 2 two}.  3 
e4a0: 20 20 74 33 5f 66 61 20 20 20 20 7b 31 20 7b 63    t3_fa    {1 {c
e4b0: 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20  olumns a, b are 
e4c0: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b  not unique}} 0 {
e4d0: 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68  1 one 2 two 3 th
e4e0: 72 65 65 20 34 20 74 68 72 65 65 7d 0a 20 20 34  ree 4 three}.  4
e4f0: 20 20 20 74 33 5f 69 67 20 20 20 20 7b 30 20 7b     t3_ig    {0 {
e500: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e510: 6f 20 33 20 74 68 72 65 65 20 34 20 74 68 72 65  o 3 three 4 thre
e520: 65 20 36 20 74 68 72 65 65 7d 0a 20 20 35 20 20  e 6 three}.  5  
e530: 20 74 33 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d   t3_re    {0 {}}
e540: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e550: 34 20 74 68 72 65 65 20 33 20 74 68 72 65 65 20  4 three 3 three 
e560: 36 20 74 68 72 65 65 7d 0a 20 20 36 20 20 20 74  6 three}.  6   t
e570: 33 5f 78 78 20 20 20 20 7b 31 20 7b 63 6f 6c 75  3_xx    {1 {colu
e580: 6d 6e 73 20 61 2c 20 62 20 61 72 65 20 6e 6f 74  mns a, b are not
e590: 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f   unique}} 0 {1 o
e5a0: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
e5b0: 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  }.} {.  catchsql
e5c0: 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78 65   COMMIT.  do_exe
e5d0: 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 37 2e  csql_test  4.17.
e5e0: 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49 4e  $tn.1 "BEGIN; IN
e5f0: 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 56  SERT INTO $tbl V
e600: 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65 27  ALUES(3, 'three'
e610: 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73 71  )"..  do_catchsq
e620: 6c 5f 74 65 73 74 20 34 2e 31 37 2e 24 74 6e 2e  l_test 4.17.$tn.
e630: 32 20 22 20 0a 20 20 20 20 49 4e 53 45 52 54 20  2 " .    INSERT 
e640: 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45 43 54  INTO $tbl SELECT
e650: 20 28 28 61 25 32 29 2a 61 2b 33 29 2c 20 27 74   ((a%2)*a+3), 't
e660: 68 72 65 65 27 20 46 52 4f 4d 20 24 74 62 6c 0a  hree' FROM $tbl.
e670: 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f 74    " $res..  do_t
e680: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
e690: 65 2d 34 2e 31 37 2e 24 74 6e 2e 33 20 7b 20 73  e-4.17.$tn.3 { s
e6a0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
e6b0: 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63 0a 20  ommit db } $ac. 
e6c0: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
e6d0: 20 34 2e 31 37 2e 24 74 6e 2e 34 20 22 53 45 4c   4.17.$tn.4 "SEL
e6e0: 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 20  ECT * FROM $tbl 
e6f0: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 20  ORDER BY rowid" 
e700: 24 64 61 74 61 0a 7d 0a 63 61 74 63 68 73 71 6c  $data.}.catchsql
e710: 20 43 4f 4d 4d 49 54 0a 0a 23 20 45 56 49 44 45   COMMIT..# EVIDE
e720: 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 36 34 35 2d  NCE-OF: R-12645-
e730: 33 39 37 37 32 20 4f 72 2c 20 69 66 20 61 20 63  39772 Or, if a c
e740: 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69 6e 69  onstraint defini
e750: 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a 23 20  tion does not.# 
e760: 69 6e 63 6c 75 64 65 20 61 20 63 6f 6e 66 6c 69  include a confli
e770: 63 74 2d 63 6c 61 75 73 65 20 6f 72 20 69 74 20  ct-clause or it 
e780: 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  is a CHECK const
e790: 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66 61 75  raint, the defau
e7a0: 6c 74 0a 23 20 63 6f 6e 66 6c 69 63 74 20 72 65  lt.# conflict re
e7b0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
e7c0: 68 6d 20 69 73 20 41 42 4f 52 54 2e 0a 23 0a 23  hm is ABORT..#.#
e7d0: 20 20 20 20 20 54 68 65 20 66 69 72 73 74 20 68       The first h
e7e0: 61 6c 66 20 6f 66 20 74 68 65 20 61 62 6f 76 65  alf of the above
e7f0: 20 69 73 20 74 65 73 74 65 64 20 61 6c 6f 6e 67   is tested along
e800: 20 77 69 74 68 20 65 78 70 6c 69 63 69 74 20 4f   with explicit O
e810: 4e 20 0a 23 20 20 20 20 20 43 4f 4e 46 4c 49 43  N .#     CONFLIC
e820: 54 20 63 6c 61 75 73 65 73 20 61 62 6f 76 65 20  T clauses above 
e830: 28 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74  (specifically, t
e840: 68 65 20 74 65 73 74 73 20 69 6e 76 6f 6c 76 69  he tests involvi
e850: 6e 67 20 74 31 5f 78 78 2c 20 74 32 5f 78 78 0a  ng t1_xx, t2_xx.
e860: 23 20 20 20 20 20 61 6e 64 20 74 33 5f 78 78 29  #     and t3_xx)
e870: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
e880: 6a 75 73 74 20 74 65 73 74 73 20 74 68 61 74 20  just tests that 
e890: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66  the default conf
e8a0: 6c 69 63 74 0a 23 20 20 20 20 20 68 61 6e 64 6c  lict.#     handl
e8b0: 69 6e 67 20 66 6f 72 20 43 48 45 43 4b 20 63 6f  ing for CHECK co
e8c0: 6e 73 74 72 61 69 6e 74 73 20 69 73 20 41 42 4f  nstraints is ABO
e8d0: 52 54 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  RT..#.do_execsql
e8e0: 5f 74 65 73 74 20 34 2e 31 38 2e 31 20 7b 0a 20  _test 4.18.1 {. 
e8f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
e900: 28 61 2c 20 62 20 43 48 45 43 4b 20 28 62 21 3d  (a, b CHECK (b!=
e910: 31 30 29 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  10));.  INSERT I
e920: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 2c  NTO t4 VALUES(1,
e930: 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   2);.  INSERT IN
e940: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 33 2c 20  TO t4 VALUES(3, 
e950: 34 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  4);.}.do_execsql
e960: 5f 74 65 73 74 20 20 34 2e 31 38 2e 32 20 7b 20  _test  4.18.2 { 
e970: 42 45 47 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e  BEGIN; INSERT IN
e980: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 35 2c 20  TO t4 VALUES(5, 
e990: 36 29 20 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  6) }.do_catchsql
e9a0: 5f 74 65 73 74 20 34 2e 31 38 2e 33 20 7b 20 0a  _test 4.18.3 { .
e9b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
e9c0: 20 53 45 4c 45 43 54 20 61 2b 34 2c 20 62 2b 34   SELECT a+4, b+4
e9d0: 20 46 52 4f 4d 20 74 34 0a 7d 20 7b 31 20 7b 63   FROM t4.} {1 {c
e9e0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
e9f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72 65  }}.do_test e_cre
ea00: 61 74 65 74 61 62 6c 65 2d 34 2e 31 38 2e 34 20  atetable-4.18.4 
ea10: 7b 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  { sqlite3_get_au
ea20: 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 30 0a  tocommit db } 0.
ea30: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
ea40: 34 2e 31 38 2e 35 20 7b 20 53 45 4c 45 43 54 20  4.18.5 { SELECT 
ea50: 2a 20 46 52 4f 4d 20 74 34 20 7d 20 7b 31 20 32  * FROM t4 } {1 2
ea60: 20 33 20 34 20 35 20 36 7d 0a 0a 23 20 45 56 49   3 4 5 6}..# EVI
ea70: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 39 31 31  DENCE-OF: R-1911
ea80: 34 2d 35 36 31 31 33 20 44 69 66 66 65 72 65 6e  4-56113 Differen
ea90: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69  t constraints wi
eaa0: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
eab0: 62 6c 65 0a 23 20 6d 61 79 20 68 61 76 65 20 64  ble.# may have d
eac0: 69 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74  ifferent default
ead0: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
eae0: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e  tion algorithms.
eaf0: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
eb00: 73 74 20 34 2e 31 39 2e 30 20 7b 0a 20 20 43 52  st 4.19.0 {.  CR
eb10: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20  EATE TABLE t5(a 
eb20: 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46  NOT NULL ON CONF
eb30: 4c 49 43 54 20 49 47 4e 4f 52 45 2c 20 62 20 4e  LICT IGNORE, b N
eb40: 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c  OT NULL ON CONFL
eb50: 49 43 54 20 41 42 4f 52 54 29 3b 0a 7d 0a 64 6f  ICT ABORT);.}.do
eb60: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34  _catchsql_test 4
eb70: 2e 31 39 2e 31 20 7b 20 49 4e 53 45 52 54 20 49  .19.1 { INSERT I
eb80: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 4e 55  NTO t5 VALUES(NU
eb90: 4c 4c 2c 20 27 6e 6f 74 20 6e 75 6c 6c 27 29 20  LL, 'not null') 
eba0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 65 78 65 63  } {0 {}}.do_exec
ebb0: 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 39 2e 32  sql_test  4.19.2
ebc0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
ebd0: 20 74 35 20 7d 20 7b 7d 0a 64 6f 5f 63 61 74 63   t5 } {}.do_catc
ebe0: 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 39 2e 33  hsql_test 4.19.3
ebf0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
ec00: 35 20 56 41 4c 55 45 53 28 27 6e 6f 74 20 6e 75  5 VALUES('not nu
ec10: 6c 6c 27 2c 20 4e 55 4c 4c 29 20 7d 20 5c 0a 20  ll', NULL) } \. 
ec20: 20 7b 31 20 7b 74 35 2e 62 20 6d 61 79 20 6e 6f   {1 {t5.b may no
ec30: 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a 64 6f 5f 65  t be NULL}}.do_e
ec40: 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31  xecsql_test  4.1
ec50: 39 2e 34 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  9.4 { SELECT * F
ec60: 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 0a 23 2d 2d  ROM t5 } {}..#--
ec70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ec80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ec90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ecb0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 73 20 66  ------.# Tests f
ecc0: 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
ecd0: 52 59 20 4b 45 59 20 61 6e 64 20 72 6f 77 69 64  RY KEY and rowid
ece0: 20 72 65 6c 61 74 65 64 20 73 74 61 74 65 6d 65   related stateme
ecf0: 6e 74 73 2e 0a 23 0a 0a 23 20 45 56 49 44 45 4e  nts..#..# EVIDEN
ed00: 43 45 2d 4f 46 3a 20 52 2d 35 32 35 38 34 2d 30  CE-OF: R-52584-0
ed10: 34 30 30 39 20 54 68 65 20 72 6f 77 69 64 20 76  4009 The rowid v
ed20: 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65  alue can be acce
ed30: 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 0a 23  ssed using one.#
ed40: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
ed50: 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74  case-independent
ed60: 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20   names "rowid", 
ed70: 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69  "oid", or "_rowi
ed80: 64 5f 22 20 69 6e 0a 23 20 70 6c 61 63 65 20 6f  d_" in.# place o
ed90: 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e  f a column name.
eda0: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
edb0: 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  es.do_execsql_te
edc0: 73 74 20 35 2e 31 2e 30 20 7b 0a 20 20 43 52 45  st 5.1.0 {.  CRE
edd0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
ede0: 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  y);.  INSERT INT
edf0: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t1 VALUES('one
ee00: 27 2c 20 27 66 69 72 73 74 27 29 3b 0a 20 20 49  ', 'first');.  I
ee10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
ee20: 4c 55 45 53 28 27 74 77 6f 27 2c 20 27 73 65 63  LUES('two', 'sec
ee30: 6f 6e 64 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  ond');.  INSERT 
ee40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
ee50: 74 68 72 65 65 27 2c 20 27 74 68 69 72 64 27 29  three', 'third')
ee60: 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ;.}.do_createtab
ee70: 6c 65 5f 74 65 73 74 73 20 35 2e 31 20 7b 0a 20  le_tests 5.1 {. 
ee80: 20 31 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77   1   "SELECT row
ee90: 69 64 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20  id FROM t1"     
eea0: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 32 20 20     {1 2 3}.  2  
eeb0: 20 22 53 45 4c 45 43 54 20 6f 69 64 20 46 52 4f   "SELECT oid FRO
eec0: 4d 20 74 31 22 20 20 20 20 20 20 20 20 20 20 7b  M t1"          {
eed0: 31 20 32 20 33 7d 0a 20 20 33 20 20 20 22 53 45  1 2 3}.  3   "SE
eee0: 4c 45 43 54 20 5f 72 6f 77 69 64 5f 20 46 52 4f  LECT _rowid_ FRO
eef0: 4d 20 74 31 22 20 20 20 20 20 20 7b 31 20 32 20  M t1"      {1 2 
ef00: 33 7d 0a 20 20 34 20 20 20 22 53 45 4c 45 43 54  3}.  4   "SELECT
ef10: 20 52 4f 57 49 44 20 46 52 4f 4d 20 74 31 22 20   ROWID FROM t1" 
ef20: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
ef30: 20 35 20 20 20 22 53 45 4c 45 43 54 20 4f 49 44   5   "SELECT OID
ef40: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
ef50: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 36 20 20     {1 2 3}.  6  
ef60: 20 22 53 45 4c 45 43 54 20 5f 52 4f 57 49 44 5f   "SELECT _ROWID_
ef70: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b   FROM t1"      {
ef80: 31 20 32 20 33 7d 0a 20 20 37 20 20 20 22 53 45  1 2 3}.  7   "SE
ef90: 4c 45 43 54 20 52 6f 57 69 44 20 46 52 4f 4d 20  LECT RoWiD FROM 
efa0: 74 31 22 20 20 20 20 20 20 20 20 7b 31 20 32 20  t1"        {1 2 
efb0: 33 7d 0a 20 20 38 20 20 20 22 53 45 4c 45 43 54  3}.  8   "SELECT
efc0: 20 4f 69 44 20 46 52 4f 4d 20 74 31 22 20 20 20   OiD FROM t1"   
efd0: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
efe0: 20 39 20 20 20 22 53 45 4c 45 43 54 20 5f 52 6f   9   "SELECT _Ro
eff0: 57 69 44 5f 20 46 52 4f 4d 20 74 31 22 20 20 20  WiD_ FROM t1"   
f000: 20 20 20 7b 31 20 32 20 33 7d 0a 7d 0a 0a 23 20     {1 2 3}.}..# 
f010: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
f020: 36 35 30 31 2d 31 37 33 30 36 20 49 66 20 61 20  6501-17306 If a 
f030: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
f040: 20 75 73 65 72 20 64 65 66 69 6e 65 64 20 63 6f   user defined co
f050: 6c 75 6d 6e 0a 23 20 6e 61 6d 65 64 20 22 72 6f  lumn.# named "ro
f060: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
f070: 5f 72 6f 77 69 64 5f 22 2c 20 74 68 65 6e 20 74  _rowid_", then t
f080: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
f090: 72 65 66 65 72 73 20 74 68 65 0a 23 20 65 78 70  refers the.# exp
f0a0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
f0b0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
f0c0: 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ot be used to re
f0d0: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
f0e0: 65 72 0a 23 20 72 6f 77 69 64 20 76 61 6c 75 65  er.# rowid value
f0f0: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
f100: 65 73 74 20 35 2e 32 2e 30 20 7b 0a 20 20 43 52  est 5.2.0 {.  CR
f110: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 6f 69  EATE TABLE t2(oi
f120: 64 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20  d, b);.  CREATE 
f130: 54 41 42 4c 45 20 74 33 28 61 2c 20 5f 72 6f 77  TABLE t3(a, _row
f140: 69 64 5f 29 3b 0a 20 20 43 52 45 41 54 45 20 54  id_);.  CREATE T
f150: 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 72 6f  ABLE t4(a, b, ro
f160: 77 69 64 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  wid);..  INSERT 
f170: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
f180: 6f 6e 65 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20  one', 'two');.  
f190: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
f1a0: 41 4c 55 45 53 28 27 74 68 72 65 65 27 2c 20 27  ALUES('three', '
f1b0: 66 6f 75 72 27 29 3b 0a 0a 20 20 49 4e 53 45 52  four');..  INSER
f1c0: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
f1d0: 28 27 66 69 76 65 27 2c 20 27 73 69 78 27 29 3b  ('five', 'six');
f1e0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
f1f0: 33 20 56 41 4c 55 45 53 28 27 73 65 76 65 6e 27  3 VALUES('seven'
f200: 2c 20 27 65 69 67 68 74 27 29 3b 0a 0a 20 20 49  , 'eight');..  I
f210: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
f220: 4c 55 45 53 28 27 6e 69 6e 65 27 2c 20 27 74 65  LUES('nine', 'te
f230: 6e 27 2c 20 27 65 6c 65 76 65 6e 27 29 3b 0a 20  n', 'eleven');. 
f240: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
f250: 56 41 4c 55 45 53 28 27 74 77 65 6c 76 65 27 2c  VALUES('twelve',
f260: 20 27 74 68 69 72 74 65 65 6e 27 2c 20 27 66 6f   'thirteen', 'fo
f270: 75 72 74 65 65 6e 27 29 3b 0a 7d 0a 64 6f 5f 63  urteen');.}.do_c
f280: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
f290: 20 35 2e 32 20 7b 0a 20 20 31 20 20 20 22 53 45   5.2 {.  1   "SE
f2a0: 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c  LECT oid, rowid,
f2b0: 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 32   _rowid_ FROM t2
f2c0: 22 20 20 20 7b 6f 6e 65 20 31 20 31 20 20 20 20  "   {one 1 1    
f2d0: 20 20 74 68 72 65 65 20 32 20 32 7d 0a 20 20 32    three 2 2}.  2
f2e0: 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64 2c 20     "SELECT oid, 
f2f0: 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 20 46  rowid, _rowid_ F
f300: 52 4f 4d 20 74 33 22 20 20 20 7b 31 20 31 20 73  ROM t3"   {1 1 s
f310: 69 78 20 20 20 20 20 20 32 20 32 20 65 69 67 68  ix      2 2 eigh
f320: 74 7d 20 0a 20 20 33 20 20 20 22 53 45 4c 45 43  t} .  3   "SELEC
f330: 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c 20 5f 72  T oid, rowid, _r
f340: 6f 77 69 64 5f 20 46 52 4f 4d 20 74 34 22 20 20  owid_ FROM t4"  
f350: 20 7b 31 20 65 6c 65 76 65 6e 20 31 20 20 20 32   {1 eleven 1   2
f360: 20 66 6f 75 72 74 65 65 6e 20 32 7d 0a 7d 0a 0a   fourteen 2}.}..
f370: 0a 23 20 41 72 67 75 6d 65 6e 74 20 24 74 62 6c  .# Argument $tbl
f380: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
f390: 61 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  a table in the d
f3a0: 61 74 61 62 61 73 65 2e 20 41 72 67 75 6d 65 6e  atabase. Argumen
f3b0: 74 20 24 63 6f 6c 20 69 73 0a 23 20 74 68 65 20  t $col is.# the 
f3c0: 6e 61 6d 65 20 6f 66 20 6f 6e 65 20 6f 66 20 74  name of one of t
f3d0: 68 65 20 74 61 62 6c 65 73 20 63 6f 6c 75 6d 6e  he tables column
f3e0: 73 2e 20 52 65 74 75 72 6e 20 31 20 69 66 20 24  s. Return 1 if $
f3f0: 63 6f 6c 20 69 73 20 61 6e 20 61 6c 69 61 73 20  col is an alias 
f400: 66 6f 72 0a 23 20 74 68 65 20 72 6f 77 69 64 2c  for.# the rowid,
f410: 20 6f 72 20 30 20 6f 74 68 65 72 77 69 73 65 2e   or 0 otherwise.
f420: 0a 23 0a 70 72 6f 63 20 69 73 5f 69 6e 74 65 67  .#.proc is_integ
f430: 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 7b  er_primary_key {
f440: 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20 20 6c 69 6e  tbl col} {.  lin
f450: 64 65 78 20 5b 64 62 20 65 76 61 6c 20 5b 73 75  dex [db eval [su
f460: 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45 54 45  bst {.    DELETE
f470: 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 20 20   FROM $tbl;.    
f480: 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c  INSERT INTO $tbl
f490: 20 28 24 63 6f 6c 29 20 56 41 4c 55 45 53 28 30   ($col) VALUES(0
f4a0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 28 72  );.    SELECT (r
f4b0: 6f 77 69 64 3d 3d 24 63 6f 6c 29 20 46 52 4f 4d  owid==$col) FROM
f4c0: 20 24 74 62 6c 3b 0a 20 20 20 20 44 45 4c 45 54   $tbl;.    DELET
f4d0: 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 7d  E FROM $tbl;.  }
f4e0: 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  ]] 0.}..# EVIDEN
f4f0: 43 45 2d 4f 46 3a 20 52 2d 35 33 37 33 38 2d 33  CE-OF: R-53738-3
f500: 31 36 37 33 20 57 69 74 68 20 6f 6e 65 20 65 78  1673 With one ex
f510: 63 65 70 74 69 6f 6e 2c 20 69 66 20 61 20 74 61  ception, if a ta
f520: 62 6c 65 20 68 61 73 20 61 0a 23 20 70 72 69 6d  ble has a.# prim
f530: 61 72 79 20 6b 65 79 20 74 68 61 74 20 63 6f 6e  ary key that con
f540: 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67 6c  sists of a singl
f550: 65 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  e column, and th
f560: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
f570: 6f 66 0a 23 20 74 68 61 74 20 63 6f 6c 75 6d 6e  of.# that column
f580: 20 69 73 20 22 49 4e 54 45 47 45 52 22 20 69 6e   is "INTEGER" in
f590: 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f 66 20   any mixture of 
f5a0: 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20  upper and lower 
f5b0: 63 61 73 65 2c 20 74 68 65 6e 0a 23 20 74 68 65  case, then.# the
f5c0: 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65 73 20   column becomes 
f5d0: 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
f5e0: 20 72 6f 77 69 64 2e 0a 23 0a 23 20 45 56 49 44   rowid..#.# EVID
f5f0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39 35 31  ENCE-OF: R-45951
f600: 2d 30 38 33 34 37 20 69 66 20 74 68 65 20 64 65  -08347 if the de
f610: 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61 20 63  claration of a c
f620: 6f 6c 75 6d 6e 20 77 69 74 68 0a 23 20 64 65 63  olumn with.# dec
f630: 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e 54 45  lared type "INTE
f640: 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20 61 6e  GER" includes an
f650: 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45   "PRIMARY KEY DE
f660: 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74 20 64  SC" clause, it d
f670: 6f 65 73 0a 23 20 6e 6f 74 20 62 65 63 6f 6d 65  oes.# not become
f680: 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
f690: 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20 6e  e rowid and is n
f6a0: 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61 73  ot classified as
f6b0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20 70 72   an integer.# pr
f6c0: 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64 6f 5f  imary key..#.do_
f6d0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
f6e0: 73 20 35 2e 33 20 2d 74 63 6c 71 75 65 72 79 20  s 5.3 -tclquery 
f6f0: 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65 72 5f  { .  is_integer_
f700: 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 35 20 70  primary_key t5 p
f710: 6b 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  k.} -repair {.  
f720: 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
f730: 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 7b 0a 20  TABLE t5 }.} {. 
f740: 20 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42   1   "CREATE TAB
f750: 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72  LE t5(pk integer
f760: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 22 20 20   primary key)"  
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 20 20 20 20 20 31 0a 20 20 32 20 20 20 22         1.  2   "
f790: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
f7a0: 70 6b 20 69 6e 74 65 67 65 72 2c 20 70 72 69 6d  pk integer, prim
f7b0: 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20 20  ary key(pk))"   
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7d0: 20 31 0a 20 20 33 20 20 20 22 43 52 45 41 54 45   1.  3   "CREATE
f7e0: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
f7f0: 65 67 65 72 2c 20 76 20 69 6e 74 65 67 65 72 2c  eger, v integer,
f800: 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 29   primary key(pk)
f810: 29 22 20 20 20 20 20 20 20 20 20 31 0a 20 20 34  )"         1.  4
f820: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
f830: 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20   t5(pk integer, 
f840: 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61  v integer, prima
f850: 72 79 20 6b 65 79 28 70 6b 2c 20 76 29 29 22 20  ry key(pk, v))" 
f860: 20 20 20 20 20 30 0a 20 20 35 20 20 20 22 43 52       0.  5   "CR
f870: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b  EATE TABLE t5(pk
f880: 20 69 6e 74 2c 20 76 20 69 6e 74 65 67 65 72 2c   int, v integer,
f890: 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 2c   primary key(pk,
f8a0: 20 76 29 29 22 20 20 20 20 20 20 20 20 20 20 30   v))"          0
f8b0: 0a 20 20 36 20 20 20 22 43 52 45 41 54 45 20 54  .  6   "CREATE T
f8c0: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 2c 20  ABLE t5(pk int, 
f8d0: 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61  v integer, prima
f8e0: 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20  ry key(pk))"    
f8f0: 20 20 20 20 20 20 20 20 20 30 0a 20 20 37 20 20           0.  7  
f900: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
f910: 35 28 70 6b 20 69 6e 74 20 70 72 69 6d 61 72 79  5(pk int primary
f920: 20 6b 65 79 2c 20 76 20 69 6e 74 65 67 65 72 29   key, v integer)
f930: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
f940: 20 20 20 30 0a 20 20 38 20 20 20 22 43 52 45 41     0.  8   "CREA
f950: 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69  TE TABLE t5(pk i
f960: 6e 54 45 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nTEger primary k
f970: 65 79 29 22 20 20 20 20 20 20 20 20 20 20 20 20  ey)"            
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 20               1. 
f990: 20 39 20 20 20 22 43 52 45 41 54 45 20 54 41 42   9   "CREATE TAB
f9a0: 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 47 45 72  LE t5(pk inteGEr
f9b0: 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70 6b  , primary key(pk
f9c0: 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ))"             
f9d0: 20 20 20 20 20 20 20 31 0a 20 20 31 30 20 20 22         1.  10  "
f9e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
f9f0: 70 6b 20 49 4e 54 45 47 45 52 2c 20 76 20 69 6e  pk INTEGER, v in
fa00: 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b  teger, primary k
fa10: 65 79 28 70 6b 29 29 22 20 20 20 20 20 20 20 20  ey(pk))"        
fa20: 20 31 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45   1.}..# EVIDENCE
fa30: 2d 4f 46 3a 20 52 2d 34 31 34 34 34 2d 34 39 36  -OF: R-41444-496
fa40: 36 35 20 4f 74 68 65 72 20 69 6e 74 65 67 65 72  65 Other integer
fa50: 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69 6b 65   type names like
fa60: 20 22 49 4e 54 22 20 6f 72 0a 23 20 22 42 49 47   "INT" or.# "BIG
fa70: 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54 20 49  INT" or "SHORT I
fa80: 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e 53 49  NTEGER" or "UNSI
fa90: 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20 63 61  GNED INTEGER" ca
faa0: 75 73 65 73 20 74 68 65 20 70 72 69 6d 61 72 79  uses the primary
fab0: 0a 23 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74 6f  .# key column to
fac0: 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f 72   behave as an or
fad0: 64 69 6e 61 72 79 20 74 61 62 6c 65 20 63 6f 6c  dinary table col
fae0: 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65 72  umn with integer
faf0: 20 61 66 66 69 6e 69 74 79 0a 23 20 61 6e 64 20   affinity.# and 
fb00: 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c 20  a unique index, 
fb10: 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73 20  not as an alias 
fb20: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e 0a 23  for the rowid..#
fb30: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
fb40: 20 35 2e 34 2e 31 20 7b 0a 20 20 43 52 45 41 54   5.4.1 {.  CREAT
fb50: 45 20 54 41 42 4c 45 20 74 36 28 70 6b 20 49 4e  E TABLE t6(pk IN
fb60: 54 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a  T primary key);.
fb70: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
fb80: 37 28 70 6b 20 42 49 47 49 4e 54 20 70 72 69 6d  7(pk BIGINT prim
fb90: 61 72 79 20 6b 65 79 29 3b 0a 20 20 43 52 45 41  ary key);.  CREA
fba0: 54 45 20 54 41 42 4c 45 20 74 38 28 70 6b 20 53  TE TABLE t8(pk S
fbb0: 48 4f 52 54 20 49 4e 54 45 47 45 52 20 70 72 69  HORT INTEGER pri
fbc0: 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43 52 45  mary key);.  CRE
fbd0: 41 54 45 20 54 41 42 4c 45 20 74 39 28 70 6b 20  ATE TABLE t9(pk 
fbe0: 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52  UNSIGNED INTEGER
fbf0: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 7d   primary key);.}
fc00: 20 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72 65 61   .do_test e_crea
fc10: 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e 31 20  tetable-5.4.2.1 
fc20: 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70 72 69  { is_integer_pri
fc30: 6d 61 72 79 5f 6b 65 79 20 74 36 20 70 6b 20 7d  mary_key t6 pk }
fc40: 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72 65   0.do_test e_cre
fc50: 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e 32  atetable-5.4.2.2
fc60: 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70 72   { is_integer_pr
fc70: 69 6d 61 72 79 5f 6b 65 79 20 74 37 20 70 6b 20  imary_key t7 pk 
fc80: 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72  } 0.do_test e_cr
fc90: 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e  eatetable-5.4.2.
fca0: 33 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70  3 { is_integer_p
fcb0: 72 69 6d 61 72 79 5f 6b 65 79 20 74 38 20 70 6b  rimary_key t8 pk
fcc0: 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63   } 0.do_test e_c
fcd0: 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32  reatetable-5.4.2
fce0: 2e 34 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f  .4 { is_integer_
fcf0: 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 39 20 70  primary_key t9 p
fd00: 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78 65 63 73 71  k } 0..do_execsq
fd10: 6c 5f 74 65 73 74 20 35 2e 34 2e 33 20 7b 0a 20  l_test 5.4.3 {. 
fd20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
fd30: 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b 0a 20  VALUES('2.0');. 
fd40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
fd50: 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b 0a 20  VALUES('2.0');. 
fd60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20   INSERT INTO t8 
fd70: 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b 0a 20  VALUES('2.0');. 
fd80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20   INSERT INTO t9 
fd90: 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b 0a 20  VALUES('2.0');. 
fda0: 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 70   SELECT typeof(p
fdb0: 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 36 3b 0a  k), pk FROM t6;.
fdc0: 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28    SELECT typeof(
fdd0: 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 37 3b  pk), pk FROM t7;
fde0: 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66  .  SELECT typeof
fdf0: 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 38  (pk), pk FROM t8
fe00: 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
fe10: 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74  f(pk), pk FROM t
fe20: 39 3b 0a 7d 20 7b 69 6e 74 65 67 65 72 20 32 20  9;.} {integer 2 
fe30: 69 6e 74 65 67 65 72 20 32 20 69 6e 74 65 67 65  integer 2 intege
fe40: 72 20 32 20 69 6e 74 65 67 65 72 20 32 7d 0a 0a  r 2 integer 2}..
fe50: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
fe60: 20 35 2e 34 2e 34 2e 31 20 7b 20 0a 20 20 49 4e   5.4.4.1 { .  IN
fe70: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
fe80: 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b 63 6f  UES(2) .} {1 {co
fe90: 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f 74 20 75  lumn pk is not u
fea0: 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61 74 63 68  nique}}.do_catch
feb0: 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 34 2e 32  sql_test 5.4.4.2
fec0: 20 7b 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54   { .  INSERT INT
fed0: 4f 20 74 37 20 56 41 4c 55 45 53 28 32 29 20 0a  O t7 VALUES(2) .
fee0: 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 70 6b 20  } {1 {column pk 
fef0: 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 0a  is not unique}}.
ff00: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
ff10: 20 35 2e 34 2e 34 2e 33 20 7b 20 0a 20 20 49 4e   5.4.4.3 { .  IN
ff20: 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c  SERT INTO t8 VAL
ff30: 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b 63 6f  UES(2) .} {1 {co
ff40: 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f 74 20 75  lumn pk is not u
ff50: 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61 74 63 68  nique}}.do_catch
ff60: 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 34 2e 34  sql_test 5.4.4.4
ff70: 20 7b 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54   { .  INSERT INT
ff80: 4f 20 74 39 20 56 41 4c 55 45 53 28 32 29 20 0a  O t9 VALUES(2) .
ff90: 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 70 6b 20  } {1 {column pk 
ffa0: 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 0a  is not unique}}.
ffb0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
ffc0: 52 2d 35 36 30 39 34 2d 35 37 38 33 30 20 74 68  R-56094-57830 th
ffd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
ffe0: 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74  e table declarat
fff0: 69 6f 6e 73 20 61 6c 6c 0a 23 20 63 61 75 73 65  ions all.# cause
10000 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78 22 20   the column "x" 
10010 74 6f 20 62 65 20 61 6e 20 61 6c 69 61 73 20 66  to be an alias f
10020 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28 61 6e  or the rowid (an
10030 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
10040 0a 23 20 6b 65 79 29 3a 20 43 52 45 41 54 45 20  .# key): CREATE 
10050 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
10060 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
10070 43 2c 20 79 2c 20 7a 29 3b 20 43 52 45 41 54 45  C, y, z); CREATE
10080 20 54 41 42 4c 45 0a 23 20 74 28 78 20 49 4e 54   TABLE.# t(x INT
10090 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
100a0 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 3b  ARY KEY(x ASC));
100b0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28   CREATE TABLE t(
100c0 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 0a 23 20  x INTEGER, y,.# 
100d0 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  z, PRIMARY KEY(x
100e0 20 44 45 53 43 29 29 3b 0a 23 0a 23 20 45 56 49   DESC));.#.# EVI
100f0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 30 31 34  DENCE-OF: R-2014
10100 39 2d 32 35 38 38 34 20 74 68 65 20 66 6f 6c 6c  9-25884 the foll
10110 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f  owing declaratio
10120 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 75 6c  n does not resul
10130 74 0a 23 20 69 6e 20 22 78 22 20 62 65 69 6e 67  t.# in "x" being
10140 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
10150 65 20 72 6f 77 69 64 3a 20 43 52 45 41 54 45 20  e rowid: CREATE 
10160 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
10170 52 20 50 52 49 4d 41 52 59 0a 23 20 4b 45 59 20  R PRIMARY.# KEY 
10180 44 45 53 43 2c 20 79 2c 20 7a 29 3b 0a 23 0a 64  DESC, y, z);.#.d
10190 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
101a0 73 74 73 20 35 20 2d 74 63 6c 71 75 65 72 79 20  sts 5 -tclquery 
101b0 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65 72 5f  { .  is_integer_
101c0 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 20 78 0a  primary_key t x.
101d0 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61  } -repair {.  ca
101e0 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  tchsql { DROP TA
101f0 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a 20 20 35 2e  BLE t }.} {.  5.
10200 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  1    "CREATE TAB
10210 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52 20 50  LE t(x INTEGER P
10220 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
10230 79 2c 20 7a 29 22 20 20 20 20 20 20 31 0a 20 20  y, z)"      1.  
10240 35 2e 32 20 20 20 20 22 43 52 45 41 54 45 20 54  5.2    "CREATE T
10250 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
10260 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52 59 20  , y, z, PRIMARY 
10270 4b 45 59 28 78 20 41 53 43 29 29 22 20 20 31 0a  KEY(x ASC))"  1.
10280 20 20 35 2e 33 20 20 20 20 22 43 52 45 41 54 45    5.3    "CREATE
10290 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
102a0 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
102b0 59 20 4b 45 59 28 78 20 44 45 53 43 29 29 22 20  Y KEY(x DESC))" 
102c0 31 0a 20 20 36 2e 31 20 20 20 20 22 43 52 45 41  1.  6.1    "CREA
102d0 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
102e0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
102f0 20 44 45 53 43 2c 20 79 2c 20 7a 29 22 20 20 20   DESC, y, z)"   
10300 20 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43    0.}..# EVIDENC
10310 45 2d 4f 46 3a 20 52 2d 30 33 37 33 33 2d 32 39  E-OF: R-03733-29
10320 37 33 34 20 52 6f 77 69 64 20 76 61 6c 75 65 73  734 Rowid values
10330 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69 65 64   may be modified
10340 20 75 73 69 6e 67 20 61 6e 0a 23 20 55 50 44 41   using an.# UPDA
10350 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  TE statement in 
10360 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10370 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75 6d 6e  any other column
10380 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69 74 68   value can, eith
10390 65 72 0a 23 20 75 73 69 6e 67 20 6f 6e 65 20 6f  er.# using one o
103a0 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 61  f the built-in a
103b0 6c 69 61 73 65 73 20 28 22 72 6f 77 69 64 22 2c  liases ("rowid",
103c0 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77 69   "oid" or "_rowi
103d0 64 5f 22 29 20 6f 72 20 62 79 0a 23 20 75 73 69  d_") or by.# usi
103e0 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72 65 61  ng an alias crea
103f0 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65 67 65  ted by an intege
10400 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23  r primary key..#
10410 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
10420 20 35 2e 37 2e 30 20 7b 0a 20 20 43 52 45 41 54   5.7.0 {.  CREAT
10430 45 20 54 41 42 4c 45 20 74 31 30 28 61 2c 20 62  E TABLE t10(a, b
10440 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
10450 20 74 31 30 20 56 41 4c 55 45 53 28 27 74 65 6e   t10 VALUES('ten
10460 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52 45 41 54  ', 10);..  CREAT
10470 45 20 54 41 42 4c 45 20 74 31 31 28 61 2c 20 62  E TABLE t11(a, b
10480 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
10490 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45 52 54 20   KEY);.  INSERT 
104a0 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53 28  INTO t11 VALUES(
104b0 27 74 65 6e 27 2c 20 31 30 29 3b 0a 7d 0a 64 6f  'ten', 10);.}.do
104c0 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
104d0 74 73 20 35 2e 37 2e 31 20 2d 71 75 65 72 79 20  ts 5.7.1 -query 
104e0 7b 20 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69  { .  SELECT rowi
104f0 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f 69 64 20  d, _rowid_, oid 
10500 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b 0a 20 20  FROM t10;.} {.  
10510 31 20 20 20 20 22 55 50 44 41 54 45 20 74 31 30  1    "UPDATE t10
10520 20 53 45 54 20 72 6f 77 69 64 20 3d 20 35 22 20   SET rowid = 5" 
10530 20 20 7b 35 20 35 20 35 7d 0a 20 20 32 20 20 20    {5 5 5}.  2   
10540 20 22 55 50 44 41 54 45 20 74 31 30 20 53 45 54   "UPDATE t10 SET
10550 20 5f 72 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36   _rowid_ = 6" {6
10560 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55 50   6 6}.  3    "UP
10570 44 41 54 45 20 74 31 30 20 53 45 54 20 6f 69 64  DATE t10 SET oid
10580 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20 37   = 7"     {7 7 7
10590 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
105a0 6c 65 5f 74 65 73 74 73 20 35 2e 37 2e 32 20 2d  le_tests 5.7.2 -
105b0 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43  query { .  SELEC
105c0 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f  T rowid, _rowid_
105d0 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20 74 31  , oid, b FROM t1
105e0 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 55  1;.} {.  1    "U
105f0 50 44 41 54 45 20 74 31 31 20 53 45 54 20 72 6f  PDATE t11 SET ro
10600 77 69 64 20 3d 20 35 22 20 20 20 7b 35 20 35 20  wid = 5"   {5 5 
10610 35 20 35 7d 0a 20 20 32 20 20 20 20 22 55 50 44  5 5}.  2    "UPD
10620 41 54 45 20 74 31 31 20 53 45 54 20 5f 72 6f 77  ATE t11 SET _row
10630 69 64 5f 20 3d 20 36 22 20 7b 36 20 36 20 36 20  id_ = 6" {6 6 6 
10640 36 7d 0a 20 20 33 20 20 20 20 22 55 50 44 41 54  6}.  3    "UPDAT
10650 45 20 74 31 31 20 53 45 54 20 6f 69 64 20 3d 20  E t11 SET oid = 
10660 37 22 20 20 20 20 20 7b 37 20 37 20 37 20 37 7d  7"     {7 7 7 7}
10670 0a 20 20 34 20 20 20 20 22 55 50 44 41 54 45 20  .  4    "UPDATE 
10680 74 31 31 20 53 45 54 20 62 20 3d 20 38 22 20 20  t11 SET b = 8"  
10690 20 20 20 20 20 7b 38 20 38 20 38 20 38 7d 0a 7d       {8 8 8 8}.}
106a0 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
106b0 20 52 2d 35 38 37 30 36 2d 31 34 32 32 39 20 53   R-58706-14229 S
106c0 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49 4e 53  imilarly, an INS
106d0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6d 61  ERT statement ma
106e0 79 20 70 72 6f 76 69 64 65 0a 23 20 61 20 76 61  y provide.# a va
106f0 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74 68  lue to use as th
10700 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68  e rowid for each
10710 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 0a 23   row inserted..#
10720 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
10730 74 65 73 74 73 20 35 2e 38 2e 31 20 2d 71 75 65  tests 5.8.1 -que
10740 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 72  ry { .  SELECT r
10750 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f  owid, _rowid_, o
10760 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 2d  id FROM t10;.} -
10770 72 65 70 61 69 72 20 7b 20 0a 20 20 65 78 65 63  repair { .  exec
10780 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46 52 4f  sql { DELETE FRO
10790 4d 20 74 31 30 20 7d 20 0a 7d 20 7b 0a 20 20 31  M t10 } .} {.  1
107a0 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
107b0 20 74 31 30 28 6f 69 64 29 20 56 41 4c 55 45 53   t10(oid) VALUES
107c0 28 31 35 29 22 20 20 20 20 20 20 20 20 20 20 20  (15)"           
107d0 7b 31 35 20 31 35 20 31 35 7d 0a 20 20 32 20 20  {15 15 15}.  2  
107e0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
107f0 31 30 28 72 6f 77 69 64 29 20 56 41 4c 55 45 53  10(rowid) VALUES
10800 28 31 36 29 22 20 20 20 20 20 20 20 20 20 7b 31  (16)"         {1
10810 36 20 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20  6 16 16}.  3    
10820 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30  "INSERT INTO t10
10830 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53  (_rowid_) VALUES
10840 28 31 37 29 22 20 20 20 20 20 20 20 7b 31 37 20  (17)"       {17 
10850 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20 22 49  17 17}.  4    "I
10860 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 28 61  NSERT INTO t10(a
10870 2c 20 62 2c 20 6f 69 64 29 20 56 41 4c 55 45 53  , b, oid) VALUES
10880 28 31 2c 32 2c 33 29 22 20 20 7b 33 20 33 20 33  (1,2,3)"  {3 3 3
10890 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
108a0 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 32 20 2d  le_tests 5.8.2 -
108b0 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43  query { .  SELEC
108c0 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f  T rowid, _rowid_
108d0 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20 74 31  , oid, b FROM t1
108e0 31 3b 0a 7d 20 2d 72 65 70 61 69 72 20 7b 20 0a  1;.} -repair { .
108f0 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45    execsql { DELE
10900 54 45 20 46 52 4f 4d 20 74 31 31 20 7d 20 0a 7d  TE FROM t11 } .}
10910 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52   {.  1    "INSER
10920 54 20 49 4e 54 4f 20 74 31 31 28 6f 69 64 29 20  T INTO t11(oid) 
10930 56 41 4c 55 45 53 28 31 35 29 22 20 20 20 20 20  VALUES(15)"     
10940 20 20 20 20 20 20 7b 31 35 20 31 35 20 31 35 20        {15 15 15 
10950 31 35 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45  15}.  2    "INSE
10960 52 54 20 49 4e 54 4f 20 74 31 31 28 72 6f 77 69  RT INTO t11(rowi
10970 64 29 20 56 41 4c 55 45 53 28 31 36 29 22 20 20  d) VALUES(16)"  
10980 20 20 20 20 20 20 20 7b 31 36 20 31 36 20 31 36         {16 16 16
10990 20 31 36 7d 0a 20 20 33 20 20 20 20 22 49 4e 53   16}.  3    "INS
109a0 45 52 54 20 49 4e 54 4f 20 74 31 31 28 5f 72 6f  ERT INTO t11(_ro
109b0 77 69 64 5f 29 20 56 41 4c 55 45 53 28 31 37 29  wid_) VALUES(17)
109c0 22 20 20 20 20 20 20 20 7b 31 37 20 31 37 20 31  "       {17 17 1
109d0 37 20 31 37 7d 0a 20 20 34 20 20 20 20 22 49 4e  7 17}.  4    "IN
109e0 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 61 2c  SERT INTO t11(a,
109f0 20 62 29 20 56 41 4c 55 45 53 28 31 2c 32 29 22   b) VALUES(1,2)"
10a00 20 20 20 20 20 20 20 20 20 7b 32 20 32 20 32 20           {2 2 2 
10a10 32 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  2}.}..# EVIDENCE
10a20 2d 4f 46 3a 20 52 2d 33 32 33 32 36 2d 34 34 35  -OF: R-32326-445
10a30 39 32 20 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c  92 Unlike normal
10a40 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c   SQLite columns,
10a50 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20 70 72   an integer.# pr
10a60 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
10a70 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63  id column must c
10a80 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76  ontain integer v
10a90 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 0a 23  alues. Integer.#
10aa0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
10ab0 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 73 20 61 72  rowid columns ar
10ac0 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f  e not able to ho
10ad0 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ld floating poin
10ae0 74 0a 23 20 76 61 6c 75 65 73 2c 20 73 74 72 69  t.# values, stri
10af0 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72 20 4e  ngs, BLOBs, or N
10b00 55 4c 4c 73 2e 0a 23 0a 23 20 20 20 20 20 54 68  ULLs..#.#     Th
10b10 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  is is considered
10b20 20 62 79 20 74 68 65 20 74 65 73 74 73 20 66 6f   by the tests fo
10b30 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
10b40 33 20 73 74 61 74 65 6d 65 6e 74 73 2c 0a 23 20  3 statements,.# 
10b50 20 20 20 20 77 68 69 63 68 20 73 68 6f 77 20 74      which show t
10b60 68 61 74 3a 0a 23 0a 23 20 20 20 20 20 20 20 31  hat:.#.#       1
10b70 2e 20 41 74 74 65 6d 70 74 73 20 74 6f 20 55 50  . Attempts to UP
10b80 44 41 54 45 20 61 20 72 6f 77 69 64 20 63 6f 6c  DATE a rowid col
10b90 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e 2d 69 6e 74  umn to a non-int
10ba0 65 67 65 72 20 76 61 6c 75 65 20 66 61 69 6c 2c  eger value fail,
10bb0 0a 23 20 20 20 20 20 20 20 32 2e 20 41 74 74 65  .#       2. Atte
10bc0 6d 70 74 73 20 74 6f 20 49 4e 53 45 52 54 20 61  mpts to INSERT a
10bd0 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 20 6f 72   real, string or
10be0 20 62 6c 6f 62 20 76 61 6c 75 65 20 69 6e 74 6f   blob value into
10bf0 20 61 20 72 6f 77 69 64 20 0a 23 20 20 20 20 20   a rowid .#     
10c00 20 20 20 20 20 63 6f 6c 75 6d 6e 20 66 61 69 6c       column fail
10c10 2c 20 61 6e 64 0a 23 20 20 20 20 20 20 20 33 2e  , and.#       3.
10c20 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 49   Attempting to I
10c30 4e 53 45 52 54 20 61 20 4e 55 4c 4c 20 76 61 6c  NSERT a NULL val
10c40 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69 64 20  ue into a rowid 
10c50 63 6f 6c 75 6d 6e 20 63 61 75 73 65 73 20 74 68  column causes th
10c60 65 0a 23 20 20 20 20 20 20 20 20 20 20 73 79 73  e.#          sys
10c70 74 65 6d 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  tem to automatic
10c80 61 6c 6c 79 20 73 65 6c 65 63 74 20 61 6e 20 69  ally select an i
10c90 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20  nteger value to 
10ca0 75 73 65 2e 0a 23 0a 0a 0a 23 20 45 56 49 44 45  use..#...# EVIDE
10cb0 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 32 32 34 2d  NCE-OF: R-64224-
10cc0 36 32 35 37 38 20 49 66 20 61 6e 20 55 50 44 41  62578 If an UPDA
10cd0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  TE statement att
10ce0 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61 6e 0a  empts to set an.
10cf0 23 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  # integer primar
10d00 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
10d10 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e 55 4c 4c 20  olumn to a NULL 
10d20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
10d30 72 20 74 6f 20 61 0a 23 20 73 74 72 69 6e 67 20  r to a.# string 
10d40 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68  or real value th
10d50 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
10d60 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
10d70 64 20 74 6f 20 61 6e 0a 23 20 69 6e 74 65 67 65  d to an.# intege
10d80 72 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d  r, a "datatype m
10d90 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f  ismatch" error o
10da0 63 63 75 72 73 20 61 6e 64 20 74 68 65 20 73 74  ccurs and the st
10db0 61 74 65 6d 65 6e 74 20 69 73 0a 23 20 61 62 6f  atement is.# abo
10dc0 72 74 65 64 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  rted..#.drop_all
10dd0 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73  _tables.do_execs
10de0 71 6c 5f 74 65 73 74 20 35 2e 39 2e 30 20 7b 0a  ql_test 5.9.0 {.
10df0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
10e00 31 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  12(x INTEGER PRI
10e10 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20  MARY KEY, y);.  
10e20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20  INSERT INTO t12 
10e30 56 41 4c 55 45 53 28 35 2c 20 27 66 69 76 65 27  VALUES(5, 'five'
10e40 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61  );.}.do_createta
10e50 62 6c 65 5f 74 65 73 74 73 20 35 2e 39 2e 31 20  ble_tests 5.9.1 
10e60 2d 71 75 65 72 79 20 7b 20 53 45 4c 45 43 54 20  -query { SELECT 
10e70 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46 52 4f  typeof(x), x FRO
10e80 4d 20 74 31 32 20 7d 20 7b 0a 20 20 31 20 20 20  M t12 } {.  1   
10e90 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
10ea0 78 20 3d 20 34 22 20 20 20 20 20 20 20 7b 69 6e  x = 4"       {in
10eb0 74 65 67 65 72 20 34 7d 0a 20 20 32 20 20 20 22  teger 4}.  2   "
10ec0 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78  UPDATE t12 SET x
10ed0 20 3d 20 31 30 2e 30 22 20 20 20 20 7b 69 6e 74   = 10.0"    {int
10ee0 65 67 65 72 20 31 30 7d 0a 20 20 33 20 20 20 22  eger 10}.  3   "
10ef0 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78  UPDATE t12 SET x
10f00 20 3d 20 27 31 32 2e 30 27 22 20 20 7b 69 6e 74   = '12.0'"  {int
10f10 65 67 65 72 20 31 32 7d 0a 20 20 34 20 20 20 22  eger 12}.  4   "
10f20 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78  UPDATE t12 SET x
10f30 20 3d 20 27 2d 31 35 2e 30 27 22 20 7b 69 6e 74   = '-15.0'" {int
10f40 65 67 65 72 20 2d 31 35 7d 0a 7d 0a 64 6f 5f 63  eger -15}.}.do_c
10f50 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
10f60 20 35 2e 39 2e 32 20 2d 65 72 72 6f 72 20 7b 0a   5.9.2 -error {.
10f70 20 20 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61    datatype misma
10f80 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20 22 55  tch.} {.  1   "U
10f90 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78 20  PDATE t12 SET x 
10fa0 3d 20 34 2e 31 22 20 20 20 20 20 20 20 20 20 7b  = 4.1"         {
10fb0 7d 0a 20 20 32 20 20 20 22 55 50 44 41 54 45 20  }.  2   "UPDATE 
10fc0 74 31 32 20 53 45 54 20 78 20 3d 20 27 68 65 6c  t12 SET x = 'hel
10fd0 6c 6f 27 22 20 20 20 20 20 7b 7d 0a 20 20 33 20  lo'"     {}.  3 
10fe0 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
10ff0 54 20 78 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20  T x = NULL"     
11000 20 20 20 7b 7d 0a 20 20 34 20 20 20 22 55 50 44     {}.  4   "UPD
11010 41 54 45 20 74 31 32 20 53 45 54 20 78 20 3d 20  ATE t12 SET x = 
11020 58 27 41 42 43 44 27 22 20 20 20 20 20 7b 7d 0a  X'ABCD'"     {}.
11030 20 20 35 20 20 20 22 55 50 44 41 54 45 20 74 31    5   "UPDATE t1
11040 32 20 53 45 54 20 78 20 3d 20 58 27 33 39 30 30  2 SET x = X'3900
11050 27 22 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20  '"     {}.  6   
11060 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
11070 78 20 3d 20 58 27 33 39 27 22 20 20 20 20 20 20  x = X'39'"      
11080 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43   {}.}..# EVIDENC
11090 45 2d 4f 46 3a 20 52 2d 30 35 37 33 34 2d 31 33  E-OF: R-05734-13
110a0 36 32 39 20 49 66 20 61 6e 20 49 4e 53 45 52 54  629 If an INSERT
110b0 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
110c0 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20 61 0a  pts to insert a.
110d0 23 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72  # blob value, or
110e0 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72 65 61   a string or rea
110f0 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  l value that can
11100 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73 73 6c  not be losslessl
11110 79 0a 23 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  y.# converted to
11120 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e 74 6f   an integer into
11130 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
11140 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
11150 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23 20 22 64 61   column, a.# "da
11160 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
11170 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 61 6e   error occurs an
11180 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  d the statement 
11190 69 73 20 61 62 6f 72 74 65 64 2e 0a 23 0a 64 6f  is aborted..#.do
111a0 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e  _execsql_test 5.
111b0 31 30 2e 30 20 7b 20 44 45 4c 45 54 45 20 46 52  10.0 { DELETE FR
111c0 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72 65 61  OM t12 }.do_crea
111d0 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e  tetable_tests 5.
111e0 31 30 2e 31 20 2d 65 72 72 6f 72 20 7b 20 0a 20  10.1 -error { . 
111f0 20 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74   datatype mismat
11200 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e  ch.} {.  1   "IN
11210 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11220 20 56 41 4c 55 45 53 28 34 2e 31 29 22 20 20 20   VALUES(4.1)"   
11230 20 20 7b 7d 0a 20 20 32 20 20 20 22 49 4e 53 45    {}.  2   "INSE
11240 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
11250 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29 22 20  ALUES('hello')" 
11260 7b 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54  {}.  3   "INSERT
11270 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
11280 55 45 53 28 58 27 41 42 43 44 27 29 22 20 7b 7d  UES(X'ABCD')" {}
11290 0a 20 20 34 20 20 20 22 49 4e 53 45 52 54 20 49  .  4   "INSERT I
112a0 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55 45  NTO t12(x) VALUE
112b0 53 28 58 27 33 39 30 30 27 29 22 20 7b 7d 0a 20  S(X'3900')" {}. 
112c0 20 35 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   5   "INSERT INT
112d0 4f 20 74 31 32 28 78 29 20 56 41 4c 55 45 53 28  O t12(x) VALUES(
112e0 58 27 33 39 27 29 22 20 20 20 7b 7d 0a 7d 0a 64  X'39')"   {}.}.d
112f0 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
11300 73 74 73 20 35 2e 31 30 2e 32 20 2d 71 75 65 72  sts 5.10.2 -quer
11310 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 74 79  y { .  SELECT ty
11320 70 65 6f 66 28 78 29 2c 20 78 20 46 52 4f 4d 20  peof(x), x FROM 
11330 74 31 32 20 0a 7d 20 2d 72 65 70 61 69 72 20 7b  t12 .} -repair {
11340 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c  .  execsql { DEL
11350 45 54 45 20 46 52 4f 4d 20 74 31 32 20 7d 0a 7d  ETE FROM t12 }.}
11360 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45 52 54   {.  1   "INSERT
11370 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
11380 55 45 53 28 34 29 22 20 20 20 20 20 20 20 7b 69  UES(4)"       {i
11390 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20 20 20  nteger 4}.  2   
113a0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32  "INSERT INTO t12
113b0 28 78 29 20 56 41 4c 55 45 53 28 31 30 2e 30 29  (x) VALUES(10.0)
113c0 22 20 20 20 20 7b 69 6e 74 65 67 65 72 20 31 30  "    {integer 10
113d0 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54 20  }.  3   "INSERT 
113e0 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55  INTO t12(x) VALU
113f0 45 53 28 27 31 32 2e 30 27 29 22 20 20 7b 69 6e  ES('12.0')"  {in
11400 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20 20 20  teger 12}.  4   
11410 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32  "INSERT INTO t12
11420 28 78 29 20 56 41 4c 55 45 53 28 27 34 65 33 27  (x) VALUES('4e3'
11430 29 22 20 20 20 7b 69 6e 74 65 67 65 72 20 34 30  )"   {integer 40
11440 30 30 7d 0a 20 20 35 20 20 20 22 49 4e 53 45 52  00}.  5   "INSER
11450 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41  T INTO t12(x) VA
11460 4c 55 45 53 28 27 2d 31 34 2e 30 27 29 22 20 7b  LUES('-14.0')" {
11470 69 6e 74 65 67 65 72 20 2d 31 34 7d 0a 7d 0a 0a  integer -14}.}..
11480 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
11490 2d 30 37 39 38 36 2d 34 36 30 32 34 20 49 66 20  -07986-46024 If 
114a0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
114b0 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ent attempts to 
114c0 69 6e 73 65 72 74 20 61 0a 23 20 4e 55 4c 4c 20  insert a.# NULL 
114d0 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77  value into a row
114e0 69 64 20 6f 72 20 69 6e 74 65 67 65 72 20 70 72  id or integer pr
114f0 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
11500 2c 20 74 68 65 20 73 79 73 74 65 6d 0a 23 20 63  , the system.# c
11510 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65 67 65  hooses an intege
11520 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61  r value to use a
11530 73 20 74 68 65 20 72 6f 77 69 64 20 61 75 74 6f  s the rowid auto
11540 6d 61 74 69 63 61 6c 6c 79 2e 0a 23 0a 64 6f 5f  matically..#.do_
11550 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 31  execsql_test 5.1
11560 31 2e 30 20 7b 20 44 45 4c 45 54 45 20 46 52 4f  1.0 { DELETE FRO
11570 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72 65 61 74  M t12 }.do_creat
11580 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 31  etable_tests 5.1
11590 31 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45  1 -query { .  SE
115a0 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29 2c 20  LECT typeof(x), 
115b0 78 20 46 52 4f 4d 20 74 31 32 20 57 48 45 52 45  x FROM t12 WHERE
115c0 20 79 20 49 53 20 28 53 45 4c 45 43 54 20 6d 61   y IS (SELECT ma
115d0 78 28 79 29 20 46 52 4f 4d 20 74 31 32 29 0a 7d  x(y) FROM t12).}
115e0 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45 52 54   {.  1   "INSERT
115f0 20 49 4e 54 4f 20 74 31 32 20 44 45 46 41 55 4c   INTO t12 DEFAUL
11600 54 20 56 41 4c 55 45 53 22 20 20 20 20 20 20 20  T VALUES"       
11610 20 20 20 20 20 20 20 20 20 7b 69 6e 74 65 67 65           {intege
11620 72 20 31 7d 0a 20 20 32 20 20 20 22 49 4e 53 45  r 1}.  2   "INSE
11630 52 54 20 49 4e 54 4f 20 74 31 32 28 79 29 20 20  RT INTO t12(y)  
11640 20 56 41 4c 55 45 53 28 35 29 22 20 20 20 20 20   VALUES(5)"     
11650 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e 74 65             {inte
11660 67 65 72 20 32 7d 0a 20 20 33 20 20 20 22 49 4e  ger 2}.  3   "IN
11670 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 2c  SERT INTO t12(x,
11680 79 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  y) VALUES(NULL, 
11690 31 30 29 22 20 20 20 20 20 20 20 20 20 7b 69 6e  10)"         {in
116a0 74 65 67 65 72 20 33 7d 0a 20 20 34 20 20 20 22  teger 3}.  4   "
116b0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
116c0 78 2c 79 29 20 53 45 4c 45 43 54 20 4e 55 4c 4c  x,y) SELECT NULL
116d0 2c 20 31 35 20 46 52 4f 4d 20 74 31 32 22 20 0a  , 15 FROM t12" .
116e0 20 20 20 20 20 20 7b 69 6e 74 65 67 65 72 20 34        {integer 4
116f0 20 69 6e 74 65 67 65 72 20 35 20 69 6e 74 65 67   integer 5 integ
11700 65 72 20 36 7d 0a 20 20 35 20 20 20 22 49 4e 53  er 6}.  5   "INS
11710 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79 29 20  ERT INTO t12(y) 
11720 53 45 4c 45 43 54 20 32 30 20 46 52 4f 4d 20 74  SELECT 20 FROM t
11730 31 32 20 4c 49 4d 49 54 20 33 22 0a 20 20 20 20  12 LIMIT 3".    
11740 20 20 7b 69 6e 74 65 67 65 72 20 37 20 69 6e 74    {integer 7 int
11750 65 67 65 72 20 38 20 69 6e 74 65 67 65 72 20 39  eger 8 integer 9
11760 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }.}..finish_test
11770 0a                                               .