/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact d4c6059d44dcd4b636de9aae322766062b471844:


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 38 34 34 38 2d 33 33 36 37 37 20  : R-18448-33677 
3210: 49 66 20 61 20 73 63 68 65 6d 61 2d 6e 61 6d 65  If a schema-name
3220: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
3230: 74 20 6d 75 73 74 20 62 65 0a 23 20 65 69 74 68  t must be.# eith
3240: 65 72 20 22 6d 61 69 6e 22 2c 20 22 74 65 6d 70  er "main", "temp
3250: 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f  ", or the name o
3260: 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
3270: 74 61 62 61 73 65 2e 0a 23 0a 23 20 45 56 49 44  tabase..#.# EVID
3280: 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 38 32 32  ENCE-OF: R-39822
3290: 2d 30 37 38 32 32 20 49 6e 20 74 68 69 73 20 63  -07822 In this c
32a0: 61 73 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c  ase the new tabl
32b0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 0a  e is created in.
32c0: 23 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  # the named data
32d0: 62 61 73 65 2e 0a 23 0a 23 20 20 20 54 65 73 74  base..#.#   Test
32e0: 20 63 61 73 65 73 20 31 2e 32 2e 2a 20 74 65 73   cases 1.2.* tes
32f0: 74 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 74  t the first of t
3300: 68 65 20 74 77 6f 20 72 65 71 75 69 72 65 6d 65  he two requireme
3310: 6e 74 73 20 61 62 6f 76 65 2e 20 54 68 65 0a 23  nts above. The.#
3320: 20 20 20 73 65 63 6f 6e 64 20 69 73 20 76 65 72     second is ver
3330: 69 66 69 65 64 20 62 79 20 63 61 73 65 73 20 31  ified by cases 1
3340: 2e 33 2e 2a 2e 0a 23 0a 64 6f 5f 63 72 65 61 74  .3.*..#.do_creat
3350: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 32  etable_tests 1.2
3360: 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20 75 6e  .1 -error {.  un
3370: 6b 6e 6f 77 6e 20 64 61 74 61 62 61 73 65 20 25  known database %
3380: 73 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52  s.} {.  1    "CR
3390: 45 41 54 45 20 54 41 42 4c 45 20 67 65 6f 72 67  EATE TABLE georg
33a0: 65 2e 74 31 28 61 2c 20 62 29 22 20 20 20 20 20  e.t1(a, b)"     
33b0: 20 20 20 20 20 20 20 67 65 6f 72 67 65 0a 20 20         george.  
33c0: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
33d0: 4c 45 20 5f 2e 74 31 28 61 2c 20 62 29 22 20 20  LE _.t1(a, b)"  
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
33f0: 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
3400: 65 5f 74 65 73 74 73 20 31 2e 32 2e 32 20 7b 0a  e_tests 1.2.2 {.
3410: 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54    1    "CREATE T
3420: 41 42 4c 45 20 6d 61 69 6e 2e 61 62 63 28 61 2c  ABLE main.abc(a,
3430: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
3440: 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41   {}.  2    "CREA
3450: 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e 68 65  TE TABLE temp.he
3460: 6c 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20 20 20  lloworld(x)"    
3470: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 7b       {}.  3    {
3480: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
3490: 61 2e 22 74 20 31 22 28 78 2c 20 79 29 7d 20 20  a."t 1"(x, y)}  
34a0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20           {}.  4 
34b0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
34c0: 20 61 75 78 62 2e 78 79 7a 28 7a 29 7d 20 20 20   auxb.xyz(z)}   
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
34e0: 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  }.drop_all_table
34f0: 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  s.do_createtable
3500: 5f 74 65 73 74 73 20 31 2e 33 20 2d 74 63 6c 71  _tests 1.3 -tclq
3510: 75 65 72 79 20 7b 0a 20 20 75 6e 73 65 74 20 2d  uery {.  unset -
3520: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58 0a 20 20 61  nocomplain X.  a
3530: 72 72 61 79 20 73 65 74 20 58 20 5b 74 61 62 6c  rray set X [tabl
3540: 65 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20 24  e_list].  list $
3550: 58 28 6d 61 69 6e 29 20 24 58 28 74 65 6d 70 29  X(main) $X(temp)
3560: 20 24 58 28 61 75 78 61 29 20 24 58 28 61 75 78   $X(auxa) $X(aux
3570: 62 29 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  b).} {.  1    "C
3580: 52 45 41 54 45 20 54 41 42 4c 45 20 6d 61 69 6e  REATE TABLE main
3590: 2e 61 62 63 28 61 2c 20 62 2c 20 63 29 22 20 20  .abc(a, b, c)"  
35a0: 7b 61 62 63 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20  {abc {} {} {}}. 
35b0: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
35c0: 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62  BLE main.t1(a, b
35d0: 2c 20 63 29 22 20 20 20 7b 7b 61 62 63 20 74 31  , c)"   {{abc t1
35e0: 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 33 20  } {} {} {}}.  3 
35f0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
3600: 20 74 65 6d 70 2e 74 6d 70 28 61 2c 20 62 2c 20   temp.tmp(a, b, 
3610: 63 29 22 20 20 7b 7b 61 62 63 20 74 31 7d 20 74  c)"  {{abc t1} t
3620: 6d 70 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20  mp {} {}}.  4   
3630: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   "CREATE TABLE a
3640: 75 78 62 2e 74 62 6c 28 78 2c 20 79 29 22 20 20  uxb.tbl(x, y)"  
3650: 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d 70     {{abc t1} tmp
3660: 20 7b 7d 20 74 62 6c 7d 0a 20 20 35 20 20 20 20   {} tbl}.  5    
3670: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
3680: 78 62 2e 74 31 28 6b 2c 20 76 29 22 20 20 20 20  xb.t1(k, v)"    
3690: 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d 70 20    {{abc t1} tmp 
36a0: 7b 7d 20 7b 74 31 20 74 62 6c 7d 7d 0a 20 20 36  {} {t1 tbl}}.  6
36b0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
36c0: 45 20 61 75 78 61 2e 6e 65 78 74 28 63 2c 20 64  E auxa.next(c, d
36d0: 29 22 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20  )"    {{abc t1} 
36e0: 74 6d 70 20 6e 65 78 74 20 7b 74 31 20 74 62 6c  tmp next {t1 tbl
36f0: 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  }}.}..# EVIDENCE
3700: 2d 4f 46 3a 20 52 2d 31 38 38 39 35 2d 32 37 33  -OF: R-18895-273
3710: 36 35 20 49 66 20 74 68 65 20 22 54 45 4d 50 22  65 If the "TEMP"
3720: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
3730: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 0a 23  keyword occurs.#
3740: 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 43 52   between the "CR
3750: 45 41 54 45 22 20 61 6e 64 20 22 54 41 42 4c 45  EATE" and "TABLE
3760: 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 74  " then the new t
3770: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
3780: 69 6e 20 74 68 65 0a 23 20 74 65 6d 70 20 64 61  in the.# temp da
3790: 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61  tabase..#.drop_a
37a0: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
37b0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
37c0: 2e 34 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20  .4 -tclquery {. 
37d0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
37e0: 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73 65 74  in X.  array set
37f0: 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a   X [table_list].
3800: 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20    list $X(main) 
3810: 24 58 28 74 65 6d 70 29 20 24 58 28 61 75 78 61  $X(temp) $X(auxa
3820: 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20  ) $X(auxb).} {. 
3830: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 45   1    "CREATE TE
3840: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  MP TABLE t1(a, b
3850: 29 22 20 20 20 20 20 20 7b 7b 7d 20 74 31 20 7b  )"      {{} t1 {
3860: 7d 20 7b 7d 7d 0a 20 20 32 20 20 20 20 22 43 52  } {}}.  2    "CR
3870: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
3880: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 22 20 7b  ABLE t2(a, b)" {
3890: 7b 7d 20 7b 74 31 20 74 32 7d 20 7b 7d 20 7b 7d  {} {t1 t2} {} {}
38a0: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
38b0: 4f 46 3a 20 52 2d 32 33 39 37 36 2d 34 33 33 32  OF: R-23976-4332
38c0: 39 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  9 It is an error
38d0: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
38e0: 20 61 0a 23 20 73 63 68 65 6d 61 2d 6e 61 6d 65   a.# schema-name
38f0: 20 61 6e 64 20 74 68 65 20 54 45 4d 50 20 6f 72   and the TEMP or
3900: 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f   TEMPORARY keywo
3910: 72 64 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 73  rd, unless the s
3920: 63 68 65 6d 61 2d 6e 61 6d 65 0a 23 20 69 73 20  chema-name.# is 
3930: 22 74 65 6d 70 22 2e 0a 23 0a 64 72 6f 70 5f 61  "temp"..#.drop_a
3940: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
3950: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
3960: 2e 35 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20  .5.1 -error {.  
3970: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
3980: 6e 61 6d 65 20 6d 75 73 74 20 62 65 20 75 6e 71  name must be unq
3990: 75 61 6c 69 66 69 65 64 0a 7d 20 7b 0a 20 20 31  ualified.} {.  1
39a0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
39b0: 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61   TABLE main.t1(a
39c0: 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7d 0a  , b)"        {}.
39d0: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
39e0: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 61  EMPORARY TABLE a
39f0: 75 78 61 2e 74 32 28 61 2c 20 62 29 22 20 20 20  uxa.t2(a, b)"   
3a00: 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54  {}.  3    "CREAT
3a10: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 61 75 78  E TEMP TABLE aux
3a20: 62 2e 74 33 28 61 2c 20 62 29 22 20 20 20 20 20  b.t3(a, b)"     
3a30: 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52     {}.  4    "CR
3a40: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
3a50: 41 42 4c 45 20 6d 61 69 6e 2e 78 78 78 28 78 29  ABLE main.xxx(x)
3a60: 22 20 20 20 20 20 7b 7d 0a 7d 0a 64 72 6f 70 5f  "     {}.}.drop_
3a70: 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72  all_tables.do_cr
3a80: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
3a90: 31 2e 35 2e 32 20 2d 74 63 6c 71 75 65 72 79 20  1.5.2 -tclquery 
3aa0: 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  {.  unset -nocom
3ab0: 70 6c 61 69 6e 20 58 0a 20 20 61 72 72 61 79 20  plain X.  array 
3ac0: 73 65 74 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73  set X [table_lis
3ad0: 74 5d 0a 20 20 6c 69 73 74 20 24 58 28 6d 61 69  t].  list $X(mai
3ae0: 6e 29 20 24 58 28 74 65 6d 70 29 20 24 58 28 61  n) $X(temp) $X(a
3af0: 75 78 61 29 20 24 58 28 61 75 78 62 29 0a 7d 20  uxa) $X(auxb).} 
3b00: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
3b10: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70   TEMP TABLE temp
3b20: 2e 74 31 28 61 2c 20 62 29 22 20 20 20 20 20 20  .t1(a, b)"      
3b30: 20 20 7b 7b 7d 20 74 31 20 7b 7d 20 7b 7d 7d 0a    {{} t1 {} {}}.
3b40: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
3b50: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 74  EMPORARY TABLE t
3b60: 65 6d 70 2e 74 32 28 61 2c 20 62 29 22 20 20 20  emp.t2(a, b)"   
3b70: 7b 7b 7d 20 7b 74 31 20 74 32 7d 20 7b 7d 20 7b  {{} {t1 t2} {} {
3b80: 7d 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54  }}.  3    "CREAT
3b90: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 54 45 4d  E TEMP TABLE TEM
3ba0: 50 2e 74 33 28 61 2c 20 62 29 22 20 20 20 20 20  P.t3(a, b)"     
3bb0: 20 20 20 7b 7b 7d 20 7b 74 31 20 74 32 20 74 33     {{} {t1 t2 t3
3bc0: 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20 20  } {} {}}.  4    
3bd0: 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  "CREATE TEMPORAR
3be0: 59 20 54 41 42 4c 45 20 54 45 4d 50 2e 78 78 78  Y TABLE TEMP.xxx
3bf0: 28 78 29 22 20 20 20 20 20 7b 7b 7d 20 7b 74 31  (x)"     {{} {t1
3c00: 20 74 32 20 74 33 20 78 78 78 7d 20 7b 7d 20 7b   t2 t3 xxx} {} {
3c10: 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  }}.}..# EVIDENCE
3c20: 2d 4f 46 3a 20 52 2d 33 31 39 39 37 2d 32 34 35  -OF: R-31997-245
3c30: 36 34 20 49 66 20 6e 6f 20 73 63 68 65 6d 61 20  64 If no schema 
3c40: 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65  name is specifie
3c50: 64 20 61 6e 64 20 74 68 65 20 54 45 4d 50 0a 23  d and the TEMP.#
3c60: 20 6b 65 79 77 6f 72 64 20 69 73 20 6e 6f 74 20   keyword is not 
3c70: 70 72 65 73 65 6e 74 20 74 68 65 6e 20 74 68 65  present then the
3c80: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
3c90: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
3ca0: 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61  tabase..#.drop_a
3cb0: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
3cc0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
3cd0: 2e 36 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20  .6 -tclquery {. 
3ce0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
3cf0: 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73 65 74  in X.  array set
3d00: 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a   X [table_list].
3d10: 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20    list $X(main) 
3d20: 24 58 28 74 65 6d 70 29 20 24 58 28 61 75 78 61  $X(temp) $X(auxa
3d30: 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20  ) $X(auxb).} {. 
3d40: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
3d50: 42 4c 45 20 74 31 28 61 2c 20 62 29 22 20 20 20  BLE t1(a, b)"   
3d60: 7b 74 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20  {t1 {} {} {}}.  
3d70: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
3d80: 4c 45 20 74 32 28 61 2c 20 62 29 22 20 20 20 7b  LE t2(a, b)"   {
3d90: 7b 74 31 20 74 32 7d 20 7b 7d 20 7b 7d 20 7b 7d  {t1 t2} {} {} {}
3da0: 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45  }.  3    "CREATE
3db0: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 29 22   TABLE t3(a, b)"
3dc0: 20 20 20 7b 7b 74 31 20 74 32 20 74 33 7d 20 7b     {{t1 t2 t3} {
3dd0: 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20 20  } {} {}}.  4    
3de0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 78  "CREATE TABLE xx
3df0: 78 28 78 29 22 20 20 20 20 20 7b 7b 74 31 20 74  x(x)"     {{t1 t
3e00: 32 20 74 33 20 78 78 78 7d 20 7b 7d 20 7b 7d 20  2 t3 xxx} {} {} 
3e10: 7b 7d 7d 0a 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f  {}}.}..drop_all_
3e20: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
3e30: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
3e40: 61 62 6c 65 2d 31 2e 37 2e 30 20 7b 0a 20 20 43  able-1.7.0 {.  C
3e50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
3e60: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
3e70: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29  NDEX i1 ON t1(x)
3e80: 3b 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20  ;.  CREATE VIEW 
3e90: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20   v1 AS SELECT * 
3ea0: 46 52 4f 4d 20 74 31 3b 0a 0a 20 20 43 52 45 41  FROM t1;..  CREA
3eb0: 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62  TE TABLE auxa.tb
3ec0: 6c 31 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41  l1(x, y);.  CREA
3ed0: 54 45 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64  TE INDEX auxa.id
3ee0: 78 31 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20  x1 ON tbl1(x);. 
3ef0: 20 43 52 45 41 54 45 20 56 49 45 57 20 61 75 78   CREATE VIEW aux
3f00: 61 2e 76 69 65 77 31 20 41 53 20 53 45 4c 45 43  a.view1 AS SELEC
3f10: 54 20 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d  T * FROM tbl1;.}
3f20: 20 7b 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d   {}..# EVIDENCE-
3f30: 4f 46 3a 20 52 2d 30 31 32 33 32 2d 35 34 38 33  OF: R-01232-5483
3f40: 38 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20  8 It is usually 
3f50: 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65  an error to atte
3f60: 6d 70 74 20 74 6f 20 63 72 65 61 74 65 0a 23 20  mpt to create.# 
3f70: 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61  a new table in a
3f80: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 61   database that a
3f90: 6c 72 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20  lready contains 
3fa0: 61 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f  a table, index o
3fb0: 72 20 76 69 65 77 0a 23 20 6f 66 20 74 68 65 20  r view.# of the 
3fc0: 73 61 6d 65 20 6e 61 6d 65 2e 0a 23 0a 23 20 20  same name..#.#  
3fd0: 20 54 65 73 74 20 63 61 73 65 73 20 31 2e 37 2e   Test cases 1.7.
3fe0: 31 2e 2a 20 76 65 72 69 66 79 20 74 68 61 74 20  1.* verify that 
3ff0: 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65  creating a table
4000: 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 77   in a database w
4010: 69 74 68 20 61 0a 23 20 20 20 74 61 62 6c 65 2f  ith a.#   table/
4020: 69 6e 64 65 78 2f 76 69 65 77 20 6f 66 20 74 68  index/view of th
4030: 65 20 73 61 6d 65 20 6e 61 6d 65 20 64 6f 65 73  e same name does
4040: 20 66 61 69 6c 2e 20 31 2e 37 2e 32 2e 2a 20 74   fail. 1.7.2.* t
4050: 65 73 74 73 20 74 68 61 74 20 63 72 65 61 74 69  ests that creati
4060: 6e 67 0a 23 20 20 20 61 20 74 61 62 6c 65 20 77  ng.#   a table w
4070: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
4080: 65 20 61 73 20 61 20 74 61 62 6c 65 2f 69 6e 64  e as a table/ind
4090: 65 78 2f 76 69 65 77 20 69 6e 20 61 20 64 69 66  ex/view in a dif
40a0: 66 65 72 65 6e 74 20 64 61 74 61 62 61 73 65 0a  ferent database.
40b0: 23 20 20 20 69 73 20 4f 6b 2e 0a 23 0a 64 6f 5f  #   is Ok..#.do_
40c0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
40d0: 73 20 31 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b  s 1.7.1 -error {
40e0: 20 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22   %s } {.  1    "
40f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4100: 61 2c 20 62 29 22 20 20 20 7b 7b 74 61 62 6c 65  a, b)"   {{table
4110: 20 74 31 20 61 6c 72 65 61 64 79 20 65 78 69 73   t1 already exis
4120: 74 73 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45  ts}}.  2    "CRE
4130: 41 54 45 20 54 41 42 4c 45 20 69 31 28 61 2c 20  ATE TABLE i1(a, 
4140: 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73  b)"   {{there is
4150: 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65   already an inde
4160: 78 20 6e 61 6d 65 64 20 69 31 7d 7d 0a 20 20 33  x named i1}}.  3
4170: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4180: 45 20 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7b  E v1(a, b)"   {{
4190: 74 61 62 6c 65 20 76 31 20 61 6c 72 65 61 64 79  table v1 already
41a0: 20 65 78 69 73 74 73 7d 7d 0a 20 20 34 20 20 20   exists}}.  4   
41b0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   "CREATE TABLE a
41c0: 75 78 61 2e 74 62 6c 31 28 61 2c 20 62 29 22 20  uxa.tbl1(a, b)" 
41d0: 20 20 7b 7b 74 61 62 6c 65 20 74 62 6c 31 20 61    {{table tbl1 a
41e0: 6c 72 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a  lready exists}}.
41f0: 20 20 35 20 20 20 20 22 43 52 45 41 54 45 20 54    5    "CREATE T
4200: 41 42 4c 45 20 61 75 78 61 2e 69 64 78 31 28 61  ABLE auxa.idx1(a
4210: 2c 20 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20  , b)"   {{there 
4220: 69 73 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e  is already an in
4230: 64 65 78 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d  dex named idx1}}
4240: 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20  .  6    "CREATE 
4250: 54 41 42 4c 45 20 61 75 78 61 2e 76 69 65 77 31  TABLE auxa.view1
4260: 28 61 2c 20 62 29 22 20 20 7b 7b 74 61 62 6c 65  (a, b)"  {{table
4270: 20 76 69 65 77 31 20 61 6c 72 65 61 64 79 20 65   view1 already e
4280: 78 69 73 74 73 7d 7d 0a 7d 0a 64 6f 5f 63 72 65  xists}}.}.do_cre
4290: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
42a0: 2e 37 2e 32 20 7b 0a 20 20 31 20 20 20 20 22 43  .7.2 {.  1    "C
42b0: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
42c0: 2e 74 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a  .t1(a, b)"   {}.
42d0: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
42e0: 41 42 4c 45 20 61 75 78 61 2e 69 31 28 61 2c 20  ABLE auxa.i1(a, 
42f0: 62 29 22 20 20 20 7b 7d 0a 20 20 33 20 20 20 20  b)"   {}.  3    
4300: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
4310: 78 61 2e 76 31 28 61 2c 20 62 29 22 20 20 20 7b  xa.v1(a, b)"   {
4320: 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  }.  4    "CREATE
4330: 20 54 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62   TABLE tbl1(a, b
4340: 29 22 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20  )"      {}.  5  
4350: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4360: 69 64 78 31 28 61 2c 20 62 29 22 20 20 20 20 20  idx1(a, b)"     
4370: 20 7b 7d 0a 20 20 36 20 20 20 20 22 43 52 45 41   {}.  6    "CREA
4380: 54 45 20 54 41 42 4c 45 20 76 69 65 77 31 28 61  TE TABLE view1(a
4390: 2c 20 62 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a  , b)"     {}.}..
43a0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
43b0: 2d 33 33 39 31 37 2d 32 34 30 38 36 20 48 6f 77  -33917-24086 How
43c0: 65 76 65 72 2c 20 69 66 20 74 68 65 20 22 49 46  ever, if the "IF
43d0: 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61   NOT EXISTS" cla
43e0: 75 73 65 20 69 73 0a 23 20 73 70 65 63 69 66 69  use is.# specifi
43f0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
4400: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
4410: 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 61 20 74  tatement and a t
4420: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 0a  able or view of.
4430: 23 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  # the same name 
4440: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20  already exists, 
4450: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
4460: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 70 6c 79 20   command simply 
4470: 68 61 73 20 6e 6f 0a 23 20 65 66 66 65 63 74 20  has no.# effect 
4480: 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65  (and no error me
4490: 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e 65  ssage is returne
44a0: 64 29 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  d)..#.drop_all_t
44b0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
44c0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
44d0: 62 6c 65 2d 31 2e 38 2e 30 20 7b 0a 20 20 43 52  ble-1.8.0 {.  CR
44e0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
44f0: 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e   y);.  CREATE IN
4500: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b  DEX i1 ON t1(x);
4510: 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20 20  .  CREATE VIEW  
4520: 76 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  v1 AS SELECT * F
4530: 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41 54 45  ROM t1;.  CREATE
4540: 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31   TABLE auxa.tbl1
4550: 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45  (x, y);.  CREATE
4560: 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31   INDEX auxa.idx1
4570: 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43   ON tbl1(x);.  C
4580: 52 45 41 54 45 20 56 49 45 57 20 61 75 78 61 2e  REATE VIEW auxa.
4590: 76 69 65 77 31 20 41 53 20 53 45 4c 45 43 54 20  view1 AS SELECT 
45a0: 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b  * FROM tbl1;.} {
45b0: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
45c0: 5f 74 65 73 74 73 20 31 2e 38 20 7b 0a 20 20 31  _tests 1.8 {.  1
45d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
45e0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
45f0: 74 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 20  t1(a, b)"       
4600: 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52     {}.  2    "CR
4610: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
4620: 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 74 62  T EXISTS auxa.tb
4630: 6c 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20  l1(a, b)"   {}. 
4640: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
4650: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
4660: 53 20 76 31 28 61 2c 20 62 29 22 20 20 20 20 20  S v1(a, b)"     
4670: 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22       {}.  4    "
4680: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
4690: 4e 4f 54 20 45 58 49 53 54 53 20 61 75 78 61 2e  NOT EXISTS auxa.
46a0: 76 69 65 77 31 28 61 2c 20 62 29 22 20 20 7b 7d  view1(a, b)"  {}
46b0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
46c0: 46 3a 20 52 2d 31 36 34 36 35 2d 34 30 30 37 38  F: R-16465-40078
46d0: 20 41 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69   An error is sti
46e0: 6c 6c 20 72 65 74 75 72 6e 65 64 20 69 66 20 74  ll returned if t
46f0: 68 65 20 74 61 62 6c 65 0a 23 20 63 61 6e 6e 6f  he table.# canno
4700: 74 20 62 65 20 63 72 65 61 74 65 64 20 62 65 63  t be created bec
4710: 61 75 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74  ause of an exist
4720: 69 6e 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20  ing index, even 
4730: 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54 0a 23  if the "IF NOT.#
4740: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
4750: 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 23 0a  is specified..#.
4760: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
4770: 65 73 74 73 20 31 2e 39 20 2d 65 72 72 6f 72 20  ests 1.9 -error 
4780: 7b 20 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20  { %s } {.  1    
4790: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
47a0: 20 4e 4f 54 20 45 58 49 53 54 53 20 69 31 28 61   NOT EXISTS i1(a
47b0: 2c 20 62 29 22 20 20 20 0a 20 20 20 20 20 20 20  , b)"   .       
47c0: 7b 7b 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  {{there is alrea
47d0: 64 79 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65  dy an index name
47e0: 64 20 69 31 7d 7d 0a 20 20 32 20 20 20 20 22 43  d i1}}.  2    "C
47f0: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
4800: 4f 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 69  OT EXISTS auxa.i
4810: 64 78 31 28 61 2c 20 62 29 22 20 20 20 0a 20 20  dx1(a, b)"   .  
4820: 20 20 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20       {{there is 
4830: 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78  already an index
4840: 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d 0a 7d 0a   named idx1}}.}.
4850: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4860: 52 2d 30 35 35 31 33 2d 33 33 38 31 39 20 49 74  R-05513-33819 It
4870: 20 69 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   is not an error
4880: 20 74 6f 20 63 72 65 61 74 65 20 61 20 74 61 62   to create a tab
4890: 6c 65 20 74 68 61 74 0a 23 20 68 61 73 20 74 68  le that.# has th
48a0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
48b0: 6e 20 65 78 69 73 74 69 6e 67 20 74 72 69 67 67  n existing trigg
48c0: 65 72 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  er..#.drop_all_t
48d0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
48e0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
48f0: 62 6c 65 2d 31 2e 31 30 2e 30 20 7b 0a 20 20 43  ble-1.10.0 {.  C
4900: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
4910: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , y);.  CREATE T
4920: 41 42 4c 45 20 61 75 78 62 2e 74 32 28 78 2c 20  ABLE auxb.t2(x, 
4930: 79 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52  y);..  CREATE TR
4940: 49 47 47 45 52 20 74 72 31 20 41 46 54 45 52 20  IGGER tr1 AFTER 
4950: 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47  INSERT ON t1 BEG
4960: 49 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 31 3b  IN.    SELECT 1;
4970: 0a 20 20 45 4e 44 3b 0a 20 20 43 52 45 41 54 45  .  END;.  CREATE
4980: 20 54 52 49 47 47 45 52 20 61 75 78 62 2e 74 72   TRIGGER auxb.tr
4990: 32 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  2 AFTER INSERT O
49a0: 4e 20 74 32 20 42 45 47 49 4e 0a 20 20 20 20 53  N t2 BEGIN.    S
49b0: 45 4c 45 43 54 20 31 3b 0a 20 20 45 4e 44 3b 0a  ELECT 1;.  END;.
49c0: 7d 20 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61  } {}.do_createta
49d0: 62 6c 65 5f 74 65 73 74 73 20 31 2e 31 30 20 7b  ble_tests 1.10 {
49e0: 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20  .  1    "CREATE 
49f0: 54 41 42 4c 45 20 74 72 31 28 61 2c 20 62 29 22  TABLE tr1(a, b)"
4a00: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32            {}.  2
4a10: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4a20: 45 20 74 72 32 28 61 2c 20 62 29 22 20 20 20 20  E tr2(a, b)"    
4a30: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
4a40: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
4a50: 78 62 2e 74 72 31 28 61 2c 20 62 29 22 20 20 20  xb.tr1(a, b)"   
4a60: 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45    {}.  4    "CRE
4a70: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 74  ATE TABLE auxb.t
4a80: 72 32 28 61 2c 20 62 29 22 20 20 20 20 20 7b 7d  r2(a, b)"     {}
4a90: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
4aa0: 46 3a 20 52 2d 32 32 32 38 33 2d 31 34 31 37 39  F: R-22283-14179
4ab0: 20 54 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f   Tables are remo
4ac0: 76 65 64 20 75 73 69 6e 67 20 74 68 65 20 44 52  ved using the DR
4ad0: 4f 50 20 54 41 42 4c 45 0a 23 20 73 74 61 74 65  OP TABLE.# state
4ae0: 6d 65 6e 74 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  ment..#.drop_all
4af0: 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73  _tables.do_execs
4b00: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
4b10: 74 61 62 6c 65 2d 31 2e 31 31 2e 30 20 7b 0a 20  table-1.11.0 {. 
4b20: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
4b30: 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  (a, b);.  CREATE
4b40: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b   TABLE t2(a, b);
4b50: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
4b60: 61 75 78 61 2e 74 33 28 61 2c 20 62 29 3b 0a 20  auxa.t3(a, b);. 
4b70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
4b80: 78 61 2e 74 34 28 61 2c 20 62 29 3b 0a 7d 20 7b  xa.t4(a, b);.} {
4b90: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
4ba0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
4bb0: 2d 31 2e 31 31 2e 31 2e 31 20 7b 0a 20 20 53 45  -1.11.1.1 {.  SE
4bc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
4bd0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4be0: 74 32 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  t2;.  SELECT * F
4bf0: 52 4f 4d 20 74 33 3b 0a 20 20 53 45 4c 45 43 54  ROM t3;.  SELECT
4c00: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 7d 20 7b 7d   * FROM t4;.} {}
4c10: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4c20: 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d    e_createtable-
4c30: 31 2e 31 31 2e 31 2e 32 20 7b 20 44 52 4f 50 20  1.11.1.2 { DROP 
4c40: 54 41 42 4c 45 20 74 31 20 7d 20 7b 7d 0a 64 6f  TABLE t1 } {}.do
4c50: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65  _catchsql_test e
4c60: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31  _createtable-1.1
4c70: 31 2e 31 2e 33 20 7b 20 0a 20 20 53 45 4c 45 43  1.1.3 { .  SELEC
4c80: 54 20 2a 20 46 52 4f 4d 20 74 31 20 0a 7d 20 7b  T * FROM t1 .} {
4c90: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
4ca0: 3a 20 74 31 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  : t1}}.do_execsq
4cb0: 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74 65  l_test  e_create
4cc0: 74 61 62 6c 65 2d 31 2e 31 31 2e 31 2e 34 20 7b  table-1.11.1.4 {
4cd0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 33 20 7d   DROP TABLE t3 }
4ce0: 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f   {}.do_catchsql_
4cf0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
4d00: 6c 65 2d 31 2e 31 31 2e 31 2e 35 20 7b 20 0a 20  le-1.11.1.5 { . 
4d10: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
4d20: 33 20 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68  3 .} {1 {no such
4d30: 20 74 61 62 6c 65 3a 20 74 33 7d 7d 0a 0a 64 6f   table: t3}}..do
4d40: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
4d50: 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31  createtable-1.11
4d60: 2e 32 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .2.1 {.  SELECT 
4d70: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
4d80: 5f 6d 61 73 74 65 72 3b 0a 20 20 53 45 4c 45 43  _master;.  SELEC
4d90: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 61 75 78 61  T name FROM auxa
4da0: 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a  .sqlite_master;.
4db0: 7d 20 7b 74 32 20 74 34 7d 0a 64 6f 5f 65 78 65  } {t2 t4}.do_exe
4dc0: 63 73 71 6c 5f 74 65 73 74 20 20 65 5f 63 72 65  csql_test  e_cre
4dd0: 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e  atetable-1.11.2.
4de0: 32 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  2 { DROP TABLE t
4df0: 32 20 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71  2 } {}.do_execsq
4e00: 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74 65  l_test  e_create
4e10: 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 33 20 7b  table-1.11.2.3 {
4e20: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 34 20 7d   DROP TABLE t4 }
4e30: 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   {}.do_execsql_t
4e40: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
4e50: 65 2d 31 2e 31 31 2e 32 2e 34 20 7b 0a 20 20 53  e-1.11.2.4 {.  S
4e60: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
4e70: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
4e80: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
4e90: 4d 20 61 75 78 61 2e 73 71 6c 69 74 65 5f 6d 61  M auxa.sqlite_ma
4ea0: 73 74 65 72 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d  ster;.} {}..#---
4eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
4f00: 73 65 73 20 65 5f 63 72 65 61 74 65 74 61 62 6c  ses e_createtabl
4f10: 65 2d 32 2e 2a 20 2d 20 74 65 73 74 20 73 74 61  e-2.* - test sta
4f20: 74 65 6d 65 6e 74 73 20 72 65 6c 61 74 65 64 20  tements related 
4f30: 74 6f 20 74 68 65 20 43 52 45 41 54 45 0a 23 20  to the CREATE.# 
4f40: 54 41 42 4c 45 20 41 53 20 2e 2e 2e 20 53 45 4c  TABLE AS ... SEL
4f50: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ECT statement..#
4f60: 0a 0a 23 20 54 68 72 65 65 20 54 63 6c 20 63 6f  ..# Three Tcl co
4f70: 6d 6d 61 6e 64 73 3a 0a 23 0a 23 20 20 20 73 65  mmands:.#.#   se
4f80: 6c 65 63 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  lect_column_name
4f90: 73 20 53 51 4c 0a 23 20 20 20 20 20 54 68 65 20  s SQL.#     The 
4fa0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
4fb0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
4fc0: 65 6e 74 2e 20 52 65 74 75 72 6e 20 61 20 6c 69  ent. Return a li
4fd0: 73 74 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 0a  st of the names.
4fe0: 23 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6c  #     of the col
4ff0: 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 65 73 75  umns of the resu
5000: 6c 74 2d 73 65 74 20 74 68 61 74 20 77 6f 75 6c  lt-set that woul
5010: 64 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79  d be returned by
5020: 20 65 78 65 63 75 74 69 6e 67 0a 23 20 20 20 20   executing.#    
5030: 20 74 68 65 20 53 45 4c 45 43 54 2e 0a 23 0a 23   the SELECT..#.#
5040: 20 20 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f     table_column_
5050: 6e 61 6d 65 73 20 54 42 4c 0a 23 20 20 20 20 20  names TBL.#     
5060: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  The argument mus
5070: 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d  t be a table nam
5080: 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  e. Return a list
5090: 20 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73   of column names
50a0: 2c 20 66 72 6f 6d 0a 23 20 20 20 20 20 6c 65 66  , from.#     lef
50b0: 74 20 74 6f 20 72 69 67 68 74 2c 20 66 6f 72 20  t to right, for 
50c0: 74 68 65 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20  the table..#.#  
50d0: 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65   table_column_de
50e0: 63 6c 74 79 70 65 73 20 54 42 4c 0a 23 20 20 20  cltypes TBL.#   
50f0: 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d    The argument m
5100: 75 73 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e  ust be a table n
5110: 61 6d 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69  ame. Return a li
5120: 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  st of column dec
5130: 6c 61 72 65 64 0a 23 20 20 20 20 20 74 79 70 65  lared.#     type
5140: 73 2c 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  s, from left to 
5150: 72 69 67 68 74 2c 20 66 6f 72 20 74 68 65 20 74  right, for the t
5160: 61 62 6c 65 2e 0a 23 0a 70 72 6f 63 20 73 63 69  able..#.proc sci
5170: 20 7b 73 65 6c 65 63 74 20 63 6d 64 7d 20 7b 0a   {select cmd} {.
5180: 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d    set res [list]
5190: 0a 20 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c  .  set STMT [sql
51a0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20  ite3_prepare_v2 
51b0: 64 62 20 24 73 65 6c 65 63 74 20 2d 31 20 64 75  db $select -1 du
51c0: 6d 6d 79 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  mmy].  for {set 
51d0: 69 20 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69  i 0} {$i < [sqli
51e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
51f0: 20 24 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69   $STMT]} {incr i
5200: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
5210: 72 65 73 20 5b 24 63 6d 64 20 24 53 54 4d 54 20  res [$cmd $STMT 
5220: 24 69 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  $i].  }.  sqlite
5230: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54  3_finalize $STMT
5240: 0a 20 20 73 65 74 20 72 65 73 0a 7d 0a 70 72 6f  .  set res.}.pro
5250: 63 20 74 63 69 20 7b 74 62 6c 20 63 6d 64 7d 20  c tci {tbl cmd} 
5260: 7b 20 73 63 69 20 22 53 45 4c 45 43 54 20 2a 20  { sci "SELECT * 
5270: 46 52 4f 4d 20 24 74 62 6c 22 20 24 63 6d 64 20  FROM $tbl" $cmd 
5280: 7d 0a 70 72 6f 63 20 73 65 6c 65 63 74 5f 63 6f  }.proc select_co
5290: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 7b 73  lumn_names    {s
52a0: 71 6c 7d 20 7b 20 73 63 69 20 24 73 71 6c 20 73  ql} { sci $sql s
52b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
52c0: 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65 5f  me }.proc table_
52d0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20  column_names    
52e0: 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20 24 74 62   {tbl} { tci $tb
52f0: 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  l sqlite3_column
5300: 5f 6e 61 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62  _name }.proc tab
5310: 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  le_column_declty
5320: 70 65 73 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20  pes {tbl} { tci 
5330: 24 74 62 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  $tbl sqlite3_col
5340: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 7d 0a 0a  umn_decltype }..
5350: 23 20 43 72 65 61 74 65 20 61 20 64 61 74 61 62  # Create a datab
5360: 61 73 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73  ase schema. This
5370: 20 73 63 68 65 6d 61 20 69 73 20 75 73 65 64 20   schema is used 
5380: 62 79 20 74 65 73 74 73 20 32 2e 31 2e 2a 20 74  by tests 2.1.* t
5390: 68 72 6f 75 67 68 20 32 2e 33 2e 2a 2e 0a 23 0a  hrough 2.3.*..#.
53a0: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
53b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
53c0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e  e_createtable-2.
53d0: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
53e0: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t1(a, b, c);.
53f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5400: 32 28 64 2c 20 65 2c 20 66 29 3b 0a 20 20 43 52  2(d, e, f);.  CR
5410: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 67 20  EATE TABLE t3(g 
5420: 42 49 47 49 4e 54 2c 20 68 20 56 41 52 43 48 41  BIGINT, h VARCHA
5430: 52 28 31 30 29 29 3b 0a 20 20 43 52 45 41 54 45  R(10));.  CREATE
5440: 20 54 41 42 4c 45 20 74 34 28 69 20 42 4c 4f 42   TABLE t4(i BLOB
5450: 2c 20 6a 20 41 4e 59 4f 4c 44 41 54 41 29 3b 0a  , j ANYOLDATA);.
5460: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5470: 35 28 6b 20 46 4c 4f 41 54 2c 20 6c 20 49 4e 54  5(k FLOAT, l INT
5480: 45 47 45 52 29 3b 0a 20 20 43 52 45 41 54 45 20  EGER);.  CREATE 
5490: 54 41 42 4c 45 20 74 36 28 6d 20 44 45 46 41 55  TABLE t6(m DEFAU
54a0: 4c 54 20 31 30 2c 20 6e 20 44 45 46 41 55 4c 54  LT 10, n DEFAULT
54b0: 20 35 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   5, PRIMARY KEY(
54c0: 6d 2c 20 6e 29 29 3b 0a 20 20 43 52 45 41 54 45  m, n));.  CREATE
54d0: 20 54 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45   TABLE t7(x INTE
54e0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 29  GER PRIMARY KEY)
54f0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
5500: 20 74 38 28 6f 20 43 4f 4c 4c 41 54 45 20 6e 6f   t8(o COLLATE no
5510: 63 61 73 65 20 44 45 46 41 55 4c 54 20 27 61 62  case DEFAULT 'ab
5520: 63 27 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  c');.  CREATE TA
5530: 42 4c 45 20 74 39 28 70 20 4e 4f 54 20 4e 55 4c  BLE t9(p NOT NUL
5540: 4c 2c 20 71 20 44 4f 55 42 4c 45 20 43 48 45 43  L, q DOUBLE CHEC
5550: 4b 20 28 71 21 3d 30 29 2c 20 72 20 53 54 52 49  K (q!=0), r STRI
5560: 4e 47 20 55 4e 49 51 55 45 29 3b 0a 7d 20 7b 7d  NG UNIQUE);.} {}
5570: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
5580: 20 52 2d 36 34 38 32 38 2d 35 39 35 36 38 20 54   R-64828-59568 T
5590: 68 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65  he table has the
55a0: 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20   same number of 
55b0: 63 6f 6c 75 6d 6e 73 20 61 73 0a 23 20 74 68 65  columns as.# the
55c0: 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
55d0: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
55e0: 74 65 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65  tement. The name
55f0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
5600: 69 73 0a 23 20 74 68 65 20 73 61 6d 65 20 61 73  is.# the same as
5610: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
5620: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63   corresponding c
5630: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73  olumn in the res
5640: 75 6c 74 20 73 65 74 20 6f 66 0a 23 20 74 68 65  ult set of.# the
5650: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
5660: 74 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  t..#.do_createta
5670: 62 6c 65 5f 74 65 73 74 73 20 32 2e 31 20 2d 74  ble_tests 2.1 -t
5680: 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c  clquery {.  tabl
5690: 65 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 78  e_column_names x
56a0: 31 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  1.} -repair {.  
56b0: 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
56c0: 54 41 42 4c 45 20 78 31 20 7d 0a 7d 20 7b 0a 20  TABLE x1 }.} {. 
56d0: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
56e0: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
56f0: 20 2a 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20   * FROM t1"     
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5710: 7b 61 20 62 20 63 7d 0a 20 20 32 20 20 20 20 22  {a b c}.  2    "
5720: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20  CREATE TABLE x1 
5730: 41 53 20 53 45 4c 45 43 54 20 63 2c 20 62 2c 20  AS SELECT c, b, 
5740: 61 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20  a FROM t1"      
5750: 20 20 20 20 20 20 20 20 20 7b 63 20 62 20 61 7d           {c b a}
5760: 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20  .  3    "CREATE 
5770: 54 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45  TABLE x1 AS SELE
5780: 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32  CT * FROM t1, t2
5790: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
57a0: 20 20 7b 61 20 62 20 63 20 64 20 65 20 66 7d 0a    {a b c d e f}.
57b0: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
57c0: 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43  ABLE x1 AS SELEC
57d0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
57e0: 74 31 22 20 20 20 20 20 20 20 20 20 20 20 20 20  t1"             
57f0: 20 7b 63 6f 75 6e 74 28 2a 29 7d 0a 20 20 35 20   {count(*)}.  5 
5800: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
5810: 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 63 6f   x1 AS SELECT co
5820: 75 6e 74 28 61 29 20 41 53 20 61 2c 20 6d 61 78  unt(a) AS a, max
5830: 28 62 29 20 46 52 4f 4d 20 74 31 22 20 7b 61 20  (b) FROM t1" {a 
5840: 6d 61 78 28 62 29 7d 0a 7d 0a 0a 23 20 45 56 49  max(b)}.}..# EVI
5850: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 37 31 31  DENCE-OF: R-3711
5860: 31 2d 32 32 38 35 35 20 54 68 65 20 64 65 63 6c  1-22855 The decl
5870: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
5880: 68 20 63 6f 6c 75 6d 6e 20 69 73 0a 23 20 64 65  h column is.# de
5890: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
58a0: 65 78 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e  expression affin
58b0: 69 74 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ity of the corre
58c0: 73 70 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73  sponding express
58d0: 69 6f 6e 0a 23 20 69 6e 20 74 68 65 20 72 65 73  ion.# in the res
58e0: 75 6c 74 20 73 65 74 20 6f 66 20 74 68 65 20 53  ult set of the S
58f0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c  ELECT statement,
5900: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 20 45 78 70   as follows: Exp
5910: 72 65 73 73 69 6f 6e 0a 23 20 41 66 66 69 6e 69  ression.# Affini
5920: 74 79 20 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72  ty Column Declar
5930: 65 64 20 54 79 70 65 20 54 45 58 54 20 22 54 45  ed Type TEXT "TE
5940: 58 54 22 20 4e 55 4d 45 52 49 43 20 22 4e 55 4d  XT" NUMERIC "NUM
5950: 22 20 49 4e 54 45 47 45 52 20 22 49 4e 54 22 0a  " INTEGER "INT".
5960: 23 20 52 45 41 4c 20 22 52 45 41 4c 22 20 4e 4f  # REAL "REAL" NO
5970: 4e 45 20 22 22 20 28 65 6d 70 74 79 20 73 74 72  NE "" (empty str
5980: 69 6e 67 29 0a 23 0a 64 6f 5f 63 72 65 61 74 65  ing).#.do_create
5990: 74 61 62 6c 65 5f 74 65 73 74 73 20 32 2e 32 20  table_tests 2.2 
59a0: 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61  -tclquery {.  ta
59b0: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  ble_column_declt
59c0: 79 70 65 73 20 78 31 0a 7d 20 2d 72 65 70 61 69  ypes x1.} -repai
59d0: 72 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  r {.  catchsql {
59e0: 20 44 52 4f 50 20 54 41 42 4c 45 20 78 31 20 7d   DROP TABLE x1 }
59f0: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
5a00: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5a10: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31  SELECT a FROM t1
5a20: 22 20 20 20 20 20 7b 22 22 7d 0a 20 20 32 20 20  "     {""}.  2  
5a30: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
5a40: 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  x1 AS SELECT * F
5a50: 52 4f 4d 20 74 33 22 20 20 20 20 20 7b 49 4e 54  ROM t3"     {INT
5a60: 20 54 45 58 54 7d 0a 20 20 33 20 20 20 20 22 43   TEXT}.  3    "C
5a70: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41  REATE TABLE x1 A
5a80: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
5a90: 74 34 22 20 20 20 20 20 7b 22 22 20 4e 55 4d 7d  t4"     {"" NUM}
5aa0: 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20  .  4    "CREATE 
5ab0: 54 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45  TABLE x1 AS SELE
5ac0: 43 54 20 2a 20 46 52 4f 4d 20 74 35 22 20 20 20  CT * FROM t5"   
5ad0: 20 20 7b 52 45 41 4c 20 49 4e 54 7d 0a 7d 0a 0a    {REAL INT}.}..
5ae0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
5af0: 2d 31 36 36 36 37 2d 30 39 37 37 32 20 41 20 74  -16667-09772 A t
5b00: 61 62 6c 65 20 63 72 65 61 74 65 64 20 75 73 69  able created usi
5b10: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
5b20: 41 53 20 68 61 73 0a 23 20 6e 6f 20 50 52 49 4d  AS has.# no PRIM
5b30: 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 20 63  ARY KEY and no c
5b40: 6f 6e 73 74 72 61 69 6e 74 73 20 6f 66 20 61 6e  onstraints of an
5b50: 79 20 6b 69 6e 64 2e 20 54 68 65 20 64 65 66 61  y kind. The defa
5b60: 75 6c 74 20 76 61 6c 75 65 20 6f 66 0a 23 20 65  ult value of.# e
5b70: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55  ach column is NU
5b80: 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  LL. The default 
5b90: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
5ba0: 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ce for each colu
5bb0: 6d 6e 20 6f 66 0a 23 20 74 68 65 20 6e 65 77 20  mn of.# the new 
5bc0: 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e  table is BINARY.
5bd0: 0a 23 0a 23 20 20 20 54 68 65 20 66 6f 6c 6c 6f  .#.#   The follo
5be0: 77 69 6e 67 20 74 65 73 74 73 20 63 72 65 61 74  wing tests creat
5bf0: 65 20 74 61 62 6c 65 73 20 62 61 73 65 64 20 6f  e tables based o
5c00: 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  n SELECT stateme
5c10: 6e 74 73 20 74 68 61 74 20 72 65 61 64 0a 23 20  nts that read.# 
5c20: 20 20 66 72 6f 6d 20 74 61 62 6c 65 73 20 74 68    from tables th
5c30: 61 74 20 68 61 76 65 20 70 72 69 6d 61 72 79 20  at have primary 
5c40: 6b 65 79 73 2c 20 63 6f 6e 73 74 72 61 69 6e 74  keys, constraint
5c50: 73 20 61 6e 64 20 65 78 70 6c 69 63 69 74 20 64  s and explicit d
5c60: 65 66 61 75 6c 74 20 0a 23 20 20 20 63 6f 6c 6c  efault .#   coll
5c70: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e  ation sequences.
5c80: 20 4e 6f 6e 65 20 6f 66 20 74 68 69 73 20 69 73   None of this is
5c90: 20 74 72 61 6e 73 66 65 72 65 64 20 74 6f 20 74   transfered to t
5ca0: 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
5cb0: 0a 23 20 20 20 74 68 65 20 6e 65 77 20 74 61 62  .#   the new tab
5cc0: 6c 65 20 61 73 20 73 74 6f 72 65 64 20 69 6e 20  le as stored in 
5cd0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
5ce0: 72 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 54  r table..#.#   T
5cf0: 65 73 74 73 20 32 2e 33 2e 32 2e 2a 20 73 68 6f  ests 2.3.2.* sho
5d00: 77 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75  w that the defau
5d10: 6c 74 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68  lt value of each
5d20: 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e   column is NULL.
5d30: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
5d40: 65 5f 74 65 73 74 73 20 32 2e 33 2e 31 20 2d 71  e_tests 2.3.1 -q
5d50: 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20  uery {.  SELECT 
5d60: 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  sql FROM sqlite_
5d70: 6d 61 73 74 65 72 20 4f 52 44 45 52 20 42 59 20  master ORDER BY 
5d80: 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54  rowid DESC LIMIT
5d90: 20 31 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43   1.} {.  1    "C
5da0: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41  REATE TABLE x1 A
5db0: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
5dc0: 74 36 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42  t6" {{CREATE TAB
5dd0: 4c 45 20 78 31 28 6d 2c 6e 29 7d 7d 0a 20 20 32  LE x1(m,n)}}.  2
5de0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
5df0: 45 20 78 32 20 41 53 20 53 45 4c 45 43 54 20 2a  E x2 AS SELECT *
5e00: 20 46 52 4f 4d 20 74 37 22 20 7b 7b 43 52 45 41   FROM t7" {{CREA
5e10: 54 45 20 54 41 42 4c 45 20 78 32 28 78 20 49 4e  TE TABLE x2(x IN
5e20: 54 29 7d 7d 0a 20 20 33 20 20 20 20 22 43 52 45  T)}}.  3    "CRE
5e30: 41 54 45 20 54 41 42 4c 45 20 78 33 20 41 53 20  ATE TABLE x3 AS 
5e40: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38  SELECT * FROM t8
5e50: 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  " {{CREATE TABLE
5e60: 20 78 33 28 6f 29 7d 7d 0a 20 20 34 20 20 20 20   x3(o)}}.  4    
5e70: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 34  "CREATE TABLE x4
5e80: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
5e90: 4d 20 74 39 22 20 7b 7b 43 52 45 41 54 45 20 54  M t9" {{CREATE T
5ea0: 41 42 4c 45 20 78 34 28 70 2c 71 20 52 45 41 4c  ABLE x4(p,q REAL
5eb0: 2c 72 20 4e 55 4d 29 7d 7d 0a 7d 0a 64 6f 5f 65  ,r NUM)}}.}.do_e
5ec0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
5ed0: 65 61 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e  eatetable-2.3.2.
5ee0: 31 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  1 {.  INSERT INT
5ef0: 4f 20 78 31 20 44 45 46 41 55 4c 54 20 56 41 4c  O x1 DEFAULT VAL
5f00: 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  UES;.  INSERT IN
5f10: 54 4f 20 78 32 20 44 45 46 41 55 4c 54 20 56 41  TO x2 DEFAULT VA
5f20: 4c 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49  LUES;.  INSERT I
5f30: 4e 54 4f 20 78 33 20 44 45 46 41 55 4c 54 20 56  NTO x3 DEFAULT V
5f40: 41 4c 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20  ALUES;.  INSERT 
5f50: 49 4e 54 4f 20 78 34 20 44 45 46 41 55 4c 54 20  INTO x4 DEFAULT 
5f60: 56 41 4c 55 45 53 3b 0a 7d 20 7b 7d 0a 64 62 20  VALUES;.} {}.db 
5f70: 6e 75 6c 6c 76 61 6c 75 65 20 6e 75 6c 6c 0a 64  nullvalue null.d
5f80: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
5f90: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 33  _createtable-2.3
5fa0: 2e 32 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20  .2.2 { SELECT * 
5fb0: 46 52 4f 4d 20 78 31 20 7d 20 7b 6e 75 6c 6c 20  FROM x1 } {null 
5fc0: 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  null}.do_execsql
5fd0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
5fe0: 62 6c 65 2d 32 2e 33 2e 32 2e 33 20 7b 20 53 45  ble-2.3.2.3 { SE
5ff0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 20 7d  LECT * FROM x2 }
6000: 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73   {null}.do_execs
6010: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6020: 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 34 20 7b 20  table-2.3.2.4 { 
6030: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 33  SELECT * FROM x3
6040: 20 7d 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65   } {null}.do_exe
6050: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
6060: 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 35 20  tetable-2.3.2.5 
6070: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
6080: 78 34 20 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20  x4 } {null null 
6090: 6e 75 6c 6c 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c  null}.db nullval
60a0: 75 65 20 7b 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f  ue {}..drop_all_
60b0: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
60c0: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
60d0: 61 62 6c 65 2d 32 2e 34 2e 30 20 7b 0a 20 20 43  able-2.4.0 {.  C
60e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
60f0: 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , y);.  INSERT I
6100: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69  NTO t1 VALUES('i
6110: 27 2c 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49  ',   'one');.  I
6120: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6130: 4c 55 45 53 28 27 69 69 27 2c 20 20 27 74 77 6f  LUES('ii',  'two
6140: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
6150: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69 69 69  O t1 VALUES('iii
6160: 27 2c 20 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b  ', 'three');.} {
6170: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
6180: 3a 20 52 2d 32 34 31 35 33 2d 32 38 33 35 32 20  : R-24153-28352 
6190: 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
61a0: 73 69 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c  sing CREATE TABL
61b0: 45 20 41 53 20 61 72 65 0a 23 20 69 6e 69 74 69  E AS are.# initi
61c0: 61 6c 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77  ally populated w
61d0: 69 74 68 20 74 68 65 20 72 6f 77 73 20 6f 66 20  ith the rows of 
61e0: 64 61 74 61 20 72 65 74 75 72 6e 65 64 20 62 79  data returned by
61f0: 20 74 68 65 20 53 45 4c 45 43 54 0a 23 20 73 74   the SELECT.# st
6200: 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20 45 56 49  atement..#.# EVI
6210: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 32 32  DENCE-OF: R-0822
6220: 34 2d 33 30 32 34 39 20 52 6f 77 73 20 61 72 65  4-30249 Rows are
6230: 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67   assigned contig
6240: 75 6f 75 73 6c 79 20 61 73 63 65 6e 64 69 6e 67  uously ascending
6250: 0a 23 20 72 6f 77 69 64 20 76 61 6c 75 65 73 2c  .# rowid values,
6260: 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 31   starting with 1
6270: 2c 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74  , in the order t
6280: 68 61 74 20 74 68 65 79 20 61 72 65 20 72 65 74  hat they are ret
6290: 75 72 6e 65 64 20 62 79 0a 23 20 74 68 65 20 53  urned by.# the S
62a0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
62b0: 0a 23 0a 23 20 20 20 45 61 63 68 20 74 65 73 74  .#.#   Each test
62c0: 20 63 61 73 65 20 62 65 6c 6f 77 20 69 73 20 73   case below is s
62d0: 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
62e0: 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20  name of a table 
62f0: 74 6f 20 63 72 65 61 74 65 0a 23 20 20 20 75 73  to create.#   us
6300: 69 6e 67 20 22 43 52 45 41 54 45 20 54 41 42 4c  ing "CREATE TABL
6310: 45 20 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20  E ... AS SELECT 
6320: 2e 2e 2e 22 20 61 6e 64 20 61 20 53 45 4c 45 43  ..." and a SELEC
6330: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 75  T statement to u
6340: 73 65 20 69 6e 0a 23 20 20 20 63 72 65 61 74 69  se in.#   creati
6350: 6e 67 20 69 74 2e 20 54 68 65 20 74 61 62 6c 65  ng it. The table
6360: 20 69 73 20 63 72 65 61 74 65 64 2e 20 0a 23 0a   is created. .#.
6370: 23 20 20 20 54 65 73 74 20 63 61 73 65 73 20 32  #   Test cases 2
6380: 2e 34 2e 2a 2e 31 20 63 68 65 63 6b 20 74 68 61  .4.*.1 check tha
6390: 74 20 61 66 74 65 72 20 69 74 20 68 61 73 20 62  t after it has b
63a0: 65 65 6e 20 63 72 65 61 74 65 64 2c 20 74 68 65  een created, the
63b0: 20 64 61 74 61 20 69 6e 20 74 68 65 0a 23 20 20   data in the.#  
63c0: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 73 61   table is the sa
63d0: 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 20 72  me as the data r
63e0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
63f0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
6400: 65 78 65 63 75 74 65 64 20 61 73 0a 23 20 20 20  executed as.#   
6410: 61 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  a standalone com
6420: 6d 61 6e 64 2c 20 76 65 72 69 66 79 69 6e 67 20  mand, verifying 
6430: 74 68 65 20 66 69 72 73 74 20 74 65 73 74 61 62  the first testab
6440: 6c 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  le statement abo
6450: 76 65 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63  ve..#.#   Test c
6460: 61 73 65 73 20 32 2e 34 2e 2a 2e 32 20 63 68 65  ases 2.4.*.2 che
6470: 63 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77 69  ck that the rowi
6480: 64 73 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65  ds were allocate
6490: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 23  d contiguously.#
64a0: 20 20 20 61 73 20 72 65 71 75 69 72 65 64 20 62     as required b
64b0: 79 20 74 68 65 20 73 65 63 6f 6e 64 20 74 65 73  y the second tes
64c0: 74 61 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 20  table statement 
64d0: 61 62 6f 76 65 2e 20 54 68 61 74 20 74 68 65 20  above. That the 
64e0: 72 6f 77 69 64 73 0a 23 20 20 20 66 72 6f 6d 20  rowids.#   from 
64f0: 74 68 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62  the contiguous b
6500: 6c 6f 63 6b 20 77 65 72 65 20 61 6c 6c 6f 63 61  lock were alloca
6510: 74 65 64 20 74 6f 20 72 6f 77 73 20 69 6e 20 74  ted to rows in t
6520: 68 65 20 6f 72 64 65 72 20 72 6f 77 73 20 61 72  he order rows ar
6530: 65 0a 23 20 20 20 72 65 74 75 72 6e 65 64 20 62  e.#   returned b
6540: 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  y the SELECT sta
6550: 74 65 6d 65 6e 74 20 69 73 20 76 65 72 69 66 69  tement is verifi
6560: 65 64 20 62 79 20 32 2e 34 2e 2a 2e 31 2e 0a 23  ed by 2.4.*.1..#
6570: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6580: 52 2d 33 32 33 36 35 2d 30 39 30 34 33 20 41 20  R-32365-09043 A 
6590: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
65a0: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
65b0: 74 65 6d 65 6e 74 0a 23 20 63 72 65 61 74 65 73  tement.# creates
65c0: 20 61 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61   and populates a
65d0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
65e0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73  based on the res
65f0: 75 6c 74 73 20 6f 66 20 61 0a 23 20 53 45 4c 45  ults of a.# SELE
6600: 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a  CT statement..#.
6610: 23 20 20 20 54 68 65 20 61 62 6f 76 65 20 69 73  #   The above is
6620: 20 61 6c 73 6f 20 63 6f 6e 73 69 64 65 72 65 64   also considered
6630: 20 74 6f 20 62 65 20 74 65 73 74 65 64 20 62 79   to be tested by
6640: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20   the following. 
6650: 49 74 20 69 73 0a 23 20 20 20 63 6c 65 61 72 20  It is.#   clear 
6660: 74 68 61 74 20 74 61 62 6c 65 73 20 61 72 65 20  that tables are 
6670: 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 61 6e  being created an
6680: 64 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 74  d populated by t
6690: 68 65 20 63 6f 6d 6d 61 6e 64 20 69 6e 0a 23 20  he command in.# 
66a0: 20 20 71 75 65 73 74 69 6f 6e 2e 0a 23 0a 66 6f    question..#.fo
66b0: 72 65 61 63 68 20 7b 74 6e 20 74 62 6c 20 73 65  reach {tn tbl se
66c0: 6c 65 63 74 7d 20 7b 0a 20 20 31 20 20 20 78 31  lect} {.  1   x1
66d0: 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f     "SELECT * FRO
66e0: 4d 20 74 31 22 0a 20 20 32 20 20 20 78 32 20 20  M t1".  2   x2  
66f0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
6700: 74 31 20 4f 52 44 45 52 20 42 59 20 78 20 44 45  t1 ORDER BY x DE
6710: 53 43 22 0a 20 20 33 20 20 20 78 33 20 20 20 22  SC".  3   x3   "
6720: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
6730: 20 4f 52 44 45 52 20 42 59 20 78 20 41 53 43 22   ORDER BY x ASC"
6740: 0a 7d 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20  .} {.  # Create 
6750: 74 68 65 20 74 61 62 6c 65 20 75 73 69 6e 67 20  the table using 
6760: 61 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  a "CREATE TABLE 
6770: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e  ... AS SELECT ..
6780: 2e 22 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 65 78  ." command..  ex
6790: 65 63 73 71 6c 20 5b 73 75 62 73 74 20 7b 43 52  ecsql [subst {CR
67a0: 45 41 54 45 20 54 41 42 4c 45 20 24 74 62 6c 20  EATE TABLE $tbl 
67b0: 41 53 20 24 73 65 6c 65 63 74 7d 5d 0a 0a 20 20  AS $select}]..  
67c0: 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65  # Check that the
67d0: 20 72 6f 77 73 20 69 6e 73 65 72 74 65 64 20 69   rows inserted i
67e0: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 2c 20 73  nto the table, s
67f0: 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69  orted in ascendi
6800: 6e 67 20 72 6f 77 69 64 0a 20 20 23 20 6f 72 64  ng rowid.  # ord
6810: 65 72 2c 20 6d 61 74 63 68 20 74 68 6f 73 65 20  er, match those 
6820: 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
6830: 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
6840: 20 73 74 61 74 65 6d 65 6e 74 20 61 73 20 61 0a   statement as a.
6850: 20 20 23 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63    # standalone c
6860: 6f 6d 6d 61 6e 64 2e 0a 20 20 64 6f 5f 65 78 65  ommand..  do_exe
6870: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
6880: 74 65 74 61 62 6c 65 2d 32 2e 34 2e 24 74 6e 2e  tetable-2.4.$tn.
6890: 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 53  1 [subst {.    S
68a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62  ELECT * FROM $tb
68b0: 6c 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  l ORDER BY rowid
68c0: 3b 0a 20 20 7d 5d 20 5b 65 78 65 63 73 71 6c 20  ;.  }] [execsql 
68d0: 24 73 65 6c 65 63 74 5d 0a 0a 20 20 23 20 43 68  $select]..  # Ch
68e0: 65 63 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77  eck that the row
68f0: 69 64 73 20 69 6e 20 74 68 65 20 6e 65 77 20 74  ids in the new t
6900: 61 62 6c 65 20 61 72 65 20 61 20 63 6f 6e 74 69  able are a conti
6910: 67 75 6f 75 73 20 62 6c 6f 63 6b 20 73 74 61 72  guous block star
6920: 74 69 6e 67 0a 20 20 23 20 77 69 74 68 20 72 6f  ting.  # with ro
6930: 77 69 64 20 31 2e 20 4e 6f 74 65 20 74 68 61 74  wid 1. Note that
6940: 20 74 68 69 73 20 77 69 6c 6c 20 66 61 69 6c 20   this will fail 
6950: 69 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  if SELECT statem
6960: 65 6e 74 20 24 73 65 6c 65 63 74 20 0a 20 20 23  ent $select .  #
6970: 20 72 65 74 75 72 6e 73 20 30 20 72 6f 77 73 20   returns 0 rows 
6980: 28 61 73 20 6d 61 78 28 72 6f 77 69 64 29 20 77  (as max(rowid) w
6990: 69 6c 6c 20 62 65 20 4e 55 4c 4c 29 2e 0a 20 20  ill be NULL)..  
69a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
69b0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e  e_createtable-2.
69c0: 34 2e 24 74 6e 2e 32 20 5b 73 75 62 73 74 20 7b  4.$tn.2 [subst {
69d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28  .    SELECT min(
69e0: 72 6f 77 69 64 29 2c 20 63 6f 75 6e 74 28 72 6f  rowid), count(ro
69f0: 77 69 64 29 3d 3d 6d 61 78 28 72 6f 77 69 64 29  wid)==max(rowid)
6a00: 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 7d 5d 20   FROM $tbl.  }] 
6a10: 7b 31 20 31 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  {1 1}.}..#------
6a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
6a70: 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 20 64 65 66  s for column def
6a80: 69 6e 74 69 6f 6e 73 20 69 6e 20 43 52 45 41 54  intions in CREAT
6a90: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
6aa0: 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 23  ts that do not.#
6ab0: 20 75 73 65 20 61 20 53 45 4c 45 43 54 20 73 74   use a SELECT st
6ac0: 61 74 65 6d 65 6e 74 2e 20 4e 6f 74 20 69 6e 63  atement. Not inc
6ad0: 6c 75 64 69 6e 67 20 64 61 74 61 20 63 6f 6e 73  luding data cons
6ae0: 74 72 61 69 6e 74 73 2e 20 49 6e 20 6f 74 68 65  traints. In othe
6af0: 72 20 77 6f 72 64 73 2c 0a 23 20 74 65 73 74 73  r words,.# tests
6b00: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
6b10: 63 61 74 69 6f 6e 20 6f 66 3a 0a 23 0a 23 20 20  cation of:.#.#  
6b20: 20 2a 20 64 65 63 6c 61 72 65 64 20 74 79 70 65   * declared type
6b30: 73 2c 0a 23 20 20 20 2a 20 64 65 66 61 75 6c 74  s,.#   * default
6b40: 20 76 61 6c 75 65 73 2c 20 61 6e 64 0a 23 20 20   values, and.#  
6b50: 20 2a 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61   * default colla
6b60: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 0a  tion sequences..
6b70: 23 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  #..# EVIDENCE-OF
6b80: 3a 20 52 2d 32 37 32 31 39 2d 34 39 30 35 37 20  : R-27219-49057 
6b90: 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20  Unlike most SQL 
6ba0: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
6bb0: 65 20 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 73  e does not.# res
6bc0: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
6bd0: 66 20 64 61 74 61 20 74 68 61 74 20 6d 61 79 20  f data that may 
6be0: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
6bf0: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
6c00: 6f 6e 0a 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73  on.# the columns
6c10: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 2e 0a   declared type..
6c20: 23 0a 23 20 20 20 54 65 73 74 20 74 68 69 73 20  #.#   Test this 
6c30: 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 66 65  by creating a fe
6c40: 77 20 74 61 62 6c 65 73 20 77 69 74 68 20 76 61  w tables with va
6c50: 72 69 65 64 20 64 65 63 6c 61 72 65 64 20 74 79  ried declared ty
6c60: 70 65 73 2c 20 74 68 65 6e 0a 23 20 20 20 69 6e  pes, then.#   in
6c70: 73 65 72 74 69 6e 67 20 76 61 72 69 6f 75 73 20  serting various 
6c80: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 20  different types 
6c90: 6f 66 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 74  of values into t
6ca0: 68 65 6d 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f  hem..#.drop_all_
6cb0: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
6cc0: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
6cd0: 61 62 6c 65 2d 33 2e 31 2e 30 20 7b 0a 20 20 43  able-3.1.0 {.  C
6ce0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
6cf0: 20 56 41 52 43 48 41 52 28 31 30 29 2c 20 79 20   VARCHAR(10), y 
6d00: 49 4e 54 45 47 45 52 2c 20 7a 20 44 4f 55 42 4c  INTEGER, z DOUBL
6d10: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
6d20: 4c 45 20 74 32 28 61 20 44 41 54 45 54 49 4d 45  LE t2(a DATETIME
6d30: 2c 20 62 20 53 54 52 49 4e 47 2c 20 63 20 52 45  , b STRING, c RE
6d40: 41 4c 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  AL);.  CREATE TA
6d50: 42 4c 45 20 74 33 28 6f 2c 20 74 29 3b 0a 7d 20  BLE t3(o, t);.} 
6d60: 7b 7d 0a 0a 23 20 76 61 6c 75 65 20 74 79 70 65  {}..# value type
6d70: 20 2d 3e 20 64 65 63 6c 61 72 65 64 20 63 6f 6c   -> declared col
6d80: 75 6d 6e 20 74 79 70 65 0a 23 20 2d 2d 2d 2d 2d  umn type.# -----
6d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
6db0: 69 6e 74 65 67 65 72 20 20 20 20 2d 3e 20 56 41  integer    -> VA
6dc0: 52 43 48 41 52 28 31 30 29 0a 23 20 73 74 72 69  RCHAR(10).# stri
6dd0: 6e 67 20 20 20 20 20 2d 3e 20 49 4e 54 45 47 45  ng     -> INTEGE
6de0: 52 0a 23 20 62 6c 6f 62 20 20 20 20 20 20 20 2d  R.# blob       -
6df0: 3e 20 44 4f 55 42 4c 45 0a 23 0a 64 6f 5f 65 78  > DOUBLE.#.do_ex
6e00: 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  ecsql_test e_cre
6e10: 61 74 65 74 61 62 6c 65 2d 33 2e 31 2e 31 20 7b  atetable-3.1.1 {
6e20: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
6e30: 31 20 56 41 4c 55 45 53 28 31 34 2c 20 27 71 75  1 VALUES(14, 'qu
6e40: 69 74 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74  ite a lengthy st
6e50: 72 69 6e 67 27 2c 20 58 27 35 35 35 36 35 35 27  ring', X'555655'
6e60: 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  );.  SELECT * FR
6e70: 4f 4d 20 74 31 3b 0a 7d 20 7b 31 34 20 7b 71 75  OM t1;.} {14 {qu
6e80: 69 74 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74  ite a lengthy st
6e90: 72 69 6e 67 7d 20 55 56 55 7d 0a 0a 23 20 73 74  ring} UVU}..# st
6ea0: 72 69 6e 67 20 20 20 20 20 2d 3e 20 44 41 54 45  ring     -> DATE
6eb0: 54 49 4d 45 0a 23 20 69 6e 74 65 67 65 72 20 20  TIME.# integer  
6ec0: 20 20 2d 3e 20 53 54 52 49 4e 47 0a 23 20 74 69    -> STRING.# ti
6ed0: 6d 65 20 20 20 20 20 20 20 2d 3e 20 52 45 41 4c  me       -> REAL
6ee0: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
6ef0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
6f00: 2d 33 2e 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52  -3.1.2 {.  INSER
6f10: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
6f20: 28 27 6e 6f 74 20 61 20 64 61 74 65 74 69 6d 65  ('not a datetime
6f30: 27 2c 20 31 33 2c 20 27 31 32 3a 34 31 3a 35 39  ', 13, '12:41:59
6f40: 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  ');.  SELECT * F
6f50: 52 4f 4d 20 74 32 3b 0a 7d 20 7b 7b 6e 6f 74 20  ROM t2;.} {{not 
6f60: 61 20 64 61 74 65 74 69 6d 65 7d 20 31 33 20 31  a datetime} 13 1
6f70: 32 3a 34 31 3a 35 39 7d 0a 0a 23 20 45 56 49 44  2:41:59}..# EVID
6f80: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 30 35 36 35  ENCE-OF: R-10565
6f90: 2d 30 39 35 35 37 20 54 68 65 20 64 65 63 6c 61  -09557 The decla
6fa0: 72 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f  red type of a co
6fb0: 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a  lumn is used to.
6fc0: 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  # determine the 
6fd0: 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
6fe0: 63 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 23 0a 23  column only..#.#
6ff0: 20 20 20 20 20 41 66 66 69 6e 69 74 69 65 73 20       Affinities 
7000: 61 72 65 20 74 65 73 74 65 64 20 69 6e 20 6d 6f  are tested in mo
7010: 72 65 20 64 65 74 61 69 6c 20 65 6c 73 65 77 68  re detail elsewh
7020: 65 72 65 20 28 73 65 65 20 64 6f 63 75 6d 65 6e  ere (see documen
7030: 74 0a 23 20 20 20 20 20 64 61 74 61 74 79 70 65  t.#     datatype
7040: 33 2e 68 74 6d 6c 29 2e 20 48 65 72 65 2c 20 6a  3.html). Here, j
7050: 75 73 74 20 74 65 73 74 20 74 68 61 74 20 61 66  ust test that af
7060: 66 69 6e 69 74 79 20 74 72 61 6e 73 66 6f 72 6d  finity transform
7070: 61 74 69 6f 6e 73 0a 23 20 20 20 20 20 63 6f 6e  ations.#     con
7080: 73 69 73 74 65 6e 74 20 77 69 74 68 20 74 68 65  sistent with the
7090: 20 65 78 70 65 63 74 65 64 20 61 66 66 69 6e 69   expected affini
70a0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
70b0: 6e 20 28 62 61 73 65 64 20 6f 6e 0a 23 20 20 20  n (based on.#   
70c0: 20 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74    the declared t
70d0: 79 70 65 29 20 61 70 70 65 61 72 20 74 6f 20 74  ype) appear to t
70e0: 61 6b 65 20 70 6c 61 63 65 2e 0a 23 0a 23 20 41  ake place..#.# A
70f0: 66 66 69 6e 69 74 69 65 73 20 6f 66 20 74 31 20  ffinities of t1 
7100: 28 74 65 73 74 20 63 61 73 65 73 20 33 2e 32 2e  (test cases 3.2.
7110: 31 2e 2a 29 3a 20 54 45 58 54 2c 20 49 4e 54 45  1.*): TEXT, INTE
7120: 47 45 52 2c 20 52 45 41 4c 0a 23 20 41 66 66 69  GER, REAL.# Affi
7130: 6e 69 74 69 65 73 20 6f 66 20 74 32 20 28 74 65  nities of t2 (te
7140: 73 74 20 63 61 73 65 73 20 33 2e 32 2e 32 2e 2a  st cases 3.2.2.*
7150: 29 3a 20 4e 55 4d 45 52 49 43 2c 20 4e 55 4d 45  ): NUMERIC, NUME
7160: 52 49 43 2c 20 52 45 41 4c 0a 23 20 41 66 66 69  RIC, REAL.# Affi
7170: 6e 69 74 69 65 73 20 6f 66 20 74 33 20 28 74 65  nities of t3 (te
7180: 73 74 20 63 61 73 65 73 20 33 2e 32 2e 33 2e 2a  st cases 3.2.3.*
7190: 29 3a 20 4e 4f 4e 45 2c 20 4e 4f 4e 45 0a 23 0a  ): NONE, NONE.#.
71a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
71b0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
71c0: 32 2e 30 20 7b 20 44 45 4c 45 54 45 20 46 52 4f  2.0 { DELETE FRO
71d0: 4d 20 74 31 3b 20 44 45 4c 45 54 45 20 46 52 4f  M t1; DELETE FRO
71e0: 4d 20 74 32 3b 20 7d 20 7b 7d 0a 0a 64 6f 5f 63  M t2; } {}..do_c
71f0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
7200: 20 33 2e 32 2e 31 20 2d 71 75 65 72 79 20 7b 0a   3.2.1 -query {.
7210: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78    SELECT quote(x
7220: 29 2c 20 71 75 6f 74 65 28 79 29 2c 20 71 75 6f  ), quote(y), quo
7230: 74 65 28 7a 29 20 46 52 4f 4d 20 74 31 20 4f 52  te(z) FROM t1 OR
7240: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
7250: 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20  C LIMIT 1;.} {. 
7260: 20 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   1   "INSERT INT
7270: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 35 2c 20  O t1 VALUES(15, 
7280: 20 20 27 32 32 2e 30 27 2c 20 27 31 34 27 29 22    '22.0', '14')"
7290: 20 20 20 7b 27 31 35 27 20 32 32 20 31 34 2e 30     {'15' 22 14.0
72a0: 7d 0a 20 20 32 20 20 20 22 49 4e 53 45 52 54 20  }.  2   "INSERT 
72b0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32  INTO t1 VALUES(2
72c0: 32 2e 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29  2.0, 22.0, 22.0)
72d0: 22 20 20 20 20 20 7b 27 32 32 2e 30 27 20 32 32  "     {'22.0' 22
72e0: 20 32 32 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61   22.0}.}.do_crea
72f0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e  tetable_tests 3.
7300: 32 2e 32 20 2d 71 75 65 72 79 20 7b 0a 20 20 53  2.2 -query {.  S
7310: 45 4c 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20  ELECT quote(a), 
7320: 71 75 6f 74 65 28 62 29 2c 20 71 75 6f 74 65 28  quote(b), quote(
7330: 63 29 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52  c) FROM t2 ORDER
7340: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c   BY rowid DESC L
7350: 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20  IMIT 1;.} {.  1 
7360: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
7370: 32 20 56 41 4c 55 45 53 28 31 35 2c 20 20 20 27  2 VALUES(15,   '
7380: 32 32 2e 30 27 2c 20 27 31 34 27 29 22 20 20 20  22.0', '14')"   
7390: 7b 31 35 20 20 20 32 32 20 20 31 34 2e 30 7d 0a  {15   22  14.0}.
73a0: 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e    2   "INSERT IN
73b0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32 2e  TO t2 VALUES(22.
73c0: 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20  0, 22.0, 22.0)" 
73d0: 20 20 20 20 7b 32 32 20 20 20 32 32 20 20 32 32      {22   22  22
73e0: 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74  .0}.}.do_createt
73f0: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33  able_tests 3.2.3
7400: 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45   -query {.  SELE
7410: 43 54 20 71 75 6f 74 65 28 6f 29 2c 20 71 75 6f  CT quote(o), quo
7420: 74 65 28 74 29 20 46 52 4f 4d 20 74 33 20 4f 52  te(t) FROM t3 OR
7430: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
7440: 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20  C LIMIT 1;.} {. 
7450: 20 31 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   1   "INSERT INT
7460: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 31 35 27  O t3 VALUES('15'
7470: 2c 20 27 32 32 2e 30 27 29 22 20 20 20 20 20 20  , '22.0')"      
7480: 20 20 20 7b 27 31 35 27 20 27 32 32 2e 30 27 7d     {'15' '22.0'}
7490: 0a 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49  .  2   "INSERT I
74a0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 35  NTO t3 VALUES(15
74b0: 2c 20 32 32 2e 30 29 22 20 20 20 20 20 20 20 20  , 22.0)"        
74c0: 20 20 20 20 20 7b 31 35 20 32 32 2e 30 7d 0a 7d       {15 22.0}.}
74d0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
74e0: 20 52 2d 34 32 33 31 36 2d 30 39 35 38 32 20 49   R-42316-09582 I
74f0: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78  f there is no ex
7500: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
7510: 6c 61 75 73 65 0a 23 20 61 74 74 61 63 68 65 64  lause.# attached
7520: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
7530: 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  inition, then th
7540: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
7550: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 23 20  of the column.# 
7560: 69 73 20 4e 55 4c 4c 2e 0a 23 0a 23 20 20 20 20  is NULL..#.#    
7570: 20 4e 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c   None of the col
7580: 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20 74 31  umns in table t1
7590: 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69   have an explici
75a0: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
75b0: 2e 0a 23 20 20 20 20 20 53 6f 20 74 65 73 74 69  ..#     So testi
75c0: 6e 67 20 74 68 61 74 20 74 68 65 20 64 65 66 61  ng that the defa
75d0: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  ult value of all
75e0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c   columns in tabl
75f0: 65 20 74 31 20 69 73 0a 23 20 20 20 20 20 4e 55  e t1 is.#     NU
7600: 4c 4c 20 73 65 72 76 65 73 20 74 6f 20 76 65 72  LL serves to ver
7610: 69 66 79 20 74 68 65 20 61 62 6f 76 65 2e 0a 23  ify the above..#
7620: 20 20 20 20 20 0a 64 6f 5f 63 72 65 61 74 65 74       .do_createt
7630: 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33  able_tests 3.2.3
7640: 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45   -query {.  SELE
7650: 43 54 20 71 75 6f 74 65 28 78 29 2c 20 71 75 6f  CT quote(x), quo
7660: 74 65 28 79 29 2c 20 71 75 6f 74 65 28 7a 29 20  te(y), quote(z) 
7670: 46 52 4f 4d 20 74 31 0a 7d 20 2d 72 65 70 61 69  FROM t1.} -repai
7680: 72 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  r {.  execsql { 
7690: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d  DELETE FROM t1 }
76a0: 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
76b0: 52 54 20 49 4e 54 4f 20 74 31 28 78 2c 20 79 29  RT INTO t1(x, y)
76c0: 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20 27   VALUES('abc', '
76d0: 78 79 7a 27 29 22 20 20 20 7b 27 61 62 63 27 20  xyz')"   {'abc' 
76e0: 27 78 79 7a 27 20 4e 55 4c 4c 7d 0a 20 20 32 20  'xyz' NULL}.  2 
76f0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
7700: 31 28 78 2c 20 7a 29 20 56 41 4c 55 45 53 28 27  1(x, z) VALUES('
7710: 61 62 63 27 2c 20 27 78 79 7a 27 29 22 20 20 20  abc', 'xyz')"   
7720: 7b 27 61 62 63 27 20 4e 55 4c 4c 20 27 78 79 7a  {'abc' NULL 'xyz
7730: 27 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54  '}.  3   "INSERT
7740: 20 49 4e 54 4f 20 74 31 20 44 45 46 41 55 4c 54   INTO t1 DEFAULT
7750: 20 56 41 4c 55 45 53 22 20 20 20 20 20 20 20 20   VALUES"        
7760: 20 20 20 20 20 20 20 7b 4e 55 4c 4c 20 4e 55 4c         {NULL NUL
7770: 4c 20 4e 55 4c 4c 7d 0a 7d 0a 0a 23 20 45 56 49  L NULL}.}..# EVI
7780: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 37 33 34  DENCE-OF: R-0734
7790: 33 2d 33 35 30 32 36 20 41 6e 20 65 78 70 6c 69  3-35026 An expli
77a0: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
77b0: 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 20 74  se may specify t
77c0: 68 61 74 0a 23 20 74 68 65 20 64 65 66 61 75 6c  hat.# the defaul
77d0: 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  t value is NULL,
77e0: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   a string consta
77f0: 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  nt, a blob const
7800: 61 6e 74 2c 20 61 0a 23 20 73 69 67 6e 65 64 2d  ant, a.# signed-
7810: 6e 75 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63  number, or any c
7820: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
7830: 6f 6e 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70  on enclosed in p
7840: 61 72 65 6e 74 68 65 73 65 73 2e 20 41 0a 23 20  arentheses. A.# 
7850: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6d 61  default value ma
7860: 79 20 61 6c 73 6f 20 62 65 20 6f 6e 65 20 6f 66  y also be one of
7870: 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
7880: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6b 65  e-independent ke
7890: 79 77 6f 72 64 73 0a 23 20 43 55 52 52 45 4e 54  ywords.# CURRENT
78a0: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
78b0: 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54  ATE or CURRENT_T
78c0: 49 4d 45 53 54 41 4d 50 2e 0a 23 0a 64 6f 5f 65  IMESTAMP..#.do_e
78d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
78e0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 33 2e 31 20  eatetable-3.3.1 
78f0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
7900: 20 74 34 28 0a 20 20 20 20 61 20 44 45 46 41 55   t4(.    a DEFAU
7910: 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 62 20 44  LT NULL,.    b D
7920: 45 46 41 55 4c 54 20 27 73 74 72 69 6e 67 20 63  EFAULT 'string c
7930: 6f 6e 73 74 61 6e 74 27 2c 0a 20 20 20 20 63 20  onstant',.    c 
7940: 44 45 46 41 55 4c 54 20 58 27 34 32 34 43 34 46  DEFAULT X'424C4F
7950: 34 32 27 2c 0a 20 20 20 20 64 20 44 45 46 41 55  42',.    d DEFAU
7960: 4c 54 20 31 2c 0a 20 20 20 20 65 20 44 45 46 41  LT 1,.    e DEFA
7970: 55 4c 54 20 2d 31 2c 0a 20 20 20 20 66 20 44 45  ULT -1,.    f DE
7980: 46 41 55 4c 54 20 33 2e 31 34 2c 0a 20 20 20 20  FAULT 3.14,.    
7990: 67 20 44 45 46 41 55 4c 54 20 2d 33 2e 31 34 2c  g DEFAULT -3.14,
79a0: 0a 20 20 20 20 68 20 44 45 46 41 55 4c 54 20 28  .    h DEFAULT (
79b0: 20 73 75 62 73 74 72 28 27 61 62 63 64 27 2c 20   substr('abcd', 
79c0: 30 2c 20 32 29 20 7c 7c 20 27 63 64 27 20 29 2c  0, 2) || 'cd' ),
79d0: 0a 20 20 20 20 69 20 44 45 46 41 55 4c 54 20 43  .    i DEFAULT C
79e0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 0a 20 20 20  URRENT_TIME,.   
79f0: 20 6a 20 44 45 46 41 55 4c 54 20 43 55 52 52 45   j DEFAULT CURRE
7a00: 4e 54 5f 44 41 54 45 2c 0a 20 20 20 20 6b 20 44  NT_DATE,.    k D
7a10: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
7a20: 49 4d 45 53 54 41 4d 50 0a 20 20 29 3b 0a 7d 20  IMESTAMP.  );.} 
7a30: 7b 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  {}..# EVIDENCE-O
7a40: 46 3a 20 52 2d 31 38 34 31 35 2d 32 37 37 37 36  F: R-18415-27776
7a50: 20 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   For the purpose
7a60: 73 20 6f 66 20 74 68 65 20 44 45 46 41 55 4c 54  s of the DEFAULT
7a70: 20 63 6c 61 75 73 65 2c 20 61 6e 0a 23 20 65 78   clause, an.# ex
7a80: 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
7a90: 69 64 65 72 65 64 20 63 6f 6e 73 74 61 6e 74 20  idered constant 
7aa0: 69 66 20 69 74 20 64 6f 65 73 20 63 6f 6e 74 61  if it does conta
7ab0: 69 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65 72 69  ins no sub-queri
7ac0: 65 73 2c 0a 23 20 63 6f 6c 75 6d 6e 20 6f 72 20  es,.# column or 
7ad0: 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  table references
7ae0: 2c 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  , bound paramete
7af0: 72 73 2c 20 6f 72 20 73 74 72 69 6e 67 20 6c 69  rs, or string li
7b00: 74 65 72 61 6c 73 0a 23 20 65 6e 63 6c 6f 73 65  terals.# enclose
7b10: 64 20 69 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74  d in double-quot
7b20: 65 73 20 69 6e 73 74 65 61 64 20 6f 66 20 73 69  es instead of si
7b30: 6e 67 6c 65 2d 71 75 6f 74 65 73 2e 0a 23 0a 64  ngle-quotes..#.d
7b40: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
7b50: 73 74 73 20 33 2e 34 2e 31 20 2d 65 72 72 6f 72  sts 3.4.1 -error
7b60: 20 7b 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c   {.  default val
7b70: 75 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 5b 78 5d  ue of column [x]
7b80: 20 69 73 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74   is not constant
7b90: 0a 7d 20 7b 0a 20 20 31 20 20 20 7b 43 52 45 41  .} {.  1   {CREA
7ba0: 54 45 20 54 41 42 4c 45 20 74 35 28 78 20 44 45  TE TABLE t5(x DE
7bb0: 46 41 55 4c 54 20 28 20 28 53 45 4c 45 43 54 20  FAULT ( (SELECT 
7bc0: 31 29 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20  1) ))}  {}.  2  
7bd0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
7be0: 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 22 61  5(x DEFAULT ( "a
7bf0: 62 63 22 20 29 29 7d 20 20 7b 7d 0a 20 20 33 20  bc" ))}  {}.  3 
7c00: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
7c10: 74 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 31  t5(x DEFAULT ( 1
7c20: 20 49 4e 20 28 53 45 4c 45 43 54 20 31 29 20 29   IN (SELECT 1) )
7c30: 29 7d 20 20 7b 7d 0a 20 20 34 20 20 20 7b 43 52  )}  {}.  4   {CR
7c40: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 78 20  EATE TABLE t5(x 
7c50: 44 45 46 41 55 4c 54 20 28 20 45 58 49 53 54 53  DEFAULT ( EXISTS
7c60: 20 28 53 45 4c 45 43 54 20 31 29 20 29 29 7d 20   (SELECT 1) ))} 
7c70: 20 7b 7d 0a 20 20 35 20 20 20 7b 43 52 45 41 54   {}.  5   {CREAT
7c80: 45 20 54 41 42 4c 45 20 74 35 28 78 20 44 45 46  E TABLE t5(x DEF
7c90: 41 55 4c 54 20 28 20 78 21 3d 3f 31 20 29 29 7d  AULT ( x!=?1 ))}
7ca0: 20 20 7b 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65    {}.}.do_create
7cb0: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 34 2e  table_tests 3.4.
7cc0: 32 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61  2 -repair {.  ca
7cd0: 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  tchsql { DROP TA
7ce0: 42 4c 45 20 74 35 20 7d 0a 7d 20 7b 0a 20 20 31  BLE t5 }.} {.  1
7cf0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
7d00: 20 74 35 28 78 20 44 45 46 41 55 4c 54 20 28 20   t5(x DEFAULT ( 
7d10: 27 61 62 63 27 20 29 29 7d 20 20 7b 7d 0a 20 20  'abc' ))}  {}.  
7d20: 32 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c  2   {CREATE TABL
7d30: 45 20 74 35 28 78 20 44 45 46 41 55 4c 54 20 28  E t5(x DEFAULT (
7d40: 20 31 20 49 4e 20 28 31 2c 20 32 2c 20 33 29 20   1 IN (1, 2, 3) 
7d50: 29 29 7d 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49  ))}  {}.}..# EVI
7d60: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 38 38 31  DENCE-OF: R-1881
7d70: 34 2d 32 33 35 30 31 20 45 61 63 68 20 74 69 6d  4-23501 Each tim
7d80: 65 20 61 20 72 6f 77 20 69 73 20 69 6e 73 65 72  e a row is inser
7d90: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61 62  ted into the tab
7da0: 6c 65 0a 23 20 62 79 20 61 6e 20 49 4e 53 45 52  le.# by an INSER
7db0: 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
7dc0: 20 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64   does not provid
7dd0: 65 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65  e explicit value
7de0: 73 20 66 6f 72 20 61 6c 6c 0a 23 20 74 61 62 6c  s for all.# tabl
7df0: 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61  e columns the va
7e00: 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20 74  lues stored in t
7e10: 68 65 20 6e 65 77 20 72 6f 77 20 61 72 65 20 64  he new row are d
7e20: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
7e30: 69 72 0a 23 20 64 65 66 61 75 6c 74 20 76 61 6c  ir.# default val
7e40: 75 65 73 0a 23 0a 23 20 20 20 20 20 56 65 72 69  ues.#.#     Veri
7e50: 66 79 20 74 68 69 73 20 77 69 74 68 20 73 6f 6d  fy this with som
7e60: 65 20 61 73 73 65 72 74 20 73 74 61 74 65 6d 65  e assert stateme
7e70: 6e 74 73 20 66 6f 72 20 77 68 69 63 68 20 61 6c  nts for which al
7e80: 6c 2c 20 73 6f 6d 65 20 61 6e 64 20 6e 6f 0a 23  l, some and no.#
7e90: 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 6c 61 63       columns lac
7ea0: 6b 20 65 78 70 6c 69 63 69 74 20 76 61 6c 75 65  k explicit value
7eb0: 73 2e 0a 23 0a 73 65 74 20 73 71 6c 69 74 65 5f  s..#.set sqlite_
7ec0: 63 75 72 72 65 6e 74 5f 74 69 6d 65 20 31 30 30  current_time 100
7ed0: 30 30 30 30 30 30 30 0a 64 6f 5f 63 72 65 61 74  0000000.do_creat
7ee0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 35  etable_tests 3.5
7ef0: 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45   -query {.  SELE
7f00: 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f  CT quote(a), quo
7f10: 74 65 28 62 29 2c 20 71 75 6f 74 65 28 63 29 2c  te(b), quote(c),
7f20: 20 71 75 6f 74 65 28 64 29 2c 20 71 75 6f 74 65   quote(d), quote
7f30: 28 65 29 2c 20 71 75 6f 74 65 28 66 29 2c 20 0a  (e), quote(f), .
7f40: 20 20 20 20 20 20 20 20 20 71 75 6f 74 65 28 67           quote(g
7f50: 29 2c 20 71 75 6f 74 65 28 68 29 2c 20 71 75 6f  ), quote(h), quo
7f60: 74 65 28 69 29 2c 20 71 75 6f 74 65 28 6a 29 2c  te(i), quote(j),
7f70: 20 71 75 6f 74 65 28 6b 29 0a 20 20 46 52 4f 4d   quote(k).  FROM
7f80: 20 74 34 20 4f 52 44 45 52 20 42 59 20 72 6f 77   t4 ORDER BY row
7f90: 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b  id DESC LIMIT 1;
7fa0: 0a 7d 20 7b 0a 20 20 31 20 22 49 4e 53 45 52 54  .} {.  1 "INSERT
7fb0: 20 49 4e 54 4f 20 74 34 20 44 45 46 41 55 4c 54   INTO t4 DEFAULT
7fc0: 20 56 41 4c 55 45 53 22 20 7b 0a 20 20 20 20 4e   VALUES" {.    N
7fd0: 55 4c 4c 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e  ULL {'string con
7fe0: 73 74 61 6e 74 27 7d 20 58 27 34 32 34 43 34 46  stant'} X'424C4F
7ff0: 34 32 27 20 31 20 2d 31 20 33 2e 31 34 20 2d 33  42' 1 -1 3.14 -3
8000: 2e 31 34 20 0a 20 20 20 20 27 61 63 64 27 20 27  .14 .    'acd' '
8010: 30 31 3a 34 36 3a 34 30 27 20 27 32 30 30 31 2d  01:46:40' '2001-
8020: 30 39 2d 30 39 27 20 7b 27 32 30 30 31 2d 30 39  09-09' {'2001-09
8030: 2d 30 39 20 30 31 3a 34 36 3a 34 30 27 7d 0a 20  -09 01:46:40'}. 
8040: 20 7d 0a 0a 20 20 32 20 22 49 4e 53 45 52 54 20   }..  2 "INSERT 
8050: 49 4e 54 4f 20 74 34 28 61 2c 20 62 2c 20 63 29  INTO t4(a, b, c)
8060: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
8070: 22 20 7b 0a 20 20 20 20 31 20 32 20 33 20 31 20  " {.    1 2 3 1 
8080: 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 27 61  -1 3.14 -3.14 'a
8090: 63 64 27 20 27 30 31 3a 34 36 3a 34 30 27 20 27  cd' '01:46:40' '
80a0: 32 30 30 31 2d 30 39 2d 30 39 27 20 7b 27 32 30  2001-09-09' {'20
80b0: 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34  01-09-09 01:46:4
80c0: 30 27 7d 0a 20 20 7d 0a 0a 20 20 33 20 22 49 4e  0'}.  }..  3 "IN
80d0: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 6b 2c 20  SERT INTO t4(k, 
80e0: 6a 2c 20 69 29 20 56 41 4c 55 45 53 28 31 2c 20  j, i) VALUES(1, 
80f0: 32 2c 20 33 29 22 20 7b 0a 20 20 20 20 4e 55 4c  2, 3)" {.    NUL
8100: 4c 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e 73 74  L {'string const
8110: 61 6e 74 27 7d 20 58 27 34 32 34 43 34 46 34 32  ant'} X'424C4F42
8120: 27 20 31 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31  ' 1 -1 3.14 -3.1
8130: 34 20 27 61 63 64 27 20 33 20 32 20 31 0a 20 20  4 'acd' 3 2 1.  
8140: 7d 0a 0a 20 20 34 20 22 49 4e 53 45 52 54 20 49  }..  4 "INSERT I
8150: 4e 54 4f 20 74 34 28 61 2c 62 2c 63 2c 64 2c 65  NTO t4(a,b,c,d,e
8160: 2c 66 2c 67 2c 68 2c 69 2c 6a 2c 6b 29 20 56 41  ,f,g,h,i,j,k) VA
8170: 4c 55 45 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36  LUES(1,2,3,4,5,6
8180: 2c 37 2c 38 2c 39 2c 31 30 2c 31 31 29 22 20 7b  ,7,8,9,10,11)" {
8190: 0a 20 20 20 20 31 20 32 20 33 20 34 20 35 20 36  .    1 2 3 4 5 6
81a0: 20 37 20 38 20 39 20 31 30 20 31 31 0a 20 20 7d   7 8 9 10 11.  }
81b0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
81c0: 46 3a 20 52 2d 31 32 35 37 32 2d 36 32 35 30 31  F: R-12572-62501
81d0: 20 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   If the default 
81e0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
81f0: 75 6d 6e 20 69 73 20 61 0a 23 20 63 6f 6e 73 74  umn is a.# const
8200: 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20  ant NULL, text, 
8210: 62 6c 6f 62 20 6f 72 20 73 69 67 6e 65 64 2d 6e  blob or signed-n
8220: 75 6d 62 65 72 20 76 61 6c 75 65 2c 20 74 68 65  umber value, the
8230: 6e 20 74 68 61 74 20 76 61 6c 75 65 20 69 73 0a  n that value is.
8240: 23 20 75 73 65 64 20 64 69 72 65 63 74 6c 79 20  # used directly 
8250: 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
8260: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
8270: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
8280: 33 2e 36 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  3.6.1 {.  CREATE
8290: 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 61   TABLE t5(.    a
82a0: 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 20   DEFAULT NULL,  
82b0: 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 27  .    b DEFAULT '
82c0: 74 65 78 74 20 76 61 6c 75 65 27 2c 20 20 0a 20  text value',  . 
82d0: 20 20 20 63 20 44 45 46 41 55 4c 54 20 58 27 34     c DEFAULT X'4
82e0: 32 34 43 34 46 34 32 27 2c 0a 20 20 20 20 64 20  24C4F42',.    d 
82f0: 44 45 46 41 55 4c 54 20 2d 34 35 36 37 38 2e 36  DEFAULT -45678.6
8300: 2c 0a 20 20 20 20 65 20 44 45 46 41 55 4c 54 20  ,.    e DEFAULT 
8310: 33 39 34 35 30 37 0a 20 20 29 3b 0a 7d 20 7b 7d  394507.  );.} {}
8320: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
8330: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
8340: 2e 36 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20  .6.2 {.  INSERT 
8350: 49 4e 54 4f 20 74 35 20 44 45 46 41 55 4c 54 20  INTO t5 DEFAULT 
8360: 56 41 4c 55 45 53 3b 0a 20 20 53 45 4c 45 43 54  VALUES;.  SELECT
8370: 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65   quote(a), quote
8380: 28 62 29 2c 20 71 75 6f 74 65 28 63 29 2c 20 71  (b), quote(c), q
8390: 75 6f 74 65 28 64 29 2c 20 71 75 6f 74 65 28 65  uote(d), quote(e
83a0: 29 20 46 52 4f 4d 20 74 35 3b 0a 7d 20 7b 4e 55  ) FROM t5;.} {NU
83b0: 4c 4c 20 7b 27 74 65 78 74 20 76 61 6c 75 65 27  LL {'text value'
83c0: 7d 20 58 27 34 32 34 43 34 46 34 32 27 20 2d 34  } X'424C4F42' -4
83d0: 35 36 37 38 2e 36 20 33 39 34 35 30 37 7d 0a 0a  5678.6 394507}..
83e0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
83f0: 2d 36 30 36 31 36 2d 35 30 32 35 31 20 49 66 20  -60616-50251 If 
8400: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
8410: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e of a column is
8420: 20 61 6e 0a 23 20 65 78 70 72 65 73 73 69 6f 6e   an.# expression
8430: 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c   in parentheses,
8440: 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65 73   then the expres
8450: 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65  sion is evaluate
8460: 64 20 6f 6e 63 65 20 66 6f 72 0a 23 20 65 61 63  d once for.# eac
8470: 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20 61  h row inserted a
8480: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 75  nd the results u
8490: 73 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72  sed in the new r
84a0: 6f 77 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63  ow..#.#   Test c
84b0: 61 73 65 20 33 2e 36 2e 34 20 64 65 6d 6f 6e 73  ase 3.6.4 demons
84c0: 74 72 61 74 65 73 20 74 68 61 74 20 74 68 65 20  trates that the 
84d0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
84e0: 61 6c 75 61 74 65 64 20 0a 23 20 20 20 73 65 70  aluated .#   sep
84f0: 61 72 61 74 65 6c 79 20 66 6f 72 20 65 61 63 68  arately for each
8500: 20 72 6f 77 20 69 66 20 74 68 65 20 49 4e 53 45   row if the INSE
8510: 52 54 20 69 73 20 61 6e 20 22 49 4e 53 45 52 54  RT is an "INSERT
8520: 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
8530: 20 2e 2e 2e 22 0a 23 20 20 20 63 6f 6d 6d 61 6e   ...".#   comman
8540: 64 2e 0a 23 0a 73 65 74 20 3a 3a 6e 65 78 74 69  d..#.set ::nexti
8550: 6e 74 20 30 0a 70 72 6f 63 20 6e 65 78 74 69 6e  nt 0.proc nextin
8560: 74 20 7b 7d 20 7b 20 69 6e 63 72 20 3a 3a 6e 65  t {} { incr ::ne
8570: 78 74 69 6e 74 20 7d 0a 64 62 20 66 75 6e 63 20  xtint }.db func 
8580: 6e 65 78 74 69 6e 74 20 6e 65 78 74 69 6e 74 0a  nextint nextint.
8590: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
85a0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
85b0: 2e 37 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  .7.1 {.  CREATE 
85c0: 54 41 42 4c 45 20 74 36 28 61 20 44 45 46 41 55  TABLE t6(a DEFAU
85d0: 4c 54 20 28 20 6e 65 78 74 69 6e 74 28 29 20 29  LT ( nextint() )
85e0: 2c 20 62 20 44 45 46 41 55 4c 54 20 28 20 6e 65  , b DEFAULT ( ne
85f0: 78 74 69 6e 74 28 29 20 29 29 3b 0a 7d 20 7b 7d  xtint() ));.} {}
8600: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
8610: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
8620: 2e 37 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20  .7.2 {.  INSERT 
8630: 49 4e 54 4f 20 74 36 20 44 45 46 41 55 4c 54 20  INTO t6 DEFAULT 
8640: 56 41 4c 55 45 53 3b 0a 20 20 53 45 4c 45 43 54  VALUES;.  SELECT
8650: 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65   quote(a), quote
8660: 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b  (b) FROM t6;.} {
8670: 31 20 32 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1 2}.do_execsql_
8680: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
8690: 6c 65 2d 33 2e 37 2e 33 20 7b 0a 20 20 49 4e 53  le-3.7.3 {.  INS
86a0: 45 52 54 20 49 4e 54 4f 20 74 36 28 61 29 20 56  ERT INTO t6(a) V
86b0: 41 4c 55 45 53 28 27 58 27 29 3b 0a 20 20 53 45  ALUES('X');.  SE
86c0: 4c 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71  LECT quote(a), q
86d0: 75 6f 74 65 28 62 29 20 46 52 4f 4d 20 74 36 3b  uote(b) FROM t6;
86e0: 0a 7d 20 7b 31 20 32 20 27 58 27 20 33 7d 0a 64  .} {1 2 'X' 3}.d
86f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
8700: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37  _createtable-3.7
8710: 2e 34 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .4 {.  INSERT IN
8720: 54 4f 20 74 36 28 61 29 20 53 45 4c 45 43 54 20  TO t6(a) SELECT 
8730: 61 20 46 52 4f 4d 20 74 36 3b 0a 20 20 53 45 4c  a FROM t6;.  SEL
8740: 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75  ECT quote(a), qu
8750: 6f 74 65 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a  ote(b) FROM t6;.
8760: 7d 20 7b 31 20 32 20 27 58 27 20 33 20 31 20 34  } {1 2 'X' 3 1 4
8770: 20 27 58 27 20 35 7d 0a 0a 23 20 45 56 49 44 45   'X' 5}..# EVIDE
8780: 4e 43 45 2d 4f 46 3a 20 52 2d 31 35 33 36 33 2d  NCE-OF: R-15363-
8790: 35 35 32 33 30 20 49 66 20 74 68 65 20 64 65 66  55230 If the def
87a0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20  ault value of a 
87b0: 63 6f 6c 75 6d 6e 20 69 73 0a 23 20 43 55 52 52  column is.# CURR
87c0: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
87d0: 54 5f 44 41 54 45 20 6f 72 20 43 55 52 52 45 4e  T_DATE or CURREN
87e0: 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65  T_TIMESTAMP, the
87f0: 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  n the value used
8800: 0a 23 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  .# in the new ro
8810: 77 20 69 73 20 61 20 74 65 78 74 20 72 65 70 72  w is a text repr
8820: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
8830: 65 20 63 75 72 72 65 6e 74 20 55 54 43 20 64 61  e current UTC da
8840: 74 65 20 61 6e 64 2f 6f 72 0a 23 20 74 69 6d 65  te and/or.# time
8850: 2e 0a 23 0a 23 20 20 20 20 20 54 68 69 73 20 69  ..#.#     This i
8860: 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 74  s difficult to t
8870: 65 73 74 20 6c 69 74 65 72 61 6c 6c 79 20 77 69  est literally wi
8880: 74 68 6f 75 74 20 6b 6e 6f 77 69 6e 67 20 77 68  thout knowing wh
8890: 61 74 20 74 69 6d 65 20 74 68 65 20 0a 23 20 20  at time the .#  
88a0: 20 20 20 75 73 65 72 20 77 69 6c 6c 20 72 75 6e     user will run
88b0: 20 74 68 65 20 74 65 73 74 73 2e 20 49 6e 73 74   the tests. Inst
88c0: 65 61 64 2c 20 77 65 20 74 65 73 74 20 74 68 61  ead, we test tha
88d0: 74 20 74 68 65 20 74 68 72 65 65 20 63 61 73 65  t the three case
88e0: 73 0a 23 20 20 20 20 20 61 62 6f 76 65 20 73 65  s.#     above se
88f0: 74 20 74 68 65 20 76 61 6c 75 65 20 74 6f 20 74  t the value to t
8900: 68 65 20 63 75 72 72 65 6e 74 20 64 61 74 65 20  he current date 
8910: 61 6e 64 2f 6f 72 20 74 69 6d 65 20 61 63 63 6f  and/or time acco
8920: 72 64 69 6e 67 20 74 6f 0a 23 20 20 20 20 20 74  rding to.#     t
8930: 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 28  he xCurrentTime(
8940: 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
8950: 56 46 53 2e 20 57 68 69 63 68 20 69 73 20 75 73  VFS. Which is us
8960: 75 61 6c 6c 79 20 74 68 65 20 73 61 6d 65 0a 23  ually the same.#
8970: 20 20 20 20 20 61 73 20 55 54 43 2e 20 49 6e 20       as UTC. In 
8980: 74 68 69 73 20 63 61 73 65 2c 20 68 6f 77 65 76  this case, howev
8990: 65 72 2c 20 77 65 20 69 6e 73 74 72 75 6d 65 6e  er, we instrumen
89a0: 74 20 69 74 20 74 6f 20 61 6c 77 61 79 73 20 72  t it to always r
89b0: 65 74 75 72 6e 0a 23 20 20 20 20 20 61 20 74 69  eturn.#     a ti
89c0: 6d 65 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  me equivalent to
89d0: 20 22 32 30 30 31 2d 30 39 2d 30 39 20 30 31 3a   "2001-09-09 01:
89e0: 34 36 3a 34 30 20 55 54 43 22 2e 0a 23 0a 73 65  46:40 UTC"..#.se
89f0: 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74  t sqlite_current
8a00: 5f 74 69 6d 65 20 31 30 30 30 30 30 30 30 30 30  _time 1000000000
8a10: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
8a20: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
8a30: 2e 38 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  .8.1 {.  CREATE 
8a40: 54 41 42 4c 45 20 74 37 28 0a 20 20 20 20 61 20  TABLE t7(.    a 
8a50: 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f  DEFAULT CURRENT_
8a60: 54 49 4d 45 2c 20 0a 20 20 20 20 62 20 44 45 46  TIME, .    b DEF
8a70: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54  AULT CURRENT_DAT
8a80: 45 2c 20 0a 20 20 20 20 63 20 44 45 46 41 55 4c  E, .    c DEFAUL
8a90: 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  T CURRENT_TIMEST
8aa0: 41 4d 50 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f  AMP.  );.} {}.do
8ab0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
8ac0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e  createtable-3.8.
8ad0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
8ae0: 4f 20 74 37 20 44 45 46 41 55 4c 54 20 56 41 4c  O t7 DEFAULT VAL
8af0: 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75  UES;.  SELECT qu
8b00: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
8b10: 2c 20 71 75 6f 74 65 28 63 29 20 46 52 4f 4d 20  , quote(c) FROM 
8b20: 74 37 3b 0a 7d 20 7b 27 30 31 3a 34 36 3a 34 30  t7;.} {'01:46:40
8b30: 27 20 27 32 30 30 31 2d 30 39 2d 30 39 27 20 7b  ' '2001-09-09' {
8b40: 27 32 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34  '2001-09-09 01:4
8b50: 36 3a 34 30 27 7d 7d 0a 0a 0a 23 20 45 56 49 44  6:40'}}...# EVID
8b60: 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 32 33 32 37  ENCE-OF: R-62327
8b70: 2d 35 33 38 34 33 20 46 6f 72 20 43 55 52 52 45  -53843 For CURRE
8b80: 4e 54 5f 54 49 4d 45 2c 20 74 68 65 20 66 6f 72  NT_TIME, the for
8b90: 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  mat of the value
8ba0: 0a 23 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22  .# is "HH:MM:SS"
8bb0: 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..#.# EVIDENCE-O
8bc0: 46 3a 20 52 2d 30 33 37 37 35 2d 34 33 34 37 31  F: R-03775-43471
8bd0: 20 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54   For CURRENT_DAT
8be0: 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e  E, "YYYY-MM-DD".
8bf0: 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .#.# EVIDENCE-OF
8c00: 3a 20 52 2d 30 37 36 37 37 2d 34 34 39 32 36 20  : R-07677-44926 
8c10: 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 43  The format for C
8c20: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
8c30: 20 69 73 0a 23 20 22 59 59 59 59 2d 4d 4d 2d 44   is.# "YYYY-MM-D
8c40: 44 20 48 48 3a 4d 4d 3a 53 53 22 2e 0a 23 0a 23  D HH:MM:SS"..#.#
8c50: 20 20 20 20 20 54 68 65 20 74 68 72 65 65 20 61       The three a
8c60: 62 6f 76 65 20 61 72 65 20 64 65 6d 6f 6e 73 74  bove are demonst
8c70: 72 61 74 65 64 20 62 79 20 74 65 73 74 73 20 31  rated by tests 1
8c80: 2c 20 32 20 61 6e 64 20 33 20 62 65 6c 6f 77 2e  , 2 and 3 below.
8c90: 20 0a 23 20 20 20 20 20 52 65 73 70 65 63 74 69   .#     Respecti
8ca0: 76 65 6c 79 2e 0a 23 0a 64 6f 5f 63 72 65 61 74  vely..#.do_creat
8cb0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 38  etable_tests 3.8
8cc0: 2e 33 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45  .3 -query {.  SE
8cd0: 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f  LECT a, b, c FRO
8ce0: 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 72 6f  M t7 ORDER BY ro
8cf0: 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31  wid DESC LIMIT 1
8d00: 3b 0a 7d 20 7b 0a 20 20 31 20 22 49 4e 53 45 52  ;.} {.  1 "INSER
8d10: 54 20 49 4e 54 4f 20 74 37 28 62 2c 20 63 29 20  T INTO t7(b, c) 
8d20: 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29  VALUES('x', 'y')
8d30: 22 20 7b 30 31 3a 34 36 3a 34 30 20 78 20 79 7d  " {01:46:40 x y}
8d40: 0a 20 20 32 20 22 49 4e 53 45 52 54 20 49 4e 54  .  2 "INSERT INT
8d50: 4f 20 74 37 28 63 2c 20 61 29 20 56 41 4c 55 45  O t7(c, a) VALUE
8d60: 53 28 27 78 27 2c 20 27 79 27 29 22 20 7b 79 20  S('x', 'y')" {y 
8d70: 32 30 30 31 2d 30 39 2d 30 39 20 78 7d 0a 20 20  2001-09-09 x}.  
8d80: 33 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  3 "INSERT INTO t
8d90: 37 28 61 2c 20 62 29 20 56 41 4c 55 45 53 28 27  7(a, b) VALUES('
8da0: 78 27 2c 20 27 79 27 29 22 20 7b 78 20 79 20 7b  x', 'y')" {x y {
8db0: 32 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36  2001-09-09 01:46
8dc0: 3a 34 30 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  :40}}.}..# EVIDE
8dd0: 4e 43 45 2d 4f 46 3a 20 52 2d 35 35 30 36 31 2d  NCE-OF: R-55061-
8de0: 34 37 37 35 34 20 54 68 65 20 43 4f 4c 4c 41 54  47754 The COLLAT
8df0: 45 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  E clause specifi
8e00: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  es the name of a
8e10: 0a 23 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  .# collating seq
8e20: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 61 73 20  uence to use as 
8e30: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
8e40: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
8e50: 6f 72 20 74 68 65 0a 23 20 63 6f 6c 75 6d 6e 2e  or the.# column.
8e60: 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .#.# EVIDENCE-OF
8e70: 3a 20 52 2d 34 30 32 37 35 2d 35 34 33 36 33 20  : R-40275-54363 
8e80: 49 66 20 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c  If no COLLATE cl
8e90: 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65  ause is specifie
8ea0: 64 2c 20 74 68 65 0a 23 20 64 65 66 61 75 6c 74  d, the.# default
8eb0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
8ec0: 6e 63 65 20 69 73 20 42 49 4e 41 52 59 2e 0a 23  nce is BINARY..#
8ed0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
8ee0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
8ef0: 2d 39 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  -9.1 {.  CREATE 
8f00: 54 41 42 4c 45 20 74 38 28 61 20 43 4f 4c 4c 41  TABLE t8(a COLLA
8f10: 54 45 20 6e 6f 63 61 73 65 2c 20 62 20 43 4f 4c  TE nocase, b COL
8f20: 4c 41 54 45 20 72 74 72 69 6d 2c 20 63 20 43 4f  LATE rtrim, c CO
8f30: 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c 20 64 29  LLATE binary, d)
8f40: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
8f50: 74 38 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c  t8 VALUES('abc',
8f60: 20 20 20 27 61 62 63 27 2c 20 20 20 27 61 62 63     'abc',   'abc
8f70: 27 2c 20 20 20 27 61 62 63 27 29 3b 0a 20 20 49  ',   'abc');.  I
8f80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41  NSERT INTO t8 VA
8f90: 4c 55 45 53 28 27 61 62 63 20 20 27 2c 20 27 61  LUES('abc  ', 'a
8fa0: 62 63 20 20 27 2c 20 27 61 62 63 20 20 27 2c 20  bc  ', 'abc  ', 
8fb0: 27 61 62 63 20 20 27 29 3b 0a 20 20 49 4e 53 45  'abc  ');.  INSE
8fc0: 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45  RT INTO t8 VALUE
8fd0: 53 28 27 41 42 43 20 20 27 2c 20 27 41 42 43 20  S('ABC  ', 'ABC 
8fe0: 20 27 2c 20 27 41 42 43 20 20 27 2c 20 27 41 42   ', 'ABC  ', 'AB
8ff0: 43 20 20 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  C  ');.  INSERT 
9000: 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27  INTO t8 VALUES('
9010: 41 42 43 27 2c 20 20 20 27 41 42 43 27 2c 20 20  ABC',   'ABC',  
9020: 20 27 41 42 43 27 2c 20 20 20 27 41 42 43 27 29   'ABC',   'ABC')
9030: 3b 0a 7d 20 7b 7d 0a 64 6f 5f 63 72 65 61 74 65  ;.} {}.do_create
9040: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 39 20  table_tests 3.9 
9050: 7b 0a 20 20 32 20 20 20 20 22 53 45 4c 45 43 54  {.  2    "SELECT
9060: 20 61 20 46 52 4f 4d 20 74 38 20 4f 52 44 45 52   a FROM t8 ORDER
9070: 20 42 59 20 61 2c 20 72 6f 77 69 64 22 20 20 20   BY a, rowid"   
9080: 20 7b 61 62 63 20 41 42 43 20 7b 61 62 63 20 20   {abc ABC {abc  
9090: 7d 20 7b 41 42 43 20 20 7d 7d 0a 20 20 33 20 20  } {ABC  }}.  3  
90a0: 20 20 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d    "SELECT b FROM
90b0: 20 74 38 20 4f 52 44 45 52 20 42 59 20 62 2c 20   t8 ORDER BY b, 
90c0: 72 6f 77 69 64 22 20 20 20 20 7b 7b 41 42 43 20  rowid"    {{ABC 
90d0: 20 7d 20 41 42 43 20 61 62 63 20 7b 61 62 63 20   } ABC abc {abc 
90e0: 20 7d 7d 0a 20 20 34 20 20 20 20 22 53 45 4c 45   }}.  4    "SELE
90f0: 43 54 20 63 20 46 52 4f 4d 20 74 38 20 4f 52 44  CT c FROM t8 ORD
9100: 45 52 20 42 59 20 63 2c 20 72 6f 77 69 64 22 20  ER BY c, rowid" 
9110: 20 20 20 7b 41 42 43 20 7b 41 42 43 20 20 7d 20     {ABC {ABC  } 
9120: 61 62 63 20 7b 61 62 63 20 20 7d 7d 0a 20 20 35  abc {abc  }}.  5
9130: 20 20 20 20 22 53 45 4c 45 43 54 20 64 20 46 52      "SELECT d FR
9140: 4f 4d 20 74 38 20 4f 52 44 45 52 20 42 59 20 64  OM t8 ORDER BY d
9150: 2c 20 72 6f 77 69 64 22 20 20 20 20 7b 41 42 43  , rowid"    {ABC
9160: 20 7b 41 42 43 20 20 7d 20 61 62 63 20 7b 61 62   {ABC  } abc {ab
9170: 63 20 20 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  c  }}.}..# EVIDE
9180: 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 34 37 33 2d  NCE-OF: R-25473-
9190: 32 30 35 35 37 20 54 68 65 20 6e 75 6d 62 65 72  20557 The number
91a0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
91b0: 20 74 61 62 6c 65 20 69 73 20 6c 69 6d 69 74 65   table is limite
91c0: 64 0a 23 20 62 79 20 74 68 65 20 53 51 4c 49 54  d.# by the SQLIT
91d0: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 20 63 6f 6d  E_MAX_COLUMN com
91e0: 70 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65  pile-time parame
91f0: 74 65 72 2e 0a 23 0a 70 72 6f 63 20 63 6f 6c 75  ter..#.proc colu
9200: 6d 6e 73 20 7b 6e 7d 20 7b 0a 20 20 73 65 74 20  mns {n} {.  set 
9210: 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  res [list].  for
9220: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
9230: 20 24 6e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 20   $n} {incr i} { 
9240: 6c 61 70 70 65 6e 64 20 72 65 73 20 22 63 24 69  lappend res "c$i
9250: 22 20 7d 0a 20 20 6a 6f 69 6e 20 24 72 65 73 20  " }.  join $res 
9260: 22 2c 20 22 0a 7d 0a 64 6f 5f 65 78 65 63 73 71  ", ".}.do_execsq
9270: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
9280: 61 62 6c 65 2d 33 2e 31 30 2e 31 20 5b 73 75 62  able-3.10.1 [sub
9290: 73 74 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  st {.  CREATE TA
92a0: 42 4c 45 20 74 39 28 5b 63 6f 6c 75 6d 6e 73 20  BLE t9([columns 
92b0: 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  $::SQLITE_MAX_CO
92c0: 4c 55 4d 4e 5d 29 3b 0a 7d 5d 20 7b 7d 0a 64 6f  LUMN]);.}] {}.do
92d0: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65  _catchsql_test e
92e0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31  _createtable-3.1
92f0: 30 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20 20 43  0.2 [subst {.  C
9300: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
9310: 5b 63 6f 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24  [columns [expr $
9320: 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c  ::SQLITE_MAX_COL
9330: 55 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20  UMN+1]]);.}] {1 
9340: 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e  {too many column
9350: 73 20 6f 6e 20 74 31 30 7d 7d 0a 0a 23 20 45 56  s on t10}}..# EV
9360: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 37 37  IDENCE-OF: R-277
9370: 37 35 2d 36 34 37 32 31 20 42 6f 74 68 20 6f 66  75-64721 Both of
9380: 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 63 61   these limits ca
9390: 6e 20 62 65 20 6c 6f 77 65 72 65 64 20 61 74 0a  n be lowered at.
93a0: 23 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 20  # runtime using 
93b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
93c0: 74 28 29 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66  t() C/C++ interf
93d0: 61 63 65 2e 0a 23 0a 23 20 20 20 41 20 33 30 2c  ace..#.#   A 30,
93e0: 30 30 30 20 62 79 74 65 20 62 6c 6f 62 20 63 6f  000 byte blob co
93f0: 6e 73 75 6d 65 73 20 33 30 2c 30 30 33 20 62 79  nsumes 30,003 by
9400: 74 65 73 20 6f 66 20 72 65 63 6f 72 64 20 73 70  tes of record sp
9410: 61 63 65 2e 20 41 20 72 65 63 6f 72 64 20 0a 23  ace. A record .#
9420: 20 20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73     that contains
9430: 20 33 20 73 75 63 68 20 62 6c 6f 62 73 20 63 6f   3 such blobs co
9440: 6e 73 75 6d 65 73 20 28 33 30 2c 30 30 30 2a 33  nsumes (30,000*3
9450: 29 2b 31 20 62 79 74 65 73 20 6f 66 20 73 70 61  )+1 bytes of spa
9460: 63 65 2e 20 54 65 73 74 73 0a 23 20 20 20 33 2e  ce. Tests.#   3.
9470: 31 31 2e 34 20 61 6e 64 20 33 2e 31 31 2e 35 2c  11.4 and 3.11.5,
9480: 20 77 68 69 63 68 20 76 65 72 69 66 79 20 74 68   which verify th
9490: 61 74 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  at SQLITE_MAX_LE
94a0: 4e 47 54 48 20 6d 61 79 20 62 65 20 6c 6f 77 65  NGTH may be lowe
94b0: 72 65 64 0a 23 20 20 20 61 74 20 72 75 6e 74 69  red.#   at runti
94c0: 6d 65 2c 20 61 72 65 20 62 61 73 65 64 20 6f 6e  me, are based on
94d0: 20 74 68 69 73 20 63 61 6c 63 75 6c 61 74 69 6f   this calculatio
94e0: 6e 2e 0a 23 0a 73 71 6c 69 74 65 33 5f 6c 69 6d  n..#.sqlite3_lim
94f0: 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d  it db SQLITE_LIM
9500: 49 54 5f 43 4f 4c 55 4d 4e 20 35 30 30 0a 64 6f  IT_COLUMN 500.do
9510: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
9520: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 31  createtable-3.11
9530: 2e 31 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52  .1 [subst {.  CR
9540: 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 5b  EATE TABLE t10([
9550: 63 6f 6c 75 6d 6e 73 20 35 30 30 5d 29 3b 0a 7d  columns 500]);.}
9560: 5d 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  ] {}.do_catchsql
9570: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
9580: 62 6c 65 2d 33 2e 31 31 2e 32 20 5b 73 75 62 73  ble-3.11.2 [subs
9590: 74 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  t {.  CREATE TAB
95a0: 4c 45 20 74 31 31 28 5b 63 6f 6c 75 6d 6e 73 20  LE t11([columns 
95b0: 35 30 31 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f  501]);.}] {1 {to
95c0: 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f  o many columns o
95d0: 6e 20 74 31 31 7d 7d 0a 0a 23 20 43 68 65 63 6b  n t11}}..# Check
95e0: 20 74 68 61 74 20 69 74 20 69 73 20 6e 6f 74 20   that it is not 
95f0: 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 61 69 73  possible to rais
9600: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 6d  e the column lim
9610: 69 74 20 61 62 6f 76 65 20 69 74 73 20 0a 23 20  it above its .# 
9620: 64 65 66 61 75 6c 74 20 63 6f 6d 70 69 6c 65 20  default compile 
9630: 74 69 6d 65 20 76 61 6c 75 65 2e 0a 23 0a 73 71  time value..#.sq
9640: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
9650: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
9660: 4d 4e 20 5b 65 78 70 72 20 24 3a 3a 53 51 4c 49  MN [expr $::SQLI
9670: 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2b 32 5d  TE_MAX_COLUMN+2]
9680: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
9690: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
96a0: 33 2e 31 31 2e 33 20 5b 73 75 62 73 74 20 7b 0a  3.11.3 [subst {.
96b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
96c0: 31 31 28 5b 63 6f 6c 75 6d 6e 73 20 5b 65 78 70  11([columns [exp
96d0: 72 20 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f  r $::SQLITE_MAX_
96e0: 43 4f 4c 55 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20  COLUMN+1]]);.}] 
96f0: 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c  {1 {too many col
9700: 75 6d 6e 73 20 6f 6e 20 74 31 31 7d 7d 0a 0a 73  umns on t11}}..s
9710: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
9720: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
9730: 47 54 48 20 39 30 30 31 30 0a 64 6f 5f 65 78 65  GTH 90010.do_exe
9740: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
9750: 74 65 74 61 62 6c 65 2d 33 2e 31 31 2e 34 20 7b  tetable-3.11.4 {
9760: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
9770: 74 31 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  t12(a, b, c);.  
9780: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20  INSERT INTO t12 
9790: 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f  VALUES(randomblo
97a0: 62 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62  b(30000),randomb
97b0: 6c 6f 62 28 33 30 30 30 30 29 2c 72 61 6e 64 6f  lob(30000),rando
97c0: 6d 62 6c 6f 62 28 33 30 30 30 30 29 29 3b 0a 7d  mblob(30000));.}
97d0: 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f   {}.do_catchsql_
97e0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
97f0: 6c 65 2d 33 2e 31 31 2e 35 20 7b 0a 20 20 49 4e  le-3.11.5 {.  IN
9800: 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41  SERT INTO t12 VA
9810: 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  LUES(randomblob(
9820: 33 30 30 30 31 29 2c 72 61 6e 64 6f 6d 62 6c 6f  30001),randomblo
9830: 62 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62  b(30000),randomb
9840: 6c 6f 62 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b  lob(30000));.} {
9850: 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  1 {string or blo
9860: 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a 23 2d 2d  b too big}}..#--
9870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 65 73 74 73 20  -------.# Tests 
98c0: 66 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 72  for statements r
98d0: 65 67 61 72 64 69 6e 67 20 63 6f 6e 73 74 72 61  egarding constra
98e0: 69 6e 74 73 20 28 50 52 49 4d 41 52 59 20 4b 45  ints (PRIMARY KE
98f0: 59 2c 20 55 4e 49 51 55 45 2c 20 4e 4f 54 20 0a  Y, UNIQUE, NOT .
9900: 23 20 4e 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b  # NULL and CHECK
9910: 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 23   constraints)..#
9920: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
9930: 20 52 2d 35 32 33 38 32 2d 35 34 32 34 38 20 45   R-52382-54248 E
9940: 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c  ach table in SQL
9950: 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74 20  ite may have at 
9960: 6d 6f 73 74 20 6f 6e 65 0a 23 20 50 52 49 4d 41  most one.# PRIMA
9970: 52 59 20 4b 45 59 2e 0a 23 20 0a 23 20 45 56 49  RY KEY..# .# EVI
9980: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 38 32  DENCE-OF: R-3182
9990: 36 2d 30 31 38 31 33 20 41 6e 20 65 72 72 6f 72  6-01813 An error
99a0: 20 69 73 20 72 61 69 73 65 64 20 69 66 20 6d 6f   is raised if mo
99b0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49 4d  re than one PRIM
99c0: 41 52 59 0a 23 20 4b 45 59 20 63 6c 61 75 73 65  ARY.# KEY clause
99d0: 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 43 52   appears in a CR
99e0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
99f0: 6d 65 6e 74 2e 0a 23 0a 23 20 20 20 20 20 54 6f  ment..#.#     To
9a00: 20 74 65 73 74 20 74 68 65 20 74 77 6f 20 61 62   test the two ab
9a10: 6f 76 65 2c 20 73 68 6f 77 20 74 68 61 74 20 7a  ove, show that z
9a20: 65 72 6f 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ero primary keys
9a30: 20 69 73 20 4f 6b 2c 20 6f 6e 65 20 70 72 69 6d   is Ok, one prim
9a40: 61 72 79 0a 23 20 20 20 20 20 6b 65 79 20 69 73  ary.#     key is
9a50: 20 4f 6b 2c 20 61 6e 64 20 74 77 6f 20 6f 72 20   Ok, and two or 
9a60: 6d 6f 72 65 20 70 72 69 6d 61 72 79 20 6b 65 79  more primary key
9a70: 73 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 23  s is an error..#
9a80: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
9a90: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
9aa0: 74 65 73 74 73 20 34 2e 31 2e 31 20 7b 0a 20 20  tests 4.1.1 {.  
9ab0: 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  1    "CREATE TAB
9ac0: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20  LE t1(a, b, c)" 
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9af0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
9b00: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
9b10: 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  2(a PRIMARY KEY,
9b20: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52     {}.  3    "CR
9b50: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
9b60: 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b   b, c, PRIMARY K
9b70: 45 59 28 61 29 29 22 20 20 20 20 20 20 20 20 20  EY(a))"         
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9b90: 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  }.  4    "CREATE
9ba0: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
9bb0: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 63  c, PRIMARY KEY(c
9bc0: 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20 20 20  ,b,a))"         
9bd0: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a             {}.}.
9be0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
9bf0: 65 73 74 73 20 34 2e 31 2e 32 20 2d 65 72 72 6f  ests 4.1.2 -erro
9c00: 72 20 7b 0a 20 20 74 61 62 6c 65 20 22 74 35 22  r {.  table "t5"
9c10: 20 68 61 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f   has more than o
9c20: 6e 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 7d  ne primary key.}
9c30: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
9c40: 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49  E TABLE t5(a PRI
9c50: 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d  MARY KEY, b PRIM
9c60: 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20  ARY KEY, c)"    
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
9c80: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
9c90: 42 4c 45 20 74 35 28 61 2c 20 62 20 50 52 49 4d  BLE t5(a, b PRIM
9ca0: 41 52 59 20 4b 45 59 2c 20 63 2c 20 50 52 49 4d  ARY KEY, c, PRIM
9cb0: 41 52 59 20 4b 45 59 28 61 29 29 22 20 20 20 20  ARY KEY(a))"    
9cc0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20          {}.  3  
9cd0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
9ce0: 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t5(a INTEGER PRI
9cf0: 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d  MARY KEY, b PRIM
9d00: 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20  ARY KEY, c)"    
9d10: 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43      {}.  4    "C
9d20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
9d30: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
9d40: 20 4b 45 59 2c 20 62 2c 20 63 2c 20 50 52 49 4d   KEY, b, c, PRIM
9d50: 41 52 59 20 4b 45 59 28 62 2c 20 63 29 29 22 20  ARY KEY(b, c))" 
9d60: 7b 7d 0a 20 20 35 20 20 20 20 22 43 52 45 41 54  {}.  5    "CREAT
9d70: 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49  E TABLE t5(a PRI
9d80: 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20  MARY KEY, b, c, 
9d90: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22  PRIMARY KEY(a))"
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
9db0: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
9dc0: 42 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52  BLE t5(a INTEGER
9dd0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
9de0: 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   c, PRIMARY KEY(
9df0: 61 29 29 22 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20  a))"    {}.}..# 
9e00: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
9e10: 34 37 35 35 2d 33 39 32 39 31 20 54 68 65 20 50  4755-39291 The P
9e20: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 6f 70  RIMARY KEY is op
9e30: 74 69 6f 6e 61 6c 20 66 6f 72 20 6f 72 64 69 6e  tional for ordin
9e40: 61 72 79 0a 23 20 74 61 62 6c 65 73 20 62 75 74  ary.# tables but
9e50: 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
9e60: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
9e70: 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f 63 61 74 63  ables..#.do_catc
9e80: 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 2e 33 20  hsql_test 4.1.3 
9e90: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
9ea0: 20 74 36 28 61 2c 20 62 29 3b 20 2d 2d 6f 6b 0a   t6(a, b); --ok.
9eb0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 63 61 74 63  } {0 {}}.do_catc
9ec0: 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 2e 34 20  hsql_test 4.1.4 
9ed0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
9ee0: 20 74 37 28 61 2c 20 62 29 20 57 49 54 48 4f 55   t7(a, b) WITHOU
9ef0: 54 20 52 4f 57 49 44 3b 20 2d 2d 45 72 72 6f 72  T ROWID; --Error
9f00: 2c 20 6e 6f 20 50 52 49 4d 41 52 59 20 4b 45 59  , no PRIMARY KEY
9f10: 0a 7d 20 7b 31 20 7b 50 52 49 4d 41 52 59 20 4b  .} {1 {PRIMARY K
9f20: 45 59 20 6d 69 73 73 69 6e 67 20 6f 6e 20 74 61  EY missing on ta
9f30: 62 6c 65 20 74 37 7d 7d 0a 0a 0a 70 72 6f 63 20  ble t7}}...proc 
9f40: 74 61 62 6c 65 5f 70 6b 20 7b 74 62 6c 7d 20 7b  table_pk {tbl} {
9f50: 20 0a 20 20 73 65 74 20 70 6b 20 5b 6c 69 73 74   .  set pk [list
9f60: 5d 0a 20 20 64 62 20 65 76 61 6c 20 22 70 72 61  ].  db eval "pra
9f70: 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 24  gma table_info($
9f80: 74 62 6c 29 22 20 61 20 7b 0a 20 20 20 20 69 66  tbl)" a {.    if
9f90: 20 7b 24 61 28 70 6b 29 7d 20 7b 20 6c 61 70 70   {$a(pk)} { lapp
9fa0: 65 6e 64 20 70 6b 20 24 61 28 6e 61 6d 65 29 20  end pk $a(name) 
9fb0: 7d 0a 20 20 7d 0a 20 20 73 65 74 20 70 6b 0a 7d  }.  }.  set pk.}
9fc0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
9fd0: 20 52 2d 34 31 34 31 31 2d 31 38 38 33 37 20 49   R-41411-18837 I
9fe0: 66 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 50  f the keywords P
9ff0: 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61  RIMARY KEY are a
a000: 64 64 65 64 20 74 6f 20 61 0a 23 20 63 6f 6c 75  dded to a.# colu
a010: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74  mn definition, t
a020: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a030: 6b 65 79 20 66 6f 72 20 74 68 65 20 74 61 62 6c  key for the tabl
a040: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  e consists of th
a050: 61 74 0a 23 20 73 69 6e 67 6c 65 20 63 6f 6c 75  at.# single colu
a060: 6d 6e 2e 0a 23 0a 23 20 20 20 20 20 54 68 65 20  mn..#.#     The 
a070: 61 62 6f 76 65 20 69 73 20 74 65 73 74 65 64 20  above is tested 
a080: 62 79 20 34 2e 32 2e 31 2e 2a 0a 23 0a 23 20 45  by 4.2.1.*.#.# E
a090: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31  VIDENCE-OF: R-31
a0a0: 37 37 35 2d 34 38 32 30 34 20 4f 72 2c 20 69 66  775-48204 Or, if
a0b0: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63   a PRIMARY KEY c
a0c0: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
a0d0: 65 64 20 61 73 0a 23 20 61 20 74 61 62 6c 65 2d  ed as.# a table-
a0e0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 6e  constraint, then
a0f0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
a100: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 63 6f   of the table co
a110: 6e 73 69 73 74 73 20 6f 66 20 74 68 65 0a 23 20  nsists of the.# 
a120: 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  list of columns 
a130: 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72  specified as par
a140: 74 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  t of the PRIMARY
a150: 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a 23 0a 23   KEY clause..#.#
a160: 20 20 20 20 20 54 68 65 20 61 62 6f 76 65 20 69       The above i
a170: 73 20 74 65 73 74 65 64 20 62 79 20 34 2e 32 2e  s tested by 4.2.
a180: 32 2e 2a 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74  2.*.#.do_createt
a190: 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 32 20 2d  able_tests 4.2 -
a1a0: 72 65 70 61 69 72 20 7b 0a 20 20 63 61 74 63 68  repair {.  catch
a1b0: 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45  sql { DROP TABLE
a1c0: 20 74 35 20 7d 0a 7d 20 2d 74 63 6c 71 75 65 72   t5 }.} -tclquer
a1d0: 79 20 7b 0a 20 20 74 61 62 6c 65 5f 70 6b 20 74  y {.  table_pk t
a1e0: 35 0a 7d 20 7b 0a 20 20 31 2e 31 20 20 20 20 22  5.} {.  1.1    "
a1f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
a200: 61 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52 49  a, b INTEGER PRI
a210: 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20  MARY KEY, c)"   
a220: 20 20 20 20 7b 62 7d 0a 20 20 31 2e 32 20 20 20      {b}.  1.2   
a230: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
a240: 35 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  5(a PRIMARY KEY,
a250: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
a260: 20 20 20 20 20 20 7b 61 7d 0a 0a 20 20 32 2e 31        {a}..  2.1
a270: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
a280: 45 20 74 35 28 61 2c 20 62 2c 20 63 2c 20 50 52  E t5(a, b, c, PR
a290: 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22 20 20  IMARY KEY(a))"  
a2a0: 20 20 20 20 20 20 20 20 20 7b 61 7d 0a 20 20 32           {a}.  2
a2b0: 2e 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41  .2    "CREATE TA
a2c0: 42 4c 45 20 74 35 28 61 2c 20 62 2c 20 63 2c 20  BLE t5(a, b, c, 
a2d0: 50 52 49 4d 41 52 59 20 4b 45 59 28 63 2c 62 2c  PRIMARY KEY(c,b,
a2e0: 61 29 29 22 20 20 20 20 20 20 20 7b 61 20 62 20  a))"       {a b 
a2f0: 63 7d 0a 20 20 32 2e 33 20 20 20 20 22 43 52 45  c}.  2.3    "CRE
a300: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20  ATE TABLE t5(a, 
a310: 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  b INTEGER PRIMAR
a320: 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20 20 20  Y KEY, c)"      
a330: 20 7b 62 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e   {b}.}..# EVIDEN
a340: 43 45 2d 4f 46 3a 20 52 2d 35 39 31 32 34 2d 36  CE-OF: R-59124-6
a350: 31 33 33 39 20 45 61 63 68 20 72 6f 77 20 69 6e  1339 Each row in
a360: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 20   a table with a 
a370: 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73 74  primary key must
a380: 0a 23 20 68 61 76 65 20 61 20 75 6e 69 71 75 65  .# have a unique
a390: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
a3a0: 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70 72  values in its pr
a3b0: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
a3c0: 73 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  s..#.# EVIDENCE-
a3d0: 4f 46 3a 20 52 2d 30 36 34 37 31 2d 31 36 32 38  OF: R-06471-1628
a3e0: 37 20 49 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  7 If an INSERT o
a3f0: 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
a400: 6e 74 20 61 74 74 65 6d 70 74 73 0a 23 20 74 6f  nt attempts.# to
a410: 20 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c   modify the tabl
a420: 65 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61  e content so tha
a430: 74 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  t two or more ro
a440: 77 73 20 68 61 76 65 20 69 64 65 6e 74 69 63 61  ws have identica
a450: 6c 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20  l.# primary key 
a460: 76 61 6c 75 65 73 2c 20 74 68 61 74 20 69 73 20  values, that is 
a470: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
a480: 6c 61 74 69 6f 6e 2e 0a 23 0a 64 72 6f 70 5f 61  lation..#.drop_a
a490: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65  ll_tables.do_exe
a4a0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 33 2e 30 20  csql_test 4.3.0 
a4b0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
a4c0: 20 74 31 28 78 20 50 52 49 4d 41 52 59 20 4b 45   t1(x PRIMARY KE
a4d0: 59 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  Y, y);.  INSERT 
a4e0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30  INTO t1 VALUES(0
a4f0: 2c 20 20 20 20 20 20 20 20 20 20 27 7a 65 72 6f  ,          'zero
a500: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a510: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 35 2e 35  O t1 VALUES(45.5
a520: 2c 20 20 20 20 20 20 20 27 6f 6e 65 27 29 3b 0a  ,       'one');.
a530: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
a540: 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65   VALUES('bramble
a550: 73 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  s', 'two');.  IN
a560: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
a570: 55 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 20  UES(X'ABCDEF',  
a580: 27 74 68 72 65 65 27 29 3b 0a 0a 20 20 43 52 45  'three');..  CRE
a590: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 2c 20  ATE TABLE t2(x, 
a5a0: 79 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  y, PRIMARY KEY(x
a5b0: 2c 20 79 29 29 3b 0a 20 20 49 4e 53 45 52 54 20  , y));.  INSERT 
a5c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30  INTO t2 VALUES(0
a5d0: 2c 20 20 20 20 20 20 20 20 20 20 27 7a 65 72 6f  ,          'zero
a5e0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a5f0: 4f 20 74 32 20 56 41 4c 55 45 53 28 34 35 2e 35  O t2 VALUES(45.5
a600: 2c 20 20 20 20 20 20 20 27 6f 6e 65 27 29 3b 0a  ,       'one');.
a610: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
a620: 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65   VALUES('bramble
a630: 73 27 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  s', 'two');.  IN
a640: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
a650: 55 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 20  UES(X'ABCDEF',  
a660: 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b 7d 0a 0a  'three');.} {}..
a670: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
a680: 65 73 74 73 20 34 2e 33 2e 31 20 2d 65 72 72 6f  ests 4.3.1 -erro
a690: 72 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  r {UNIQUE constr
a6a0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e  aint failed: t1.
a6b0: 78 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53  x} {.  1    "INS
a6c0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
a6d0: 45 53 28 30 2c 20 30 29 22 20 20 20 20 20 20 20  ES(0, 0)"       
a6e0: 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75            {"colu
a6f0: 6d 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20  mn x is"}.  2   
a700: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
a710: 20 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 27 61   VALUES(45.5, 'a
a720: 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b  bc')"          {
a730: 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20  "column x is"}. 
a740: 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   3    "INSERT IN
a750: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30 2e 30  TO t1 VALUES(0.0
a760: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20  , 'abc')"       
a770: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69      {"column x i
a780: 73 22 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45  s"}.  4    "INSE
a790: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a7a0: 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 61  S('brambles', 'a
a7b0: 62 63 27 29 22 20 20 20 20 7b 22 63 6f 6c 75 6d  bc')"    {"colum
a7c0: 6e 20 78 20 69 73 22 7d 0a 20 20 35 20 20 20 20  n x is"}.  5    
a7d0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
a7e0: 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 46 27  VALUES(X'ABCDEF'
a7f0: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 7b 22  , 'abc')"     {"
a800: 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 7d 0a  column x is"}.}.
a810: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
a820: 65 73 74 73 20 34 2e 33 2e 31 20 2d 65 72 72 6f  ests 4.3.1 -erro
a830: 72 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  r {UNIQUE constr
a840: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 32 2e  aint failed: t2.
a850: 78 2c 20 74 32 2e 79 7d 20 7b 0a 20 20 36 20 20  x, t2.y} {.  6  
a860: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
a870: 32 20 56 41 4c 55 45 53 28 30 2c 20 27 7a 65 72  2 VALUES(0, 'zer
a880: 6f 27 29 22 20 20 20 20 20 20 20 20 20 20 20 20  o')"            
a890: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
a8a0: 72 65 22 7d 0a 20 20 37 20 20 20 20 22 49 4e 53  re"}.  7    "INS
a8b0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a8c0: 45 53 28 34 35 2e 35 2c 20 27 6f 6e 65 27 29 22  ES(45.5, 'one')"
a8d0: 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75            {"colu
a8e0: 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20  mns x, y are"}. 
a8f0: 20 38 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   8    "INSERT IN
a900: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2e 30  TO t2 VALUES(0.0
a910: 2c 20 27 7a 65 72 6f 27 29 22 20 20 20 20 20 20  , 'zero')"      
a920: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c      {"columns x,
a930: 20 79 20 61 72 65 22 7d 0a 20 20 39 20 20 20 20   y are"}.  9    
a940: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
a950: 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65 73  VALUES('brambles
a960: 27 2c 20 27 74 77 6f 27 29 22 20 20 20 20 7b 22  ', 'two')"    {"
a970: 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65  columns x, y are
a980: 22 7d 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52  "}.  10   "INSER
a990: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
a9a0: 28 58 27 41 42 43 44 45 46 27 2c 20 27 74 68 72  (X'ABCDEF', 'thr
a9b0: 65 65 27 29 22 20 20 20 7b 22 63 6f 6c 75 6d 6e  ee')"   {"column
a9c0: 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 64  s x, y are"}.}.d
a9d0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
a9e0: 73 74 73 20 34 2e 33 2e 32 20 7b 0a 20 20 31 20  sts 4.3.2 {.  1 
a9f0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aa00: 74 31 20 56 41 4c 55 45 53 28 2d 31 2c 20 30 29  t1 VALUES(-1, 0)
aa10: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
aa20: 20 7b 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45   {}.  2    "INSE
aa30: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
aa40: 53 28 34 35 2e 32 2c 20 27 61 62 63 27 29 22 20  S(45.2, 'abc')" 
aa50: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20           {}.  3 
aa60: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aa70: 74 31 20 56 41 4c 55 45 53 28 30 2e 30 31 2c 20  t1 VALUES(0.01, 
aa80: 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20 20  'abc')"         
aa90: 20 7b 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45   {}.  4    "INSE
aaa0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
aab0: 53 28 27 62 72 61 6d 62 6c 65 27 2c 20 27 61 62  S('bramble', 'ab
aac0: 63 27 29 22 20 20 20 20 20 7b 7d 0a 20 20 35 20  c')"     {}.  5 
aad0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
aae0: 74 31 20 56 41 4c 55 45 53 28 58 27 41 42 43 44  t1 VALUES(X'ABCD
aaf0: 45 45 27 2c 20 27 61 62 63 27 29 22 20 20 20 20  EE', 'abc')"    
ab00: 20 7b 7d 0a 0a 20 20 36 20 20 20 20 22 49 4e 53   {}..  6    "INS
ab10: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ab20: 45 53 28 30 2c 20 30 29 22 20 20 20 20 20 20 20  ES(0, 0)"       
ab30: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 37            {}.  7
ab40: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ab50: 20 74 32 20 56 41 4c 55 45 53 28 34 35 2e 35 2c   t2 VALUES(45.5,
ab60: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 20   'abc')"        
ab70: 20 20 7b 7d 0a 20 20 38 20 20 20 20 22 49 4e 53    {}.  8    "INS
ab80: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ab90: 45 53 28 30 2e 30 2c 20 27 61 62 63 27 29 22 20  ES(0.0, 'abc')" 
aba0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 39            {}.  9
abb0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
abc0: 20 74 32 20 56 41 4c 55 45 53 28 27 62 72 61 6d   t2 VALUES('bram
abd0: 62 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20 20  bles', 'abc')"  
abe0: 20 20 7b 7d 0a 20 20 31 30 20 20 20 22 49 4e 53    {}.  10   "INS
abf0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ac00: 45 53 28 58 27 41 42 43 44 45 46 27 2c 20 27 61  ES(X'ABCDEF', 'a
ac10: 62 63 27 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 64  bc')"     {}.}.d
ac20: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
ac30: 73 74 73 20 34 2e 33 2e 33 20 2d 65 72 72 6f 72  sts 4.3.3 -error
ac40: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
ac50: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 2e 78  int failed: t1.x
ac60: 7d 20 7b 0a 20 20 31 20 20 20 20 22 55 50 44 41  } {.  1    "UPDA
ac70: 54 45 20 74 31 20 53 45 54 20 78 3d 30 20 20 20  TE t1 SET x=0   
ac80: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 79 3d          WHERE y=
ac90: 27 74 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75  'two'"    {"colu
aca0: 6d 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20  mn x is"}.  2   
acb0: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
acc0: 78 3d 27 62 72 61 6d 62 6c 65 73 27 20 20 57 48  x='brambles'  WH
acd0: 45 52 45 20 79 3d 27 74 68 72 65 65 27 22 20 20  ERE y='three'"  
ace0: 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a  {"column x is"}.
acf0: 20 20 33 20 20 20 20 22 55 50 44 41 54 45 20 74    3    "UPDATE t
ad00: 31 20 53 45 54 20 78 3d 34 35 2e 35 20 20 20 20  1 SET x=45.5    
ad10: 20 20 20 20 57 48 45 52 45 20 79 3d 27 7a 65 72      WHERE y='zer
ad20: 6f 27 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78  o'"   {"column x
ad30: 20 69 73 22 7d 0a 20 20 34 20 20 20 20 22 55 50   is"}.  4    "UP
ad40: 44 41 54 45 20 74 31 20 53 45 54 20 78 3d 58 27  DATE t1 SET x=X'
ad50: 41 42 43 44 45 46 27 20 20 20 57 48 45 52 45 20  ABCDEF'   WHERE 
ad60: 79 3d 27 6f 6e 65 27 22 20 20 20 20 7b 22 63 6f  y='one'"    {"co
ad70: 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 35 20  lumn x is"}.  5 
ad80: 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45     "UPDATE t1 SE
ad90: 54 20 78 3d 30 2e 30 20 20 20 20 20 20 20 20 20  T x=0.0         
ada0: 57 48 45 52 45 20 79 3d 27 74 68 72 65 65 27 22  WHERE y='three'"
adb0: 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22    {"column x is"
adc0: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
add0: 6c 65 5f 74 65 73 74 73 20 34 2e 33 2e 33 20 2d  le_tests 4.3.3 -
ade0: 65 72 72 6f 72 20 7b 55 4e 49 51 55 45 20 63 6f  error {UNIQUE co
adf0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
ae00: 20 74 32 2e 78 2c 20 74 32 2e 79 7d 20 7b 0a 20   t2.x, t2.y} {. 
ae10: 20 36 20 20 20 20 22 55 50 44 41 54 45 20 74 32   6    "UPDATE t2
ae20: 20 53 45 54 20 78 3d 30 2c 20 79 3d 27 7a 65 72   SET x=0, y='zer
ae30: 6f 27 20 57 48 45 52 45 20 79 3d 27 74 77 6f 27  o' WHERE y='two'
ae40: 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78  "    {"columns x
ae50: 2c 20 79 20 61 72 65 22 7d 0a 20 20 37 20 20 20  , y are"}.  7   
ae60: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
ae70: 78 3d 27 62 72 61 6d 62 6c 65 73 27 2c 20 79 3d  x='brambles', y=
ae80: 27 74 77 6f 27 20 57 48 45 52 45 20 79 3d 27 74  'two' WHERE y='t
ae90: 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20 20  hree'"  .       
aea0: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
aeb0: 72 65 22 7d 0a 20 20 38 20 20 20 20 22 55 50 44  re"}.  8    "UPD
aec0: 41 54 45 20 74 32 20 53 45 54 20 78 3d 34 35 2e  ATE t2 SET x=45.
aed0: 35 2c 20 79 3d 27 6f 6e 65 27 20 57 48 45 52 45  5, y='one' WHERE
aee0: 20 79 3d 27 7a 65 72 6f 27 22 20 7b 22 63 6f 6c   y='zero'" {"col
aef0: 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a  umns x, y are"}.
af00: 20 20 39 20 20 20 20 22 55 50 44 41 54 45 20 74    9    "UPDATE t
af10: 32 20 53 45 54 20 78 3d 58 27 41 42 43 44 45 46  2 SET x=X'ABCDEF
af20: 27 2c 20 79 3d 27 74 68 72 65 65 27 20 57 48 45  ', y='three' WHE
af30: 52 45 20 79 3d 27 6f 6e 65 27 22 20 0a 20 20 20  RE y='one'" .   
af40: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c      {"columns x,
af50: 20 79 20 61 72 65 22 7d 0a 20 20 31 30 20 20 20   y are"}.  10   
af60: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 78  "UPDATE t2 SET x
af70: 3d 30 2e 30 2c 20 79 3d 27 7a 65 72 6f 27 20 20  =0.0, y='zero'  
af80: 20 20 20 20 20 20 57 48 45 52 45 20 79 3d 27 74        WHERE y='t
af90: 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20 20  hree'"  .       
afa0: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
afb0: 72 65 22 7d 0a 7d 0a 0a 0a 23 20 45 56 49 44 45  re"}.}...# EVIDE
afc0: 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 37 32 2d  NCE-OF: R-52572-
afd0: 30 32 30 37 38 20 46 6f 72 20 74 68 65 20 70 75  02078 For the pu
afe0: 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d  rposes of determ
aff0: 69 6e 69 6e 67 20 74 68 65 0a 23 20 75 6e 69 71  ining the.# uniq
b000: 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61 72  ueness of primar
b010: 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e 55  y key values, NU
b020: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
b030: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
b040: 74 0a 23 20 66 72 6f 6d 20 61 6c 6c 20 6f 74 68  t.# from all oth
b050: 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c 75  er values, inclu
b060: 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c 73  ding other NULLs
b070: 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ..#.do_createtab
b080: 6c 65 5f 74 65 73 74 73 20 34 2e 34 20 7b 0a 20  le_tests 4.4 {. 
b090: 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
b0a0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
b0b0: 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20  L, 0)"          
b0c0: 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 49      {}.  2    "I
b0d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
b0e0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 30 29 22 20 20  LUES(NULL, 0)"  
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
b100: 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   3    "INSERT IN
b110: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
b120: 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20  L, 0)"          
b130: 20 20 20 20 7b 7d 0a 0a 20 20 34 20 20 20 20 22      {}..  4    "
b140: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
b150: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 7a 65 72  ALUES(NULL, 'zer
b160: 6f 27 29 22 20 20 20 20 20 20 20 20 20 7b 7d 0a  o')"         {}.
b170: 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20 49    5    "INSERT I
b180: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
b190: 4c 4c 2c 20 27 6f 6e 65 27 29 22 20 20 20 20 20  LL, 'one')"     
b1a0: 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 20 22       {}.  6    "
b1b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
b1c0: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 74 77 6f  ALUES(NULL, 'two
b1d0: 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  ')"          {}.
b1e0: 20 20 37 20 20 20 20 22 49 4e 53 45 52 54 20 49    7    "INSERT I
b1f0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
b200: 4c 4c 2c 20 27 74 68 72 65 65 27 29 22 20 20 20  LL, 'three')"   
b210: 20 20 20 20 20 7b 7d 0a 0a 20 20 38 20 20 20 20       {}..  8    
b220: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b230: 56 41 4c 55 45 53 28 30 2c 20 4e 55 4c 4c 29 22  VALUES(0, NULL)"
b240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
b250: 0a 20 20 39 20 20 20 20 22 49 4e 53 45 52 54 20  .  9    "INSERT 
b260: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
b270: 35 2e 35 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20  5.5, NULL)"     
b280: 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20 20        {}.  10   
b290: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b2a0: 56 41 4c 55 45 53 28 30 2e 30 2c 20 4e 55 4c 4c  VALUES(0.0, NULL
b2b0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  )"            {}
b2c0: 0a 20 20 31 31 20 20 20 22 49 4e 53 45 52 54 20  .  11   "INSERT 
b2d0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
b2e0: 62 72 61 6d 62 6c 65 73 27 2c 20 4e 55 4c 4c 29  brambles', NULL)
b2f0: 22 20 20 20 20 20 7b 7d 0a 20 20 31 32 20 20 20  "     {}.  12   
b300: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b310: 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 46 27  VALUES(X'ABCDEF'
b320: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 7b 7d  , NULL)"      {}
b330: 0a 0a 20 20 31 33 20 20 20 22 49 4e 53 45 52 54  ..  13   "INSERT
b340: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b350: 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20  NULL, NULL)"    
b360: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 34 20 20         {}.  14  
b370: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b380: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55   VALUES(NULL, NU
b390: 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 7b  LL)"           {
b3a0: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
b3b0: 4f 46 3a 20 52 2d 33 35 31 31 33 2d 34 33 32 31  OF: R-35113-4321
b3c0: 34 20 55 6e 6c 65 73 73 20 74 68 65 20 63 6f 6c  4 Unless the col
b3d0: 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54 45 47 45  umn is an INTEGE
b3e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 23 20  R PRIMARY KEY.# 
b3f0: 6f 72 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  or the table is 
b400: 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
b410: 74 61 62 6c 65 20 6f 72 20 74 68 65 20 63 6f 6c  table or the col
b420: 75 6d 6e 20 69 73 20 64 65 63 6c 61 72 65 64 20  umn is declared 
b430: 4e 4f 54 0a 23 20 4e 55 4c 4c 2c 20 53 51 4c 69  NOT.# NULL, SQLi
b440: 74 65 20 61 6c 6c 6f 77 73 20 4e 55 4c 4c 20 76  te allows NULL v
b450: 61 6c 75 65 73 20 69 6e 20 61 20 50 52 49 4d 41  alues in a PRIMA
b460: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 2e 0a 23  RY KEY column..#
b470: 0a 23 20 20 20 20 20 49 66 20 74 68 65 20 63 6f  .#     If the co
b480: 6c 75 6d 6e 20 69 73 20 61 6e 20 69 6e 74 65 67  lumn is an integ
b490: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20  er primary key, 
b4a0: 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 69 6e  attempting to in
b4b0: 73 65 72 74 20 61 20 4e 55 4c 4c 0a 23 20 20 20  sert a NULL.#   
b4c0: 20 20 69 6e 74 6f 20 74 68 65 20 63 6f 6c 75 6d    into the colum
b4d0: 6e 20 74 72 69 67 67 65 72 73 20 74 68 65 20 61  n triggers the a
b4e0: 75 74 6f 2d 69 6e 63 72 65 6d 65 6e 74 20 62 65  uto-increment be
b4f0: 68 61 76 69 6f 72 2e 20 41 74 74 65 6d 70 74 69  havior. Attempti
b500: 6e 67 0a 23 20 20 20 20 20 74 6f 20 75 73 65 20  ng.#     to use 
b510: 55 50 44 41 54 45 20 74 6f 20 73 65 74 20 61 6e  UPDATE to set an
b520: 20 69 70 6b 20 63 6f 6c 75 6d 6e 20 74 6f 20 61   ipk column to a
b530: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 61   NULL value is a
b540: 6e 20 65 72 72 6f 72 2e 0a 23 0a 64 6f 5f 63 72  n error..#.do_cr
b550: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
b560: 34 2e 35 2e 31 20 7b 0a 20 20 31 20 20 20 20 22  4.5.1 {.  1    "
b570: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
b580: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
b590: 49 53 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20  IS NULL"        
b5a0: 20 20 20 20 20 20 20 20 20 20 20 33 0a 20 20 32             3.  2
b5b0: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
b5c0: 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45  t(*) FROM t2 WHE
b5d0: 52 45 20 78 20 49 53 20 4e 55 4c 4c 22 20 20 20  RE x IS NULL"   
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 36 0a 20 20 33 20 20 20 20 22 53 45 4c 45 43 54  6.  3    "SELECT
b600: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
b610: 32 20 57 48 45 52 45 20 79 20 49 53 20 4e 55 4c  2 WHERE y IS NUL
b620: 4c 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  L"              
b630: 20 20 20 20 20 37 0a 20 20 34 20 20 20 20 22 53       7.  4    "S
b640: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
b650: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 78 20 49  ROM t2 WHERE x I
b660: 53 20 4e 55 4c 4c 20 41 4e 44 20 79 20 49 53 20  S NULL AND y IS 
b670: 4e 55 4c 4c 22 20 20 20 20 20 32 0a 7d 0a 64 6f  NULL"     2.}.do
b680: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
b690: 35 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 54  5.2 {.  CREATE T
b6a0: 41 42 4c 45 20 74 33 28 73 2c 20 75 20 49 4e 54  ABLE t3(s, u INT
b6b0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b6c0: 2c 20 76 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , v);.  INSERT I
b6d0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c  NTO t3 VALUES(1,
b6e0: 20 4e 55 4c 4c 2c 20 32 29 3b 0a 20 20 49 4e 53   NULL, 2);.  INS
b6f0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
b700: 45 53 28 27 78 27 2c 20 4e 55 4c 4c 2c 20 27 79  ES('x', NULL, 'y
b710: 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 75 20 46  ');.  SELECT u F
b720: 52 4f 4d 20 74 33 3b 0a 7d 20 7b 31 20 32 7d 0a  ROM t3;.} {1 2}.
b730: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
b740: 20 34 2e 35 2e 33 20 7b 0a 20 20 49 4e 53 45 52   4.5.3 {.  INSER
b750: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
b760: 28 32 2c 20 35 2c 20 33 29 3b 0a 20 20 55 50 44  (2, 5, 3);.  UPD
b770: 41 54 45 20 74 33 20 53 45 54 20 75 20 3d 20 4e  ATE t3 SET u = N
b780: 55 4c 4c 20 57 48 45 52 45 20 73 20 3d 20 32 3b  ULL WHERE s = 2;
b790: 0a 7d 20 7b 31 20 7b 64 61 74 61 74 79 70 65 20  .} {1 {datatype 
b7a0: 6d 69 73 6d 61 74 63 68 7d 7d 0a 64 6f 5f 63 61  mismatch}}.do_ca
b7b0: 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 35 2e  tchsql_test 4.5.
b7c0: 34 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  4 {.  CREATE TAB
b7d0: 4c 45 20 74 34 28 73 2c 20 75 20 49 4e 54 20 50  LE t4(s, u INT P
b7e0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 76 29 20 57  RIMARY KEY, v) W
b7f0: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
b800: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
b810: 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20 32  ALUES(1, NULL, 2
b820: 29 3b 0a 7d 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c  );.} {1 {NOT NUL
b830: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  L constraint fai
b840: 6c 65 64 3a 20 74 34 2e 75 7d 7d 0a 64 6f 5f 63  led: t4.u}}.do_c
b850: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 35  atchsql_test 4.5
b860: 2e 35 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .5 {.  CREATE TA
b870: 42 4c 45 20 74 35 28 73 2c 20 75 20 49 4e 54 20  BLE t5(s, u INT 
b880: 50 52 49 4d 41 52 59 20 4b 45 59 20 4e 4f 54 20  PRIMARY KEY NOT 
b890: 4e 55 4c 4c 2c 20 76 29 3b 0a 20 20 49 4e 53 45  NULL, v);.  INSE
b8a0: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
b8b0: 53 28 31 2c 20 4e 55 4c 4c 2c 20 32 29 3b 0a 7d  S(1, NULL, 2);.}
b8c0: 20 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f   {1 {NOT NULL co
b8d0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
b8e0: 20 74 35 2e 75 7d 7d 0a 0a 23 20 45 56 49 44 45   t5.u}}..# EVIDE
b8f0: 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 32 32 37 2d  NCE-OF: R-00227-
b900: 32 31 30 38 30 20 41 20 55 4e 49 51 55 45 20 63  21080 A UNIQUE c
b910: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 69 6d  onstraint is sim
b920: 69 6c 61 72 20 74 6f 20 61 20 50 52 49 4d 41 52  ilar to a PRIMAR
b930: 59 0a 23 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  Y.# KEY constrai
b940: 6e 74 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  nt, except that 
b950: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6d  a single table m
b960: 61 79 20 68 61 76 65 20 61 6e 79 20 6e 75 6d 62  ay have any numb
b970: 65 72 20 6f 66 0a 23 20 55 4e 49 51 55 45 20 63  er of.# UNIQUE c
b980: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 23 0a 64 72  onstraints..#.dr
b990: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
b9a0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
b9b0: 74 73 20 34 2e 36 20 7b 0a 20 20 31 20 20 20 20  ts 4.6 {.  1    
b9c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
b9d0: 28 61 20 55 4e 49 51 55 45 2c 20 62 20 55 4e 49  (a UNIQUE, b UNI
b9e0: 51 55 45 29 22 20 20 20 20 20 20 20 20 20 20 20  QUE)"           
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
ba00: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
ba10: 42 4c 45 20 74 32 28 61 20 55 4e 49 51 55 45 2c  BLE t2(a UNIQUE,
ba20: 20 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 63 2c   b, c, UNIQUE(c,
ba30: 20 62 29 29 22 20 20 20 20 20 20 20 20 20 20 20   b))"           
ba40: 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45    {}.  3    "CRE
ba50: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
ba60: 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 61 29 2c  b, c, UNIQUE(a),
ba70: 20 55 4e 49 51 55 45 28 62 29 2c 20 55 4e 49 51   UNIQUE(b), UNIQ
ba80: 55 45 28 63 29 29 22 20 7b 7d 0a 20 20 34 20 20  UE(c))" {}.  4  
ba90: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
baa0: 74 34 28 61 2c 20 62 2c 20 63 2c 20 55 4e 49 51  t4(a, b, c, UNIQ
bab0: 55 45 28 61 2c 20 62 2c 20 63 29 29 22 20 20 20  UE(a, b, c))"   
bac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
bad0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
bae0: 46 3a 20 52 2d 33 30 39 38 31 2d 36 34 31 36 38  F: R-30981-64168
baf0: 20 46 6f 72 20 65 61 63 68 20 55 4e 49 51 55 45   For each UNIQUE
bb00: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e 20 74   constraint on t
bb10: 68 65 20 74 61 62 6c 65 2c 0a 23 20 65 61 63 68  he table,.# each
bb20: 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69   row must contai
bb30: 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  n a unique combi
bb40: 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73  nation of values
bb50: 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a   in the columns.
bb60: 23 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  # identified by 
bb70: 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  the UNIQUE const
bb80: 72 61 69 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45  raint..#.# EVIDE
bb90: 4e 43 45 2d 4f 46 3a 20 52 2d 35 39 31 32 34 2d  NCE-OF: R-59124-
bba0: 36 31 33 33 39 20 45 61 63 68 20 72 6f 77 20 69  61339 Each row i
bbb0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
bbc0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d 75 73   primary key mus
bbd0: 74 0a 23 20 68 61 76 65 20 61 20 75 6e 69 71 75  t.# have a uniqu
bbe0: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
bbf0: 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73 20 70   values in its p
bc00: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
bc10: 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ns..#.do_execsql
bc20: 5f 74 65 73 74 20 34 2e 37 2e 30 20 7b 0a 20 20  _test 4.7.0 {.  
bc30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
bc40: 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 49  ALUES(1, 2);.  I
bc50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
bc60: 4c 55 45 53 28 34 2e 33 2c 20 35 2e 35 29 3b 0a  LUES(4.3, 5.5);.
bc70: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
bc80: 20 56 41 4c 55 45 53 28 27 72 65 76 65 61 6c 27   VALUES('reveal'
bc90: 2c 20 27 76 61 72 69 61 62 6c 65 6e 65 73 73 27  , 'variableness'
bca0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
bcb0: 20 74 31 20 56 41 4c 55 45 53 28 58 27 31 32 33   t1 VALUES(X'123
bcc0: 34 35 36 27 2c 20 58 27 36 35 34 33 32 31 27 29  456', X'654321')
bcd0: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
bce0: 20 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27   t4 VALUES('xyx'
bcf0: 2c 20 31 2c 20 31 29 3b 0a 20 20 49 4e 53 45 52  , 1, 1);.  INSER
bd00: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
bd10: 28 27 78 79 78 27 2c 20 32 2c 20 31 29 3b 0a 20  ('xyx', 2, 1);. 
bd20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
bd30: 56 41 4c 55 45 53 28 27 75 76 77 27 2c 20 31 2c  VALUES('uvw', 1,
bd40: 20 31 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65   1);.}.do_create
bd50: 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 37 2e  table_tests 4.7.
bd60: 31 20 2d 65 72 72 6f 72 20 7b 55 4e 49 51 55 45  1 -error {UNIQUE
bd70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
bd80: 65 64 3a 20 25 73 7d 20 7b 0a 20 20 31 20 20 20  ed: %s} {.  1   
bd90: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
bda0: 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27   VALUES(1, 'one'
bdb0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  )"             {
bdc0: 7b 74 31 2e 61 7d 7d 0a 20 20 32 20 20 20 20 22  {t1.a}}.  2    "
bdd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
bde0: 41 4c 55 45 53 28 34 2e 33 2c 20 27 74 77 6f 27  ALUES(4.3, 'two'
bdf0: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 74  )"           {{t
be00: 31 2e 61 7d 7d 0a 20 20 33 20 20 20 20 22 49 4e  1.a}}.  3    "IN
be10: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
be20: 55 45 53 28 27 72 65 76 65 61 6c 27 2c 20 27 74  UES('reveal', 't
be30: 68 72 65 65 27 29 22 20 20 20 20 7b 7b 74 31 2e  hree')"    {{t1.
be40: 61 7d 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45  a}}.  4    "INSE
be50: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
be60: 53 28 58 27 31 32 33 34 35 36 27 2c 20 27 66 6f  S(X'123456', 'fo
be70: 75 72 27 29 22 20 20 20 20 7b 7b 74 31 2e 61 7d  ur')"    {{t1.a}
be80: 7d 0a 0a 20 20 35 20 20 20 20 22 55 50 44 41 54  }..  5    "UPDAT
be90: 45 20 74 31 20 53 45 54 20 61 20 3d 20 31 20 57  E t1 SET a = 1 W
bea0: 48 45 52 45 20 72 6f 77 69 64 3d 32 22 20 20 20  HERE rowid=2"   
beb0: 20 20 20 20 20 20 20 20 7b 7b 74 31 2e 61 7d 7d          {{t1.a}}
bec0: 0a 20 20 36 20 20 20 20 22 55 50 44 41 54 45 20  .  6    "UPDATE 
bed0: 74 31 20 53 45 54 20 61 20 3d 20 34 2e 33 20 57  t1 SET a = 4.3 W
bee0: 48 45 52 45 20 72 6f 77 69 64 3d 33 22 20 20 20  HERE rowid=3"   
bef0: 20 20 20 20 20 20 7b 7b 74 31 2e 61 7d 7d 0a 20        {{t1.a}}. 
bf00: 20 37 20 20 20 20 22 55 50 44 41 54 45 20 74 31   7    "UPDATE t1
bf10: 20 53 45 54 20 61 20 3d 20 27 72 65 76 65 61 6c   SET a = 'reveal
bf20: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 34 22  ' WHERE rowid=4"
bf30: 20 20 20 20 7b 7b 74 31 2e 61 7d 7d 0a 20 20 38      {{t1.a}}.  8
bf40: 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53      "UPDATE t1 S
bf50: 45 54 20 61 20 3d 20 58 27 31 32 33 34 35 36 27  ET a = X'123456'
bf60: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20   WHERE rowid=1" 
bf70: 20 20 7b 7b 74 31 2e 61 7d 7d 0a 0a 20 20 39 20    {{t1.a}}..  9 
bf80: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
bf90: 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c  t4 VALUES('xyx',
bfa0: 20 31 2c 20 31 29 22 20 20 20 20 20 20 20 20 20   1, 1)"         
bfb0: 20 7b 7b 74 34 2e 61 2c 20 74 34 2e 62 2c 20 74   {{t4.a, t4.b, t
bfc0: 34 2e 63 7d 7d 0a 20 20 31 30 20 20 20 22 49 4e  4.c}}.  10   "IN
bfd0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
bfe0: 55 45 53 28 27 78 79 78 27 2c 20 32 2c 20 31 29  UES('xyx', 2, 1)
bff0: 22 20 20 20 20 20 20 20 20 20 20 7b 7b 74 34 2e  "          {{t4.
c000: 61 2c 20 74 34 2e 62 2c 20 74 34 2e 63 7d 7d 0a  a, t4.b, t4.c}}.
c010: 20 20 31 31 20 20 20 22 49 4e 53 45 52 54 20 49    11   "INSERT I
c020: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 75  NTO t4 VALUES('u
c030: 76 77 27 2c 20 31 2c 20 31 29 22 20 20 20 20 20  vw', 1, 1)"     
c040: 20 20 20 20 20 7b 7b 74 34 2e 61 2c 20 74 34 2e       {{t4.a, t4.
c050: 62 2c 20 74 34 2e 63 7d 7d 0a 0a 20 20 31 32 20  b, t4.c}}..  12 
c060: 20 20 22 55 50 44 41 54 45 20 74 34 20 53 45 54    "UPDATE t4 SET
c070: 20 61 3d 27 78 79 78 27 20 57 48 45 52 45 20 72   a='xyx' WHERE r
c080: 6f 77 69 64 3d 33 22 20 20 20 20 20 20 20 20 20  owid=3"         
c090: 7b 7b 74 34 2e 61 2c 20 74 34 2e 62 2c 20 74 34  {{t4.a, t4.b, t4
c0a0: 2e 63 7d 7d 0a 20 20 31 33 20 20 20 22 55 50 44  .c}}.  13   "UPD
c0b0: 41 54 45 20 74 34 20 53 45 54 20 62 3d 31 20 57  ATE t4 SET b=1 W
c0c0: 48 45 52 45 20 72 6f 77 69 64 3d 32 22 20 20 20  HERE rowid=2"   
c0d0: 20 20 20 20 20 20 20 20 20 20 7b 7b 74 34 2e 61            {{t4.a
c0e0: 2c 20 74 34 2e 62 2c 20 74 34 2e 63 7d 7d 0a 20  , t4.b, t4.c}}. 
c0f0: 20 31 34 20 20 20 22 55 50 44 41 54 45 20 74 34   14   "UPDATE t4
c100: 20 53 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20 63   SET a=0, b=0, c
c110: 3d 30 22 20 20 20 20 20 20 20 20 20 20 20 20 20  =0"             
c120: 20 20 20 20 7b 7b 74 34 2e 61 2c 20 74 34 2e 62      {{t4.a, t4.b
c130: 2c 20 74 34 2e 63 7d 7d 0a 7d 0a 0a 23 20 45 56  , t4.c}}.}..# EV
c140: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 34  IDENCE-OF: R-004
c150: 30 34 2d 31 37 36 37 30 20 46 6f 72 20 74 68 65  04-17670 For the
c160: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55 4e 49   purposes of UNI
c170: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  QUE constraints,
c180: 0a 23 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61  .# NULL values a
c190: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
c1a0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20  stinct from all 
c1b0: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
c1c0: 63 6c 75 64 69 6e 67 0a 23 20 6f 74 68 65 72 20  cluding.# other 
c1d0: 4e 55 4c 4c 73 2e 0a 23 0a 64 6f 5f 63 72 65 61  NULLs..#.do_crea
c1e0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
c1f0: 38 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45  8 {.  1    "INSE
c200: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
c210: 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20  S(NULL, NULL)"  
c220: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20           {}.  2 
c230: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
c240: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
c250: 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20  NULL)"          
c260: 20 7b 7d 0a 20 20 33 20 20 20 20 22 55 50 44 41   {}.  3    "UPDA
c270: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 4e 55  TE t1 SET a = NU
c280: 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20 20  LL"             
c290: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20           {}.  4 
c2a0: 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45     "UPDATE t1 SE
c2b0: 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20  T b = NULL"     
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2d0: 20 7b 7d 0a 0a 20 20 35 20 20 20 20 22 49 4e 53   {}..  5    "INS
c2e0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
c2f0: 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e  ES(NULL, NULL, N
c300: 55 4c 4c 29 22 20 20 20 20 20 7b 7d 0a 20 20 36  ULL)"     {}.  6
c310: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
c320: 20 74 34 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t4 VALUES(NULL,
c330: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20   NULL, NULL)"   
c340: 20 20 7b 7d 0a 20 20 37 20 20 20 20 22 55 50 44    {}.  7    "UPD
c350: 41 54 45 20 74 34 20 53 45 54 20 61 20 3d 20 4e  ATE t4 SET a = N
c360: 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20  ULL"            
c370: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 38            {}.  8
c380: 20 20 20 20 22 55 50 44 41 54 45 20 74 34 20 53      "UPDATE t4 S
c390: 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20 20 20  ET b = NULL"    
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3b0: 20 20 7b 7d 0a 20 20 39 20 20 20 20 22 55 50 44    {}.  9    "UPD
c3c0: 41 54 45 20 74 34 20 53 45 54 20 63 20 3d 20 4e  ATE t4 SET c = N
c3d0: 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20  ULL"            
c3e0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a            {}.}..
c3f0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
c400: 2d 35 35 38 32 30 2d 32 39 39 38 34 20 49 6e 20  -55820-29984 In 
c410: 6d 6f 73 74 20 63 61 73 65 73 2c 20 55 4e 49 51  most cases, UNIQ
c420: 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b  UE and PRIMARY K
c430: 45 59 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 73  EY.# constraints
c440: 20 61 72 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64   are implemented
c450: 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 75   by creating a u
c460: 6e 69 71 75 65 20 69 6e 64 65 78 20 69 6e 20 74  nique index in t
c470: 68 65 0a 23 20 64 61 74 61 62 61 73 65 2e 0a 64  he.# database..d
c480: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
c490: 73 74 73 20 34 2e 39 20 2d 72 65 70 61 69 72 20  sts 4.9 -repair 
c4a0: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 20  drop_all_tables 
c4b0: 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43  -query {.  SELEC
c4c0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
c4d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
c4e0: 45 52 45 20 74 79 70 65 3d 27 69 6e 64 65 78 27  ERE type='index'
c4f0: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
c500: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 54  ATE TABLE t1(a T
c510: 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
c520: 20 62 29 22 20 20 20 20 20 20 20 20 20 20 20 20   b)"            
c530: 20 20 31 0a 20 20 32 20 20 20 20 22 43 52 45 41    1.  2    "CREA
c540: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e  TE TABLE t1(a IN
c550: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c560: 59 2c 20 62 29 22 20 20 20 20 20 20 20 20 20 20  Y, b)"          
c570: 20 30 0a 20 20 33 20 20 20 20 22 43 52 45 41 54   0.  3    "CREAT
c580: 45 20 54 41 42 4c 45 20 74 31 28 61 20 54 45 58  E TABLE t1(a TEX
c590: 54 20 55 4e 49 51 55 45 2c 20 62 29 22 20 20 20  T UNIQUE, b)"   
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5b0: 31 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  1.  4    "CREATE
c5c0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
c5d0: 41 52 59 20 4b 45 59 2c 20 62 20 54 45 58 54 20  ARY KEY, b TEXT 
c5e0: 55 4e 49 51 55 45 29 22 20 20 20 20 20 20 20 32  UNIQUE)"       2
c5f0: 0a 20 20 35 20 20 20 20 22 43 52 45 41 54 45 20  .  5    "CREATE 
c600: 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41  TABLE t1(a PRIMA
c610: 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 55 4e  RY KEY, b, c, UN
c620: 49 51 55 45 28 63 2c 20 62 29 29 22 20 20 32 0a  IQUE(c, b))"  2.
c630: 7d 0a 0a 23 20 4f 62 73 6f 6c 65 74 65 3a 20 52  }..# Obsolete: R
c640: 2d 30 32 32 35 32 2d 33 33 31 31 36 20 53 75 63  -02252-33116 Suc
c650: 68 20 61 6e 20 69 6e 64 65 78 20 69 73 20 75 73  h an index is us
c660: 65 64 20 6c 69 6b 65 20 61 6e 79 20 6f 74 68 65  ed like any othe
c670: 72 20 69 6e 64 65 78 0a 23 20 69 6e 20 74 68 65  r index.# in the
c680: 20 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70 74   database to opt
c690: 69 6d 69 7a 65 20 71 75 65 72 69 65 73 2e 0a 23  imize queries..#
c6a0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
c6b0: 20 34 2e 31 30 2e 30 20 7b 0a 20 20 43 52 45 41   4.10.0 {.  CREA
c6c0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
c6d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
c6e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
c6f0: 28 61 2c 20 62 2c 20 63 2c 20 55 4e 49 51 55 45  (a, b, c, UNIQUE
c700: 28 62 2c 20 63 29 29 3b 0a 7d 0a 64 6f 5f 63 72  (b, c));.}.do_cr
c710: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
c720: 34 2e 31 30 20 7b 0a 20 20 31 20 20 20 20 22 45  4.10 {.  1    "E
c730: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
c740: 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  N SELECT * FROM 
c750: 74 31 20 57 48 45 52 45 20 62 20 3d 20 35 22 20  t1 WHERE b = 5" 
c760: 0a 20 20 20 20 20 20 20 7b 30 20 30 20 30 20 7b  .       {0 0 0 {
c770: 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31 20  SEARCH TABLE t1 
c780: 55 53 49 4e 47 20 49 4e 44 45 58 20 73 71 6c 69  USING INDEX sqli
c790: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 31 5f  te_autoindex_t1_
c7a0: 31 20 28 62 3d 3f 29 7d 7d 0a 0a 20 20 32 20 20  1 (b=?)}}..  2  
c7b0: 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59    "EXPLAIN QUERY
c7c0: 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46   PLAN SELECT * F
c7d0: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
c7e0: 62 2c 20 63 22 0a 20 20 20 20 20 20 20 7b 30 20  b, c".       {0 
c7f0: 30 20 30 20 7b 53 43 41 4e 20 54 41 42 4c 45 20  0 0 {SCAN TABLE 
c800: 74 32 20 55 53 49 4e 47 20 49 4e 44 45 58 20 73  t2 USING INDEX s
c810: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
c820: 74 32 5f 31 7d 7d 0a 0a 20 20 33 20 20 20 20 22  t2_1}}..  3    "
c830: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
c840: 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AN SELECT * FROM
c850: 20 74 32 20 57 48 45 52 45 20 62 3d 31 30 20 41   t2 WHERE b=10 A
c860: 4e 44 20 63 3e 31 30 22 0a 20 20 20 20 20 20 20  ND c>10".       
c870: 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54  {0 0 0 {SEARCH T
c880: 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 49 4e  ABLE t2 USING IN
c890: 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69  DEX sqlite_autoi
c8a0: 6e 64 65 78 5f 74 32 5f 31 20 28 62 3d 3f 20 41  ndex_t2_1 (b=? A
c8b0: 4e 44 20 63 3e 3f 29 7d 7d 0a 7d 0a 0a 23 20 45  ND c>?)}}.}..# E
c8c0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
c8d0: 34 39 33 2d 33 35 36 35 33 20 41 20 43 48 45 43  493-35653 A CHEC
c8e0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  K constraint may
c8f0: 20 62 65 20 61 74 74 61 63 68 65 64 20 74 6f 20   be attached to 
c900: 61 0a 23 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  a.# column defin
c910: 69 74 69 6f 6e 20 6f 72 20 73 70 65 63 69 66 69  ition or specifi
c920: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
c930: 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70 72 61  nstraint. In pra
c940: 63 74 69 63 65 20 69 74 0a 23 20 6d 61 6b 65 73  ctice it.# makes
c950: 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 0a   no difference..
c960: 23 0a 23 20 20 20 41 6c 6c 20 74 68 65 20 74 65  #.#   All the te
c970: 73 74 73 20 74 68 61 74 20 64 65 61 6c 20 77 69  sts that deal wi
c980: 74 68 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  th CHECK constra
c990: 69 6e 74 73 20 62 65 6c 6f 77 20 28 34 2e 31 31  ints below (4.11
c9a0: 2e 2a 20 61 6e 64 20 0a 23 20 20 20 34 2e 31 32  .* and .#   4.12
c9b0: 2e 2a 29 20 61 72 65 20 72 75 6e 20 6f 6e 63 65  .*) are run once
c9c0: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74   for a table wit
c9d0: 68 20 74 68 65 20 63 68 65 63 6b 20 63 6f 6e 73  h the check cons
c9e0: 74 72 61 69 6e 74 20 61 74 74 61 63 68 65 64 0a  traint attached.
c9f0: 23 20 20 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  #   to a column 
ca00: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 61 6e 64 20  definition, and 
ca10: 6f 6e 63 65 20 77 69 74 68 20 61 20 74 61 62 6c  once with a tabl
ca20: 65 20 77 68 65 72 65 20 74 68 65 20 63 68 65 63  e where the chec
ca30: 6b 20 0a 23 20 20 20 63 6f 6e 64 69 74 69 6f 6e  k .#   condition
ca40: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
ca50: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
ca60: 69 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  int..#.# EVIDENC
ca70: 45 2d 4f 46 3a 20 52 2d 35 35 34 33 35 2d 31 34  E-OF: R-55435-14
ca80: 33 30 33 20 45 61 63 68 20 74 69 6d 65 20 61 20  303 Each time a 
ca90: 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72  new row is inser
caa0: 74 65 64 20 69 6e 74 6f 20 74 68 65 0a 23 20 74  ted into the.# t
cab0: 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74  able or an exist
cac0: 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61 74  ing row is updat
cad0: 65 64 2c 20 74 68 65 20 65 78 70 72 65 73 73 69  ed, the expressi
cae0: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
caf0: 74 68 0a 23 20 65 61 63 68 20 43 48 45 43 4b 20  th.# each CHECK 
cb00: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76  constraint is ev
cb10: 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74  aluated and cast
cb20: 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61   to a NUMERIC va
cb30: 6c 75 65 20 69 6e 20 74 68 65 0a 23 20 73 61 6d  lue in the.# sam
cb40: 65 20 77 61 79 20 61 73 20 61 20 43 41 53 54 20  e way as a CAST 
cb50: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 66 20 74  expression. If t
cb60: 68 65 20 72 65 73 75 6c 74 20 69 73 20 7a 65 72  he result is zer
cb70: 6f 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65  o (integer value
cb80: 20 30 0a 23 20 6f 72 20 72 65 61 6c 20 76 61 6c   0.# or real val
cb90: 75 65 20 30 2e 30 29 2c 20 74 68 65 6e 20 61 20  ue 0.0), then a 
cba0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
cbb0: 74 69 6f 6e 20 68 61 73 20 6f 63 63 75 72 72 65  tion has occurre
cbc0: 64 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  d..#.drop_all_ta
cbd0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
cbe0: 74 65 73 74 20 34 2e 31 31 20 7b 0a 20 20 43 52  test 4.11 {.  CR
cbf0: 45 41 54 45 20 54 41 42 4c 45 20 78 31 28 61 20  EATE TABLE x1(a 
cc00: 54 45 58 54 2c 20 62 20 49 4e 54 45 47 45 52 20  TEXT, b INTEGER 
cc10: 43 48 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20  CHECK( b>0 ));. 
cc20: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
cc30: 28 61 20 54 45 58 54 2c 20 62 20 49 4e 54 45 47  (a TEXT, b INTEG
cc40: 45 52 2c 20 43 48 45 43 4b 28 20 62 3e 30 20 29  ER, CHECK( b>0 )
cc50: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
cc60: 20 78 31 20 56 41 4c 55 45 53 28 27 78 27 2c 20   x1 VALUES('x', 
cc70: 27 78 78 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  'xx');.  INSERT 
cc80: 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27  INTO x1 VALUES('
cc90: 79 27 2c 20 27 79 79 27 29 3b 0a 20 20 49 4e 53  y', 'yy');.  INS
cca0: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
ccb0: 43 54 20 2a 20 46 52 4f 4d 20 78 31 3b 0a 0a 20  CT * FROM x1;.. 
ccc0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 32   CREATE TABLE x2
ccd0: 28 61 20 43 48 45 43 4b 28 20 61 7c 7c 62 20 29  (a CHECK( a||b )
cce0: 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , b);.  CREATE T
ccf0: 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 43 48  ABLE t2(a, b, CH
cd00: 45 43 4b 28 20 61 7c 7c 62 20 29 29 3b 0a 20 20  ECK( a||b ));.  
cd10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56  INSERT INTO x2 V
cd20: 41 4c 55 45 53 28 31 2c 20 27 78 78 27 29 3b 0a  ALUES(1, 'xx');.
cd30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32    INSERT INTO x2
cd40: 20 56 41 4c 55 45 53 28 31 2c 20 27 79 79 27 29   VALUES(1, 'yy')
cd50: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
cd60: 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  t2 SELECT * FROM
cd70: 20 78 32 3b 0a 7d 0a 0a 64 6f 5f 63 72 65 61 74   x2;.}..do_creat
cd80: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 31  etable_tests 4.1
cd90: 31 20 2d 65 72 72 6f 72 20 7b 43 48 45 43 4b 20  1 -error {CHECK 
cda0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
cdb0: 64 3a 20 25 73 7d 20 7b 0a 20 20 31 61 20 20 20  d: %s} {.  1a   
cdc0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31   "INSERT INTO x1
cdd0: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 30   VALUES('one', 0
cde0: 29 22 20 20 20 20 20 20 20 7b 78 31 7d 0a 20 20  )"       {x1}.  
cdf0: 31 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  1b    "INSERT IN
ce00: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
ce10: 65 27 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b 74  e', -4.0)"    {t
ce20: 31 7d 0a 0a 20 20 32 61 20 20 20 20 22 49 4e 53  1}..  2a    "INS
ce30: 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55  ERT INTO x2 VALU
ce40: 45 53 28 27 61 62 63 27 2c 20 31 29 22 20 20 20  ES('abc', 1)"   
ce50: 20 20 20 20 7b 78 32 7d 0a 20 20 32 62 20 20 20      {x2}.  2b   
ce60: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
ce70: 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20 31   VALUES('abc', 1
ce80: 29 22 20 20 20 20 20 20 20 7b 74 32 7d 0a 0a 20  )"       {t2}.. 
ce90: 20 33 61 20 20 20 20 22 49 4e 53 45 52 54 20 49   3a    "INSERT I
cea0: 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28 30 2c  NTO x2 VALUES(0,
ceb0: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 7b   'abc')"       {
cec0: 78 32 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53  x2}.  3b    "INS
ced0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
cee0: 45 53 28 30 2c 20 27 61 62 63 27 29 22 20 20 20  ES(0, 'abc')"   
cef0: 20 20 20 20 7b 74 32 7d 0a 0a 20 20 34 61 20 20      {t2}..  4a  
cf00: 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54    "UPDATE t1 SET
cf10: 20 62 3d 2d 31 20 57 48 45 52 45 20 72 6f 77 69   b=-1 WHERE rowi
cf20: 64 3d 31 22 20 20 20 20 20 20 7b 74 31 7d 0a 20  d=1"      {t1}. 
cf30: 20 34 62 20 20 20 20 22 55 50 44 41 54 45 20 78   4b    "UPDATE x
cf40: 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45 52 45  1 SET b=-1 WHERE
cf50: 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20 20 7b   rowid=1"      {
cf60: 78 31 7d 0a 0a 20 20 34 61 20 20 20 20 22 55 50  x1}..  4a    "UP
cf70: 44 41 54 45 20 78 32 20 53 45 54 20 61 3d 27 27  DATE x2 SET a=''
cf80: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20   WHERE rowid=1" 
cf90: 20 20 20 20 20 7b 78 32 7d 0a 20 20 34 62 20 20       {x2}.  4b  
cfa0: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
cfb0: 20 61 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69   a='' WHERE rowi
cfc0: 64 3d 31 22 20 20 20 20 20 20 7b 74 32 7d 0a 7d  d=1"      {t2}.}
cfd0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
cfe0: 20 52 2d 33 34 31 30 39 2d 33 39 31 30 38 20 49   R-34109-39108 I
cff0: 66 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72  f the CHECK expr
d000: 65 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73  ession evaluates
d010: 20 74 6f 20 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61   to NULL,.# or a
d020: 6e 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72  ny other non-zer
d030: 6f 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e  o value, it is n
d040: 6f 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ot a constraint 
d050: 76 69 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f  violation..#.do_
d060: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
d070: 73 20 34 2e 31 32 20 7b 0a 20 20 31 61 20 20 20  s 4.12 {.  1a   
d080: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31   "INSERT INTO x1
d090: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e   VALUES('one', N
d0a0: 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 20 20 31 62  ULL)"    {}.  1b
d0b0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
d0c0: 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   t1 VALUES('one'
d0d0: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a  , NULL)"    {}..
d0e0: 20 20 32 61 20 20 20 20 22 49 4e 53 45 52 54 20    2a    "INSERT 
d0f0: 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27  INTO x1 VALUES('
d100: 6f 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a  one', 2)"    {}.
d110: 20 20 32 62 20 20 20 20 22 49 4e 53 45 52 54 20    2b    "INSERT 
d120: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
d130: 6f 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a  one', 2)"    {}.
d140: 0a 20 20 33 61 20 20 20 20 22 49 4e 53 45 52 54  .  3a    "INSERT
d150: 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28   INTO x2 VALUES(
d160: 31 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20  1, 'abc')"      
d170: 20 7b 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53   {}.  3b    "INS
d180: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
d190: 45 53 28 31 2c 20 27 61 62 63 27 29 22 20 20 20  ES(1, 'abc')"   
d1a0: 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44      {}.}..# EVID
d1b0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 30 36 30  ENCE-OF: R-02060
d1c0: 2d 36 34 35 34 37 20 41 20 4e 4f 54 20 4e 55 4c  -64547 A NOT NUL
d1d0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79  L constraint may
d1e0: 20 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65   only be attache
d1f0: 64 0a 23 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  d.# to a column 
d200: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20  definition, not 
d210: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
d220: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
d230: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
d240: 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  es.do_createtabl
d250: 65 5f 74 65 73 74 73 20 34 2e 31 33 2e 31 20 7b  e_tests 4.13.1 {
d260: 0a 20 20 31 20 20 20 20 20 22 43 52 45 41 54 45  .  1     "CREATE
d270: 20 54 41 42 4c 45 20 74 31 28 61 20 4e 4f 54 20   TABLE t1(a NOT 
d280: 4e 55 4c 4c 2c 20 62 29 22 20 20 20 20 20 20 20  NULL, b)"       
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
d2b0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
d2c0: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
d2d0: 59 20 4e 4f 54 20 4e 55 4c 4c 2c 20 62 29 22 20  Y NOT NULL, b)" 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 20 20 7b 7d 0a 20 20 33 20 20 20 20 20 22 43 52    {}.  3     "CR
d300: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20  EATE TABLE t3(a 
d310: 4e 4f 54 20 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20  NOT NULL, b NOT 
d320: 4e 55 4c 4c 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c  NULL, c NOT NULL
d330: 20 55 4e 49 51 55 45 29 22 20 20 20 7b 7d 0a 7d   UNIQUE)"   {}.}
d340: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
d350: 74 65 73 74 73 20 34 2e 31 33 2e 32 20 2d 65 72  tests 4.13.2 -er
d360: 72 6f 72 20 7b 0a 20 20 6e 65 61 72 20 22 4e 4f  ror {.  near "NO
d370: 54 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72  T": syntax error
d380: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 20 22 43 52  .} {.  1     "CR
d390: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
d3a0: 20 62 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29   b, NOT NULL(a))
d3b0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
d3c0: 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22      {}.  2     "
d3d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
d3e0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
d3f0: 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20  , NOT NULL(a))" 
d400: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
d410: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
d420: 34 28 61 2c 20 62 2c 20 63 20 55 4e 49 51 55 45  4(a, b, c UNIQUE
d430: 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 2c 20 62 2c  , NOT NULL(a, b,
d440: 20 63 29 29 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20   c))"   {}.}..# 
d450: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
d460: 31 37 39 35 2d 35 37 36 34 33 20 61 20 4e 4f 54  1795-57643 a NOT
d470: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
d480: 20 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74   dictates that t
d490: 68 65 0a 23 20 61 73 73 6f 63 69 61 74 65 64 20  he.# associated 
d4a0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63  column may not c
d4b0: 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61  ontain a NULL va
d4c0: 6c 75 65 2e 20 41 74 74 65 6d 70 74 69 6e 67 20  lue. Attempting 
d4d0: 74 6f 20 73 65 74 20 74 68 65 0a 23 20 63 6f 6c  to set the.# col
d4e0: 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  umn value to NUL
d4f0: 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67  L when inserting
d500: 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 20 75 70   a new row or up
d510: 64 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69  dating an existi
d520: 6e 67 0a 23 20 6f 6e 65 20 63 61 75 73 65 73 20  ng.# one causes 
d530: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
d540: 6c 61 74 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20  lation..#.#     
d550: 54 68 65 73 65 20 74 65 73 74 73 20 75 73 65 20  These tests use 
d560: 74 68 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  the tables creat
d570: 65 64 20 62 79 20 34 2e 31 33 2e 0a 23 0a 64 6f  ed by 4.13..#.do
d580: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
d590: 31 34 2e 30 20 7b 0a 20 20 49 4e 53 45 52 54 20  14.0 {.  INSERT 
d5a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
d5b0: 78 27 2c 20 27 79 27 29 3b 0a 20 20 49 4e 53 45  x', 'y');.  INSE
d5c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
d5d0: 53 28 27 7a 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20  S('z', NULL);.. 
d5e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
d5f0: 56 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29  VALUES('x', 'y')
d600: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
d610: 74 32 20 56 41 4c 55 45 53 28 27 7a 27 2c 20 4e  t2 VALUES('z', N
d620: 55 4c 4c 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  ULL);..  INSERT 
d630: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27  INTO t3 VALUES('
d640: 78 27 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20  x', 'y', 'z');. 
d650: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
d660: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
d670: 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
d680: 65 5f 74 65 73 74 73 20 34 2e 31 34 20 2d 65 72  e_tests 4.14 -er
d690: 72 6f 72 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ror {NOT NULL co
d6a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
d6b0: 20 25 73 7d 20 7b 0a 20 20 31 20 20 20 20 22 49   %s} {.  1    "I
d6c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
d6d0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 61 27 29 22  LUES(NULL, 'a')"
d6e0: 20 20 20 20 20 20 20 20 20 7b 74 31 2e 61 7d 0a           {t1.a}.
d6f0: 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49    2    "INSERT I
d700: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e 55  NTO t2 VALUES(NU
d710: 4c 4c 2c 20 27 62 27 29 22 20 20 20 20 20 20 20  LL, 'b')"       
d720: 20 20 7b 74 32 2e 61 7d 0a 20 20 33 20 20 20 20    {t2.a}.  3    
d730: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20  "INSERT INTO t3 
d740: 56 41 4c 55 45 53 28 27 63 27 2c 20 27 64 27 2c  VALUES('c', 'd',
d750: 20 4e 55 4c 4c 29 22 20 20 20 20 7b 74 33 2e 63   NULL)"    {t3.c
d760: 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54  }.  4    "INSERT
d770: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
d780: 27 65 27 2c 20 4e 55 4c 4c 2c 20 27 66 27 29 22  'e', NULL, 'f')"
d790: 20 20 20 20 7b 74 33 2e 62 7d 0a 20 20 35 20 20      {t3.b}.  5  
d7a0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
d7b0: 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27  3 VALUES(NULL, '
d7c0: 67 27 2c 20 27 68 27 29 22 20 20 20 20 7b 74 33  g', 'h')"    {t3
d7d0: 2e 61 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  .a}.}..# EVIDENC
d7e0: 45 2d 4f 46 3a 20 52 2d 34 32 35 31 31 2d 33 39  E-OF: R-42511-39
d7f0: 34 35 39 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  459 PRIMARY KEY,
d800: 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
d810: 4e 55 4c 4c 0a 23 20 63 6f 6e 73 74 72 61 69 6e  NULL.# constrain
d820: 74 73 20 6d 61 79 20 62 65 20 65 78 70 6c 69 63  ts may be explic
d830: 69 74 6c 79 20 61 73 73 69 67 6e 65 64 20 61 20  itly assigned a 
d840: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
d850: 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 23 20 61 6c   resolution.# al
d860: 67 6f 72 69 74 68 6d 20 62 79 20 69 6e 63 6c 75  gorithm by inclu
d870: 64 69 6e 67 20 61 20 63 6f 6e 66 6c 69 63 74 2d  ding a conflict-
d880: 63 6c 61 75 73 65 20 69 6e 20 74 68 65 69 72 20  clause in their 
d890: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 23 0a 23  definitions..#.#
d8a0: 20 20 20 20 20 43 6f 6e 66 6c 69 63 74 20 63 6c       Conflict cl
d8b0: 61 75 73 65 73 3a 20 41 42 4f 52 54 2c 20 52 4f  auses: ABORT, RO
d8c0: 4c 4c 42 41 43 4b 2c 20 49 47 4e 4f 52 45 2c 20  LLBACK, IGNORE, 
d8d0: 46 41 49 4c 2c 20 52 45 50 4c 41 43 45 0a 23 0a  FAIL, REPLACE.#.
d8e0: 23 20 20 20 20 20 54 65 73 74 20 63 61 73 65 73  #     Test cases
d8f0: 20 34 2e 31 35 2e 2a 2c 20 34 2e 31 36 2e 2a 20   4.15.*, 4.16.* 
d900: 61 6e 64 20 34 2e 31 37 2e 2a 20 66 6f 63 75 73  and 4.17.* focus
d910: 20 6f 6e 20 50 52 49 4d 41 52 59 20 4b 45 59 2c   on PRIMARY KEY,
d920: 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 20 20 20 20   NOT NULL.#     
d930: 61 6e 64 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  and UNIQUE const
d940: 72 61 69 6e 74 73 2c 20 72 65 73 70 65 63 74 69  raints, respecti
d950: 76 65 6c 79 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  vely..#.drop_all
d960: 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73  _tables.do_execs
d970: 71 6c 5f 74 65 73 74 20 34 2e 31 35 2e 30 20 7b  ql_test 4.15.0 {
d980: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
d990: 74 31 5f 61 62 28 61 20 50 52 49 4d 41 52 59 20  t1_ab(a PRIMARY 
d9a0: 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  KEY ON CONFLICT 
d9b0: 41 42 4f 52 54 2c 20 62 29 3b 0a 20 20 43 52 45  ABORT, b);.  CRE
d9c0: 41 54 45 20 54 41 42 4c 45 20 74 31 5f 72 6f 28  ATE TABLE t1_ro(
d9d0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e  a PRIMARY KEY ON
d9e0: 20 43 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41   CONFLICT ROLLBA
d9f0: 43 4b 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  CK, b);.  CREATE
da00: 20 54 41 42 4c 45 20 74 31 5f 69 67 28 61 20 50   TABLE t1_ig(a P
da10: 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f  RIMARY KEY ON CO
da20: 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 20 62  NFLICT IGNORE, b
da30: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
da40: 45 20 74 31 5f 66 61 28 61 20 50 52 49 4d 41 52  E t1_fa(a PRIMAR
da50: 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43  Y KEY ON CONFLIC
da60: 54 20 46 41 49 4c 2c 20 62 29 3b 0a 20 20 43 52  T FAIL, b);.  CR
da70: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 72 65  EATE TABLE t1_re
da80: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f  (a PRIMARY KEY O
da90: 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41  N CONFLICT REPLA
daa0: 43 45 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  CE, b);.  CREATE
dab0: 20 54 41 42 4c 45 20 74 31 5f 78 78 28 61 20 50   TABLE t1_xx(a P
dac0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a  RIMARY KEY, b);.
dad0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
dae0: 31 5f 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27  1_ab VALUES(1, '
daf0: 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  one');.  INSERT 
db00: 49 4e 54 4f 20 74 31 5f 61 62 20 56 41 4c 55 45  INTO t1_ab VALUE
db10: 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49  S(2, 'two');.  I
db20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 72 6f  NSERT INTO t1_ro
db30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
db40: 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  1_ab;.  INSERT I
db50: 4e 54 4f 20 74 31 5f 69 67 20 53 45 4c 45 43 54  NTO t1_ig SELECT
db60: 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20   * FROM t1_ab;. 
db70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f   INSERT INTO t1_
db80: 66 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  fa SELECT * FROM
db90: 20 74 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54   t1_ab;.  INSERT
dba0: 20 49 4e 54 4f 20 74 31 5f 72 65 20 53 45 4c 45   INTO t1_re SELE
dbb0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b  CT * FROM t1_ab;
dbc0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
dbd0: 31 5f 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52  1_xx SELECT * FR
dbe0: 4f 4d 20 74 31 5f 61 62 3b 0a 0a 20 20 43 52 45  OM t1_ab;..  CRE
dbf0: 41 54 45 20 54 41 42 4c 45 20 74 32 5f 61 62 28  ATE TABLE t2_ab(
dc00: 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e  a, b NOT NULL ON
dc10: 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54 29   CONFLICT ABORT)
dc20: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
dc30: 20 74 32 5f 72 6f 28 61 2c 20 62 20 4e 4f 54 20   t2_ro(a, b NOT 
dc40: 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  NULL ON CONFLICT
dc50: 20 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 43 52   ROLLBACK);.  CR
dc60: 45 41 54 45 20 54 41 42 4c 45 20 74 32 5f 69 67  EATE TABLE t2_ig
dc70: 28 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f  (a, b NOT NULL O
dc80: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
dc90: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
dca0: 4c 45 20 74 32 5f 66 61 28 61 2c 20 62 20 4e 4f  LE t2_fa(a, b NO
dcb0: 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49  T NULL ON CONFLI
dcc0: 43 54 20 46 41 49 4c 29 3b 0a 20 20 43 52 45 41  CT FAIL);.  CREA
dcd0: 54 45 20 54 41 42 4c 45 20 74 32 5f 72 65 28 61  TE TABLE t2_re(a
dce0: 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20  , b NOT NULL ON 
dcf0: 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41 43 45  CONFLICT REPLACE
dd00: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
dd10: 45 20 74 32 5f 78 78 28 61 2c 20 62 20 4e 4f 54  E t2_xx(a, b NOT
dd20: 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49 4e 53 45 52   NULL);..  INSER
dd30: 54 20 49 4e 54 4f 20 74 32 5f 61 62 20 56 41 4c  T INTO t2_ab VAL
dd40: 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20  UES(1, 'one');. 
dd50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f   INSERT INTO t2_
dd60: 61 62 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  ab VALUES(2, 'tw
dd70: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
dd80: 54 4f 20 74 32 5f 72 6f 20 53 45 4c 45 43 54 20  TO t2_ro SELECT 
dd90: 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20  * FROM t2_ab;.  
dda0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 69  INSERT INTO t2_i
ddb0: 67 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  g SELECT * FROM 
ddc0: 74 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20  t2_ab;.  INSERT 
ddd0: 49 4e 54 4f 20 74 32 5f 66 61 20 53 45 4c 45 43  INTO t2_fa SELEC
dde0: 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a  T * FROM t2_ab;.
ddf0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
de00: 5f 72 65 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  _re SELECT * FRO
de10: 4d 20 74 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52  M t2_ab;.  INSER
de20: 54 20 49 4e 54 4f 20 74 32 5f 78 78 20 53 45 4c  T INTO t2_xx SEL
de30: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62  ECT * FROM t2_ab
de40: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  ;..  CREATE TABL
de50: 45 20 74 33 5f 61 62 28 61 2c 20 62 2c 20 55 4e  E t3_ab(a, b, UN
de60: 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f  IQUE(a, b) ON CO
de70: 4e 46 4c 49 43 54 20 41 42 4f 52 54 29 3b 0a 20  NFLICT ABORT);. 
de80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
de90: 5f 72 6f 28 61 2c 20 62 2c 20 55 4e 49 51 55 45  _ro(a, b, UNIQUE
dea0: 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49  (a, b) ON CONFLI
deb0: 43 54 20 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  CT ROLLBACK);.  
dec0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 5f  CREATE TABLE t3_
ded0: 69 67 28 61 2c 20 62 2c 20 55 4e 49 51 55 45 28  ig(a, b, UNIQUE(
dee0: 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43  a, b) ON CONFLIC
def0: 54 20 49 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45  T IGNORE);.  CRE
df00: 41 54 45 20 54 41 42 4c 45 20 74 33 5f 66 61 28  ATE TABLE t3_fa(
df10: 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20  a, b, UNIQUE(a, 
df20: 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 46  b) ON CONFLICT F
df30: 41 49 4c 29 3b 0a 20 20 43 52 45 41 54 45 20 54  AIL);.  CREATE T
df40: 41 42 4c 45 20 74 33 5f 72 65 28 61 2c 20 62 2c  ABLE t3_re(a, b,
df50: 20 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e   UNIQUE(a, b) ON
df60: 20 43 4f 4e 46 4c 49 43 54 20 52 45 50 4c 41 43   CONFLICT REPLAC
df70: 45 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  E);.  CREATE TAB
df80: 4c 45 20 74 33 5f 78 78 28 61 2c 20 62 2c 20 55  LE t3_xx(a, b, U
df90: 4e 49 51 55 45 28 61 2c 20 62 29 29 3b 0a 0a 20  NIQUE(a, b));.. 
dfa0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f   INSERT INTO t3_
dfb0: 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e  ab VALUES(1, 'on
dfc0: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
dfd0: 54 4f 20 74 33 5f 61 62 20 56 41 4c 55 45 53 28  TO t3_ab VALUES(
dfe0: 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53  2, 'two');.  INS
dff0: 45 52 54 20 49 4e 54 4f 20 74 33 5f 72 6f 20 53  ERT INTO t3_ro S
e000: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f  ELECT * FROM t3_
e010: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
e020: 4f 20 74 33 5f 69 67 20 53 45 4c 45 43 54 20 2a  O t3_ig SELECT *
e030: 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49   FROM t3_ab;.  I
e040: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f 66 61  NSERT INTO t3_fa
e050: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
e060: 33 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  3_ab;.  INSERT I
e070: 4e 54 4f 20 74 33 5f 72 65 20 53 45 4c 45 43 54  NTO t3_re SELECT
e080: 20 2a 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20   * FROM t3_ab;. 
e090: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f   INSERT INTO t3_
e0a0: 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  xx SELECT * FROM
e0b0: 20 74 33 5f 61 62 3b 0a 7d 0a 0a 66 6f 72 65 61   t3_ab;.}..forea
e0c0: 63 68 20 7b 74 6e 20 74 62 6c 20 72 65 73 20 61  ch {tn tbl res a
e0d0: 63 20 64 61 74 61 7d 20 7b 0a 20 20 31 20 20 20  c data} {.  1   
e0e0: 74 31 5f 61 62 20 20 20 20 7b 31 20 7b 55 4e 49  t1_ab    {1 {UNI
e0f0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
e100: 61 69 6c 65 64 3a 20 74 31 5f 61 62 2e 61 7d 7d  ailed: t1_ab.a}}
e110: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e120: 33 20 74 68 72 65 65 7d 0a 20 20 32 20 20 20 74  3 three}.  2   t
e130: 31 5f 72 6f 20 20 20 20 7b 31 20 7b 55 4e 49 51  1_ro    {1 {UNIQ
e140: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
e150: 69 6c 65 64 3a 20 74 31 5f 72 6f 2e 61 7d 7d 20  iled: t1_ro.a}} 
e160: 31 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a  1 {1 one 2 two}.
e170: 20 20 33 20 20 20 74 31 5f 66 61 20 20 20 20 7b    3   t1_fa    {
e180: 31 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  1 {UNIQUE constr
e190: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 31 5f  aint failed: t1_
e1a0: 66 61 2e 61 7d 7d 20 30 20 7b 31 20 6f 6e 65 20  fa.a}} 0 {1 one 
e1b0: 32 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20  2 two 3 three 4 
e1c0: 73 74 72 69 6e 67 7d 0a 20 20 34 20 20 20 74 31  string}.  4   t1
e1d0: 5f 69 67 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20  _ig    {0 {}} 0 
e1e0: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74  {1 one 2 two 3 t
e1f0: 68 72 65 65 20 34 20 73 74 72 69 6e 67 20 36 20  hree 4 string 6 
e200: 73 74 72 69 6e 67 7d 0a 20 20 35 20 20 20 74 31  string}.  5   t1
e210: 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20  _re    {0 {}} 0 
e220: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 34 20 73  {1 one 2 two 4 s
e230: 74 72 69 6e 67 20 33 20 73 74 72 69 6e 67 20 36  tring 3 string 6
e240: 20 73 74 72 69 6e 67 7d 0a 20 20 36 20 20 20 74   string}.  6   t
e250: 31 5f 78 78 20 20 20 20 7b 31 20 7b 55 4e 49 51  1_xx    {1 {UNIQ
e260: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
e270: 69 6c 65 64 3a 20 74 31 5f 78 78 2e 61 7d 7d 20  iled: t1_xx.a}} 
e280: 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33  0 {1 one 2 two 3
e290: 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61   three}.} {.  ca
e2a0: 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20  tchsql COMMIT.  
e2b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
e2c0: 20 34 2e 31 35 2e 24 74 6e 2e 31 20 22 42 45 47   4.15.$tn.1 "BEG
e2d0: 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  IN; INSERT INTO 
e2e0: 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c 20 27  $tbl VALUES(3, '
e2f0: 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63  three')"..  do_c
e300: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31  atchsql_test 4.1
e310: 35 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20 20 49  5.$tn.2 " .    I
e320: 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20  NSERT INTO $tbl 
e330: 53 45 4c 45 43 54 20 28 28 61 25 32 29 2a 61 2b  SELECT ((a%2)*a+
e340: 33 29 2c 20 27 73 74 72 69 6e 67 27 20 46 52 4f  3), 'string' FRO
e350: 4d 20 24 74 62 6c 3b 0a 20 20 22 20 24 72 65 73  M $tbl;.  " $res
e360: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 65 5f 63 72  ..  do_test e_cr
e370: 65 61 74 65 74 61 62 6c 65 2d 34 2e 31 35 2e 24  eatetable-4.15.$
e380: 74 6e 2e 33 20 7b 20 73 71 6c 69 74 65 33 5f 67  tn.3 { sqlite3_g
e390: 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64 62  et_autocommit db
e3a0: 20 7d 20 24 61 63 0a 20 20 64 6f 5f 65 78 65 63   } $ac.  do_exec
e3b0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 35 2e 24 74  sql_test 4.15.$t
e3c0: 6e 2e 34 20 22 53 45 4c 45 43 54 20 2a 20 46 52  n.4 "SELECT * FR
e3d0: 4f 4d 20 24 74 62 6c 22 20 24 64 61 74 61 0a 7d  OM $tbl" $data.}
e3e0: 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c  .foreach {tn tbl
e3f0: 20 72 65 73 20 61 63 20 64 61 74 61 7d 20 7b 0a   res ac data} {.
e400: 20 20 31 20 20 20 74 32 5f 61 62 20 20 20 20 7b    1   t2_ab    {
e410: 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  1 {NOT NULL cons
e420: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 74  traint failed: t
e430: 32 5f 61 62 2e 62 7d 7d 20 30 20 7b 31 20 6f 6e  2_ab.b}} 0 {1 on
e440: 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d  e 2 two 3 three}
e450: 0a 20 20 32 20 20 20 74 32 5f 72 6f 20 20 20 20  .  2   t2_ro    
e460: 7b 31 20 7b 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  {1 {NOT NULL con
e470: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
e480: 74 32 5f 72 6f 2e 62 7d 7d 20 31 20 7b 31 20 6f  t2_ro.b}} 1 {1 o
e490: 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20 20 20  ne 2 two}.  3   
e4a0: 74 32 5f 66 61 20 20 20 20 7b 31 20 7b 4e 4f 54  t2_fa    {1 {NOT
e4b0: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
e4c0: 20 66 61 69 6c 65 64 3a 20 74 32 5f 66 61 2e 62   failed: t2_fa.b
e4d0: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e4e0: 6f 20 33 20 74 68 72 65 65 20 34 20 78 78 7d 0a  o 3 three 4 xx}.
e4f0: 20 20 34 20 20 20 74 32 5f 69 67 20 20 20 20 7b    4   t2_ig    {
e500: 30 20 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32  0 {}} 0 {1 one 2
e510: 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20 78   two 3 three 4 x
e520: 78 20 36 20 78 78 7d 0a 20 20 35 20 20 20 74 32  x 6 xx}.  5   t2
e530: 5f 72 65 20 20 20 20 7b 31 20 7b 4e 4f 54 20 4e  _re    {1 {NOT N
e540: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ULL constraint f
e550: 61 69 6c 65 64 3a 20 74 32 5f 72 65 2e 62 7d 7d  ailed: t2_re.b}}
e560: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e570: 33 20 74 68 72 65 65 7d 0a 20 20 36 20 20 20 74  3 three}.  6   t
e580: 32 5f 78 78 20 20 20 20 7b 31 20 7b 4e 4f 54 20  2_xx    {1 {NOT 
e590: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
e5a0: 66 61 69 6c 65 64 3a 20 74 32 5f 78 78 2e 62 7d  failed: t2_xx.b}
e5b0: 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f  } 0 {1 one 2 two
e5c0: 20 33 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20   3 three}.} {.  
e5d0: 63 61 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a  catchsql COMMIT.
e5e0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
e5f0: 74 20 20 34 2e 31 36 2e 24 74 6e 2e 31 20 22 42  t  4.16.$tn.1 "B
e600: 45 47 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54  EGIN; INSERT INT
e610: 4f 20 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c  O $tbl VALUES(3,
e620: 20 27 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f   'three')"..  do
e630: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34  _catchsql_test 4
e640: 2e 31 36 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20  .16.$tn.2 " .   
e650: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62   INSERT INTO $tb
e660: 6c 20 53 45 4c 45 43 54 20 61 2b 33 2c 20 43 41  l SELECT a+3, CA
e670: 53 45 20 61 20 57 48 45 4e 20 32 20 54 48 45 4e  SE a WHEN 2 THEN
e680: 20 4e 55 4c 4c 20 45 4c 53 45 20 27 78 78 27 20   NULL ELSE 'xx' 
e690: 45 4e 44 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20  END FROM $tbl.  
e6a0: 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73  " $res..  do_tes
e6b0: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
e6c0: 34 2e 31 36 2e 24 74 6e 2e 33 20 7b 20 73 71 6c  4.16.$tn.3 { sql
e6d0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
e6e0: 6d 69 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64  mit db } $ac.  d
e6f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
e700: 2e 31 36 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43  .16.$tn.4 "SELEC
e710: 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 22 20 24  T * FROM $tbl" $
e720: 64 61 74 61 0a 7d 0a 66 6f 72 65 61 63 68 20 7b  data.}.foreach {
e730: 74 6e 20 74 62 6c 20 72 65 73 20 61 63 20 64 61  tn tbl res ac da
e740: 74 61 7d 20 7b 0a 20 20 31 20 20 20 74 33 5f 61  ta} {.  1   t3_a
e750: 62 20 20 20 20 7b 31 20 7b 55 4e 49 51 55 45 20  b    {1 {UNIQUE 
e760: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
e770: 64 3a 20 74 33 5f 61 62 2e 61 2c 20 74 33 5f 61  d: t3_ab.a, t3_a
e780: 62 2e 62 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  b.b}}.          
e790: 20 20 20 20 20 30 20 7b 31 20 6f 6e 65 20 32 20       0 {1 one 2 
e7a0: 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32  two 3 three}.  2
e7b0: 20 20 20 74 33 5f 72 6f 20 20 20 20 7b 31 20 7b     t3_ro    {1 {
e7c0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
e7d0: 74 20 66 61 69 6c 65 64 3a 20 74 33 5f 72 6f 2e  t failed: t3_ro.
e7e0: 61 2c 20 74 33 5f 72 6f 2e 62 7d 7d 0a 20 20 20  a, t3_ro.b}}.   
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 7b 31              1 {1
e800: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20   one 2 two}.  3 
e810: 20 20 74 33 5f 66 61 20 20 20 20 7b 31 20 7b 55    t3_fa    {1 {U
e820: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
e830: 20 66 61 69 6c 65 64 3a 20 74 33 5f 66 61 2e 61   failed: t3_fa.a
e840: 2c 20 74 33 5f 66 61 2e 62 7d 7d 0a 20 20 20 20  , t3_fa.b}}.    
e850: 20 20 20 20 20 20 20 20 20 20 20 30 20 7b 31 20             0 {1 
e860: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e870: 65 20 34 20 74 68 72 65 65 7d 0a 20 20 34 20 20  e 4 three}.  4  
e880: 20 74 33 5f 69 67 20 20 20 20 7b 30 20 7b 7d 7d   t3_ig    {0 {}}
e890: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e8a0: 33 20 74 68 72 65 65 20 34 20 74 68 72 65 65 20  3 three 4 three 
e8b0: 36 20 74 68 72 65 65 7d 0a 20 20 35 20 20 20 74  6 three}.  5   t
e8c0: 33 5f 72 65 20 20 20 20 7b 30 20 7b 7d 7d 20 30  3_re    {0 {}} 0
e8d0: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 34 20   {1 one 2 two 4 
e8e0: 74 68 72 65 65 20 33 20 74 68 72 65 65 20 36 20  three 3 three 6 
e8f0: 74 68 72 65 65 7d 0a 20 20 36 20 20 20 74 33 5f  three}.  6   t3_
e900: 78 78 20 20 20 20 7b 31 20 7b 55 4e 49 51 55 45  xx    {1 {UNIQUE
e910: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
e920: 65 64 3a 20 74 33 5f 78 78 2e 61 2c 20 74 33 5f  ed: t3_xx.a, t3_
e930: 78 78 2e 62 7d 7d 0a 20 20 20 20 20 20 20 20 20  xx.b}}.         
e940: 20 20 20 20 20 20 30 20 7b 31 20 6f 6e 65 20 32        0 {1 one 2
e950: 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 7d 20   two 3 three}.} 
e960: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 43 4f 4d  {.  catchsql COM
e970: 4d 49 54 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  MIT.  do_execsql
e980: 5f 74 65 73 74 20 20 34 2e 31 37 2e 24 74 6e 2e  _test  4.17.$tn.
e990: 31 20 22 42 45 47 49 4e 3b 20 49 4e 53 45 52 54  1 "BEGIN; INSERT
e9a0: 20 49 4e 54 4f 20 24 74 62 6c 20 56 41 4c 55 45   INTO $tbl VALUE
e9b0: 53 28 33 2c 20 27 74 68 72 65 65 27 29 22 0a 0a  S(3, 'three')"..
e9c0: 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65    do_catchsql_te
e9d0: 73 74 20 34 2e 31 37 2e 24 74 6e 2e 32 20 22 20  st 4.17.$tn.2 " 
e9e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
e9f0: 20 24 74 62 6c 20 53 45 4c 45 43 54 20 28 28 61   $tbl SELECT ((a
ea00: 25 32 29 2a 61 2b 33 29 2c 20 27 74 68 72 65 65  %2)*a+3), 'three
ea10: 27 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22 20  ' FROM $tbl.  " 
ea20: 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74 20  $res..  do_test 
ea30: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e  e_createtable-4.
ea40: 31 37 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69 74  17.$tn.3 { sqlit
ea50: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
ea60: 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64 6f 5f  t db } $ac.  do_
ea70: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
ea80: 37 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43 54 20  7.$tn.4 "SELECT 
ea90: 2a 20 46 52 4f 4d 20 24 74 62 6c 20 4f 52 44 45  * FROM $tbl ORDE
eaa0: 52 20 42 59 20 72 6f 77 69 64 22 20 24 64 61 74  R BY rowid" $dat
eab0: 61 0a 7d 0a 63 61 74 63 68 73 71 6c 20 43 4f 4d  a.}.catchsql COM
eac0: 4d 49 54 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  MIT..# EVIDENCE-
ead0: 4f 46 3a 20 52 2d 31 32 36 34 35 2d 33 39 37 37  OF: R-12645-3977
eae0: 32 20 4f 72 2c 20 69 66 20 61 20 63 6f 6e 73 74  2 Or, if a const
eaf0: 72 61 69 6e 74 20 64 65 66 69 6e 69 74 69 6f 6e  raint definition
eb00: 20 64 6f 65 73 20 6e 6f 74 0a 23 20 69 6e 63 6c   does not.# incl
eb10: 75 64 65 20 61 20 63 6f 6e 66 6c 69 63 74 2d 63  ude a conflict-c
eb20: 6c 61 75 73 65 20 6f 72 20 69 74 20 69 73 20 61  lause or it is a
eb30: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
eb40: 74 2c 20 74 68 65 20 64 65 66 61 75 6c 74 0a 23  t, the default.#
eb50: 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
eb60: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69  tion algorithm i
eb70: 73 20 41 42 4f 52 54 2e 0a 23 0a 23 20 20 20 20  s ABORT..#.#    
eb80: 20 54 68 65 20 66 69 72 73 74 20 68 61 6c 66 20   The first half 
eb90: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 69 73 20  of the above is 
eba0: 74 65 73 74 65 64 20 61 6c 6f 6e 67 20 77 69 74  tested along wit
ebb0: 68 20 65 78 70 6c 69 63 69 74 20 4f 4e 20 0a 23  h explicit ON .#
ebc0: 20 20 20 20 20 43 4f 4e 46 4c 49 43 54 20 63 6c       CONFLICT cl
ebd0: 61 75 73 65 73 20 61 62 6f 76 65 20 28 73 70 65  auses above (spe
ebe0: 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 65 20 74  cifically, the t
ebf0: 65 73 74 73 20 69 6e 76 6f 6c 76 69 6e 67 20 74  ests involving t
ec00: 31 5f 78 78 2c 20 74 32 5f 78 78 0a 23 20 20 20  1_xx, t2_xx.#   
ec10: 20 20 61 6e 64 20 74 33 5f 78 78 29 2e 20 54 68    and t3_xx). Th
ec20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6a 75 73 74  e following just
ec30: 20 74 65 73 74 73 20 74 68 61 74 20 74 68 65 20   tests that the 
ec40: 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74  default conflict
ec50: 0a 23 20 20 20 20 20 68 61 6e 64 6c 69 6e 67 20  .#     handling 
ec60: 66 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  for CHECK constr
ec70: 61 69 6e 74 73 20 69 73 20 41 42 4f 52 54 2e 0a  aints is ABORT..
ec80: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
ec90: 74 20 34 2e 31 38 2e 31 20 7b 0a 20 20 43 52 45  t 4.18.1 {.  CRE
eca0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
ecb0: 62 20 43 48 45 43 4b 20 28 62 21 3d 31 30 29 29  b CHECK (b!=10))
ecc0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
ecd0: 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b  t4 VALUES(1, 2);
ece0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
ecf0: 34 20 56 41 4c 55 45 53 28 33 2c 20 34 29 3b 0a  4 VALUES(3, 4);.
ed00: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
ed10: 74 20 20 34 2e 31 38 2e 32 20 7b 20 42 45 47 49  t  4.18.2 { BEGI
ed20: 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  N; INSERT INTO t
ed30: 34 20 56 41 4c 55 45 53 28 35 2c 20 36 29 20 7d  4 VALUES(5, 6) }
ed40: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
ed50: 74 20 34 2e 31 38 2e 33 20 7b 20 0a 20 20 49 4e  t 4.18.3 { .  IN
ed60: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 53 45 4c  SERT INTO t4 SEL
ed70: 45 43 54 20 61 2b 34 2c 20 62 2b 34 20 46 52 4f  ECT a+4, b+4 FRO
ed80: 4d 20 74 34 0a 7d 20 7b 31 20 7b 43 48 45 43 4b  M t4.} {1 {CHECK
ed90: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
eda0: 65 64 3a 20 74 34 7d 7d 0a 64 6f 5f 74 65 73 74  ed: t4}}.do_test
edb0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34   e_createtable-4
edc0: 2e 31 38 2e 34 20 7b 20 73 71 6c 69 74 65 33 5f  .18.4 { sqlite3_
edd0: 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64  get_autocommit d
ede0: 62 20 7d 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c  b } 0.do_execsql
edf0: 5f 74 65 73 74 20 34 2e 31 38 2e 35 20 7b 20 53  _test 4.18.5 { S
ee00: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
ee10: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 7d 0a  } {1 2 3 4 5 6}.
ee20: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
ee30: 52 2d 31 39 31 31 34 2d 35 36 31 31 33 20 44 69  R-19114-56113 Di
ee40: 66 66 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69  fferent constrai
ee50: 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  nts within the s
ee60: 61 6d 65 20 74 61 62 6c 65 0a 23 20 6d 61 79 20  ame table.# may 
ee70: 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 20 64  have different d
ee80: 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
ee90: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
eea0: 69 74 68 6d 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  ithms..#.do_exec
eeb0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 39 2e 30 20  sql_test 4.19.0 
eec0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
eed0: 20 74 35 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4f   t5(a NOT NULL O
eee0: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
eef0: 45 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e  E, b NOT NULL ON
ef00: 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54 29   CONFLICT ABORT)
ef10: 3b 0a 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  ;.}.do_catchsql_
ef20: 74 65 73 74 20 34 2e 31 39 2e 31 20 7b 20 49 4e  test 4.19.1 { IN
ef30: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c  SERT INTO t5 VAL
ef40: 55 45 53 28 4e 55 4c 4c 2c 20 27 6e 6f 74 20 6e  UES(NULL, 'not n
ef50: 75 6c 6c 27 29 20 7d 20 7b 30 20 7b 7d 7d 0a 64  ull') } {0 {}}.d
ef60: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
ef70: 34 2e 31 39 2e 32 20 7b 20 53 45 4c 45 43 54 20  4.19.2 { SELECT 
ef80: 2a 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 64  * FROM t5 } {}.d
ef90: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
efa0: 34 2e 31 39 2e 33 20 7b 20 49 4e 53 45 52 54 20  4.19.3 { INSERT 
efb0: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27  INTO t5 VALUES('
efc0: 6e 6f 74 20 6e 75 6c 6c 27 2c 20 4e 55 4c 4c 29  not null', NULL)
efd0: 20 7d 20 5c 0a 20 20 7b 31 20 7b 4e 4f 54 20 4e   } \.  {1 {NOT N
efe0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ULL constraint f
eff0: 61 69 6c 65 64 3a 20 74 35 2e 62 7d 7d 0a 64 6f  ailed: t5.b}}.do
f000: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34  _execsql_test  4
f010: 2e 31 39 2e 34 20 7b 20 53 45 4c 45 43 54 20 2a  .19.4 { SELECT *
f020: 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 0a 23   FROM t5 } {}..#
f030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 65 73 74 73  --------.# Tests
f080: 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
f090: 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 72 6f 77  MARY KEY and row
f0a0: 69 64 20 72 65 6c 61 74 65 64 20 73 74 61 74 65  id related state
f0b0: 6d 65 6e 74 73 2e 0a 23 0a 0a 23 20 45 56 49 44  ments..#..# EVID
f0c0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 38 34  ENCE-OF: R-52584
f0d0: 2d 30 34 30 30 39 20 54 68 65 20 72 6f 77 69 64  -04009 The rowid
f0e0: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63   value can be ac
f0f0: 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65  cessed using one
f100: 0a 23 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  .# of the specia
f110: 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l case-independe
f120: 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22  nt names "rowid"
f130: 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f  , "oid", or "_ro
f140: 77 69 64 5f 22 20 69 6e 0a 23 20 70 6c 61 63 65  wid_" in.# place
f150: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
f160: 65 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  e..#.# EVIDENCE-
f170: 4f 46 3a 20 52 2d 30 36 37 32 36 2d 30 37 34 36  OF: R-06726-0746
f180: 36 20 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  6 A column name 
f190: 63 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68  can be any of th
f1a0: 65 20 6e 61 6d 65 73 0a 23 20 64 65 66 69 6e 65  e names.# define
f1b0: 64 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  d in the CREATE 
f1c0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
f1d0: 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  or one of the fo
f1e0: 6c 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 0a  llowing special.
f1f0: 23 20 69 64 65 6e 74 69 66 69 65 72 73 3a 20 22  # identifiers: "
f200: 52 4f 57 49 44 22 2c 20 22 4f 49 44 22 2c 20 6f  ROWID", "OID", o
f210: 72 20 22 5f 52 4f 57 49 44 5f 22 2e 0a 23 0a 64  r "_ROWID_"..#.d
f220: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
f230: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
f240: 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20  .1.0 {.  CREATE 
f250: 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a  TABLE t1(x, y);.
f260: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
f270: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27   VALUES('one', '
f280: 66 69 72 73 74 27 29 3b 0a 20 20 49 4e 53 45 52  first');.  INSER
f290: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
f2a0: 28 27 74 77 6f 27 2c 20 27 73 65 63 6f 6e 64 27  ('two', 'second'
f2b0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
f2c0: 20 74 31 20 56 41 4c 55 45 53 28 27 74 68 72 65   t1 VALUES('thre
f2d0: 65 27 2c 20 27 74 68 69 72 64 27 29 3b 0a 7d 0a  e', 'third');.}.
f2e0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
f2f0: 65 73 74 73 20 35 2e 31 20 7b 0a 20 20 31 20 20  ests 5.1 {.  1  
f300: 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46   "SELECT rowid F
f310: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 7b  ROM t1"        {
f320: 31 20 32 20 33 7d 0a 20 20 32 20 20 20 22 53 45  1 2 3}.  2   "SE
f330: 4c 45 43 54 20 6f 69 64 20 46 52 4f 4d 20 74 31  LECT oid FROM t1
f340: 22 20 20 20 20 20 20 20 20 20 20 7b 31 20 32 20  "          {1 2 
f350: 33 7d 0a 20 20 33 20 20 20 22 53 45 4c 45 43 54  3}.  3   "SELECT
f360: 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 31   _rowid_ FROM t1
f370: 22 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20  "      {1 2 3}. 
f380: 20 34 20 20 20 22 53 45 4c 45 43 54 20 52 4f 57   4   "SELECT ROW
f390: 49 44 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20  ID FROM t1"     
f3a0: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 35 20 20     {1 2 3}.  5  
f3b0: 20 22 53 45 4c 45 43 54 20 4f 49 44 20 46 52 4f   "SELECT OID FRO
f3c0: 4d 20 74 31 22 20 20 20 20 20 20 20 20 20 20 7b  M t1"          {
f3d0: 31 20 32 20 33 7d 0a 20 20 36 20 20 20 22 53 45  1 2 3}.  6   "SE
f3e0: 4c 45 43 54 20 5f 52 4f 57 49 44 5f 20 46 52 4f  LECT _ROWID_ FRO
f3f0: 4d 20 74 31 22 20 20 20 20 20 20 7b 31 20 32 20  M t1"      {1 2 
f400: 33 7d 0a 20 20 37 20 20 20 22 53 45 4c 45 43 54  3}.  7   "SELECT
f410: 20 52 6f 57 69 44 20 46 52 4f 4d 20 74 31 22 20   RoWiD FROM t1" 
f420: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
f430: 20 38 20 20 20 22 53 45 4c 45 43 54 20 4f 69 44   8   "SELECT OiD
f440: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
f450: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 39 20 20     {1 2 3}.  9  
f460: 20 22 53 45 4c 45 43 54 20 5f 52 6f 57 69 44 5f   "SELECT _RoWiD_
f470: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b   FROM t1"      {
f480: 31 20 32 20 33 7d 0a 7d 0a 0a 23 20 45 56 49 44  1 2 3}.}..# EVID
f490: 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 36 35 30 31  ENCE-OF: R-26501
f4a0: 2d 31 37 33 30 36 20 49 66 20 61 20 74 61 62 6c  -17306 If a tabl
f4b0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 75 73 65  e contains a use
f4c0: 72 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  r defined column
f4d0: 0a 23 20 6e 61 6d 65 64 20 22 72 6f 77 69 64 22  .# named "rowid"
f4e0: 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f 77  , "oid" or "_row
f4f0: 69 64 5f 22 2c 20 74 68 65 6e 20 74 68 61 74 20  id_", then that 
f500: 6e 61 6d 65 20 61 6c 77 61 79 73 20 72 65 66 65  name always refe
f510: 72 73 20 74 68 65 0a 23 20 65 78 70 6c 69 63 69  rs the.# explici
f520: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63 6f 6c  tly declared col
f530: 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  umn and cannot b
f540: 65 20 75 73 65 64 20 74 6f 20 72 65 74 72 69 65  e used to retrie
f550: 76 65 20 74 68 65 20 69 6e 74 65 67 65 72 0a 23  ve the integer.#
f560: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 23 0a   rowid value..#.
f570: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
f580: 2d 34 34 36 31 35 2d 33 33 32 38 36 20 54 68 65  -44615-33286 The
f590: 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
f5a0: 69 65 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20  iers only refer 
f5b0: 74 6f 20 74 68 65 0a 23 20 72 6f 77 20 6b 65 79  to the.# row key
f5c0: 20 69 66 20 74 68 65 20 43 52 45 41 54 45 20 54   if the CREATE T
f5d0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 64  ABLE statement d
f5e0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61  oes not define a
f5f0: 20 72 65 61 6c 20 63 6f 6c 75 6d 6e 0a 23 20 77   real column.# w
f600: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
f610: 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  e..#.do_execsql_
f620: 74 65 73 74 20 35 2e 32 2e 30 20 7b 0a 20 20 43  test 5.2.0 {.  C
f630: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 6f  REATE TABLE t2(o
f640: 69 64 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  id, b);.  CREATE
f650: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 5f 72 6f   TABLE t3(a, _ro
f660: 77 69 64 5f 29 3b 0a 20 20 43 52 45 41 54 45 20  wid_);.  CREATE 
f670: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 72  TABLE t4(a, b, r
f680: 6f 77 69 64 29 3b 0a 0a 20 20 49 4e 53 45 52 54  owid);..  INSERT
f690: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
f6a0: 27 6f 6e 65 27 2c 20 27 74 77 6f 27 29 3b 0a 20  'one', 'two');. 
f6b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
f6c0: 56 41 4c 55 45 53 28 27 74 68 72 65 65 27 2c 20  VALUES('three', 
f6d0: 27 66 6f 75 72 27 29 3b 0a 0a 20 20 49 4e 53 45  'four');..  INSE
f6e0: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
f6f0: 53 28 27 66 69 76 65 27 2c 20 27 73 69 78 27 29  S('five', 'six')
f700: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
f710: 74 33 20 56 41 4c 55 45 53 28 27 73 65 76 65 6e  t3 VALUES('seven
f720: 27 2c 20 27 65 69 67 68 74 27 29 3b 0a 0a 20 20  ', 'eight');..  
f730: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
f740: 41 4c 55 45 53 28 27 6e 69 6e 65 27 2c 20 27 74  ALUES('nine', 't
f750: 65 6e 27 2c 20 27 65 6c 65 76 65 6e 27 29 3b 0a  en', 'eleven');.
f760: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
f770: 20 56 41 4c 55 45 53 28 27 74 77 65 6c 76 65 27   VALUES('twelve'
f780: 2c 20 27 74 68 69 72 74 65 65 6e 27 2c 20 27 66  , 'thirteen', 'f
f790: 6f 75 72 74 65 65 6e 27 29 3b 0a 7d 0a 64 6f 5f  ourteen');.}.do_
f7a0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
f7b0: 73 20 35 2e 32 20 7b 0a 20 20 31 20 20 20 22 53  s 5.2 {.  1   "S
f7c0: 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64  ELECT oid, rowid
f7d0: 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74  , _rowid_ FROM t
f7e0: 32 22 20 20 20 7b 6f 6e 65 20 31 20 31 20 20 20  2"   {one 1 1   
f7f0: 20 20 20 74 68 72 65 65 20 32 20 32 7d 0a 20 20     three 2 2}.  
f800: 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64 2c  2   "SELECT oid,
f810: 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 20   rowid, _rowid_ 
f820: 46 52 4f 4d 20 74 33 22 20 20 20 7b 31 20 31 20  FROM t3"   {1 1 
f830: 73 69 78 20 20 20 20 20 20 32 20 32 20 65 69 67  six      2 2 eig
f840: 68 74 7d 20 0a 20 20 33 20 20 20 22 53 45 4c 45  ht} .  3   "SELE
f850: 43 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c 20 5f  CT oid, rowid, _
f860: 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 34 22 20  rowid_ FROM t4" 
f870: 20 20 7b 31 20 65 6c 65 76 65 6e 20 31 20 20 20    {1 eleven 1   
f880: 32 20 66 6f 75 72 74 65 65 6e 20 32 7d 0a 7d 0a  2 fourteen 2}.}.
f890: 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20 24 74 62  ..# Argument $tb
f8a0: 6c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  l is the name of
f8b0: 20 61 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20   a table in the 
f8c0: 64 61 74 61 62 61 73 65 2e 20 41 72 67 75 6d 65  database. Argume
f8d0: 6e 74 20 24 63 6f 6c 20 69 73 0a 23 20 74 68 65  nt $col is.# the
f8e0: 20 6e 61 6d 65 20 6f 66 20 6f 6e 65 20 6f 66 20   name of one of 
f8f0: 74 68 65 20 74 61 62 6c 65 73 20 63 6f 6c 75 6d  the tables colum
f900: 6e 73 2e 20 52 65 74 75 72 6e 20 31 20 69 66 20  ns. Return 1 if 
f910: 24 63 6f 6c 20 69 73 20 61 6e 20 61 6c 69 61 73  $col is an alias
f920: 20 66 6f 72 0a 23 20 74 68 65 20 72 6f 77 69 64   for.# the rowid
f930: 2c 20 6f 72 20 30 20 6f 74 68 65 72 77 69 73 65  , or 0 otherwise
f940: 2e 0a 23 0a 70 72 6f 63 20 69 73 5f 69 6e 74 65  ..#.proc is_inte
f950: 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20  ger_primary_key 
f960: 7b 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20 20 6c 69  {tbl col} {.  li
f970: 6e 64 65 78 20 5b 64 62 20 65 76 61 6c 20 5b 73  ndex [db eval [s
f980: 75 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45 54  ubst {.    DELET
f990: 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 20  E FROM $tbl;.   
f9a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62   INSERT INTO $tb
f9b0: 6c 20 28 24 63 6f 6c 29 20 56 41 4c 55 45 53 28  l ($col) VALUES(
f9c0: 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 28  0);.    SELECT (
f9d0: 72 6f 77 69 64 3d 3d 24 63 6f 6c 29 20 46 52 4f  rowid==$col) FRO
f9e0: 4d 20 24 74 62 6c 3b 0a 20 20 20 20 44 45 4c 45  M $tbl;.    DELE
f9f0: 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20  TE FROM $tbl;.  
fa00: 7d 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45  }]] 0.}..# EVIDE
fa10: 4e 43 45 2d 4f 46 3a 20 52 2d 34 37 39 30 31 2d  NCE-OF: R-47901-
fa20: 33 33 39 34 37 20 57 69 74 68 20 6f 6e 65 20 65  33947 With one e
fa30: 78 63 65 70 74 69 6f 6e 20 6e 6f 74 65 64 20 62  xception noted b
fa40: 65 6c 6f 77 2c 20 69 66 20 61 20 72 6f 77 69 64  elow, if a rowid
fa50: 0a 23 20 74 61 62 6c 65 20 68 61 73 20 61 20 70  .# table has a p
fa60: 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20  rimary key that 
fa70: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69  consists of a si
fa80: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ngle column and 
fa90: 74 68 65 0a 23 20 64 65 63 6c 61 72 65 64 20 74  the.# declared t
faa0: 79 70 65 20 6f 66 20 74 68 61 74 20 63 6f 6c 75  ype of that colu
fab0: 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20  mn is "INTEGER" 
fac0: 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f  in any mixture o
fad0: 66 20 75 70 70 65 72 20 61 6e 64 0a 23 20 6c 6f  f upper and.# lo
fae0: 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20 74  wer case, then t
faf0: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65  he column become
fb00: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
fb10: 68 65 20 72 6f 77 69 64 2e 0a 23 0a 23 20 45 56  he rowid..#.# EV
fb20: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39  IDENCE-OF: R-459
fb30: 35 31 2d 30 38 33 34 37 20 69 66 20 74 68 65 20  51-08347 if the 
fb40: 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61  declaration of a
fb50: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 23 20 64   column with.# d
fb60: 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e  eclared type "IN
fb70: 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20  TEGER" includes 
fb80: 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20  an "PRIMARY KEY 
fb90: 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74  DESC" clause, it
fba0: 20 64 6f 65 73 0a 23 20 6e 6f 74 20 62 65 63 6f   does.# not beco
fbb0: 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  me an alias for 
fbc0: 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73  the rowid and is
fbd0: 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20   not classified 
fbe0: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  as an integer.# 
fbf0: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64  primary key..#.d
fc00: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
fc10: 73 74 73 20 35 2e 33 20 2d 74 63 6c 71 75 65 72  sts 5.3 -tclquer
fc20: 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
fc30: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 35  r_primary_key t5
fc40: 20 70 6b 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a   pk.} -repair {.
fc50: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
fc60: 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 7b  P TABLE t5 }.} {
fc70: 0a 20 20 31 20 20 20 22 43 52 45 41 54 45 20 54  .  1   "CREATE T
fc80: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67  ABLE t5(pk integ
fc90: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 22  er primary key)"
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 20 20 20 20 20 20 20 31 0a 20 20 32 20 20           1.  2  
fcc0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
fcd0: 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20 70 72  5(pk integer, pr
fce0: 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20  imary key(pk))" 
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 31 0a 20 20 33 20 20 20 22 43 52 45 41     1.  3   "CREA
fd10: 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69  TE TABLE t5(pk i
fd20: 6e 74 65 67 65 72 2c 20 76 20 69 6e 74 65 67 65  nteger, v intege
fd30: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
fd40: 6b 29 29 22 20 20 20 20 20 20 20 20 20 31 0a 20  k))"         1. 
fd50: 20 34 20 20 20 22 43 52 45 41 54 45 20 54 41 42   4   "CREATE TAB
fd60: 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72  LE t5(pk integer
fd70: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
fd80: 6d 61 72 79 20 6b 65 79 28 70 6b 2c 20 76 29 29  mary key(pk, v))
fd90: 22 20 20 20 20 20 20 30 0a 20 20 35 20 20 20 22  "      0.  5   "
fda0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
fdb0: 70 6b 20 69 6e 74 2c 20 76 20 69 6e 74 65 67 65  pk int, v intege
fdc0: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
fdd0: 6b 2c 20 76 29 29 22 20 20 20 20 20 20 20 20 20  k, v))"         
fde0: 20 30 0a 20 20 36 20 20 20 22 43 52 45 41 54 45   0.  6   "CREATE
fdf0: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
fe00: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
fe10: 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20  mary key(pk))"  
fe20: 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 37             0.  7
fe30: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
fe40: 20 74 35 28 70 6b 20 69 6e 74 20 70 72 69 6d 61   t5(pk int prima
fe50: 72 79 20 6b 65 79 2c 20 76 20 69 6e 74 65 67 65  ry key, v intege
fe60: 72 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  r)"             
fe70: 20 20 20 20 20 30 0a 20 20 38 20 20 20 22 43 52       0.  8   "CR
fe80: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b  EATE TABLE t5(pk
fe90: 20 69 6e 54 45 67 65 72 20 70 72 69 6d 61 72 79   inTEger primary
fea0: 20 6b 65 79 29 22 20 20 20 20 20 20 20 20 20 20   key)"          
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
fec0: 0a 20 20 39 20 20 20 22 43 52 45 41 54 45 20 54  .  9   "CREATE T
fed0: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 47  ABLE t5(pk inteG
fee0: 45 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  Er, primary key(
fef0: 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 20 20  pk))"           
ff00: 20 20 20 20 20 20 20 20 20 31 0a 20 20 31 30 20           1.  10 
ff10: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
ff20: 35 28 70 6b 20 49 4e 54 45 47 45 52 2c 20 76 20  5(pk INTEGER, v 
ff30: 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79  integer, primary
ff40: 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20 20 20   key(pk))"      
ff50: 20 20 20 31 0a 7d 0a 0a 23 20 45 56 49 44 45 4e     1.}..# EVIDEN
ff60: 43 45 2d 4f 46 3a 20 52 2d 34 31 34 34 34 2d 34  CE-OF: R-41444-4
ff70: 39 36 36 35 20 4f 74 68 65 72 20 69 6e 74 65 67  9665 Other integ
ff80: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69  er type names li
ff90: 6b 65 20 22 49 4e 54 22 20 6f 72 0a 23 20 22 42  ke "INT" or.# "B
ffa0: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
ffb0: 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e   INTEGER" or "UN
ffc0: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20  SIGNED INTEGER" 
ffd0: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
ffe0: 72 79 0a 23 20 6b 65 79 20 63 6f 6c 75 6d 6e 20  ry.# key column 
fff0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20  to behave as an 
10000 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 63  ordinary table c
10010 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67  olumn with integ
10020 65 72 20 61 66 66 69 6e 69 74 79 0a 23 20 61 6e  er affinity.# an
10030 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  d a unique index
10040 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61  , not as an alia
10050 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
10060 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
10070 73 74 20 35 2e 34 2e 31 20 7b 0a 20 20 43 52 45  st 5.4.1 {.  CRE
10080 41 54 45 20 54 41 42 4c 45 20 74 36 28 70 6b 20  ATE TABLE t6(pk 
10090 49 4e 54 20 70 72 69 6d 61 72 79 20 6b 65 79 29  INT primary key)
100a0 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
100b0 20 74 37 28 70 6b 20 42 49 47 49 4e 54 20 70 72   t7(pk BIGINT pr
100c0 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43 52  imary key);.  CR
100d0 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 70 6b  EATE TABLE t8(pk
100e0 20 53 48 4f 52 54 20 49 4e 54 45 47 45 52 20 70   SHORT INTEGER p
100f0 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43  rimary key);.  C
10100 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 28 70  REATE TABLE t9(p
10110 6b 20 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47  k UNSIGNED INTEG
10120 45 52 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b  ER primary key);
10130 0a 7d 20 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72  .} .do_test e_cr
10140 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e  eatetable-5.4.2.
10150 31 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70  1 { is_integer_p
10160 72 69 6d 61 72 79 5f 6b 65 79 20 74 36 20 70 6b  rimary_key t6 pk
10170 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63   } 0.do_test e_c
10180 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32  reatetable-5.4.2
10190 2e 32 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f  .2 { is_integer_
101a0 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 37 20 70  primary_key t7 p
101b0 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f  k } 0.do_test e_
101c0 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e  createtable-5.4.
101d0 32 2e 33 20 7b 20 69 73 5f 69 6e 74 65 67 65 72  2.3 { is_integer
101e0 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 38 20  _primary_key t8 
101f0 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65  pk } 0.do_test e
10200 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34  _createtable-5.4
10210 2e 32 2e 34 20 7b 20 69 73 5f 69 6e 74 65 67 65  .2.4 { is_intege
10220 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 39  r_primary_key t9
10230 20 70 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78 65 63   pk } 0..do_exec
10240 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 33 20 7b  sql_test 5.4.3 {
10250 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10260 36 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  6 VALUES('2.0');
10270 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10280 37 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  7 VALUES('2.0');
10290 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
102a0 38 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  8 VALUES('2.0');
102b0 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
102c0 39 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  9 VALUES('2.0');
102d0 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66  .  SELECT typeof
102e0 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 36  (pk), pk FROM t6
102f0 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
10300 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74  f(pk), pk FROM t
10310 37 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65  7;.  SELECT type
10320 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20  of(pk), pk FROM 
10330 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  t8;.  SELECT typ
10340 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d  eof(pk), pk FROM
10350 20 74 39 3b 0a 7d 20 7b 69 6e 74 65 67 65 72 20   t9;.} {integer 
10360 32 20 69 6e 74 65 67 65 72 20 32 20 69 6e 74 65  2 integer 2 inte
10370 67 65 72 20 32 20 69 6e 74 65 67 65 72 20 32 7d  ger 2 integer 2}
10380 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  ..do_catchsql_te
10390 73 74 20 35 2e 34 2e 34 2e 31 20 7b 20 0a 20 20  st 5.4.4.1 { .  
103a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
103b0 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
103c0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
103d0 74 20 66 61 69 6c 65 64 3a 20 74 36 2e 70 6b 7d  t failed: t6.pk}
103e0 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
103f0 73 74 20 35 2e 34 2e 34 2e 32 20 7b 20 0a 20 20  st 5.4.4.2 { .  
10400 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56  INSERT INTO t7 V
10410 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10420 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10430 74 20 66 61 69 6c 65 64 3a 20 74 37 2e 70 6b 7d  t failed: t7.pk}
10440 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
10450 73 74 20 35 2e 34 2e 34 2e 33 20 7b 20 0a 20 20  st 5.4.4.3 { .  
10460 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
10470 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10480 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10490 74 20 66 61 69 6c 65 64 3a 20 74 38 2e 70 6b 7d  t failed: t8.pk}
104a0 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
104b0 73 74 20 35 2e 34 2e 34 2e 34 20 7b 20 0a 20 20  st 5.4.4.4 { .  
104c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56  INSERT INTO t9 V
104d0 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
104e0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
104f0 74 20 66 61 69 6c 65 64 3a 20 74 39 2e 70 6b 7d  t failed: t9.pk}
10500 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
10510 3a 20 52 2d 35 36 30 39 34 2d 35 37 38 33 30 20  : R-56094-57830 
10520 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  the following th
10530 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72  ree table declar
10540 61 74 69 6f 6e 73 20 61 6c 6c 0a 23 20 63 61 75  ations all.# cau
10550 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78  se the column "x
10560 22 20 74 6f 20 62 65 20 61 6e 20 61 6c 69 61 73  " to be an alias
10570 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28   for the rowid (
10580 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
10590 72 79 0a 23 20 6b 65 79 29 3a 20 43 52 45 41 54  ry.# key): CREAT
105a0 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
105b0 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
105c0 41 53 43 2c 20 79 2c 20 7a 29 3b 20 43 52 45 41  ASC, y, z); CREA
105d0 54 45 20 54 41 42 4c 45 0a 23 20 74 28 78 20 49  TE TABLE.# t(x I
105e0 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
105f0 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43 29  IMARY KEY(x ASC)
10600 29 3b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ); CREATE TABLE 
10610 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 0a  t(x INTEGER, y,.
10620 23 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  # z, PRIMARY KEY
10630 28 78 20 44 45 53 43 29 29 3b 0a 23 0a 23 20 45  (x DESC));.#.# E
10640 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 30  VIDENCE-OF: R-20
10650 31 34 39 2d 32 35 38 38 34 20 74 68 65 20 66 6f  149-25884 the fo
10660 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74  llowing declarat
10670 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ion does not res
10680 75 6c 74 0a 23 20 69 6e 20 22 78 22 20 62 65 69  ult.# in "x" bei
10690 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ng an alias for 
106a0 74 68 65 20 72 6f 77 69 64 3a 20 43 52 45 41 54  the rowid: CREAT
106b0 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
106c0 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b 45  GER PRIMARY.# KE
106d0 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 0a 23  Y DESC, y, z);.#
106e0 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
106f0 74 65 73 74 73 20 35 20 2d 74 63 6c 71 75 65 72  tests 5 -tclquer
10700 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
10710 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 20  r_primary_key t 
10720 78 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  x.} -repair {.  
10730 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
10740 54 41 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a 20 20  TABLE t }.} {.  
10750 35 2e 31 20 20 20 20 22 43 52 45 41 54 45 20 54  5.1    "CREATE T
10760 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
10770 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
10780 2c 20 79 2c 20 7a 29 22 20 20 20 20 20 20 31 0a  , y, z)"      1.
10790 20 20 35 2e 32 20 20 20 20 22 43 52 45 41 54 45    5.2    "CREATE
107a0 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
107b0 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
107c0 59 20 4b 45 59 28 78 20 41 53 43 29 29 22 20 20  Y KEY(x ASC))"  
107d0 31 0a 20 20 35 2e 33 20 20 20 20 22 43 52 45 41  1.  5.3    "CREA
107e0 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
107f0 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
10800 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29  ARY KEY(x DESC))
10810 22 20 31 0a 20 20 36 2e 31 20 20 20 20 22 43 52  " 1.  6.1    "CR
10820 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
10830 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
10840 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 22 20  EY DESC, y, z)" 
10850 20 20 20 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45      0.}..# EVIDE
10860 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 37 33 33 2d  NCE-OF: R-03733-
10870 32 39 37 33 34 20 52 6f 77 69 64 20 76 61 6c 75  29734 Rowid valu
10880 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
10890 65 64 20 75 73 69 6e 67 20 61 6e 0a 23 20 55 50  ed using an.# UP
108a0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
108b0 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
108c0 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
108d0 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
108e0 74 68 65 72 0a 23 20 75 73 69 6e 67 20 6f 6e 65  ther.# using one
108f0 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   of the built-in
10900 20 61 6c 69 61 73 65 73 20 28 22 72 6f 77 69 64   aliases ("rowid
10910 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
10920 77 69 64 5f 22 29 20 6f 72 20 62 79 0a 23 20 75  wid_") or by.# u
10930 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72  sing an alias cr
10940 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65  eated by an inte
10950 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  ger primary key.
10960 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
10970 73 74 20 35 2e 37 2e 30 20 7b 0a 20 20 43 52 45  st 5.7.0 {.  CRE
10980 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 61 2c  ATE TABLE t10(a,
10990 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   b);.  INSERT IN
109a0 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28 27 74  TO t10 VALUES('t
109b0 65 6e 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52 45  en', 10);..  CRE
109c0 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 61 2c  ATE TABLE t11(a,
109d0 20 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   b INTEGER PRIMA
109e0 52 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45 52  RY KEY);.  INSER
109f0 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45  T INTO t11 VALUE
10a00 53 28 27 74 65 6e 27 2c 20 31 30 29 3b 0a 7d 0a  S('ten', 10);.}.
10a10 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
10a20 65 73 74 73 20 35 2e 37 2e 31 20 2d 71 75 65 72  ests 5.7.1 -quer
10a30 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 72 6f  y { .  SELECT ro
10a40 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f 69  wid, _rowid_, oi
10a50 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b 0a  d FROM t10;.} {.
10a60 20 20 31 20 20 20 20 22 55 50 44 41 54 45 20 74    1    "UPDATE t
10a70 31 30 20 53 45 54 20 72 6f 77 69 64 20 3d 20 35  10 SET rowid = 5
10a80 22 20 20 20 7b 35 20 35 20 35 7d 0a 20 20 32 20  "   {5 5 5}.  2 
10a90 20 20 20 22 55 50 44 41 54 45 20 74 31 30 20 53     "UPDATE t10 S
10aa0 45 54 20 5f 72 6f 77 69 64 5f 20 3d 20 36 22 20  ET _rowid_ = 6" 
10ab0 7b 36 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22  {6 6 6}.  3    "
10ac0 55 50 44 41 54 45 20 74 31 30 20 53 45 54 20 6f  UPDATE t10 SET o
10ad0 69 64 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37  id = 7"     {7 7
10ae0 20 37 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   7}.}.do_createt
10af0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 37 2e 32  able_tests 5.7.2
10b00 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
10b10 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
10b20 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
10b30 74 31 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20 20  t11;.} {.  1    
10b40 22 55 50 44 41 54 45 20 74 31 31 20 53 45 54 20  "UPDATE t11 SET 
10b50 72 6f 77 69 64 20 3d 20 35 22 20 20 20 7b 35 20  rowid = 5"   {5 
10b60 35 20 35 20 35 7d 0a 20 20 32 20 20 20 20 22 55  5 5 5}.  2    "U
10b70 50 44 41 54 45 20 74 31 31 20 53 45 54 20 5f 72  PDATE t11 SET _r
10b80 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36 20 36 20  owid_ = 6" {6 6 
10b90 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55 50 44  6 6}.  3    "UPD
10ba0 41 54 45 20 74 31 31 20 53 45 54 20 6f 69 64 20  ATE t11 SET oid 
10bb0 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20 37 20  = 7"     {7 7 7 
10bc0 37 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41 54  7}.  4    "UPDAT
10bd0 45 20 74 31 31 20 53 45 54 20 62 20 3d 20 38 22  E t11 SET b = 8"
10be0 20 20 20 20 20 20 20 7b 38 20 38 20 38 20 38 7d         {8 8 8 8}
10bf0 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
10c00 46 3a 20 52 2d 35 38 37 30 36 2d 31 34 32 32 39  F: R-58706-14229
10c10 20 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49   Similarly, an I
10c20 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
10c30 6d 61 79 20 70 72 6f 76 69 64 65 0a 23 20 61 20  may provide.# a 
10c40 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20  value to use as 
10c50 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
10c60 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e  ch row inserted.
10c70 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
10c80 65 5f 74 65 73 74 73 20 35 2e 38 2e 31 20 2d 71  e_tests 5.8.1 -q
10c90 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54  uery { .  SELECT
10ca0 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c   rowid, _rowid_,
10cb0 20 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d   oid FROM t10;.}
10cc0 20 2d 72 65 70 61 69 72 20 7b 20 0a 20 20 65 78   -repair { .  ex
10cd0 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46  ecsql { DELETE F
10ce0 52 4f 4d 20 74 31 30 20 7d 20 0a 7d 20 7b 0a 20  ROM t10 } .} {. 
10cf0 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
10d00 54 4f 20 74 31 30 28 6f 69 64 29 20 56 41 4c 55  TO t10(oid) VALU
10d10 45 53 28 31 35 29 22 20 20 20 20 20 20 20 20 20  ES(15)"         
10d20 20 20 7b 31 35 20 31 35 20 31 35 7d 0a 20 20 32    {15 15 15}.  2
10d30 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
10d40 20 74 31 30 28 72 6f 77 69 64 29 20 56 41 4c 55   t10(rowid) VALU
10d50 45 53 28 31 36 29 22 20 20 20 20 20 20 20 20 20  ES(16)"         
10d60 7b 31 36 20 31 36 20 31 36 7d 0a 20 20 33 20 20  {16 16 16}.  3  
10d70 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
10d80 31 30 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55  10(_rowid_) VALU
10d90 45 53 28 31 37 29 22 20 20 20 20 20 20 20 7b 31  ES(17)"       {1
10da0 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20  7 17 17}.  4    
10db0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30  "INSERT INTO t10
10dc0 28 61 2c 20 62 2c 20 6f 69 64 29 20 56 41 4c 55  (a, b, oid) VALU
10dd0 45 53 28 31 2c 32 2c 33 29 22 20 20 7b 33 20 33  ES(1,2,3)"  {3 3
10de0 20 33 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   3}.}.do_createt
10df0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 32  able_tests 5.8.2
10e00 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
10e10 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
10e20 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
10e30 74 31 31 3b 0a 7d 20 2d 72 65 70 61 69 72 20 7b  t11;.} -repair {
10e40 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45   .  execsql { DE
10e50 4c 45 54 45 20 46 52 4f 4d 20 74 31 31 20 7d 20  LETE FROM t11 } 
10e60 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53  .} {.  1    "INS
10e70 45 52 54 20 49 4e 54 4f 20 74 31 31 28 6f 69 64  ERT INTO t11(oid
10e80 29 20 56 41 4c 55 45 53 28 31 35 29 22 20 20 20  ) VALUES(15)"   
10e90 20 20 20 20 20 20 20 20 7b 31 35 20 31 35 20 31          {15 15 1
10ea0 35 20 31 35 7d 0a 20 20 32 20 20 20 20 22 49 4e  5 15}.  2    "IN
10eb0 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 72 6f  SERT INTO t11(ro
10ec0 77 69 64 29 20 56 41 4c 55 45 53 28 31 36 29 22  wid) VALUES(16)"
10ed0 20 20 20 20 20 20 20 20 20 7b 31 36 20 31 36 20           {16 16 
10ee0 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20 22 49  16 16}.  3    "I
10ef0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 5f  NSERT INTO t11(_
10f00 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53 28 31  rowid_) VALUES(1
10f10 37 29 22 20 20 20 20 20 20 20 7b 31 37 20 31 37  7)"       {17 17
10f20 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20 22   17 17}.  4    "
10f30 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28  INSERT INTO t11(
10f40 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c 32  a, b) VALUES(1,2
10f50 29 22 20 20 20 20 20 20 20 20 20 7b 32 20 32 20  )"         {2 2 
10f60 32 20 32 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  2 2}.}..# EVIDEN
10f70 43 45 2d 4f 46 3a 20 52 2d 33 32 33 32 36 2d 34  CE-OF: R-32326-4
10f80 34 35 39 32 20 55 6e 6c 69 6b 65 20 6e 6f 72 6d  4592 Unlike norm
10f90 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e  al SQLite column
10fa0 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  s, an integer.# 
10fb0 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
10fc0 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
10fd0 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
10fe0 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
10ff0 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  .# primary key o
11000 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 73 20  r rowid columns 
11010 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
11020 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
11030 69 6e 74 0a 23 20 76 61 6c 75 65 73 2c 20 73 74  int.# values, st
11040 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72  rings, BLOBs, or
11050 20 4e 55 4c 4c 73 2e 0a 23 0a 23 20 20 20 20 20   NULLs..#.#     
11060 54 68 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72  This is consider
11070 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20  ed by the tests 
11080 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
11090 67 20 33 20 73 74 61 74 65 6d 65 6e 74 73 2c 0a  g 3 statements,.
110a0 23 20 20 20 20 20 77 68 69 63 68 20 73 68 6f 77  #     which show
110b0 20 74 68 61 74 3a 0a 23 0a 23 20 20 20 20 20 20   that:.#.#      
110c0 20 31 2e 20 41 74 74 65 6d 70 74 73 20 74 6f 20   1. Attempts to 
110d0 55 50 44 41 54 45 20 61 20 72 6f 77 69 64 20 63  UPDATE a rowid c
110e0 6f 6c 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e 2d 69  olumn to a non-i
110f0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 66 61 69  nteger value fai
11100 6c 2c 0a 23 20 20 20 20 20 20 20 32 2e 20 41 74  l,.#       2. At
11110 74 65 6d 70 74 73 20 74 6f 20 49 4e 53 45 52 54  tempts to INSERT
11120 20 61 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 20   a real, string 
11130 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 20 69 6e  or blob value in
11140 74 6f 20 61 20 72 6f 77 69 64 20 0a 23 20 20 20  to a rowid .#   
11150 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 66 61         column fa
11160 69 6c 2c 20 61 6e 64 0a 23 20 20 20 20 20 20 20  il, and.#       
11170 33 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  3. Attempting to
11180 20 49 4e 53 45 52 54 20 61 20 4e 55 4c 4c 20 76   INSERT a NULL v
11190 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69  alue into a rowi
111a0 64 20 63 6f 6c 75 6d 6e 20 63 61 75 73 65 73 20  d column causes 
111b0 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20 73  the.#          s
111c0 79 73 74 65 6d 20 74 6f 20 61 75 74 6f 6d 61 74  ystem to automat
111d0 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 61 6e  ically select an
111e0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
111f0 6f 20 75 73 65 2e 0a 23 0a 0a 0a 23 20 45 56 49  o use..#...# EVI
11200 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 32 32  DENCE-OF: R-6422
11210 34 2d 36 32 35 37 38 20 49 66 20 61 6e 20 55 50  4-62578 If an UP
11220 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
11230 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
11240 6e 0a 23 20 69 6e 74 65 67 65 72 20 70 72 69 6d  n.# integer prim
11250 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
11260 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e 55 4c   column to a NUL
11270 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c  L or blob value,
11280 20 6f 72 20 74 6f 20 61 0a 23 20 73 74 72 69 6e   or to a.# strin
11290 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g or real value 
112a0 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
112b0 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
112c0 74 65 64 20 74 6f 20 61 6e 0a 23 20 69 6e 74 65  ted to an.# inte
112d0 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65  ger, a "datatype
112e0 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
112f0 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20   occurs and the 
11300 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 23 20 61  statement is.# a
11310 62 6f 72 74 65 64 2e 0a 23 0a 64 72 6f 70 5f 61  borted..#.drop_a
11320 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65  ll_tables.do_exe
11330 63 73 71 6c 5f 74 65 73 74 20 35 2e 39 2e 30 20  csql_test 5.9.0 
11340 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
11350 20 74 31 32 28 78 20 49 4e 54 45 47 45 52 20 50   t12(x INTEGER P
11360 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a  RIMARY KEY, y);.
11370 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
11380 32 20 56 41 4c 55 45 53 28 35 2c 20 27 66 69 76  2 VALUES(5, 'fiv
11390 65 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  e');.}.do_create
113a0 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 39 2e  table_tests 5.9.
113b0 31 20 2d 71 75 65 72 79 20 7b 20 53 45 4c 45 43  1 -query { SELEC
113c0 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46  T typeof(x), x F
113d0 52 4f 4d 20 74 31 32 20 7d 20 7b 0a 20 20 31 20  ROM t12 } {.  1 
113e0 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
113f0 54 20 78 20 3d 20 34 22 20 20 20 20 20 20 20 7b  T x = 4"       {
11400 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20 20  integer 4}.  2  
11410 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11420 20 78 20 3d 20 31 30 2e 30 22 20 20 20 20 7b 69   x = 10.0"    {i
11430 6e 74 65 67 65 72 20 31 30 7d 0a 20 20 33 20 20  nteger 10}.  3  
11440 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11450 20 78 20 3d 20 27 31 32 2e 30 27 22 20 20 7b 69   x = '12.0'"  {i
11460 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20 20  nteger 12}.  4  
11470 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11480 20 78 20 3d 20 27 2d 31 35 2e 30 27 22 20 7b 69   x = '-15.0'" {i
11490 6e 74 65 67 65 72 20 2d 31 35 7d 0a 7d 0a 64 6f  nteger -15}.}.do
114a0 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
114b0 74 73 20 35 2e 39 2e 32 20 2d 65 72 72 6f 72 20  ts 5.9.2 -error 
114c0 7b 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73  {.  datatype mis
114d0 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20  match.} {.  1   
114e0 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
114f0 78 20 3d 20 34 2e 31 22 20 20 20 20 20 20 20 20  x = 4.1"        
11500 20 7b 7d 0a 20 20 32 20 20 20 22 55 50 44 41 54   {}.  2   "UPDAT
11510 45 20 74 31 32 20 53 45 54 20 78 20 3d 20 27 68  E t12 SET x = 'h
11520 65 6c 6c 6f 27 22 20 20 20 20 20 7b 7d 0a 20 20  ello'"     {}.  
11530 33 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20  3   "UPDATE t12 
11540 53 45 54 20 78 20 3d 20 4e 55 4c 4c 22 20 20 20  SET x = NULL"   
11550 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 22 55       {}.  4   "U
11560 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78 20  PDATE t12 SET x 
11570 3d 20 58 27 41 42 43 44 27 22 20 20 20 20 20 7b  = X'ABCD'"     {
11580 7d 0a 20 20 35 20 20 20 22 55 50 44 41 54 45 20  }.  5   "UPDATE 
11590 74 31 32 20 53 45 54 20 78 20 3d 20 58 27 33 39  t12 SET x = X'39
115a0 30 30 27 22 20 20 20 20 20 7b 7d 0a 20 20 36 20  00'"     {}.  6 
115b0 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
115c0 54 20 78 20 3d 20 58 27 33 39 27 22 20 20 20 20  T x = X'39'"    
115d0 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45     {}.}..# EVIDE
115e0 4e 43 45 2d 4f 46 3a 20 52 2d 30 35 37 33 34 2d  NCE-OF: R-05734-
115f0 31 33 36 32 39 20 49 66 20 61 6e 20 49 4e 53 45  13629 If an INSE
11600 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
11610 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
11620 61 0a 23 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20  a.# blob value, 
11630 6f 72 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72  or a string or r
11640 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63  eal value that c
11650 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
11660 73 6c 79 0a 23 20 63 6f 6e 76 65 72 74 65 64 20  sly.# converted 
11670 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
11680 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  to an integer pr
11690 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
116a0 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23 20 22  id column, a.# "
116b0 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
116c0 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
116d0 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e  and the statemen
116e0 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 23 0a  t is aborted..#.
116f0 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
11700 35 2e 31 30 2e 30 20 7b 20 44 45 4c 45 54 45 20  5.10.0 { DELETE 
11710 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72  FROM t12 }.do_cr
11720 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
11730 35 2e 31 30 2e 31 20 2d 65 72 72 6f 72 20 7b 20  5.10.1 -error { 
11740 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73 6d  .  datatype mism
11750 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20 22  atch.} {.  1   "
11760 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11770 78 29 20 56 41 4c 55 45 53 28 34 2e 31 29 22 20  x) VALUES(4.1)" 
11780 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 22 49 4e      {}.  2   "IN
11790 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
117a0 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29   VALUES('hello')
117b0 22 20 7b 7d 0a 20 20 33 20 20 20 22 49 4e 53 45  " {}.  3   "INSE
117c0 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
117d0 41 4c 55 45 53 28 58 27 41 42 43 44 27 29 22 20  ALUES(X'ABCD')" 
117e0 7b 7d 0a 20 20 34 20 20 20 22 49 4e 53 45 52 54  {}.  4   "INSERT
117f0 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
11800 55 45 53 28 58 27 33 39 30 30 27 29 22 20 7b 7d  UES(X'3900')" {}
11810 0a 20 20 35 20 20 20 22 49 4e 53 45 52 54 20 49  .  5   "INSERT I
11820 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55 45  NTO t12(x) VALUE
11830 53 28 58 27 33 39 27 29 22 20 20 20 7b 7d 0a 7d  S(X'39')"   {}.}
11840 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
11850 74 65 73 74 73 20 35 2e 31 30 2e 32 20 2d 71 75  tests 5.10.2 -qu
11860 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  ery { .  SELECT 
11870 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46 52 4f  typeof(x), x FRO
11880 4d 20 74 31 32 20 0a 7d 20 2d 72 65 70 61 69 72  M t12 .} -repair
11890 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44   {.  execsql { D
118a0 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 32 20 7d  ELETE FROM t12 }
118b0 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
118c0 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
118d0 41 4c 55 45 53 28 34 29 22 20 20 20 20 20 20 20  ALUES(4)"       
118e0 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20  {integer 4}.  2 
118f0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
11900 31 32 28 78 29 20 56 41 4c 55 45 53 28 31 30 2e  12(x) VALUES(10.
11910 30 29 22 20 20 20 20 7b 69 6e 74 65 67 65 72 20  0)"    {integer 
11920 31 30 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52  10}.  3   "INSER
11930 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41  T INTO t12(x) VA
11940 4c 55 45 53 28 27 31 32 2e 30 27 29 22 20 20 7b  LUES('12.0')"  {
11950 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20  integer 12}.  4 
11960 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
11970 31 32 28 78 29 20 56 41 4c 55 45 53 28 27 34 65  12(x) VALUES('4e
11980 33 27 29 22 20 20 20 7b 69 6e 74 65 67 65 72 20  3')"   {integer 
11990 34 30 30 30 7d 0a 20 20 35 20 20 20 22 49 4e 53  4000}.  5   "INS
119a0 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
119b0 56 41 4c 55 45 53 28 27 2d 31 34 2e 30 27 29 22  VALUES('-14.0')"
119c0 20 7b 69 6e 74 65 67 65 72 20 2d 31 34 7d 0a 7d   {integer -14}.}
119d0 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
119e0 20 52 2d 30 37 39 38 36 2d 34 36 30 32 34 20 49   R-07986-46024 I
119f0 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
11a00 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
11a10 6f 20 69 6e 73 65 72 74 20 61 0a 23 20 4e 55 4c  o insert a.# NUL
11a20 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
11a30 6f 77 69 64 20 6f 72 20 69 6e 74 65 67 65 72 20  owid or integer 
11a40 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
11a50 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 0a 23  mn, the system.#
11a60 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65   chooses an inte
11a70 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ger value to use
11a80 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 61 75   as the rowid au
11a90 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 23 0a 64  tomatically..#.d
11aa0 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
11ab0 2e 31 31 2e 30 20 7b 20 44 45 4c 45 54 45 20 46  .11.0 { DELETE F
11ac0 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72 65  ROM t12 }.do_cre
11ad0 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35  atetable_tests 5
11ae0 2e 31 31 20 2d 71 75 65 72 79 20 7b 20 0a 20 20  .11 -query { .  
11af0 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29  SELECT typeof(x)
11b00 2c 20 78 20 46 52 4f 4d 20 74 31 32 20 57 48 45  , x FROM t12 WHE
11b10 52 45 20 79 20 49 53 20 28 53 45 4c 45 43 54 20  RE y IS (SELECT 
11b20 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 32 29  max(y) FROM t12)
11b30 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
11b40 52 54 20 49 4e 54 4f 20 74 31 32 20 44 45 46 41  RT INTO t12 DEFA
11b50 55 4c 54 20 56 41 4c 55 45 53 22 20 20 20 20 20  ULT VALUES"     
11b60 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e 74 65             {inte
11b70 67 65 72 20 31 7d 0a 20 20 32 20 20 20 22 49 4e  ger 1}.  2   "IN
11b80 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79 29  SERT INTO t12(y)
11b90 20 20 20 56 41 4c 55 45 53 28 35 29 22 20 20 20     VALUES(5)"   
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e               {in
11bb0 74 65 67 65 72 20 32 7d 0a 20 20 33 20 20 20 22  teger 2}.  3   "
11bc0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11bd0 78 2c 79 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c  x,y) VALUES(NULL
11be0 2c 20 31 30 29 22 20 20 20 20 20 20 20 20 20 7b  , 10)"         {
11bf0 69 6e 74 65 67 65 72 20 33 7d 0a 20 20 34 20 20  integer 3}.  4  
11c00 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11c10 32 28 78 2c 79 29 20 53 45 4c 45 43 54 20 4e 55  2(x,y) SELECT NU
11c20 4c 4c 2c 20 31 35 20 46 52 4f 4d 20 74 31 32 22  LL, 15 FROM t12"
11c30 20 0a 20 20 20 20 20 20 7b 69 6e 74 65 67 65 72   .      {integer
11c40 20 34 20 69 6e 74 65 67 65 72 20 35 20 69 6e 74   4 integer 5 int
11c50 65 67 65 72 20 36 7d 0a 20 20 35 20 20 20 22 49  eger 6}.  5   "I
11c60 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79  NSERT INTO t12(y
11c70 29 20 53 45 4c 45 43 54 20 32 30 20 46 52 4f 4d  ) SELECT 20 FROM
11c80 20 74 31 32 20 4c 49 4d 49 54 20 33 22 0a 20 20   t12 LIMIT 3".  
11c90 20 20 20 20 7b 69 6e 74 65 67 65 72 20 37 20 69      {integer 7 i
11ca0 6e 74 65 67 65 72 20 38 20 69 6e 74 65 67 65 72  nteger 8 integer
11cb0 20 39 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65   9}.}..finish_te
11cc0 73 74 0a                                         st.