/ Hex Artifact Content
Login

Artifact c7e67b49e6cf92473c8fb30ab26143e9e2128cf7:


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