/ Hex Artifact Content
Login

Artifact ee95d48664503d40f6cc9ef4a7d03216188e2ada:


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 33 31 38 32 36  ENCE-OF: R-31826
9940: 2d 30 31 38 31 33 20 41 6e 20 65 72 72 6f 72 20  -01813 An error 
9950: 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f 72  is raised if mor
9960: 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41  e than one PRIMA
9970: 52 59 0a 23 20 4b 45 59 20 63 6c 61 75 73 65 20  RY.# KEY clause 
9980: 61 70 70 65 61 72 73 20 69 6e 20 61 20 43 52 45  appears in a CRE
9990: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
99a0: 65 6e 74 2e 0a 23 0a 23 20 20 20 20 20 54 6f 20  ent..#.#     To 
99b0: 74 65 73 74 20 74 68 65 20 74 77 6f 20 61 62 6f  test the two abo
99c0: 76 65 2c 20 73 68 6f 77 20 74 68 61 74 20 7a 65  ve, show that ze
99d0: 72 6f 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20  ro primary keys 
99e0: 69 73 20 4f 6b 2c 20 6f 6e 65 20 70 72 69 6d 61  is Ok, one prima
99f0: 72 79 0a 23 20 20 20 20 20 6b 65 79 20 69 73 20  ry.#     key is 
9a00: 4f 6b 2c 20 61 6e 64 20 74 77 6f 20 6f 72 20 6d  Ok, and two or m
9a10: 6f 72 65 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ore primary keys
9a20: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 23 0a   is an error..#.
9a30: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
9a40: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
9a50: 65 73 74 73 20 34 2e 31 2e 31 20 7b 0a 20 20 31  ests 4.1.1 {.  1
9a60: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
9a70: 45 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20  E t1(a, b, c)"  
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20        {}.  2    
9ab0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32  "CREATE TABLE t2
9ac0: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
9ad0: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45    {}.  3    "CRE
9b00: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
9b10: 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45  b, c, PRIMARY KE
9b20: 59 28 61 29 29 22 20 20 20 20 20 20 20 20 20 20  Y(a))"          
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
9b40: 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20  .  4    "CREATE 
9b50: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63  TABLE t4(a, b, c
9b60: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 63 2c  , PRIMARY KEY(c,
9b70: 62 2c 61 29 29 22 20 20 20 20 20 20 20 20 20 20  b,a))"          
9b80: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 64            {}.}.d
9b90: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
9ba0: 73 74 73 20 34 2e 31 2e 32 20 2d 65 72 72 6f 72  sts 4.1.2 -error
9bb0: 20 7b 0a 20 20 74 61 62 6c 65 20 22 74 35 22 20   {.  table "t5" 
9bc0: 68 61 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  has more than on
9bd0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 7d 20  e primary key.} 
9be0: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
9bf0: 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49 4d   TABLE t5(a PRIM
9c00: 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d 41  ARY KEY, b PRIMA
9c10: 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20 20  RY KEY, c)"     
9c20: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
9c30: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
9c40: 4c 45 20 74 35 28 61 2c 20 62 20 50 52 49 4d 41  LE t5(a, b PRIMA
9c50: 52 59 20 4b 45 59 2c 20 63 2c 20 50 52 49 4d 41  RY KEY, c, PRIMA
9c60: 52 59 20 4b 45 59 28 61 29 29 22 20 20 20 20 20  RY KEY(a))"     
9c70: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
9c80: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
9c90: 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  5(a INTEGER PRIM
9ca0: 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d 41  ARY KEY, b PRIMA
9cb0: 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20 20  RY KEY, c)"     
9cc0: 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52     {}.  4    "CR
9cd0: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20  EATE TABLE t5(a 
9ce0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9cf0: 4b 45 59 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41  KEY, b, c, PRIMA
9d00: 52 59 20 4b 45 59 28 62 2c 20 63 29 29 22 20 7b  RY KEY(b, c))" {
9d10: 7d 0a 20 20 35 20 20 20 20 22 43 52 45 41 54 45  }.  5    "CREATE
9d20: 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49 4d   TABLE t5(a PRIM
9d30: 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 50  ARY KEY, b, c, P
9d40: 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22 20  RIMARY KEY(a))" 
9d50: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
9d60: 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  6    "CREATE TAB
9d70: 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52 20  LE t5(a INTEGER 
9d80: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
9d90: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61  c, PRIMARY KEY(a
9da0: 29 29 22 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45  ))"    {}.}..# E
9db0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 34  VIDENCE-OF: R-54
9dc0: 37 35 35 2d 33 39 32 39 31 20 54 68 65 20 50 52  755-39291 The PR
9dd0: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 70 74  IMARY KEY is opt
9de0: 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e 61  ional for ordina
9df0: 72 79 0a 23 20 74 61 62 6c 65 73 20 62 75 74 20  ry.# tables but 
9e00: 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
9e10: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
9e20: 62 6c 65 73 2e 0a 23 0a 64 6f 5f 63 61 74 63 68  bles..#.do_catch
9e30: 73 71 6c 5f 74 65 73 74 20 34 2e 31 2e 33 20 7b  sql_test 4.1.3 {
9e40: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
9e50: 74 36 28 61 2c 20 62 29 3b 20 2d 2d 6f 6b 0a 7d  t6(a, b); --ok.}
9e60: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 63 61 74 63 68   {0 {}}.do_catch
9e70: 73 71 6c 5f 74 65 73 74 20 34 2e 31 2e 34 20 7b  sql_test 4.1.4 {
9e80: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
9e90: 74 37 28 61 2c 20 62 29 20 57 49 54 48 4f 55 54  t7(a, b) WITHOUT
9ea0: 20 52 4f 57 49 44 3b 20 2d 2d 45 72 72 6f 72 2c   ROWID; --Error,
9eb0: 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 0a   no PRIMARY KEY.
9ec0: 7d 20 7b 31 20 7b 50 52 49 4d 41 52 59 20 4b 45  } {1 {PRIMARY KE
9ed0: 59 20 6d 69 73 73 69 6e 67 20 6f 6e 20 74 61 62  Y missing on tab
9ee0: 6c 65 20 74 37 7d 7d 0a 0a 0a 70 72 6f 63 20 74  le t7}}...proc t
9ef0: 61 62 6c 65 5f 70 6b 20 7b 74 62 6c 7d 20 7b 20  able_pk {tbl} { 
9f00: 0a 20 20 73 65 74 20 70 6b 20 5b 6c 69 73 74 5d  .  set pk [list]
9f10: 0a 20 20 64 62 20 65 76 61 6c 20 22 70 72 61 67  .  db eval "prag
9f20: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 24 74  ma table_info($t
9f30: 62 6c 29 22 20 61 20 7b 0a 20 20 20 20 69 66 20  bl)" a {.    if 
9f40: 7b 24 61 28 70 6b 29 7d 20 7b 20 6c 61 70 70 65  {$a(pk)} { lappe
9f50: 6e 64 20 70 6b 20 24 61 28 6e 61 6d 65 29 20 7d  nd pk $a(name) }
9f60: 0a 20 20 7d 0a 20 20 73 65 74 20 70 6b 0a 7d 0a  .  }.  set pk.}.
9f70: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
9f80: 52 2d 34 31 34 31 31 2d 31 38 38 33 37 20 49 66  R-41411-18837 If
9f90: 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 50 52   the keywords PR
9fa0: 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61 64  IMARY KEY are ad
9fb0: 64 65 64 20 74 6f 20 61 0a 23 20 63 6f 6c 75 6d  ded to a.# colum
9fc0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68  n definition, th
9fd0: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
9fe0: 65 79 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  ey for the table
9ff0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 61   consists of tha
a000: 74 0a 23 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  t.# single colum
a010: 6e 2e 0a 23 0a 23 20 20 20 20 20 54 68 65 20 61  n..#.#     The a
a020: 62 6f 76 65 20 69 73 20 74 65 73 74 65 64 20 62  bove is tested b
a030: 79 20 34 2e 32 2e 31 2e 2a 0a 23 0a 23 20 45 56  y 4.2.1.*.#.# EV
a040: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 37  IDENCE-OF: R-317
a050: 37 35 2d 34 38 32 30 34 20 4f 72 2c 20 69 66 20  75-48204 Or, if 
a060: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c  a PRIMARY KEY cl
a070: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
a080: 64 20 61 73 0a 23 20 61 20 74 61 62 6c 65 2d 63  d as.# a table-c
a090: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 6e 20  onstraint, then 
a0a0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
a0b0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  of the table con
a0c0: 73 69 73 74 73 20 6f 66 20 74 68 65 0a 23 20 6c  sists of the.# l
a0d0: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
a0e0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
a0f0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
a100: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 23 0a 23 20  KEY clause..#.# 
a110: 20 20 20 20 54 68 65 20 61 62 6f 76 65 20 69 73      The above is
a120: 20 74 65 73 74 65 64 20 62 79 20 34 2e 32 2e 32   tested by 4.2.2
a130: 2e 2a 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  .*.#.do_createta
a140: 62 6c 65 5f 74 65 73 74 73 20 34 2e 32 20 2d 72  ble_tests 4.2 -r
a150: 65 70 61 69 72 20 7b 0a 20 20 63 61 74 63 68 73  epair {.  catchs
a160: 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20  ql { DROP TABLE 
a170: 74 35 20 7d 0a 7d 20 2d 74 63 6c 71 75 65 72 79  t5 }.} -tclquery
a180: 20 7b 0a 20 20 74 61 62 6c 65 5f 70 6b 20 74 35   {.  table_pk t5
a190: 0a 7d 20 7b 0a 20 20 31 2e 31 20 20 20 20 22 43  .} {.  1.1    "C
a1a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
a1b0: 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d  , b INTEGER PRIM
a1c0: 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20  ARY KEY, c)"    
a1d0: 20 20 20 7b 62 7d 0a 20 20 31 2e 32 20 20 20 20     {b}.  1.2    
a1e0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  "CREATE TABLE t5
a1f0: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
a200: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
a210: 20 20 20 20 20 7b 61 7d 0a 0a 20 20 32 2e 31 20       {a}..  2.1 
a220: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
a230: 20 74 35 28 61 2c 20 62 2c 20 63 2c 20 50 52 49   t5(a, b, c, PRI
a240: 4d 41 52 59 20 4b 45 59 28 61 29 29 22 20 20 20  MARY KEY(a))"   
a250: 20 20 20 20 20 20 20 20 7b 61 7d 0a 20 20 32 2e          {a}.  2.
a260: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
a270: 4c 45 20 74 35 28 61 2c 20 62 2c 20 63 2c 20 50  LE t5(a, b, c, P
a280: 52 49 4d 41 52 59 20 4b 45 59 28 63 2c 62 2c 61  RIMARY KEY(c,b,a
a290: 29 29 22 20 20 20 20 20 20 20 7b 61 20 62 20 63  ))"       {a b c
a2a0: 7d 0a 20 20 32 2e 33 20 20 20 20 22 43 52 45 41  }.  2.3    "CREA
a2b0: 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62  TE TABLE t5(a, b
a2c0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
a2d0: 20 4b 45 59 2c 20 63 29 22 20 20 20 20 20 20 20   KEY, c)"       
a2e0: 7b 62 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  {b}.}..# EVIDENC
a2f0: 45 2d 4f 46 3a 20 52 2d 35 39 31 32 34 2d 36 31  E-OF: R-59124-61
a300: 33 33 39 20 45 61 63 68 20 72 6f 77 20 69 6e 20  339 Each row in 
a310: 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 70  a table with a p
a320: 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74 0a  rimary key must.
a330: 23 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  # have a unique 
a340: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76  combination of v
a350: 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70 72 69  alues in its pri
a360: 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  mary key columns
a370: 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..#.# EVIDENCE-O
a380: 46 3a 20 52 2d 33 39 31 30 32 2d 30 36 37 33 37  F: R-39102-06737
a390: 20 49 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   If an INSERT or
a3a0: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
a3b0: 74 20 61 74 74 65 6d 70 74 73 0a 23 20 74 6f 20  t attempts.# to 
a3c0: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
a3d0: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
a3e0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
a3f0: 73 20 66 65 61 74 75 72 65 20 69 64 65 6e 74 69  s feature identi
a400: 63 61 6c 0a 23 20 70 72 69 6d 61 72 79 20 6b 65  cal.# primary ke
a410: 79 20 76 61 6c 75 65 73 2c 20 69 74 20 69 73 20  y values, it is 
a420: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a430: 6c 61 74 69 6f 6e 2e 0a 23 0a 64 72 6f 70 5f 61  lation..#.drop_a
a440: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65  ll_tables.do_exe
a450: 63 73 71 6c 5f 74 65 73 74 20 34 2e 33 2e 30 20  csql_test 4.3.0 
a460: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
a470: 20 74 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45   t1(x PRIMARY KE
a480: 59 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  Y, y);.  INSERT 
a490: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30  INTO t1 VALUES(0
a4a0: 2c 20 20 20 20 20 20 20 20 20 20 27 7a 65 72 6f  ,          'zero
a4b0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a4c0: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 35 2e 35  O t1 VALUES(45.5
a4d0: 2c 20 20 20 20 20 20 20 27 6f 6e 65 27 29 3b 0a  ,       'one');.
a4e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
a4f0: 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65   VALUES('bramble
a500: 73 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  s', 'two');.  IN
a510: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
a520: 55 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 20  UES(X'ABCDEF',  
a530: 27 74 68 72 65 65 27 29 3b 0a 0a 20 20 43 52 45  'three');..  CRE
a540: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 2c 20  ATE TABLE t2(x, 
a550: 79 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  y, PRIMARY KEY(x
a560: 2c 20 79 29 29 3b 0a 20 20 49 4e 53 45 52 54 20  , y));.  INSERT 
a570: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30  INTO t2 VALUES(0
a580: 2c 20 20 20 20 20 20 20 20 20 20 27 7a 65 72 6f  ,          'zero
a590: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a5a0: 4f 20 74 32 20 56 41 4c 55 45 53 28 34 35 2e 35  O t2 VALUES(45.5
a5b0: 2c 20 20 20 20 20 20 20 27 6f 6e 65 27 29 3b 0a  ,       'one');.
a5c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
a5d0: 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65   VALUES('bramble
a5e0: 73 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  s', 'two');.  IN
a5f0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
a600: 55 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 20  UES(X'ABCDEF',  
a610: 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b 7d 0a 0a  'three');.} {}..
a620: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
a630: 65 73 74 73 20 34 2e 33 2e 31 20 2d 65 72 72 6f  ests 4.3.1 -erro
a640: 72 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  r {UNIQUE constr
a650: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e  aint failed: t1.
a660: 78 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53  x} {.  1    "INS
a670: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
a680: 45 53 28 30 2c 20 30 29 22 20 20 20 20 20 20 20  ES(0, 0)"       
a690: 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75            {"colu
a6a0: 6d 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20  mn x is"}.  2   
a6b0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
a6c0: 20 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 27 61   VALUES(45.5, 'a
a6d0: 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b  bc')"          {
a6e0: 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20  "column x is"}. 
a6f0: 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   3    "INSERT IN
a700: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30 2e 30  TO t1 VALUES(0.0
a710: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20  , 'abc')"       
a720: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69      {"column x i
a730: 73 22 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45  s"}.  4    "INSE
a740: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a750: 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 61  S('brambles', 'a
a760: 62 63 27 29 22 20 20 20 20 7b 22 63 6f 6c 75 6d  bc')"    {"colum
a770: 6e 20 78 20 69 73 22 7d 0a 20 20 35 20 20 20 20  n x is"}.  5    
a780: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
a790: 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 46 27  VALUES(X'ABCDEF'
a7a0: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 7b 22  , 'abc')"     {"
a7b0: 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 7d 0a  column x is"}.}.
a7c0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
a7d0: 65 73 74 73 20 34 2e 33 2e 31 20 2d 65 72 72 6f  ests 4.3.1 -erro
a7e0: 72 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  r {UNIQUE constr
a7f0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 32 2e  aint failed: t2.
a800: 78 2c 20 74 32 2e 79 7d 20 7b 0a 20 20 36 20 20  x, t2.y} {.  6  
a810: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
a820: 32 20 56 41 4c 55 45 53 28 30 2c 20 27 7a 65 72  2 VALUES(0, 'zer
a830: 6f 27 29 22 20 20 20 20 20 20 20 20 20 20 20 20  o')"            
a840: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
a850: 72 65 22 7d 0a 20 20 37 20 20 20 20 22 49 4e 53  re"}.  7    "INS
a860: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a870: 45 53 28 34 35 2e 35 2c 20 27 6f 6e 65 27 29 22  ES(45.5, 'one')"
a880: 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75            {"colu
a890: 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20  mns x, y are"}. 
a8a0: 20 38 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   8    "INSERT IN
a8b0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2e 30  TO t2 VALUES(0.0
a8c0: 2c 20 27 7a 65 72 6f 27 29 22 20 20 20 20 20 20  , 'zero')"      
a8d0: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c      {"columns x,
a8e0: 20 79 20 61 72 65 22 7d 0a 20 20 39 20 20 20 20   y are"}.  9    
a8f0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
a900: 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65 73  VALUES('brambles
a910: 27 2c 20 27 74 77 6f 27 29 22 20 20 20 20 7b 22  ', 'two')"    {"
a920: 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65  columns x, y are
a930: 22 7d 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52  "}.  10   "INSER
a940: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
a950: 28 58 27 41 42 43 44 45 46 27 2c 20 27 74 68 72  (X'ABCDEF', 'thr
a960: 65 65 27 29 22 20 20 20 7b 22 63 6f 6c 75 6d 6e  ee')"   {"column
a970: 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 64  s x, y are"}.}.d
a980: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
a990: 73 74 73 20 34 2e 33 2e 32 20 7b 0a 20 20 31 20  sts 4.3.2 {.  1 
a9a0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a9b0: 74 31 20 56 41 4c 55 45 53 28 2d 31 2c 20 30 29  t1 VALUES(-1, 0)
a9c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
a9d0: 20 7b 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45   {}.  2    "INSE
a9e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a9f0: 53 28 34 35 2e 32 2c 20 27 61 62 63 27 29 22 20  S(45.2, 'abc')" 
aa00: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20           {}.  3 
aa10: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aa20: 74 31 20 56 41 4c 55 45 53 28 30 2e 30 31 2c 20  t1 VALUES(0.01, 
aa30: 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20 20  'abc')"         
aa40: 20 7b 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45   {}.  4    "INSE
aa50: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
aa60: 53 28 27 62 72 61 6d 62 6c 65 27 2c 20 27 61 62  S('bramble', 'ab
aa70: 63 27 29 22 20 20 20 20 20 7b 7d 0a 20 20 35 20  c')"     {}.  5 
aa80: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aa90: 74 31 20 56 41 4c 55 45 53 28 58 27 41 42 43 44  t1 VALUES(X'ABCD
aaa0: 45 45 27 2c 20 27 61 62 63 27 29 22 20 20 20 20  EE', 'abc')"    
aab0: 20 7b 7d 0a 0a 20 20 36 20 20 20 20 22 49 4e 53   {}..  6    "INS
aac0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
aad0: 45 53 28 30 2c 20 30 29 22 20 20 20 20 20 20 20  ES(0, 0)"       
aae0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 37            {}.  7
aaf0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ab00: 20 74 32 20 56 41 4c 55 45 53 28 34 35 2e 35 2c   t2 VALUES(45.5,
ab10: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20   'abc')"        
ab20: 20 20 7b 7d 0a 20 20 38 20 20 20 20 22 49 4e 53    {}.  8    "INS
ab30: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ab40: 45 53 28 30 2e 30 2c 20 27 61 62 63 27 29 22 20  ES(0.0, 'abc')" 
ab50: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 39            {}.  9
ab60: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ab70: 20 74 32 20 56 41 4c 55 45 53 28 27 62 72 61 6d   t2 VALUES('bram
ab80: 62 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20 20  bles', 'abc')"  
ab90: 20 20 7b 7d 0a 20 20 31 30 20 20 20 22 49 4e 53    {}.  10   "INS
aba0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
abb0: 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 27 61  ES(X'ABCDEF', 'a
abc0: 62 63 27 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 64  bc')"     {}.}.d
abd0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
abe0: 73 74 73 20 34 2e 33 2e 33 20 2d 65 72 72 6f 72  sts 4.3.3 -error
abf0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
ac00: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 78  int failed: t1.x
ac10: 7d 20 7b 0a 20 20 31 20 20 20 20 22 55 50 44 41  } {.  1    "UPDA
ac20: 54 45 20 74 31 20 53 45 54 20 78 3d 30 20 20 20  TE t1 SET x=0   
ac30: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 79 3d          WHERE y=
ac40: 27 74 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75  'two'"    {"colu
ac50: 6d 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20  mn x is"}.  2   
ac60: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
ac70: 78 3d 27 62 72 61 6d 62 6c 65 73 27 20 20 57 48  x='brambles'  WH
ac80: 45 52 45 20 79 3d 27 74 68 72 65 65 27 22 20 20  ERE y='three'"  
ac90: 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a  {"column x is"}.
aca0: 20 20 33 20 20 20 20 22 55 50 44 41 54 45 20 74    3    "UPDATE t
acb0: 31 20 53 45 54 20 78 3d 34 35 2e 35 20 20 20 20  1 SET x=45.5    
acc0: 20 20 20 20 57 48 45 52 45 20 79 3d 27 7a 65 72      WHERE y='zer
acd0: 6f 27 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78  o'"   {"column x
ace0: 20 69 73 22 7d 0a 20 20 34 20 20 20 20 22 55 50   is"}.  4    "UP
acf0: 44 41 54 45 20 74 31 20 53 45 54 20 78 3d 58 27  DATE t1 SET x=X'
ad00: 41 42 43 44 45 46 27 20 20 20 57 48 45 52 45 20  ABCDEF'   WHERE 
ad10: 79 3d 27 6f 6e 65 27 22 20 20 20 20 7b 22 63 6f  y='one'"    {"co
ad20: 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 35 20  lumn x is"}.  5 
ad30: 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45     "UPDATE t1 SE
ad40: 54 20 78 3d 30 2e 30 20 20 20 20 20 20 20 20 20  T x=0.0         
ad50: 57 48 45 52 45 20 79 3d 27 74 68 72 65 65 27 22  WHERE y='three'"
ad60: 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22    {"column x is"
ad70: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
ad80: 6c 65 5f 74 65 73 74 73 20 34 2e 33 2e 33 20 2d  le_tests 4.3.3 -
ad90: 65 72 72 6f 72 20 7b 55 4e 49 51 55 45 20 63 6f  error {UNIQUE co
ada0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
adb0: 20 74 32 2e 78 2c 20 74 32 2e 79 7d 20 7b 0a 20   t2.x, t2.y} {. 
adc0: 20 36 20 20 20 20 22 55 50 44 41 54 45 20 74 32   6    "UPDATE t2
add0: 20 53 45 54 20 78 3d 30 2c 20 79 3d 27 7a 65 72   SET x=0, y='zer
ade0: 6f 27 20 57 48 45 52 45 20 79 3d 27 74 77 6f 27  o' WHERE y='two'
adf0: 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78  "    {"columns x
ae00: 2c 20 79 20 61 72 65 22 7d 0a 20 20 37 20 20 20  , y are"}.  7   
ae10: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
ae20: 78 3d 27 62 72 61 6d 62 6c 65 73 27 2c 20 79 3d  x='brambles', y=
ae30: 27 74 77 6f 27 20 57 48 45 52 45 20 79 3d 27 74  'two' WHERE y='t
ae40: 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20 20  hree'"  .       
ae50: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
ae60: 72 65 22 7d 0a 20 20 38 20 20 20 20 22 55 50 44  re"}.  8    "UPD
ae70: 41 54 45 20 74 32 20 53 45 54 20 78 3d 34 35 2e  ATE t2 SET x=45.
ae80: 35 2c 20 79 3d 27 6f 6e 65 27 20 57 48 45 52 45  5, y='one' WHERE
ae90: 20 79 3d 27 7a 65 72 6f 27 22 20 7b 22 63 6f 6c   y='zero'" {"col
aea0: 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a  umns x, y are"}.
aeb0: 20 20 39 20 20 20 20 22 55 50 44 41 54 45 20 74    9    "UPDATE t
aec0: 32 20 53 45 54 20 78 3d 58 27 41 42 43 44 45 46  2 SET x=X'ABCDEF
aed0: 27 2c 20 79 3d 27 74 68 72 65 65 27 20 57 48 45  ', y='three' WHE
aee0: 52 45 20 79 3d 27 6f 6e 65 27 22 20 0a 20 20 20  RE y='one'" .   
aef0: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c      {"columns x,
af00: 20 79 20 61 72 65 22 7d 0a 20 20 31 30 20 20 20   y are"}.  10   
af10: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 78  "UPDATE t2 SET x
af20: 3d 30 2e 30 2c 20 79 3d 27 7a 65 72 6f 27 20 20  =0.0, y='zero'  
af30: 20 20 20 20 20 20 57 48 45 52 45 20 79 3d 27 74        WHERE y='t
af40: 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20 20  hree'"  .       
af50: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
af60: 72 65 22 7d 0a 7d 0a 0a 0a 23 20 45 56 49 44 45  re"}.}...# EVIDE
af70: 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 37 32 2d  NCE-OF: R-52572-
af80: 30 32 30 37 38 20 46 6f 72 20 74 68 65 20 70 75  02078 For the pu
af90: 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d  rposes of determ
afa0: 69 6e 69 6e 67 20 74 68 65 0a 23 20 75 6e 69 71  ining the.# uniq
afb0: 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72  ueness of primar
afc0: 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55  y key values, NU
afd0: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
afe0: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
aff0: 74 0a 23 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  t.# from all oth
b000: 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75  er values, inclu
b010: 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73  ding other NULLs
b020: 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ..#.do_createtab
b030: 6c 65 5f 74 65 73 74 73 20 34 2e 34 20 7b 0a 20  le_tests 4.4 {. 
b040: 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
b050: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
b060: 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20  L, 0)"          
b070: 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 49      {}.  2    "I
b080: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
b090: 4c 55 45 53 28 4e 55 4c 4c 2c 20 30 29 22 20 20  LUES(NULL, 0)"  
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
b0b0: 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   3    "INSERT IN
b0c0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
b0d0: 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20  L, 0)"          
b0e0: 20 20 20 20 7b 7d 0a 0a 20 20 34 20 20 20 20 22      {}..  4    "
b0f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
b100: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 7a 65 72  ALUES(NULL, 'zer
b110: 6f 27 29 22 20 20 20 20 20 20 20 20 20 7b 7d 0a  o')"         {}.
b120: 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20 49    5    "INSERT I
b130: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
b140: 4c 4c 2c 20 27 6f 6e 65 27 29 22 20 20 20 20 20  LL, 'one')"     
b150: 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 20 22       {}.  6    "
b160: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
b170: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 74 77 6f  ALUES(NULL, 'two
b180: 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  ')"          {}.
b190: 20 20 37 20 20 20 20 22 49 4e 53 45 52 54 20 49    7    "INSERT I
b1a0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
b1b0: 4c 4c 2c 20 27 74 68 72 65 65 27 29 22 20 20 20  LL, 'three')"   
b1c0: 20 20 20 20 20 7b 7d 0a 0a 20 20 38 20 20 20 20       {}..  8    
b1d0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b1e0: 56 41 4c 55 45 53 28 30 2c 20 4e 55 4c 4c 29 22  VALUES(0, NULL)"
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
b200: 0a 20 20 39 20 20 20 20 22 49 4e 53 45 52 54 20  .  9    "INSERT 
b210: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
b220: 35 2e 35 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20  5.5, NULL)"     
b230: 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20 20        {}.  10   
b240: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b250: 56 41 4c 55 45 53 28 30 2e 30 2c 20 4e 55 4c 4c  VALUES(0.0, NULL
b260: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  )"            {}
b270: 0a 20 20 31 31 20 20 20 22 49 4e 53 45 52 54 20  .  11   "INSERT 
b280: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
b290: 62 72 61 6d 62 6c 65 73 27 2c 20 4e 55 4c 4c 29  brambles', NULL)
b2a0: 22 20 20 20 20 20 7b 7d 0a 20 20 31 32 20 20 20  "     {}.  12   
b2b0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b2c0: 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 46 27  VALUES(X'ABCDEF'
b2d0: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 7b 7d  , NULL)"      {}
b2e0: 0a 0a 20 20 31 33 20 20 20 22 49 4e 53 45 52 54  ..  13   "INSERT
b2f0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b300: 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20  NULL, NULL)"    
b310: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 34 20 20         {}.  14  
b320: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b330: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55   VALUES(NULL, NU
b340: 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 7b  LL)"           {
b350: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
b360: 4f 46 3a 20 52 2d 33 35 31 31 33 2d 34 33 32 31  OF: R-35113-4321
b370: 34 20 55 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c  4 Unless the col
b380: 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54 45 47 45  umn is an INTEGE
b390: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 23 20  R PRIMARY KEY.# 
b3a0: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  or the table is 
b3b0: 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
b3c0: 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c  table or the col
b3d0: 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20  umn is declared 
b3e0: 4e 4f 54 0a 23 20 4e 55 4c 4c 2c 20 53 51 4c 69  NOT.# NULL, SQLi
b3f0: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
b400: 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41  alues in a PRIMA
b410: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 0a 23  RY KEY column..#
b420: 0a 23 20 20 20 20 20 49 66 20 74 68 65 20 63 6f  .#     If the co
b430: 6c 75 6d 6e 20 69 73 20 61 6e 20 69 6e 74 65 67  lumn is an integ
b440: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20  er primary key, 
b450: 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 69 6e  attempting to in
b460: 73 65 72 74 20 61 20 4e 55 4c 4c 0a 23 20 20 20  sert a NULL.#   
b470: 20 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d    into the colum
b480: 6e 20 74 72 69 67 67 65 72 73 20 74 68 65 20 61  n triggers the a
b490: 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 62 65  uto-increment be
b4a0: 68 61 76 69 6f 72 2e 20 41 74 74 65 6d 70 74 69  havior. Attempti
b4b0: 6e 67 0a 23 20 20 20 20 20 74 6f 20 75 73 65 20  ng.#     to use 
b4c0: 55 50 44 41 54 45 20 74 6f 20 73 65 74 20 61 6e  UPDATE to set an
b4d0: 20 69 70 6b 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   ipk column to a
b4e0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 61   NULL value is a
b4f0: 6e 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 63 72  n error..#.do_cr
b500: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
b510: 34 2e 35 2e 31 20 7b 0a 20 20 31 20 20 20 20 22  4.5.1 {.  1    "
b520: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
b530: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
b540: 49 53 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20  IS NULL"        
b550: 20 20 20 20 20 20 20 20 20 20 20 33 0a 20 20 32             3.  2
b560: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
b570: 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45  t(*) FROM t2 WHE
b580: 52 45 20 78 20 49 53 20 4e 55 4c 4c 22 20 20 20  RE x IS NULL"   
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 36 0a 20 20 33 20 20 20 20 22 53 45 4c 45 43 54  6.  3    "SELECT
b5b0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
b5c0: 32 20 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c  2 WHERE y IS NUL
b5d0: 4c 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L"              
b5e0: 20 20 20 20 20 37 0a 20 20 34 20 20 20 20 22 53       7.  4    "S
b5f0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
b600: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78 20 49  ROM t2 WHERE x I
b610: 53 20 4e 55 4c 4c 20 41 4e 44 20 79 20 49 53 20  S NULL AND y IS 
b620: 4e 55 4c 4c 22 20 20 20 20 20 32 0a 7d 0a 64 6f  NULL"     2.}.do
b630: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
b640: 35 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 54  5.2 {.  CREATE T
b650: 41 42 4c 45 20 74 33 28 73 2c 20 75 20 49 4e 54  ABLE t3(s, u INT
b660: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b670: 2c 20 76 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , v);.  INSERT I
b680: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c  NTO t3 VALUES(1,
b690: 20 4e 55 4c 4c 2c 20 32 29 3b 0a 20 20 49 4e 53   NULL, 2);.  INS
b6a0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
b6b0: 45 53 28 27 78 27 2c 20 4e 55 4c 4c 2c 20 27 79  ES('x', NULL, 'y
b6c0: 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 75 20 46  ');.  SELECT u F
b6d0: 52 4f 4d 20 74 33 3b 0a 7d 20 7b 31 20 32 7d 0a  ROM t3;.} {1 2}.
b6e0: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
b6f0: 20 34 2e 35 2e 33 20 7b 0a 20 20 49 4e 53 45 52   4.5.3 {.  INSER
b700: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
b710: 28 32 2c 20 35 2c 20 33 29 3b 0a 20 20 55 50 44  (2, 5, 3);.  UPD
b720: 41 54 45 20 74 33 20 53 45 54 20 75 20 3d 20 4e  ATE t3 SET u = N
b730: 55 4c 4c 20 57 48 45 52 45 20 73 20 3d 20 32 3b  ULL WHERE s = 2;
b740: 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20  .} {1 {datatype 
b750: 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 63 61  mismatch}}.do_ca
b760: 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 35 2e  tchsql_test 4.5.
b770: 34 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  4 {.  CREATE TAB
b780: 4c 45 20 74 34 28 73 2c 20 75 20 49 4e 54 20 50  LE t4(s, u INT P
b790: 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 20 57  RIMARY KEY, v) W
b7a0: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
b7b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
b7c0: 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20 32  ALUES(1, NULL, 2
b7d0: 29 3b 0a 7d 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c  );.} {1 {NOT NUL
b7e0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  L constraint fai
b7f0: 6c 65 64 3a 20 74 34 2e 75 7d 7d 0a 64 6f 5f 63  led: t4.u}}.do_c
b800: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 35  atchsql_test 4.5
b810: 2e 35 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .5 {.  CREATE TA
b820: 42 4c 45 20 74 35 28 73 2c 20 75 20 49 4e 54 20  BLE t5(s, u INT 
b830: 50 52 49 4d 41 52 59 20 4b 45 59 20 4e 4f 54 20  PRIMARY KEY NOT 
b840: 4e 55 4c 4c 2c 20 76 29 3b 0a 20 20 49 4e 53 45  NULL, v);.  INSE
b850: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
b860: 53 28 31 2c 20 4e 55 4c 4c 2c 20 32 29 3b 0a 7d  S(1, NULL, 2);.}
b870: 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f   {1 {NOT NULL co
b880: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
b890: 20 74 35 2e 75 7d 7d 0a 0a 23 20 45 56 49 44 45   t5.u}}..# EVIDE
b8a0: 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 32 32 37 2d  NCE-OF: R-00227-
b8b0: 32 31 30 38 30 20 41 20 55 4e 49 51 55 45 20 63  21080 A UNIQUE c
b8c0: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
b8d0: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
b8e0: 59 0a 23 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  Y.# KEY constrai
b8f0: 6e 74 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  nt, except that 
b900: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
b910: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
b920: 65 72 20 6f 66 0a 23 20 55 4e 49 51 55 45 20 63  er of.# UNIQUE c
b930: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 23 0a 64 72  onstraints..#.dr
b940: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
b950: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
b960: 74 73 20 34 2e 36 20 7b 0a 20 20 31 20 20 20 20  ts 4.6 {.  1    
b970: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
b980: 28 61 20 55 4e 49 51 55 45 2c 20 62 20 55 4e 49  (a UNIQUE, b UNI
b990: 51 55 45 29 22 20 20 20 20 20 20 20 20 20 20 20  QUE)"           
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
b9b0: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
b9c0: 42 4c 45 20 74 32 28 61 20 55 4e 49 51 55 45 2c  BLE t2(a UNIQUE,
b9d0: 20 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 63 2c   b, c, UNIQUE(c,
b9e0: 20 62 29 29 22 20 20 20 20 20 20 20 20 20 20 20   b))"           
b9f0: 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45    {}.  3    "CRE
ba00: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
ba10: 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 61 29 2c  b, c, UNIQUE(a),
ba20: 20 55 4e 49 51 55 45 28 62 29 2c 20 55 4e 49 51   UNIQUE(b), UNIQ
ba30: 55 45 28 63 29 29 22 20 7b 7d 0a 20 20 34 20 20  UE(c))" {}.  4  
ba40: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
ba50: 74 34 28 61 2c 20 62 2c 20 63 2c 20 55 4e 49 51  t4(a, b, c, UNIQ
ba60: 55 45 28 61 2c 20 62 2c 20 63 29 29 22 20 20 20  UE(a, b, c))"   
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
ba80: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
ba90: 46 3a 20 52 2d 33 30 39 38 31 2d 36 34 31 36 38  F: R-30981-64168
baa0: 20 46 6f 72 20 65 61 63 68 20 55 4e 49 51 55 45   For each UNIQUE
bab0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20 74   constraint on t
bac0: 68 65 20 74 61 62 6c 65 2c 0a 23 20 65 61 63 68  he table,.# each
bad0: 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69   row must contai
bae0: 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  n a unique combi
baf0: 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73  nation of values
bb00: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a   in the columns.
bb10: 23 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  # identified by 
bb20: 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  the UNIQUE const
bb30: 72 61 69 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45  raint..#.# EVIDE
bb40: 4e 43 45 2d 4f 46 3a 20 52 2d 35 39 31 32 34 2d  NCE-OF: R-59124-
bb50: 36 31 33 33 39 20 45 61 63 68 20 72 6f 77 20 69  61339 Each row i
bb60: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
bb70: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73   primary key mus
bb80: 74 0a 23 20 68 61 76 65 20 61 20 75 6e 69 71 75  t.# have a uniqu
bb90: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bba0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
bbb0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
bbc0: 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ns..#.do_execsql
bbd0: 5f 74 65 73 74 20 34 2e 37 2e 30 20 7b 0a 20 20  _test 4.7.0 {.  
bbe0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
bbf0: 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 49  ALUES(1, 2);.  I
bc00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
bc10: 4c 55 45 53 28 34 2e 33 2c 20 35 2e 35 29 3b 0a  LUES(4.3, 5.5);.
bc20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
bc30: 20 56 41 4c 55 45 53 28 27 72 65 76 65 61 6c 27   VALUES('reveal'
bc40: 2c 20 27 76 61 72 69 61 62 6c 65 6e 65 73 73 27  , 'variableness'
bc50: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
bc60: 20 74 31 20 56 41 4c 55 45 53 28 58 27 31 32 33   t1 VALUES(X'123
bc70: 34 35 36 27 2c 20 58 27 36 35 34 33 32 31 27 29  456', X'654321')
bc80: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
bc90: 20 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27   t4 VALUES('xyx'
bca0: 2c 20 31 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52  , 1, 1);.  INSER
bcb0: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
bcc0: 28 27 78 79 78 27 2c 20 32 2c 20 31 29 3b 0a 20  ('xyx', 2, 1);. 
bcd0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
bce0: 56 41 4c 55 45 53 28 27 75 76 77 27 2c 20 31 2c  VALUES('uvw', 1,
bcf0: 20 31 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65   1);.}.do_create
bd00: 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 37 2e  table_tests 4.7.
bd10: 31 20 2d 65 72 72 6f 72 20 7b 55 4e 49 51 55 45  1 -error {UNIQUE
bd20: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
bd30: 65 64 3a 20 25 73 7d 20 7b 0a 20 20 31 20 20 20  ed: %s} {.  1   
bd40: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
bd50: 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27   VALUES(1, 'one'
bd60: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  )"             {
bd70: 7b 74 31 2e 61 7d 7d 0a 20 20 32 20 20 20 20 22  {t1.a}}.  2    "
bd80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
bd90: 41 4c 55 45 53 28 34 2e 33 2c 20 27 74 77 6f 27  ALUES(4.3, 'two'
bda0: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 74  )"           {{t
bdb0: 31 2e 61 7d 7d 0a 20 20 33 20 20 20 20 22 49 4e  1.a}}.  3    "IN
bdc0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
bdd0: 55 45 53 28 27 72 65 76 65 61 6c 27 2c 20 27 74  UES('reveal', 't
bde0: 68 72 65 65 27 29 22 20 20 20 20 7b 7b 74 31 2e  hree')"    {{t1.
bdf0: 61 7d 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45  a}}.  4    "INSE
be00: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
be10: 53 28 58 27 31 32 33 34 35 36 27 2c 20 27 66 6f  S(X'123456', 'fo
be20: 75 72 27 29 22 20 20 20 20 7b 7b 74 31 2e 61 7d  ur')"    {{t1.a}
be30: 7d 0a 0a 20 20 35 20 20 20 20 22 55 50 44 41 54  }..  5    "UPDAT
be40: 45 20 74 31 20 53 45 54 20 61 20 3d 20 31 20 57  E t1 SET a = 1 W
be50: 48 45 52 45 20 72 6f 77 69 64 3d 32 22 20 20 20  HERE rowid=2"   
be60: 20 20 20 20 20 20 20 20 7b 7b 74 31 2e 61 7d 7d          {{t1.a}}
be70: 0a 20 20 36 20 20 20 20 22 55 50 44 41 54 45 20  .  6    "UPDATE 
be80: 74 31 20 53 45 54 20 61 20 3d 20 34 2e 33 20 57  t1 SET a = 4.3 W
be90: 48 45 52 45 20 72 6f 77 69 64 3d 33 22 20 20 20  HERE rowid=3"   
bea0: 20 20 20 20 20 20 7b 7b 74 31 2e 61 7d 7d 0a 20        {{t1.a}}. 
beb0: 20 37 20 20 20 20 22 55 50 44 41 54 45 20 74 31   7    "UPDATE t1
bec0: 20 53 45 54 20 61 20 3d 20 27 72 65 76 65 61 6c   SET a = 'reveal
bed0: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 34 22  ' WHERE rowid=4"
bee0: 20 20 20 20 7b 7b 74 31 2e 61 7d 7d 0a 20 20 38      {{t1.a}}.  8
bef0: 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53      "UPDATE t1 S
bf00: 45 54 20 61 20 3d 20 58 27 31 32 33 34 35 36 27  ET a = X'123456'
bf10: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20   WHERE rowid=1" 
bf20: 20 20 7b 7b 74 31 2e 61 7d 7d 0a 0a 20 20 39 20    {{t1.a}}..  9 
bf30: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
bf40: 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c  t4 VALUES('xyx',
bf50: 20 31 2c 20 31 29 22 20 20 20 20 20 20 20 20 20   1, 1)"         
bf60: 20 7b 7b 74 34 2e 61 2c 20 74 34 2e 62 2c 20 74   {{t4.a, t4.b, t
bf70: 34 2e 63 7d 7d 0a 20 20 31 30 20 20 20 22 49 4e  4.c}}.  10   "IN
bf80: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
bf90: 55 45 53 28 27 78 79 78 27 2c 20 32 2c 20 31 29  UES('xyx', 2, 1)
bfa0: 22 20 20 20 20 20 20 20 20 20 20 7b 7b 74 34 2e  "          {{t4.
bfb0: 61 2c 20 74 34 2e 62 2c 20 74 34 2e 63 7d 7d 0a  a, t4.b, t4.c}}.
bfc0: 20 20 31 31 20 20 20 22 49 4e 53 45 52 54 20 49    11   "INSERT I
bfd0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 75  NTO t4 VALUES('u
bfe0: 76 77 27 2c 20 31 2c 20 31 29 22 20 20 20 20 20  vw', 1, 1)"     
bff0: 20 20 20 20 20 7b 7b 74 34 2e 61 2c 20 74 34 2e       {{t4.a, t4.
c000: 62 2c 20 74 34 2e 63 7d 7d 0a 0a 20 20 31 32 20  b, t4.c}}..  12 
c010: 20 20 22 55 50 44 41 54 45 20 74 34 20 53 45 54    "UPDATE t4 SET
c020: 20 61 3d 27 78 79 78 27 20 57 48 45 52 45 20 72   a='xyx' WHERE r
c030: 6f 77 69 64 3d 33 22 20 20 20 20 20 20 20 20 20  owid=3"         
c040: 7b 7b 74 34 2e 61 2c 20 74 34 2e 62 2c 20 74 34  {{t4.a, t4.b, t4
c050: 2e 63 7d 7d 0a 20 20 31 33 20 20 20 22 55 50 44  .c}}.  13   "UPD
c060: 41 54 45 20 74 34 20 53 45 54 20 62 3d 31 20 57  ATE t4 SET b=1 W
c070: 48 45 52 45 20 72 6f 77 69 64 3d 32 22 20 20 20  HERE rowid=2"   
c080: 20 20 20 20 20 20 20 20 20 20 7b 7b 74 34 2e 61            {{t4.a
c090: 2c 20 74 34 2e 62 2c 20 74 34 2e 63 7d 7d 0a 20  , t4.b, t4.c}}. 
c0a0: 20 31 34 20 20 20 22 55 50 44 41 54 45 20 74 34   14   "UPDATE t4
c0b0: 20 53 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20 63   SET a=0, b=0, c
c0c0: 3d 30 22 20 20 20 20 20 20 20 20 20 20 20 20 20  =0"             
c0d0: 20 20 20 20 7b 7b 74 34 2e 61 2c 20 74 34 2e 62      {{t4.a, t4.b
c0e0: 2c 20 74 34 2e 63 7d 7d 0a 7d 0a 0a 23 20 45 56  , t4.c}}.}..# EV
c0f0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 34  IDENCE-OF: R-004
c100: 30 34 2d 31 37 36 37 30 20 46 6f 72 20 74 68 65  04-17670 For the
c110: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e 49   purposes of UNI
c120: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  QUE constraints,
c130: 0a 23 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  .# NULL values a
c140: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
c150: 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20  stinct from all 
c160: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
c170: 63 6c 75 64 69 6e 67 0a 23 20 6f 74 68 65 72 20  cluding.# other 
c180: 4e 55 4c 4c 73 2e 0a 23 0a 64 6f 5f 63 72 65 61  NULLs..#.do_crea
c190: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
c1a0: 38 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45  8 {.  1    "INSE
c1b0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
c1c0: 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20  S(NULL, NULL)"  
c1d0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20           {}.  2 
c1e0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
c1f0: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
c200: 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20  NULL)"          
c210: 20 7b 7d 0a 20 20 33 20 20 20 20 22 55 50 44 41   {}.  3    "UPDA
c220: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 4e 55  TE t1 SET a = NU
c230: 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20 20  LL"             
c240: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20           {}.  4 
c250: 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45     "UPDATE t1 SE
c260: 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20  T b = NULL"     
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 7b 7d 0a 0a 20 20 35 20 20 20 20 22 49 4e 53   {}..  5    "INS
c290: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
c2a0: 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e  ES(NULL, NULL, N
c2b0: 55 4c 4c 29 22 20 20 20 20 20 7b 7d 0a 20 20 36  ULL)"     {}.  6
c2c0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c2d0: 20 74 34 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t4 VALUES(NULL,
c2e0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20   NULL, NULL)"   
c2f0: 20 20 7b 7d 0a 20 20 37 20 20 20 20 22 55 50 44    {}.  7    "UPD
c300: 41 54 45 20 74 34 20 53 45 54 20 61 20 3d 20 4e  ATE t4 SET a = N
c310: 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20  ULL"            
c320: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 38            {}.  8
c330: 20 20 20 20 22 55 50 44 41 54 45 20 74 34 20 53      "UPDATE t4 S
c340: 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20 20 20  ET b = NULL"    
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c360: 20 20 7b 7d 0a 20 20 39 20 20 20 20 22 55 50 44    {}.  9    "UPD
c370: 41 54 45 20 74 34 20 53 45 54 20 63 20 3d 20 4e  ATE t4 SET c = N
c380: 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20  ULL"            
c390: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a            {}.}..
c3a0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
c3b0: 2d 35 35 38 32 30 2d 32 39 39 38 34 20 49 6e 20  -55820-29984 In 
c3c0: 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51  most cases, UNIQ
c3d0: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
c3e0: 45 59 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.# constraints
c3f0: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
c400: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75   by creating a u
c410: 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74  nique index in t
c420: 68 65 0a 23 20 64 61 74 61 62 61 73 65 2e 0a 64  he.# database..d
c430: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
c440: 73 74 73 20 34 2e 39 20 2d 72 65 70 61 69 72 20  sts 4.9 -repair 
c450: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 20  drop_all_tables 
c460: 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43  -query {.  SELEC
c470: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
c480: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
c490: 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
c4a0: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
c4b0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 54  ATE TABLE t1(a T
c4c0: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
c4d0: 20 62 29 22 20 20 20 20 20 20 20 20 20 20 20 20   b)"            
c4e0: 20 20 31 0a 20 20 32 20 20 20 20 22 43 52 45 41    1.  2    "CREA
c4f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e  TE TABLE t1(a IN
c500: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c510: 59 2c 20 62 29 22 20 20 20 20 20 20 20 20 20 20  Y, b)"          
c520: 20 30 0a 20 20 33 20 20 20 20 22 43 52 45 41 54   0.  3    "CREAT
c530: 45 20 54 41 42 4c 45 20 74 31 28 61 20 54 45 58  E TABLE t1(a TEX
c540: 54 20 55 4e 49 51 55 45 2c 20 62 29 22 20 20 20  T UNIQUE, b)"   
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 31 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  1.  4    "CREATE
c570: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
c580: 41 52 59 20 4b 45 59 2c 20 62 20 54 45 58 54 20  ARY KEY, b TEXT 
c590: 55 4e 49 51 55 45 29 22 20 20 20 20 20 20 20 32  UNIQUE)"       2
c5a0: 0a 20 20 35 20 20 20 20 22 43 52 45 41 54 45 20  .  5    "CREATE 
c5b0: 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41  TABLE t1(a PRIMA
c5c0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 55 4e  RY KEY, b, c, UN
c5d0: 49 51 55 45 28 63 2c 20 62 29 29 22 20 20 32 0a  IQUE(c, b))"  2.
c5e0: 7d 0a 0a 23 20 4f 62 73 6f 6c 65 74 65 3a 20 52  }..# Obsolete: R
c5f0: 2d 30 32 32 35 32 2d 33 33 31 31 36 20 53 75 63  -02252-33116 Suc
c600: 68 20 61 6e 20 69 6e 64 65 78 20 69 73 20 75 73  h an index is us
c610: 65 64 20 6c 69 6b 65 20 61 6e 79 20 6f 74 68 65  ed like any othe
c620: 72 20 69 6e 64 65 78 0a 23 20 69 6e 20 74 68 65  r index.# in the
c630: 20 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70 74   database to opt
c640: 69 6d 69 7a 65 20 71 75 65 72 69 65 73 2e 0a 23  imize queries..#
c650: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
c660: 20 34 2e 31 30 2e 30 20 7b 0a 20 20 43 52 45 41   4.10.0 {.  CREA
c670: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
c680: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
c690: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
c6a0: 28 61 2c 20 62 2c 20 63 2c 20 55 4e 49 51 55 45  (a, b, c, UNIQUE
c6b0: 28 62 2c 20 63 29 29 3b 0a 7d 0a 64 6f 5f 63 72  (b, c));.}.do_cr
c6c0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
c6d0: 34 2e 31 30 20 7b 0a 20 20 31 20 20 20 20 22 45  4.10 {.  1    "E
c6e0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
c6f0: 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  N SELECT * FROM 
c700: 74 31 20 57 48 45 52 45 20 62 20 3d 20 35 22 20  t1 WHERE b = 5" 
c710: 0a 20 20 20 20 20 20 20 7b 30 20 30 20 30 20 7b  .       {0 0 0 {
c720: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
c730: 55 53 49 4e 47 20 49 4e 44 45 58 20 73 71 6c 69  USING INDEX sqli
c740: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f  te_autoindex_t1_
c750: 31 20 28 62 3d 3f 29 7d 7d 0a 0a 20 20 32 20 20  1 (b=?)}}..  2  
c760: 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59    "EXPLAIN QUERY
c770: 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46   PLAN SELECT * F
c780: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
c790: 62 2c 20 63 22 0a 20 20 20 20 20 20 20 7b 30 20  b, c".       {0 
c7a0: 30 20 30 20 7b 53 43 41 4e 20 54 41 42 4c 45 20  0 0 {SCAN TABLE 
c7b0: 74 32 20 55 53 49 4e 47 20 49 4e 44 45 58 20 73  t2 USING INDEX s
c7c0: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
c7d0: 74 32 5f 31 7d 7d 0a 0a 20 20 33 20 20 20 20 22  t2_1}}..  3    "
c7e0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
c7f0: 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AN SELECT * FROM
c800: 20 74 32 20 57 48 45 52 45 20 62 3d 31 30 20 41   t2 WHERE b=10 A
c810: 4e 44 20 63 3e 31 30 22 0a 20 20 20 20 20 20 20  ND c>10".       
c820: 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54  {0 0 0 {SEARCH T
c830: 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 49 4e  ABLE t2 USING IN
c840: 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69  DEX sqlite_autoi
c850: 6e 64 65 78 5f 74 32 5f 31 20 28 62 3d 3f 20 41  ndex_t2_1 (b=? A
c860: 4e 44 20 63 3e 3f 29 7d 7d 0a 7d 0a 0a 23 20 45  ND c>?)}}.}..# E
c870: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
c880: 34 39 33 2d 33 35 36 35 33 20 41 20 43 48 45 43  493-35653 A CHEC
c890: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  K constraint may
c8a0: 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20   be attached to 
c8b0: 61 0a 23 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  a.# column defin
c8c0: 69 74 69 6f 6e 20 6f 72 20 73 70 65 63 69 66 69  ition or specifi
c8d0: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
c8e0: 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61  nstraint. In pra
c8f0: 63 74 69 63 65 20 69 74 0a 23 20 6d 61 6b 65 73  ctice it.# makes
c900: 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 0a   no difference..
c910: 23 0a 23 20 20 20 41 6c 6c 20 74 68 65 20 74 65  #.#   All the te
c920: 73 74 73 20 74 68 61 74 20 64 65 61 6c 20 77 69  sts that deal wi
c930: 74 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  th CHECK constra
c940: 69 6e 74 73 20 62 65 6c 6f 77 20 28 34 2e 31 31  ints below (4.11
c950: 2e 2a 20 61 6e 64 20 0a 23 20 20 20 34 2e 31 32  .* and .#   4.12
c960: 2e 2a 29 20 61 72 65 20 72 75 6e 20 6f 6e 63 65  .*) are run once
c970: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74   for a table wit
c980: 68 20 74 68 65 20 63 68 65 63 6b 20 63 6f 6e 73  h the check cons
c990: 74 72 61 69 6e 74 20 61 74 74 61 63 68 65 64 0a  traint attached.
c9a0: 23 20 20 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  #   to a column 
c9b0: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 61 6e 64 20  definition, and 
c9c0: 6f 6e 63 65 20 77 69 74 68 20 61 20 74 61 62 6c  once with a tabl
c9d0: 65 20 77 68 65 72 65 20 74 68 65 20 63 68 65 63  e where the chec
c9e0: 6b 20 0a 23 20 20 20 63 6f 6e 64 69 74 69 6f 6e  k .#   condition
c9f0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
ca00: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
ca10: 69 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  int..#.# EVIDENC
ca20: 45 2d 4f 46 3a 20 52 2d 35 35 34 33 35 2d 31 34  E-OF: R-55435-14
ca30: 33 30 33 20 45 61 63 68 20 74 69 6d 65 20 61 20  303 Each time a 
ca40: 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72  new row is inser
ca50: 74 65 64 20 69 6e 74 6f 20 74 68 65 0a 23 20 74  ted into the.# t
ca60: 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74  able or an exist
ca70: 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61 74  ing row is updat
ca80: 65 64 2c 20 74 68 65 20 65 78 70 72 65 73 73 69  ed, the expressi
ca90: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
caa0: 74 68 0a 23 20 65 61 63 68 20 43 48 45 43 4b 20  th.# each CHECK 
cab0: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76  constraint is ev
cac0: 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
cad0: 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
cae0: 6c 75 65 20 69 6e 20 74 68 65 0a 23 20 73 61 6d  lue in the.# sam
caf0: 65 20 77 61 79 20 61 73 20 61 20 43 41 53 54 20  e way as a CAST 
cb00: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 66 20 74  expression. If t
cb10: 68 65 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72  he result is zer
cb20: 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  o (integer value
cb30: 20 30 0a 23 20 6f 72 20 72 65 61 6c 20 76 61 6c   0.# or real val
cb40: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
cb50: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
cb60: 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65  tion has occurre
cb70: 64 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  d..#.drop_all_ta
cb80: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
cb90: 74 65 73 74 20 34 2e 31 31 20 7b 0a 20 20 43 52  test 4.11 {.  CR
cba0: 45 41 54 45 20 54 41 42 4c 45 20 78 31 28 61 20  EATE TABLE x1(a 
cbb0: 54 45 58 54 2c 20 62 20 49 4e 54 45 47 45 52 20  TEXT, b INTEGER 
cbc0: 43 48 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20  CHECK( b>0 ));. 
cbd0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
cbe0: 28 61 20 54 45 58 54 2c 20 62 20 49 4e 54 45 47  (a TEXT, b INTEG
cbf0: 45 52 2c 20 43 48 45 43 4b 28 20 62 3e 30 20 29  ER, CHECK( b>0 )
cc00: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
cc10: 20 78 31 20 56 41 4c 55 45 53 28 27 78 27 2c 20   x1 VALUES('x', 
cc20: 27 78 78 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  'xx');.  INSERT 
cc30: 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27  INTO x1 VALUES('
cc40: 79 27 2c 20 27 79 79 27 29 3b 0a 20 20 49 4e 53  y', 'yy');.  INS
cc50: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
cc60: 43 54 20 2a 20 46 52 4f 4d 20 78 31 3b 0a 0a 20  CT * FROM x1;.. 
cc70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 32   CREATE TABLE x2
cc80: 28 61 20 43 48 45 43 4b 28 20 61 7c 7c 62 20 29  (a CHECK( a||b )
cc90: 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , b);.  CREATE T
cca0: 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 43 48  ABLE t2(a, b, CH
ccb0: 45 43 4b 28 20 61 7c 7c 62 20 29 29 3b 0a 20 20  ECK( a||b ));.  
ccc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56  INSERT INTO x2 V
ccd0: 41 4c 55 45 53 28 31 2c 20 27 78 78 27 29 3b 0a  ALUES(1, 'xx');.
cce0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32    INSERT INTO x2
ccf0: 20 56 41 4c 55 45 53 28 31 2c 20 27 79 79 27 29   VALUES(1, 'yy')
cd00: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
cd10: 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  t2 SELECT * FROM
cd20: 20 78 32 3b 0a 7d 0a 0a 64 6f 5f 63 72 65 61 74   x2;.}..do_creat
cd30: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 31  etable_tests 4.1
cd40: 31 20 2d 65 72 72 6f 72 20 7b 43 48 45 43 4b 20  1 -error {CHECK 
cd50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
cd60: 64 3a 20 25 73 7d 20 7b 0a 20 20 31 61 20 20 20  d: %s} {.  1a   
cd70: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31   "INSERT INTO x1
cd80: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 30   VALUES('one', 0
cd90: 29 22 20 20 20 20 20 20 20 7b 78 31 7d 0a 20 20  )"       {x1}.  
cda0: 31 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  1b    "INSERT IN
cdb0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
cdc0: 65 27 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b 74  e', -4.0)"    {t
cdd0: 31 7d 0a 0a 20 20 32 61 20 20 20 20 22 49 4e 53  1}..  2a    "INS
cde0: 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55  ERT INTO x2 VALU
cdf0: 45 53 28 27 61 62 63 27 2c 20 31 29 22 20 20 20  ES('abc', 1)"   
ce00: 20 20 20 20 7b 78 32 7d 0a 20 20 32 62 20 20 20      {x2}.  2b   
ce10: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
ce20: 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20 31   VALUES('abc', 1
ce30: 29 22 20 20 20 20 20 20 20 7b 74 32 7d 0a 0a 20  )"       {t2}.. 
ce40: 20 33 61 20 20 20 20 22 49 4e 53 45 52 54 20 49   3a    "INSERT I
ce50: 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28 30 2c  NTO x2 VALUES(0,
ce60: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 7b   'abc')"       {
ce70: 78 32 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53  x2}.  3b    "INS
ce80: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ce90: 45 53 28 30 2c 20 27 61 62 63 27 29 22 20 20 20  ES(0, 'abc')"   
cea0: 20 20 20 20 7b 74 32 7d 0a 0a 20 20 34 61 20 20      {t2}..  4a  
ceb0: 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54    "UPDATE t1 SET
cec0: 20 62 3d 2d 31 20 57 48 45 52 45 20 72 6f 77 69   b=-1 WHERE rowi
ced0: 64 3d 31 22 20 20 20 20 20 20 7b 74 31 7d 0a 20  d=1"      {t1}. 
cee0: 20 34 62 20 20 20 20 22 55 50 44 41 54 45 20 78   4b    "UPDATE x
cef0: 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45 52 45  1 SET b=-1 WHERE
cf00: 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20 20 7b   rowid=1"      {
cf10: 78 31 7d 0a 0a 20 20 34 61 20 20 20 20 22 55 50  x1}..  4a    "UP
cf20: 44 41 54 45 20 78 32 20 53 45 54 20 61 3d 27 27  DATE x2 SET a=''
cf30: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20   WHERE rowid=1" 
cf40: 20 20 20 20 20 7b 78 32 7d 0a 20 20 34 62 20 20       {x2}.  4b  
cf50: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
cf60: 20 61 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69   a='' WHERE rowi
cf70: 64 3d 31 22 20 20 20 20 20 20 7b 74 32 7d 0a 7d  d=1"      {t2}.}
cf80: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
cf90: 20 52 2d 33 34 31 30 39 2d 33 39 31 30 38 20 49   R-34109-39108 I
cfa0: 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72  f the CHECK expr
cfb0: 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
cfc0: 20 74 6f 20 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61   to NULL,.# or a
cfd0: 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72  ny other non-zer
cfe0: 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e  o value, it is n
cff0: 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ot a constraint 
d000: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f  violation..#.do_
d010: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
d020: 73 20 34 2e 31 32 20 7b 0a 20 20 31 61 20 20 20  s 4.12 {.  1a   
d030: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31   "INSERT INTO x1
d040: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e   VALUES('one', N
d050: 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 20 20 31 62  ULL)"    {}.  1b
d060: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
d070: 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   t1 VALUES('one'
d080: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a  , NULL)"    {}..
d090: 20 20 32 61 20 20 20 20 22 49 4e 53 45 52 54 20    2a    "INSERT 
d0a0: 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27  INTO x1 VALUES('
d0b0: 6f 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a  one', 2)"    {}.
d0c0: 20 20 32 62 20 20 20 20 22 49 4e 53 45 52 54 20    2b    "INSERT 
d0d0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
d0e0: 6f 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a  one', 2)"    {}.
d0f0: 0a 20 20 33 61 20 20 20 20 22 49 4e 53 45 52 54  .  3a    "INSERT
d100: 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28   INTO x2 VALUES(
d110: 31 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20  1, 'abc')"      
d120: 20 7b 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53   {}.  3b    "INS
d130: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
d140: 45 53 28 31 2c 20 27 61 62 63 27 29 22 20 20 20  ES(1, 'abc')"   
d150: 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44      {}.}..# EVID
d160: 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 30 36 30  ENCE-OF: R-02060
d170: 2d 36 34 35 34 37 20 41 20 4e 4f 54 20 4e 55 4c  -64547 A NOT NUL
d180: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  L constraint may
d190: 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65   only be attache
d1a0: 64 0a 23 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  d.# to a column 
d1b0: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20  definition, not 
d1c0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
d1d0: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
d1e0: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
d1f0: 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  es.do_createtabl
d200: 65 5f 74 65 73 74 73 20 34 2e 31 33 2e 31 20 7b  e_tests 4.13.1 {
d210: 0a 20 20 31 20 20 20 20 20 22 43 52 45 41 54 45  .  1     "CREATE
d220: 20 54 41 42 4c 45 20 74 31 28 61 20 4e 4f 54 20   TABLE t1(a NOT 
d230: 4e 55 4c 4c 2c 20 62 29 22 20 20 20 20 20 20 20  NULL, b)"       
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d250: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
d260: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
d270: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
d280: 59 20 4e 4f 54 20 4e 55 4c 4c 2c 20 62 29 22 20  Y NOT NULL, b)" 
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 20 7b 7d 0a 20 20 33 20 20 20 20 20 22 43 52    {}.  3     "CR
d2b0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20  EATE TABLE t3(a 
d2c0: 4e 4f 54 20 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20  NOT NULL, b NOT 
d2d0: 4e 55 4c 4c 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c  NULL, c NOT NULL
d2e0: 20 55 4e 49 51 55 45 29 22 20 20 20 7b 7d 0a 7d   UNIQUE)"   {}.}
d2f0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
d300: 74 65 73 74 73 20 34 2e 31 33 2e 32 20 2d 65 72  tests 4.13.2 -er
d310: 72 6f 72 20 7b 0a 20 20 6e 65 61 72 20 22 4e 4f  ror {.  near "NO
d320: 54 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72  T": syntax error
d330: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 20 22 43 52  .} {.  1     "CR
d340: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
d350: 20 62 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29   b, NOT NULL(a))
d360: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
d370: 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22      {}.  2     "
d380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
d390: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
d3a0: 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20  , NOT NULL(a))" 
d3b0: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
d3c0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
d3d0: 34 28 61 2c 20 62 2c 20 63 20 55 4e 49 51 55 45  4(a, b, c UNIQUE
d3e0: 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 2c 20 62 2c  , NOT NULL(a, b,
d3f0: 20 63 29 29 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20   c))"   {}.}..# 
d400: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
d410: 31 37 39 35 2d 35 37 36 34 33 20 61 20 4e 4f 54  1795-57643 a NOT
d420: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
d430: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
d440: 68 65 0a 23 20 61 73 73 6f 63 69 61 74 65 64 20  he.# associated 
d450: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63  column may not c
d460: 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61  ontain a NULL va
d470: 6c 75 65 2e 20 41 74 74 65 6d 70 74 69 6e 67 20  lue. Attempting 
d480: 74 6f 20 73 65 74 20 74 68 65 0a 23 20 63 6f 6c  to set the.# col
d490: 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  umn value to NUL
d4a0: 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67  L when inserting
d4b0: 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 20 75 70   a new row or up
d4c0: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
d4d0: 6e 67 0a 23 20 6f 6e 65 20 63 61 75 73 65 73 20  ng.# one causes 
d4e0: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
d4f0: 6c 61 74 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20  lation..#.#     
d500: 54 68 65 73 65 20 74 65 73 74 73 20 75 73 65 20  These tests use 
d510: 74 68 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  the tables creat
d520: 65 64 20 62 79 20 34 2e 31 33 2e 0a 23 0a 64 6f  ed by 4.13..#.do
d530: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
d540: 31 34 2e 30 20 7b 0a 20 20 49 4e 53 45 52 54 20  14.0 {.  INSERT 
d550: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
d560: 78 27 2c 20 27 79 27 29 3b 0a 20 20 49 4e 53 45  x', 'y');.  INSE
d570: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
d580: 53 28 27 7a 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20  S('z', NULL);.. 
d590: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
d5a0: 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29  VALUES('x', 'y')
d5b0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
d5c0: 74 32 20 56 41 4c 55 45 53 28 27 7a 27 2c 20 4e  t2 VALUES('z', N
d5d0: 55 4c 4c 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  ULL);..  INSERT 
d5e0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27  INTO t3 VALUES('
d5f0: 78 27 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20  x', 'y', 'z');. 
d600: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
d610: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
d620: 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
d630: 65 5f 74 65 73 74 73 20 34 2e 31 34 20 2d 65 72  e_tests 4.14 -er
d640: 72 6f 72 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ror {NOT NULL co
d650: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
d660: 20 25 73 7d 20 7b 0a 20 20 31 20 20 20 20 22 49   %s} {.  1    "I
d670: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
d680: 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 61 27 29 22  LUES(NULL, 'a')"
d690: 20 20 20 20 20 20 20 20 20 7b 74 31 2e 61 7d 0a           {t1.a}.
d6a0: 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49    2    "INSERT I
d6b0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
d6c0: 4c 4c 2c 20 27 62 27 29 22 20 20 20 20 20 20 20  LL, 'b')"       
d6d0: 20 20 7b 74 32 2e 61 7d 0a 20 20 33 20 20 20 20    {t2.a}.  3    
d6e0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20  "INSERT INTO t3 
d6f0: 56 41 4c 55 45 53 28 27 63 27 2c 20 27 64 27 2c  VALUES('c', 'd',
d700: 20 4e 55 4c 4c 29 22 20 20 20 20 7b 74 33 2e 63   NULL)"    {t3.c
d710: 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54  }.  4    "INSERT
d720: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
d730: 27 65 27 2c 20 4e 55 4c 4c 2c 20 27 66 27 29 22  'e', NULL, 'f')"
d740: 20 20 20 20 7b 74 33 2e 62 7d 0a 20 20 35 20 20      {t3.b}.  5  
d750: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
d760: 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27  3 VALUES(NULL, '
d770: 67 27 2c 20 27 68 27 29 22 20 20 20 20 7b 74 33  g', 'h')"    {t3
d780: 2e 61 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  .a}.}..# EVIDENC
d790: 45 2d 4f 46 3a 20 52 2d 34 32 35 31 31 2d 33 39  E-OF: R-42511-39
d7a0: 34 35 39 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  459 PRIMARY KEY,
d7b0: 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
d7c0: 4e 55 4c 4c 0a 23 20 63 6f 6e 73 74 72 61 69 6e  NULL.# constrain
d7d0: 74 73 20 6d 61 79 20 62 65 20 65 78 70 6c 69 63  ts may be explic
d7e0: 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20  itly assigned a 
d7f0: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
d800: 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 23 20 61 6c   resolution.# al
d810: 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75  gorithm by inclu
d820: 64 69 6e 67 20 61 20 63 6f 6e 66 6c 69 63 74 2d  ding a conflict-
d830: 63 6c 61 75 73 65 20 69 6e 20 74 68 65 69 72 20  clause in their 
d840: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 23 0a 23  definitions..#.#
d850: 20 20 20 20 20 43 6f 6e 66 6c 69 63 74 20 63 6c       Conflict cl
d860: 61 75 73 65 73 3a 20 41 42 4f 52 54 2c 20 52 4f  auses: ABORT, RO
d870: 4c 4c 42 41 43 4b 2c 20 49 47 4e 4f 52 45 2c 20  LLBACK, IGNORE, 
d880: 46 41 49 4c 2c 20 52 45 50 4c 41 43 45 0a 23 0a  FAIL, REPLACE.#.
d890: 23 20 20 20 20 20 54 65 73 74 20 63 61 73 65 73  #     Test cases
d8a0: 20 34 2e 31 35 2e 2a 2c 20 34 2e 31 36 2e 2a 20   4.15.*, 4.16.* 
d8b0: 61 6e 64 20 34 2e 31 37 2e 2a 20 66 6f 63 75 73  and 4.17.* focus
d8c0: 20 6f 6e 20 50 52 49 4d 41 52 59 20 4b 45 59 2c   on PRIMARY KEY,
d8d0: 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 20 20 20 20   NOT NULL.#     
d8e0: 61 6e 64 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  and UNIQUE const
d8f0: 72 61 69 6e 74 73 2c 20 72 65 73 70 65 63 74 69  raints, respecti
d900: 76 65 6c 79 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  vely..#.drop_all
d910: 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73  _tables.do_execs
d920: 71 6c 5f 74 65 73 74 20 34 2e 31 35 2e 30 20 7b  ql_test 4.15.0 {
d930: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
d940: 74 31 5f 61 62 28 61 20 50 52 49 4d 41 52 59 20  t1_ab(a PRIMARY 
d950: 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  KEY ON CONFLICT 
d960: 41 42 4f 52 54 2c 20 62 29 3b 0a 20 20 43 52 45  ABORT, b);.  CRE
d970: 41 54 45 20 54 41 42 4c 45 20 74 31 5f 72 6f 28  ATE TABLE t1_ro(
d980: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e  a PRIMARY KEY ON
d990: 20 43 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41   CONFLICT ROLLBA
d9a0: 43 4b 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  CK, b);.  CREATE
d9b0: 20 54 41 42 4c 45 20 74 31 5f 69 67 28 61 20 50   TABLE t1_ig(a P
d9c0: 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f  RIMARY KEY ON CO
d9d0: 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 20 62  NFLICT IGNORE, b
d9e0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
d9f0: 45 20 74 31 5f 66 61 28 61 20 50 52 49 4d 41 52  E t1_fa(a PRIMAR
da00: 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43  Y KEY ON CONFLIC
da10: 54 20 46 41 49 4c 2c 20 62 29 3b 0a 20 20 43 52  T FAIL, b);.  CR
da20: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 72 65  EATE TABLE t1_re
da30: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f  (a PRIMARY KEY O
da40: 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41  N CONFLICT REPLA
da50: 43 45 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  CE, b);.  CREATE
da60: 20 54 41 42 4c 45 20 74 31 5f 78 78 28 61 20 50   TABLE t1_xx(a P
da70: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a  RIMARY KEY, b);.
da80: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
da90: 31 5f 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27  1_ab VALUES(1, '
daa0: 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  one');.  INSERT 
dab0: 49 4e 54 4f 20 74 31 5f 61 62 20 56 41 4c 55 45  INTO t1_ab VALUE
dac0: 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49  S(2, 'two');.  I
dad0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 72 6f  NSERT INTO t1_ro
dae0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
daf0: 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  1_ab;.  INSERT I
db00: 4e 54 4f 20 74 31 5f 69 67 20 53 45 4c 45 43 54  NTO t1_ig SELECT
db10: 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20   * FROM t1_ab;. 
db20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f   INSERT INTO t1_
db30: 66 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  fa SELECT * FROM
db40: 20 74 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54   t1_ab;.  INSERT
db50: 20 49 4e 54 4f 20 74 31 5f 72 65 20 53 45 4c 45   INTO t1_re SELE
db60: 43 54 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b  CT * FROM t1_ab;
db70: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
db80: 31 5f 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52  1_xx SELECT * FR
db90: 4f 4d 20 74 31 5f 61 62 3b 0a 0a 20 20 43 52 45  OM t1_ab;..  CRE
dba0: 41 54 45 20 54 41 42 4c 45 20 74 32 5f 61 62 28  ATE TABLE t2_ab(
dbb0: 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e  a, b NOT NULL ON
dbc0: 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54 29   CONFLICT ABORT)
dbd0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
dbe0: 20 74 32 5f 72 6f 28 61 2c 20 62 20 4e 4f 54 20   t2_ro(a, b NOT 
dbf0: 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  NULL ON CONFLICT
dc00: 20 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 43 52   ROLLBACK);.  CR
dc10: 45 41 54 45 20 54 41 42 4c 45 20 74 32 5f 69 67  EATE TABLE t2_ig
dc20: 28 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f  (a, b NOT NULL O
dc30: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
dc40: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
dc50: 4c 45 20 74 32 5f 66 61 28 61 2c 20 62 20 4e 4f  LE t2_fa(a, b NO
dc60: 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49  T NULL ON CONFLI
dc70: 43 54 20 46 41 49 4c 29 3b 0a 20 20 43 52 45 41  CT FAIL);.  CREA
dc80: 54 45 20 54 41 42 4c 45 20 74 32 5f 72 65 28 61  TE TABLE t2_re(a
dc90: 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20  , b NOT NULL ON 
dca0: 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41 43 45  CONFLICT REPLACE
dcb0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
dcc0: 45 20 74 32 5f 78 78 28 61 2c 20 62 20 4e 4f 54  E t2_xx(a, b NOT
dcd0: 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49 4e 53 45 52   NULL);..  INSER
dce0: 54 20 49 4e 54 4f 20 74 32 5f 61 62 20 56 41 4c  T INTO t2_ab VAL
dcf0: 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20  UES(1, 'one');. 
dd00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f   INSERT INTO t2_
dd10: 61 62 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  ab VALUES(2, 'tw
dd20: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
dd30: 54 4f 20 74 32 5f 72 6f 20 53 45 4c 45 43 54 20  TO t2_ro SELECT 
dd40: 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20  * FROM t2_ab;.  
dd50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 69  INSERT INTO t2_i
dd60: 67 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  g SELECT * FROM 
dd70: 74 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20  t2_ab;.  INSERT 
dd80: 49 4e 54 4f 20 74 32 5f 66 61 20 53 45 4c 45 43  INTO t2_fa SELEC
dd90: 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a  T * FROM t2_ab;.
dda0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
ddb0: 5f 72 65 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  _re SELECT * FRO
ddc0: 4d 20 74 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52  M t2_ab;.  INSER
ddd0: 54 20 49 4e 54 4f 20 74 32 5f 78 78 20 53 45 4c  T INTO t2_xx SEL
dde0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62  ECT * FROM t2_ab
ddf0: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  ;..  CREATE TABL
de00: 45 20 74 33 5f 61 62 28 61 2c 20 62 2c 20 55 4e  E t3_ab(a, b, UN
de10: 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f  IQUE(a, b) ON CO
de20: 4e 46 4c 49 43 54 20 41 42 4f 52 54 29 3b 0a 20  NFLICT ABORT);. 
de30: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
de40: 5f 72 6f 28 61 2c 20 62 2c 20 55 4e 49 51 55 45  _ro(a, b, UNIQUE
de50: 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49  (a, b) ON CONFLI
de60: 43 54 20 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  CT ROLLBACK);.  
de70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 5f  CREATE TABLE t3_
de80: 69 67 28 61 2c 20 62 2c 20 55 4e 49 51 55 45 28  ig(a, b, UNIQUE(
de90: 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43  a, b) ON CONFLIC
dea0: 54 20 49 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45  T IGNORE);.  CRE
deb0: 41 54 45 20 54 41 42 4c 45 20 74 33 5f 66 61 28  ATE TABLE t3_fa(
dec0: 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20  a, b, UNIQUE(a, 
ded0: 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46  b) ON CONFLICT F
dee0: 41 49 4c 29 3b 0a 20 20 43 52 45 41 54 45 20 54  AIL);.  CREATE T
def0: 41 42 4c 45 20 74 33 5f 72 65 28 61 2c 20 62 2c  ABLE t3_re(a, b,
df00: 20 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e   UNIQUE(a, b) ON
df10: 20 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41 43   CONFLICT REPLAC
df20: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
df30: 4c 45 20 74 33 5f 78 78 28 61 2c 20 62 2c 20 55  LE t3_xx(a, b, U
df40: 4e 49 51 55 45 28 61 2c 20 62 29 29 3b 0a 0a 20  NIQUE(a, b));.. 
df50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f   INSERT INTO t3_
df60: 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e  ab VALUES(1, 'on
df70: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
df80: 54 4f 20 74 33 5f 61 62 20 56 41 4c 55 45 53 28  TO t3_ab VALUES(
df90: 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53  2, 'two');.  INS
dfa0: 45 52 54 20 49 4e 54 4f 20 74 33 5f 72 6f 20 53  ERT INTO t3_ro S
dfb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f  ELECT * FROM t3_
dfc0: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
dfd0: 4f 20 74 33 5f 69 67 20 53 45 4c 45 43 54 20 2a  O t3_ig SELECT *
dfe0: 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49   FROM t3_ab;.  I
dff0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f 66 61  NSERT INTO t3_fa
e000: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
e010: 33 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  3_ab;.  INSERT I
e020: 4e 54 4f 20 74 33 5f 72 65 20 53 45 4c 45 43 54  NTO t3_re SELECT
e030: 20 2a 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20   * FROM t3_ab;. 
e040: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f   INSERT INTO t3_
e050: 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  xx SELECT * FROM
e060: 20 74 33 5f 61 62 3b 0a 7d 0a 0a 66 6f 72 65 61   t3_ab;.}..forea
e070: 63 68 20 7b 74 6e 20 74 62 6c 20 72 65 73 20 61  ch {tn tbl res a
e080: 63 20 64 61 74 61 7d 20 7b 0a 20 20 31 20 20 20  c data} {.  1   
e090: 74 31 5f 61 62 20 20 20 20 7b 31 20 7b 55 4e 49  t1_ab    {1 {UNI
e0a0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
e0b0: 61 69 6c 65 64 3a 20 74 31 5f 61 62 2e 61 7d 7d  ailed: t1_ab.a}}
e0c0: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e0d0: 33 20 74 68 72 65 65 7d 0a 20 20 32 20 20 20 74  3 three}.  2   t
e0e0: 31 5f 72 6f 20 20 20 20 7b 31 20 7b 55 4e 49 51  1_ro    {1 {UNIQ
e0f0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
e100: 69 6c 65 64 3a 20 74 31 5f 72 6f 2e 61 7d 7d 20  iled: t1_ro.a}} 
e110: 31 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a  1 {1 one 2 two}.
e120: 20 20 33 20 20 20 74 31 5f 66 61 20 20 20 20 7b    3   t1_fa    {
e130: 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  1 {UNIQUE constr
e140: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 5f  aint failed: t1_
e150: 66 61 2e 61 7d 7d 20 30 20 7b 31 20 6f 6e 65 20  fa.a}} 0 {1 one 
e160: 32 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20  2 two 3 three 4 
e170: 73 74 72 69 6e 67 7d 0a 20 20 34 20 20 20 74 31  string}.  4   t1
e180: 5f 69 67 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20  _ig    {0 {}} 0 
e190: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74  {1 one 2 two 3 t
e1a0: 68 72 65 65 20 34 20 73 74 72 69 6e 67 20 36 20  hree 4 string 6 
e1b0: 73 74 72 69 6e 67 7d 0a 20 20 35 20 20 20 74 31  string}.  5   t1
e1c0: 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20  _re    {0 {}} 0 
e1d0: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 34 20 73  {1 one 2 two 4 s
e1e0: 74 72 69 6e 67 20 33 20 73 74 72 69 6e 67 20 36  tring 3 string 6
e1f0: 20 73 74 72 69 6e 67 7d 0a 20 20 36 20 20 20 74   string}.  6   t
e200: 31 5f 78 78 20 20 20 20 7b 31 20 7b 55 4e 49 51  1_xx    {1 {UNIQ
e210: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
e220: 69 6c 65 64 3a 20 74 31 5f 78 78 2e 61 7d 7d 20  iled: t1_xx.a}} 
e230: 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33  0 {1 one 2 two 3
e240: 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61   three}.} {.  ca
e250: 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20  tchsql COMMIT.  
e260: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
e270: 20 34 2e 31 35 2e 24 74 6e 2e 31 20 22 42 45 47   4.15.$tn.1 "BEG
e280: 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  IN; INSERT INTO 
e290: 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c 20 27  $tbl VALUES(3, '
e2a0: 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63  three')"..  do_c
e2b0: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31  atchsql_test 4.1
e2c0: 35 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20 20 49  5.$tn.2 " .    I
e2d0: 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20  NSERT INTO $tbl 
e2e0: 53 45 4c 45 43 54 20 28 28 61 25 32 29 2a 61 2b  SELECT ((a%2)*a+
e2f0: 33 29 2c 20 27 73 74 72 69 6e 67 27 20 46 52 4f  3), 'string' FRO
e300: 4d 20 24 74 62 6c 3b 0a 20 20 22 20 24 72 65 73  M $tbl;.  " $res
e310: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 65 5f 63 72  ..  do_test e_cr
e320: 65 61 74 65 74 61 62 6c 65 2d 34 2e 31 35 2e 24  eatetable-4.15.$
e330: 74 6e 2e 33 20 7b 20 73 71 6c 69 74 65 33 5f 67  tn.3 { sqlite3_g
e340: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64 62  et_autocommit db
e350: 20 7d 20 24 61 63 0a 20 20 64 6f 5f 65 78 65 63   } $ac.  do_exec
e360: 73 71 6c 5f 74 65 73 74 20 34 2e 31 35 2e 24 74  sql_test 4.15.$t
e370: 6e 2e 34 20 22 53 45 4c 45 43 54 20 2a 20 46 52  n.4 "SELECT * FR
e380: 4f 4d 20 24 74 62 6c 22 20 24 64 61 74 61 0a 7d  OM $tbl" $data.}
e390: 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c  .foreach {tn tbl
e3a0: 20 72 65 73 20 61 63 20 64 61 74 61 7d 20 7b 0a   res ac data} {.
e3b0: 20 20 31 20 20 20 74 32 5f 61 62 20 20 20 20 7b    1   t2_ab    {
e3c0: 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  1 {NOT NULL cons
e3d0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74  traint failed: t
e3e0: 32 5f 61 62 2e 62 7d 7d 20 30 20 7b 31 20 6f 6e  2_ab.b}} 0 {1 on
e3f0: 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d  e 2 two 3 three}
e400: 0a 20 20 32 20 20 20 74 32 5f 72 6f 20 20 20 20  .  2   t2_ro    
e410: 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  {1 {NOT NULL con
e420: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
e430: 74 32 5f 72 6f 2e 62 7d 7d 20 31 20 7b 31 20 6f  t2_ro.b}} 1 {1 o
e440: 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20 20 20  ne 2 two}.  3   
e450: 74 32 5f 66 61 20 20 20 20 7b 31 20 7b 4e 4f 54  t2_fa    {1 {NOT
e460: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
e470: 20 66 61 69 6c 65 64 3a 20 74 32 5f 66 61 2e 62   failed: t2_fa.b
e480: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e490: 6f 20 33 20 74 68 72 65 65 20 34 20 78 78 7d 0a  o 3 three 4 xx}.
e4a0: 20 20 34 20 20 20 74 32 5f 69 67 20 20 20 20 7b    4   t2_ig    {
e4b0: 30 20 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32  0 {}} 0 {1 one 2
e4c0: 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20 78   two 3 three 4 x
e4d0: 78 20 36 20 78 78 7d 0a 20 20 35 20 20 20 74 32  x 6 xx}.  5   t2
e4e0: 5f 72 65 20 20 20 20 7b 31 20 7b 4e 4f 54 20 4e  _re    {1 {NOT N
e4f0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ULL constraint f
e500: 61 69 6c 65 64 3a 20 74 32 5f 72 65 2e 62 7d 7d  ailed: t2_re.b}}
e510: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e520: 33 20 74 68 72 65 65 7d 0a 20 20 36 20 20 20 74  3 three}.  6   t
e530: 32 5f 78 78 20 20 20 20 7b 31 20 7b 4e 4f 54 20  2_xx    {1 {NOT 
e540: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
e550: 66 61 69 6c 65 64 3a 20 74 32 5f 78 78 2e 62 7d  failed: t2_xx.b}
e560: 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f  } 0 {1 one 2 two
e570: 20 33 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20   3 three}.} {.  
e580: 63 61 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a  catchsql COMMIT.
e590: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
e5a0: 74 20 20 34 2e 31 36 2e 24 74 6e 2e 31 20 22 42  t  4.16.$tn.1 "B
e5b0: 45 47 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54  EGIN; INSERT INT
e5c0: 4f 20 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c  O $tbl VALUES(3,
e5d0: 20 27 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f   'three')"..  do
e5e0: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34  _catchsql_test 4
e5f0: 2e 31 36 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20  .16.$tn.2 " .   
e600: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62   INSERT INTO $tb
e610: 6c 20 53 45 4c 45 43 54 20 61 2b 33 2c 20 43 41  l SELECT a+3, CA
e620: 53 45 20 61 20 57 48 45 4e 20 32 20 54 48 45 4e  SE a WHEN 2 THEN
e630: 20 4e 55 4c 4c 20 45 4c 53 45 20 27 78 78 27 20   NULL ELSE 'xx' 
e640: 45 4e 44 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20  END FROM $tbl.  
e650: 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73  " $res..  do_tes
e660: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
e670: 34 2e 31 36 2e 24 74 6e 2e 33 20 7b 20 73 71 6c  4.16.$tn.3 { sql
e680: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
e690: 6d 69 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64  mit db } $ac.  d
e6a0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
e6b0: 2e 31 36 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43  .16.$tn.4 "SELEC
e6c0: 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 22 20 24  T * FROM $tbl" $
e6d0: 64 61 74 61 0a 7d 0a 66 6f 72 65 61 63 68 20 7b  data.}.foreach {
e6e0: 74 6e 20 74 62 6c 20 72 65 73 20 61 63 20 64 61  tn tbl res ac da
e6f0: 74 61 7d 20 7b 0a 20 20 31 20 20 20 74 33 5f 61  ta} {.  1   t3_a
e700: 62 20 20 20 20 7b 31 20 7b 55 4e 49 51 55 45 20  b    {1 {UNIQUE 
e710: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
e720: 64 3a 20 74 33 5f 61 62 2e 61 2c 20 74 33 5f 61  d: t3_ab.a, t3_a
e730: 62 2e 62 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  b.b}}.          
e740: 20 20 20 20 20 30 20 7b 31 20 6f 6e 65 20 32 20       0 {1 one 2 
e750: 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32  two 3 three}.  2
e760: 20 20 20 74 33 5f 72 6f 20 20 20 20 7b 31 20 7b     t3_ro    {1 {
e770: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
e780: 74 20 66 61 69 6c 65 64 3a 20 74 33 5f 72 6f 2e  t failed: t3_ro.
e790: 61 2c 20 74 33 5f 72 6f 2e 62 7d 7d 0a 20 20 20  a, t3_ro.b}}.   
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 31              1 {1
e7b0: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20   one 2 two}.  3 
e7c0: 20 20 74 33 5f 66 61 20 20 20 20 7b 31 20 7b 55    t3_fa    {1 {U
e7d0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
e7e0: 20 66 61 69 6c 65 64 3a 20 74 33 5f 66 61 2e 61   failed: t3_fa.a
e7f0: 2c 20 74 33 5f 66 61 2e 62 7d 7d 0a 20 20 20 20  , t3_fa.b}}.    
e800: 20 20 20 20 20 20 20 20 20 20 20 30 20 7b 31 20             0 {1 
e810: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e820: 65 20 34 20 74 68 72 65 65 7d 0a 20 20 34 20 20  e 4 three}.  4  
e830: 20 74 33 5f 69 67 20 20 20 20 7b 30 20 7b 7d 7d   t3_ig    {0 {}}
e840: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e850: 33 20 74 68 72 65 65 20 34 20 74 68 72 65 65 20  3 three 4 three 
e860: 36 20 74 68 72 65 65 7d 0a 20 20 35 20 20 20 74  6 three}.  5   t
e870: 33 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d 20 30  3_re    {0 {}} 0
e880: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 34 20   {1 one 2 two 4 
e890: 74 68 72 65 65 20 33 20 74 68 72 65 65 20 36 20  three 3 three 6 
e8a0: 74 68 72 65 65 7d 0a 20 20 36 20 20 20 74 33 5f  three}.  6   t3_
e8b0: 78 78 20 20 20 20 7b 31 20 7b 55 4e 49 51 55 45  xx    {1 {UNIQUE
e8c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
e8d0: 65 64 3a 20 74 33 5f 78 78 2e 61 2c 20 74 33 5f  ed: t3_xx.a, t3_
e8e0: 78 78 2e 62 7d 7d 0a 20 20 20 20 20 20 20 20 20  xx.b}}.         
e8f0: 20 20 20 20 20 20 30 20 7b 31 20 6f 6e 65 20 32        0 {1 one 2
e900: 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 7d 20   two 3 three}.} 
e910: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 43 4f 4d  {.  catchsql COM
e920: 4d 49 54 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  MIT.  do_execsql
e930: 5f 74 65 73 74 20 20 34 2e 31 37 2e 24 74 6e 2e  _test  4.17.$tn.
e940: 31 20 22 42 45 47 49 4e 3b 20 49 4e 53 45 52 54  1 "BEGIN; INSERT
e950: 20 49 4e 54 4f 20 24 74 62 6c 20 56 41 4c 55 45   INTO $tbl VALUE
e960: 53 28 33 2c 20 27 74 68 72 65 65 27 29 22 0a 0a  S(3, 'three')"..
e970: 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65    do_catchsql_te
e980: 73 74 20 34 2e 31 37 2e 24 74 6e 2e 32 20 22 20  st 4.17.$tn.2 " 
e990: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
e9a0: 20 24 74 62 6c 20 53 45 4c 45 43 54 20 28 28 61   $tbl SELECT ((a
e9b0: 25 32 29 2a 61 2b 33 29 2c 20 27 74 68 72 65 65  %2)*a+3), 'three
e9c0: 27 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22 20  ' FROM $tbl.  " 
e9d0: 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74 20  $res..  do_test 
e9e0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e  e_createtable-4.
e9f0: 31 37 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69 74  17.$tn.3 { sqlit
ea00: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
ea10: 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64 6f 5f  t db } $ac.  do_
ea20: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
ea30: 37 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43 54 20  7.$tn.4 "SELECT 
ea40: 2a 20 46 52 4f 4d 20 24 74 62 6c 20 4f 52 44 45  * FROM $tbl ORDE
ea50: 52 20 42 59 20 72 6f 77 69 64 22 20 24 64 61 74  R BY rowid" $dat
ea60: 61 0a 7d 0a 63 61 74 63 68 73 71 6c 20 43 4f 4d  a.}.catchsql COM
ea70: 4d 49 54 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  MIT..# EVIDENCE-
ea80: 4f 46 3a 20 52 2d 31 32 36 34 35 2d 33 39 37 37  OF: R-12645-3977
ea90: 32 20 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74  2 Or, if a const
eaa0: 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e  raint definition
eab0: 20 64 6f 65 73 20 6e 6f 74 0a 23 20 69 6e 63 6c   does not.# incl
eac0: 75 64 65 20 61 20 63 6f 6e 66 6c 69 63 74 2d 63  ude a conflict-c
ead0: 6c 61 75 73 65 20 6f 72 20 69 74 20 69 73 20 61  lause or it is a
eae0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
eaf0: 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a 23  t, the default.#
eb00: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
eb10: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
eb20: 73 20 41 42 4f 52 54 2e 0a 23 0a 23 20 20 20 20  s ABORT..#.#    
eb30: 20 54 68 65 20 66 69 72 73 74 20 68 61 6c 66 20   The first half 
eb40: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 69 73 20  of the above is 
eb50: 74 65 73 74 65 64 20 61 6c 6f 6e 67 20 77 69 74  tested along wit
eb60: 68 20 65 78 70 6c 69 63 69 74 20 4f 4e 20 0a 23  h explicit ON .#
eb70: 20 20 20 20 20 43 4f 4e 46 4c 49 43 54 20 63 6c       CONFLICT cl
eb80: 61 75 73 65 73 20 61 62 6f 76 65 20 28 73 70 65  auses above (spe
eb90: 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 65 20 74  cifically, the t
eba0: 65 73 74 73 20 69 6e 76 6f 6c 76 69 6e 67 20 74  ests involving t
ebb0: 31 5f 78 78 2c 20 74 32 5f 78 78 0a 23 20 20 20  1_xx, t2_xx.#   
ebc0: 20 20 61 6e 64 20 74 33 5f 78 78 29 2e 20 54 68    and t3_xx). Th
ebd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6a 75 73 74  e following just
ebe0: 20 74 65 73 74 73 20 74 68 61 74 20 74 68 65 20   tests that the 
ebf0: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
ec00: 0a 23 20 20 20 20 20 68 61 6e 64 6c 69 6e 67 20  .#     handling 
ec10: 66 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  for CHECK constr
ec20: 61 69 6e 74 73 20 69 73 20 41 42 4f 52 54 2e 0a  aints is ABORT..
ec30: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
ec40: 74 20 34 2e 31 38 2e 31 20 7b 0a 20 20 43 52 45  t 4.18.1 {.  CRE
ec50: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
ec60: 62 20 43 48 45 43 4b 20 28 62 21 3d 31 30 29 29  b CHECK (b!=10))
ec70: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
ec80: 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b  t4 VALUES(1, 2);
ec90: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
eca0: 34 20 56 41 4c 55 45 53 28 33 2c 20 34 29 3b 0a  4 VALUES(3, 4);.
ecb0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
ecc0: 74 20 20 34 2e 31 38 2e 32 20 7b 20 42 45 47 49  t  4.18.2 { BEGI
ecd0: 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  N; INSERT INTO t
ece0: 34 20 56 41 4c 55 45 53 28 35 2c 20 36 29 20 7d  4 VALUES(5, 6) }
ecf0: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
ed00: 74 20 34 2e 31 38 2e 33 20 7b 20 0a 20 20 49 4e  t 4.18.3 { .  IN
ed10: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 53 45 4c  SERT INTO t4 SEL
ed20: 45 43 54 20 61 2b 34 2c 20 62 2b 34 20 46 52 4f  ECT a+4, b+4 FRO
ed30: 4d 20 74 34 0a 7d 20 7b 31 20 7b 43 48 45 43 4b  M t4.} {1 {CHECK
ed40: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
ed50: 65 64 3a 20 74 34 7d 7d 0a 64 6f 5f 74 65 73 74  ed: t4}}.do_test
ed60: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34   e_createtable-4
ed70: 2e 31 38 2e 34 20 7b 20 73 71 6c 69 74 65 33 5f  .18.4 { sqlite3_
ed80: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64  get_autocommit d
ed90: 62 20 7d 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c  b } 0.do_execsql
eda0: 5f 74 65 73 74 20 34 2e 31 38 2e 35 20 7b 20 53  _test 4.18.5 { S
edb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
edc0: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 7d 0a  } {1 2 3 4 5 6}.
edd0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
ede0: 52 2d 31 39 31 31 34 2d 35 36 31 31 33 20 44 69  R-19114-56113 Di
edf0: 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69  fferent constrai
ee00: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  nts within the s
ee10: 61 6d 65 20 74 61 62 6c 65 0a 23 20 6d 61 79 20  ame table.# may 
ee20: 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64  have different d
ee30: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
ee40: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
ee50: 69 74 68 6d 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  ithms..#.do_exec
ee60: 73 71 6c 5f 74 65 73 74 20 34 2e 31 39 2e 30 20  sql_test 4.19.0 
ee70: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
ee80: 20 74 35 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4f   t5(a NOT NULL O
ee90: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
eea0: 45 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e  E, b NOT NULL ON
eeb0: 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54 29   CONFLICT ABORT)
eec0: 3b 0a 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  ;.}.do_catchsql_
eed0: 74 65 73 74 20 34 2e 31 39 2e 31 20 7b 20 49 4e  test 4.19.1 { IN
eee0: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c  SERT INTO t5 VAL
eef0: 55 45 53 28 4e 55 4c 4c 2c 20 27 6e 6f 74 20 6e  UES(NULL, 'not n
ef00: 75 6c 6c 27 29 20 7d 20 7b 30 20 7b 7d 7d 0a 64  ull') } {0 {}}.d
ef10: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
ef20: 34 2e 31 39 2e 32 20 7b 20 53 45 4c 45 43 54 20  4.19.2 { SELECT 
ef30: 2a 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 64  * FROM t5 } {}.d
ef40: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
ef50: 34 2e 31 39 2e 33 20 7b 20 49 4e 53 45 52 54 20  4.19.3 { INSERT 
ef60: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27  INTO t5 VALUES('
ef70: 6e 6f 74 20 6e 75 6c 6c 27 2c 20 4e 55 4c 4c 29  not null', NULL)
ef80: 20 7d 20 5c 0a 20 20 7b 31 20 7b 4e 4f 54 20 4e   } \.  {1 {NOT N
ef90: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ULL constraint f
efa0: 61 69 6c 65 64 3a 20 74 35 2e 62 7d 7d 0a 64 6f  ailed: t5.b}}.do
efb0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34  _execsql_test  4
efc0: 2e 31 39 2e 34 20 7b 20 53 45 4c 45 43 54 20 2a  .19.4 { SELECT *
efd0: 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 0a 23   FROM t5 } {}..#
efe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
f020: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 73  --------.# Tests
f030: 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
f040: 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 72 6f 77  MARY KEY and row
f050: 69 64 20 72 65 6c 61 74 65 64 20 73 74 61 74 65  id related state
f060: 6d 65 6e 74 73 2e 0a 23 0a 0a 23 20 45 56 49 44  ments..#..# EVID
f070: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 38 34  ENCE-OF: R-52584
f080: 2d 30 34 30 30 39 20 54 68 65 20 72 6f 77 69 64  -04009 The rowid
f090: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63   value can be ac
f0a0: 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65  cessed using one
f0b0: 0a 23 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  .# of the specia
f0c0: 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l case-independe
f0d0: 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22  nt names "rowid"
f0e0: 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f  , "oid", or "_ro
f0f0: 77 69 64 5f 22 20 69 6e 0a 23 20 70 6c 61 63 65  wid_" in.# place
f100: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
f110: 65 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  e..#.# EVIDENCE-
f120: 4f 46 3a 20 52 2d 30 36 37 32 36 2d 30 37 34 36  OF: R-06726-0746
f130: 36 20 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  6 A column name 
f140: 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
f150: 65 20 6e 61 6d 65 73 0a 23 20 64 65 66 69 6e 65  e names.# define
f160: 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  d in the CREATE 
f170: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
f180: 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
f190: 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 0a  llowing special.
f1a0: 23 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  # identifiers: "
f1b0: 52 4f 57 49 44 22 2c 20 22 4f 49 44 22 2c 20 6f  ROWID", "OID", o
f1c0: 72 20 22 5f 52 4f 57 49 44 5f 22 2e 0a 23 0a 64  r "_ROWID_"..#.d
f1d0: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
f1e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
f1f0: 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20  .1.0 {.  CREATE 
f200: 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a  TABLE t1(x, y);.
f210: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
f220: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27   VALUES('one', '
f230: 66 69 72 73 74 27 29 3b 0a 20 20 49 4e 53 45 52  first');.  INSER
f240: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
f250: 28 27 74 77 6f 27 2c 20 27 73 65 63 6f 6e 64 27  ('two', 'second'
f260: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
f270: 20 74 31 20 56 41 4c 55 45 53 28 27 74 68 72 65   t1 VALUES('thre
f280: 65 27 2c 20 27 74 68 69 72 64 27 29 3b 0a 7d 0a  e', 'third');.}.
f290: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
f2a0: 65 73 74 73 20 35 2e 31 20 7b 0a 20 20 31 20 20  ests 5.1 {.  1  
f2b0: 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46   "SELECT rowid F
f2c0: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 7b  ROM t1"        {
f2d0: 31 20 32 20 33 7d 0a 20 20 32 20 20 20 22 53 45  1 2 3}.  2   "SE
f2e0: 4c 45 43 54 20 6f 69 64 20 46 52 4f 4d 20 74 31  LECT oid FROM t1
f2f0: 22 20 20 20 20 20 20 20 20 20 20 7b 31 20 32 20  "          {1 2 
f300: 33 7d 0a 20 20 33 20 20 20 22 53 45 4c 45 43 54  3}.  3   "SELECT
f310: 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 31   _rowid_ FROM t1
f320: 22 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20  "      {1 2 3}. 
f330: 20 34 20 20 20 22 53 45 4c 45 43 54 20 52 4f 57   4   "SELECT ROW
f340: 49 44 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20  ID FROM t1"     
f350: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 35 20 20     {1 2 3}.  5  
f360: 20 22 53 45 4c 45 43 54 20 4f 49 44 20 46 52 4f   "SELECT OID FRO
f370: 4d 20 74 31 22 20 20 20 20 20 20 20 20 20 20 7b  M t1"          {
f380: 31 20 32 20 33 7d 0a 20 20 36 20 20 20 22 53 45  1 2 3}.  6   "SE
f390: 4c 45 43 54 20 5f 52 4f 57 49 44 5f 20 46 52 4f  LECT _ROWID_ FRO
f3a0: 4d 20 74 31 22 20 20 20 20 20 20 7b 31 20 32 20  M t1"      {1 2 
f3b0: 33 7d 0a 20 20 37 20 20 20 22 53 45 4c 45 43 54  3}.  7   "SELECT
f3c0: 20 52 6f 57 69 44 20 46 52 4f 4d 20 74 31 22 20   RoWiD FROM t1" 
f3d0: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
f3e0: 20 38 20 20 20 22 53 45 4c 45 43 54 20 4f 69 44   8   "SELECT OiD
f3f0: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
f400: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 39 20 20     {1 2 3}.  9  
f410: 20 22 53 45 4c 45 43 54 20 5f 52 6f 57 69 44 5f   "SELECT _RoWiD_
f420: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b   FROM t1"      {
f430: 31 20 32 20 33 7d 0a 7d 0a 0a 23 20 45 56 49 44  1 2 3}.}..# EVID
f440: 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 36 35 30 31  ENCE-OF: R-26501
f450: 2d 31 37 33 30 36 20 49 66 20 61 20 74 61 62 6c  -17306 If a tabl
f460: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65  e contains a use
f470: 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  r defined column
f480: 0a 23 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22  .# named "rowid"
f490: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
f4a0: 69 64 5f 22 2c 20 74 68 65 6e 20 74 68 61 74 20  id_", then that 
f4b0: 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65  name always refe
f4c0: 72 73 20 74 68 65 0a 23 20 65 78 70 6c 69 63 69  rs the.# explici
f4d0: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  tly declared col
f4e0: 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  umn and cannot b
f4f0: 65 20 75 73 65 64 20 74 6f 20 72 65 74 72 69 65  e used to retrie
f500: 76 65 20 74 68 65 20 69 6e 74 65 67 65 72 0a 23  ve the integer.#
f510: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 23 0a   rowid value..#.
f520: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
f530: 2d 34 34 36 31 35 2d 33 33 32 38 36 20 54 68 65  -44615-33286 The
f540: 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
f550: 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20  iers only refer 
f560: 74 6f 20 74 68 65 0a 23 20 72 6f 77 20 6b 65 79  to the.# row key
f570: 20 69 66 20 74 68 65 20 43 52 45 41 54 45 20 54   if the CREATE T
f580: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 64  ABLE statement d
f590: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61  oes not define a
f5a0: 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 0a 23 20 77   real column.# w
f5b0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
f5c0: 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  e..#.do_execsql_
f5d0: 74 65 73 74 20 35 2e 32 2e 30 20 7b 0a 20 20 43  test 5.2.0 {.  C
f5e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 6f  REATE TABLE t2(o
f5f0: 69 64 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  id, b);.  CREATE
f600: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 5f 72 6f   TABLE t3(a, _ro
f610: 77 69 64 5f 29 3b 0a 20 20 43 52 45 41 54 45 20  wid_);.  CREATE 
f620: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 72  TABLE t4(a, b, r
f630: 6f 77 69 64 29 3b 0a 0a 20 20 49 4e 53 45 52 54  owid);..  INSERT
f640: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
f650: 27 6f 6e 65 27 2c 20 27 74 77 6f 27 29 3b 0a 20  'one', 'two');. 
f660: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
f670: 56 41 4c 55 45 53 28 27 74 68 72 65 65 27 2c 20  VALUES('three', 
f680: 27 66 6f 75 72 27 29 3b 0a 0a 20 20 49 4e 53 45  'four');..  INSE
f690: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
f6a0: 53 28 27 66 69 76 65 27 2c 20 27 73 69 78 27 29  S('five', 'six')
f6b0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
f6c0: 74 33 20 56 41 4c 55 45 53 28 27 73 65 76 65 6e  t3 VALUES('seven
f6d0: 27 2c 20 27 65 69 67 68 74 27 29 3b 0a 0a 20 20  ', 'eight');..  
f6e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
f6f0: 41 4c 55 45 53 28 27 6e 69 6e 65 27 2c 20 27 74  ALUES('nine', 't
f700: 65 6e 27 2c 20 27 65 6c 65 76 65 6e 27 29 3b 0a  en', 'eleven');.
f710: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
f720: 20 56 41 4c 55 45 53 28 27 74 77 65 6c 76 65 27   VALUES('twelve'
f730: 2c 20 27 74 68 69 72 74 65 65 6e 27 2c 20 27 66  , 'thirteen', 'f
f740: 6f 75 72 74 65 65 6e 27 29 3b 0a 7d 0a 64 6f 5f  ourteen');.}.do_
f750: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
f760: 73 20 35 2e 32 20 7b 0a 20 20 31 20 20 20 22 53  s 5.2 {.  1   "S
f770: 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64  ELECT oid, rowid
f780: 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74  , _rowid_ FROM t
f790: 32 22 20 20 20 7b 6f 6e 65 20 31 20 31 20 20 20  2"   {one 1 1   
f7a0: 20 20 20 74 68 72 65 65 20 32 20 32 7d 0a 20 20     three 2 2}.  
f7b0: 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64 2c  2   "SELECT oid,
f7c0: 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 20   rowid, _rowid_ 
f7d0: 46 52 4f 4d 20 74 33 22 20 20 20 7b 31 20 31 20  FROM t3"   {1 1 
f7e0: 73 69 78 20 20 20 20 20 20 32 20 32 20 65 69 67  six      2 2 eig
f7f0: 68 74 7d 20 0a 20 20 33 20 20 20 22 53 45 4c 45  ht} .  3   "SELE
f800: 43 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c 20 5f  CT oid, rowid, _
f810: 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 34 22 20  rowid_ FROM t4" 
f820: 20 20 7b 31 20 65 6c 65 76 65 6e 20 31 20 20 20    {1 eleven 1   
f830: 32 20 66 6f 75 72 74 65 65 6e 20 32 7d 0a 7d 0a  2 fourteen 2}.}.
f840: 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20 24 74 62  ..# Argument $tb
f850: 6c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  l is the name of
f860: 20 61 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20   a table in the 
f870: 64 61 74 61 62 61 73 65 2e 20 41 72 67 75 6d 65  database. Argume
f880: 6e 74 20 24 63 6f 6c 20 69 73 0a 23 20 74 68 65  nt $col is.# the
f890: 20 6e 61 6d 65 20 6f 66 20 6f 6e 65 20 6f 66 20   name of one of 
f8a0: 74 68 65 20 74 61 62 6c 65 73 20 63 6f 6c 75 6d  the tables colum
f8b0: 6e 73 2e 20 52 65 74 75 72 6e 20 31 20 69 66 20  ns. Return 1 if 
f8c0: 24 63 6f 6c 20 69 73 20 61 6e 20 61 6c 69 61 73  $col is an alias
f8d0: 20 66 6f 72 0a 23 20 74 68 65 20 72 6f 77 69 64   for.# the rowid
f8e0: 2c 20 6f 72 20 30 20 6f 74 68 65 72 77 69 73 65  , or 0 otherwise
f8f0: 2e 0a 23 0a 70 72 6f 63 20 69 73 5f 69 6e 74 65  ..#.proc is_inte
f900: 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20  ger_primary_key 
f910: 7b 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20 20 6c 69  {tbl col} {.  li
f920: 6e 64 65 78 20 5b 64 62 20 65 76 61 6c 20 5b 73  ndex [db eval [s
f930: 75 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45 54  ubst {.    DELET
f940: 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 20  E FROM $tbl;.   
f950: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62   INSERT INTO $tb
f960: 6c 20 28 24 63 6f 6c 29 20 56 41 4c 55 45 53 28  l ($col) VALUES(
f970: 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 28  0);.    SELECT (
f980: 72 6f 77 69 64 3d 3d 24 63 6f 6c 29 20 46 52 4f  rowid==$col) FRO
f990: 4d 20 24 74 62 6c 3b 0a 20 20 20 20 44 45 4c 45  M $tbl;.    DELE
f9a0: 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20  TE FROM $tbl;.  
f9b0: 7d 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45  }]] 0.}..# EVIDE
f9c0: 4e 43 45 2d 4f 46 3a 20 52 2d 34 37 39 30 31 2d  NCE-OF: R-47901-
f9d0: 33 33 39 34 37 20 57 69 74 68 20 6f 6e 65 20 65  33947 With one e
f9e0: 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62  xception noted b
f9f0: 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69 64  elow, if a rowid
fa00: 0a 23 20 74 61 62 6c 65 20 68 61 73 20 61 20 70  .# table has a p
fa10: 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20  rimary key that 
fa20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69  consists of a si
fa30: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ngle column and 
fa40: 74 68 65 0a 23 20 64 65 63 6c 61 72 65 64 20 74  the.# declared t
fa50: 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75  ype of that colu
fa60: 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20  mn is "INTEGER" 
fa70: 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f  in any mixture o
fa80: 66 20 75 70 70 65 72 20 61 6e 64 0a 23 20 6c 6f  f upper and.# lo
fa90: 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74  wer case, then t
faa0: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65  he column become
fab0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
fac0: 68 65 20 72 6f 77 69 64 2e 0a 23 0a 23 20 45 56  he rowid..#.# EV
fad0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39  IDENCE-OF: R-459
fae0: 35 31 2d 30 38 33 34 37 20 69 66 20 74 68 65 20  51-08347 if the 
faf0: 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61  declaration of a
fb00: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 23 20 64   column with.# d
fb10: 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e  eclared type "IN
fb20: 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20  TEGER" includes 
fb30: 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20  an "PRIMARY KEY 
fb40: 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74  DESC" clause, it
fb50: 20 64 6f 65 73 0a 23 20 6e 6f 74 20 62 65 63 6f   does.# not beco
fb60: 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  me an alias for 
fb70: 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73  the rowid and is
fb80: 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20   not classified 
fb90: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  as an integer.# 
fba0: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64  primary key..#.d
fbb0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
fbc0: 73 74 73 20 35 2e 33 20 2d 74 63 6c 71 75 65 72  sts 5.3 -tclquer
fbd0: 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
fbe0: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 35  r_primary_key t5
fbf0: 20 70 6b 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a   pk.} -repair {.
fc00: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
fc10: 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 7b  P TABLE t5 }.} {
fc20: 0a 20 20 31 20 20 20 22 43 52 45 41 54 45 20 54  .  1   "CREATE T
fc30: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67  ABLE t5(pk integ
fc40: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 22  er primary key)"
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc60: 20 20 20 20 20 20 20 20 20 31 0a 20 20 32 20 20           1.  2  
fc70: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
fc80: 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20 70 72  5(pk integer, pr
fc90: 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20  imary key(pk))" 
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 20 31 0a 20 20 33 20 20 20 22 43 52 45 41     1.  3   "CREA
fcc0: 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69  TE TABLE t5(pk i
fcd0: 6e 74 65 67 65 72 2c 20 76 20 69 6e 74 65 67 65  nteger, v intege
fce0: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
fcf0: 6b 29 29 22 20 20 20 20 20 20 20 20 20 31 0a 20  k))"         1. 
fd00: 20 34 20 20 20 22 43 52 45 41 54 45 20 54 41 42   4   "CREATE TAB
fd10: 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72  LE t5(pk integer
fd20: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
fd30: 6d 61 72 79 20 6b 65 79 28 70 6b 2c 20 76 29 29  mary key(pk, v))
fd40: 22 20 20 20 20 20 20 30 0a 20 20 35 20 20 20 22  "      0.  5   "
fd50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
fd60: 70 6b 20 69 6e 74 2c 20 76 20 69 6e 74 65 67 65  pk int, v intege
fd70: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
fd80: 6b 2c 20 76 29 29 22 20 20 20 20 20 20 20 20 20  k, v))"         
fd90: 20 30 0a 20 20 36 20 20 20 22 43 52 45 41 54 45   0.  6   "CREATE
fda0: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
fdb0: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
fdc0: 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20  mary key(pk))"  
fdd0: 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 37             0.  7
fde0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
fdf0: 20 74 35 28 70 6b 20 69 6e 74 20 70 72 69 6d 61   t5(pk int prima
fe00: 72 79 20 6b 65 79 2c 20 76 20 69 6e 74 65 67 65  ry key, v intege
fe10: 72 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  r)"             
fe20: 20 20 20 20 20 30 0a 20 20 38 20 20 20 22 43 52       0.  8   "CR
fe30: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b  EATE TABLE t5(pk
fe40: 20 69 6e 54 45 67 65 72 20 70 72 69 6d 61 72 79   inTEger primary
fe50: 20 6b 65 79 29 22 20 20 20 20 20 20 20 20 20 20   key)"          
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
fe70: 0a 20 20 39 20 20 20 22 43 52 45 41 54 45 20 54  .  9   "CREATE T
fe80: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 47  ABLE t5(pk inteG
fe90: 45 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  Er, primary key(
fea0: 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 20 20  pk))"           
feb0: 20 20 20 20 20 20 20 20 20 31 0a 20 20 31 30 20           1.  10 
fec0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
fed0: 35 28 70 6b 20 49 4e 54 45 47 45 52 2c 20 76 20  5(pk INTEGER, v 
fee0: 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79  integer, primary
fef0: 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20 20 20   key(pk))"      
ff00: 20 20 20 31 0a 7d 0a 0a 23 20 45 56 49 44 45 4e     1.}..# EVIDEN
ff10: 43 45 2d 4f 46 3a 20 52 2d 34 31 34 34 34 2d 34  CE-OF: R-41444-4
ff20: 39 36 36 35 20 4f 74 68 65 72 20 69 6e 74 65 67  9665 Other integ
ff30: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69  er type names li
ff40: 6b 65 20 22 49 4e 54 22 20 6f 72 0a 23 20 22 42  ke "INT" or.# "B
ff50: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
ff60: 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e   INTEGER" or "UN
ff70: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20  SIGNED INTEGER" 
ff80: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
ff90: 72 79 0a 23 20 6b 65 79 20 63 6f 6c 75 6d 6e 20  ry.# key column 
ffa0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20  to behave as an 
ffb0: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 63  ordinary table c
ffc0: 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67  olumn with integ
ffd0: 65 72 20 61 66 66 69 6e 69 74 79 0a 23 20 61 6e  er affinity.# an
ffe0: 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  d a unique index
fff0: 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61  , not as an alia
10000 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
10010 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
10020 73 74 20 35 2e 34 2e 31 20 7b 0a 20 20 43 52 45  st 5.4.1 {.  CRE
10030 41 54 45 20 54 41 42 4c 45 20 74 36 28 70 6b 20  ATE TABLE t6(pk 
10040 49 4e 54 20 70 72 69 6d 61 72 79 20 6b 65 79 29  INT primary key)
10050 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
10060 20 74 37 28 70 6b 20 42 49 47 49 4e 54 20 70 72   t7(pk BIGINT pr
10070 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43 52  imary key);.  CR
10080 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 70 6b  EATE TABLE t8(pk
10090 20 53 48 4f 52 54 20 49 4e 54 45 47 45 52 20 70   SHORT INTEGER p
100a0 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43  rimary key);.  C
100b0 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 28 70  REATE TABLE t9(p
100c0 6b 20 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47  k UNSIGNED INTEG
100d0 45 52 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b  ER primary key);
100e0 0a 7d 20 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72  .} .do_test e_cr
100f0 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e  eatetable-5.4.2.
10100 31 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70  1 { is_integer_p
10110 72 69 6d 61 72 79 5f 6b 65 79 20 74 36 20 70 6b  rimary_key t6 pk
10120 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63   } 0.do_test e_c
10130 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32  reatetable-5.4.2
10140 2e 32 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f  .2 { is_integer_
10150 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 37 20 70  primary_key t7 p
10160 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f  k } 0.do_test e_
10170 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e  createtable-5.4.
10180 32 2e 33 20 7b 20 69 73 5f 69 6e 74 65 67 65 72  2.3 { is_integer
10190 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 38 20  _primary_key t8 
101a0 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65  pk } 0.do_test e
101b0 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34  _createtable-5.4
101c0 2e 32 2e 34 20 7b 20 69 73 5f 69 6e 74 65 67 65  .2.4 { is_intege
101d0 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 39  r_primary_key t9
101e0 20 70 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78 65 63   pk } 0..do_exec
101f0 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 33 20 7b  sql_test 5.4.3 {
10200 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10210 36 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  6 VALUES('2.0');
10220 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10230 37 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  7 VALUES('2.0');
10240 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10250 38 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  8 VALUES('2.0');
10260 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10270 39 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  9 VALUES('2.0');
10280 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66  .  SELECT typeof
10290 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 36  (pk), pk FROM t6
102a0 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
102b0 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74  f(pk), pk FROM t
102c0 37 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65  7;.  SELECT type
102d0 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20  of(pk), pk FROM 
102e0 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  t8;.  SELECT typ
102f0 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d  eof(pk), pk FROM
10300 20 74 39 3b 0a 7d 20 7b 69 6e 74 65 67 65 72 20   t9;.} {integer 
10310 32 20 69 6e 74 65 67 65 72 20 32 20 69 6e 74 65  2 integer 2 inte
10320 67 65 72 20 32 20 69 6e 74 65 67 65 72 20 32 7d  ger 2 integer 2}
10330 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  ..do_catchsql_te
10340 73 74 20 35 2e 34 2e 34 2e 31 20 7b 20 0a 20 20  st 5.4.4.1 { .  
10350 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
10360 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10370 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10380 74 20 66 61 69 6c 65 64 3a 20 74 36 2e 70 6b 7d  t failed: t6.pk}
10390 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
103a0 73 74 20 35 2e 34 2e 34 2e 32 20 7b 20 0a 20 20  st 5.4.4.2 { .  
103b0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56  INSERT INTO t7 V
103c0 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
103d0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
103e0 74 20 66 61 69 6c 65 64 3a 20 74 37 2e 70 6b 7d  t failed: t7.pk}
103f0 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
10400 73 74 20 35 2e 34 2e 34 2e 33 20 7b 20 0a 20 20  st 5.4.4.3 { .  
10410 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
10420 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10430 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10440 74 20 66 61 69 6c 65 64 3a 20 74 38 2e 70 6b 7d  t failed: t8.pk}
10450 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
10460 73 74 20 35 2e 34 2e 34 2e 34 20 7b 20 0a 20 20  st 5.4.4.4 { .  
10470 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56  INSERT INTO t9 V
10480 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10490 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
104a0 74 20 66 61 69 6c 65 64 3a 20 74 39 2e 70 6b 7d  t failed: t9.pk}
104b0 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
104c0 3a 20 52 2d 35 36 30 39 34 2d 35 37 38 33 30 20  : R-56094-57830 
104d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  the following th
104e0 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72  ree table declar
104f0 61 74 69 6f 6e 73 20 61 6c 6c 0a 23 20 63 61 75  ations all.# cau
10500 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78  se the column "x
10510 22 20 74 6f 20 62 65 20 61 6e 20 61 6c 69 61 73  " to be an alias
10520 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28   for the rowid (
10530 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
10540 72 79 0a 23 20 6b 65 79 29 3a 20 43 52 45 41 54  ry.# key): CREAT
10550 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
10560 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
10570 41 53 43 2c 20 79 2c 20 7a 29 3b 20 43 52 45 41  ASC, y, z); CREA
10580 54 45 20 54 41 42 4c 45 0a 23 20 74 28 78 20 49  TE TABLE.# t(x I
10590 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
105a0 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43 29  IMARY KEY(x ASC)
105b0 29 3b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ); CREATE TABLE 
105c0 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 0a  t(x INTEGER, y,.
105d0 23 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  # z, PRIMARY KEY
105e0 28 78 20 44 45 53 43 29 29 3b 0a 23 0a 23 20 45  (x DESC));.#.# E
105f0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 30  VIDENCE-OF: R-20
10600 31 34 39 2d 32 35 38 38 34 20 74 68 65 20 66 6f  149-25884 the fo
10610 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74  llowing declarat
10620 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ion does not res
10630 75 6c 74 0a 23 20 69 6e 20 22 78 22 20 62 65 69  ult.# in "x" bei
10640 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ng an alias for 
10650 74 68 65 20 72 6f 77 69 64 3a 20 43 52 45 41 54  the rowid: CREAT
10660 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
10670 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b 45  GER PRIMARY.# KE
10680 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 0a 23  Y DESC, y, z);.#
10690 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
106a0 74 65 73 74 73 20 35 20 2d 74 63 6c 71 75 65 72  tests 5 -tclquer
106b0 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
106c0 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 20  r_primary_key t 
106d0 78 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  x.} -repair {.  
106e0 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
106f0 54 41 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a 20 20  TABLE t }.} {.  
10700 35 2e 31 20 20 20 20 22 43 52 45 41 54 45 20 54  5.1    "CREATE T
10710 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
10720 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
10730 2c 20 79 2c 20 7a 29 22 20 20 20 20 20 20 31 0a  , y, z)"      1.
10740 20 20 35 2e 32 20 20 20 20 22 43 52 45 41 54 45    5.2    "CREATE
10750 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
10760 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
10770 59 20 4b 45 59 28 78 20 41 53 43 29 29 22 20 20  Y KEY(x ASC))"  
10780 31 0a 20 20 35 2e 33 20 20 20 20 22 43 52 45 41  1.  5.3    "CREA
10790 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
107a0 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
107b0 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29  ARY KEY(x DESC))
107c0 22 20 31 0a 20 20 36 2e 31 20 20 20 20 22 43 52  " 1.  6.1    "CR
107d0 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
107e0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
107f0 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 22 20  EY DESC, y, z)" 
10800 20 20 20 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45      0.}..# EVIDE
10810 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 37 33 33 2d  NCE-OF: R-03733-
10820 32 39 37 33 34 20 52 6f 77 69 64 20 76 61 6c 75  29734 Rowid valu
10830 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
10840 65 64 20 75 73 69 6e 67 20 61 6e 0a 23 20 55 50  ed using an.# UP
10850 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
10860 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10870 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
10880 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
10890 74 68 65 72 0a 23 20 75 73 69 6e 67 20 6f 6e 65  ther.# using one
108a0 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   of the built-in
108b0 20 61 6c 69 61 73 65 73 20 28 22 72 6f 77 69 64   aliases ("rowid
108c0 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
108d0 77 69 64 5f 22 29 20 6f 72 20 62 79 0a 23 20 75  wid_") or by.# u
108e0 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72  sing an alias cr
108f0 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65  eated by an inte
10900 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  ger primary key.
10910 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
10920 73 74 20 35 2e 37 2e 30 20 7b 0a 20 20 43 52 45  st 5.7.0 {.  CRE
10930 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 61 2c  ATE TABLE t10(a,
10940 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   b);.  INSERT IN
10950 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28 27 74  TO t10 VALUES('t
10960 65 6e 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52 45  en', 10);..  CRE
10970 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 61 2c  ATE TABLE t11(a,
10980 20 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   b INTEGER PRIMA
10990 52 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45 52  RY KEY);.  INSER
109a0 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45  T INTO t11 VALUE
109b0 53 28 27 74 65 6e 27 2c 20 31 30 29 3b 0a 7d 0a  S('ten', 10);.}.
109c0 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
109d0 65 73 74 73 20 35 2e 37 2e 31 20 2d 71 75 65 72  ests 5.7.1 -quer
109e0 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 72 6f  y { .  SELECT ro
109f0 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f 69  wid, _rowid_, oi
10a00 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b 0a  d FROM t10;.} {.
10a10 20 20 31 20 20 20 20 22 55 50 44 41 54 45 20 74    1    "UPDATE t
10a20 31 30 20 53 45 54 20 72 6f 77 69 64 20 3d 20 35  10 SET rowid = 5
10a30 22 20 20 20 7b 35 20 35 20 35 7d 0a 20 20 32 20  "   {5 5 5}.  2 
10a40 20 20 20 22 55 50 44 41 54 45 20 74 31 30 20 53     "UPDATE t10 S
10a50 45 54 20 5f 72 6f 77 69 64 5f 20 3d 20 36 22 20  ET _rowid_ = 6" 
10a60 7b 36 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22  {6 6 6}.  3    "
10a70 55 50 44 41 54 45 20 74 31 30 20 53 45 54 20 6f  UPDATE t10 SET o
10a80 69 64 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37  id = 7"     {7 7
10a90 20 37 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   7}.}.do_createt
10aa0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 37 2e 32  able_tests 5.7.2
10ab0 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
10ac0 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
10ad0 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
10ae0 74 31 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20 20  t11;.} {.  1    
10af0 22 55 50 44 41 54 45 20 74 31 31 20 53 45 54 20  "UPDATE t11 SET 
10b00 72 6f 77 69 64 20 3d 20 35 22 20 20 20 7b 35 20  rowid = 5"   {5 
10b10 35 20 35 20 35 7d 0a 20 20 32 20 20 20 20 22 55  5 5 5}.  2    "U
10b20 50 44 41 54 45 20 74 31 31 20 53 45 54 20 5f 72  PDATE t11 SET _r
10b30 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36 20 36 20  owid_ = 6" {6 6 
10b40 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55 50 44  6 6}.  3    "UPD
10b50 41 54 45 20 74 31 31 20 53 45 54 20 6f 69 64 20  ATE t11 SET oid 
10b60 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20 37 20  = 7"     {7 7 7 
10b70 37 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41 54  7}.  4    "UPDAT
10b80 45 20 74 31 31 20 53 45 54 20 62 20 3d 20 38 22  E t11 SET b = 8"
10b90 20 20 20 20 20 20 20 7b 38 20 38 20 38 20 38 7d         {8 8 8 8}
10ba0 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
10bb0 46 3a 20 52 2d 35 38 37 30 36 2d 31 34 32 32 39  F: R-58706-14229
10bc0 20 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49   Similarly, an I
10bd0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
10be0 6d 61 79 20 70 72 6f 76 69 64 65 0a 23 20 61 20  may provide.# a 
10bf0 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20  value to use as 
10c00 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
10c10 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e  ch row inserted.
10c20 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
10c30 65 5f 74 65 73 74 73 20 35 2e 38 2e 31 20 2d 71  e_tests 5.8.1 -q
10c40 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54  uery { .  SELECT
10c50 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c   rowid, _rowid_,
10c60 20 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d   oid FROM t10;.}
10c70 20 2d 72 65 70 61 69 72 20 7b 20 0a 20 20 65 78   -repair { .  ex
10c80 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46  ecsql { DELETE F
10c90 52 4f 4d 20 74 31 30 20 7d 20 0a 7d 20 7b 0a 20  ROM t10 } .} {. 
10ca0 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
10cb0 54 4f 20 74 31 30 28 6f 69 64 29 20 56 41 4c 55  TO t10(oid) VALU
10cc0 45 53 28 31 35 29 22 20 20 20 20 20 20 20 20 20  ES(15)"         
10cd0 20 20 7b 31 35 20 31 35 20 31 35 7d 0a 20 20 32    {15 15 15}.  2
10ce0 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
10cf0 20 74 31 30 28 72 6f 77 69 64 29 20 56 41 4c 55   t10(rowid) VALU
10d00 45 53 28 31 36 29 22 20 20 20 20 20 20 20 20 20  ES(16)"         
10d10 7b 31 36 20 31 36 20 31 36 7d 0a 20 20 33 20 20  {16 16 16}.  3  
10d20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
10d30 31 30 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55  10(_rowid_) VALU
10d40 45 53 28 31 37 29 22 20 20 20 20 20 20 20 7b 31  ES(17)"       {1
10d50 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20  7 17 17}.  4    
10d60 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30  "INSERT INTO t10
10d70 28 61 2c 20 62 2c 20 6f 69 64 29 20 56 41 4c 55  (a, b, oid) VALU
10d80 45 53 28 31 2c 32 2c 33 29 22 20 20 7b 33 20 33  ES(1,2,3)"  {3 3
10d90 20 33 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   3}.}.do_createt
10da0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 32  able_tests 5.8.2
10db0 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
10dc0 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
10dd0 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
10de0 74 31 31 3b 0a 7d 20 2d 72 65 70 61 69 72 20 7b  t11;.} -repair {
10df0 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45   .  execsql { DE
10e00 4c 45 54 45 20 46 52 4f 4d 20 74 31 31 20 7d 20  LETE FROM t11 } 
10e10 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53  .} {.  1    "INS
10e20 45 52 54 20 49 4e 54 4f 20 74 31 31 28 6f 69 64  ERT INTO t11(oid
10e30 29 20 56 41 4c 55 45 53 28 31 35 29 22 20 20 20  ) VALUES(15)"   
10e40 20 20 20 20 20 20 20 20 7b 31 35 20 31 35 20 31          {15 15 1
10e50 35 20 31 35 7d 0a 20 20 32 20 20 20 20 22 49 4e  5 15}.  2    "IN
10e60 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 72 6f  SERT INTO t11(ro
10e70 77 69 64 29 20 56 41 4c 55 45 53 28 31 36 29 22  wid) VALUES(16)"
10e80 20 20 20 20 20 20 20 20 20 7b 31 36 20 31 36 20           {16 16 
10e90 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20 22 49  16 16}.  3    "I
10ea0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 5f  NSERT INTO t11(_
10eb0 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53 28 31  rowid_) VALUES(1
10ec0 37 29 22 20 20 20 20 20 20 20 7b 31 37 20 31 37  7)"       {17 17
10ed0 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20 22   17 17}.  4    "
10ee0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28  INSERT INTO t11(
10ef0 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c 32  a, b) VALUES(1,2
10f00 29 22 20 20 20 20 20 20 20 20 20 7b 32 20 32 20  )"         {2 2 
10f10 32 20 32 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  2 2}.}..# EVIDEN
10f20 43 45 2d 4f 46 3a 20 52 2d 33 32 33 32 36 2d 34  CE-OF: R-32326-4
10f30 34 35 39 32 20 55 6e 6c 69 6b 65 20 6e 6f 72 6d  4592 Unlike norm
10f40 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e  al SQLite column
10f50 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  s, an integer.# 
10f60 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
10f70 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
10f80 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
10f90 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
10fa0 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  .# primary key o
10fb0 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 73 20  r rowid columns 
10fc0 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
10fd0 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
10fe0 69 6e 74 0a 23 20 76 61 6c 75 65 73 2c 20 73 74  int.# values, st
10ff0 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72  rings, BLOBs, or
11000 20 4e 55 4c 4c 73 2e 0a 23 0a 23 20 20 20 20 20   NULLs..#.#     
11010 54 68 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72  This is consider
11020 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20  ed by the tests 
11030 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
11040 67 20 33 20 73 74 61 74 65 6d 65 6e 74 73 2c 0a  g 3 statements,.
11050 23 20 20 20 20 20 77 68 69 63 68 20 73 68 6f 77  #     which show
11060 20 74 68 61 74 3a 0a 23 0a 23 20 20 20 20 20 20   that:.#.#      
11070 20 31 2e 20 41 74 74 65 6d 70 74 73 20 74 6f 20   1. Attempts to 
11080 55 50 44 41 54 45 20 61 20 72 6f 77 69 64 20 63  UPDATE a rowid c
11090 6f 6c 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e 2d 69  olumn to a non-i
110a0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 66 61 69  nteger value fai
110b0 6c 2c 0a 23 20 20 20 20 20 20 20 32 2e 20 41 74  l,.#       2. At
110c0 74 65 6d 70 74 73 20 74 6f 20 49 4e 53 45 52 54  tempts to INSERT
110d0 20 61 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 20   a real, string 
110e0 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 20 69 6e  or blob value in
110f0 74 6f 20 61 20 72 6f 77 69 64 20 0a 23 20 20 20  to a rowid .#   
11100 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 66 61         column fa
11110 69 6c 2c 20 61 6e 64 0a 23 20 20 20 20 20 20 20  il, and.#       
11120 33 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  3. Attempting to
11130 20 49 4e 53 45 52 54 20 61 20 4e 55 4c 4c 20 76   INSERT a NULL v
11140 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69  alue into a rowi
11150 64 20 63 6f 6c 75 6d 6e 20 63 61 75 73 65 73 20  d column causes 
11160 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20 73  the.#          s
11170 79 73 74 65 6d 20 74 6f 20 61 75 74 6f 6d 61 74  ystem to automat
11180 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 61 6e  ically select an
11190 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
111a0 6f 20 75 73 65 2e 0a 23 0a 0a 0a 23 20 45 56 49  o use..#...# EVI
111b0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 32 32  DENCE-OF: R-6422
111c0 34 2d 36 32 35 37 38 20 49 66 20 61 6e 20 55 50  4-62578 If an UP
111d0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
111e0 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
111f0 6e 0a 23 20 69 6e 74 65 67 65 72 20 70 72 69 6d  n.# integer prim
11200 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
11210 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e 55 4c   column to a NUL
11220 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c  L or blob value,
11230 20 6f 72 20 74 6f 20 61 0a 23 20 73 74 72 69 6e   or to a.# strin
11240 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g or real value 
11250 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
11260 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
11270 74 65 64 20 74 6f 20 61 6e 0a 23 20 69 6e 74 65  ted to an.# inte
11280 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65  ger, a "datatype
11290 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
112a0 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20   occurs and the 
112b0 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 23 20 61  statement is.# a
112c0 62 6f 72 74 65 64 2e 0a 23 0a 64 72 6f 70 5f 61  borted..#.drop_a
112d0 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65  ll_tables.do_exe
112e0 63 73 71 6c 5f 74 65 73 74 20 35 2e 39 2e 30 20  csql_test 5.9.0 
112f0 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
11300 20 74 31 32 28 78 20 49 4e 54 45 47 45 52 20 50   t12(x INTEGER P
11310 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a  RIMARY KEY, y);.
11320 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
11330 32 20 56 41 4c 55 45 53 28 35 2c 20 27 66 69 76  2 VALUES(5, 'fiv
11340 65 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  e');.}.do_create
11350 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 39 2e  table_tests 5.9.
11360 31 20 2d 71 75 65 72 79 20 7b 20 53 45 4c 45 43  1 -query { SELEC
11370 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46  T typeof(x), x F
11380 52 4f 4d 20 74 31 32 20 7d 20 7b 0a 20 20 31 20  ROM t12 } {.  1 
11390 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
113a0 54 20 78 20 3d 20 34 22 20 20 20 20 20 20 20 7b  T x = 4"       {
113b0 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20 20  integer 4}.  2  
113c0 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
113d0 20 78 20 3d 20 31 30 2e 30 22 20 20 20 20 7b 69   x = 10.0"    {i
113e0 6e 74 65 67 65 72 20 31 30 7d 0a 20 20 33 20 20  nteger 10}.  3  
113f0 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11400 20 78 20 3d 20 27 31 32 2e 30 27 22 20 20 7b 69   x = '12.0'"  {i
11410 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20 20  nteger 12}.  4  
11420 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11430 20 78 20 3d 20 27 2d 31 35 2e 30 27 22 20 7b 69   x = '-15.0'" {i
11440 6e 74 65 67 65 72 20 2d 31 35 7d 0a 7d 0a 64 6f  nteger -15}.}.do
11450 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
11460 74 73 20 35 2e 39 2e 32 20 2d 65 72 72 6f 72 20  ts 5.9.2 -error 
11470 7b 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73  {.  datatype mis
11480 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20  match.} {.  1   
11490 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
114a0 78 20 3d 20 34 2e 31 22 20 20 20 20 20 20 20 20  x = 4.1"        
114b0 20 7b 7d 0a 20 20 32 20 20 20 22 55 50 44 41 54   {}.  2   "UPDAT
114c0 45 20 74 31 32 20 53 45 54 20 78 20 3d 20 27 68  E t12 SET x = 'h
114d0 65 6c 6c 6f 27 22 20 20 20 20 20 7b 7d 0a 20 20  ello'"     {}.  
114e0 33 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20  3   "UPDATE t12 
114f0 53 45 54 20 78 20 3d 20 4e 55 4c 4c 22 20 20 20  SET x = NULL"   
11500 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 22 55       {}.  4   "U
11510 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78 20  PDATE t12 SET x 
11520 3d 20 58 27 41 42 43 44 27 22 20 20 20 20 20 7b  = X'ABCD'"     {
11530 7d 0a 20 20 35 20 20 20 22 55 50 44 41 54 45 20  }.  5   "UPDATE 
11540 74 31 32 20 53 45 54 20 78 20 3d 20 58 27 33 39  t12 SET x = X'39
11550 30 30 27 22 20 20 20 20 20 7b 7d 0a 20 20 36 20  00'"     {}.  6 
11560 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
11570 54 20 78 20 3d 20 58 27 33 39 27 22 20 20 20 20  T x = X'39'"    
11580 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45     {}.}..# EVIDE
11590 4e 43 45 2d 4f 46 3a 20 52 2d 30 35 37 33 34 2d  NCE-OF: R-05734-
115a0 31 33 36 32 39 20 49 66 20 61 6e 20 49 4e 53 45  13629 If an INSE
115b0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
115c0 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
115d0 61 0a 23 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20  a.# blob value, 
115e0 6f 72 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72  or a string or r
115f0 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63  eal value that c
11600 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
11610 73 6c 79 0a 23 20 63 6f 6e 76 65 72 74 65 64 20  sly.# converted 
11620 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
11630 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  to an integer pr
11640 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
11650 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23 20 22  id column, a.# "
11660 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
11670 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
11680 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e  and the statemen
11690 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 23 0a  t is aborted..#.
116a0 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
116b0 35 2e 31 30 2e 30 20 7b 20 44 45 4c 45 54 45 20  5.10.0 { DELETE 
116c0 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72  FROM t12 }.do_cr
116d0 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
116e0 35 2e 31 30 2e 31 20 2d 65 72 72 6f 72 20 7b 20  5.10.1 -error { 
116f0 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73 6d  .  datatype mism
11700 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20 22  atch.} {.  1   "
11710 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11720 78 29 20 56 41 4c 55 45 53 28 34 2e 31 29 22 20  x) VALUES(4.1)" 
11730 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 22 49 4e      {}.  2   "IN
11740 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11750 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29   VALUES('hello')
11760 22 20 7b 7d 0a 20 20 33 20 20 20 22 49 4e 53 45  " {}.  3   "INSE
11770 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
11780 41 4c 55 45 53 28 58 27 41 42 43 44 27 29 22 20  ALUES(X'ABCD')" 
11790 7b 7d 0a 20 20 34 20 20 20 22 49 4e 53 45 52 54  {}.  4   "INSERT
117a0 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
117b0 55 45 53 28 58 27 33 39 30 30 27 29 22 20 7b 7d  UES(X'3900')" {}
117c0 0a 20 20 35 20 20 20 22 49 4e 53 45 52 54 20 49  .  5   "INSERT I
117d0 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55 45  NTO t12(x) VALUE
117e0 53 28 58 27 33 39 27 29 22 20 20 20 7b 7d 0a 7d  S(X'39')"   {}.}
117f0 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
11800 74 65 73 74 73 20 35 2e 31 30 2e 32 20 2d 71 75  tests 5.10.2 -qu
11810 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  ery { .  SELECT 
11820 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46 52 4f  typeof(x), x FRO
11830 4d 20 74 31 32 20 0a 7d 20 2d 72 65 70 61 69 72  M t12 .} -repair
11840 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44   {.  execsql { D
11850 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 32 20 7d  ELETE FROM t12 }
11860 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
11870 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
11880 41 4c 55 45 53 28 34 29 22 20 20 20 20 20 20 20  ALUES(4)"       
11890 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20  {integer 4}.  2 
118a0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
118b0 31 32 28 78 29 20 56 41 4c 55 45 53 28 31 30 2e  12(x) VALUES(10.
118c0 30 29 22 20 20 20 20 7b 69 6e 74 65 67 65 72 20  0)"    {integer 
118d0 31 30 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52  10}.  3   "INSER
118e0 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41  T INTO t12(x) VA
118f0 4c 55 45 53 28 27 31 32 2e 30 27 29 22 20 20 7b  LUES('12.0')"  {
11900 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20  integer 12}.  4 
11910 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
11920 31 32 28 78 29 20 56 41 4c 55 45 53 28 27 34 65  12(x) VALUES('4e
11930 33 27 29 22 20 20 20 7b 69 6e 74 65 67 65 72 20  3')"   {integer 
11940 34 30 30 30 7d 0a 20 20 35 20 20 20 22 49 4e 53  4000}.  5   "INS
11950 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
11960 56 41 4c 55 45 53 28 27 2d 31 34 2e 30 27 29 22  VALUES('-14.0')"
11970 20 7b 69 6e 74 65 67 65 72 20 2d 31 34 7d 0a 7d   {integer -14}.}
11980 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
11990 20 52 2d 30 37 39 38 36 2d 34 36 30 32 34 20 49   R-07986-46024 I
119a0 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
119b0 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
119c0 6f 20 69 6e 73 65 72 74 20 61 0a 23 20 4e 55 4c  o insert a.# NUL
119d0 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
119e0 6f 77 69 64 20 6f 72 20 69 6e 74 65 67 65 72 20  owid or integer 
119f0 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
11a00 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 0a 23  mn, the system.#
11a10 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65   chooses an inte
11a20 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ger value to use
11a30 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 61 75   as the rowid au
11a40 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 23 0a 64  tomatically..#.d
11a50 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
11a60 2e 31 31 2e 30 20 7b 20 44 45 4c 45 54 45 20 46  .11.0 { DELETE F
11a70 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72 65  ROM t12 }.do_cre
11a80 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35  atetable_tests 5
11a90 2e 31 31 20 2d 71 75 65 72 79 20 7b 20 0a 20 20  .11 -query { .  
11aa0 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29  SELECT typeof(x)
11ab0 2c 20 78 20 46 52 4f 4d 20 74 31 32 20 57 48 45  , x FROM t12 WHE
11ac0 52 45 20 79 20 49 53 20 28 53 45 4c 45 43 54 20  RE y IS (SELECT 
11ad0 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 32 29  max(y) FROM t12)
11ae0 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
11af0 52 54 20 49 4e 54 4f 20 74 31 32 20 44 45 46 41  RT INTO t12 DEFA
11b00 55 4c 54 20 56 41 4c 55 45 53 22 20 20 20 20 20  ULT VALUES"     
11b10 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e 74 65             {inte
11b20 67 65 72 20 31 7d 0a 20 20 32 20 20 20 22 49 4e  ger 1}.  2   "IN
11b30 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79 29  SERT INTO t12(y)
11b40 20 20 20 56 41 4c 55 45 53 28 35 29 22 20 20 20     VALUES(5)"   
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e               {in
11b60 74 65 67 65 72 20 32 7d 0a 20 20 33 20 20 20 22  teger 2}.  3   "
11b70 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11b80 78 2c 79 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c  x,y) VALUES(NULL
11b90 2c 20 31 30 29 22 20 20 20 20 20 20 20 20 20 7b  , 10)"         {
11ba0 69 6e 74 65 67 65 72 20 33 7d 0a 20 20 34 20 20  integer 3}.  4  
11bb0 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11bc0 32 28 78 2c 79 29 20 53 45 4c 45 43 54 20 4e 55  2(x,y) SELECT NU
11bd0 4c 4c 2c 20 31 35 20 46 52 4f 4d 20 74 31 32 22  LL, 15 FROM t12"
11be0 20 0a 20 20 20 20 20 20 7b 69 6e 74 65 67 65 72   .      {integer
11bf0 20 34 20 69 6e 74 65 67 65 72 20 35 20 69 6e 74   4 integer 5 int
11c00 65 67 65 72 20 36 7d 0a 20 20 35 20 20 20 22 49  eger 6}.  5   "I
11c10 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79  NSERT INTO t12(y
11c20 29 20 53 45 4c 45 43 54 20 32 30 20 46 52 4f 4d  ) SELECT 20 FROM
11c30 20 74 31 32 20 4c 49 4d 49 54 20 33 22 0a 20 20   t12 LIMIT 3".  
11c40 20 20 20 20 7b 69 6e 74 65 67 65 72 20 37 20 69      {integer 7 i
11c50 6e 74 65 67 65 72 20 38 20 69 6e 74 65 67 65 72  nteger 8 integer
11c60 20 39 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65   9}.}..finish_te
11c70 73 74 0a                                         st.