/ Hex Artifact Content
Login

Artifact b40fc61bc4f1ad2a3c84590bd1d711507263d921:


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: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
06c0: 2d 32 35 32 36 32 2d 30 31 38 38 31 20 2d 2d 20  -25262-01881 -- 
06d0: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 74  syntax diagram t
06e0: 79 70 65 2d 6e 61 6d 65 0a 23 0a 64 6f 5f 63 72  ype-name.#.do_cr
06f0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
0700: 30 2e 31 2e 31 20 2d 72 65 70 61 69 72 20 7b 0a  0.1.1 -repair {.
0710: 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65    drop_all_table
0720: 73 0a 7d 20 7b 0a 20 20 31 20 20 20 22 43 52 45  s.} {.  1   "CRE
0730: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
0740: 6f 6e 65 29 22 20 20 20 20 20 20 20 20 20 20 20  one)"           
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0760: 20 20 32 20 20 20 22 43 52 45 41 54 45 20 54 41    2   "CREATE TA
0770: 42 4c 45 20 74 31 28 63 31 20 6f 6e 65 20 74 77  BLE t1(c1 one tw
0780: 6f 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  o)"             
0790: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
07a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
07b0: 28 63 31 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  (c1 one two thre
07c0: 65 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  e)"             
07d0: 20 7b 7d 0a 20 20 34 20 20 20 22 43 52 45 41 54   {}.  4   "CREAT
07e0: 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 6f 6e  E TABLE t1(c1 on
07f0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
0800: 29 22 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20  )"         {}.  
0810: 35 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  5   "CREATE TABL
0820: 45 20 74 31 28 63 31 20 6f 6e 65 20 74 77 6f 20  E t1(c1 one two 
0830: 74 68 72 65 65 20 66 6f 75 72 28 31 34 29 29 22  three four(14))"
0840: 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 22 43       {}.  6   "C
0850: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0860: 31 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20  1 one two three 
0870: 66 6f 75 72 28 31 34 2c 20 32 32 29 29 22 20 7b  four(14, 22))" {
0880: 7d 0a 20 20 37 20 20 20 22 43 52 45 41 54 45 20  }.  7   "CREATE 
0890: 54 41 42 4c 45 20 74 31 28 63 31 20 76 61 72 28  TABLE t1(c1 var(
08a0: 2b 31 34 2c 20 2d 32 32 2e 33 29 29 22 20 20 20  +14, -22.3))"   
08b0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 38 20           {}.  8 
08c0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
08d0: 74 31 28 63 31 20 76 61 72 28 31 2e 30 65 31 30  t1(c1 var(1.0e10
08e0: 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ))"             
08f0: 20 20 20 7b 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74     {}.}.do_creat
0900: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 30 2e 31  etable_tests 0.1
0910: 2e 32 20 2d 65 72 72 6f 72 20 7b 0a 20 20 6e 65  .2 -error {.  ne
0920: 61 72 20 22 25 73 22 3a 20 73 79 6e 74 61 78 20  ar "%s": syntax 
0930: 65 72 72 6f 72 0a 7d 20 7b 0a 20 20 31 20 20 20  error.} {.  1   
0940: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0950: 28 63 31 20 6f 6e 65 28 6e 75 6d 62 65 72 29 29  (c1 one(number))
0960: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
0970: 20 7b 6e 75 6d 62 65 72 7d 0a 7d 0a 0a 0a 23 20   {number}.}...# 
0980: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
0990: 38 37 36 32 2d 31 32 34 32 38 20 2d 2d 20 73 79  8762-12428 -- sy
09a0: 6e 74 61 78 20 64 69 61 67 72 61 6d 20 63 6f 6c  ntax diagram col
09b0: 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 23  umn-constraint.#
09c0: 0a 23 20 20 20 4e 6f 74 65 3a 20 4e 6f 74 20 73  .#   Note: Not s
09d0: 68 6f 77 6e 20 69 6e 20 74 68 65 20 73 79 6e 74  hown in the synt
09e0: 61 78 20 64 69 61 67 72 61 6d 20 69 73 20 74 68  ax diagram is th
09f0: 65 20 22 4e 55 4c 4c 22 20 63 6f 6e 73 74 72 61  e "NULL" constra
0a00: 69 6e 74 2e 20 54 68 69 73 0a 23 20 20 20 20 20  int. This.#     
0a10: 20 20 20 20 69 73 20 74 68 65 20 6f 70 70 6f 73      is the oppos
0a20: 69 74 65 20 6f 66 20 22 4e 4f 54 20 4e 55 4c 4c  ite of "NOT NULL
0a30: 22 20 2d 20 69 74 20 69 6d 70 6c 69 65 73 20 74  " - it implies t
0a40: 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  hat the column m
0a50: 61 79 0a 23 20 20 20 20 20 20 20 20 20 74 61 6b  ay.#         tak
0a60: 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  e a NULL value. 
0a70: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
0a80: 75 6c 74 20 61 6e 79 77 61 79 2c 20 73 6f 20 74  ult anyway, so t
0a90: 68 69 73 20 74 79 70 65 20 6f 66 0a 23 20 20 20  his type of.#   
0aa0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
0ab0: 20 69 73 20 72 61 72 65 6c 79 20 75 73 65 64 2e   is rarely used.
0ac0: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
0ad0: 65 5f 74 65 73 74 73 20 30 2e 32 2e 31 20 2d 72  e_tests 0.2.1 -r
0ae0: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61  epair {.  drop_a
0af0: 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65  ll_tables .  exe
0b00: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
0b10: 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41 52 59  BLE t2(x PRIMARY
0b20: 20 4b 45 59 29 20 7d 0a 7d 20 7b 0a 20 20 31 2e   KEY) }.} {.  1.
0b30: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
0b40: 45 20 74 31 28 63 31 20 74 65 78 74 20 50 52 49  E t1(c1 text PRI
0b50: 4d 41 52 59 20 4b 45 59 29 22 20 20 20 20 20 20  MARY KEY)"      
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b70: 20 20 20 7b 7d 0a 20 20 31 2e 32 20 20 20 22 43     {}.  1.2   "C
0b80: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0b90: 31 20 74 65 78 74 20 50 52 49 4d 41 52 59 20 4b  1 text PRIMARY K
0ba0: 45 59 20 41 53 43 29 22 20 20 20 20 20 20 20 20  EY ASC)"        
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0bc0: 20 20 31 2e 33 20 20 20 22 43 52 45 41 54 45 20    1.3   "CREATE 
0bd0: 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74  TABLE t1(c1 text
0be0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53   PRIMARY KEY DES
0bf0: 43 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  C)"             
0c00: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 34 20         {}.  1.4 
0c10: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0c20: 74 31 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54  t1(c1 text CONST
0c30: 52 41 49 4e 54 20 63 6f 6e 73 20 50 52 49 4d 41  RAINT cons PRIMA
0c40: 52 59 20 4b 45 59 20 44 45 53 43 29 22 20 20 20  RY KEY DESC)"   
0c50: 20 7b 7d 0a 0a 20 20 32 2e 31 20 20 20 22 43 52   {}..  2.1   "CR
0c60: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
0c70: 20 74 65 78 74 20 4e 4f 54 20 4e 55 4c 4c 29 22   text NOT NULL)"
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0ca0: 20 32 2e 32 20 20 20 22 43 52 45 41 54 45 20 54   2.2   "CREATE T
0cb0: 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20  ABLE t1(c1 text 
0cc0: 43 4f 4e 53 54 52 41 49 4e 54 20 6e 6d 20 4e 4f  CONSTRAINT nm NO
0cd0: 54 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20  T NULL)"        
0ce0: 20 20 20 20 20 20 7b 7d 0a 20 20 32 2e 33 20 20        {}.  2.3  
0cf0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
0d00: 31 28 63 31 20 74 65 78 74 20 4e 55 4c 4c 29 22  1(c1 text NULL)"
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d30: 7b 7d 0a 20 20 32 2e 34 20 20 20 22 43 52 45 41  {}.  2.4   "CREA
0d40: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0d50: 65 78 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 6e  ext CONSTRAINT n
0d60: 6d 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20  m NULL)"        
0d70: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20            {}..  
0d80: 33 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41  3.1   "CREATE TA
0d90: 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 55  BLE t1(c1 text U
0da0: 4e 49 51 55 45 29 22 20 20 20 20 20 20 20 20 20  NIQUE)"         
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 20 20 20 20 20 7b 7d 0a 20 20 33 2e 32 20 20 20       {}.  3.2   
0dd0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0de0: 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41  (c1 text CONSTRA
0df0: 49 4e 54 20 75 6e 20 55 4e 49 51 55 45 29 22 20  INT un UNIQUE)" 
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0e10: 7d 0a 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41  }..  4.1   "CREA
0e20: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0e30: 65 78 74 20 43 48 45 43 4b 28 63 31 21 3d 30 29  ext CHECK(c1!=0)
0e40: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
0e50: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34            {}.  4
0e60: 2e 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .2   "CREATE TAB
0e70: 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 43 4f  LE t1(c1 text CO
0e80: 4e 53 54 52 41 49 4e 54 20 63 68 6b 20 43 48 45  NSTRAINT chk CHE
0e90: 43 4b 28 63 31 21 3d 30 29 29 22 20 20 20 20 20  CK(c1!=0))"     
0ea0: 20 20 20 20 7b 7d 0a 0a 20 20 35 2e 31 20 20 20      {}..  5.1   
0eb0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0ec0: 28 63 31 20 74 65 78 74 20 44 45 46 41 55 4c 54  (c1 text DEFAULT
0ed0: 20 31 29 22 20 20 20 20 20 20 20 20 20 20 20 20   1)"            
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0ef0: 7d 0a 20 20 35 2e 32 20 20 20 22 43 52 45 41 54  }.  5.2   "CREAT
0f00: 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65  E TABLE t1(c1 te
0f10: 78 74 20 44 45 46 41 55 4c 54 20 2d 31 29 22 20  xt DEFAULT -1)" 
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f30: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e           {}.  5.
0f40: 33 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  3   "CREATE TABL
0f50: 45 20 74 31 28 63 31 20 74 65 78 74 20 44 45 46  E t1(c1 text DEF
0f60: 41 55 4c 54 20 2b 31 29 22 20 20 20 20 20 20 20  AULT +1)"       
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 7b 7d 0a 20 20 35 2e 34 20 20 20 22 43     {}.  5.4   "C
0f90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0fa0: 31 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 2d  1 text DEFAULT -
0fb0: 34 35 2e 38 65 32 32 29 22 20 20 20 20 20 20 20  45.8e22)"       
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0fd0: 20 20 35 2e 35 20 20 20 22 43 52 45 41 54 45 20    5.5   "CREATE 
0fe0: 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74  TABLE t1(c1 text
0ff0: 20 44 45 46 41 55 4c 54 20 28 31 2b 31 29 29 22   DEFAULT (1+1))"
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1010: 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e 36 20         {}.  5.6 
1020: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1030: 74 31 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54  t1(c1 text CONST
1040: 52 41 49 4e 54 20 5c 22 31 20 32 5c 22 20 44 45  RAINT \"1 2\" DE
1050: 46 41 55 4c 54 20 28 31 2b 31 29 29 22 20 20 20  FAULT (1+1))"   
1060: 20 7b 7d 0a 0a 20 20 36 2e 31 20 20 20 22 43 52   {}..  6.1   "CR
1070: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
1080: 20 74 65 78 74 20 43 4f 4c 4c 41 54 45 20 6e 6f   text COLLATE no
1090: 63 61 73 65 29 22 20 20 20 20 20 20 20 20 7b 7d  case)"        {}
10a0: 0a 20 20 36 2e 32 20 20 20 22 43 52 45 41 54 45  .  6.2   "CREATE
10b0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
10c0: 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 27 61 20  t CONSTRAINT 'a 
10d0: 78 27 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73  x' COLLATE nocas
10e0: 65 29 22 20 20 20 20 20 7b 7d 0a 0a 20 20 37 2e  e)"     {}..  7.
10f0: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
1100: 45 20 74 31 28 63 31 20 52 45 46 45 52 45 4e 43  E t1(c1 REFERENC
1110: 45 53 20 74 32 29 22 20 20 20 20 20 20 20 20 20  ES t2)"         
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1130: 20 20 20 7b 7d 0a 20 20 37 2e 32 20 20 20 22 43     {}.  7.2   "C
1140: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
1150: 31 20 43 4f 4e 53 54 52 41 49 4e 54 20 61 62 63  1 CONSTRAINT abc
1160: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 22   REFERENCES t2)"
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
1180: 0a 20 20 38 2e 31 20 20 20 7b 0a 20 20 20 20 43  .  8.1   {.    C
1190: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
11a0: 31 20 0a 20 20 20 20 20 20 50 52 49 4d 41 52 59  1 .      PRIMARY
11b0: 20 4b 45 59 20 4e 4f 54 20 4e 55 4c 4c 20 55 4e   KEY NOT NULL UN
11c0: 49 51 55 45 20 43 48 45 43 4b 28 63 31 20 49 53  IQUE CHECK(c1 IS
11d0: 20 27 74 65 6e 27 29 20 44 45 46 41 55 4c 54 20   'ten') DEFAULT 
11e0: 31 32 33 20 52 45 46 45 52 45 4e 43 45 53 20 74  123 REFERENCES t
11f0: 31 0a 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a  1.    );.  } {}.
1200: 20 20 38 2e 32 20 20 20 7b 0a 20 20 20 20 43 52    8.2   {.    CR
1210: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
1220: 20 0a 20 20 20 20 20 20 52 45 46 45 52 45 4e 43   .      REFERENC
1230: 45 53 20 74 31 20 44 45 46 41 55 4c 54 20 31 32  ES t1 DEFAULT 12
1240: 33 20 43 48 45 43 4b 28 63 31 20 49 53 20 27 74  3 CHECK(c1 IS 't
1250: 65 6e 27 29 20 55 4e 49 51 55 45 20 4e 4f 54 20  en') UNIQUE NOT 
1260: 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59  NULL PRIMARY KEY
1270: 20 0a 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a   .    );.  } {}.
1280: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
1290: 3a 20 52 2d 31 37 39 30 35 2d 33 31 39 32 33 20  : R-17905-31923 
12a0: 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  -- syntax diagra
12b0: 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  m table-constrai
12c0: 6e 74 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  nt.#.do_createta
12d0: 62 6c 65 5f 74 65 73 74 73 20 30 2e 33 2e 31 20  ble_tests 0.3.1 
12e0: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
12f0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1300: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1310: 54 41 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41  TABLE t2(x PRIMA
1320: 52 59 20 4b 45 59 29 20 7d 0a 7d 20 7b 0a 20 20  RY KEY) }.} {.  
1330: 31 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41  1.1   "CREATE TA
1340: 42 4c 45 20 74 31 28 63 31 2c 20 63 32 2c 20 50  BLE t1(c1, c2, P
1350: 52 49 4d 41 52 59 20 4b 45 59 28 63 31 29 29 22  RIMARY KEY(c1))"
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e           {}.  1.
1380: 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  2   "CREATE TABL
1390: 45 20 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49  E t1(c1, c2, PRI
13a0: 4d 41 52 59 20 4b 45 59 28 63 31 2c 20 63 32 29  MARY KEY(c1, c2)
13b0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
13c0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 33 20         {}.  1.3 
13d0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
13e0: 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49 4d 41  t1(c1, c2, PRIMA
13f0: 52 59 20 4b 45 59 28 63 31 2c 20 63 32 29 20 4f  RY KEY(c1, c2) O
1400: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1410: 45 29 22 20 20 7b 7d 0a 0a 20 20 32 2e 31 20 20  E)"  {}..  2.1  
1420: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
1430: 31 28 63 31 2c 20 63 32 2c 20 55 4e 49 51 55 45  1(c1, c2, UNIQUE
1440: 28 63 31 29 29 22 20 20 20 20 20 20 20 20 20 20  (c1))"          
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1460: 20 20 20 20 7b 7d 0a 20 20 32 2e 32 20 20 20 22      {}.  2.2   "
1470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1480: 63 31 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63  c1, c2, UNIQUE(c
1490: 31 2c 20 63 32 29 29 22 20 20 20 20 20 20 20 20  1, c2))"        
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 20 20 7b 7d 0a 20 20 32 2e 33 20 20 20 22 43 52    {}.  2.3   "CR
14c0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
14d0: 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63 31 2c  , c2, UNIQUE(c1,
14e0: 20 63 32 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   c2) ON CONFLICT
14f0: 20 49 47 4e 4f 52 45 29 22 20 20 20 20 20 20 20   IGNORE)"       
1500: 7b 7d 0a 0a 20 20 33 2e 31 20 20 20 22 43 52 45  {}..  3.1   "CRE
1510: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c  ATE TABLE t1(c1,
1520: 20 63 32 2c 20 43 48 45 43 4b 28 63 31 20 49 53   c2, CHECK(c1 IS
1530: 20 4e 4f 54 20 63 32 29 29 22 20 20 20 20 20 20   NOT c2))"      
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1550: 7d 0a 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41  }..  4.1   "CREA
1560: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20  TE TABLE t1(c1, 
1570: 63 32 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28  c2, FOREIGN KEY(
1580: 63 31 29 20 52 45 46 45 52 45 4e 43 45 53 20 74  c1) REFERENCES t
1590: 32 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d  2)"           {}
15a0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
15b0: 46 3a 20 52 2d 31 38 37 36 35 2d 33 31 31 37 31  F: R-18765-31171
15c0: 20 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72   -- syntax diagr
15d0: 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 23 0a  am column-def.#.
15e0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
15f0: 65 73 74 73 20 30 2e 34 2e 31 20 2d 72 65 70 61  ests 0.4.1 -repa
1600: 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f  ir {.  drop_all_
1610: 74 61 62 6c 65 73 20 0a 7d 20 7b 0a 20 20 31 20  tables .} {.  1 
1620: 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c      {CREATE TABL
1630: 45 20 74 31 28 0a 20 20 20 20 20 20 20 20 20 20  E t1(.          
1640: 20 63 6f 6c 31 2c 0a 20 20 20 20 20 20 20 20 20   col1,.         
1650: 20 20 63 6f 6c 32 20 54 45 58 54 2c 0a 20 20 20    col2 TEXT,.   
1660: 20 20 20 20 20 20 20 20 63 6f 6c 33 20 49 4e 54          col3 INT
1670: 45 47 45 52 20 55 4e 49 51 55 45 2c 0a 20 20 20  EGER UNIQUE,.   
1680: 20 20 20 20 20 20 20 20 63 6f 6c 34 20 56 41 52          col4 VAR
1690: 43 48 41 52 28 31 30 2c 20 31 30 29 20 50 52 49  CHAR(10, 10) PRI
16a0: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20  MARY KEY,.      
16b0: 20 20 20 20 20 22 6e 61 6d 65 20 77 69 74 68 20       "name with 
16c0: 73 70 61 63 65 73 22 20 52 45 46 45 52 45 4e 43  spaces" REFERENC
16d0: 45 53 20 74 31 0a 20 20 20 20 20 20 20 20 20 29  ES t1.         )
16e0: 3b 0a 20 20 20 20 20 20 20 20 7d 20 7b 7d 0a 7d  ;.        } {}.}
16f0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
1700: 20 52 2d 35 39 35 37 33 2d 31 31 30 37 35 20 2d   R-59573-11075 -
1710: 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  - syntax diagram
1720: 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74   create-table-st
1730: 6d 74 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  mt.#.do_createta
1740: 62 6c 65 5f 74 65 73 74 73 20 30 2e 35 2e 31 20  ble_tests 0.5.1 
1750: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
1760: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1770: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1780: 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63  TABLE t2(a, b, c
1790: 29 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 20 20  ) }.} {.  1     
17a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
17b0: 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20  (a, b, c)"      
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
17e0: 0a 20 20 32 20 20 20 20 20 22 43 52 45 41 54 45  .  2     "CREATE
17f0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
1800: 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20  , b, c)"        
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1820: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
1830: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52    "CREATE TEMPOR
1840: 41 52 59 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ARY TABLE t1(a, 
1850: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1870: 7b 7d 0a 20 20 34 20 20 20 20 20 22 43 52 45 41  {}.  4     "CREA
1880: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
1890: 45 58 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20  EXISTS t1(a, b, 
18a0: 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  c)"             
18b0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 20           {}.  5 
18c0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
18d0: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
18e0: 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29  ISTS t1(a, b, c)
18f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1900: 20 20 7b 7d 0a 20 20 36 20 20 20 20 20 22 43 52    {}.  6     "CR
1910: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
1920: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
1930: 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20  TS t1(a, b, c)" 
1940: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20             {}.. 
1950: 20 37 20 20 20 20 20 22 43 52 45 41 54 45 20 54   7     "CREATE T
1960: 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20  ABLE main.t1(a, 
1970: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 20 20 20 7b 7d 0a 20 20 38 20 20 20 20 20       {}.  8     
19a0: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
19b0: 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c  LE temp.t1(a, b,
19c0: 20 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20   c)"            
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
19e0: 0a 20 20 39 20 20 20 20 20 22 43 52 45 41 54 45  .  9     "CREATE
19f0: 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
1a00: 20 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63   temp.t1(a, b, c
1a10: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
1a20: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20         {}.  10  
1a30: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1a40: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 61  IF NOT EXISTS ma
1a50: 69 6e 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20  in.t1(a, b, c)" 
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a70: 7b 7d 0a 20 20 31 31 20 20 20 20 22 43 52 45 41  {}.  11    "CREA
1a80: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 49 46  TE TEMP TABLE IF
1a90: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 6d 70   NOT EXISTS temp
1aa0: 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20  .t1(a, b, c)"   
1ab0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 32           {}.  12
1ac0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
1ad0: 4f 52 41 52 59 20 54 41 42 4c 45 20 49 46 20 4e  ORARY TABLE IF N
1ae0: 4f 54 20 45 58 49 53 54 53 20 74 65 6d 70 2e 74  OT EXISTS temp.t
1af0: 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20  1(a, b, c)"     
1b00: 20 20 7b 7d 0a 0a 20 20 31 33 20 20 20 20 22 43    {}..  13    "C
1b10: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 20 41  REATE TABLE t1 A
1b20: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
1b30: 74 32 22 20 20 20 20 20 20 20 20 20 20 20 20 20  t2"             
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
1b50: 20 31 34 20 20 20 20 22 43 52 45 41 54 45 20 54   14    "CREATE T
1b60: 45 4d 50 20 54 41 42 4c 45 20 74 31 20 41 53 20  EMP TABLE t1 AS 
1b70: 53 45 4c 45 43 54 20 63 2c 20 62 2c 20 61 20 46  SELECT c, b, a F
1b80: 52 4f 4d 20 74 32 22 20 20 20 20 20 20 20 20 20  ROM t2"         
1b90: 20 20 20 20 20 7b 7d 0a 20 20 31 35 20 20 20 20       {}.  15    
1ba0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
1bb0: 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e 74   AS SELECT count
1bc0: 28 2a 29 2c 20 6d 61 78 28 62 29 2c 20 6d 69 6e  (*), max(b), min
1bd0: 28 61 29 20 46 52 4f 4d 20 74 32 22 20 20 7b 7d  (a) FROM t2"  {}
1be0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
1bf0: 46 3a 20 52 2d 33 32 31 33 38 2d 30 32 32 32 38  F: R-32138-02228
1c00: 20 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72   -- syntax diagr
1c10: 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63  am foreign-key-c
1c20: 6c 61 75 73 65 0a 23 0a 23 20 20 20 31 3a 20 20  lause.#.#   1:  
1c30: 20 20 20 20 20 20 20 45 78 70 6c 69 63 69 74 20         Explicit 
1c40: 70 61 72 65 6e 74 2d 6b 65 79 20 63 6f 6c 75 6d  parent-key colum
1c50: 6e 73 2e 0a 23 20 20 20 32 3a 20 20 20 20 20 20  ns..#   2:      
1c60: 20 20 20 49 6d 70 6c 69 63 69 74 20 63 68 69 6c     Implicit chil
1c70: 64 2d 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 0a 23  d-key columns..#
1c80: 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20 20 20  .#   1:         
1c90: 4d 41 54 43 48 20 46 55 4c 4c 0a 23 20 20 20 32  MATCH FULL.#   2
1ca0: 3a 20 20 20 20 20 20 20 20 20 4d 41 54 43 48 20  :         MATCH 
1cb0: 50 41 52 54 49 41 4c 0a 23 20 20 20 33 3a 20 20  PARTIAL.#   3:  
1cc0: 20 20 20 20 20 20 20 4d 41 54 43 48 20 53 49 4d         MATCH SIM
1cd0: 50 4c 45 0a 23 20 20 20 34 3a 20 20 20 20 20 20  PLE.#   4:      
1ce0: 20 20 20 4d 41 54 43 48 20 53 54 49 43 4b 0a 23     MATCH STICK.#
1cf0: 20 20 20 35 3a 20 20 20 20 20 20 20 20 20 0a 23     5:         .#
1d00: 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20 20 20  .#   1:         
1d10: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55  ON DELETE SET NU
1d20: 4c 4c 0a 23 20 20 20 32 3a 20 20 20 20 20 20 20  LL.#   2:       
1d30: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
1d40: 44 45 46 41 55 4c 54 0a 23 20 20 20 33 3a 20 20  DEFAULT.#   3:  
1d50: 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54 45         ON DELETE
1d60: 20 43 41 53 43 41 44 45 0a 23 20 20 20 34 3a 20   CASCADE.#   4: 
1d70: 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54          ON DELET
1d80: 45 20 52 45 53 54 52 49 43 54 0a 23 20 20 20 35  E RESTRICT.#   5
1d90: 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c  :         ON DEL
1da0: 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e 0a 23 20  ETE NO ACTION.# 
1db0: 20 20 36 3a 0a 23 0a 23 20 20 20 31 3a 20 20 20    6:.#.#   1:   
1dc0: 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20        ON UPDATE 
1dd0: 53 45 54 20 4e 55 4c 4c 0a 23 20 20 20 32 3a 20  SET NULL.#   2: 
1de0: 20 20 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54          ON UPDAT
1df0: 45 20 53 45 54 20 44 45 46 41 55 4c 54 0a 23 20  E SET DEFAULT.# 
1e00: 20 20 33 3a 20 20 20 20 20 20 20 20 20 4f 4e 20    3:         ON 
1e10: 55 50 44 41 54 45 20 43 41 53 43 41 44 45 0a 23  UPDATE CASCADE.#
1e20: 20 20 20 34 3a 20 20 20 20 20 20 20 20 20 4f 4e     4:         ON
1e30: 20 55 50 44 41 54 45 20 52 45 53 54 52 49 43 54   UPDATE RESTRICT
1e40: 0a 23 20 20 20 35 3a 20 20 20 20 20 20 20 20 20  .#   5:         
1e50: 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54  ON UPDATE NO ACT
1e60: 49 4f 4e 0a 23 20 20 20 36 3a 0a 23 0a 23 20 20  ION.#   6:.#.#  
1e70: 20 31 3a 20 20 20 20 20 20 20 20 20 4e 4f 54 20   1:         NOT 
1e80: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
1e90: 41 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 23 20  ALLY DEFERRED.# 
1ea0: 20 20 32 3a 20 20 20 20 20 20 20 20 20 4e 4f 54    2:         NOT
1eb0: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
1ec0: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a  IALLY IMMEDIATE.
1ed0: 23 20 20 20 33 3a 20 20 20 20 20 20 20 20 20 4e  #   3:         N
1ee0: 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 23 20  OT DEFERRABLE.# 
1ef0: 20 20 34 3a 20 20 20 20 20 20 20 20 20 44 45 46    4:         DEF
1f00: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
1f10: 59 20 44 45 46 45 52 52 45 44 0a 23 20 20 20 35  Y DEFERRED.#   5
1f20: 3a 20 20 20 20 20 20 20 20 20 44 45 46 45 52 52  :         DEFERR
1f30: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49  ABLE INITIALLY I
1f40: 4d 4d 45 44 49 41 54 45 0a 23 20 20 20 36 3a 20  MMEDIATE.#   6: 
1f50: 20 20 20 20 20 20 20 20 44 45 46 45 52 52 41 42          DEFERRAB
1f60: 4c 45 0a 23 20 20 20 37 3a 20 20 20 20 20 20 20  LE.#   7:       
1f70: 20 20 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61    .#.do_createta
1f80: 62 6c 65 5f 74 65 73 74 73 20 30 2e 36 2e 31 20  ble_tests 0.6.1 
1f90: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
1fa0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1fb0: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1fc0: 54 41 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41  TABLE t2(x PRIMA
1fd0: 52 59 20 4b 45 59 2c 20 79 29 20 7d 0a 20 20 65  RY KEY, y) }.  e
1fe0: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1ff0: 54 41 42 4c 45 20 74 33 28 69 2c 20 6a 2c 20 55  TABLE t3(i, j, U
2000: 4e 49 51 55 45 28 69 2c 20 6a 29 20 29 20 7d 0a  NIQUE(i, j) ) }.
2010: 7d 20 7b 0a 20 20 31 31 31 34 36 20 7b 20 43 52  } {.  11146 { CR
2020: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2030: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
2040: 74 32 28 78 29 20 4d 41 54 43 48 20 46 55 4c 4c  t2(x) MATCH FULL
2050: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
2060: 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41  SET NULL ON UPDA
2070: 54 45 20 52 45 53 54 52 49 43 54 20 44 45 46 45  TE RESTRICT DEFE
2080: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
2090: 20 31 31 34 31 32 20 7b 20 43 52 45 41 54 45 20   11412 { CREATE 
20a0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
20b0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29  REFERENCES t2(x)
20c0: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
20d0: 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41  RESTRICT ON UPDA
20e0: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4d 41 54 43  TE SET NULL MATC
20f0: 48 20 46 55 4c 4c 20 0a 20 20 20 20 4e 4f 54 20  H FULL .    NOT 
2100: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
2110: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
2120: 20 29 7d 20 7b 7d 0a 20 20 31 32 31 33 35 20 7b   )} {}.  12135 {
2130: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2140: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2150: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 50  ES t2(x) MATCH P
2160: 41 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44  ARTIAL .    ON D
2170: 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f  ELETE SET NULL O
2180: 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45  N UPDATE CASCADE
2190: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
21a0: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a  IALLY IMMEDIATE.
21b0: 20 20 29 7d 20 7b 7d 0a 20 20 31 32 34 32 37 20    )} {}.  12427 
21c0: 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  { CREATE TABLE t
21d0: 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e  1(a .    REFEREN
21e0: 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20  CES t2(x) MATCH 
21f0: 50 41 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20  PARTIAL .    ON 
2200: 44 45 4c 45 54 45 20 52 45 53 54 52 49 43 54 20  DELETE RESTRICT 
2210: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2220: 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20  FAULT .  )} {}. 
2230: 20 31 32 34 34 36 20 7b 20 43 52 45 41 54 45 20   12446 { CREATE 
2240: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2250: 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29  REFERENCES t2(x)
2260: 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a   MATCH PARTIAL .
2270: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45      ON DELETE RE
2280: 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45  STRICT ON UPDATE
2290: 20 52 45 53 54 52 49 43 54 20 44 45 46 45 52 52   RESTRICT DEFERR
22a0: 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31  ABLE.  )} {}.  1
22b0: 32 35 32 32 20 7b 20 43 52 45 41 54 45 20 54 41  2522 { CREATE TA
22c0: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
22d0: 46 45 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d  FERENCES t2(x) M
22e0: 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a 20 20  ATCH PARTIAL .  
22f0: 20 20 4f 4e 20 44 45 4c 45 54 45 20 4e 4f 20 41    ON DELETE NO A
2300: 43 54 49 4f 4e 20 4f 4e 20 55 50 44 41 54 45 20  CTION ON UPDATE 
2310: 53 45 54 20 44 45 46 41 55 4c 54 20 4e 4f 54 20  SET DEFAULT NOT 
2320: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
2330: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
2340: 20 29 7d 20 7b 7d 0a 20 20 31 33 31 33 33 20 7b   )} {}.  13133 {
2350: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2360: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2370: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2380: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2390: 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e  LETE SET NULL ON
23a0: 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45 20   UPDATE CASCADE 
23b0: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
23c0: 20 29 7d 20 7b 7d 0a 20 20 31 33 32 31 36 20 7b   )} {}.  13216 {
23d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
23e0: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
23f0: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2400: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2410: 4c 45 54 45 20 53 45 54 20 44 45 46 41 55 4c 54  LETE SET DEFAULT
2420: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 4e   ON UPDATE SET N
2430: 55 4c 4c 20 44 45 46 45 52 52 41 42 4c 45 0a 20  ULL DEFERRABLE. 
2440: 20 29 7d 20 7b 7d 0a 20 20 31 33 32 36 33 20 7b   )} {}.  13263 {
2450: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2460: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2470: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2480: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2490: 4c 45 54 45 20 53 45 54 20 44 45 46 41 55 4c 54  LETE SET DEFAULT
24a0: 20 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45    NOT DEFERRABLE
24b0: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 34 32 31  .  )} {}.  13421
24c0: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
24d0: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
24e0: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
24f0: 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20   SIMPLE .    ON 
2500: 44 45 4c 45 54 45 20 52 45 53 54 52 49 43 54 20  DELETE RESTRICT 
2510: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2520: 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52  FAULT NOT DEFERR
2530: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44  ABLE INITIALLY D
2540: 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a  EFERRED.  )} {}.
2550: 20 20 31 33 34 33 32 20 7b 20 43 52 45 41 54 45    13432 { CREATE
2560: 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20   TABLE t1(a .   
2570: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78   REFERENCES t2(x
2580: 29 20 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a  ) MATCH SIMPLE .
2590: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45      ON DELETE RE
25a0: 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45  STRICT ON UPDATE
25b0: 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44 45 46   CASCADE NOT DEF
25c0: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
25d0: 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d  Y IMMEDIATE.  )}
25e0: 20 7b 7d 0a 20 20 31 33 35 32 33 20 7b 20 43 52   {}.  13523 { CR
25f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2600: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
2610: 74 32 28 78 29 20 4d 41 54 43 48 20 53 49 4d 50  t2(x) MATCH SIMP
2620: 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  LE .    ON DELET
2630: 45 20 4e 4f 20 41 43 54 49 4f 4e 20 4f 4e 20 55  E NO ACTION ON U
2640: 50 44 41 54 45 20 53 45 54 20 44 45 46 41 55 4c  PDATE SET DEFAUL
2650: 54 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45  T NOT DEFERRABLE
2660: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 34 33 33 36  .  )} {}.  14336
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 4d 41 54 43 48  NCES t2(x) MATCH
26a0: 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20 44   STICK .    ON D
26b0: 45 4c 45 54 45 20 43 41 53 43 41 44 45 20 4f 4e  ELETE CASCADE ON
26c0: 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45 20   UPDATE CASCADE 
26d0: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
26e0: 7b 7d 0a 20 20 31 34 36 31 31 20 7b 20 43 52 45  {}.  14611 { CRE
26f0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2700: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2710: 32 28 78 29 20 4d 41 54 43 48 20 53 54 49 43 4b  2(x) MATCH STICK
2720: 20 0a 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20   .    ON UPDATE 
2730: 53 45 54 20 4e 55 4c 4c 20 4e 4f 54 20 44 45 46  SET NULL NOT DEF
2740: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
2750: 59 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20  Y DEFERRED.  )} 
2760: 7b 7d 0a 20 20 31 35 31 35 35 20 7b 20 43 52 45  {}.  15155 { CRE
2770: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2780: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2790: 32 28 78 29 0a 20 20 20 20 4f 4e 20 44 45 4c 45  2(x).    ON DELE
27a0: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55  TE SET NULL ON U
27b0: 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20  PDATE NO ACTION 
27c0: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
27d0: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
27e0: 20 29 7d 20 7b 7d 0a 20 20 31 35 34 35 33 20 7b   )} {}.  15453 {
27f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2800: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2810: 45 53 20 74 32 28 78 29 20 4f 4e 20 44 45 4c 45  ES t2(x) ON DELE
2820: 54 45 20 52 45 53 54 52 49 43 54 20 4f 4e 20 55  TE RESTRICT ON U
2830: 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20  PDATE NO ACTION 
2840: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
2850: 20 29 7d 20 7b 7d 0a 20 20 31 35 36 36 31 20 7b   )} {}.  15661 {
2860: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2870: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2880: 45 53 20 74 32 28 78 29 20 4e 4f 54 20 44 45 46  ES t2(x) NOT DEF
2890: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
28a0: 59 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20  Y DEFERRED.  )} 
28b0: 7b 7d 0a 20 20 32 31 31 31 35 20 7b 20 43 52 45  {}.  21115 { CRE
28c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
28d0: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
28e0: 32 20 4d 41 54 43 48 20 46 55 4c 4c 20 0a 20 20  2 MATCH FULL .  
28f0: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
2900: 4e 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 53  NULL ON UPDATE S
2910: 45 54 20 4e 55 4c 4c 20 44 45 46 45 52 52 41 42  ET NULL DEFERRAB
2920: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
2930: 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20  EDIATE.  )} {}. 
2940: 20 32 31 31 32 33 20 7b 20 43 52 45 41 54 45 20   21123 { CREATE 
2950: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2960: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2970: 54 43 48 20 46 55 4c 4c 20 0a 20 20 20 20 4f 4e  TCH FULL .    ON
2980: 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c   DELETE SET NULL
2990: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
29a0: 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52  EFAULT NOT DEFER
29b0: 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20  RABLE.  )} {}.  
29c0: 32 31 32 31 37 20 7b 20 43 52 45 41 54 45 20 54  21217 { CREATE T
29d0: 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52  ABLE t1(a .    R
29e0: 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54  EFERENCES t2 MAT
29f0: 43 48 20 46 55 4c 4c 20 4f 4e 20 44 45 4c 45 54  CH FULL ON DELET
2a00: 45 20 53 45 54 20 44 45 46 41 55 4c 54 20 4f 4e  E SET DEFAULT ON
2a10: 20 55 50 44 41 54 45 20 53 45 54 20 4e 55 4c 4c   UPDATE SET NULL
2a20: 20 0a 20 20 29 7d 20 7b 7d 0a 20 20 32 31 33 36   .  )} {}.  2136
2a30: 32 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  2 { CREATE TABLE
2a40: 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52   t1(a .    REFER
2a50: 45 4e 43 45 53 20 74 32 20 4d 41 54 43 48 20 46  ENCES t2 MATCH F
2a60: 55 4c 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  ULL .    ON DELE
2a70: 54 45 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44  TE CASCADE NOT D
2a80: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
2a90: 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20  LLY IMMEDIATE.  
2aa0: 29 7d 20 7b 7d 0a 20 20 32 32 31 34 33 20 7b 20  )} {}.  22143 { 
2ab0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2ac0: 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45  a .    REFERENCE
2ad0: 53 20 74 32 20 4d 41 54 43 48 20 50 41 52 54 49  S t2 MATCH PARTI
2ae0: 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  AL .    ON DELET
2af0: 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50  E SET NULL ON UP
2b00: 44 41 54 45 20 52 45 53 54 52 49 43 54 20 4e 4f  DATE RESTRICT NO
2b10: 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  T DEFERRABLE.  )
2b20: 7d 20 7b 7d 0a 20 20 32 32 31 35 36 20 7b 20 43  } {}.  22156 { C
2b30: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2b40: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2b50: 20 74 32 20 4d 41 54 43 48 20 50 41 52 54 49 41   t2 MATCH PARTIA
2b60: 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45  L .    ON DELETE
2b70: 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44   SET NULL ON UPD
2b80: 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 44 45  ATE NO ACTION DE
2b90: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
2ba0: 0a 20 20 32 32 33 32 37 20 7b 20 43 52 45 41 54  .  22327 { CREAT
2bb0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2bc0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2bd0: 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 4f 4e  MATCH PARTIAL ON
2be0: 20 44 45 4c 45 54 45 20 43 41 53 43 41 44 45 20   DELETE CASCADE 
2bf0: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2c00: 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20  FAULT .  )} {}. 
2c10: 20 32 32 36 36 33 20 7b 20 43 52 45 41 54 45 20   22663 { CREATE 
2c20: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2c30: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2c40: 54 43 48 20 50 41 52 54 49 41 4c 20 4e 4f 54 20  TCH PARTIAL NOT 
2c50: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
2c60: 7b 7d 0a 20 20 32 33 32 33 36 20 7b 20 43 52 45  {}.  23236 { CRE
2c70: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2c80: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2c90: 32 20 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a  2 MATCH SIMPLE .
2ca0: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45      ON DELETE SE
2cb0: 54 20 44 45 46 41 55 4c 54 20 4f 4e 20 55 50 44  T DEFAULT ON UPD
2cc0: 41 54 45 20 43 41 53 43 41 44 45 20 44 45 46 45  ATE CASCADE DEFE
2cd0: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
2ce0: 20 32 34 31 35 35 20 7b 20 43 52 45 41 54 45 20   24155 { CREATE 
2cf0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2d00: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2d10: 54 43 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f  TCH STICK .    O
2d20: 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c  N DELETE SET NUL
2d30: 4c 20 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41  L ON UPDATE NO A
2d40: 43 54 49 4f 4e 20 44 45 46 45 52 52 41 42 4c 45  CTION DEFERRABLE
2d50: 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44   INITIALLY IMMED
2d60: 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  IATE.  )} {}.  2
2d70: 34 35 32 32 20 7b 20 43 52 45 41 54 45 20 54 41  4522 { CREATE TA
2d80: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2d90: 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43  FERENCES t2 MATC
2da0: 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20  H STICK .    ON 
2db0: 44 45 4c 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e  DELETE NO ACTION
2dc0: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
2dd0: 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52  EFAULT NOT DEFER
2de0: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
2df0: 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b  IMMEDIATE.  )} {
2e00: 7d 0a 20 20 32 34 36 32 35 20 7b 20 43 52 45 41  }.  24625 { CREA
2e10: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20  TE TABLE t1(a . 
2e20: 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32     REFERENCES t2
2e30: 20 4d 41 54 43 48 20 53 54 49 43 4b 20 0a 20 20   MATCH STICK .  
2e40: 20 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20    ON UPDATE SET 
2e50: 44 45 46 41 55 4c 54 20 44 45 46 45 52 52 41 42  DEFAULT DEFERRAB
2e60: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
2e70: 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20  EDIATE.  )} {}. 
2e80: 20 32 35 34 35 34 20 7b 20 43 52 45 41 54 45 20   25454 { CREATE 
2e90: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2ea0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 0a 20  REFERENCES t2 . 
2eb0: 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45 53     ON DELETE RES
2ec0: 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45 20  TRICT ON UPDATE 
2ed0: 4e 4f 20 41 43 54 49 4f 4e 20 44 45 46 45 52 52  NO ACTION DEFERR
2ee0: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44  ABLE INITIALLY D
2ef0: 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a  EFERRED.  )} {}.
2f00: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
2f50: 54 65 73 74 20 63 61 73 65 73 20 65 5f 63 72 65  Test cases e_cre
2f60: 61 74 65 74 61 62 6c 65 2d 31 2e 2a 20 2d 20 74  atetable-1.* - t
2f70: 65 73 74 20 73 74 61 74 65 6d 65 6e 74 73 20 72  est statements r
2f80: 65 6c 61 74 65 64 20 74 6f 20 74 61 62 6c 65 20  elated to table 
2f90: 61 6e 64 0a 23 20 64 61 74 61 62 61 73 65 20 6e  and.# database n
2fa0: 61 6d 65 73 2c 20 74 68 65 20 54 45 4d 50 20 61  ames, the TEMP a
2fb0: 6e 64 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79  nd TEMPORARY key
2fc0: 77 6f 72 64 73 2c 20 61 6e 64 20 74 68 65 20 49  words, and the I
2fd0: 46 20 4e 4f 54 20 45 58 49 53 54 53 0a 23 20 63  F NOT EXISTS.# c
2fe0: 6c 61 75 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c  lause..#.drop_al
2ff0: 6c 5f 74 61 62 6c 65 73 0a 66 6f 72 63 65 64 65  l_tables.forcede
3000: 6c 65 74 65 20 74 65 73 74 2e 64 62 32 20 74 65  lete test.db2 te
3010: 73 74 2e 64 62 33 0a 0a 64 6f 5f 65 78 65 63 73  st.db3..do_execs
3020: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
3030: 74 61 62 6c 65 2d 31 2e 30 20 7b 0a 20 20 41 54  table-1.0 {.  AT
3040: 54 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20  TACH 'test.db2' 
3050: 41 53 20 61 75 78 61 3b 0a 20 20 41 54 54 41 43  AS auxa;.  ATTAC
3060: 48 20 27 74 65 73 74 2e 64 62 33 27 20 41 53 20  H 'test.db3' AS 
3070: 61 75 78 62 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56  auxb;.} {}..# EV
3080: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 37 38  IDENCE-OF: R-178
3090: 39 39 2d 30 34 35 35 34 20 54 61 62 6c 65 20 6e  99-04554 Table n
30a0: 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ames that begin 
30b0: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61  with "sqlite_" a
30c0: 72 65 0a 23 20 72 65 73 65 72 76 65 64 20 66 6f  re.# reserved fo
30d0: 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20  r internal use. 
30e0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
30f0: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65  o attempt to cre
3100: 61 74 65 20 61 20 74 61 62 6c 65 0a 23 20 77 69  ate a table.# wi
3110: 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20 73  th a name that s
3120: 74 61 72 74 73 20 77 69 74 68 20 22 73 71 6c 69  tarts with "sqli
3130: 74 65 5f 22 2e 0a 23 0a 64 6f 5f 63 72 65 61 74  te_"..#.do_creat
3140: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 31  etable_tests 1.1
3150: 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20 6f 62  .1 -error {.  ob
3160: 6a 65 63 74 20 6e 61 6d 65 20 72 65 73 65 72 76  ject name reserv
3170: 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  ed for internal 
3180: 75 73 65 3a 20 25 73 0a 7d 20 7b 0a 20 20 31 20  use: %s.} {.  1 
3190: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
31a0: 20 73 71 6c 69 74 65 5f 61 62 63 28 61 2c 20 62   sqlite_abc(a, b
31b0: 2c 20 63 29 22 20 20 20 20 20 20 20 20 73 71 6c  , c)"        sql
31c0: 69 74 65 5f 61 62 63 0a 20 20 32 20 20 20 20 22  ite_abc.  2    "
31d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d  CREATE TABLE tem
31e0: 70 2e 73 71 6c 69 74 65 5f 68 65 6c 6c 6f 77 6f  p.sqlite_hellowo
31f0: 72 6c 64 28 78 29 22 20 20 73 71 6c 69 74 65 5f  rld(x)"  sqlite_
3200: 68 65 6c 6c 6f 77 6f 72 6c 64 0a 20 20 33 20 20  helloworld.  3  
3210: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
3220: 61 75 78 61 2e 22 73 71 6c 69 74 65 5f 5f 22 28  auxa."sqlite__"(
3230: 78 2c 20 79 29 7d 20 20 20 20 20 20 73 71 6c 69  x, y)}      sqli
3240: 74 65 5f 5f 0a 20 20 34 20 20 20 20 7b 43 52 45  te__.  4    {CRE
3250: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22  ATE TABLE auxb."
3260: 73 71 6c 69 74 65 5f 22 28 7a 29 7d 20 20 20 20  sqlite_"(z)}    
3270: 20 20 20 20 20 20 73 71 6c 69 74 65 5f 0a 20 20        sqlite_.  
3280: 35 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42  5    {CREATE TAB
3290: 4c 45 20 22 53 51 4c 49 54 45 5f 54 42 4c 22 28  LE "SQLITE_TBL"(
32a0: 7a 29 7d 20 20 20 20 20 20 20 20 20 20 20 20 53  z)}            S
32b0: 51 4c 49 54 45 5f 54 42 4c 0a 7d 0a 64 6f 5f 63  QLITE_TBL.}.do_c
32c0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
32d0: 20 31 2e 31 2e 32 20 7b 0a 20 20 31 20 20 20 20   1.1.2 {.  1    
32e0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  "CREATE TABLE sq
32f0: 6c 69 74 5f 61 62 63 28 61 2c 20 62 2c 20 63 29  lit_abc(a, b, c)
3300: 22 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32  "         {}.  2
3310: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
3320: 45 20 74 65 6d 70 2e 73 71 6c 69 74 65 68 65 6c  E temp.sqlitehel
3330: 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20 20 7b 7d  loworld(x)"   {}
3340: 0a 20 20 33 20 20 20 20 7b 43 52 45 41 54 45 20  .  3    {CREATE 
3350: 54 41 42 4c 45 20 61 75 78 61 2e 22 73 71 6c 69  TABLE auxa."sqli
3360: 74 65 22 28 78 2c 20 79 29 7d 20 20 20 20 20 20  te"(x, y)}      
3370: 20 20 7b 7d 0a 20 20 34 20 20 20 20 7b 43 52 45    {}.  4    {CRE
3380: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22  ATE TABLE auxb."
3390: 73 71 6c 69 74 65 2d 22 28 7a 29 7d 20 20 20 20  sqlite-"(z)}    
33a0: 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20        {}.  5    
33b0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 53  {CREATE TABLE "S
33c0: 51 4c 49 54 45 2d 54 42 4c 22 28 7a 29 7d 20 20  QLITE-TBL"(z)}  
33d0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a            {}.}..
33e0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
33f0: 52 2d 31 30 31 39 35 2d 33 31 30 32 33 20 49 66  R-10195-31023 If
3400: 20 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d   a <database-nam
3410: 65 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  e> is specified,
3420: 20 69 74 0a 23 20 6d 75 73 74 20 62 65 20 65 69   it.# must be ei
3430: 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 22 74 65  ther "main", "te
3440: 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65  mp", or the name
3450: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
3460: 64 61 74 61 62 61 73 65 2e 0a 23 0a 23 20 45 56  database..#.# EV
3470: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 38  IDENCE-OF: R-398
3480: 32 32 2d 30 37 38 32 32 20 49 6e 20 74 68 69 73  22-07822 In this
3490: 20 63 61 73 65 20 74 68 65 20 6e 65 77 20 74 61   case the new ta
34a0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
34b0: 6e 0a 23 20 74 68 65 20 6e 61 6d 65 64 20 64 61  n.# the named da
34c0: 74 61 62 61 73 65 2e 0a 23 0a 23 20 20 20 54 65  tabase..#.#   Te
34d0: 73 74 20 63 61 73 65 73 20 31 2e 32 2e 2a 20 74  st cases 1.2.* t
34e0: 65 73 74 20 74 68 65 20 66 69 72 73 74 20 6f 66  est the first of
34f0: 20 74 68 65 20 74 77 6f 20 72 65 71 75 69 72 65   the two require
3500: 6d 65 6e 74 73 20 61 62 6f 76 65 2e 20 54 68 65  ments above. The
3510: 0a 23 20 20 20 73 65 63 6f 6e 64 20 69 73 20 76  .#   second is v
3520: 65 72 69 66 69 65 64 20 62 79 20 63 61 73 65 73  erified by cases
3530: 20 31 2e 33 2e 2a 2e 0a 23 0a 64 6f 5f 63 72 65   1.3.*..#.do_cre
3540: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
3550: 2e 32 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20  .2.1 -error {.  
3560: 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61 73 65  unknown database
3570: 20 25 73 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22   %s.} {.  1    "
3580: 43 52 45 41 54 45 20 54 41 42 4c 45 20 67 65 6f  CREATE TABLE geo
3590: 72 67 65 2e 74 31 28 61 2c 20 62 29 22 20 20 20  rge.t1(a, b)"   
35a0: 20 20 20 20 20 20 20 20 20 67 65 6f 72 67 65 0a           george.
35b0: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
35c0: 41 42 4c 45 20 5f 2e 74 31 28 61 2c 20 62 29 22  ABLE _.t1(a, b)"
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 5f 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61   _.}.do_createta
35f0: 62 6c 65 5f 74 65 73 74 73 20 31 2e 32 2e 32 20  ble_tests 1.2.2 
3600: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
3610: 20 54 41 42 4c 45 20 6d 61 69 6e 2e 61 62 63 28   TABLE main.abc(
3620: 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20  a, b, c)"       
3630: 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52     {}.  2    "CR
3640: 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e  EATE TABLE temp.
3650: 68 65 6c 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20  helloworld(x)"  
3660: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
3670: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   {CREATE TABLE a
3680: 75 78 61 2e 22 74 20 31 22 28 78 2c 20 79 29 7d  uxa."t 1"(x, y)}
3690: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
36a0: 34 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42  4    {CREATE TAB
36b0: 4c 45 20 61 75 78 62 2e 78 79 7a 28 7a 29 7d 20  LE auxb.xyz(z)} 
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
36d0: 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  }.}.drop_all_tab
36e0: 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  les.do_createtab
36f0: 6c 65 5f 74 65 73 74 73 20 31 2e 33 20 2d 74 63  le_tests 1.3 -tc
3700: 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e 73 65 74  lquery {.  unset
3710: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58 0a 20   -nocomplain X. 
3720: 20 61 72 72 61 79 20 73 65 74 20 58 20 5b 74 61   array set X [ta
3730: 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74  ble_list].  list
3740: 20 24 58 28 6d 61 69 6e 29 20 24 58 28 74 65 6d   $X(main) $X(tem
3750: 70 29 20 24 58 28 61 75 78 61 29 20 24 58 28 61  p) $X(auxa) $X(a
3760: 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20 20 20 20  uxb).} {.  1    
3770: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 6d 61  "CREATE TABLE ma
3780: 69 6e 2e 61 62 63 28 61 2c 20 62 2c 20 63 29 22  in.abc(a, b, c)"
3790: 20 20 7b 61 62 63 20 7b 7d 20 7b 7d 20 7b 7d 7d    {abc {} {} {}}
37a0: 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20  .  2    "CREATE 
37b0: 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c  TABLE main.t1(a,
37c0: 20 62 2c 20 63 29 22 20 20 20 7b 7b 61 62 63 20   b, c)"   {{abc 
37d0: 74 31 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20  t1} {} {} {}}.  
37e0: 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  3    "CREATE TAB
37f0: 4c 45 20 74 65 6d 70 2e 74 6d 70 28 61 2c 20 62  LE temp.tmp(a, b
3800: 2c 20 63 29 22 20 20 7b 7b 61 62 63 20 74 31 7d  , c)"  {{abc t1}
3810: 20 74 6d 70 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20   tmp {} {}}.  4 
3820: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
3830: 20 61 75 78 62 2e 74 62 6c 28 78 2c 20 79 29 22   auxb.tbl(x, y)"
3840: 20 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74       {{abc t1} t
3850: 6d 70 20 7b 7d 20 74 62 6c 7d 0a 20 20 35 20 20  mp {} tbl}.  5  
3860: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3870: 61 75 78 62 2e 74 31 28 6b 2c 20 76 29 22 20 20  auxb.t1(k, v)"  
3880: 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d      {{abc t1} tm
3890: 70 20 7b 7d 20 7b 74 31 20 74 62 6c 7d 7d 0a 20  p {} {t1 tbl}}. 
38a0: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
38b0: 42 4c 45 20 61 75 78 61 2e 6e 65 78 74 28 63 2c  BLE auxa.next(c,
38c0: 20 64 29 22 20 20 20 20 7b 7b 61 62 63 20 74 31   d)"    {{abc t1
38d0: 7d 20 74 6d 70 20 6e 65 78 74 20 7b 74 31 20 74  } tmp next {t1 t
38e0: 62 6c 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  bl}}.}..# EVIDEN
38f0: 43 45 2d 4f 46 3a 20 52 2d 31 38 38 39 35 2d 32  CE-OF: R-18895-2
3900: 37 33 36 35 20 49 66 20 74 68 65 20 22 54 45 4d  7365 If the "TEM
3910: 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59  P" or "TEMPORARY
3920: 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73  " keyword occurs
3930: 0a 23 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  .# between the "
3940: 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42  CREATE" and "TAB
3950: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77  LE" then the new
3960: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
3970: 64 20 69 6e 20 74 68 65 0a 23 20 74 65 6d 70 20  d in the.# temp 
3980: 64 61 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70  database..#.drop
3990: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63  _all_tables.do_c
39a0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
39b0: 20 31 2e 34 20 2d 74 63 6c 71 75 65 72 79 20 7b   1.4 -tclquery {
39c0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
39d0: 6c 61 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73  lain X.  array s
39e0: 65 74 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74  et X [table_list
39f0: 5d 0a 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e  ].  list $X(main
3a00: 29 20 24 58 28 74 65 6d 70 29 20 24 58 28 61 75  ) $X(temp) $X(au
3a10: 78 61 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b  xa) $X(auxb).} {
3a20: 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20  .  1    "CREATE 
3a30: 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c  TEMP TABLE t1(a,
3a40: 20 62 29 22 20 20 20 20 20 20 7b 7b 7d 20 74 31   b)"      {{} t1
3a50: 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20 20 22   {} {}}.  2    "
3a60: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3a70: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 29 22   TABLE t2(a, b)"
3a80: 20 7b 7b 7d 20 7b 74 31 20 74 32 7d 20 7b 7d 20   {{} {t1 t2} {} 
3a90: 7b 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  {}}.}..# EVIDENC
3aa0: 45 2d 4f 46 3a 20 52 2d 34 39 34 33 39 2d 34 37  E-OF: R-49439-47
3ab0: 35 36 31 20 49 74 20 69 73 20 61 6e 20 65 72 72  561 It is an err
3ac0: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
3ad0: 74 68 20 61 0a 23 20 3c 64 61 74 61 62 61 73 65  th a.# <database
3ae0: 2d 6e 61 6d 65 3e 20 61 6e 64 20 74 68 65 20 54  -name> and the T
3af0: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
3b00: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
3b10: 20 74 68 65 0a 23 20 3c 64 61 74 61 62 61 73 65   the.# <database
3b20: 2d 6e 61 6d 65 3e 20 69 73 20 22 74 65 6d 70 22  -name> is "temp"
3b30: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
3b40: 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  les.do_createtab
3b50: 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e 31 20 2d  le_tests 1.5.1 -
3b60: 65 72 72 6f 72 20 7b 0a 20 20 74 65 6d 70 6f 72  error {.  tempor
3b70: 61 72 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d  ary table name m
3b80: 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
3b90: 65 64 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  ed.} {.  1    "C
3ba0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
3bb0: 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62 29 22 20   main.t1(a, b)" 
3bc0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
3bd0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
3be0: 52 59 20 54 41 42 4c 45 20 61 75 78 61 2e 74 32  RY TABLE auxa.t2
3bf0: 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33  (a, b)"   {}.  3
3c00: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
3c10: 20 54 41 42 4c 45 20 61 75 78 62 2e 74 33 28 61   TABLE auxb.t3(a
3c20: 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7d 0a  , b)"        {}.
3c30: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
3c40: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 6d  EMPORARY TABLE m
3c50: 61 69 6e 2e 78 78 78 28 78 29 22 20 20 20 20 20  ain.xxx(x)"     
3c60: 7b 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  {}.}.drop_all_ta
3c70: 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61  bles.do_createta
3c80: 62 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e 32 20  ble_tests 1.5.2 
3c90: 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e  -tclquery {.  un
3ca0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3cb0: 58 0a 20 20 61 72 72 61 79 20 73 65 74 20 58 20  X.  array set X 
3cc0: 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c  [table_list].  l
3cd0: 69 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58 28  ist $X(main) $X(
3ce0: 74 65 6d 70 29 20 24 58 28 61 75 78 61 29 20 24  temp) $X(auxa) $
3cf0: 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20  X(auxb).} {.  1 
3d00: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20     "CREATE TEMP 
3d10: 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c  TABLE temp.t1(a,
3d20: 20 62 29 22 20 20 20 20 20 20 20 20 7b 7b 7d 20   b)"        {{} 
3d30: 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20  t1 {} {}}.  2   
3d40: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
3d50: 52 59 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 32  RY TABLE temp.t2
3d60: 28 61 2c 20 62 29 22 20 20 20 7b 7b 7d 20 7b 74  (a, b)"   {{} {t
3d70: 31 20 74 32 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 33  1 t2} {} {}}.  3
3d80: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
3d90: 20 54 41 42 4c 45 20 54 45 4d 50 2e 74 33 28 61   TABLE TEMP.t3(a
3da0: 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7b 7d  , b)"        {{}
3db0: 20 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d 20 7b   {t1 t2 t3} {} {
3dc0: 7d 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54  }}.  4    "CREAT
3dd0: 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
3de0: 45 20 54 45 4d 50 2e 78 78 78 28 78 29 22 20 20  E TEMP.xxx(x)"  
3df0: 20 20 20 7b 7b 7d 20 7b 74 31 20 74 32 20 74 33     {{} {t1 t2 t3
3e00: 20 78 78 78 7d 20 7b 7d 20 7b 7d 7d 0a 7d 0a 0a   xxx} {} {}}.}..
3e10: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
3e20: 2d 30 30 39 31 37 2d 30 39 33 39 33 20 49 66 20  -00917-09393 If 
3e30: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
3e40: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
3e50: 64 20 74 68 65 0a 23 20 54 45 4d 50 20 6b 65 79  d the.# TEMP key
3e60: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
3e70: 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62  ent then the tab
3e80: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
3e90: 20 74 68 65 20 6d 61 69 6e 0a 23 20 64 61 74 61   the main.# data
3ea0: 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  base..#.drop_all
3eb0: 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74  _tables.do_creat
3ec0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 36  etable_tests 1.6
3ed0: 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75   -tclquery {.  u
3ee0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3ef0: 20 58 0a 20 20 61 72 72 61 79 20 73 65 74 20 58   X.  array set X
3f00: 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20   [table_list].  
3f10: 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58  list $X(main) $X
3f20: 28 74 65 6d 70 29 20 24 58 28 61 75 78 61 29 20  (temp) $X(auxa) 
3f30: 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31  $X(auxb).} {.  1
3f40: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
3f50: 45 20 74 31 28 61 2c 20 62 29 22 20 20 20 7b 74  E t1(a, b)"   {t
3f60: 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20  1 {} {} {}}.  2 
3f70: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
3f80: 20 74 32 28 61 2c 20 62 29 22 20 20 20 7b 7b 74   t2(a, b)"   {{t
3f90: 31 20 74 32 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  1 t2} {} {} {}}.
3fa0: 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54    3    "CREATE T
3fb0: 41 42 4c 45 20 74 33 28 61 2c 20 62 29 22 20 20  ABLE t3(a, b)"  
3fc0: 20 7b 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d 20   {{t1 t2 t3} {} 
3fd0: 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20 20 22 43  {} {}}.  4    "C
3fe0: 52 45 41 54 45 20 54 41 42 4c 45 20 78 78 78 28  REATE TABLE xxx(
3ff0: 78 29 22 20 20 20 20 20 7b 7b 74 31 20 74 32 20  x)"     {{t1 t2 
4000: 74 33 20 78 78 78 7d 20 7b 7d 20 7b 7d 20 7b 7d  t3 xxx} {} {} {}
4010: 7d 0a 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  }.}..drop_all_ta
4020: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
4030: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
4040: 6c 65 2d 31 2e 37 2e 30 20 7b 0a 20 20 43 52 45  le-1.7.0 {.  CRE
4050: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
4060: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  y);.  CREATE IND
4070: 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a  EX i1 ON t1(x);.
4080: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 20 76    CREATE VIEW  v
4090: 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  1 AS SELECT * FR
40a0: 4f 4d 20 74 31 3b 0a 0a 20 20 43 52 45 41 54 45  OM t1;..  CREATE
40b0: 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31   TABLE auxa.tbl1
40c0: 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45  (x, y);.  CREATE
40d0: 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31   INDEX auxa.idx1
40e0: 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43   ON tbl1(x);.  C
40f0: 52 45 41 54 45 20 56 49 45 57 20 61 75 78 61 2e  REATE VIEW auxa.
4100: 76 69 65 77 31 20 41 53 20 53 45 4c 45 43 54 20  view1 AS SELECT 
4110: 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b  * FROM tbl1;.} {
4120: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
4130: 3a 20 52 2d 30 31 32 33 32 2d 35 34 38 33 38 20  : R-01232-54838 
4140: 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e  It is usually an
4150: 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70   error to attemp
4160: 74 20 74 6f 20 63 72 65 61 74 65 0a 23 20 61 20  t to create.# a 
4170: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
4180: 61 74 61 62 61 73 65 20 74 68 61 74 20 61 6c 72  atabase that alr
4190: 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20  eady contains a 
41a0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20  table, index or 
41b0: 76 69 65 77 0a 23 20 6f 66 20 74 68 65 20 73 61  view.# of the sa
41c0: 6d 65 20 6e 61 6d 65 2e 0a 23 0a 23 20 20 20 54  me name..#.#   T
41d0: 65 73 74 20 63 61 73 65 73 20 31 2e 37 2e 31 2e  est cases 1.7.1.
41e0: 2a 20 76 65 72 69 66 79 20 74 68 61 74 20 63 72  * verify that cr
41f0: 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 69  eating a table i
4200: 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74  n a database wit
4210: 68 20 61 0a 23 20 20 20 74 61 62 6c 65 2f 69 6e  h a.#   table/in
4220: 64 65 78 2f 76 69 65 77 20 6f 66 20 74 68 65 20  dex/view of the 
4230: 73 61 6d 65 20 6e 61 6d 65 20 64 6f 65 73 20 66  same name does f
4240: 61 69 6c 2e 20 31 2e 37 2e 32 2e 2a 20 74 65 73  ail. 1.7.2.* tes
4250: 74 73 20 74 68 61 74 20 63 72 65 61 74 69 6e 67  ts that creating
4260: 0a 23 20 20 20 61 20 74 61 62 6c 65 20 77 69 74  .#   a table wit
4270: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
4280: 61 73 20 61 20 74 61 62 6c 65 2f 69 6e 64 65 78  as a table/index
4290: 2f 76 69 65 77 20 69 6e 20 61 20 64 69 66 66 65  /view in a diffe
42a0: 72 65 6e 74 20 64 61 74 61 62 61 73 65 0a 23 20  rent database.# 
42b0: 20 20 69 73 20 4f 6b 2e 0a 23 0a 64 6f 5f 63 72    is Ok..#.do_cr
42c0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
42d0: 31 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25  1.7.1 -error { %
42e0: 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52  s } {.  1    "CR
42f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
4300: 20 62 29 22 20 20 20 7b 7b 74 61 62 6c 65 20 74   b)"   {{table t
4310: 31 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  1 already exists
4320: 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54  }}.  2    "CREAT
4330: 45 20 54 41 42 4c 45 20 69 31 28 61 2c 20 62 29  E TABLE i1(a, b)
4340: 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61  "   {{there is a
4350: 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20  lready an index 
4360: 6e 61 6d 65 64 20 69 31 7d 7d 0a 20 20 33 20 20  named i1}}.  3  
4370: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4380: 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7b 74 61  v1(a, b)"   {{ta
4390: 62 6c 65 20 76 31 20 61 6c 72 65 61 64 79 20 65  ble v1 already e
43a0: 78 69 73 74 73 7d 7d 0a 20 20 34 20 20 20 20 22  xists}}.  4    "
43b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
43c0: 61 2e 74 62 6c 31 28 61 2c 20 62 29 22 20 20 20  a.tbl1(a, b)"   
43d0: 7b 7b 74 61 62 6c 65 20 74 62 6c 31 20 61 6c 72  {{table tbl1 alr
43e0: 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a 20 20  eady exists}}.  
43f0: 35 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  5    "CREATE TAB
4400: 4c 45 20 61 75 78 61 2e 69 64 78 31 28 61 2c 20  LE auxa.idx1(a, 
4410: 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73  b)"   {{there is
4420: 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65   already an inde
4430: 78 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d 0a 20  x named idx1}}. 
4440: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
4450: 42 4c 45 20 61 75 78 61 2e 76 69 65 77 31 28 61  BLE auxa.view1(a
4460: 2c 20 62 29 22 20 20 7b 7b 74 61 62 6c 65 20 76  , b)"  {{table v
4470: 69 65 77 31 20 61 6c 72 65 61 64 79 20 65 78 69  iew1 already exi
4480: 73 74 73 7d 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74  sts}}.}.do_creat
4490: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 37  etable_tests 1.7
44a0: 2e 32 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .2 {.  1    "CRE
44b0: 41 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74  ATE TABLE auxa.t
44c0: 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20  1(a, b)"   {}.  
44d0: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
44e0: 4c 45 20 61 75 78 61 2e 69 31 28 61 2c 20 62 29  LE auxa.i1(a, b)
44f0: 22 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43  "   {}.  3    "C
4500: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
4510: 2e 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a  .v1(a, b)"   {}.
4520: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
4530: 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 29 22  ABLE tbl1(a, b)"
4540: 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20        {}.  5    
4550: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 64  "CREATE TABLE id
4560: 78 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 7b  x1(a, b)"      {
4570: 7d 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45  }.  6    "CREATE
4580: 20 54 41 42 4c 45 20 76 69 65 77 31 28 61 2c 20   TABLE view1(a, 
4590: 62 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20  b)"     {}.}..# 
45a0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
45b0: 33 39 31 37 2d 32 34 30 38 36 20 48 6f 77 65 76  3917-24086 Howev
45c0: 65 72 2c 20 69 66 20 74 68 65 20 22 49 46 20 4e  er, if the "IF N
45d0: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
45e0: 65 20 69 73 0a 23 20 73 70 65 63 69 66 69 65 64  e is.# specified
45f0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
4600: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
4610: 74 65 6d 65 6e 74 20 61 6e 64 20 61 20 74 61 62  tement and a tab
4620: 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 0a 23 20  le or view of.# 
4630: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
4640: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
4650: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
4660: 6f 6d 6d 61 6e 64 20 73 69 6d 70 6c 79 20 68 61  ommand simply ha
4670: 73 20 6e 6f 0a 23 20 65 66 66 65 63 74 20 28 61  s no.# effect (a
4680: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  nd no error mess
4690: 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29  age is returned)
46a0: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
46b0: 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  les.do_execsql_t
46c0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
46d0: 65 2d 31 2e 38 2e 30 20 7b 0a 20 20 43 52 45 41  e-1.8.0 {.  CREA
46e0: 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  TE TABLE t1(x, y
46f0: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
4700: 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a 20  X i1 ON t1(x);. 
4710: 20 43 52 45 41 54 45 20 56 49 45 57 20 20 76 31   CREATE VIEW  v1
4720: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
4730: 4d 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20 54  M t1;.  CREATE T
4740: 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31 28 78  ABLE auxa.tbl1(x
4750: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
4760: 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31 20 4f  NDEX auxa.idx1 O
4770: 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43 52 45  N tbl1(x);.  CRE
4780: 41 54 45 20 56 49 45 57 20 61 75 78 61 2e 76 69  ATE VIEW auxa.vi
4790: 65 77 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20  ew1 AS SELECT * 
47a0: 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b 7d 0a  FROM tbl1;.} {}.
47b0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
47c0: 65 73 74 73 20 31 2e 38 20 7b 0a 20 20 31 20 20  ests 1.8 {.  1  
47d0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
47e0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31  IF NOT EXISTS t1
47f0: 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 20  (a, b)"         
4800: 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41   {}.  2    "CREA
4810: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
4820: 45 58 49 53 54 53 20 61 75 78 61 2e 74 62 6c 31  EXISTS auxa.tbl1
4830: 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33  (a, b)"   {}.  3
4840: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4850: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
4860: 76 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 20  v1(a, b)"       
4870: 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52     {}.  4    "CR
4880: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
4890: 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 76 69  T EXISTS auxa.vi
48a0: 65 77 31 28 61 2c 20 62 29 22 20 20 7b 7d 0a 7d  ew1(a, b)"  {}.}
48b0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
48c0: 20 52 2d 31 36 34 36 35 2d 34 30 30 37 38 20 41   R-16465-40078 A
48d0: 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c  n error is still
48e0: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
48f0: 20 74 61 62 6c 65 0a 23 20 63 61 6e 6e 6f 74 20   table.# cannot 
4900: 62 65 20 63 72 65 61 74 65 64 20 62 65 63 61 75  be created becau
4910: 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e  se of an existin
4920: 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 69 66  g index, even if
4930: 20 74 68 65 20 22 49 46 20 4e 4f 54 0a 23 20 45   the "IF NOT.# E
4940: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
4950: 20 73 70 65 63 69 66 69 65 64 2e 0a 23 0a 64 6f   specified..#.do
4960: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
4970: 74 73 20 31 2e 39 20 2d 65 72 72 6f 72 20 7b 20  ts 1.9 -error { 
4980: 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  %s } {.  1    "C
4990: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
49a0: 4f 54 20 45 58 49 53 54 53 20 69 31 28 61 2c 20  OT EXISTS i1(a, 
49b0: 62 29 22 20 20 20 0a 20 20 20 20 20 20 20 7b 7b  b)"   .       {{
49c0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
49d0: 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20   an index named 
49e0: 69 31 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45  i1}}.  2    "CRE
49f0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
4a00: 20 45 58 49 53 54 53 20 61 75 78 61 2e 69 64 78   EXISTS auxa.idx
4a10: 31 28 61 2c 20 62 29 22 20 20 20 0a 20 20 20 20  1(a, b)"   .    
4a20: 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61 6c     {{there is al
4a30: 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20 6e  ready an index n
4a40: 61 6d 65 64 20 69 64 78 31 7d 7d 0a 7d 0a 0a 23  amed idx1}}.}..#
4a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
4a60: 30 35 35 31 33 2d 33 33 38 31 39 20 49 74 20 69  05513-33819 It i
4a70: 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74  s not an error t
4a80: 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65  o create a table
4a90: 20 74 68 61 74 0a 23 20 68 61 73 20 74 68 65 20   that.# has the 
4aa0: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20  same name as an 
4ab0: 65 78 69 73 74 69 6e 67 20 74 72 69 67 67 65 72  existing trigger
4ac0: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
4ad0: 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  les.do_execsql_t
4ae0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
4af0: 65 2d 31 2e 31 30 2e 30 20 7b 0a 20 20 43 52 45  e-1.10.0 {.  CRE
4b00: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
4b10: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  y);.  CREATE TAB
4b20: 4c 45 20 61 75 78 62 2e 74 32 28 78 2c 20 79 29  LE auxb.t2(x, y)
4b30: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52 49 47  ;..  CREATE TRIG
4b40: 47 45 52 20 74 72 31 20 41 46 54 45 52 20 49 4e  GER tr1 AFTER IN
4b50: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
4b60: 0a 20 20 20 20 53 45 4c 45 43 54 20 31 3b 0a 20  .    SELECT 1;. 
4b70: 20 45 4e 44 3b 0a 20 20 43 52 45 41 54 45 20 54   END;.  CREATE T
4b80: 52 49 47 47 45 52 20 61 75 78 62 2e 74 72 32 20  RIGGER auxb.tr2 
4b90: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
4ba0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 53 45 4c  t2 BEGIN.    SEL
4bb0: 45 43 54 20 31 3b 0a 20 20 45 4e 44 3b 0a 7d 20  ECT 1;.  END;.} 
4bc0: 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  {}.do_createtabl
4bd0: 65 5f 74 65 73 74 73 20 31 2e 31 30 20 7b 0a 20  e_tests 1.10 {. 
4be0: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
4bf0: 42 4c 45 20 74 72 31 28 61 2c 20 62 29 22 20 20  BLE tr1(a, b)"  
4c00: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
4c10: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4c20: 74 72 32 28 61 2c 20 62 29 22 20 20 20 20 20 20  tr2(a, b)"      
4c30: 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43      {}.  3    "C
4c40: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 62  REATE TABLE auxb
4c50: 2e 74 72 31 28 61 2c 20 62 29 22 20 20 20 20 20  .tr1(a, b)"     
4c60: 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54  {}.  4    "CREAT
4c70: 45 20 54 41 42 4c 45 20 61 75 78 62 2e 74 72 32  E TABLE auxb.tr2
4c80: 28 61 2c 20 62 29 22 20 20 20 20 20 7b 7d 0a 7d  (a, b)"     {}.}
4c90: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
4ca0: 20 52 2d 32 32 32 38 33 2d 31 34 31 37 39 20 54   R-22283-14179 T
4cb0: 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65  ables are remove
4cc0: 64 20 75 73 69 6e 67 20 74 68 65 20 44 52 4f 50  d using the DROP
4cd0: 20 54 41 42 4c 45 0a 23 20 73 74 61 74 65 6d 65   TABLE.# stateme
4ce0: 6e 74 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  nt..#.drop_all_t
4cf0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
4d00: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
4d10: 62 6c 65 2d 31 2e 31 31 2e 30 20 7b 0a 20 20 43  ble-1.11.0 {.  C
4d20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
4d30: 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , b);.  CREATE T
4d40: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b 0a 20  ABLE t2(a, b);. 
4d50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
4d60: 78 61 2e 74 33 28 61 2c 20 62 29 3b 0a 20 20 43  xa.t3(a, b);.  C
4d70: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
4d80: 2e 74 34 28 61 2c 20 62 29 3b 0a 7d 20 7b 7d 0a  .t4(a, b);.} {}.
4d90: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4da0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31   e_createtable-1
4db0: 2e 31 31 2e 31 2e 31 20 7b 0a 20 20 53 45 4c 45  .11.1.1 {.  SELE
4dc0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
4dd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
4de0: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
4df0: 4d 20 74 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a  M t3;.  SELECT *
4e00: 20 46 52 4f 4d 20 74 34 3b 0a 7d 20 7b 7d 0a 64   FROM t4;.} {}.d
4e10: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
4e20: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e  e_createtable-1.
4e30: 31 31 2e 31 2e 32 20 7b 20 44 52 4f 50 20 54 41  11.1.2 { DROP TA
4e40: 42 4c 45 20 74 31 20 7d 20 7b 7d 0a 64 6f 5f 63  BLE t1 } {}.do_c
4e50: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63  atchsql_test e_c
4e60: 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e  reatetable-1.11.
4e70: 31 2e 33 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  1.3 { .  SELECT 
4e80: 2a 20 46 52 4f 4d 20 74 31 20 0a 7d 20 7b 31 20  * FROM t1 .} {1 
4e90: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
4ea0: 74 31 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t1}}.do_execsql_
4eb0: 74 65 73 74 20 20 65 5f 63 72 65 61 74 65 74 61  test  e_createta
4ec0: 62 6c 65 2d 31 2e 31 31 2e 31 2e 34 20 7b 20 44  ble-1.11.1.4 { D
4ed0: 52 4f 50 20 54 41 42 4c 45 20 74 33 20 7d 20 7b  ROP TABLE t3 } {
4ee0: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
4ef0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
4f00: 2d 31 2e 31 31 2e 31 2e 35 20 7b 20 0a 20 20 53  -1.11.1.5 { .  S
4f10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
4f20: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
4f30: 61 62 6c 65 3a 20 74 33 7d 7d 0a 0a 64 6f 5f 65  able: t3}}..do_e
4f40: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
4f50: 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32  eatetable-1.11.2
4f60: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6e 61  .1 {.  SELECT na
4f70: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
4f80: 61 73 74 65 72 3b 0a 20 20 53 45 4c 45 43 54 20  aster;.  SELECT 
4f90: 6e 61 6d 65 20 46 52 4f 4d 20 61 75 78 61 2e 73  name FROM auxa.s
4fa0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 7d 20  qlite_master;.} 
4fb0: 7b 74 32 20 74 34 7d 0a 64 6f 5f 65 78 65 63 73  {t2 t4}.do_execs
4fc0: 71 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74  ql_test  e_creat
4fd0: 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 32 20  etable-1.11.2.2 
4fe0: 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 20  { DROP TABLE t2 
4ff0: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
5000: 74 65 73 74 20 20 65 5f 63 72 65 61 74 65 74 61  test  e_createta
5010: 62 6c 65 2d 31 2e 31 31 2e 32 2e 33 20 7b 20 44  ble-1.11.2.3 { D
5020: 52 4f 50 20 54 41 42 4c 45 20 74 34 20 7d 20 7b  ROP TABLE t4 } {
5030: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
5040: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
5050: 31 2e 31 31 2e 32 2e 34 20 7b 0a 20 20 53 45 4c  1.11.2.4 {.  SEL
5060: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
5070: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 53  lite_master;.  S
5080: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5090: 61 75 78 61 2e 73 71 6c 69 74 65 5f 6d 61 73 74  auxa.sqlite_mast
50a0: 65 72 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d  er;.} {}..#-----
50b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50f0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
5100: 73 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  s e_createtable-
5110: 32 2e 2a 20 2d 20 74 65 73 74 20 73 74 61 74 65  2.* - test state
5120: 6d 65 6e 74 73 20 72 65 6c 61 74 65 64 20 74 6f  ments related to
5130: 20 74 68 65 20 43 52 45 41 54 45 0a 23 20 54 41   the CREATE.# TA
5140: 42 4c 45 20 41 53 20 2e 2e 2e 20 53 45 4c 45 43  BLE AS ... SELEC
5150: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 0a  T statement..#..
5160: 23 20 54 68 72 65 65 20 54 63 6c 20 63 6f 6d 6d  # Three Tcl comm
5170: 61 6e 64 73 3a 0a 23 0a 23 20 20 20 73 65 6c 65  ands:.#.#   sele
5180: 63 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20  ct_column_names 
5190: 53 51 4c 0a 23 20 20 20 20 20 54 68 65 20 61 72  SQL.#     The ar
51a0: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
51b0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
51c0: 74 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  t. Return a list
51d0: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 0a 23 20   of the names.# 
51e0: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d      of the colum
51f0: 6e 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ns of the result
5200: 2d 73 65 74 20 74 68 61 74 20 77 6f 75 6c 64 20  -set that would 
5210: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  be returned by e
5220: 78 65 63 75 74 69 6e 67 0a 23 20 20 20 20 20 74  xecuting.#     t
5230: 68 65 20 53 45 4c 45 43 54 2e 0a 23 0a 23 20 20  he SELECT..#.#  
5240: 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6e 61   table_column_na
5250: 6d 65 73 20 54 42 4c 0a 23 20 20 20 20 20 54 68  mes TBL.#     Th
5260: 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20  e argument must 
5270: 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  be a table name.
5280: 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f   Return a list o
5290: 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  f column names, 
52a0: 66 72 6f 6d 0a 23 20 20 20 20 20 6c 65 66 74 20  from.#     left 
52b0: 74 6f 20 72 69 67 68 74 2c 20 66 6f 72 20 74 68  to right, for th
52c0: 65 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 74  e table..#.#   t
52d0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  able_column_decl
52e0: 74 79 70 65 73 20 54 42 4c 0a 23 20 20 20 20 20  types TBL.#     
52f0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  The argument mus
5300: 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d  t be a table nam
5310: 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  e. Return a list
5320: 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61   of column decla
5330: 72 65 64 0a 23 20 20 20 20 20 74 79 70 65 73 2c  red.#     types,
5340: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
5350: 67 68 74 2c 20 66 6f 72 20 74 68 65 20 74 61 62  ght, for the tab
5360: 6c 65 2e 0a 23 0a 70 72 6f 63 20 73 63 69 20 7b  le..#.proc sci {
5370: 73 65 6c 65 63 74 20 63 6d 64 7d 20 7b 0a 20 20  select cmd} {.  
5380: 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20  set res [list]. 
5390: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
53a0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62  e3_prepare_v2 db
53b0: 20 24 73 65 6c 65 63 74 20 2d 31 20 64 75 6d 6d   $select -1 dumm
53c0: 79 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  y].  for {set i 
53d0: 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65  0} {$i < [sqlite
53e0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
53f0: 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20  STMT]} {incr i} 
5400: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  {.    lappend re
5410: 73 20 5b 24 63 6d 64 20 24 53 54 4d 54 20 24 69  s [$cmd $STMT $i
5420: 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ].  }.  sqlite3_
5430: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
5440: 20 73 65 74 20 72 65 73 0a 7d 0a 70 72 6f 63 20   set res.}.proc 
5450: 74 63 69 20 7b 74 62 6c 20 63 6d 64 7d 20 7b 20  tci {tbl cmd} { 
5460: 73 63 69 20 22 53 45 4c 45 43 54 20 2a 20 46 52  sci "SELECT * FR
5470: 4f 4d 20 24 74 62 6c 22 20 24 63 6d 64 20 7d 0a  OM $tbl" $cmd }.
5480: 70 72 6f 63 20 73 65 6c 65 63 74 5f 63 6f 6c 75  proc select_colu
5490: 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 7b 73 71 6c  mn_names    {sql
54a0: 7d 20 7b 20 73 63 69 20 24 73 71 6c 20 73 71 6c  } { sci $sql sql
54b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
54c0: 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65 5f 63 6f   }.proc table_co
54d0: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 20 7b  lumn_names     {
54e0: 74 62 6c 7d 20 7b 20 74 63 69 20 24 74 62 6c 20  tbl} { tci $tbl 
54f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
5500: 61 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65  ame }.proc table
5510: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
5520: 73 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20 24 74  s {tbl} { tci $t
5530: 62 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  bl sqlite3_colum
5540: 6e 5f 64 65 63 6c 74 79 70 65 20 7d 0a 0a 23 20  n_decltype }..# 
5550: 43 72 65 61 74 65 20 61 20 64 61 74 61 62 61 73  Create a databas
5560: 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 73  e schema. This s
5570: 63 68 65 6d 61 20 69 73 20 75 73 65 64 20 62 79  chema is used by
5580: 20 74 65 73 74 73 20 32 2e 31 2e 2a 20 74 68 72   tests 2.1.* thr
5590: 6f 75 67 68 20 32 2e 33 2e 2a 2e 0a 23 0a 64 72  ough 2.3.*..#.dr
55a0: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
55b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
55c0: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 30 20  createtable-2.0 
55d0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
55e0: 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t1(a, b, c);.  
55f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
5600: 64 2c 20 65 2c 20 66 29 3b 0a 20 20 43 52 45 41  d, e, f);.  CREA
5610: 54 45 20 54 41 42 4c 45 20 74 33 28 67 20 42 49  TE TABLE t3(g BI
5620: 47 49 4e 54 2c 20 68 20 56 41 52 43 48 41 52 28  GINT, h VARCHAR(
5630: 31 30 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54  10));.  CREATE T
5640: 41 42 4c 45 20 74 34 28 69 20 42 4c 4f 42 2c 20  ABLE t4(i BLOB, 
5650: 6a 20 41 4e 59 4f 4c 44 41 54 41 29 3b 0a 20 20  j ANYOLDATA);.  
5660: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
5670: 6b 20 46 4c 4f 41 54 2c 20 6c 20 49 4e 54 45 47  k FLOAT, l INTEG
5680: 45 52 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  ER);.  CREATE TA
5690: 42 4c 45 20 74 36 28 6d 20 44 45 46 41 55 4c 54  BLE t6(m DEFAULT
56a0: 20 31 30 2c 20 6e 20 44 45 46 41 55 4c 54 20 35   10, n DEFAULT 5
56b0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 6d 2c  , PRIMARY KEY(m,
56c0: 20 6e 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54   n));.  CREATE T
56d0: 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45  ABLE t7(x INTEGE
56e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a  R PRIMARY KEY);.
56f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5700: 38 28 6f 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  8(o COLLATE noca
5710: 73 65 20 44 45 46 41 55 4c 54 20 27 61 62 63 27  se DEFAULT 'abc'
5720: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
5730: 45 20 74 39 28 70 20 4e 4f 54 20 4e 55 4c 4c 2c  E t9(p NOT NULL,
5740: 20 71 20 44 4f 55 42 4c 45 20 43 48 45 43 4b 20   q DOUBLE CHECK 
5750: 28 71 21 3d 30 29 2c 20 72 20 53 54 52 49 4e 47  (q!=0), r STRING
5760: 20 55 4e 49 51 55 45 29 3b 0a 7d 20 7b 7d 0a 0a   UNIQUE);.} {}..
5770: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
5780: 2d 36 34 38 32 38 2d 35 39 35 36 38 20 54 68 65  -64828-59568 The
5790: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
57a0: 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame number of co
57b0: 6c 75 6d 6e 73 20 61 73 0a 23 20 74 68 65 20 72  lumns as.# the r
57c0: 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
57d0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
57e0: 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f  ment. The name o
57f0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
5800: 0a 23 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  .# the same as t
5810: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
5820: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
5830: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
5840: 74 20 73 65 74 20 6f 66 0a 23 20 74 68 65 20 53  t set of.# the S
5850: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
5860: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
5870: 65 5f 74 65 73 74 73 20 32 2e 31 20 2d 74 63 6c  e_tests 2.1 -tcl
5880: 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f  query {.  table_
5890: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 78 31 0a  column_names x1.
58a0: 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61  } -repair {.  ca
58b0: 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  tchsql { DROP TA
58c0: 42 4c 45 20 78 31 20 7d 0a 7d 20 7b 0a 20 20 31  BLE x1 }.} {.  1
58d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
58e0: 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a  E x1 AS SELECT *
58f0: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61                {a
5910: 20 62 20 63 7d 0a 20 20 32 20 20 20 20 22 43 52   b c}.  2    "CR
5920: 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53  EATE TABLE x1 AS
5930: 20 53 45 4c 45 43 54 20 63 2c 20 62 2c 20 61 20   SELECT c, b, a 
5940: 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20  FROM t1"        
5950: 20 20 20 20 20 20 20 7b 63 20 62 20 61 7d 0a 20         {c b a}. 
5960: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
5970: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
5980: 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 22 20   * FROM t1, t2" 
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59a0: 7b 61 20 62 20 63 20 64 20 65 20 66 7d 0a 20 20  {a b c d e f}.  
59b0: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  4    "CREATE TAB
59c0: 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20  LE x1 AS SELECT 
59d0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
59e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  "              {
59f0: 63 6f 75 6e 74 28 2a 29 7d 0a 20 20 35 20 20 20  count(*)}.  5   
5a00: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78   "CREATE TABLE x
5a10: 31 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e  1 AS SELECT coun
5a20: 74 28 61 29 20 41 53 20 61 2c 20 6d 61 78 28 62  t(a) AS a, max(b
5a30: 29 20 46 52 4f 4d 20 74 31 22 20 7b 61 20 6d 61  ) FROM t1" {a ma
5a40: 78 28 62 29 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  x(b)}.}..# EVIDE
5a50: 4e 43 45 2d 4f 46 3a 20 52 2d 33 37 31 31 31 2d  NCE-OF: R-37111-
5a60: 32 32 38 35 35 20 54 68 65 20 64 65 63 6c 61 72  22855 The declar
5a70: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
5a80: 63 6f 6c 75 6d 6e 20 69 73 0a 23 20 64 65 74 65  column is.# dete
5a90: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 65 78  rmined by the ex
5aa0: 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74  pression affinit
5ab0: 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  y of the corresp
5ac0: 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f  onding expressio
5ad0: 6e 0a 23 20 69 6e 20 74 68 65 20 72 65 73 75 6c  n.# in the resul
5ae0: 74 20 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t set of the SEL
5af0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  ECT statement, a
5b00: 73 20 66 6f 6c 6c 6f 77 73 3a 20 45 78 70 72 65  s follows: Expre
5b10: 73 73 69 6f 6e 0a 23 20 41 66 66 69 6e 69 74 79  ssion.# Affinity
5b20: 20 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72 65 64   Column Declared
5b30: 20 54 79 70 65 20 54 45 58 54 20 22 54 45 58 54   Type TEXT "TEXT
5b40: 22 20 4e 55 4d 45 52 49 43 20 22 4e 55 4d 22 20  " NUMERIC "NUM" 
5b50: 49 4e 54 45 47 45 52 20 22 49 4e 54 22 0a 23 20  INTEGER "INT".# 
5b60: 52 45 41 4c 20 22 52 45 41 4c 22 20 4e 4f 4e 45  REAL "REAL" NONE
5b70: 20 22 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e   "" (empty strin
5b80: 67 29 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  g).#.do_createta
5b90: 62 6c 65 5f 74 65 73 74 73 20 32 2e 32 20 2d 74  ble_tests 2.2 -t
5ba0: 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c  clquery {.  tabl
5bb0: 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  e_column_decltyp
5bc0: 65 73 20 78 31 0a 7d 20 2d 72 65 70 61 69 72 20  es x1.} -repair 
5bd0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44  {.  catchsql { D
5be0: 52 4f 50 20 54 41 42 4c 45 20 78 31 20 7d 0a 7d  ROP TABLE x1 }.}
5bf0: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
5c00: 45 20 54 41 42 4c 45 20 78 31 20 41 53 20 53 45  E TABLE x1 AS SE
5c10: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5c20: 20 20 20 20 7b 22 22 7d 0a 20 20 32 20 20 20 20      {""}.  2    
5c30: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31  "CREATE TABLE x1
5c40: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
5c50: 4d 20 74 33 22 20 20 20 20 20 7b 49 4e 54 20 54  M t3"     {INT T
5c60: 45 58 54 7d 0a 20 20 33 20 20 20 20 22 43 52 45  EXT}.  3    "CRE
5c70: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5c80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
5c90: 22 20 20 20 20 20 7b 22 22 20 4e 55 4d 7d 0a 20  "     {"" NUM}. 
5ca0: 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41   4    "CREATE TA
5cb0: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
5cc0: 20 2a 20 46 52 4f 4d 20 74 35 22 20 20 20 20 20   * FROM t5"     
5cd0: 7b 52 45 41 4c 20 49 4e 54 7d 0a 7d 0a 0a 23 20  {REAL INT}.}..# 
5ce0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
5cf0: 36 36 36 37 2d 30 39 37 37 32 20 41 20 74 61 62  6667-09772 A tab
5d00: 6c 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  le created using
5d10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
5d20: 20 68 61 73 0a 23 20 6e 6f 20 50 52 49 4d 41 52   has.# no PRIMAR
5d30: 59 20 4b 45 59 20 61 6e 64 20 6e 6f 20 63 6f 6e  Y KEY and no con
5d40: 73 74 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20  straints of any 
5d50: 6b 69 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c  kind. The defaul
5d60: 74 20 76 61 6c 75 65 20 6f 66 0a 23 20 65 61 63  t value of.# eac
5d70: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  h column is NULL
5d80: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  . The default co
5d90: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
5da0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
5db0: 20 6f 66 0a 23 20 74 68 65 20 6e 65 77 20 74 61   of.# the new ta
5dc0: 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 0a 23  ble is BINARY..#
5dd0: 0a 23 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  .#   The followi
5de0: 6e 67 20 74 65 73 74 73 20 63 72 65 61 74 65 20  ng tests create 
5df0: 74 61 62 6c 65 73 20 62 61 73 65 64 20 6f 6e 20  tables based on 
5e00: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
5e10: 73 20 74 68 61 74 20 72 65 61 64 0a 23 20 20 20  s that read.#   
5e20: 66 72 6f 6d 20 74 61 62 6c 65 73 20 74 68 61 74  from tables that
5e30: 20 68 61 76 65 20 70 72 69 6d 61 72 79 20 6b 65   have primary ke
5e40: 79 73 2c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ys, constraints 
5e50: 61 6e 64 20 65 78 70 6c 69 63 69 74 20 64 65 66  and explicit def
5e60: 61 75 6c 74 20 0a 23 20 20 20 63 6f 6c 6c 61 74  ault .#   collat
5e70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 20 4e  ion sequences. N
5e80: 6f 6e 65 20 6f 66 20 74 68 69 73 20 69 73 20 74  one of this is t
5e90: 72 61 6e 73 66 65 72 65 64 20 74 6f 20 74 68 65  ransfered to the
5ea0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 0a 23   definition of.#
5eb0: 20 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65     the new table
5ec0: 20 61 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   as stored in th
5ed0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
5ee0: 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 54 65 73  table..#.#   Tes
5ef0: 74 73 20 32 2e 33 2e 32 2e 2a 20 73 68 6f 77 20  ts 2.3.2.* show 
5f00: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
5f10: 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63   value of each c
5f20: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 0a 23  olumn is NULL..#
5f30: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
5f40: 74 65 73 74 73 20 32 2e 33 2e 31 20 2d 71 75 65  tests 2.3.1 -que
5f50: 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71  ry {.  SELECT sq
5f60: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
5f70: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 72 6f  ster ORDER BY ro
5f80: 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31  wid DESC LIMIT 1
5f90: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
5fa0: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5fb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36  SELECT * FROM t6
5fc0: 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  " {{CREATE TABLE
5fd0: 20 78 31 28 6d 2c 6e 29 7d 7d 0a 20 20 32 20 20   x1(m,n)}}.  2  
5fe0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
5ff0: 78 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  x2 AS SELECT * F
6000: 52 4f 4d 20 74 37 22 20 7b 7b 43 52 45 41 54 45  ROM t7" {{CREATE
6010: 20 54 41 42 4c 45 20 78 32 28 78 20 49 4e 54 29   TABLE x2(x INT)
6020: 7d 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54  }}.  3    "CREAT
6030: 45 20 54 41 42 4c 45 20 78 33 20 41 53 20 53 45  E TABLE x3 AS SE
6040: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38 22 20  LECT * FROM t8" 
6050: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78  {{CREATE TABLE x
6060: 33 28 6f 29 7d 7d 0a 20 20 34 20 20 20 20 22 43  3(o)}}.  4    "C
6070: 52 45 41 54 45 20 54 41 42 4c 45 20 78 34 20 41  REATE TABLE x4 A
6080: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
6090: 74 39 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42  t9" {{CREATE TAB
60a0: 4c 45 20 78 34 28 70 2c 71 20 52 45 41 4c 2c 72  LE x4(p,q REAL,r
60b0: 20 4e 55 4d 29 7d 7d 0a 7d 0a 64 6f 5f 65 78 65   NUM)}}.}.do_exe
60c0: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
60d0: 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 31 20  tetable-2.3.2.1 
60e0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
60f0: 78 31 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  x1 DEFAULT VALUE
6100: 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  S;.  INSERT INTO
6110: 20 78 32 20 44 45 46 41 55 4c 54 20 56 41 4c 55   x2 DEFAULT VALU
6120: 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ES;.  INSERT INT
6130: 4f 20 78 33 20 44 45 46 41 55 4c 54 20 56 41 4c  O x3 DEFAULT VAL
6140: 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  UES;.  INSERT IN
6150: 54 4f 20 78 34 20 44 45 46 41 55 4c 54 20 56 41  TO x4 DEFAULT VA
6160: 4c 55 45 53 3b 0a 7d 20 7b 7d 0a 64 62 20 6e 75  LUES;.} {}.db nu
6170: 6c 6c 76 61 6c 75 65 20 6e 75 6c 6c 0a 64 6f 5f  llvalue null.do_
6180: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
6190: 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32  reatetable-2.3.2
61a0: 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  .2 { SELECT * FR
61b0: 4f 4d 20 78 31 20 7d 20 7b 6e 75 6c 6c 20 6e 75  OM x1 } {null nu
61c0: 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ll}.do_execsql_t
61d0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
61e0: 65 2d 32 2e 33 2e 32 2e 33 20 7b 20 53 45 4c 45  e-2.3.2.3 { SELE
61f0: 43 54 20 2a 20 46 52 4f 4d 20 78 32 20 7d 20 7b  CT * FROM x2 } {
6200: 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  null}.do_execsql
6210: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
6220: 62 6c 65 2d 32 2e 33 2e 32 2e 34 20 7b 20 53 45  ble-2.3.2.4 { SE
6230: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 33 20 7d  LECT * FROM x3 }
6240: 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73   {null}.do_execs
6250: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6260: 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 35 20 7b 20  table-2.3.2.5 { 
6270: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 34  SELECT * FROM x4
6280: 20 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75   } {null null nu
6290: 6c 6c 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65  ll}.db nullvalue
62a0: 20 7b 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61   {}..drop_all_ta
62b0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
62c0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
62d0: 6c 65 2d 32 2e 34 2e 30 20 7b 0a 20 20 43 52 45  le-2.4.0 {.  CRE
62e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
62f0: 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  y);.  INSERT INT
6300: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69 27 2c  O t1 VALUES('i',
6310: 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53     'one');.  INS
6320: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6330: 45 53 28 27 69 69 27 2c 20 20 27 74 77 6f 27 29  ES('ii',  'two')
6340: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
6350: 74 31 20 56 41 4c 55 45 53 28 27 69 69 69 27 2c  t1 VALUES('iii',
6360: 20 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b 7d 0a   'three');.} {}.
6370: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6380: 52 2d 32 34 31 35 33 2d 32 38 33 35 32 20 54 61  R-24153-28352 Ta
6390: 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
63a0: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
63b0: 41 53 20 61 72 65 0a 23 20 69 6e 69 74 69 61 6c  AS are.# initial
63c0: 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  ly populated wit
63d0: 68 20 74 68 65 20 72 6f 77 73 20 6f 66 20 64 61  h the rows of da
63e0: 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ta returned by t
63f0: 68 65 20 53 45 4c 45 43 54 0a 23 20 73 74 61 74  he SELECT.# stat
6400: 65 6d 65 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45  ement..#.# EVIDE
6410: 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 32 32 34 2d  NCE-OF: R-08224-
6420: 33 30 32 34 39 20 52 6f 77 73 20 61 72 65 20 61  30249 Rows are a
6430: 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f  ssigned contiguo
6440: 75 73 6c 79 20 61 73 63 65 6e 64 69 6e 67 0a 23  usly ascending.#
6450: 20 72 6f 77 69 64 20 76 61 6c 75 65 73 2c 20 73   rowid values, s
6460: 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20  tarting with 1, 
6470: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61  in the order tha
6480: 74 20 74 68 65 79 20 61 72 65 20 72 65 74 75 72  t they are retur
6490: 6e 65 64 20 62 79 0a 23 20 74 68 65 20 53 45 4c  ned by.# the SEL
64a0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ECT statement..#
64b0: 0a 23 20 20 20 45 61 63 68 20 74 65 73 74 20 63  .#   Each test c
64c0: 61 73 65 20 62 65 6c 6f 77 20 69 73 20 73 70 65  ase below is spe
64d0: 63 69 66 69 65 64 20 61 73 20 74 68 65 20 6e 61  cified as the na
64e0: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74 6f  me of a table to
64f0: 20 63 72 65 61 74 65 0a 23 20 20 20 75 73 69 6e   create.#   usin
6500: 67 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  g "CREATE TABLE 
6510: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e  ... AS SELECT ..
6520: 2e 22 20 61 6e 64 20 61 20 53 45 4c 45 43 54 20  ." and a SELECT 
6530: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 75 73 65  statement to use
6540: 20 69 6e 0a 23 20 20 20 63 72 65 61 74 69 6e 67   in.#   creating
6550: 20 69 74 2e 20 54 68 65 20 74 61 62 6c 65 20 69   it. The table i
6560: 73 20 63 72 65 61 74 65 64 2e 20 0a 23 0a 23 20  s created. .#.# 
6570: 20 20 54 65 73 74 20 63 61 73 65 73 20 32 2e 34    Test cases 2.4
6580: 2e 2a 2e 31 20 63 68 65 63 6b 20 74 68 61 74 20  .*.1 check that 
6590: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
65a0: 6e 20 63 72 65 61 74 65 64 2c 20 74 68 65 20 64  n created, the d
65b0: 61 74 61 20 69 6e 20 74 68 65 0a 23 20 20 20 74  ata in the.#   t
65c0: 61 62 6c 65 20 69 73 20 74 68 65 20 73 61 6d 65  able is the same
65d0: 20 61 73 20 74 68 65 20 64 61 74 61 20 72 65 74   as the data ret
65e0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
65f0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ECT statement ex
6600: 65 63 75 74 65 64 20 61 73 0a 23 20 20 20 61 20  ecuted as.#   a 
6610: 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61  standalone comma
6620: 6e 64 2c 20 76 65 72 69 66 79 69 6e 67 20 74 68  nd, verifying th
6630: 65 20 66 69 72 73 74 20 74 65 73 74 61 62 6c 65  e first testable
6640: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
6650: 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63 61 73  ..#.#   Test cas
6660: 65 73 20 32 2e 34 2e 2a 2e 32 20 63 68 65 63 6b  es 2.4.*.2 check
6670: 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 73   that the rowids
6680: 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65 64 20   were allocated 
6690: 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 23 20 20  contiguously.#  
66a0: 20 61 73 20 72 65 71 75 69 72 65 64 20 62 79 20   as required by 
66b0: 74 68 65 20 73 65 63 6f 6e 64 20 74 65 73 74 61  the second testa
66c0: 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62  ble statement ab
66d0: 6f 76 65 2e 20 54 68 61 74 20 74 68 65 20 72 6f  ove. That the ro
66e0: 77 69 64 73 0a 23 20 20 20 66 72 6f 6d 20 74 68  wids.#   from th
66f0: 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 6c 6f  e contiguous blo
6700: 63 6b 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65  ck were allocate
6710: 64 20 74 6f 20 72 6f 77 73 20 69 6e 20 74 68 65  d to rows in the
6720: 20 6f 72 64 65 72 20 72 6f 77 73 20 61 72 65 0a   order rows are.
6730: 23 20 20 20 72 65 74 75 72 6e 65 64 20 62 79 20  #   returned by 
6740: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
6750: 6d 65 6e 74 20 69 73 20 76 65 72 69 66 69 65 64  ment is verified
6760: 20 62 79 20 32 2e 34 2e 2a 2e 31 2e 0a 23 0a 23   by 2.4.*.1..#.#
6770: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
6780: 33 32 33 36 35 2d 30 39 30 34 33 20 41 20 22 43  32365-09043 A "C
6790: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
67a0: 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65  AS SELECT" state
67b0: 6d 65 6e 74 0a 23 20 63 72 65 61 74 65 73 20 61  ment.# creates a
67c0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
67d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
67e0: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
67f0: 74 73 20 6f 66 20 61 0a 23 20 53 45 4c 45 43 54  ts of a.# SELECT
6800: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20   statement..#.# 
6810: 20 20 54 68 65 20 61 62 6f 76 65 20 69 73 20 61    The above is a
6820: 6c 73 6f 20 63 6f 6e 73 69 64 65 72 65 64 20 74  lso considered t
6830: 6f 20 62 65 20 74 65 73 74 65 64 20 62 79 20 74  o be tested by t
6840: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49 74  he following. It
6850: 20 69 73 0a 23 20 20 20 63 6c 65 61 72 20 74 68   is.#   clear th
6860: 61 74 20 74 61 62 6c 65 73 20 61 72 65 20 62 65  at tables are be
6870: 69 6e 67 20 63 72 65 61 74 65 64 20 61 6e 64 20  ing created and 
6880: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 74 68 65  populated by the
6890: 20 63 6f 6d 6d 61 6e 64 20 69 6e 0a 23 20 20 20   command in.#   
68a0: 71 75 65 73 74 69 6f 6e 2e 0a 23 0a 66 6f 72 65  question..#.fore
68b0: 61 63 68 20 7b 74 6e 20 74 62 6c 20 73 65 6c 65  ach {tn tbl sele
68c0: 63 74 7d 20 7b 0a 20 20 31 20 20 20 78 31 20 20  ct} {.  1   x1  
68d0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
68e0: 74 31 22 0a 20 20 32 20 20 20 78 32 20 20 20 22  t1".  2   x2   "
68f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
6900: 20 4f 52 44 45 52 20 42 59 20 78 20 44 45 53 43   ORDER BY x DESC
6910: 22 0a 20 20 33 20 20 20 78 33 20 20 20 22 53 45  ".  3   x3   "SE
6920: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f  LECT * FROM t1 O
6930: 52 44 45 52 20 42 59 20 78 20 41 53 43 22 0a 7d  RDER BY x ASC".}
6940: 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20 74 68   {.  # Create th
6950: 65 20 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20  e table using a 
6960: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
6970: 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e 2e 22  . AS SELECT ..."
6980: 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 65 78 65 63   command..  exec
6990: 73 71 6c 20 5b 73 75 62 73 74 20 7b 43 52 45 41  sql [subst {CREA
69a0: 54 45 20 54 41 42 4c 45 20 24 74 62 6c 20 41 53  TE TABLE $tbl AS
69b0: 20 24 73 65 6c 65 63 74 7d 5d 0a 0a 20 20 23 20   $select}]..  # 
69c0: 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 72  Check that the r
69d0: 6f 77 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  ows inserted int
69e0: 6f 20 74 68 65 20 74 61 62 6c 65 2c 20 73 6f 72  o the table, sor
69f0: 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
6a00: 20 72 6f 77 69 64 0a 20 20 23 20 6f 72 64 65 72   rowid.  # order
6a10: 2c 20 6d 61 74 63 68 20 74 68 6f 73 65 20 72 65  , match those re
6a20: 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
6a30: 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
6a40: 74 61 74 65 6d 65 6e 74 20 61 73 20 61 0a 20 20  tatement as a.  
6a50: 23 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  # standalone com
6a60: 6d 61 6e 64 2e 0a 20 20 64 6f 5f 65 78 65 63 73  mand..  do_execs
6a70: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6a80: 74 61 62 6c 65 2d 32 2e 34 2e 24 74 6e 2e 31 20  table-2.4.$tn.1 
6a90: 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 53 45 4c  [subst {.    SEL
6aa0: 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 20  ECT * FROM $tbl 
6ab0: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a  ORDER BY rowid;.
6ac0: 20 20 7d 5d 20 5b 65 78 65 63 73 71 6c 20 24 73    }] [execsql $s
6ad0: 65 6c 65 63 74 5d 0a 0a 20 20 23 20 43 68 65 63  elect]..  # Chec
6ae0: 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64  k that the rowid
6af0: 73 20 69 6e 20 74 68 65 20 6e 65 77 20 74 61 62  s in the new tab
6b00: 6c 65 20 61 72 65 20 61 20 63 6f 6e 74 69 67 75  le are a contigu
6b10: 6f 75 73 20 62 6c 6f 63 6b 20 73 74 61 72 74 69  ous block starti
6b20: 6e 67 0a 20 20 23 20 77 69 74 68 20 72 6f 77 69  ng.  # with rowi
6b30: 64 20 31 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  d 1. Note that t
6b40: 68 69 73 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  his will fail if
6b50: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
6b60: 74 20 24 73 65 6c 65 63 74 20 0a 20 20 23 20 72  t $select .  # r
6b70: 65 74 75 72 6e 73 20 30 20 72 6f 77 73 20 28 61  eturns 0 rows (a
6b80: 73 20 6d 61 78 28 72 6f 77 69 64 29 20 77 69 6c  s max(rowid) wil
6b90: 6c 20 62 65 20 4e 55 4c 4c 29 2e 0a 20 20 64 6f  l be NULL)..  do
6ba0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
6bb0: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 34 2e  createtable-2.4.
6bc0: 24 74 6e 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20  $tn.2 [subst {. 
6bd0: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 72 6f     SELECT min(ro
6be0: 77 69 64 29 2c 20 63 6f 75 6e 74 28 72 6f 77 69  wid), count(rowi
6bf0: 64 29 3d 3d 6d 61 78 28 72 6f 77 69 64 29 20 46  d)==max(rowid) F
6c00: 52 4f 4d 20 24 74 62 6c 0a 20 20 7d 5d 20 7b 31  ROM $tbl.  }] {1
6c10: 20 31 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d   1}.}..#--------
6c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c60: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
6c70: 66 6f 72 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  for column defin
6c80: 74 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  tions in CREATE 
6c90: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
6ca0: 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 23 20 75   that do not.# u
6cb0: 73 65 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  se a SELECT stat
6cc0: 65 6d 65 6e 74 2e 20 4e 6f 74 20 69 6e 63 6c 75  ement. Not inclu
6cd0: 64 69 6e 67 20 64 61 74 61 20 63 6f 6e 73 74 72  ding data constr
6ce0: 61 69 6e 74 73 2e 20 49 6e 20 6f 74 68 65 72 20  aints. In other 
6cf0: 77 6f 72 64 73 2c 0a 23 20 74 65 73 74 73 20 66  words,.# tests f
6d00: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 61  or the specifica
6d10: 74 69 6f 6e 20 6f 66 3a 0a 23 0a 23 20 20 20 2a  tion of:.#.#   *
6d20: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 73 2c   declared types,
6d30: 0a 23 20 20 20 2a 20 64 65 66 61 75 6c 74 20 76  .#   * default v
6d40: 61 6c 75 65 73 2c 20 61 6e 64 0a 23 20 20 20 2a  alues, and.#   *
6d50: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
6d60: 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 0a 23 0a  on sequences..#.
6d70: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6d80: 52 2d 32 37 32 31 39 2d 34 39 30 35 37 20 55 6e  R-27219-49057 Un
6d90: 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64 61  like most SQL da
6da0: 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65 20  tabases, SQLite 
6db0: 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 73 74 72  does not.# restr
6dc0: 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ict the type of 
6dd0: 64 61 74 61 20 74 68 61 74 20 6d 61 79 20 62 65  data that may be
6de0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61   inserted into a
6df0: 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e   column based on
6e00: 0a 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  .# the columns d
6e10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 0a 23 0a  eclared type..#.
6e20: 23 20 20 20 54 65 73 74 20 74 68 69 73 20 62 79  #   Test this by
6e30: 20 63 72 65 61 74 69 6e 67 20 61 20 66 65 77 20   creating a few 
6e40: 74 61 62 6c 65 73 20 77 69 74 68 20 76 61 72 69  tables with vari
6e50: 65 64 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  ed declared type
6e60: 73 2c 20 74 68 65 6e 0a 23 20 20 20 69 6e 73 65  s, then.#   inse
6e70: 72 74 69 6e 67 20 76 61 72 69 6f 75 73 20 64 69  rting various di
6e80: 66 66 65 72 65 6e 74 20 74 79 70 65 73 20 6f 66  fferent types of
6e90: 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 74 68 65   values into the
6ea0: 6d 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  m..#.drop_all_ta
6eb0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
6ec0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
6ed0: 6c 65 2d 33 2e 31 2e 30 20 7b 0a 20 20 43 52 45  le-3.1.0 {.  CRE
6ee0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 56  ATE TABLE t1(x V
6ef0: 41 52 43 48 41 52 28 31 30 29 2c 20 79 20 49 4e  ARCHAR(10), y IN
6f00: 54 45 47 45 52 2c 20 7a 20 44 4f 55 42 4c 45 29  TEGER, z DOUBLE)
6f10: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
6f20: 20 74 32 28 61 20 44 41 54 45 54 49 4d 45 2c 20   t2(a DATETIME, 
6f30: 62 20 53 54 52 49 4e 47 2c 20 63 20 52 45 41 4c  b STRING, c REAL
6f40: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
6f50: 45 20 74 33 28 6f 2c 20 74 29 3b 0a 7d 20 7b 7d  E t3(o, t);.} {}
6f60: 0a 0a 23 20 76 61 6c 75 65 20 74 79 70 65 20 2d  ..# value type -
6f70: 3e 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d  > declared colum
6f80: 6e 20 74 79 70 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d  n type.# -------
6f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 69 6e  -----------.# in
6fb0: 74 65 67 65 72 20 20 20 20 2d 3e 20 56 41 52 43  teger    -> VARC
6fc0: 48 41 52 28 31 30 29 0a 23 20 73 74 72 69 6e 67  HAR(10).# string
6fd0: 20 20 20 20 20 2d 3e 20 49 4e 54 45 47 45 52 0a       -> INTEGER.
6fe0: 23 20 62 6c 6f 62 20 20 20 20 20 20 20 2d 3e 20  # blob       -> 
6ff0: 44 4f 55 42 4c 45 0a 23 0a 64 6f 5f 65 78 65 63  DOUBLE.#.do_exec
7000: 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74  sql_test e_creat
7010: 65 74 61 62 6c 65 2d 33 2e 31 2e 31 20 7b 0a 20  etable-3.1.1 {. 
7020: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
7030: 56 41 4c 55 45 53 28 31 34 2c 20 27 71 75 69 74  VALUES(14, 'quit
7040: 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69  e a lengthy stri
7050: 6e 67 27 2c 20 58 27 35 35 35 36 35 35 27 29 3b  ng', X'555655');
7060: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
7070: 20 74 31 3b 0a 7d 20 7b 31 34 20 7b 71 75 69 74   t1;.} {14 {quit
7080: 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69  e a lengthy stri
7090: 6e 67 7d 20 55 56 55 7d 0a 0a 23 20 73 74 72 69  ng} UVU}..# stri
70a0: 6e 67 20 20 20 20 20 2d 3e 20 44 41 54 45 54 49  ng     -> DATETI
70b0: 4d 45 0a 23 20 69 6e 74 65 67 65 72 20 20 20 20  ME.# integer    
70c0: 2d 3e 20 53 54 52 49 4e 47 0a 23 20 74 69 6d 65  -> STRING.# time
70d0: 20 20 20 20 20 20 20 2d 3e 20 52 45 41 4c 0a 23         -> REAL.#
70e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
70f0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
7100: 2e 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20  .1.2 {.  INSERT 
7110: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
7120: 6e 6f 74 20 61 20 64 61 74 65 74 69 6d 65 27 2c  not a datetime',
7130: 20 31 33 2c 20 27 31 32 3a 34 31 3a 35 39 27 29   13, '12:41:59')
7140: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
7150: 4d 20 74 32 3b 0a 7d 20 7b 7b 6e 6f 74 20 61 20  M t2;.} {{not a 
7160: 64 61 74 65 74 69 6d 65 7d 20 31 33 20 31 32 3a  datetime} 13 12:
7170: 34 31 3a 35 39 7d 0a 0a 23 20 45 56 49 44 45 4e  41:59}..# EVIDEN
7180: 43 45 2d 4f 46 3a 20 52 2d 31 30 35 36 35 2d 30  CE-OF: R-10565-0
7190: 39 35 35 37 20 54 68 65 20 64 65 63 6c 61 72 65  9557 The declare
71a0: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
71b0: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 23 20  mn is used to.# 
71c0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 61 66  determine the af
71d0: 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
71e0: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 23 0a 23 20 20  lumn only..#.#  
71f0: 20 20 20 41 66 66 69 6e 69 74 69 65 73 20 61 72     Affinities ar
7200: 65 20 74 65 73 74 65 64 20 69 6e 20 6d 6f 72 65  e tested in more
7210: 20 64 65 74 61 69 6c 20 65 6c 73 65 77 68 65 72   detail elsewher
7220: 65 20 28 73 65 65 20 64 6f 63 75 6d 65 6e 74 0a  e (see document.
7230: 23 20 20 20 20 20 64 61 74 61 74 79 70 65 33 2e  #     datatype3.
7240: 68 74 6d 6c 29 2e 20 48 65 72 65 2c 20 6a 75 73  html). Here, jus
7250: 74 20 74 65 73 74 20 74 68 61 74 20 61 66 66 69  t test that affi
7260: 6e 69 74 79 20 74 72 61 6e 73 66 6f 72 6d 61 74  nity transformat
7270: 69 6f 6e 73 0a 23 20 20 20 20 20 63 6f 6e 73 69  ions.#     consi
7280: 73 74 65 6e 74 20 77 69 74 68 20 74 68 65 20 65  stent with the e
7290: 78 70 65 63 74 65 64 20 61 66 66 69 6e 69 74 79  xpected affinity
72a0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
72b0: 28 62 61 73 65 64 20 6f 6e 0a 23 20 20 20 20 20  (based on.#     
72c0: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
72d0: 65 29 20 61 70 70 65 61 72 20 74 6f 20 74 61 6b  e) appear to tak
72e0: 65 20 70 6c 61 63 65 2e 0a 23 0a 23 20 41 66 66  e place..#.# Aff
72f0: 69 6e 69 74 69 65 73 20 6f 66 20 74 31 20 28 74  inities of t1 (t
7300: 65 73 74 20 63 61 73 65 73 20 33 2e 32 2e 31 2e  est cases 3.2.1.
7310: 2a 29 3a 20 54 45 58 54 2c 20 49 4e 54 45 47 45  *): TEXT, INTEGE
7320: 52 2c 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69  R, REAL.# Affini
7330: 74 69 65 73 20 6f 66 20 74 32 20 28 74 65 73 74  ties of t2 (test
7340: 20 63 61 73 65 73 20 33 2e 32 2e 32 2e 2a 29 3a   cases 3.2.2.*):
7350: 20 4e 55 4d 45 52 49 43 2c 20 4e 55 4d 45 52 49   NUMERIC, NUMERI
7360: 43 2c 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69  C, REAL.# Affini
7370: 74 69 65 73 20 6f 66 20 74 33 20 28 74 65 73 74  ties of t3 (test
7380: 20 63 61 73 65 73 20 33 2e 32 2e 33 2e 2a 29 3a   cases 3.2.3.*):
7390: 20 4e 4f 4e 45 2c 20 4e 4f 4e 45 0a 23 0a 64 6f   NONE, NONE.#.do
73a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
73b0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 32 2e  createtable-3.2.
73c0: 30 20 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  0 { DELETE FROM 
73d0: 74 31 3b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  t1; DELETE FROM 
73e0: 74 32 3b 20 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65  t2; } {}..do_cre
73f0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33  atetable_tests 3
7400: 2e 32 2e 31 20 2d 71 75 65 72 79 20 7b 0a 20 20  .2.1 -query {.  
7410: 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78 29 2c  SELECT quote(x),
7420: 20 71 75 6f 74 65 28 79 29 2c 20 71 75 6f 74 65   quote(y), quote
7430: 28 7a 29 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  (z) FROM t1 ORDE
7440: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20  R BY rowid DESC 
7450: 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31  LIMIT 1;.} {.  1
7460: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
7470: 74 31 20 56 41 4c 55 45 53 28 31 35 2c 20 20 20  t1 VALUES(15,   
7480: 27 32 32 2e 30 27 2c 20 27 31 34 27 29 22 20 20  '22.0', '14')"  
7490: 20 7b 27 31 35 27 20 32 32 20 31 34 2e 30 7d 0a   {'15' 22 14.0}.
74a0: 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e    2   "INSERT IN
74b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 32 2e  TO t1 VALUES(22.
74c0: 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20  0, 22.0, 22.0)" 
74d0: 20 20 20 20 7b 27 32 32 2e 30 27 20 32 32 20 32      {'22.0' 22 2
74e0: 32 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  2.0}.}.do_create
74f0: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e  table_tests 3.2.
7500: 32 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c  2 -query {.  SEL
7510: 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75  ECT quote(a), qu
7520: 6f 74 65 28 62 29 2c 20 71 75 6f 74 65 28 63 29  ote(b), quote(c)
7530: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
7540: 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d  Y rowid DESC LIM
7550: 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20  IT 1;.} {.  1   
7560: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
7570: 56 41 4c 55 45 53 28 31 35 2c 20 20 20 27 32 32  VALUES(15,   '22
7580: 2e 30 27 2c 20 27 31 34 27 29 22 20 20 20 7b 31  .0', '14')"   {1
7590: 35 20 20 20 32 32 20 20 31 34 2e 30 7d 0a 20 20  5   22  14.0}.  
75a0: 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  2   "INSERT INTO
75b0: 20 74 32 20 56 41 4c 55 45 53 28 32 32 2e 30 2c   t2 VALUES(22.0,
75c0: 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20 20 20   22.0, 22.0)"   
75d0: 20 20 7b 32 32 20 20 20 32 32 20 20 32 32 2e 30    {22   22  22.0
75e0: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
75f0: 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d  le_tests 3.2.3 -
7600: 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54  query {.  SELECT
7610: 20 71 75 6f 74 65 28 6f 29 2c 20 71 75 6f 74 65   quote(o), quote
7620: 28 74 29 20 46 52 4f 4d 20 74 33 20 4f 52 44 45  (t) FROM t3 ORDE
7630: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20  R BY rowid DESC 
7640: 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31  LIMIT 1;.} {.  1
7650: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
7660: 74 33 20 56 41 4c 55 45 53 28 27 31 35 27 2c 20  t3 VALUES('15', 
7670: 27 32 32 2e 30 27 29 22 20 20 20 20 20 20 20 20  '22.0')"        
7680: 20 7b 27 31 35 27 20 27 32 32 2e 30 27 7d 0a 20   {'15' '22.0'}. 
7690: 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   2   "INSERT INT
76a0: 4f 20 74 33 20 56 41 4c 55 45 53 28 31 35 2c 20  O t3 VALUES(15, 
76b0: 32 32 2e 30 29 22 20 20 20 20 20 20 20 20 20 20  22.0)"          
76c0: 20 20 20 7b 31 35 20 32 32 2e 30 7d 0a 7d 0a 0a     {15 22.0}.}..
76d0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
76e0: 2d 34 32 33 31 36 2d 30 39 35 38 32 20 49 66 20  -42316-09582 If 
76f0: 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70 6c  there is no expl
7700: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
7710: 75 73 65 0a 23 20 61 74 74 61 63 68 65 64 20 74  use.# attached t
7720: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
7730: 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ition, then the 
7740: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
7750: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 23 20 69 73   the column.# is
7760: 20 4e 55 4c 4c 2e 0a 23 0a 23 20 20 20 20 20 4e   NULL..#.#     N
7770: 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  one of the colum
7780: 6e 73 20 69 6e 20 74 61 62 6c 65 20 74 31 20 68  ns in table t1 h
7790: 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
77a0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2e 0a  DEFAULT clause..
77b0: 23 20 20 20 20 20 53 6f 20 74 65 73 74 69 6e 67  #     So testing
77c0: 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   that the defaul
77d0: 74 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 63  t value of all c
77e0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
77f0: 74 31 20 69 73 0a 23 20 20 20 20 20 4e 55 4c 4c  t1 is.#     NULL
7800: 20 73 65 72 76 65 73 20 74 6f 20 76 65 72 69 66   serves to verif
7810: 79 20 74 68 65 20 61 62 6f 76 65 2e 0a 23 20 20  y the above..#  
7820: 20 20 20 0a 64 6f 5f 63 72 65 61 74 65 74 61 62     .do_createtab
7830: 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d  le_tests 3.2.3 -
7840: 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54  query {.  SELECT
7850: 20 71 75 6f 74 65 28 78 29 2c 20 71 75 6f 74 65   quote(x), quote
7860: 28 79 29 2c 20 71 75 6f 74 65 28 7a 29 20 46 52  (y), quote(z) FR
7870: 4f 4d 20 74 31 0a 7d 20 2d 72 65 70 61 69 72 20  OM t1.} -repair 
7880: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45  {.  execsql { DE
7890: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d  LETE FROM t1 }.}
78a0: 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45 52 54   {.  1   "INSERT
78b0: 20 49 4e 54 4f 20 74 31 28 78 2c 20 79 29 20 56   INTO t1(x, y) V
78c0: 41 4c 55 45 53 28 27 61 62 63 27 2c 20 27 78 79  ALUES('abc', 'xy
78d0: 7a 27 29 22 20 20 20 7b 27 61 62 63 27 20 27 78  z')"   {'abc' 'x
78e0: 79 7a 27 20 4e 55 4c 4c 7d 0a 20 20 32 20 20 20  yz' NULL}.  2   
78f0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28  "INSERT INTO t1(
7900: 78 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 61 62  x, z) VALUES('ab
7910: 63 27 2c 20 27 78 79 7a 27 29 22 20 20 20 7b 27  c', 'xyz')"   {'
7920: 61 62 63 27 20 4e 55 4c 4c 20 27 78 79 7a 27 7d  abc' NULL 'xyz'}
7930: 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54 20 49  .  3   "INSERT I
7940: 4e 54 4f 20 74 31 20 44 45 46 41 55 4c 54 20 56  NTO t1 DEFAULT V
7950: 41 4c 55 45 53 22 20 20 20 20 20 20 20 20 20 20  ALUES"          
7960: 20 20 20 20 20 7b 4e 55 4c 4c 20 4e 55 4c 4c 20       {NULL NULL 
7970: 4e 55 4c 4c 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  NULL}.}..# EVIDE
7980: 4e 43 45 2d 4f 46 3a 20 52 2d 36 32 39 34 30 2d  NCE-OF: R-62940-
7990: 34 33 30 30 35 20 41 6e 20 65 78 70 6c 69 63 69  43005 An explici
79a0: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
79b0: 20 6d 61 79 20 73 70 65 63 69 66 79 20 74 68 61   may specify tha
79c0: 74 0a 23 20 74 68 65 20 64 65 66 61 75 6c 74 20  t.# the default 
79d0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61  value is NULL, a
79e0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
79f0: 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e  , a blob constan
7a00: 74 2c 20 61 0a 23 20 73 69 67 6e 65 64 2d 6e 75  t, a.# signed-nu
7a10: 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e  mber, or any con
7a20: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
7a30: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72   enclosed in par
7a40: 65 6e 74 68 65 73 65 73 2e 20 41 6e 0a 23 20 65  entheses. An.# e
7a50: 78 70 6c 69 63 69 74 20 64 65 66 61 75 6c 74 20  xplicit default 
7a60: 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62  value may also b
7a70: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65  e one of the spe
7a80: 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65  cial case-indepe
7a90: 6e 64 65 6e 74 0a 23 20 6b 65 79 77 6f 72 64 73  ndent.# keywords
7aa0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43   CURRENT_TIME, C
7ab0: 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43  URRENT_DATE or C
7ac0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
7ad0: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
7ae0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
7af0: 65 2d 33 2e 33 2e 31 20 7b 0a 20 20 43 52 45 41  e-3.3.1 {.  CREA
7b00: 54 45 20 54 41 42 4c 45 20 74 34 28 0a 20 20 20  TE TABLE t4(.   
7b10: 20 61 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c   a DEFAULT NULL,
7b20: 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 27  .    b DEFAULT '
7b30: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 27  string constant'
7b40: 2c 0a 20 20 20 20 63 20 44 45 46 41 55 4c 54 20  ,.    c DEFAULT 
7b50: 58 27 34 32 34 43 34 46 34 32 27 2c 0a 20 20 20  X'424C4F42',.   
7b60: 20 64 20 44 45 46 41 55 4c 54 20 31 2c 0a 20 20   d DEFAULT 1,.  
7b70: 20 20 65 20 44 45 46 41 55 4c 54 20 2d 31 2c 0a    e DEFAULT -1,.
7b80: 20 20 20 20 66 20 44 45 46 41 55 4c 54 20 33 2e      f DEFAULT 3.
7b90: 31 34 2c 0a 20 20 20 20 67 20 44 45 46 41 55 4c  14,.    g DEFAUL
7ba0: 54 20 2d 33 2e 31 34 2c 0a 20 20 20 20 68 20 44  T -3.14,.    h D
7bb0: 45 46 41 55 4c 54 20 28 20 73 75 62 73 74 72 28  EFAULT ( substr(
7bc0: 27 61 62 63 64 27 2c 20 30 2c 20 32 29 20 7c 7c  'abcd', 0, 2) ||
7bd0: 20 27 63 64 27 20 29 2c 0a 20 20 20 20 69 20 44   'cd' ),.    i D
7be0: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
7bf0: 49 4d 45 2c 0a 20 20 20 20 6a 20 44 45 46 41 55  IME,.    j DEFAU
7c00: 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  LT CURRENT_DATE,
7c10: 0a 20 20 20 20 6b 20 44 45 46 41 55 4c 54 20 43  .    k DEFAULT C
7c20: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
7c30: 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56  .  );.} {}..# EV
7c40: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 30 32  IDENCE-OF: R-102
7c50: 38 38 2d 34 33 31 36 39 20 46 6f 72 20 74 68 65  88-43169 For the
7c60: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
7c70: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c   DEFAULT clause,
7c80: 20 61 6e 0a 23 20 65 78 70 72 65 73 73 69 6f 6e   an.# expression
7c90: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7ca0: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7cb0: 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f   that it does no
7cc0: 74 20 63 6f 6e 74 61 69 6e 0a 23 20 61 6e 79 20  t contain.# any 
7cd0: 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73  sub-queries or s
7ce0: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20  tring constants 
7cf0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62  enclosed in doub
7d00: 6c 65 20 71 75 6f 74 65 73 2e 0a 23 0a 64 6f 5f  le quotes..#.do_
7d10: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
7d20: 73 20 33 2e 34 2e 31 20 2d 65 72 72 6f 72 20 7b  s 3.4.1 -error {
7d30: 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  .  default value
7d40: 20 6f 66 20 63 6f 6c 75 6d 6e 20 5b 78 5d 20 69   of column [x] i
7d50: 73 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 0a 7d  s not constant.}
7d60: 20 7b 0a 20 20 31 20 20 20 7b 43 52 45 41 54 45   {.  1   {CREATE
7d70: 20 54 41 42 4c 45 20 74 35 28 78 20 44 45 46 41   TABLE t5(x DEFA
7d80: 55 4c 54 20 28 20 28 53 45 4c 45 43 54 20 31 29  ULT ( (SELECT 1)
7d90: 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20 20 7b   ))}  {}.  2   {
7da0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
7db0: 78 20 44 45 46 41 55 4c 54 20 28 20 22 61 62 63  x DEFAULT ( "abc
7dc0: 22 20 29 29 7d 20 20 7b 7d 0a 20 20 33 20 20 20  " ))}  {}.  3   
7dd0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  {CREATE TABLE t5
7de0: 28 78 20 44 45 46 41 55 4c 54 20 28 20 31 20 49  (x DEFAULT ( 1 I
7df0: 4e 20 28 53 45 4c 45 43 54 20 31 29 20 29 29 7d  N (SELECT 1) ))}
7e00: 20 20 7b 7d 0a 20 20 34 20 20 20 7b 43 52 45 41    {}.  4   {CREA
7e10: 54 45 20 54 41 42 4c 45 20 74 35 28 78 20 44 45  TE TABLE t5(x DE
7e20: 46 41 55 4c 54 20 28 20 45 58 49 53 54 53 20 28  FAULT ( EXISTS (
7e30: 53 45 4c 45 43 54 20 31 29 20 29 29 7d 20 20 7b  SELECT 1) ))}  {
7e40: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
7e50: 6c 65 5f 74 65 73 74 73 20 33 2e 34 2e 32 20 2d  le_tests 3.4.2 -
7e60: 72 65 70 61 69 72 20 7b 0a 20 20 63 61 74 63 68  repair {.  catch
7e70: 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45  sql { DROP TABLE
7e80: 20 74 35 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20   t5 }.} {.  1   
7e90: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  {CREATE TABLE t5
7ea0: 28 78 20 44 45 46 41 55 4c 54 20 28 20 27 61 62  (x DEFAULT ( 'ab
7eb0: 63 27 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20  c' ))}  {}.  2  
7ec0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
7ed0: 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 31 20  5(x DEFAULT ( 1 
7ee0: 49 4e 20 28 31 2c 20 32 2c 20 33 29 20 29 29 7d  IN (1, 2, 3) ))}
7ef0: 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e    {}.}..# EVIDEN
7f00: 43 45 2d 4f 46 3a 20 52 2d 31 38 38 31 34 2d 32  CE-OF: R-18814-2
7f10: 33 35 30 31 20 45 61 63 68 20 74 69 6d 65 20 61  3501 Each time a
7f20: 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64   row is inserted
7f30: 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 0a   into the table.
7f40: 23 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20 73  # by an INSERT s
7f50: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f  tatement that do
7f60: 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65  es not provide e
7f70: 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66  xplicit values f
7f80: 6f 72 20 61 6c 6c 0a 23 20 74 61 62 6c 65 20 63  or all.# table c
7f90: 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65  olumns the value
7fa0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
7fb0: 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65 74 65  new row are dete
7fc0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69 72 0a  rmined by their.
7fd0: 23 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  # default values
7fe0: 0a 23 0a 23 20 20 20 20 20 56 65 72 69 66 79 20  .#.#     Verify 
7ff0: 74 68 69 73 20 77 69 74 68 20 73 6f 6d 65 20 61  this with some a
8000: 73 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74 73  ssert statements
8010: 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 2c 20   for which all, 
8020: 73 6f 6d 65 20 61 6e 64 20 6e 6f 0a 23 20 20 20  some and no.#   
8030: 20 20 63 6f 6c 75 6d 6e 73 20 6c 61 63 6b 20 65    columns lack e
8040: 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73 2e 0a  xplicit values..
8050: 23 0a 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72  #.set sqlite_cur
8060: 72 65 6e 74 5f 74 69 6d 65 20 31 30 30 30 30 30  rent_time 100000
8070: 30 30 30 30 0a 64 6f 5f 63 72 65 61 74 65 74 61  0000.do_createta
8080: 62 6c 65 5f 74 65 73 74 73 20 33 2e 35 20 2d 71  ble_tests 3.5 -q
8090: 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20  uery {.  SELECT 
80a0: 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28  quote(a), quote(
80b0: 62 29 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75  b), quote(c), qu
80c0: 6f 74 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29  ote(d), quote(e)
80d0: 2c 20 71 75 6f 74 65 28 66 29 2c 20 0a 20 20 20  , quote(f), .   
80e0: 20 20 20 20 20 20 71 75 6f 74 65 28 67 29 2c 20        quote(g), 
80f0: 71 75 6f 74 65 28 68 29 2c 20 71 75 6f 74 65 28  quote(h), quote(
8100: 69 29 2c 20 71 75 6f 74 65 28 6a 29 2c 20 71 75  i), quote(j), qu
8110: 6f 74 65 28 6b 29 0a 20 20 46 52 4f 4d 20 74 34  ote(k).  FROM t4
8120: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
8130: 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20  DESC LIMIT 1;.} 
8140: 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49 4e  {.  1 "INSERT IN
8150: 54 4f 20 74 34 20 44 45 46 41 55 4c 54 20 56 41  TO t4 DEFAULT VA
8160: 4c 55 45 53 22 20 7b 0a 20 20 20 20 4e 55 4c 4c  LUES" {.    NULL
8170: 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   {'string consta
8180: 6e 74 27 7d 20 58 27 34 32 34 43 34 46 34 32 27  nt'} X'424C4F42'
8190: 20 31 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34   1 -1 3.14 -3.14
81a0: 20 0a 20 20 20 20 27 61 63 64 27 20 27 30 31 3a   .    'acd' '01:
81b0: 34 36 3a 34 30 27 20 27 32 30 30 31 2d 30 39 2d  46:40' '2001-09-
81c0: 30 39 27 20 7b 27 32 30 30 31 2d 30 39 2d 30 39  09' {'2001-09-09
81d0: 20 30 31 3a 34 36 3a 34 30 27 7d 0a 20 20 7d 0a   01:46:40'}.  }.
81e0: 0a 20 20 32 20 22 49 4e 53 45 52 54 20 49 4e 54  .  2 "INSERT INT
81f0: 4f 20 74 34 28 61 2c 20 62 2c 20 63 29 20 56 41  O t4(a, b, c) VA
8200: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 22 20 7b  LUES(1, 2, 3)" {
8210: 0a 20 20 20 20 31 20 32 20 33 20 31 20 2d 31 20  .    1 2 3 1 -1 
8220: 33 2e 31 34 20 2d 33 2e 31 34 20 27 61 63 64 27  3.14 -3.14 'acd'
8230: 20 27 30 31 3a 34 36 3a 34 30 27 20 27 32 30 30   '01:46:40' '200
8240: 31 2d 30 39 2d 30 39 27 20 7b 27 32 30 30 31 2d  1-09-09' {'2001-
8250: 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30 27 7d  09-09 01:46:40'}
8260: 0a 20 20 7d 0a 0a 20 20 33 20 22 49 4e 53 45 52  .  }..  3 "INSER
8270: 54 20 49 4e 54 4f 20 74 34 28 6b 2c 20 6a 2c 20  T INTO t4(k, j, 
8280: 69 29 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  i) VALUES(1, 2, 
8290: 33 29 22 20 7b 0a 20 20 20 20 4e 55 4c 4c 20 7b  3)" {.    NULL {
82a0: 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74  'string constant
82b0: 27 7d 20 58 27 34 32 34 43 34 46 34 32 27 20 31  '} X'424C4F42' 1
82c0: 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 27   -1 3.14 -3.14 '
82d0: 61 63 64 27 20 33 20 32 20 31 0a 20 20 7d 0a 0a  acd' 3 2 1.  }..
82e0: 20 20 34 20 22 49 4e 53 45 52 54 20 49 4e 54 4f    4 "INSERT INTO
82f0: 20 74 34 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c   t4(a,b,c,d,e,f,
8300: 67 2c 68 2c 69 2c 6a 2c 6b 29 20 56 41 4c 55 45  g,h,i,j,k) VALUE
8310: 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c  S(1,2,3,4,5,6,7,
8320: 38 2c 39 2c 31 30 2c 31 31 29 22 20 7b 0a 20 20  8,9,10,11)" {.  
8330: 20 20 31 20 32 20 33 20 34 20 35 20 36 20 37 20    1 2 3 4 5 6 7 
8340: 38 20 39 20 31 30 20 31 31 0a 20 20 7d 0a 7d 0a  8 9 10 11.  }.}.
8350: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
8360: 52 2d 31 32 35 37 32 2d 36 32 35 30 31 20 49 66  R-12572-62501 If
8370: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
8380: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
8390: 20 69 73 20 61 0a 23 20 63 6f 6e 73 74 61 6e 74   is a.# constant
83a0: 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f   NULL, text, blo
83b0: 62 20 6f 72 20 73 69 67 6e 65 64 2d 6e 75 6d 62  b or signed-numb
83c0: 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  er value, then t
83d0: 68 61 74 20 76 61 6c 75 65 20 69 73 0a 23 20 75  hat value is.# u
83e0: 73 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20  sed directly in 
83f0: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 23 0a 64  the new row..#.d
8400: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
8410: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 36  _createtable-3.6
8420: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
8430: 42 4c 45 20 74 35 28 0a 20 20 20 20 61 20 44 45  BLE t5(.    a DE
8440: 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 20 0a 20 20  FAULT NULL,  .  
8450: 20 20 62 20 44 45 46 41 55 4c 54 20 27 74 65 78    b DEFAULT 'tex
8460: 74 20 76 61 6c 75 65 27 2c 20 20 0a 20 20 20 20  t value',  .    
8470: 63 20 44 45 46 41 55 4c 54 20 58 27 34 32 34 43  c DEFAULT X'424C
8480: 34 46 34 32 27 2c 0a 20 20 20 20 64 20 44 45 46  4F42',.    d DEF
8490: 41 55 4c 54 20 2d 34 35 36 37 38 2e 36 2c 0a 20  AULT -45678.6,. 
84a0: 20 20 20 65 20 44 45 46 41 55 4c 54 20 33 39 34     e DEFAULT 394
84b0: 35 30 37 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f  507.  );.} {}.do
84c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
84d0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 36 2e  createtable-3.6.
84e0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
84f0: 4f 20 74 35 20 44 45 46 41 55 4c 54 20 56 41 4c  O t5 DEFAULT VAL
8500: 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75  UES;.  SELECT qu
8510: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
8520: 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75 6f 74  , quote(c), quot
8530: 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29 20 46  e(d), quote(e) F
8540: 52 4f 4d 20 74 35 3b 0a 7d 20 7b 4e 55 4c 4c 20  ROM t5;.} {NULL 
8550: 7b 27 74 65 78 74 20 76 61 6c 75 65 27 7d 20 58  {'text value'} X
8560: 27 34 32 34 43 34 46 34 32 27 20 2d 34 35 36 37  '424C4F42' -4567
8570: 38 2e 36 20 33 39 34 35 30 37 7d 0a 0a 23 20 45  8.6 394507}..# E
8580: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 30  VIDENCE-OF: R-60
8590: 36 31 36 2d 35 30 32 35 31 20 49 66 20 74 68 65  616-50251 If the
85a0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
85b0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  f a column is an
85c0: 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  .# expression in
85d0: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
85e0: 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
85f0: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
8600: 6e 63 65 20 66 6f 72 0a 23 20 65 61 63 68 20 72  nce for.# each r
8610: 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20  ow inserted and 
8620: 74 68 65 20 72 65 73 75 6c 74 73 20 75 73 65 64  the results used
8630: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
8640: 0a 23 0a 23 20 20 20 54 65 73 74 20 63 61 73 65  .#.#   Test case
8650: 20 33 2e 36 2e 34 20 64 65 6d 6f 6e 73 74 72 61   3.6.4 demonstra
8660: 74 65 73 20 74 68 61 74 20 74 68 65 20 65 78 70  tes that the exp
8670: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
8680: 61 74 65 64 20 0a 23 20 20 20 73 65 70 61 72 61  ated .#   separa
8690: 74 65 6c 79 20 66 6f 72 20 65 61 63 68 20 72 6f  tely for each ro
86a0: 77 20 69 66 20 74 68 65 20 49 4e 53 45 52 54 20  w if the INSERT 
86b0: 69 73 20 61 6e 20 22 49 4e 53 45 52 54 20 49 4e  is an "INSERT IN
86c0: 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
86d0: 2e 22 0a 23 20 20 20 63 6f 6d 6d 61 6e 64 2e 0a  .".#   command..
86e0: 23 0a 73 65 74 20 3a 3a 6e 65 78 74 69 6e 74 20  #.set ::nextint 
86f0: 30 0a 70 72 6f 63 20 6e 65 78 74 69 6e 74 20 7b  0.proc nextint {
8700: 7d 20 7b 20 69 6e 63 72 20 3a 3a 6e 65 78 74 69  } { incr ::nexti
8710: 6e 74 20 7d 0a 64 62 20 66 75 6e 63 20 6e 65 78  nt }.db func nex
8720: 74 69 6e 74 20 6e 65 78 74 69 6e 74 0a 0a 64 6f  tint nextint..do
8730: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
8740: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e  createtable-3.7.
8750: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
8760: 4c 45 20 74 36 28 61 20 44 45 46 41 55 4c 54 20  LE t6(a DEFAULT 
8770: 28 20 6e 65 78 74 69 6e 74 28 29 20 29 2c 20 62  ( nextint() ), b
8780: 20 44 45 46 41 55 4c 54 20 28 20 6e 65 78 74 69   DEFAULT ( nexti
8790: 6e 74 28 29 20 29 29 3b 0a 7d 20 7b 7d 0a 64 6f  nt() ));.} {}.do
87a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
87b0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e  createtable-3.7.
87c0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
87d0: 4f 20 74 36 20 44 45 46 41 55 4c 54 20 56 41 4c  O t6 DEFAULT VAL
87e0: 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75  UES;.  SELECT qu
87f0: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
8800: 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31 20 32   FROM t6;.} {1 2
8810: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
8820: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
8830: 33 2e 37 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54  3.7.3 {.  INSERT
8840: 20 49 4e 54 4f 20 74 36 28 61 29 20 56 41 4c 55   INTO t6(a) VALU
8850: 45 53 28 27 58 27 29 3b 0a 20 20 53 45 4c 45 43  ES('X');.  SELEC
8860: 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74  T quote(a), quot
8870: 65 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20  e(b) FROM t6;.} 
8880: 7b 31 20 32 20 27 58 27 20 33 7d 0a 64 6f 5f 65  {1 2 'X' 3}.do_e
8890: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
88a0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e 34 20  eatetable-3.7.4 
88b0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
88c0: 74 36 28 61 29 20 53 45 4c 45 43 54 20 61 20 46  t6(a) SELECT a F
88d0: 52 4f 4d 20 74 36 3b 0a 20 20 53 45 4c 45 43 54  ROM t6;.  SELECT
88e0: 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65   quote(a), quote
88f0: 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b  (b) FROM t6;.} {
8900: 31 20 32 20 27 58 27 20 33 20 31 20 34 20 27 58  1 2 'X' 3 1 4 'X
8910: 27 20 35 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  ' 5}..# EVIDENCE
8920: 2d 4f 46 3a 20 52 2d 31 38 36 38 33 2d 35 36 32  -OF: R-18683-562
8930: 31 39 20 49 66 20 74 68 65 20 64 65 66 61 75 6c  19 If the defaul
8940: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
8950: 75 6d 6e 20 69 73 0a 23 20 43 55 52 52 45 4e 54  umn is.# CURRENT
8960: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8970: 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 44  ATE or CURRENT_D
8980: 41 54 45 54 49 4d 45 2c 20 74 68 65 6e 20 74 68  ATETIME, then th
8990: 65 20 76 61 6c 75 65 20 75 73 65 64 20 69 6e 0a  e value used in.
89a0: 23 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73  # the new row is
89b0: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
89c0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75  tation of the cu
89d0: 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61  rrent UTC date a
89e0: 6e 64 2f 6f 72 0a 23 20 74 69 6d 65 2e 0a 23 0a  nd/or.# time..#.
89f0: 23 20 20 20 20 20 54 68 69 73 20 69 73 20 64 69  #     This is di
8a00: 66 66 69 63 75 6c 74 20 74 6f 20 74 65 73 74 20  fficult to test 
8a10: 6c 69 74 65 72 61 6c 6c 79 20 77 69 74 68 6f 75  literally withou
8a20: 74 20 6b 6e 6f 77 69 6e 67 20 77 68 61 74 20 74  t knowing what t
8a30: 69 6d 65 20 74 68 65 20 0a 23 20 20 20 20 20 75  ime the .#     u
8a40: 73 65 72 20 77 69 6c 6c 20 72 75 6e 20 74 68 65  ser will run the
8a50: 20 74 65 73 74 73 2e 20 49 6e 73 74 65 61 64 2c   tests. Instead,
8a60: 20 77 65 20 74 65 73 74 20 74 68 61 74 20 74 68   we test that th
8a70: 65 20 74 68 72 65 65 20 63 61 73 65 73 0a 23 20  e three cases.# 
8a80: 20 20 20 20 61 62 6f 76 65 20 73 65 74 20 74 68      above set th
8a90: 65 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 63  e value to the c
8aa0: 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 2f  urrent date and/
8ab0: 6f 72 20 74 69 6d 65 20 61 63 63 6f 72 64 69 6e  or time accordin
8ac0: 67 20 74 6f 0a 23 20 20 20 20 20 74 68 65 20 78  g to.#     the x
8ad0: 43 75 72 72 65 6e 74 54 69 6d 65 28 29 20 6d 65  CurrentTime() me
8ae0: 74 68 6f 64 20 6f 66 20 74 68 65 20 56 46 53 2e  thod of the VFS.
8af0: 20 57 68 69 63 68 20 69 73 20 75 73 75 61 6c 6c   Which is usuall
8b00: 79 20 74 68 65 20 73 61 6d 65 0a 23 20 20 20 20  y the same.#    
8b10: 20 61 73 20 55 54 43 2e 20 49 6e 20 74 68 69 73   as UTC. In this
8b20: 20 63 61 73 65 2c 20 68 6f 77 65 76 65 72 2c 20   case, however, 
8b30: 77 65 20 69 6e 73 74 72 75 6d 65 6e 74 20 69 74  we instrument it
8b40: 20 74 6f 20 61 6c 77 61 79 73 20 72 65 74 75 72   to always retur
8b50: 6e 0a 23 20 20 20 20 20 61 20 74 69 6d 65 20 65  n.#     a time e
8b60: 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 22 32 30  quivalent to "20
8b70: 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34  01-09-09 01:46:4
8b80: 30 20 55 54 43 22 2e 0a 23 0a 73 65 74 20 73 71  0 UTC"..#.set sq
8b90: 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d  lite_current_tim
8ba0: 65 20 31 30 30 30 30 30 30 30 30 30 0a 64 6f 5f  e 1000000000.do_
8bb0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
8bc0: 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e 31  reatetable-3.8.1
8bd0: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
8be0: 45 20 74 37 28 0a 20 20 20 20 61 20 44 45 46 41  E t7(.    a DEFA
8bf0: 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  ULT CURRENT_TIME
8c00: 2c 20 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54  , .    b DEFAULT
8c10: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a   CURRENT_DATE, .
8c20: 20 20 20 20 63 20 44 45 46 41 55 4c 54 20 43 55      c DEFAULT CU
8c30: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a  RRENT_TIMESTAMP.
8c40: 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65    );.} {}.do_exe
8c50: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
8c60: 74 65 74 61 62 6c 65 2d 33 2e 38 2e 32 20 7b 0a  tetable-3.8.2 {.
8c70: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
8c80: 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b   DEFAULT VALUES;
8c90: 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28  .  SELECT quote(
8ca0: 61 29 2c 20 71 75 6f 74 65 28 62 29 2c 20 71 75  a), quote(b), qu
8cb0: 6f 74 65 28 63 29 20 46 52 4f 4d 20 74 37 3b 0a  ote(c) FROM t7;.
8cc0: 7d 20 7b 27 30 31 3a 34 36 3a 34 30 27 20 27 32  } {'01:46:40' '2
8cd0: 30 30 31 2d 30 39 2d 30 39 27 20 7b 27 32 30 30  001-09-09' {'200
8ce0: 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30  1-09-09 01:46:40
8cf0: 27 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43 45  '}}...# EVIDENCE
8d00: 2d 4f 46 3a 20 52 2d 36 32 33 32 37 2d 35 33 38  -OF: R-62327-538
8d10: 34 33 20 46 6f 72 20 43 55 52 52 45 4e 54 5f 54  43 For CURRENT_T
8d20: 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20  IME, the format 
8d30: 6f 66 20 74 68 65 20 76 61 6c 75 65 0a 23 20 69  of the value.# i
8d40: 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 0a 23 0a  s "HH:MM:SS"..#.
8d50: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
8d60: 2d 30 33 37 37 35 2d 34 33 34 37 31 20 46 6f 72  -03775-43471 For
8d70: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22   CURRENT_DATE, "
8d80: 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 0a 23 0a 23  YYYY-MM-DD"..#.#
8d90: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
8da0: 30 37 36 37 37 2d 34 34 39 32 36 20 54 68 65 20  07677-44926 The 
8db0: 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45  format for CURRE
8dc0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 0a  NT_TIMESTAMP is.
8dd0: 23 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48  # "YYYY-MM-DD HH
8de0: 3a 4d 4d 3a 53 53 22 2e 0a 23 0a 23 20 20 20 20  :MM:SS"..#.#    
8df0: 20 54 68 65 20 74 68 72 65 65 20 61 62 6f 76 65   The three above
8e00: 20 61 72 65 20 64 65 6d 6f 6e 73 74 72 61 74 65   are demonstrate
8e10: 64 20 62 79 20 74 65 73 74 73 20 31 2c 20 32 20  d by tests 1, 2 
8e20: 61 6e 64 20 33 20 62 65 6c 6f 77 2e 20 0a 23 20  and 3 below. .# 
8e30: 20 20 20 20 52 65 73 70 65 63 74 69 76 65 6c 79      Respectively
8e40: 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ..#.do_createtab
8e50: 6c 65 5f 74 65 73 74 73 20 33 2e 38 2e 33 20 2d  le_tests 3.8.3 -
8e60: 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54  query {.  SELECT
8e70: 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 37   a, b, c FROM t7
8e80: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
8e90: 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20  DESC LIMIT 1;.} 
8ea0: 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49 4e  {.  1 "INSERT IN
8eb0: 54 4f 20 74 37 28 62 2c 20 63 29 20 56 41 4c 55  TO t7(b, c) VALU
8ec0: 45 53 28 27 78 27 2c 20 27 79 27 29 22 20 7b 30  ES('x', 'y')" {0
8ed0: 31 3a 34 36 3a 34 30 20 78 20 79 7d 0a 20 20 32  1:46:40 x y}.  2
8ee0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37   "INSERT INTO t7
8ef0: 28 63 2c 20 61 29 20 56 41 4c 55 45 53 28 27 78  (c, a) VALUES('x
8f00: 27 2c 20 27 79 27 29 22 20 7b 79 20 32 30 30 31  ', 'y')" {y 2001
8f10: 2d 30 39 2d 30 39 20 78 7d 0a 20 20 33 20 22 49  -09-09 x}.  3 "I
8f20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 28 61 2c  NSERT INTO t7(a,
8f30: 20 62 29 20 56 41 4c 55 45 53 28 27 78 27 2c 20   b) VALUES('x', 
8f40: 27 79 27 29 22 20 7b 78 20 79 20 7b 32 30 30 31  'y')" {x y {2001
8f50: 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30 7d  -09-09 01:46:40}
8f60: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
8f70: 4f 46 3a 20 52 2d 35 35 30 36 31 2d 34 37 37 35  OF: R-55061-4775
8f80: 34 20 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  4 The COLLATE cl
8f90: 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74  ause specifies t
8fa0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 0a 23 20 63  he name of a.# c
8fb0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
8fc0: 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 20  e to use as the 
8fd0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
8fe0: 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74  n sequence for t
8ff0: 68 65 0a 23 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 23  he.# column..#.#
9000: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
9010: 34 30 32 37 35 2d 35 34 33 36 33 20 49 66 20 6e  40275-54363 If n
9020: 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  o COLLATE clause
9030: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74   is specified, t
9040: 68 65 0a 23 20 64 65 66 61 75 6c 74 20 63 6f 6c  he.# default col
9050: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
9060: 69 73 20 42 49 4e 41 52 59 2e 0a 23 0a 64 6f 5f  is BINARY..#.do_
9070: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
9080: 72 65 61 74 65 74 61 62 6c 65 2d 33 2d 39 2e 31  reatetable-3-9.1
9090: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
90a0: 45 20 74 38 28 61 20 43 4f 4c 4c 41 54 45 20 6e  E t8(a COLLATE n
90b0: 6f 63 61 73 65 2c 20 62 20 43 4f 4c 4c 41 54 45  ocase, b COLLATE
90c0: 20 72 74 72 69 6d 2c 20 63 20 43 4f 4c 4c 41 54   rtrim, c COLLAT
90d0: 45 20 62 69 6e 61 72 79 2c 20 64 29 3b 0a 20 20  E binary, d);.  
90e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
90f0: 41 4c 55 45 53 28 27 61 62 63 27 2c 20 20 20 27  ALUES('abc',   '
9100: 61 62 63 27 2c 20 20 20 27 61 62 63 27 2c 20 20  abc',   'abc',  
9110: 20 27 61 62 63 27 29 3b 0a 20 20 49 4e 53 45 52   'abc');.  INSER
9120: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
9130: 28 27 61 62 63 20 20 27 2c 20 27 61 62 63 20 20  ('abc  ', 'abc  
9140: 27 2c 20 27 61 62 63 20 20 27 2c 20 27 61 62 63  ', 'abc  ', 'abc
9150: 20 20 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49    ');.  INSERT I
9160: 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27 41  NTO t8 VALUES('A
9170: 42 43 20 20 27 2c 20 27 41 42 43 20 20 27 2c 20  BC  ', 'ABC  ', 
9180: 27 41 42 43 20 20 27 2c 20 27 41 42 43 20 20 27  'ABC  ', 'ABC  '
9190: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
91a0: 20 74 38 20 56 41 4c 55 45 53 28 27 41 42 43 27   t8 VALUES('ABC'
91b0: 2c 20 20 20 27 41 42 43 27 2c 20 20 20 27 41 42  ,   'ABC',   'AB
91c0: 43 27 2c 20 20 20 27 41 42 43 27 29 3b 0a 7d 20  C',   'ABC');.} 
91d0: 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  {}.do_createtabl
91e0: 65 5f 74 65 73 74 73 20 33 2e 39 20 7b 0a 20 20  e_tests 3.9 {.  
91f0: 32 20 20 20 20 22 53 45 4c 45 43 54 20 61 20 46  2    "SELECT a F
9200: 52 4f 4d 20 74 38 20 4f 52 44 45 52 20 42 59 20  ROM t8 ORDER BY 
9210: 61 2c 20 72 6f 77 69 64 22 20 20 20 20 7b 61 62  a, rowid"    {ab
9220: 63 20 41 42 43 20 7b 61 62 63 20 20 7d 20 7b 41  c ABC {abc  } {A
9230: 42 43 20 20 7d 7d 0a 20 20 33 20 20 20 20 22 53  BC  }}.  3    "S
9240: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 38 20  ELECT b FROM t8 
9250: 4f 52 44 45 52 20 42 59 20 62 2c 20 72 6f 77 69  ORDER BY b, rowi
9260: 64 22 20 20 20 20 7b 7b 41 42 43 20 20 7d 20 41  d"    {{ABC  } A
9270: 42 43 20 61 62 63 20 7b 61 62 63 20 20 7d 7d 0a  BC abc {abc  }}.
9280: 20 20 34 20 20 20 20 22 53 45 4c 45 43 54 20 63    4    "SELECT c
9290: 20 46 52 4f 4d 20 74 38 20 4f 52 44 45 52 20 42   FROM t8 ORDER B
92a0: 59 20 63 2c 20 72 6f 77 69 64 22 20 20 20 20 7b  Y c, rowid"    {
92b0: 41 42 43 20 7b 41 42 43 20 20 7d 20 61 62 63 20  ABC {ABC  } abc 
92c0: 7b 61 62 63 20 20 7d 7d 0a 20 20 35 20 20 20 20  {abc  }}.  5    
92d0: 22 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74  "SELECT d FROM t
92e0: 38 20 4f 52 44 45 52 20 42 59 20 64 2c 20 72 6f  8 ORDER BY d, ro
92f0: 77 69 64 22 20 20 20 20 7b 41 42 43 20 7b 41 42  wid"    {ABC {AB
9300: 43 20 20 7d 20 61 62 63 20 7b 61 62 63 20 20 7d  C  } abc {abc  }
9310: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
9320: 4f 46 3a 20 52 2d 32 35 34 37 33 2d 32 30 35 35  OF: R-25473-2055
9330: 37 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  7 The number of 
9340: 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62  columns in a tab
9350: 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 0a 23 20  le is limited.# 
9360: 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  by the SQLITE_MA
9370: 58 5f 43 4f 4c 55 4d 4e 20 63 6f 6d 70 69 6c 65  X_COLUMN compile
9380: 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e  -time parameter.
9390: 0a 23 0a 70 72 6f 63 20 63 6f 6c 75 6d 6e 73 20  .#.proc columns 
93a0: 7b 6e 7d 20 7b 0a 20 20 73 65 74 20 72 65 73 20  {n} {.  set res 
93b0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65  [list].  for {se
93c0: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 7d  t i 0} {$i < $n}
93d0: 20 7b 69 6e 63 72 20 69 7d 20 7b 20 6c 61 70 70   {incr i} { lapp
93e0: 65 6e 64 20 72 65 73 20 22 63 24 69 22 20 7d 0a  end res "c$i" }.
93f0: 20 20 6a 6f 69 6e 20 24 72 65 73 20 22 2c 20 22    join $res ", "
9400: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
9410: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
9420: 2d 33 2e 31 30 2e 31 20 5b 73 75 62 73 74 20 7b  -3.10.1 [subst {
9430: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
9440: 74 39 28 5b 63 6f 6c 75 6d 6e 73 20 24 3a 3a 53  t9([columns $::S
9450: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
9460: 5d 29 3b 0a 7d 5d 20 7b 7d 0a 64 6f 5f 63 61 74  ]);.}] {}.do_cat
9470: 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  chsql_test e_cre
9480: 61 74 65 74 61 62 6c 65 2d 33 2e 31 30 2e 32 20  atetable-3.10.2 
9490: 5b 73 75 62 73 74 20 7b 0a 20 20 43 52 45 41 54  [subst {.  CREAT
94a0: 45 20 54 41 42 4c 45 20 74 31 30 28 5b 63 6f 6c  E TABLE t10([col
94b0: 75 6d 6e 73 20 5b 65 78 70 72 20 24 3a 3a 53 51  umns [expr $::SQ
94c0: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2b  LITE_MAX_COLUMN+
94d0: 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f  1]]);.}] {1 {too
94e0: 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e   many columns on
94f0: 20 74 31 30 7d 7d 0a 0a 23 20 45 56 49 44 45 4e   t10}}..# EVIDEN
9500: 43 45 2d 4f 46 3a 20 52 2d 32 37 37 37 35 2d 36  CE-OF: R-27775-6
9510: 34 37 32 31 20 42 6f 74 68 20 6f 66 20 74 68 65  4721 Both of the
9520: 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65  se limits can be
9530: 20 6c 6f 77 65 72 65 64 20 61 74 0a 23 20 72 75   lowered at.# ru
9540: 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  ntime using the 
9550: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
9560: 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e  C/C++ interface.
9570: 0a 23 0a 23 20 20 20 41 20 33 30 2c 30 30 30 20  .#.#   A 30,000 
9580: 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 73 75 6d  byte blob consum
9590: 65 73 20 33 30 2c 30 30 33 20 62 79 74 65 73 20  es 30,003 bytes 
95a0: 6f 66 20 72 65 63 6f 72 64 20 73 70 61 63 65 2e  of record space.
95b0: 20 41 20 72 65 63 6f 72 64 20 0a 23 20 20 20 74   A record .#   t
95c0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 33 20 73  hat contains 3 s
95d0: 75 63 68 20 62 6c 6f 62 73 20 63 6f 6e 73 75 6d  uch blobs consum
95e0: 65 73 20 28 33 30 2c 30 30 30 2a 33 29 2b 31 20  es (30,000*3)+1 
95f0: 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e 20  bytes of space. 
9600: 54 65 73 74 73 0a 23 20 20 20 33 2e 31 31 2e 34  Tests.#   3.11.4
9610: 20 61 6e 64 20 33 2e 31 31 2e 35 2c 20 77 68 69   and 3.11.5, whi
9620: 63 68 20 76 65 72 69 66 79 20 74 68 61 74 20 53  ch verify that S
9630: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
9640: 20 6d 61 79 20 62 65 20 6c 6f 77 65 72 65 64 0a   may be lowered.
9650: 23 20 20 20 61 74 20 72 75 6e 74 69 6d 65 2c 20  #   at runtime, 
9660: 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 69  are based on thi
9670: 73 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2e 0a 23  s calculation..#
9680: 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64  .sqlite3_limit d
9690: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  b SQLITE_LIMIT_C
96a0: 4f 4c 55 4d 4e 20 35 30 30 0a 64 6f 5f 65 78 65  OLUMN 500.do_exe
96b0: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
96c0: 74 65 74 61 62 6c 65 2d 33 2e 31 31 2e 31 20 5b  tetable-3.11.1 [
96d0: 73 75 62 73 74 20 7b 0a 20 20 43 52 45 41 54 45  subst {.  CREATE
96e0: 20 54 41 42 4c 45 20 74 31 30 28 5b 63 6f 6c 75   TABLE t10([colu
96f0: 6d 6e 73 20 35 30 30 5d 29 3b 0a 7d 5d 20 7b 7d  mns 500]);.}] {}
9700: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
9710: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
9720: 33 2e 31 31 2e 32 20 5b 73 75 62 73 74 20 7b 0a  3.11.2 [subst {.
9730: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
9740: 31 31 28 5b 63 6f 6c 75 6d 6e 73 20 35 30 31 5d  11([columns 501]
9750: 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f 20 6d 61  );.}] {1 {too ma
9760: 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74 31  ny columns on t1
9770: 31 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61  1}}..# Check tha
9780: 74 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  t it is not poss
9790: 69 62 6c 65 20 74 6f 20 72 61 69 73 65 20 74 68  ible to raise th
97a0: 65 20 63 6f 6c 75 6d 6e 20 6c 69 6d 69 74 20 61  e column limit a
97b0: 62 6f 76 65 20 69 74 73 20 0a 23 20 64 65 66 61  bove its .# defa
97c0: 75 6c 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65  ult compile time
97d0: 20 76 61 6c 75 65 2e 0a 23 0a 73 71 6c 69 74 65   value..#.sqlite
97e0: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
97f0: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 5b  E_LIMIT_COLUMN [
9800: 65 78 70 72 20 24 3a 3a 53 51 4c 49 54 45 5f 4d  expr $::SQLITE_M
9810: 41 58 5f 43 4f 4c 55 4d 4e 2b 32 5d 0a 64 6f 5f  AX_COLUMN+2].do_
9820: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f  catchsql_test e_
9830: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 31  createtable-3.11
9840: 2e 33 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52  .3 [subst {.  CR
9850: 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 5b  EATE TABLE t11([
9860: 63 6f 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24 3a  columns [expr $:
9870: 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55  :SQLITE_MAX_COLU
9880: 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b  MN+1]]);.}] {1 {
9890: 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73  too many columns
98a0: 20 6f 6e 20 74 31 31 7d 7d 0a 0a 73 71 6c 69 74   on t11}}..sqlit
98b0: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
98c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20  TE_LIMIT_LENGTH 
98d0: 39 30 30 31 30 0a 64 6f 5f 65 78 65 63 73 71 6c  90010.do_execsql
98e0: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
98f0: 62 6c 65 2d 33 2e 31 31 2e 34 20 7b 0a 20 20 43  ble-3.11.4 {.  C
9900: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 32 28  REATE TABLE t12(
9910: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 49 4e 53 45  a, b, c);.  INSE
9920: 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41 4c 55  RT INTO t12 VALU
9930: 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30  ES(randomblob(30
9940: 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28  000),randomblob(
9950: 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f  30000),randomblo
9960: 62 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b 7d 0a  b(30000));.} {}.
9970: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
9980: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
9990: 2e 31 31 2e 35 20 7b 0a 20 20 49 4e 53 45 52 54  .11.5 {.  INSERT
99a0: 20 49 4e 54 4f 20 74 31 32 20 56 41 4c 55 45 53   INTO t12 VALUES
99b0: 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 30  (randomblob(3000
99c0: 31 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30  1),randomblob(30
99d0: 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28  000),randomblob(
99e0: 33 30 30 30 30 29 29 3b 0a 7d 20 7b 31 20 7b 73  30000));.} {1 {s
99f0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
9a00: 6f 20 62 69 67 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  o big}}..#------
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 0a 23 20 54 65 73 74 73 20 66 6f 72 20  ---.# Tests for 
9a60: 73 74 61 74 65 6d 65 6e 74 73 20 72 65 67 61 72  statements regar
9a70: 64 69 6e 67 20 63 6f 6e 73 74 72 61 69 6e 74 73  ding constraints
9a80: 20 28 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55   (PRIMARY KEY, U
9a90: 4e 49 51 55 45 2c 20 4e 4f 54 20 0a 23 20 4e 55  NIQUE, NOT .# NU
9aa0: 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e  LL and CHECK con
9ab0: 73 74 72 61 69 6e 74 73 29 2e 0a 23 0a 0a 23 20  straints)..#..# 
9ac0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
9ad0: 32 33 38 32 2d 35 34 32 34 38 20 45 61 63 68 20  2382-54248 Each 
9ae0: 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  table in SQLite 
9af0: 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74  may have at most
9b00: 20 6f 6e 65 0a 23 20 50 52 49 4d 41 52 59 20 4b   one.# PRIMARY K
9b10: 45 59 2e 0a 23 20 0a 23 20 45 56 49 44 45 4e 43  EY..# .# EVIDENC
9b20: 45 2d 4f 46 3a 20 52 2d 31 38 30 38 30 2d 34 37  E-OF: R-18080-47
9b30: 32 37 31 20 49 66 20 74 68 65 72 65 20 69 73 20  271 If there is 
9b40: 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52  more than one PR
9b50: 49 4d 41 52 59 20 4b 45 59 0a 23 20 63 6c 61 75  IMARY KEY.# clau
9b60: 73 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 43  se in a single C
9b70: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
9b80: 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20  ement, it is an 
9b90: 65 72 72 6f 72 2e 0a 23 0a 23 20 20 20 20 20 54  error..#.#     T
9ba0: 6f 20 74 65 73 74 20 74 68 65 20 74 77 6f 20 61  o test the two a
9bb0: 62 6f 76 65 2c 20 73 68 6f 77 20 74 68 61 74 20  bove, show that 
9bc0: 7a 65 72 6f 20 70 72 69 6d 61 72 79 20 6b 65 79  zero primary key
9bd0: 73 20 69 73 20 4f 6b 2c 20 6f 6e 65 20 70 72 69  s is Ok, one pri
9be0: 6d 61 72 79 0a 23 20 20 20 20 20 6b 65 79 20 69  mary.#     key i
9bf0: 73 20 4f 6b 2c 20 61 6e 64 20 74 77 6f 20 6f 72  s Ok, and two or
9c00: 20 6d 6f 72 65 20 70 72 69 6d 61 72 79 20 6b 65   more primary ke
9c10: 79 73 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a  ys is an error..
9c20: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
9c30: 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  s.do_createtable
9c40: 5f 74 65 73 74 73 20 34 2e 31 2e 31 20 7b 0a 20  _tests 4.1.1 {. 
9c50: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
9c60: 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 22  BLE t1(a, b, c)"
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
9ca0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
9cb0: 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t2(a PRIMARY KEY
9cc0: 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20  , b, c)"        
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43      {}.  3    "C
9cf0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
9d00: 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20  , b, c, PRIMARY 
9d10: 4b 45 59 28 61 29 29 22 20 20 20 20 20 20 20 20  KEY(a))"        
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54  {}.  4    "CREAT
9d40: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
9d50: 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   c, PRIMARY KEY(
9d60: 63 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20 20  c,b,a))"        
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d              {}.}
9d80: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
9d90: 74 65 73 74 73 20 34 2e 31 2e 32 20 2d 65 72 72  tests 4.1.2 -err
9da0: 6f 72 20 7b 0a 20 20 74 61 62 6c 65 20 22 74 35  or {.  table "t5
9db0: 22 20 68 61 73 20 6d 6f 72 65 20 74 68 61 6e 20  " has more than 
9dc0: 6f 6e 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a  one primary key.
9dd0: 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41  } {.  1    "CREA
9de0: 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52  TE TABLE t5(a PR
9df0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49  IMARY KEY, b PRI
9e00: 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20  MARY KEY, c)"   
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
9e20: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
9e30: 41 42 4c 45 20 74 35 28 61 2c 20 62 20 50 52 49  ABLE t5(a, b PRI
9e40: 4d 41 52 59 20 4b 45 59 2c 20 63 2c 20 50 52 49  MARY KEY, c, PRI
9e50: 4d 41 52 59 20 4b 45 59 28 61 29 29 22 20 20 20  MARY KEY(a))"   
9e60: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20           {}.  3 
9e70: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
9e80: 20 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52   t5(a INTEGER PR
9e90: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49  IMARY KEY, b PRI
9ea0: 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20  MARY KEY, c)"   
9eb0: 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22       {}.  4    "
9ec0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
9ed0: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
9ee0: 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 50 52 49  Y KEY, b, c, PRI
9ef0: 4d 41 52 59 20 4b 45 59 28 62 2c 20 63 29 29 22  MARY KEY(b, c))"
9f00: 20 7b 7d 0a 20 20 35 20 20 20 20 22 43 52 45 41   {}.  5    "CREA
9f10: 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52  TE TABLE t5(a PR
9f20: 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c  IMARY KEY, b, c,
9f30: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29   PRIMARY KEY(a))
9f40: 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  "            {}.
9f50: 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54    6    "CREATE T
9f60: 41 42 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45  ABLE t5(a INTEGE
9f70: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  R PRIMARY KEY, b
9f80: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
9f90: 28 61 29 29 22 20 20 20 20 7b 7d 0a 7d 0a 0a 70  (a))"    {}.}..p
9fa0: 72 6f 63 20 74 61 62 6c 65 5f 70 6b 20 7b 74 62  roc table_pk {tb
9fb0: 6c 7d 20 7b 20 0a 20 20 73 65 74 20 70 6b 20 5b  l} { .  set pk [
9fc0: 6c 69 73 74 5d 0a 20 20 64 62 20 65 76 61 6c 20  list].  db eval 
9fd0: 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e  "pragma table_in
9fe0: 66 6f 28 24 74 62 6c 29 22 20 61 20 7b 0a 20 20  fo($tbl)" a {.  
9ff0: 20 20 69 66 20 7b 24 61 28 70 6b 29 7d 20 7b 20    if {$a(pk)} { 
a000: 6c 61 70 70 65 6e 64 20 70 6b 20 24 61 28 6e 61  lappend pk $a(na
a010: 6d 65 29 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20  me) }.  }.  set 
a020: 70 6b 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  pk.}..# EVIDENCE
a030: 2d 4f 46 3a 20 52 2d 34 31 34 31 31 2d 31 38 38  -OF: R-41411-188
a040: 33 37 20 49 66 20 74 68 65 20 6b 65 79 77 6f 72  37 If the keywor
a050: 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ds PRIMARY KEY a
a060: 72 65 20 61 64 64 65 64 20 74 6f 20 61 0a 23 20  re added to a.# 
a070: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
a080: 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d  n, then the prim
a090: 61 72 79 20 6b 65 79 20 66 6f 72 20 74 68 65 20  ary key for the 
a0a0: 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f  table consists o
a0b0: 66 20 74 68 61 74 0a 23 20 73 69 6e 67 6c 65 20  f that.# single 
a0c0: 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 20 20 20 20  column..#.#     
a0d0: 54 68 65 20 61 62 6f 76 65 20 69 73 20 74 65 73  The above is tes
a0e0: 74 65 64 20 62 79 20 34 2e 32 2e 31 2e 2a 0a 23  ted by 4.2.1.*.#
a0f0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
a100: 52 2d 33 31 37 37 35 2d 34 38 32 30 34 20 4f 72  R-31775-48204 Or
a110: 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59 20 4b  , if a PRIMARY K
a120: 45 59 20 63 6c 61 75 73 65 20 69 73 20 73 70 65  EY clause is spe
a130: 63 69 66 69 65 64 20 61 73 0a 23 20 61 20 74 61  cified as.# a ta
a140: 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ble-constraint, 
a150: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
a160: 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
a170: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  e consists of th
a180: 65 0a 23 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75  e.# list of colu
a190: 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73  mns specified as
a1a0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49   part of the PRI
a1b0: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e  MARY KEY clause.
a1c0: 0a 23 0a 23 20 20 20 20 20 54 68 65 20 61 62 6f  .#.#     The abo
a1d0: 76 65 20 69 73 20 74 65 73 74 65 64 20 62 79 20  ve is tested by 
a1e0: 34 2e 32 2e 32 2e 2a 0a 23 0a 64 6f 5f 63 72 65  4.2.2.*.#.do_cre
a1f0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34  atetable_tests 4
a200: 2e 32 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63  .2 -repair {.  c
a210: 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54  atchsql { DROP T
a220: 41 42 4c 45 20 74 35 20 7d 0a 7d 20 2d 74 63 6c  ABLE t5 }.} -tcl
a230: 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f  query {.  table_
a240: 70 6b 20 74 35 0a 7d 20 7b 0a 20 20 31 2e 31 20  pk t5.} {.  1.1 
a250: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
a260: 20 74 35 28 61 2c 20 62 20 49 4e 54 45 47 45 52   t5(a, b INTEGER
a270: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29   PRIMARY KEY, c)
a280: 22 20 20 20 20 20 20 20 7b 62 7d 0a 20 20 31 2e  "       {b}.  1.
a290: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
a2a0: 4c 45 20 74 35 28 61 20 50 52 49 4d 41 52 59 20  LE t5(a PRIMARY 
a2b0: 4b 45 59 2c 20 62 2c 20 63 29 22 20 20 20 20 20  KEY, b, c)"     
a2c0: 20 20 20 20 20 20 20 20 20 20 7b 61 7d 0a 0a 20            {a}.. 
a2d0: 20 32 2e 31 20 20 20 20 22 43 52 45 41 54 45 20   2.1    "CREATE 
a2e0: 54 41 42 4c 45 20 74 35 28 61 2c 20 62 2c 20 63  TABLE t5(a, b, c
a2f0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29  , PRIMARY KEY(a)
a300: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 61 7d  )"           {a}
a310: 0a 20 20 32 2e 32 20 20 20 20 22 43 52 45 41 54  .  2.2    "CREAT
a320: 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62 2c  E TABLE t5(a, b,
a330: 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   c, PRIMARY KEY(
a340: 63 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20 7b  c,b,a))"       {
a350: 61 20 62 20 63 7d 0a 20 20 32 2e 33 20 20 20 20  a b c}.  2.3    
a360: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  "CREATE TABLE t5
a370: 28 61 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52  (a, b INTEGER PR
a380: 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20  IMARY KEY, c)"  
a390: 20 20 20 20 20 7b 62 7d 0a 7d 0a 0a 23 20 45 56       {b}.}..# EV
a3a0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 33 39  IDENCE-OF: R-339
a3b0: 38 36 2d 30 39 34 31 30 20 45 61 63 68 20 72 6f  86-09410 Each ro
a3c0: 77 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74  w in a table wit
a3d0: 68 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  h a primary key 
a3e0: 6d 75 73 74 0a 23 20 66 65 61 74 75 72 65 20 61  must.# feature a
a3f0: 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74   unique combinat
a400: 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ion of values in
a410: 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79   its primary key
a420: 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 23 20 45 56   columns..#.# EV
a430: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 31  IDENCE-OF: R-391
a440: 30 32 2d 30 36 37 33 37 20 49 66 20 61 6e 20 49  02-06737 If an I
a450: 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
a460: 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70  statement attemp
a470: 74 73 0a 23 20 74 6f 20 6d 6f 64 69 66 79 20 74  ts.# to modify t
a480: 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  he table content
a490: 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20   so that two or 
a4a0: 6d 6f 72 65 20 72 6f 77 73 20 66 65 61 74 75 72  more rows featur
a4b0: 65 20 69 64 65 6e 74 69 63 61 6c 0a 23 20 70 72  e identical.# pr
a4c0: 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73  imary key values
a4d0: 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72  , it is a constr
a4e0: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
a4f0: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
a500: 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  s.do_execsql_tes
a510: 74 20 34 2e 33 2e 30 20 7b 0a 20 20 43 52 45 41  t 4.3.0 {.  CREA
a520: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 50 52  TE TABLE t1(x PR
a530: 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20  IMARY KEY, y);. 
a540: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
a550: 56 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20 20  VALUES(0,       
a560: 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49 4e     'zero');.  IN
a570: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
a580: 55 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20 20  UES(45.5,       
a590: 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54  'one');.  INSERT
a5a0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
a5b0: 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77 6f  'brambles', 'two
a5c0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a5d0: 4f 20 74 31 20 56 41 4c 55 45 53 28 58 27 41 42  O t1 VALUES(X'AB
a5e0: 43 44 45 46 27 2c 20 20 27 74 68 72 65 65 27 29  CDEF',  'three')
a5f0: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  ;..  CREATE TABL
a600: 45 20 74 32 28 78 2c 20 79 2c 20 50 52 49 4d 41  E t2(x, y, PRIMA
a610: 52 59 20 4b 45 59 28 78 2c 20 79 29 29 3b 0a 20  RY KEY(x, y));. 
a620: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
a630: 56 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20 20  VALUES(0,       
a640: 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49 4e     'zero');.  IN
a650: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
a660: 55 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20 20  UES(45.5,       
a670: 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54  'one');.  INSERT
a680: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
a690: 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77 6f  'brambles', 'two
a6a0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
a6b0: 4f 20 74 32 20 56 41 4c 55 45 53 28 58 27 41 42  O t2 VALUES(X'AB
a6c0: 43 44 45 46 27 2c 20 20 27 74 68 72 65 65 27 29  CDEF',  'three')
a6d0: 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65 61 74  ;.} {}..do_creat
a6e0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 33  etable_tests 4.3
a6f0: 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25 73 20 6e  .1 -error { %s n
a700: 6f 74 20 75 6e 69 71 75 65 20 7d 20 7b 0a 20 20  ot unique } {.  
a710: 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  1    "INSERT INT
a720: 4f 20 74 31 20 56 41 4c 55 45 53 28 30 2c 20 30  O t1 VALUES(0, 0
a730: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
a740: 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73     {"column x is
a750: 22 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45 52  "}.  2    "INSER
a760: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
a770: 28 34 35 2e 35 2c 20 27 61 62 63 27 29 22 20 20  (45.5, 'abc')"  
a780: 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e          {"column
a790: 20 78 20 69 73 22 7d 0a 20 20 33 20 20 20 20 22   x is"}.  3    "
a7a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
a7b0: 41 4c 55 45 53 28 30 2e 30 2c 20 27 61 62 63 27  ALUES(0.0, 'abc'
a7c0: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 22 63  )"           {"c
a7d0: 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 34  olumn x is"}.  4
a7e0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
a7f0: 20 74 31 20 56 41 4c 55 45 53 28 27 62 72 61 6d   t1 VALUES('bram
a800: 62 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20 20  bles', 'abc')"  
a810: 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22    {"column x is"
a820: 7d 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54  }.  5    "INSERT
a830: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
a840: 58 27 41 42 43 44 45 46 27 2c 20 27 61 62 63 27  X'ABCDEF', 'abc'
a850: 29 22 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20  )"     {"column 
a860: 78 20 69 73 22 7d 0a 0a 20 20 36 20 20 20 20 22  x is"}..  6    "
a870: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
a880: 41 4c 55 45 53 28 30 2c 20 27 7a 65 72 6f 27 29  ALUES(0, 'zero')
a890: 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 22 63  "            {"c
a8a0: 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22  olumns x, y are"
a8b0: 7d 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52 54  }.  7    "INSERT
a8c0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
a8d0: 34 35 2e 35 2c 20 27 6f 6e 65 27 29 22 20 20 20  45.5, 'one')"   
a8e0: 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73         {"columns
a8f0: 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 38 20   x, y are"}.  8 
a900: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a910: 74 32 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 27  t2 VALUES(0.0, '
a920: 7a 65 72 6f 27 29 22 20 20 20 20 20 20 20 20 20  zero')"         
a930: 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20   {"columns x, y 
a940: 61 72 65 22 7d 0a 20 20 39 20 20 20 20 22 49 4e  are"}.  9    "IN
a950: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
a960: 55 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20  UES('brambles', 
a970: 27 74 77 6f 27 29 22 20 20 20 20 7b 22 63 6f 6c  'two')"    {"col
a980: 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a  umns x, y are"}.
a990: 20 20 31 30 20 20 20 22 49 4e 53 45 52 54 20 49    10   "INSERT I
a9a0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58 27  NTO t2 VALUES(X'
a9b0: 41 42 43 44 45 46 27 2c 20 27 74 68 72 65 65 27  ABCDEF', 'three'
a9c0: 29 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78  )"   {"columns x
a9d0: 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 64 6f 5f 63  , y are"}.}.do_c
a9e0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
a9f0: 20 34 2e 33 2e 32 20 7b 0a 20 20 31 20 20 20 20   4.3.2 {.  1    
aa00: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
aa10: 56 41 4c 55 45 53 28 2d 31 2c 20 30 29 22 20 20  VALUES(-1, 0)"  
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
aa30: 0a 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20  .  2    "INSERT 
aa40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
aa50: 35 2e 32 2c 20 27 61 62 63 27 29 22 20 20 20 20  5.2, 'abc')"    
aa60: 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20        {}.  3    
aa70: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
aa80: 56 41 4c 55 45 53 28 30 2e 30 31 2c 20 27 61 62  VALUES(0.01, 'ab
aa90: 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d  c')"          {}
aaa0: 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54 20  .  4    "INSERT 
aab0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
aac0: 62 72 61 6d 62 6c 65 27 2c 20 27 61 62 63 27 29  bramble', 'abc')
aad0: 22 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20  "     {}.  5    
aae0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
aaf0: 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 45 27  VALUES(X'ABCDEE'
ab00: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 7b 7d  , 'abc')"     {}
ab10: 0a 0a 20 20 36 20 20 20 20 22 49 4e 53 45 52 54  ..  6    "INSERT
ab20: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
ab30: 30 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20  0, 0)"          
ab40: 20 20 20 20 20 20 20 7b 7d 0a 20 20 37 20 20 20         {}.  7   
ab50: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
ab60: 20 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 27 61   VALUES(45.5, 'a
ab70: 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b  bc')"          {
ab80: 7d 0a 20 20 38 20 20 20 20 22 49 4e 53 45 52 54  }.  8    "INSERT
ab90: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
aba0: 30 2e 30 2c 20 27 61 62 63 27 29 22 20 20 20 20  0.0, 'abc')"    
abb0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 39 20 20 20         {}.  9   
abc0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
abd0: 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65   VALUES('bramble
abe0: 73 27 2c 20 27 61 62 63 27 29 22 20 20 20 20 7b  s', 'abc')"    {
abf0: 7d 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52 54  }.  10   "INSERT
ac00: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
ac10: 58 27 41 42 43 44 45 46 27 2c 20 27 61 62 63 27  X'ABCDEF', 'abc'
ac20: 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 64 6f 5f 63  )"     {}.}.do_c
ac30: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
ac40: 20 34 2e 33 2e 33 20 2d 65 72 72 6f 72 20 7b 20   4.3.3 -error { 
ac50: 25 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20  %s not unique } 
ac60: 7b 0a 20 20 31 20 20 20 20 22 55 50 44 41 54 45  {.  1    "UPDATE
ac70: 20 74 31 20 53 45 54 20 78 3d 30 20 20 20 20 20   t1 SET x=0     
ac80: 20 20 20 20 20 20 57 48 45 52 45 20 79 3d 27 74        WHERE y='t
ac90: 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e  wo'"    {"column
aca0: 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20 20 22   x is"}.  2    "
acb0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 78 3d  UPDATE t1 SET x=
acc0: 27 62 72 61 6d 62 6c 65 73 27 20 20 57 48 45 52  'brambles'  WHER
acd0: 45 20 79 3d 27 74 68 72 65 65 27 22 20 20 7b 22  E y='three'"  {"
ace0: 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20  column x is"}.  
acf0: 33 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20  3    "UPDATE t1 
ad00: 53 45 54 20 78 3d 34 35 2e 35 20 20 20 20 20 20  SET x=45.5      
ad10: 20 20 57 48 45 52 45 20 79 3d 27 7a 65 72 6f 27    WHERE y='zero'
ad20: 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69  "   {"column x i
ad30: 73 22 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41  s"}.  4    "UPDA
ad40: 54 45 20 74 31 20 53 45 54 20 78 3d 58 27 41 42  TE t1 SET x=X'AB
ad50: 43 44 45 46 27 20 20 20 57 48 45 52 45 20 79 3d  CDEF'   WHERE y=
ad60: 27 6f 6e 65 27 22 20 20 20 20 7b 22 63 6f 6c 75  'one'"    {"colu
ad70: 6d 6e 20 78 20 69 73 22 7d 0a 20 20 35 20 20 20  mn x is"}.  5   
ad80: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
ad90: 78 3d 30 2e 30 20 20 20 20 20 20 20 20 20 57 48  x=0.0         WH
ada0: 45 52 45 20 79 3d 27 74 68 72 65 65 27 22 20 20  ERE y='three'"  
adb0: 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a  {"column x is"}.
adc0: 0a 20 20 36 20 20 20 20 22 55 50 44 41 54 45 20  .  6    "UPDATE 
add0: 74 32 20 53 45 54 20 78 3d 30 2c 20 79 3d 27 7a  t2 SET x=0, y='z
ade0: 65 72 6f 27 20 57 48 45 52 45 20 79 3d 27 74 77  ero' WHERE y='tw
adf0: 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73  o'"    {"columns
ae00: 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 37 20   x, y are"}.  7 
ae10: 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45     "UPDATE t2 SE
ae20: 54 20 78 3d 27 62 72 61 6d 62 6c 65 73 27 2c 20  T x='brambles', 
ae30: 79 3d 27 74 77 6f 27 20 57 48 45 52 45 20 79 3d  y='two' WHERE y=
ae40: 27 74 68 72 65 65 27 22 20 20 0a 20 20 20 20 20  'three'"  .     
ae50: 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79    {"columns x, y
ae60: 20 61 72 65 22 7d 0a 20 20 38 20 20 20 20 22 55   are"}.  8    "U
ae70: 50 44 41 54 45 20 74 32 20 53 45 54 20 78 3d 34  PDATE t2 SET x=4
ae80: 35 2e 35 2c 20 79 3d 27 6f 6e 65 27 20 57 48 45  5.5, y='one' WHE
ae90: 52 45 20 79 3d 27 7a 65 72 6f 27 22 20 7b 22 63  RE y='zero'" {"c
aea0: 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22  olumns x, y are"
aeb0: 7d 0a 20 20 39 20 20 20 20 22 55 50 44 41 54 45  }.  9    "UPDATE
aec0: 20 74 32 20 53 45 54 20 78 3d 58 27 41 42 43 44   t2 SET x=X'ABCD
aed0: 45 46 27 2c 20 79 3d 27 74 68 72 65 65 27 20 57  EF', y='three' W
aee0: 48 45 52 45 20 79 3d 27 6f 6e 65 27 22 20 0a 20  HERE y='one'" . 
aef0: 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20        {"columns 
af00: 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 31 30 20  x, y are"}.  10 
af10: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
af20: 20 78 3d 30 2e 30 2c 20 79 3d 27 7a 65 72 6f 27   x=0.0, y='zero'
af30: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 79 3d          WHERE y=
af40: 27 74 68 72 65 65 27 22 20 20 0a 20 20 20 20 20  'three'"  .     
af50: 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79    {"columns x, y
af60: 20 61 72 65 22 7d 0a 7d 0a 0a 0a 23 20 45 56 49   are"}.}...# EVI
af70: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 37  DENCE-OF: R-5257
af80: 32 2d 30 32 30 37 38 20 46 6f 72 20 74 68 65 20  2-02078 For the 
af90: 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65  purposes of dete
afa0: 72 6d 69 6e 69 6e 67 20 74 68 65 0a 23 20 75 6e  rmining the.# un
afb0: 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d  iqueness of prim
afc0: 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20  ary key values, 
afd0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
afe0: 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69  considered disti
aff0: 6e 63 74 0a 23 20 66 72 6f 6d 20 61 6c 6c 20 6f  nct.# from all o
b000: 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63  ther values, inc
b010: 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c  luding other NUL
b020: 4c 73 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74  Ls..#.do_createt
b030: 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 34 20 7b  able_tests 4.4 {
b040: 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20  .  1    "INSERT 
b050: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e  INTO t1 VALUES(N
b060: 55 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20  ULL, 0)"        
b070: 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20        {}.  2    
b080: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
b090: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 30 29 22  VALUES(NULL, 0)"
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
b0b0: 0a 20 20 33 20 20 20 20 22 49 4e 53 45 52 54 20  .  3    "INSERT 
b0c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e  INTO t1 VALUES(N
b0d0: 55 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20  ULL, 0)"        
b0e0: 20 20 20 20 20 20 7b 7d 0a 0a 20 20 34 20 20 20        {}..  4   
b0f0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b100: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 7a   VALUES(NULL, 'z
b110: 65 72 6f 27 29 22 20 20 20 20 20 20 20 20 20 7b  ero')"         {
b120: 7d 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54  }.  5    "INSERT
b130: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b140: 4e 55 4c 4c 2c 20 27 6f 6e 65 27 29 22 20 20 20  NULL, 'one')"   
b150: 20 20 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20         {}.  6   
b160: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b170: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 74   VALUES(NULL, 't
b180: 77 6f 27 29 22 20 20 20 20 20 20 20 20 20 20 7b  wo')"          {
b190: 7d 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52 54  }.  7    "INSERT
b1a0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b1b0: 4e 55 4c 4c 2c 20 27 74 68 72 65 65 27 29 22 20  NULL, 'three')" 
b1c0: 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 38 20 20         {}..  8  
b1d0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b1e0: 32 20 56 41 4c 55 45 53 28 30 2c 20 4e 55 4c 4c  2 VALUES(0, NULL
b1f0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
b200: 7b 7d 0a 20 20 39 20 20 20 20 22 49 4e 53 45 52  {}.  9    "INSER
b210: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
b220: 28 34 35 2e 35 2c 20 4e 55 4c 4c 29 22 20 20 20  (45.5, NULL)"   
b230: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20          {}.  10 
b240: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b250: 32 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 4e 55  2 VALUES(0.0, NU
b260: 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 20  LL)"            
b270: 7b 7d 0a 20 20 31 31 20 20 20 22 49 4e 53 45 52  {}.  11   "INSER
b280: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
b290: 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 4e 55 4c  ('brambles', NUL
b2a0: 4c 29 22 20 20 20 20 20 7b 7d 0a 20 20 31 32 20  L)"     {}.  12 
b2b0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b2c0: 32 20 56 41 4c 55 45 53 28 58 27 41 42 43 44 45  2 VALUES(X'ABCDE
b2d0: 46 27 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20  F', NULL)"      
b2e0: 7b 7d 0a 0a 20 20 31 33 20 20 20 22 49 4e 53 45  {}..  13   "INSE
b2f0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
b300: 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20  S(NULL, NULL)"  
b310: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 34           {}.  14
b320: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
b330: 74 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t2 VALUES(NULL, 
b340: 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20  NULL)"          
b350: 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43   {}.}..# EVIDENC
b360: 45 2d 4f 46 3a 20 52 2d 36 31 38 36 36 2d 33 38  E-OF: R-61866-38
b370: 30 35 33 20 55 6e 6c 65 73 73 20 74 68 65 20 63  053 Unless the c
b380: 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54 45  olumn is an INTE
b390: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  GER PRIMARY KEY.
b3a0: 23 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20  # SQLite allows 
b3b0: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61  NULL values in a
b3c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
b3d0: 75 6d 6e 2e 0a 23 0a 23 20 20 20 20 20 49 66 20  umn..#.#     If 
b3e0: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  the column is an
b3f0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
b400: 20 6b 65 79 2c 20 61 74 74 65 6d 70 74 69 6e 67   key, attempting
b410: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c   to insert a NUL
b420: 4c 0a 23 20 20 20 20 20 69 6e 74 6f 20 74 68 65  L.#     into the
b430: 20 63 6f 6c 75 6d 6e 20 74 72 69 67 67 65 72 73   column triggers
b440: 20 74 68 65 20 61 75 74 6f 2d 69 6e 63 72 65 6d   the auto-increm
b450: 65 6e 74 20 62 65 68 61 76 69 6f 75 72 2e 20 41  ent behaviour. A
b460: 74 74 65 6d 70 74 69 6e 67 0a 23 20 20 20 20 20  ttempting.#     
b470: 74 6f 20 75 73 65 20 55 50 44 41 54 45 20 74 6f  to use UPDATE to
b480: 20 73 65 74 20 61 6e 20 69 70 6b 20 63 6f 6c 75   set an ipk colu
b490: 6d 6e 20 74 6f 20 61 20 4e 55 4c 4c 20 76 61 6c  mn to a NULL val
b4a0: 75 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a  ue is an error..
b4b0: 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  #.do_createtable
b4c0: 5f 74 65 73 74 73 20 34 2e 35 2e 31 20 7b 0a 20  _tests 4.5.1 {. 
b4d0: 20 31 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f   1    "SELECT co
b4e0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57  unt(*) FROM t1 W
b4f0: 48 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 22 20  HERE x IS NULL" 
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b510: 20 20 33 0a 20 20 32 20 20 20 20 22 53 45 4c 45    3.  2    "SELE
b520: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
b530: 20 74 32 20 57 48 45 52 45 20 78 20 49 53 20 4e   t2 WHERE x IS N
b540: 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20  ULL"            
b550: 20 20 20 20 20 20 20 36 0a 20 20 33 20 20 20 20         6.  3    
b560: 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  "SELECT count(*)
b570: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 79   FROM t2 WHERE y
b580: 20 49 53 20 4e 55 4c 4c 22 20 20 20 20 20 20 20   IS NULL"       
b590: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 20 20              7.  
b5a0: 34 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75  4    "SELECT cou
b5b0: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48  nt(*) FROM t2 WH
b5c0: 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 20 41 4e  ERE x IS NULL AN
b5d0: 44 20 79 20 49 53 20 4e 55 4c 4c 22 20 20 20 20  D y IS NULL"    
b5e0: 20 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   2.}.do_execsql_
b5f0: 74 65 73 74 20 34 2e 35 2e 32 20 7b 0a 20 20 43  test 4.5.2 {.  C
b600: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 73  REATE TABLE t3(s
b610: 2c 20 75 20 49 4e 54 45 47 45 52 20 50 52 49 4d  , u INTEGER PRIM
b620: 41 52 59 20 4b 45 59 2c 20 76 29 3b 0a 20 20 49  ARY KEY, v);.  I
b630: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
b640: 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20 32 29  LUES(1, NULL, 2)
b650: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
b660: 74 33 20 56 41 4c 55 45 53 28 27 78 27 2c 20 4e  t3 VALUES('x', N
b670: 55 4c 4c 2c 20 27 79 27 29 3b 0a 20 20 53 45 4c  ULL, 'y');.  SEL
b680: 45 43 54 20 75 20 46 52 4f 4d 20 74 33 3b 0a 7d  ECT u FROM t3;.}
b690: 20 7b 31 20 32 7d 0a 64 6f 5f 63 61 74 63 68 73   {1 2}.do_catchs
b6a0: 71 6c 5f 74 65 73 74 20 34 2e 35 2e 33 20 7b 0a  ql_test 4.5.3 {.
b6b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
b6c0: 20 56 41 4c 55 45 53 28 32 2c 20 35 2c 20 33 29   VALUES(2, 5, 3)
b6d0: 3b 0a 20 20 55 50 44 41 54 45 20 74 33 20 53 45  ;.  UPDATE t3 SE
b6e0: 54 20 75 20 3d 20 4e 55 4c 4c 20 57 48 45 52 45  T u = NULL WHERE
b6f0: 20 73 20 3d 20 32 3b 0a 7d 20 7b 31 20 7b 64 61   s = 2;.} {1 {da
b700: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d  tatype mismatch}
b710: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
b720: 3a 20 52 2d 30 30 32 32 37 2d 32 31 30 38 30 20  : R-00227-21080 
b730: 41 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  A UNIQUE constra
b740: 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74  int is similar t
b750: 6f 20 61 20 50 52 49 4d 41 52 59 0a 23 20 4b 45  o a PRIMARY.# KE
b760: 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78  Y constraint, ex
b770: 63 65 70 74 20 74 68 61 74 20 61 20 73 69 6e 67  cept that a sing
b780: 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76  le table may hav
b790: 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a  e any number of.
b7a0: 23 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  # UNIQUE constra
b7b0: 69 6e 74 73 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  ints..#.drop_all
b7c0: 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74  _tables.do_creat
b7d0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 36  etable_tests 4.6
b7e0: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
b7f0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 55 4e 49  E TABLE t1(a UNI
b800: 51 55 45 2c 20 62 20 55 4e 49 51 55 45 29 22 20  QUE, b UNIQUE)" 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20        {}.  2    
b830: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32  "CREATE TABLE t2
b840: 28 61 20 55 4e 49 51 55 45 2c 20 62 2c 20 63 2c  (a UNIQUE, b, c,
b850: 20 55 4e 49 51 55 45 28 63 2c 20 62 29 29 22 20   UNIQUE(c, b))" 
b860: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
b870: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
b880: 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 2c 20  BLE t3(a, b, c, 
b890: 55 4e 49 51 55 45 28 61 29 2c 20 55 4e 49 51 55  UNIQUE(a), UNIQU
b8a0: 45 28 62 29 2c 20 55 4e 49 51 55 45 28 63 29 29  E(b), UNIQUE(c))
b8b0: 22 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45  " {}.  4    "CRE
b8c0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
b8d0: 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 61 2c 20  b, c, UNIQUE(a, 
b8e0: 62 2c 20 63 29 29 22 20 20 20 20 20 20 20 20 20  b, c))"         
b8f0: 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20          {}.}..# 
b900: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
b910: 35 32 34 30 2d 35 38 38 37 37 20 46 6f 72 20 65  5240-58877 For e
b920: 61 63 68 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  ach UNIQUE const
b930: 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62  raint on the tab
b940: 6c 65 2c 0a 23 20 65 61 63 68 20 72 6f 77 20 6d  le,.# each row m
b950: 75 73 74 20 66 65 61 74 75 72 65 20 61 20 75 6e  ust feature a un
b960: 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ique combination
b970: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
b980: 65 20 63 6f 6c 75 6d 6e 73 0a 23 20 69 64 65 6e  e columns.# iden
b990: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e  tified by the UN
b9a0: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
b9b0: 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .#.# EVIDENCE-OF
b9c0: 3a 20 52 2d 34 37 37 33 33 2d 35 31 34 38 30 20  : R-47733-51480 
b9d0: 49 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  If an INSERT or 
b9e0: 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
b9f0: 20 61 74 74 65 6d 70 74 73 0a 23 20 74 6f 20 6d   attempts.# to m
ba00: 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20  odify the table 
ba10: 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20  content so that 
ba20: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73  two or more rows
ba30: 20 66 65 61 74 75 72 65 20 69 64 65 6e 74 69 63   feature identic
ba40: 61 6c 0a 23 20 76 61 6c 75 65 73 20 69 6e 20 61  al.# values in a
ba50: 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20   set of columns 
ba60: 74 68 61 74 20 61 72 65 20 73 75 62 6a 65 63 74  that are subject
ba70: 20 74 6f 20 61 20 55 4e 49 51 55 45 20 63 6f 6e   to a UNIQUE con
ba80: 73 74 72 61 69 6e 74 2c 20 69 74 0a 23 20 69 73  straint, it.# is
ba90: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
baa0: 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 65 78  olation..#.do_ex
bab0: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 37 2e 30  ecsql_test 4.7.0
bac0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
bad0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 29   t1 VALUES(1, 2)
bae0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
baf0: 74 31 20 56 41 4c 55 45 53 28 34 2e 33 2c 20 35  t1 VALUES(4.3, 5
bb00: 2e 35 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .5);.  INSERT IN
bb10: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 72 65  TO t1 VALUES('re
bb20: 76 65 61 6c 27 2c 20 27 76 61 72 69 61 62 6c 65  veal', 'variable
bb30: 6e 65 73 73 27 29 3b 0a 20 20 49 4e 53 45 52 54  ness');.  INSERT
bb40: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
bb50: 58 27 31 32 33 34 35 36 27 2c 20 58 27 36 35 34  X'123456', X'654
bb60: 33 32 31 27 29 3b 0a 0a 20 20 49 4e 53 45 52 54  321');..  INSERT
bb70: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
bb80: 27 78 79 78 27 2c 20 31 2c 20 31 29 3b 0a 20 20  'xyx', 1, 1);.  
bb90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
bba0: 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32 2c 20  ALUES('xyx', 2, 
bbb0: 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  1);.  INSERT INT
bbc0: 4f 20 74 34 20 56 41 4c 55 45 53 28 27 75 76 77  O t4 VALUES('uvw
bbd0: 27 2c 20 31 2c 20 31 29 3b 0a 7d 0a 64 6f 5f 63  ', 1, 1);.}.do_c
bbe0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
bbf0: 20 34 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b 20   4.7.1 -error { 
bc00: 25 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20  %s not unique } 
bc10: 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54  {.  1    "INSERT
bc20: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
bc30: 31 2c 20 27 6f 6e 65 27 29 22 20 20 20 20 20 20  1, 'one')"      
bc40: 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20         {{column 
bc50: 61 20 69 73 7d 7d 0a 20 20 32 20 20 20 20 22 49  a is}}.  2    "I
bc60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
bc70: 4c 55 45 53 28 34 2e 33 2c 20 27 74 77 6f 27 29  LUES(4.3, 'two')
bc80: 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f  "           {{co
bc90: 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 33 20  lumn a is}}.  3 
bca0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
bcb0: 74 31 20 56 41 4c 55 45 53 28 27 72 65 76 65 61  t1 VALUES('revea
bcc0: 6c 27 2c 20 27 74 68 72 65 65 27 29 22 20 20 20  l', 'three')"   
bcd0: 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d   {{column a is}}
bce0: 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54 20  .  4    "INSERT 
bcf0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58  INTO t1 VALUES(X
bd00: 27 31 32 33 34 35 36 27 2c 20 27 66 6f 75 72 27  '123456', 'four'
bd10: 29 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61  )"    {{column a
bd20: 20 69 73 7d 7d 0a 0a 20 20 35 20 20 20 20 22 55   is}}..  5    "U
bd30: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
bd40: 20 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 32   1 WHERE rowid=2
bd50: 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f  "           {{co
bd60: 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 36 20  lumn a is}}.  6 
bd70: 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45     "UPDATE t1 SE
bd80: 54 20 61 20 3d 20 34 2e 33 20 57 48 45 52 45 20  T a = 4.3 WHERE 
bd90: 72 6f 77 69 64 3d 33 22 20 20 20 20 20 20 20 20  rowid=3"        
bda0: 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d   {{column a is}}
bdb0: 0a 20 20 37 20 20 20 20 22 55 50 44 41 54 45 20  .  7    "UPDATE 
bdc0: 74 31 20 53 45 54 20 61 20 3d 20 27 72 65 76 65  t1 SET a = 'reve
bdd0: 61 6c 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d  al' WHERE rowid=
bde0: 34 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61  4"    {{column a
bdf0: 20 69 73 7d 7d 0a 20 20 38 20 20 20 20 22 55 50   is}}.  8    "UP
be00: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
be10: 58 27 31 32 33 34 35 36 27 20 57 48 45 52 45 20  X'123456' WHERE 
be20: 72 6f 77 69 64 3d 31 22 20 20 20 7b 7b 63 6f 6c  rowid=1"   {{col
be30: 75 6d 6e 20 61 20 69 73 7d 7d 0a 0a 20 20 39 20  umn a is}}..  9 
be40: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
be50: 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c  t4 VALUES('xyx',
be60: 20 31 2c 20 31 29 22 20 20 20 20 20 20 20 20 20   1, 1)"         
be70: 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c   {{columns a, b,
be80: 20 63 20 61 72 65 7d 7d 0a 20 20 31 30 20 20 20   c are}}.  10   
be90: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  "INSERT INTO t4 
bea0: 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32 2c  VALUES('xyx', 2,
beb0: 20 31 29 22 20 20 20 20 20 20 20 20 20 20 7b 7b   1)"          {{
bec0: 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20  columns a, b, c 
bed0: 61 72 65 7d 7d 0a 20 20 31 31 20 20 20 22 49 4e  are}}.  11   "IN
bee0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
bef0: 55 45 53 28 27 75 76 77 27 2c 20 31 2c 20 31 29  UES('uvw', 1, 1)
bf00: 22 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c  "          {{col
bf10: 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61 72 65  umns a, b, c are
bf20: 7d 7d 0a 0a 20 20 31 32 20 20 20 22 55 50 44 41  }}..  12   "UPDA
bf30: 54 45 20 74 34 20 53 45 54 20 61 3d 27 78 79 78  TE t4 SET a='xyx
bf40: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 33 22  ' WHERE rowid=3"
bf50: 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d           {{colum
bf60: 6e 73 20 61 2c 20 62 2c 20 63 20 61 72 65 7d 7d  ns a, b, c are}}
bf70: 0a 20 20 31 33 20 20 20 22 55 50 44 41 54 45 20  .  13   "UPDATE 
bf80: 74 34 20 53 45 54 20 62 3d 31 20 57 48 45 52 45  t4 SET b=1 WHERE
bf90: 20 72 6f 77 69 64 3d 32 22 20 20 20 20 20 20 20   rowid=2"       
bfa0: 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20        {{columns 
bfb0: 61 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a 20 20  a, b, c are}}.  
bfc0: 31 34 20 20 20 22 55 50 44 41 54 45 20 74 34 20  14   "UPDATE t4 
bfd0: 53 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20 63 3d  SET a=0, b=0, c=
bfe0: 30 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0"              
bff0: 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20     {{columns a, 
c000: 62 2c 20 63 20 61 72 65 7d 7d 0a 7d 0a 0a 23 20  b, c are}}.}..# 
c010: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
c020: 31 32 38 39 2d 31 31 35 35 39 20 41 73 20 77 69  1289-11559 As wi
c030: 74 68 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  th PRIMARY KEY c
c040: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 66 6f 72 20  onstraints, for 
c050: 74 68 65 0a 23 20 70 75 72 70 6f 73 65 73 20 6f  the.# purposes o
c060: 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  f UNIQUE constra
c070: 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ints NULL values
c080: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
c090: 64 69 73 74 69 6e 63 74 0a 23 20 66 72 6f 6d 20  distinct.# from 
c0a0: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
c0b0: 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65   (including othe
c0c0: 72 20 4e 55 4c 4c 73 29 2e 0a 23 0a 64 6f 5f 63  r NULLs)..#.do_c
c0d0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
c0e0: 20 34 2e 38 20 7b 0a 20 20 31 20 20 20 20 22 49   4.8 {.  1    "I
c0f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
c100: 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  LUES(NULL, NULL)
c110: 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20  "           {}. 
c120: 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   2    "INSERT IN
c130: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c  TO t1 VALUES(NUL
c140: 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20  L, NULL)"       
c150: 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 55      {}.  3    "U
c160: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
c170: 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20   NULL"          
c180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
c190: 20 34 20 20 20 20 22 55 50 44 41 54 45 20 74 31   4    "UPDATE t1
c1a0: 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20   SET b = NULL"  
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 7b 7d 0a 0a 20 20 35 20 20 20 20 22      {}..  5    "
c1d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
c1e0: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c  ALUES(NULL, NULL
c1f0: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 7b 7d 0a  , NULL)"     {}.
c200: 20 20 36 20 20 20 20 22 49 4e 53 45 52 54 20 49    6    "INSERT I
c210: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 4e 55  NTO t4 VALUES(NU
c220: 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22  LL, NULL, NULL)"
c230: 20 20 20 20 20 7b 7d 0a 20 20 37 20 20 20 20 22       {}.  7    "
c240: 55 50 44 41 54 45 20 74 34 20 53 45 54 20 61 20  UPDATE t4 SET a 
c250: 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20  = NULL"         
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
c270: 20 20 38 20 20 20 20 22 55 50 44 41 54 45 20 74    8    "UPDATE t
c280: 34 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20  4 SET b = NULL" 
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 20 20 7b 7d 0a 20 20 39 20 20 20 20 22       {}.  9    "
c2b0: 55 50 44 41 54 45 20 74 34 20 53 45 54 20 63 20  UPDATE t4 SET c 
c2c0: 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20  = NULL"         
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
c2e0: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
c2f0: 3a 20 52 2d 32 36 39 38 33 2d 32 36 33 37 37 20  : R-26983-26377 
c300: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c310: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 61 73 69 64  KEY columns asid
c320: 65 2c 20 62 6f 74 68 0a 23 20 55 4e 49 51 55 45  e, both.# UNIQUE
c330: 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59   and PRIMARY KEY
c340: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
c350: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
c360: 63 72 65 61 74 69 6e 67 20 61 6e 0a 23 20 69 6e  creating an.# in
c370: 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62  dex in the datab
c380: 61 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65  ase (in the same
c390: 20 77 61 79 20 61 73 20 61 20 22 43 52 45 41 54   way as a "CREAT
c3a0: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 0a  E UNIQUE INDEX".
c3b0: 23 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  # statement woul
c3c0: 64 29 2e 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  d)..do_createtab
c3d0: 6c 65 5f 74 65 73 74 73 20 34 2e 39 20 2d 72 65  le_tests 4.9 -re
c3e0: 70 61 69 72 20 64 72 6f 70 5f 61 6c 6c 5f 74 61  pair drop_all_ta
c3f0: 62 6c 65 73 20 2d 71 75 65 72 79 20 7b 0a 20 20  bles -query {.  
c400: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
c410: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
c420: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 69  er WHERE type='i
c430: 6e 64 65 78 27 0a 7d 20 7b 0a 20 20 31 20 20 20  ndex'.} {.  1   
c440: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
c450: 31 28 61 20 54 45 58 54 20 50 52 49 4d 41 52 59  1(a TEXT PRIMARY
c460: 20 4b 45 59 2c 20 62 29 22 20 20 20 20 20 20 20   KEY, b)"       
c470: 20 20 20 20 20 20 20 31 0a 20 20 32 20 20 20 20         1.  2    
c480: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
c490: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
c4a0: 52 59 20 4b 45 59 2c 20 62 29 22 20 20 20 20 20  RY KEY, b)"     
c4b0: 20 20 20 20 20 20 30 0a 20 20 33 20 20 20 20 22        0.  3    "
c4c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c4d0: 61 20 54 45 58 54 20 55 4e 49 51 55 45 2c 20 62  a TEXT UNIQUE, b
c4e0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
c4f0: 20 20 20 20 20 31 0a 20 20 34 20 20 20 20 22 43       1.  4    "C
c500: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
c510: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20   PRIMARY KEY, b 
c520: 54 45 58 54 20 55 4e 49 51 55 45 29 22 20 20 20  TEXT UNIQUE)"   
c530: 20 20 20 20 32 0a 20 20 35 20 20 20 20 22 43 52      2.  5    "CR
c540: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
c550: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
c560: 63 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29 29  c, UNIQUE(c, b))
c570: 22 20 20 32 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  "  2.}..# EVIDEN
c580: 43 45 2d 4f 46 3a 20 52 2d 30 32 32 35 32 2d 33  CE-OF: R-02252-3
c590: 33 31 31 36 20 53 75 63 68 20 61 6e 20 69 6e 64  3116 Such an ind
c5a0: 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65 20  ex is used like 
c5b0: 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78 0a  any other index.
c5c0: 23 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  # in the databas
c5d0: 65 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75  e to optimize qu
c5e0: 65 72 69 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  eries..#.do_exec
c5f0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 30 2e 30 20  sql_test 4.10.0 
c600: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
c610: 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59   t1(a, b PRIMARY
c620: 20 4b 45 59 29 3b 0a 20 20 43 52 45 41 54 45 20   KEY);.  CREATE 
c630: 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63  TABLE t2(a, b, c
c640: 2c 20 55 4e 49 51 55 45 28 62 2c 20 63 29 29 3b  , UNIQUE(b, c));
c650: 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
c660: 65 5f 74 65 73 74 73 20 34 2e 31 30 20 7b 0a 20  e_tests 4.10 {. 
c670: 20 31 20 20 20 20 22 45 58 50 4c 41 49 4e 20 51   1    "EXPLAIN Q
c680: 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54  UERY PLAN SELECT
c690: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
c6a0: 20 62 20 3d 20 35 22 20 0a 20 20 20 20 20 20 20   b = 5" .       
c6b0: 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54  {0 0 0 {SEARCH T
c6c0: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
c6d0: 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69  DEX sqlite_autoi
c6e0: 6e 64 65 78 5f 74 31 5f 31 20 28 62 3d 3f 29 20  ndex_t1_1 (b=?) 
c6f0: 28 7e 31 20 72 6f 77 73 29 7d 7d 0a 0a 20 20 32  (~1 rows)}}..  2
c700: 20 20 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45      "EXPLAIN QUE
c710: 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a  RY PLAN SELECT *
c720: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
c730: 59 20 62 2c 20 63 22 0a 20 20 20 20 20 20 20 7b  Y b, c".       {
c740: 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42 4c  0 0 0 {SCAN TABL
c750: 45 20 74 32 20 55 53 49 4e 47 20 49 4e 44 45 58  E t2 USING INDEX
c760: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
c770: 78 5f 74 32 5f 31 20 28 7e 31 30 30 30 30 30 30  x_t2_1 (~1000000
c780: 20 72 6f 77 73 29 7d 7d 0a 0a 20 20 33 20 20 20   rows)}}..  3   
c790: 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   "EXPLAIN QUERY 
c7a0: 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52  PLAN SELECT * FR
c7b0: 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d 31 30  OM t2 WHERE b=10
c7c0: 20 41 4e 44 20 63 3e 31 30 22 0a 20 20 20 20 20   AND c>10".     
c7d0: 20 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48    {0 0 0 {SEARCH
c7e0: 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20   TABLE t2 USING 
c7f0: 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74  INDEX sqlite_aut
c800: 6f 69 6e 64 65 78 5f 74 32 5f 31 20 28 62 3d 3f  oindex_t2_1 (b=?
c810: 20 41 4e 44 20 63 3e 3f 29 20 28 7e 32 20 72 6f   AND c>?) (~2 ro
c820: 77 73 29 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  ws)}}.}..# EVIDE
c830: 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 34 39 33 2d  NCE-OF: R-45493-
c840: 33 35 36 35 33 20 41 20 43 48 45 43 4b 20 63 6f  35653 A CHECK co
c850: 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20  nstraint may be 
c860: 61 74 74 61 63 68 65 64 20 74 6f 20 61 0a 23 20  attached to a.# 
c870: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
c880: 6e 20 6f 72 20 73 70 65 63 69 66 69 65 64 20 61  n or specified a
c890: 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72  s a table constr
c8a0: 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63  aint. In practic
c8b0: 65 20 69 74 0a 23 20 6d 61 6b 65 73 20 6e 6f 20  e it.# makes no 
c8c0: 64 69 66 66 65 72 65 6e 63 65 2e 0a 23 0a 23 20  difference..#.# 
c8d0: 20 20 41 6c 6c 20 74 68 65 20 74 65 73 74 73 20    All the tests 
c8e0: 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 43  that deal with C
c8f0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
c900: 20 62 65 6c 6f 77 20 28 34 2e 31 31 2e 2a 20 61   below (4.11.* a
c910: 6e 64 20 0a 23 20 20 20 34 2e 31 32 2e 2a 29 20  nd .#   4.12.*) 
c920: 61 72 65 20 72 75 6e 20 6f 6e 63 65 20 66 6f 72  are run once for
c930: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74 68   a table with th
c940: 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  e check constrai
c950: 6e 74 20 61 74 74 61 63 68 65 64 0a 23 20 20 20  nt attached.#   
c960: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69  to a column defi
c970: 6e 69 74 69 6f 6e 2c 20 61 6e 64 20 6f 6e 63 65  nition, and once
c980: 20 77 69 74 68 20 61 20 74 61 62 6c 65 20 77 68   with a table wh
c990: 65 72 65 20 74 68 65 20 63 68 65 63 6b 20 0a 23  ere the check .#
c9a0: 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20     condition is 
c9b0: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74  specified as a t
c9c0: 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e  able constraint.
c9d0: 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .#.# EVIDENCE-OF
c9e0: 3a 20 52 2d 35 35 34 33 35 2d 31 34 33 30 33 20  : R-55435-14303 
c9f0: 45 61 63 68 20 74 69 6d 65 20 61 20 6e 65 77 20  Each time a new 
ca00: 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20  row is inserted 
ca10: 69 6e 74 6f 20 74 68 65 0a 23 20 74 61 62 6c 65  into the.# table
ca20: 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20   or an existing 
ca30: 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c 20  row is updated, 
ca40: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61  the expression a
ca50: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23  ssociated with.#
ca60: 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73   each CHECK cons
ca70: 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61  traint is evalua
ca80: 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20  ted and cast to 
ca90: 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20  a NUMERIC value 
caa0: 69 6e 20 74 68 65 0a 23 20 73 61 6d 65 20 77 61  in the.# same wa
cab0: 79 20 61 73 20 61 20 43 41 53 54 20 65 78 70 72  y as a CAST expr
cac0: 65 73 73 69 6f 6e 2e 20 49 66 20 74 68 65 20 72  ession. If the r
cad0: 65 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69  esult is zero (i
cae0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 0a 23  nteger value 0.#
caf0: 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30   or real value 0
cb00: 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73  .0), then a cons
cb10: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
cb20: 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 0a 23   has occurred..#
cb30: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
cb40: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
cb50: 20 34 2e 31 31 20 7b 0a 20 20 43 52 45 41 54 45   4.11 {.  CREATE
cb60: 20 54 41 42 4c 45 20 78 31 28 61 20 54 45 58 54   TABLE x1(a TEXT
cb70: 2c 20 62 20 49 4e 54 45 47 45 52 20 43 48 45 43  , b INTEGER CHEC
cb80: 4b 28 20 62 3e 30 20 29 29 3b 0a 20 20 43 52 45  K( b>0 ));.  CRE
cb90: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 54  ATE TABLE t1(a T
cba0: 45 58 54 2c 20 62 20 49 4e 54 45 47 45 52 2c 20  EXT, b INTEGER, 
cbb0: 43 48 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20  CHECK( b>0 ));. 
cbc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20   INSERT INTO x1 
cbd0: 56 41 4c 55 45 53 28 27 78 27 2c 20 27 78 78 27  VALUES('x', 'xx'
cbe0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
cbf0: 20 78 31 20 56 41 4c 55 45 53 28 27 79 27 2c 20   x1 VALUES('y', 
cc00: 27 79 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  'yy');.  INSERT 
cc10: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2a  INTO t1 SELECT *
cc20: 20 46 52 4f 4d 20 78 31 3b 0a 0a 20 20 43 52 45   FROM x1;..  CRE
cc30: 41 54 45 20 54 41 42 4c 45 20 78 32 28 61 20 43  ATE TABLE x2(a C
cc40: 48 45 43 4b 28 20 61 7c 7c 62 20 29 2c 20 62 29  HECK( a||b ), b)
cc50: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
cc60: 20 74 32 28 61 2c 20 62 2c 20 43 48 45 43 4b 28   t2(a, b, CHECK(
cc70: 20 61 7c 7c 62 20 29 29 3b 0a 20 20 49 4e 53 45   a||b ));.  INSE
cc80: 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45  RT INTO x2 VALUE
cc90: 53 28 31 2c 20 27 78 78 27 29 3b 0a 20 20 49 4e  S(1, 'xx');.  IN
cca0: 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c  SERT INTO x2 VAL
ccb0: 55 45 53 28 31 2c 20 27 79 79 27 29 3b 0a 20 20  UES(1, 'yy');.  
ccc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
ccd0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b  ELECT * FROM x2;
cce0: 0a 7d 0a 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  .}..do_createtab
ccf0: 6c 65 5f 74 65 73 74 73 20 34 2e 31 31 20 2d 65  le_tests 4.11 -e
cd00: 72 72 6f 72 20 7b 63 6f 6e 73 74 72 61 69 6e 74  rror {constraint
cd10: 20 66 61 69 6c 65 64 7d 20 7b 0a 20 20 31 61 20   failed} {.  1a 
cd20: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
cd30: 78 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  x1 VALUES('one',
cd40: 20 30 29 22 20 20 20 20 20 20 20 7b 7d 0a 20 20   0)"       {}.  
cd50: 31 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  1b    "INSERT IN
cd60: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
cd70: 65 27 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b 7d  e', -4.0)"    {}
cd80: 0a 0a 20 20 32 61 20 20 20 20 22 49 4e 53 45 52  ..  2a    "INSER
cd90: 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53  T INTO x2 VALUES
cda0: 28 27 61 62 63 27 2c 20 31 29 22 20 20 20 20 20  ('abc', 1)"     
cdb0: 20 20 7b 7d 0a 20 20 32 62 20 20 20 20 22 49 4e    {}.  2b    "IN
cdc0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
cdd0: 55 45 53 28 27 61 62 63 27 2c 20 31 29 22 20 20  UES('abc', 1)"  
cde0: 20 20 20 20 20 7b 7d 0a 0a 20 20 33 61 20 20 20       {}..  3a   
cdf0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32   "INSERT INTO x2
ce00: 20 56 41 4c 55 45 53 28 30 2c 20 27 61 62 63 27   VALUES(0, 'abc'
ce10: 29 22 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 62  )"       {}.  3b
ce20: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
ce30: 20 74 32 20 56 41 4c 55 45 53 28 30 2c 20 27 61   t2 VALUES(0, 'a
ce40: 62 63 27 29 22 20 20 20 20 20 20 20 7b 7d 0a 0a  bc')"       {}..
ce50: 20 20 34 61 20 20 20 20 22 55 50 44 41 54 45 20    4a    "UPDATE 
ce60: 74 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45 52  t1 SET b=-1 WHER
ce70: 45 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20 20  E rowid=1"      
ce80: 7b 7d 0a 20 20 34 62 20 20 20 20 22 55 50 44 41  {}.  4b    "UPDA
ce90: 54 45 20 78 31 20 53 45 54 20 62 3d 2d 31 20 57  TE x1 SET b=-1 W
cea0: 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20 20 20  HERE rowid=1"   
ceb0: 20 20 20 7b 7d 0a 0a 20 20 34 61 20 20 20 20 22     {}..  4a    "
cec0: 55 50 44 41 54 45 20 78 32 20 53 45 54 20 61 3d  UPDATE x2 SET a=
ced0: 27 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31  '' WHERE rowid=1
cee0: 22 20 20 20 20 20 20 7b 7d 0a 20 20 34 62 20 20  "      {}.  4b  
cef0: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
cf00: 20 61 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69   a='' WHERE rowi
cf10: 64 3d 31 22 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a  d=1"      {}.}..
cf20: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
cf30: 2d 33 34 31 30 39 2d 33 39 31 30 38 20 49 66 20  -34109-39108 If 
cf40: 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73  the CHECK expres
cf50: 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
cf60: 6f 20 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61 6e 79  o NULL,.# or any
cf70: 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20   other non-zero 
cf80: 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74  value, it is not
cf90: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
cfa0: 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 63 72  olation..#.do_cr
cfb0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
cfc0: 34 2e 31 32 20 7b 0a 20 20 31 61 20 20 20 20 22  4.12 {.  1a    "
cfd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56  INSERT INTO x1 V
cfe0: 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e 55 4c  ALUES('one', NUL
cff0: 4c 29 22 20 20 20 20 7b 7d 0a 20 20 31 62 20 20  L)"    {}.  1b  
d000: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
d010: 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20  1 VALUES('one', 
d020: 4e 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a 20 20  NULL)"    {}..  
d030: 32 61 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  2a    "INSERT IN
d040: 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO x1 VALUES('on
d050: 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 20 20  e', 2)"    {}.  
d060: 32 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  2b    "INSERT IN
d070: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
d080: 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 0a 20  e', 2)"    {}.. 
d090: 20 33 61 20 20 20 20 22 49 4e 53 45 52 54 20 49   3a    "INSERT I
d0a0: 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28 31 2c  NTO x2 VALUES(1,
d0b0: 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20 7b   'abc')"       {
d0c0: 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53 45 52  }.  3b    "INSER
d0d0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
d0e0: 28 31 2c 20 27 61 62 63 27 29 22 20 20 20 20 20  (1, 'abc')"     
d0f0: 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e    {}.}..# EVIDEN
d100: 43 45 2d 4f 46 3a 20 52 2d 30 32 30 36 30 2d 36  CE-OF: R-02060-6
d110: 34 35 34 37 20 41 20 4e 4f 54 20 4e 55 4c 4c 20  4547 A NOT NULL 
d120: 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f  constraint may o
d130: 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65 64 0a  nly be attached.
d140: 23 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65  # to a column de
d150: 66 69 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20 73 70  finition, not sp
d160: 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62  ecified as a tab
d170: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23  le constraint..#
d180: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
d190: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
d1a0: 74 65 73 74 73 20 34 2e 31 33 2e 31 20 7b 0a 20  tests 4.13.1 {. 
d1b0: 20 31 20 20 20 20 20 22 43 52 45 41 54 45 20 54   1     "CREATE T
d1c0: 41 42 4c 45 20 74 31 28 61 20 4e 4f 54 20 4e 55  ABLE t1(a NOT NU
d1d0: 4c 4c 2c 20 62 29 22 20 20 20 20 20 20 20 20 20  LL, b)"         
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1f0: 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20        {}.  2    
d200: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
d210: 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  2(a PRIMARY KEY 
d220: 4e 4f 54 20 4e 55 4c 4c 2c 20 62 29 22 20 20 20  NOT NULL, b)"   
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d240: 7b 7d 0a 20 20 33 20 20 20 20 20 22 43 52 45 41  {}.  3     "CREA
d250: 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 4e 4f  TE TABLE t3(a NO
d260: 54 20 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20 4e 55  T NULL, b NOT NU
d270: 4c 4c 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 55  LL, c NOT NULL U
d280: 4e 49 51 55 45 29 22 20 20 20 7b 7d 0a 7d 0a 64  NIQUE)"   {}.}.d
d290: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
d2a0: 73 74 73 20 34 2e 31 33 2e 32 20 2d 65 72 72 6f  sts 4.13.2 -erro
d2b0: 72 20 7b 0a 20 20 6e 65 61 72 20 22 4e 4f 54 22  r {.  near "NOT"
d2c0: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 0a 7d  : syntax error.}
d2d0: 20 7b 0a 20 20 31 20 20 20 20 20 22 43 52 45 41   {.  1     "CREA
d2e0: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
d2f0: 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20  , NOT NULL(a))" 
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22 43 52    {}.  2     "CR
d320: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 20  EATE TABLE t4(a 
d330: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20  PRIMARY KEY, b, 
d340: 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20 20 20  NOT NULL(a))"   
d350: 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 20 22      {}.  3     "
d360: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
d370: 61 2c 20 62 2c 20 63 20 55 4e 49 51 55 45 2c 20  a, b, c UNIQUE, 
d380: 4e 4f 54 20 4e 55 4c 4c 28 61 2c 20 62 2c 20 63  NOT NULL(a, b, c
d390: 29 29 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56  ))"   {}.}..# EV
d3a0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 37  IDENCE-OF: R-317
d3b0: 39 35 2d 35 37 36 34 33 20 61 20 4e 4f 54 20 4e  95-57643 a NOT N
d3c0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  ULL constraint d
d3d0: 69 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65  ictates that the
d3e0: 0a 23 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f  .# associated co
d3f0: 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  lumn may not con
d400: 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75  tain a NULL valu
d410: 65 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  e. Attempting to
d420: 20 73 65 74 20 74 68 65 0a 23 20 63 6f 6c 75 6d   set the.# colum
d430: 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  n value to NULL 
d440: 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61  when inserting a
d450: 20 6e 65 77 20 72 6f 77 20 6f 72 20 75 70 64 61   new row or upda
d460: 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67  ting an existing
d470: 0a 23 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20  .# one causes a 
d480: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
d490: 74 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20 54 68  tion..#.#     Th
d4a0: 65 73 65 20 74 65 73 74 73 20 75 73 65 20 74 68  ese tests use th
d4b0: 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 64  e tables created
d4c0: 20 62 79 20 34 2e 31 33 2e 0a 23 0a 64 6f 5f 65   by 4.13..#.do_e
d4d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 34  xecsql_test 4.14
d4e0: 2e 30 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .0 {.  INSERT IN
d4f0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 78 27  TO t1 VALUES('x'
d500: 2c 20 27 79 27 29 3b 0a 20 20 49 4e 53 45 52 54  , 'y');.  INSERT
d510: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
d520: 27 7a 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49  'z', NULL);..  I
d530: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
d540: 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29 3b 0a  LUES('x', 'y');.
d550: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
d560: 20 56 41 4c 55 45 53 28 27 7a 27 2c 20 4e 55 4c   VALUES('z', NUL
d570: 4c 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  L);..  INSERT IN
d580: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 78 27  TO t3 VALUES('x'
d590: 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20 20 49  , 'y', 'z');.  I
d5a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
d5b0: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 7d  LUES(1, 2, 3);.}
d5c0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
d5d0: 74 65 73 74 73 20 34 2e 31 34 20 2d 65 72 72 6f  tests 4.14 -erro
d5e0: 72 20 7b 0a 20 20 25 73 20 6d 61 79 20 6e 6f 74  r {.  %s may not
d5f0: 20 62 65 20 4e 55 4c 4c 0a 7d 20 7b 0a 20 20 31   be NULL.} {.  1
d600: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
d610: 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t1 VALUES(NULL,
d620: 20 27 61 27 29 22 20 20 20 20 20 20 20 20 20 7b   'a')"         {
d630: 74 31 2e 61 7d 0a 20 20 32 20 20 20 20 22 49 4e  t1.a}.  2    "IN
d640: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
d650: 55 45 53 28 4e 55 4c 4c 2c 20 27 62 27 29 22 20  UES(NULL, 'b')" 
d660: 20 20 20 20 20 20 20 20 7b 74 32 2e 61 7d 0a 20          {t2.a}. 
d670: 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   3    "INSERT IN
d680: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 63 27  TO t3 VALUES('c'
d690: 2c 20 27 64 27 2c 20 4e 55 4c 4c 29 22 20 20 20  , 'd', NULL)"   
d6a0: 20 7b 74 33 2e 63 7d 0a 20 20 34 20 20 20 20 22   {t3.c}.  4    "
d6b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
d6c0: 41 4c 55 45 53 28 27 65 27 2c 20 4e 55 4c 4c 2c  ALUES('e', NULL,
d6d0: 20 27 66 27 29 22 20 20 20 20 7b 74 33 2e 62 7d   'f')"    {t3.b}
d6e0: 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20  .  5    "INSERT 
d6f0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e  INTO t3 VALUES(N
d700: 55 4c 4c 2c 20 27 67 27 2c 20 27 68 27 29 22 20  ULL, 'g', 'h')" 
d710: 20 20 20 7b 74 33 2e 61 7d 0a 7d 0a 0a 23 20 45     {t3.a}.}..# E
d720: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 32  VIDENCE-OF: R-42
d730: 35 31 31 2d 33 39 34 35 39 20 50 52 49 4d 41 52  511-39459 PRIMAR
d740: 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e  Y KEY, UNIQUE an
d750: 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 63 6f 6e  d NOT NULL.# con
d760: 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 20  straints may be 
d770: 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67  explicitly assig
d780: 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f  ned a default co
d790: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
d7a0: 6e 0a 23 20 61 6c 67 6f 72 69 74 68 6d 20 62 79  n.# algorithm by
d7b0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 20 63 6f 6e   including a con
d7c0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 69 6e 20  flict-clause in 
d7d0: 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e  their definition
d7e0: 73 2e 0a 23 0a 23 20 20 20 20 20 43 6f 6e 66 6c  s..#.#     Confl
d7f0: 69 63 74 20 63 6c 61 75 73 65 73 3a 20 41 42 4f  ict clauses: ABO
d800: 52 54 2c 20 52 4f 4c 4c 42 41 43 4b 2c 20 49 47  RT, ROLLBACK, IG
d810: 4e 4f 52 45 2c 20 46 41 49 4c 2c 20 52 45 50 4c  NORE, FAIL, REPL
d820: 41 43 45 0a 23 0a 23 20 20 20 20 20 54 65 73 74  ACE.#.#     Test
d830: 20 63 61 73 65 73 20 34 2e 31 35 2e 2a 2c 20 34   cases 4.15.*, 4
d840: 2e 31 36 2e 2a 20 61 6e 64 20 34 2e 31 37 2e 2a  .16.* and 4.17.*
d850: 20 66 6f 63 75 73 20 6f 6e 20 50 52 49 4d 41 52   focus on PRIMAR
d860: 59 20 4b 45 59 2c 20 4e 4f 54 20 4e 55 4c 4c 0a  Y KEY, NOT NULL.
d870: 23 20 20 20 20 20 61 6e 64 20 55 4e 49 51 55 45  #     and UNIQUE
d880: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 72 65   constraints, re
d890: 73 70 65 63 74 69 76 65 6c 79 2e 0a 23 0a 64 72  spectively..#.dr
d8a0: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
d8b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
d8c0: 31 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20  15.0 {.  CREATE 
d8d0: 54 41 42 4c 45 20 74 31 5f 61 62 28 61 20 50 52  TABLE t1_ab(a PR
d8e0: 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e  IMARY KEY ON CON
d8f0: 46 4c 49 43 54 20 41 42 4f 52 54 2c 20 62 29 3b  FLICT ABORT, b);
d900: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
d910: 74 31 5f 72 6f 28 61 20 50 52 49 4d 41 52 59 20  t1_ro(a PRIMARY 
d920: 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  KEY ON CONFLICT 
d930: 52 4f 4c 4c 42 41 43 4b 2c 20 62 29 3b 0a 20 20  ROLLBACK, b);.  
d940: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
d950: 69 67 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  ig(a PRIMARY KEY
d960: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e   ON CONFLICT IGN
d970: 4f 52 45 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  ORE, b);.  CREAT
d980: 45 20 54 41 42 4c 45 20 74 31 5f 66 61 28 61 20  E TABLE t1_fa(a 
d990: 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43  PRIMARY KEY ON C
d9a0: 4f 4e 46 4c 49 43 54 20 46 41 49 4c 2c 20 62 29  ONFLICT FAIL, b)
d9b0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
d9c0: 20 74 31 5f 72 65 28 61 20 50 52 49 4d 41 52 59   t1_re(a PRIMARY
d9d0: 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   KEY ON CONFLICT
d9e0: 20 52 45 50 4c 41 43 45 2c 20 62 29 3b 0a 20 20   REPLACE, b);.  
d9f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
da00: 78 78 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  xx(a PRIMARY KEY
da10: 2c 20 62 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  , b);..  INSERT 
da20: 49 4e 54 4f 20 74 31 5f 61 62 20 56 41 4c 55 45  INTO t1_ab VALUE
da30: 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49  S(1, 'one');.  I
da40: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 61 62  NSERT INTO t1_ab
da50: 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27   VALUES(2, 'two'
da60: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
da70: 20 74 31 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20   t1_ro SELECT * 
da80: 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49 4e  FROM t1_ab;.  IN
da90: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 69 67 20  SERT INTO t1_ig 
daa0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
dab0: 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  _ab;.  INSERT IN
dac0: 54 4f 20 74 31 5f 66 61 20 53 45 4c 45 43 54 20  TO t1_fa SELECT 
dad0: 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20  * FROM t1_ab;.  
dae0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 72  INSERT INTO t1_r
daf0: 65 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  e SELECT * FROM 
db00: 74 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20  t1_ab;.  INSERT 
db10: 49 4e 54 4f 20 74 31 5f 78 78 20 53 45 4c 45 43  INTO t1_xx SELEC
db20: 54 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a  T * FROM t1_ab;.
db30: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
db40: 74 32 5f 61 62 28 61 2c 20 62 20 4e 4f 54 20 4e  t2_ab(a, b NOT N
db50: 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ULL ON CONFLICT 
db60: 41 42 4f 52 54 29 3b 0a 20 20 43 52 45 41 54 45  ABORT);.  CREATE
db70: 20 54 41 42 4c 45 20 74 32 5f 72 6f 28 61 2c 20   TABLE t2_ro(a, 
db80: 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f  b NOT NULL ON CO
db90: 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b 29  NFLICT ROLLBACK)
dba0: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
dbb0: 20 74 32 5f 69 67 28 61 2c 20 62 20 4e 4f 54 20   t2_ig(a, b NOT 
dbc0: 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  NULL ON CONFLICT
dbd0: 20 49 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45 41   IGNORE);.  CREA
dbe0: 54 45 20 54 41 42 4c 45 20 74 32 5f 66 61 28 61  TE TABLE t2_fa(a
dbf0: 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20  , b NOT NULL ON 
dc00: 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 29 3b 0a  CONFLICT FAIL);.
dc10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
dc20: 32 5f 72 65 28 61 2c 20 62 20 4e 4f 54 20 4e 55  2_re(a, b NOT NU
dc30: 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  LL ON CONFLICT R
dc40: 45 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41 54  EPLACE);.  CREAT
dc50: 45 20 54 41 42 4c 45 20 74 32 5f 78 78 28 61 2c  E TABLE t2_xx(a,
dc60: 20 62 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 0a 20   b NOT NULL);.. 
dc70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f   INSERT INTO t2_
dc80: 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e  ab VALUES(1, 'on
dc90: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
dca0: 54 4f 20 74 32 5f 61 62 20 56 41 4c 55 45 53 28  TO t2_ab VALUES(
dcb0: 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53  2, 'two');.  INS
dcc0: 45 52 54 20 49 4e 54 4f 20 74 32 5f 72 6f 20 53  ERT INTO t2_ro S
dcd0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f  ELECT * FROM t2_
dce0: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
dcf0: 4f 20 74 32 5f 69 67 20 53 45 4c 45 43 54 20 2a  O t2_ig SELECT *
dd00: 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20 49   FROM t2_ab;.  I
dd10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 66 61  NSERT INTO t2_fa
dd20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
dd30: 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  2_ab;.  INSERT I
dd40: 4e 54 4f 20 74 32 5f 72 65 20 53 45 4c 45 43 54  NTO t2_re SELECT
dd50: 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20   * FROM t2_ab;. 
dd60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f   INSERT INTO t2_
dd70: 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  xx SELECT * FROM
dd80: 20 74 32 5f 61 62 3b 0a 0a 20 20 43 52 45 41 54   t2_ab;..  CREAT
dd90: 45 20 54 41 42 4c 45 20 74 33 5f 61 62 28 61 2c  E TABLE t3_ab(a,
dda0: 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62 29   b, UNIQUE(a, b)
ddb0: 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f   ON CONFLICT ABO
ddc0: 52 54 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  RT);.  CREATE TA
ddd0: 42 4c 45 20 74 33 5f 72 6f 28 61 2c 20 62 2c 20  BLE t3_ro(a, b, 
dde0: 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20  UNIQUE(a, b) ON 
ddf0: 43 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43  CONFLICT ROLLBAC
de00: 4b 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  K);.  CREATE TAB
de10: 4c 45 20 74 33 5f 69 67 28 61 2c 20 62 2c 20 55  LE t3_ig(a, b, U
de20: 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43  NIQUE(a, b) ON C
de30: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 29 3b  ONFLICT IGNORE);
de40: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
de50: 74 33 5f 66 61 28 61 2c 20 62 2c 20 55 4e 49 51  t3_fa(a, b, UNIQ
de60: 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46  UE(a, b) ON CONF
de70: 4c 49 43 54 20 46 41 49 4c 29 3b 0a 20 20 43 52  LICT FAIL);.  CR
de80: 45 41 54 45 20 54 41 42 4c 45 20 74 33 5f 72 65  EATE TABLE t3_re
de90: 28 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c  (a, b, UNIQUE(a,
dea0: 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   b) ON CONFLICT 
deb0: 52 45 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41  REPLACE);.  CREA
dec0: 54 45 20 54 41 42 4c 45 20 74 33 5f 78 78 28 61  TE TABLE t3_xx(a
ded0: 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62  , b, UNIQUE(a, b
dee0: 29 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ));..  INSERT IN
def0: 54 4f 20 74 33 5f 61 62 20 56 41 4c 55 45 53 28  TO t3_ab VALUES(
df00: 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53  1, 'one');.  INS
df10: 45 52 54 20 49 4e 54 4f 20 74 33 5f 61 62 20 56  ERT INTO t3_ab V
df20: 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b  ALUES(2, 'two');
df30: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
df40: 33 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20 46 52  3_ro SELECT * FR
df50: 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53 45  OM t3_ab;.  INSE
df60: 52 54 20 49 4e 54 4f 20 74 33 5f 69 67 20 53 45  RT INTO t3_ig SE
df70: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f 61  LECT * FROM t3_a
df80: 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  b;.  INSERT INTO
df90: 20 74 33 5f 66 61 20 53 45 4c 45 43 54 20 2a 20   t3_fa SELECT * 
dfa0: 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e  FROM t3_ab;.  IN
dfb0: 53 45 52 54 20 49 4e 54 4f 20 74 33 5f 72 65 20  SERT INTO t3_re 
dfc0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
dfd0: 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  _ab;.  INSERT IN
dfe0: 54 4f 20 74 33 5f 78 78 20 53 45 4c 45 43 54 20  TO t3_xx SELECT 
dff0: 2a 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 7d 0a  * FROM t3_ab;.}.
e000: 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c  .foreach {tn tbl
e010: 20 72 65 73 20 61 63 20 64 61 74 61 7d 20 7b 0a   res ac data} {.
e020: 20 20 31 20 20 20 74 31 5f 61 62 20 20 20 20 7b    1   t1_ab    {
e030: 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e  1 {column a is n
e040: 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31  ot unique}} 0 {1
e050: 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72   one 2 two 3 thr
e060: 65 65 7d 0a 20 20 32 20 20 20 74 31 5f 72 6f 20  ee}.  2   t1_ro 
e070: 20 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61 20     {1 {column a 
e080: 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20  is not unique}} 
e090: 31 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a  1 {1 one 2 two}.
e0a0: 20 20 33 20 20 20 74 31 5f 66 61 20 20 20 20 7b    3   t1_fa    {
e0b0: 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e  1 {column a is n
e0c0: 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31  ot unique}} 0 {1
e0d0: 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72   one 2 two 3 thr
e0e0: 65 65 20 34 20 73 74 72 69 6e 67 7d 0a 20 20 34  ee 4 string}.  4
e0f0: 20 20 20 74 31 5f 69 67 20 20 20 20 7b 30 20 7b     t1_ig    {0 {
e100: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e110: 6f 20 33 20 74 68 72 65 65 20 34 20 73 74 72 69  o 3 three 4 stri
e120: 6e 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20 35  ng 6 string}.  5
e130: 20 20 20 74 31 5f 72 65 20 20 20 20 7b 30 20 7b     t1_re    {0 {
e140: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e150: 6f 20 34 20 73 74 72 69 6e 67 20 33 20 73 74 72  o 4 string 3 str
e160: 69 6e 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20  ing 6 string}.  
e170: 36 20 20 20 74 31 5f 78 78 20 20 20 20 7b 31 20  6   t1_xx    {1 
e180: 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74  {column a is not
e190: 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f   unique}} 0 {1 o
e1a0: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
e1b0: 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  }.} {.  catchsql
e1c0: 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78 65   COMMIT.  do_exe
e1d0: 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 35 2e  csql_test  4.15.
e1e0: 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49 4e  $tn.1 "BEGIN; IN
e1f0: 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 56  SERT INTO $tbl V
e200: 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65 27  ALUES(3, 'three'
e210: 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73 71  )"..  do_catchsq
e220: 6c 5f 74 65 73 74 20 34 2e 31 35 2e 24 74 6e 2e  l_test 4.15.$tn.
e230: 32 20 22 20 0a 20 20 20 20 49 4e 53 45 52 54 20  2 " .    INSERT 
e240: 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45 43 54  INTO $tbl SELECT
e250: 20 28 28 61 25 32 29 2a 61 2b 33 29 2c 20 27 73   ((a%2)*a+3), 's
e260: 74 72 69 6e 67 27 20 46 52 4f 4d 20 24 74 62 6c  tring' FROM $tbl
e270: 3b 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f  ;.  " $res..  do
e280: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
e290: 62 6c 65 2d 34 2e 31 35 2e 24 74 6e 2e 33 20 7b  ble-4.15.$tn.3 {
e2a0: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
e2b0: 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63  ocommit db } $ac
e2c0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
e2d0: 73 74 20 34 2e 31 35 2e 24 74 6e 2e 34 20 22 53  st 4.15.$tn.4 "S
e2e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62  ELECT * FROM $tb
e2f0: 6c 22 20 24 64 61 74 61 0a 7d 0a 66 6f 72 65 61  l" $data.}.forea
e300: 63 68 20 7b 74 6e 20 74 62 6c 20 72 65 73 20 61  ch {tn tbl res a
e310: 63 20 64 61 74 61 7d 20 7b 0a 20 20 31 20 20 20  c data} {.  1   
e320: 74 32 5f 61 62 20 20 20 20 7b 31 20 7b 74 32 5f  t2_ab    {1 {t2_
e330: 61 62 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65 20  ab.b may not be 
e340: 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65 20  NULL}} 0 {1 one 
e350: 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20  2 two 3 three}. 
e360: 20 32 20 20 20 74 32 5f 72 6f 20 20 20 20 7b 31   2   t2_ro    {1
e370: 20 7b 74 32 5f 72 6f 2e 62 20 6d 61 79 20 6e 6f   {t2_ro.b may no
e380: 74 20 62 65 20 4e 55 4c 4c 7d 7d 20 31 20 7b 31  t be NULL}} 1 {1
e390: 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20   one 2 two}.  3 
e3a0: 20 20 74 32 5f 66 61 20 20 20 20 7b 31 20 7b 74    t2_fa    {1 {t
e3b0: 32 5f 66 61 2e 62 20 6d 61 79 20 6e 6f 74 20 62  2_fa.b may not b
e3c0: 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e  e NULL}} 0 {1 on
e3d0: 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 20  e 2 two 3 three 
e3e0: 34 20 78 78 7d 0a 20 20 34 20 20 20 74 32 5f 69  4 xx}.  4   t2_i
e3f0: 67 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20 7b 31  g    {0 {}} 0 {1
e400: 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72   one 2 two 3 thr
e410: 65 65 20 34 20 78 78 20 36 20 78 78 7d 0a 20 20  ee 4 xx 6 xx}.  
e420: 35 20 20 20 74 32 5f 72 65 20 20 20 20 7b 31 20  5   t2_re    {1 
e430: 7b 74 32 5f 72 65 2e 62 20 6d 61 79 20 6e 6f 74  {t2_re.b may not
e440: 20 62 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20   be NULL}} 0 {1 
e450: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e460: 65 7d 0a 20 20 36 20 20 20 74 32 5f 78 78 20 20  e}.  6   t2_xx  
e470: 20 20 7b 31 20 7b 74 32 5f 78 78 2e 62 20 6d 61    {1 {t2_xx.b ma
e480: 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 20  y not be NULL}} 
e490: 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33  0 {1 one 2 two 3
e4a0: 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61   three}.} {.  ca
e4b0: 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20  tchsql COMMIT.  
e4c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
e4d0: 20 34 2e 31 36 2e 24 74 6e 2e 31 20 22 42 45 47   4.16.$tn.1 "BEG
e4e0: 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  IN; INSERT INTO 
e4f0: 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c 20 27  $tbl VALUES(3, '
e500: 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63  three')"..  do_c
e510: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31  atchsql_test 4.1
e520: 36 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20 20 49  6.$tn.2 " .    I
e530: 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20  NSERT INTO $tbl 
e540: 53 45 4c 45 43 54 20 61 2b 33 2c 20 43 41 53 45  SELECT a+3, CASE
e550: 20 61 20 57 48 45 4e 20 32 20 54 48 45 4e 20 4e   a WHEN 2 THEN N
e560: 55 4c 4c 20 45 4c 53 45 20 27 78 78 27 20 45 4e  ULL ELSE 'xx' EN
e570: 44 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22 20  D FROM $tbl.  " 
e580: 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74 20  $res..  do_test 
e590: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e  e_createtable-4.
e5a0: 31 36 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69 74  16.$tn.3 { sqlit
e5b0: 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
e5c0: 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64 6f 5f  t db } $ac.  do_
e5d0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
e5e0: 36 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43 54 20  6.$tn.4 "SELECT 
e5f0: 2a 20 46 52 4f 4d 20 24 74 62 6c 22 20 24 64 61  * FROM $tbl" $da
e600: 74 61 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e  ta.}.foreach {tn
e610: 20 74 62 6c 20 72 65 73 20 61 63 20 64 61 74 61   tbl res ac data
e620: 7d 20 7b 0a 20 20 31 20 20 20 74 33 5f 61 62 20  } {.  1   t3_ab 
e630: 20 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20 61     {1 {columns a
e640: 2c 20 62 20 61 72 65 20 6e 6f 74 20 75 6e 69 71  , b are not uniq
e650: 75 65 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20  ue}} 0 {1 one 2 
e660: 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32  two 3 three}.  2
e670: 20 20 20 74 33 5f 72 6f 20 20 20 20 7b 31 20 7b     t3_ro    {1 {
e680: 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65  columns a, b are
e690: 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31 20   not unique}} 1 
e6a0: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20  {1 one 2 two}.  
e6b0: 33 20 20 20 74 33 5f 66 61 20 20 20 20 7b 31 20  3   t3_fa    {1 
e6c0: 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72  {columns a, b ar
e6d0: 65 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30  e not unique}} 0
e6e0: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20   {1 one 2 two 3 
e6f0: 74 68 72 65 65 20 34 20 74 68 72 65 65 7d 0a 20  three 4 three}. 
e700: 20 34 20 20 20 74 33 5f 69 67 20 20 20 20 7b 30   4   t3_ig    {0
e710: 20 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20   {}} 0 {1 one 2 
e720: 74 77 6f 20 33 20 74 68 72 65 65 20 34 20 74 68  two 3 three 4 th
e730: 72 65 65 20 36 20 74 68 72 65 65 7d 0a 20 20 35  ree 6 three}.  5
e740: 20 20 20 74 33 5f 72 65 20 20 20 20 7b 30 20 7b     t3_re    {0 {
e750: 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77  }} 0 {1 one 2 tw
e760: 6f 20 34 20 74 68 72 65 65 20 33 20 74 68 72 65  o 4 three 3 thre
e770: 65 20 36 20 74 68 72 65 65 7d 0a 20 20 36 20 20  e 6 three}.  6  
e780: 20 74 33 5f 78 78 20 20 20 20 7b 31 20 7b 63 6f   t3_xx    {1 {co
e790: 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20 6e  lumns a, b are n
e7a0: 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31  ot unique}} 0 {1
e7b0: 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72   one 2 two 3 thr
e7c0: 65 65 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73  ee}.} {.  catchs
e7d0: 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65  ql COMMIT.  do_e
e7e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31  xecsql_test  4.1
e7f0: 37 2e 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20  7.$tn.1 "BEGIN; 
e800: 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c  INSERT INTO $tbl
e810: 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65   VALUES(3, 'thre
e820: 65 27 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68  e')"..  do_catch
e830: 73 71 6c 5f 74 65 73 74 20 34 2e 31 37 2e 24 74  sql_test 4.17.$t
e840: 6e 2e 32 20 22 20 0a 20 20 20 20 49 4e 53 45 52  n.2 " .    INSER
e850: 54 20 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45  T INTO $tbl SELE
e860: 43 54 20 28 28 61 25 32 29 2a 61 2b 33 29 2c 20  CT ((a%2)*a+3), 
e870: 27 74 68 72 65 65 27 20 46 52 4f 4d 20 24 74 62  'three' FROM $tb
e880: 6c 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f  l.  " $res..  do
e890: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
e8a0: 62 6c 65 2d 34 2e 31 37 2e 24 74 6e 2e 33 20 7b  ble-4.17.$tn.3 {
e8b0: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
e8c0: 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63  ocommit db } $ac
e8d0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
e8e0: 73 74 20 34 2e 31 37 2e 24 74 6e 2e 34 20 22 53  st 4.17.$tn.4 "S
e8f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62  ELECT * FROM $tb
e900: 6c 22 20 24 64 61 74 61 0a 7d 0a 63 61 74 63 68  l" $data.}.catch
e910: 73 71 6c 20 43 4f 4d 4d 49 54 0a 0a 23 20 45 56  sql COMMIT..# EV
e920: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 36  IDENCE-OF: R-126
e930: 34 35 2d 33 39 37 37 32 20 4f 72 2c 20 69 66 20  45-39772 Or, if 
e940: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66  a constraint def
e950: 69 6e 69 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  inition does not
e960: 0a 23 20 69 6e 63 6c 75 64 65 20 61 20 63 6f 6e  .# include a con
e970: 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 6f 72 20  flict-clause or 
e980: 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f  it is a CHECK co
e990: 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65  nstraint, the de
e9a0: 66 61 75 6c 74 0a 23 20 63 6f 6e 66 6c 69 63 74  fault.# conflict
e9b0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
e9c0: 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 0a  rithm is ABORT..
e9d0: 23 0a 23 20 20 20 20 20 54 68 65 20 66 69 72 73  #.#     The firs
e9e0: 74 20 68 61 6c 66 20 6f 66 20 74 68 65 20 61 62  t half of the ab
e9f0: 6f 76 65 20 69 73 20 74 65 73 74 65 64 20 61 6c  ove is tested al
ea00: 6f 6e 67 20 77 69 74 68 20 65 78 70 6c 69 63 69  ong with explici
ea10: 74 20 4f 4e 20 0a 23 20 20 20 20 20 43 4f 4e 46  t ON .#     CONF
ea20: 4c 49 43 54 20 63 6c 61 75 73 65 73 20 61 62 6f  LICT clauses abo
ea30: 76 65 20 28 73 70 65 63 69 66 69 63 61 6c 6c 79  ve (specifically
ea40: 2c 20 74 68 65 20 74 65 73 74 73 20 69 6e 76 6f  , the tests invo
ea50: 6c 76 69 6e 67 20 74 31 5f 78 78 2c 20 74 32 5f  lving t1_xx, t2_
ea60: 78 78 0a 23 20 20 20 20 20 61 6e 64 20 74 33 5f  xx.#     and t3_
ea70: 78 78 29 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  xx). The followi
ea80: 6e 67 20 6a 75 73 74 20 74 65 73 74 73 20 74 68  ng just tests th
ea90: 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  at the default c
eaa0: 6f 6e 66 6c 69 63 74 0a 23 20 20 20 20 20 68 61  onflict.#     ha
eab0: 6e 64 6c 69 6e 67 20 66 6f 72 20 43 48 45 43 4b  ndling for CHECK
eac0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 73 20   constraints is 
ead0: 41 42 4f 52 54 2e 0a 23 0a 64 6f 5f 65 78 65 63  ABORT..#.do_exec
eae0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 31 20  sql_test 4.18.1 
eaf0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
eb00: 20 74 34 28 61 2c 20 62 20 43 48 45 43 4b 20 28   t4(a, b CHECK (
eb10: 62 21 3d 31 30 29 29 3b 0a 20 20 49 4e 53 45 52  b!=10));.  INSER
eb20: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
eb30: 28 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54  (1, 2);.  INSERT
eb40: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
eb50: 33 2c 20 34 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63  3, 4);.}.do_exec
eb60: 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 38 2e 32  sql_test  4.18.2
eb70: 20 7b 20 42 45 47 49 4e 3b 20 49 4e 53 45 52 54   { BEGIN; INSERT
eb80: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
eb90: 35 2c 20 36 29 20 7d 0a 64 6f 5f 63 61 74 63 68  5, 6) }.do_catch
eba0: 73 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 33 20  sql_test 4.18.3 
ebb0: 7b 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  { .  INSERT INTO
ebc0: 20 74 34 20 53 45 4c 45 43 54 20 61 2b 34 2c 20   t4 SELECT a+4, 
ebd0: 62 2b 34 20 46 52 4f 4d 20 74 34 0a 7d 20 7b 31  b+4 FROM t4.} {1
ebe0: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
ebf0: 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 65 5f  led}}.do_test e_
ec00: 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e 31 38  createtable-4.18
ec10: 2e 34 20 7b 20 73 71 6c 69 74 65 33 5f 67 65 74  .4 { sqlite3_get
ec20: 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d  _autocommit db }
ec30: 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65   0.do_execsql_te
ec40: 73 74 20 34 2e 31 38 2e 35 20 7b 20 53 45 4c 45  st 4.18.5 { SELE
ec50: 43 54 20 2a 20 46 52 4f 4d 20 74 34 20 7d 20 7b  CT * FROM t4 } {
ec60: 31 20 32 20 33 20 34 20 35 20 36 7d 0a 0a 23 20  1 2 3 4 5 6}..# 
ec70: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
ec80: 39 31 31 34 2d 35 36 31 31 33 20 44 69 66 66 65  9114-56113 Diffe
ec90: 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  rent constraints
eca0: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
ecb0: 20 74 61 62 6c 65 0a 23 20 6d 61 79 20 68 61 76   table.# may hav
ecc0: 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61  e different defa
ecd0: 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ult conflict res
ece0: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
ecf0: 6d 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ms..#.do_execsql
ed00: 5f 74 65 73 74 20 34 2e 31 39 2e 30 20 7b 0a 20  _test 4.19.0 {. 
ed10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
ed20: 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43  (a NOT NULL ON C
ed30: 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 20  ONFLICT IGNORE, 
ed40: 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f  b NOT NULL ON CO
ed50: 4e 46 4c 49 43 54 20 41 42 4f 52 54 29 3b 0a 7d  NFLICT ABORT);.}
ed60: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
ed70: 74 20 34 2e 31 39 2e 31 20 7b 20 49 4e 53 45 52  t 4.19.1 { INSER
ed80: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
ed90: 28 4e 55 4c 4c 2c 20 27 6e 6f 74 20 6e 75 6c 6c  (NULL, 'not null
eda0: 27 29 20 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 65  ') } {0 {}}.do_e
edb0: 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31  xecsql_test  4.1
edc0: 39 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  9.2 { SELECT * F
edd0: 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 64 6f 5f 63  ROM t5 } {}.do_c
ede0: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31  atchsql_test 4.1
edf0: 39 2e 33 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  9.3 { INSERT INT
ee00: 4f 20 74 35 20 56 41 4c 55 45 53 28 27 6e 6f 74  O t5 VALUES('not
ee10: 20 6e 75 6c 6c 27 2c 20 4e 55 4c 4c 29 20 7d 20   null', NULL) } 
ee20: 5c 0a 20 20 7b 31 20 7b 74 35 2e 62 20 6d 61 79  \.  {1 {t5.b may
ee30: 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a 64   not be NULL}}.d
ee40: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
ee50: 34 2e 31 39 2e 34 20 7b 20 53 45 4c 45 43 54 20  4.19.4 { SELECT 
ee60: 2a 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 0a  * FROM t5 } {}..
ee70: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
ee80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ee90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eeb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
eec0: 73 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52  s for INTEGER PR
eed0: 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 72 6f  IMARY KEY and ro
eee0: 77 69 64 20 72 65 6c 61 74 65 64 20 73 74 61 74  wid related stat
eef0: 65 6d 65 6e 74 73 2e 0a 23 0a 0a 23 20 45 56 49  ements..#..# EVI
ef00: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 38  DENCE-OF: R-5258
ef10: 34 2d 30 34 30 30 39 20 54 68 65 20 72 6f 77 69  4-04009 The rowi
ef20: 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61  d value can be a
ef30: 63 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e  ccessed using on
ef40: 65 0a 23 20 6f 66 20 74 68 65 20 73 70 65 63 69  e.# of the speci
ef50: 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al case-independ
ef60: 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64  ent names "rowid
ef70: 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72  ", "oid", or "_r
ef80: 6f 77 69 64 5f 22 20 69 6e 0a 23 20 70 6c 61 63  owid_" in.# plac
ef90: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  e of a column na
efa0: 6d 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  me..#.drop_all_t
efb0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
efc0: 5f 74 65 73 74 20 35 2e 31 2e 30 20 7b 0a 20 20  _test 5.1.0 {.  
efd0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
efe0: 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  x, y);.  INSERT 
eff0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
f000: 6f 6e 65 27 2c 20 27 66 69 72 73 74 27 29 3b 0a  one', 'first');.
f010: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
f020: 20 56 41 4c 55 45 53 28 27 74 77 6f 27 2c 20 27   VALUES('two', '
f030: 73 65 63 6f 6e 64 27 29 3b 0a 20 20 49 4e 53 45  second');.  INSE
f040: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
f050: 53 28 27 74 68 72 65 65 27 2c 20 27 74 68 69 72  S('three', 'thir
f060: 64 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  d');.}.do_create
f070: 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 31 20  table_tests 5.1 
f080: 7b 0a 20 20 31 20 20 20 22 53 45 4c 45 43 54 20  {.  1   "SELECT 
f090: 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 22 20 20  rowid FROM t1"  
f0a0: 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20 20        {1 2 3}.  
f0b0: 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64 20  2   "SELECT oid 
f0c0: 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20  FROM t1"        
f0d0: 20 20 7b 31 20 32 20 33 7d 0a 20 20 33 20 20 20    {1 2 3}.  3   
f0e0: 22 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f 20  "SELECT _rowid_ 
f0f0: 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b 31  FROM t1"      {1
f100: 20 32 20 33 7d 0a 20 20 34 20 20 20 22 53 45 4c   2 3}.  4   "SEL
f110: 45 43 54 20 52 4f 57 49 44 20 46 52 4f 4d 20 74  ECT ROWID FROM t
f120: 31 22 20 20 20 20 20 20 20 20 7b 31 20 32 20 33  1"        {1 2 3
f130: 7d 0a 20 20 35 20 20 20 22 53 45 4c 45 43 54 20  }.  5   "SELECT 
f140: 4f 49 44 20 46 52 4f 4d 20 74 31 22 20 20 20 20  OID FROM t1"    
f150: 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20 20        {1 2 3}.  
f160: 36 20 20 20 22 53 45 4c 45 43 54 20 5f 52 4f 57  6   "SELECT _ROW
f170: 49 44 5f 20 46 52 4f 4d 20 74 31 22 20 20 20 20  ID_ FROM t1"    
f180: 20 20 7b 31 20 32 20 33 7d 0a 20 20 37 20 20 20    {1 2 3}.  7   
f190: 22 53 45 4c 45 43 54 20 52 6f 57 69 44 20 46 52  "SELECT RoWiD FR
f1a0: 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 7b 31  OM t1"        {1
f1b0: 20 32 20 33 7d 0a 20 20 38 20 20 20 22 53 45 4c   2 3}.  8   "SEL
f1c0: 45 43 54 20 4f 69 44 20 46 52 4f 4d 20 74 31 22  ECT OiD FROM t1"
f1d0: 20 20 20 20 20 20 20 20 20 20 7b 31 20 32 20 33            {1 2 3
f1e0: 7d 0a 20 20 39 20 20 20 22 53 45 4c 45 43 54 20  }.  9   "SELECT 
f1f0: 5f 52 6f 57 69 44 5f 20 46 52 4f 4d 20 74 31 22  _RoWiD_ FROM t1"
f200: 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 7d 0a        {1 2 3}.}.
f210: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
f220: 52 2d 32 36 35 30 31 2d 31 37 33 30 36 20 49 66  R-26501-17306 If
f230: 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
f240: 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64  s a user defined
f250: 20 63 6f 6c 75 6d 6e 0a 23 20 6e 61 6d 65 64 20   column.# named 
f260: 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f  "rowid", "oid" o
f270: 72 20 22 5f 72 6f 77 69 64 5f 22 2c 20 74 68 65  r "_rowid_", the
f280: 6e 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61  n that name alwa
f290: 79 73 20 72 65 66 65 72 73 20 74 68 65 0a 23 20  ys refers the.# 
f2a0: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
f2b0: 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63  red column and c
f2c0: 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f  annot be used to
f2d0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69 6e   retrieve the in
f2e0: 74 65 67 65 72 0a 23 20 72 6f 77 69 64 20 76 61  teger.# rowid va
f2f0: 6c 75 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  lue..#.do_execsq
f300: 6c 5f 74 65 73 74 20 35 2e 32 2e 30 20 7b 0a 20  l_test 5.2.0 {. 
f310: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
f320: 28 6f 69 64 2c 20 62 29 3b 0a 20 20 43 52 45 41  (oid, b);.  CREA
f330: 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 5f  TE TABLE t3(a, _
f340: 72 6f 77 69 64 5f 29 3b 0a 20 20 43 52 45 41 54  rowid_);.  CREAT
f350: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
f360: 20 72 6f 77 69 64 29 3b 0a 0a 20 20 49 4e 53 45   rowid);..  INSE
f370: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
f380: 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 29 3b  S('one', 'two');
f390: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
f3a0: 32 20 56 41 4c 55 45 53 28 27 74 68 72 65 65 27  2 VALUES('three'
f3b0: 2c 20 27 66 6f 75 72 27 29 3b 0a 0a 20 20 49 4e  , 'four');..  IN
f3c0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
f3d0: 55 45 53 28 27 66 69 76 65 27 2c 20 27 73 69 78  UES('five', 'six
f3e0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
f3f0: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 73 65 76  O t3 VALUES('sev
f400: 65 6e 27 2c 20 27 65 69 67 68 74 27 29 3b 0a 0a  en', 'eight');..
f410: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
f420: 20 56 41 4c 55 45 53 28 27 6e 69 6e 65 27 2c 20   VALUES('nine', 
f430: 27 74 65 6e 27 2c 20 27 65 6c 65 76 65 6e 27 29  'ten', 'eleven')
f440: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
f450: 74 34 20 56 41 4c 55 45 53 28 27 74 77 65 6c 76  t4 VALUES('twelv
f460: 65 27 2c 20 27 74 68 69 72 74 65 65 6e 27 2c 20  e', 'thirteen', 
f470: 27 66 6f 75 72 74 65 65 6e 27 29 3b 0a 7d 0a 64  'fourteen');.}.d
f480: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
f490: 73 74 73 20 35 2e 32 20 7b 0a 20 20 31 20 20 20  sts 5.2 {.  1   
f4a0: 22 53 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77  "SELECT oid, row
f4b0: 69 64 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d  id, _rowid_ FROM
f4c0: 20 74 32 22 20 20 20 7b 6f 6e 65 20 31 20 31 20   t2"   {one 1 1 
f4d0: 20 20 20 20 20 74 68 72 65 65 20 32 20 32 7d 0a       three 2 2}.
f4e0: 20 20 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69    2   "SELECT oi
f4f0: 64 2c 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64  d, rowid, _rowid
f500: 5f 20 46 52 4f 4d 20 74 33 22 20 20 20 7b 31 20  _ FROM t3"   {1 
f510: 31 20 73 69 78 20 20 20 20 20 20 32 20 32 20 65  1 six      2 2 e
f520: 69 67 68 74 7d 20 0a 20 20 33 20 20 20 22 53 45  ight} .  3   "SE
f530: 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c  LECT oid, rowid,
f540: 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 34   _rowid_ FROM t4
f550: 22 20 20 20 7b 31 20 65 6c 65 76 65 6e 20 31 20  "   {1 eleven 1 
f560: 20 20 32 20 66 6f 75 72 74 65 65 6e 20 32 7d 0a    2 fourteen 2}.
f570: 7d 0a 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20 24  }...# Argument $
f580: 74 62 6c 20 69 73 20 74 68 65 20 6e 61 6d 65 20  tbl is the name 
f590: 6f 66 20 61 20 74 61 62 6c 65 20 69 6e 20 74 68  of a table in th
f5a0: 65 20 64 61 74 61 62 61 73 65 2e 20 41 72 67 75  e database. Argu
f5b0: 6d 65 6e 74 20 24 63 6f 6c 20 69 73 0a 23 20 74  ment $col is.# t
f5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 6f 6e 65 20 6f  he name of one o
f5d0: 66 20 74 68 65 20 74 61 62 6c 65 73 20 63 6f 6c  f the tables col
f5e0: 75 6d 6e 73 2e 20 52 65 74 75 72 6e 20 31 20 69  umns. Return 1 i
f5f0: 66 20 24 63 6f 6c 20 69 73 20 61 6e 20 61 6c 69  f $col is an ali
f600: 61 73 20 66 6f 72 0a 23 20 74 68 65 20 72 6f 77  as for.# the row
f610: 69 64 2c 20 6f 72 20 30 20 6f 74 68 65 72 77 69  id, or 0 otherwi
f620: 73 65 2e 0a 23 0a 70 72 6f 63 20 69 73 5f 69 6e  se..#.proc is_in
f630: 74 65 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65  teger_primary_ke
f640: 79 20 7b 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20 20  y {tbl col} {.  
f650: 6c 69 6e 64 65 78 20 5b 64 62 20 65 76 61 6c 20  lindex [db eval 
f660: 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 44 45 4c  [subst {.    DEL
f670: 45 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20  ETE FROM $tbl;. 
f680: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24     INSERT INTO $
f690: 74 62 6c 20 28 24 63 6f 6c 29 20 56 41 4c 55 45  tbl ($col) VALUE
f6a0: 53 28 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  S(0);.    SELECT
f6b0: 20 28 72 6f 77 69 64 3d 3d 24 63 6f 6c 29 20 46   (rowid==$col) F
f6c0: 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 20 20 44 45  ROM $tbl;.    DE
f6d0: 4c 45 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a  LETE FROM $tbl;.
f6e0: 20 20 7d 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56 49    }]] 0.}..# EVI
f6f0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 33 37 33  DENCE-OF: R-5373
f700: 38 2d 33 31 36 37 33 20 57 69 74 68 20 6f 6e 65  8-31673 With one
f710: 20 65 78 63 65 70 74 69 6f 6e 2c 20 69 66 20 61   exception, if a
f720: 20 74 61 62 6c 65 20 68 61 73 20 61 0a 23 20 70   table has a.# p
f730: 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20  rimary key that 
f740: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69  consists of a si
f750: 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64  ngle column, and
f760: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
f770: 70 65 20 6f 66 0a 23 20 74 68 61 74 20 63 6f 6c  pe of.# that col
f780: 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22  umn is "INTEGER"
f790: 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20   in any mixture 
f7a0: 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77  of upper and low
f7b0: 65 72 20 63 61 73 65 2c 20 74 68 65 6e 0a 23 20  er case, then.# 
f7c0: 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d  the column becom
f7d0: 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
f7e0: 74 68 65 20 72 6f 77 69 64 2e 0a 23 0a 23 20 45  the rowid..#.# E
f7f0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
f800: 39 35 31 2d 30 38 33 34 37 20 69 66 20 74 68 65  951-08347 if the
f810: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20   declaration of 
f820: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 23 20  a column with.# 
f830: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49  declared type "I
f840: 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73  NTEGER" includes
f850: 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59   an "PRIMARY KEY
f860: 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69   DESC" clause, i
f870: 74 20 64 6f 65 73 0a 23 20 6e 6f 74 20 62 65 63  t does.# not bec
f880: 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ome an alias for
f890: 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69   the rowid and i
f8a0: 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64  s not classified
f8b0: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 23   as an integer.#
f8c0: 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a   primary key..#.
f8d0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
f8e0: 65 73 74 73 20 35 2e 33 20 2d 74 63 6c 71 75 65  ests 5.3 -tclque
f8f0: 72 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67  ry { .  is_integ
f900: 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74  er_primary_key t
f910: 35 20 70 6b 0a 7d 20 2d 72 65 70 61 69 72 20 7b  5 pk.} -repair {
f920: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52  .  catchsql { DR
f930: 4f 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20  OP TABLE t5 }.} 
f940: 7b 0a 20 20 31 20 20 20 22 43 52 45 41 54 45 20  {.  1   "CREATE 
f950: 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65  TABLE t5(pk inte
f960: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29  ger primary key)
f970: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
f980: 20 20 20 20 20 20 20 20 20 20 31 0a 20 20 32 20            1.  2 
f990: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
f9a0: 74 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20 70  t5(pk integer, p
f9b0: 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22  rimary key(pk))"
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 20 20 20 20 31 0a 20 20 33 20 20 20 22 43 52 45      1.  3   "CRE
f9e0: 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20  ATE TABLE t5(pk 
f9f0: 69 6e 74 65 67 65 72 2c 20 76 20 69 6e 74 65 67  integer, v integ
fa00: 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  er, primary key(
fa10: 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 31 0a  pk))"         1.
fa20: 20 20 34 20 20 20 22 43 52 45 41 54 45 20 54 41    4   "CREATE TA
fa30: 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67 65  BLE t5(pk intege
fa40: 72 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72  r, v integer, pr
fa50: 69 6d 61 72 79 20 6b 65 79 28 70 6b 2c 20 76 29  imary key(pk, v)
fa60: 29 22 20 20 20 20 20 20 30 0a 20 20 35 20 20 20  )"      0.  5   
fa70: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  "CREATE TABLE t5
fa80: 28 70 6b 20 69 6e 74 2c 20 76 20 69 6e 74 65 67  (pk int, v integ
fa90: 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  er, primary key(
faa0: 70 6b 2c 20 76 29 29 22 20 20 20 20 20 20 20 20  pk, v))"        
fab0: 20 20 30 0a 20 20 36 20 20 20 22 43 52 45 41 54    0.  6   "CREAT
fac0: 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e  E TABLE t5(pk in
fad0: 74 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72  t, v integer, pr
fae0: 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20  imary key(pk))" 
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20              0.  
fb00: 37 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  7   "CREATE TABL
fb10: 45 20 74 35 28 70 6b 20 69 6e 74 20 70 72 69 6d  E t5(pk int prim
fb20: 61 72 79 20 6b 65 79 2c 20 76 20 69 6e 74 65 67  ary key, v integ
fb30: 65 72 29 22 20 20 20 20 20 20 20 20 20 20 20 20  er)"            
fb40: 20 20 20 20 20 20 30 0a 20 20 38 20 20 20 22 43        0.  8   "C
fb50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70  REATE TABLE t5(p
fb60: 6b 20 69 6e 54 45 67 65 72 20 70 72 69 6d 61 72  k inTEger primar
fb70: 79 20 6b 65 79 29 22 20 20 20 20 20 20 20 20 20  y key)"         
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb90: 31 0a 20 20 39 20 20 20 22 43 52 45 41 54 45 20  1.  9   "CREATE 
fba0: 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65  TABLE t5(pk inte
fbb0: 47 45 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79  GEr, primary key
fbc0: 28 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 20  (pk))"          
fbd0: 20 20 20 20 20 20 20 20 20 20 31 0a 20 20 31 30            1.  10
fbe0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
fbf0: 74 35 28 70 6b 20 49 4e 54 45 47 45 52 2c 20 76  t5(pk INTEGER, v
fc00: 20 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61 72   integer, primar
fc10: 79 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20 20  y key(pk))"     
fc20: 20 20 20 20 31 0a 7d 0a 0a 23 20 45 56 49 44 45      1.}..# EVIDE
fc30: 4e 43 45 2d 4f 46 3a 20 52 2d 34 31 34 34 34 2d  NCE-OF: R-41444-
fc40: 34 39 36 36 35 20 4f 74 68 65 72 20 69 6e 74 65  49665 Other inte
fc50: 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c  ger type names l
fc60: 69 6b 65 20 22 49 4e 54 22 20 6f 72 0a 23 20 22  ike "INT" or.# "
fc70: 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52  BIGINT" or "SHOR
fc80: 54 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22 55  T INTEGER" or "U
fc90: 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22  NSIGNED INTEGER"
fca0: 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d   causes the prim
fcb0: 61 72 79 0a 23 20 6b 65 79 20 63 6f 6c 75 6d 6e  ary.# key column
fcc0: 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
fcd0: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
fce0: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65  column with inte
fcf0: 67 65 72 20 61 66 66 69 6e 69 74 79 0a 23 20 61  ger affinity.# a
fd00: 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  nd a unique inde
fd10: 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69  x, not as an ali
fd20: 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
fd30: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
fd40: 65 73 74 20 35 2e 34 2e 31 20 7b 0a 20 20 43 52  est 5.4.1 {.  CR
fd50: 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 70 6b  EATE TABLE t6(pk
fd60: 20 49 4e 54 20 70 72 69 6d 61 72 79 20 6b 65 79   INT primary key
fd70: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
fd80: 45 20 74 37 28 70 6b 20 42 49 47 49 4e 54 20 70  E t7(pk BIGINT p
fd90: 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43  rimary key);.  C
fda0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 70  REATE TABLE t8(p
fdb0: 6b 20 53 48 4f 52 54 20 49 4e 54 45 47 45 52 20  k SHORT INTEGER 
fdc0: 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20  primary key);.  
fdd0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 28  CREATE TABLE t9(
fde0: 70 6b 20 55 4e 53 49 47 4e 45 44 20 49 4e 54 45  pk UNSIGNED INTE
fdf0: 47 45 52 20 70 72 69 6d 61 72 79 20 6b 65 79 29  GER primary key)
fe00: 3b 0a 7d 20 0a 64 6f 5f 74 65 73 74 20 65 5f 63  ;.} .do_test e_c
fe10: 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32  reatetable-5.4.2
fe20: 2e 31 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f  .1 { is_integer_
fe30: 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 36 20 70  primary_key t6 p
fe40: 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f  k } 0.do_test e_
fe50: 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e  createtable-5.4.
fe60: 32 2e 32 20 7b 20 69 73 5f 69 6e 74 65 67 65 72  2.2 { is_integer
fe70: 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 37 20  _primary_key t7 
fe80: 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65  pk } 0.do_test e
fe90: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34  _createtable-5.4
fea0: 2e 32 2e 33 20 7b 20 69 73 5f 69 6e 74 65 67 65  .2.3 { is_intege
feb0: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 38  r_primary_key t8
fec0: 20 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20   pk } 0.do_test 
fed0: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e  e_createtable-5.
fee0: 34 2e 32 2e 34 20 7b 20 69 73 5f 69 6e 74 65 67  4.2.4 { is_integ
fef0: 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74  er_primary_key t
ff00: 39 20 70 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78 65  9 pk } 0..do_exe
ff10: 63 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 33 20  csql_test 5.4.3 
ff20: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
ff30: 74 36 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29  t6 VALUES('2.0')
ff40: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
ff50: 74 37 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29  t7 VALUES('2.0')
ff60: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
ff70: 74 38 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29  t8 VALUES('2.0')
ff80: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
ff90: 74 39 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29  t9 VALUES('2.0')
ffa0: 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
ffb0: 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74  f(pk), pk FROM t
ffc0: 36 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65  6;.  SELECT type
ffd0: 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20  of(pk), pk FROM 
ffe0: 74 37 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  t7;.  SELECT typ
fff0: 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d  eof(pk), pk FROM
10000 20 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 74 79   t8;.  SELECT ty
10010 70 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f  peof(pk), pk FRO
10020 4d 20 74 39 3b 0a 7d 20 7b 69 6e 74 65 67 65 72  M t9;.} {integer
10030 20 32 20 69 6e 74 65 67 65 72 20 32 20 69 6e 74   2 integer 2 int
10040 65 67 65 72 20 32 20 69 6e 74 65 67 65 72 20 32  eger 2 integer 2
10050 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }..do_catchsql_t
10060 65 73 74 20 35 2e 34 2e 34 2e 31 20 7b 20 0a 20  est 5.4.4.1 { . 
10070 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
10080 56 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20  VALUES(2) .} {1 
10090 7b 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f  {column pk is no
100a0 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61  t unique}}.do_ca
100b0 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e  tchsql_test 5.4.
100c0 34 2e 32 20 7b 20 0a 20 20 49 4e 53 45 52 54 20  4.2 { .  INSERT 
100d0 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 32  INTO t7 VALUES(2
100e0 29 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20  ) .} {1 {column 
100f0 70 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65  pk is not unique
10100 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }}.do_catchsql_t
10110 65 73 74 20 35 2e 34 2e 34 2e 33 20 7b 20 0a 20  est 5.4.4.3 { . 
10120 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20   INSERT INTO t8 
10130 56 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20  VALUES(2) .} {1 
10140 7b 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f  {column pk is no
10150 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61  t unique}}.do_ca
10160 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e  tchsql_test 5.4.
10170 34 2e 34 20 7b 20 0a 20 20 49 4e 53 45 52 54 20  4.4 { .  INSERT 
10180 49 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 32  INTO t9 VALUES(2
10190 29 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20  ) .} {1 {column 
101a0 70 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65  pk is not unique
101b0 7d 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  }}..# EVIDENCE-O
101c0 46 3a 20 52 2d 35 36 30 39 34 2d 35 37 38 33 30  F: R-56094-57830
101d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
101e0 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61  hree table decla
101f0 72 61 74 69 6f 6e 73 20 61 6c 6c 0a 23 20 63 61  rations all.# ca
10200 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22  use the column "
10210 78 22 20 74 6f 20 62 65 20 61 6e 20 61 6c 69 61  x" to be an alia
10220 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  s for the rowid 
10230 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d  (an integer prim
10240 61 72 79 0a 23 20 6b 65 79 29 3a 20 43 52 45 41  ary.# key): CREA
10250 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
10260 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
10270 20 41 53 43 2c 20 79 2c 20 7a 29 3b 20 43 52 45   ASC, y, z); CRE
10280 41 54 45 20 54 41 42 4c 45 0a 23 20 74 28 78 20  ATE TABLE.# t(x 
10290 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
102a0 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
102b0 29 29 3b 20 43 52 45 41 54 45 20 54 41 42 4c 45  )); CREATE TABLE
102c0 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c   t(x INTEGER, y,
102d0 0a 23 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45  .# z, PRIMARY KE
102e0 59 28 78 20 44 45 53 43 29 29 3b 0a 23 0a 23 20  Y(x DESC));.#.# 
102f0 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
10300 30 31 34 39 2d 32 35 38 38 34 20 74 68 65 20 66  0149-25884 the f
10310 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61  ollowing declara
10320 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65  tion does not re
10330 73 75 6c 74 0a 23 20 69 6e 20 22 78 22 20 62 65  sult.# in "x" be
10340 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ing an alias for
10350 20 74 68 65 20 72 6f 77 69 64 3a 20 43 52 45 41   the rowid: CREA
10360 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
10370 45 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b  EGER PRIMARY.# K
10380 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 0a  EY DESC, y, z);.
10390 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  #.do_createtable
103a0 5f 74 65 73 74 73 20 35 20 2d 74 63 6c 71 75 65  _tests 5 -tclque
103b0 72 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67  ry { .  is_integ
103c0 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74  er_primary_key t
103d0 20 78 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20   x.} -repair {. 
103e0 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50   catchsql { DROP
103f0 20 54 41 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a 20   TABLE t }.} {. 
10400 20 35 2e 31 20 20 20 20 22 43 52 45 41 54 45 20   5.1    "CREATE 
10410 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45  TABLE t(x INTEGE
10420 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53  R PRIMARY KEY AS
10430 43 2c 20 79 2c 20 7a 29 22 20 20 20 20 20 20 31  C, y, z)"      1
10440 0a 20 20 35 2e 32 20 20 20 20 22 43 52 45 41 54  .  5.2    "CREAT
10450 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
10460 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41  GER, y, z, PRIMA
10470 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 22 20  RY KEY(x ASC))" 
10480 20 31 0a 20 20 35 2e 33 20 20 20 20 22 43 52 45   1.  5.3    "CRE
10490 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
104a0 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
104b0 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29  MARY KEY(x DESC)
104c0 29 22 20 31 0a 20 20 36 2e 31 20 20 20 20 22 43  )" 1.  6.1    "C
104d0 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
104e0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
104f0 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 22  KEY DESC, y, z)"
10500 20 20 20 20 20 30 0a 7d 0a 0a 23 20 45 56 49 44       0.}..# EVID
10510 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 37 33 33  ENCE-OF: R-03733
10520 2d 32 39 37 33 34 20 52 6f 77 69 64 20 76 61 6c  -29734 Rowid val
10530 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66  ues may be modif
10540 69 65 64 20 75 73 69 6e 67 20 61 6e 0a 23 20 55  ied using an.# U
10550 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
10560 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20  in the same way 
10570 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c  as any other col
10580 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65  umn value can, e
10590 69 74 68 65 72 0a 23 20 75 73 69 6e 67 20 6f 6e  ither.# using on
105a0 65 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69  e of the built-i
105b0 6e 20 61 6c 69 61 73 65 73 20 28 22 72 6f 77 69  n aliases ("rowi
105c0 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72  d", "oid" or "_r
105d0 6f 77 69 64 5f 22 29 20 6f 72 20 62 79 0a 23 20  owid_") or by.# 
105e0 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63  using an alias c
105f0 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74  reated by an int
10600 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
10610 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
10620 65 73 74 20 35 2e 37 2e 30 20 7b 0a 20 20 43 52  est 5.7.0 {.  CR
10630 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 61  EATE TABLE t10(a
10640 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , b);.  INSERT I
10650 4e 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28 27  NTO t10 VALUES('
10660 74 65 6e 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52  ten', 10);..  CR
10670 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 61  EATE TABLE t11(a
10680 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d  , b INTEGER PRIM
10690 41 52 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45  ARY KEY);.  INSE
106a0 52 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55  RT INTO t11 VALU
106b0 45 53 28 27 74 65 6e 27 2c 20 31 30 29 3b 0a 7d  ES('ten', 10);.}
106c0 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
106d0 74 65 73 74 73 20 35 2e 37 2e 31 20 2d 71 75 65  tests 5.7.1 -que
106e0 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 72  ry { .  SELECT r
106f0 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f  owid, _rowid_, o
10700 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b  id FROM t10;.} {
10710 0a 20 20 31 20 20 20 20 22 55 50 44 41 54 45 20  .  1    "UPDATE 
10720 74 31 30 20 53 45 54 20 72 6f 77 69 64 20 3d 20  t10 SET rowid = 
10730 35 22 20 20 20 7b 35 20 35 20 35 7d 0a 20 20 32  5"   {5 5 5}.  2
10740 20 20 20 20 22 55 50 44 41 54 45 20 74 31 30 20      "UPDATE t10 
10750 53 45 54 20 5f 72 6f 77 69 64 5f 20 3d 20 36 22  SET _rowid_ = 6"
10760 20 7b 36 20 36 20 36 7d 0a 20 20 33 20 20 20 20   {6 6 6}.  3    
10770 22 55 50 44 41 54 45 20 74 31 30 20 53 45 54 20  "UPDATE t10 SET 
10780 6f 69 64 20 3d 20 37 22 20 20 20 20 20 7b 37 20  oid = 7"     {7 
10790 37 20 37 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  7 7}.}.do_create
107a0 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 37 2e  table_tests 5.7.
107b0 32 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45  2 -query { .  SE
107c0 4c 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77  LECT rowid, _row
107d0 69 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d  id_, oid, b FROM
107e0 20 74 31 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20   t11;.} {.  1   
107f0 20 22 55 50 44 41 54 45 20 74 31 31 20 53 45 54   "UPDATE t11 SET
10800 20 72 6f 77 69 64 20 3d 20 35 22 20 20 20 7b 35   rowid = 5"   {5
10810 20 35 20 35 20 35 7d 0a 20 20 32 20 20 20 20 22   5 5 5}.  2    "
10820 55 50 44 41 54 45 20 74 31 31 20 53 45 54 20 5f  UPDATE t11 SET _
10830 72 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36 20 36  rowid_ = 6" {6 6
10840 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55 50   6 6}.  3    "UP
10850 44 41 54 45 20 74 31 31 20 53 45 54 20 6f 69 64  DATE t11 SET oid
10860 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20 37   = 7"     {7 7 7
10870 20 37 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41   7}.  4    "UPDA
10880 54 45 20 74 31 31 20 53 45 54 20 62 20 3d 20 38  TE t11 SET b = 8
10890 22 20 20 20 20 20 20 20 7b 38 20 38 20 38 20 38  "       {8 8 8 8
108a0 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
108b0 4f 46 3a 20 52 2d 35 38 37 30 36 2d 31 34 32 32  OF: R-58706-1422
108c0 39 20 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20  9 Similarly, an 
108d0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
108e0 20 6d 61 79 20 70 72 6f 76 69 64 65 0a 23 20 61   may provide.# a
108f0 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
10900 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65   the rowid for e
10910 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
10920 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ..#.do_createtab
10930 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 31 20 2d  le_tests 5.8.1 -
10940 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43  query { .  SELEC
10950 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f  T rowid, _rowid_
10960 2c 20 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a  , oid FROM t10;.
10970 7d 20 2d 72 65 70 61 69 72 20 7b 20 0a 20 20 65  } -repair { .  e
10980 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20  xecsql { DELETE 
10990 46 52 4f 4d 20 74 31 30 20 7d 20 0a 7d 20 7b 0a  FROM t10 } .} {.
109a0 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49    1    "INSERT I
109b0 4e 54 4f 20 74 31 30 28 6f 69 64 29 20 56 41 4c  NTO t10(oid) VAL
109c0 55 45 53 28 31 35 29 22 20 20 20 20 20 20 20 20  UES(15)"        
109d0 20 20 20 7b 31 35 20 31 35 20 31 35 7d 0a 20 20     {15 15 15}.  
109e0 32 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  2    "INSERT INT
109f0 4f 20 74 31 30 28 72 6f 77 69 64 29 20 56 41 4c  O t10(rowid) VAL
10a00 55 45 53 28 31 36 29 22 20 20 20 20 20 20 20 20  UES(16)"        
10a10 20 7b 31 36 20 31 36 20 31 36 7d 0a 20 20 33 20   {16 16 16}.  3 
10a20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
10a30 74 31 30 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c  t10(_rowid_) VAL
10a40 55 45 53 28 31 37 29 22 20 20 20 20 20 20 20 7b  UES(17)"       {
10a50 31 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20  17 17 17}.  4   
10a60 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
10a70 30 28 61 2c 20 62 2c 20 6f 69 64 29 20 56 41 4c  0(a, b, oid) VAL
10a80 55 45 53 28 31 2c 32 2c 33 29 22 20 20 7b 33 20  UES(1,2,3)"  {3 
10a90 33 20 33 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  3 3}.}.do_create
10aa0 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e  table_tests 5.8.
10ab0 32 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45  2 -query { .  SE
10ac0 4c 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77  LECT rowid, _row
10ad0 69 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d  id_, oid, b FROM
10ae0 20 74 31 31 3b 0a 7d 20 2d 72 65 70 61 69 72 20   t11;.} -repair 
10af0 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44  { .  execsql { D
10b00 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 31 20 7d  ELETE FROM t11 }
10b10 20 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e   .} {.  1    "IN
10b20 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 6f 69  SERT INTO t11(oi
10b30 64 29 20 56 41 4c 55 45 53 28 31 35 29 22 20 20  d) VALUES(15)"  
10b40 20 20 20 20 20 20 20 20 20 7b 31 35 20 31 35 20           {15 15 
10b50 31 35 20 31 35 7d 0a 20 20 32 20 20 20 20 22 49  15 15}.  2    "I
10b60 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 72  NSERT INTO t11(r
10b70 6f 77 69 64 29 20 56 41 4c 55 45 53 28 31 36 29  owid) VALUES(16)
10b80 22 20 20 20 20 20 20 20 20 20 7b 31 36 20 31 36  "         {16 16
10b90 20 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20 22   16 16}.  3    "
10ba0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28  INSERT INTO t11(
10bb0 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53 28  _rowid_) VALUES(
10bc0 31 37 29 22 20 20 20 20 20 20 20 7b 31 37 20 31  17)"       {17 1
10bd0 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20  7 17 17}.  4    
10be0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31  "INSERT INTO t11
10bf0 28 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c  (a, b) VALUES(1,
10c00 32 29 22 20 20 20 20 20 20 20 20 20 7b 32 20 32  2)"         {2 2
10c10 20 32 20 32 7d 0a 7d 0a 0a 23 20 45 56 49 44 45   2 2}.}..# EVIDE
10c20 4e 43 45 2d 4f 46 3a 20 52 2d 33 32 33 32 36 2d  NCE-OF: R-32326-
10c30 34 34 35 39 32 20 55 6e 6c 69 6b 65 20 6e 6f 72  44592 Unlike nor
10c40 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d  mal SQLite colum
10c50 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 0a 23  ns, an integer.#
10c60 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20   primary key or 
10c70 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73  rowid column mus
10c80 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65  t contain intege
10c90 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65  r values. Intege
10ca0 72 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20  r.# primary key 
10cb0 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 73  or rowid columns
10cc0 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f   are not able to
10cd0 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70   hold floating p
10ce0 6f 69 6e 74 0a 23 20 76 61 6c 75 65 73 2c 20 73  oint.# values, s
10cf0 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f  trings, BLOBs, o
10d00 72 20 4e 55 4c 4c 73 2e 0a 23 0a 23 20 20 20 20  r NULLs..#.#    
10d10 20 54 68 69 73 20 69 73 20 63 6f 6e 73 69 64 65   This is conside
10d20 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73  red by the tests
10d30 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
10d40 6e 67 20 33 20 73 74 61 74 65 6d 65 6e 74 73 2c  ng 3 statements,
10d50 0a 23 20 20 20 20 20 77 68 69 63 68 20 73 68 6f  .#     which sho
10d60 77 20 74 68 61 74 3a 0a 23 0a 23 20 20 20 20 20  w that:.#.#     
10d70 20 20 31 2e 20 41 74 74 65 6d 70 74 73 20 74 6f    1. Attempts to
10d80 20 55 50 44 41 54 45 20 61 20 72 6f 77 69 64 20   UPDATE a rowid 
10d90 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e 2d  column to a non-
10da0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 66 61  integer value fa
10db0 69 6c 2c 0a 23 20 20 20 20 20 20 20 32 2e 20 41  il,.#       2. A
10dc0 74 74 65 6d 70 74 73 20 74 6f 20 49 4e 53 45 52  ttempts to INSER
10dd0 54 20 61 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  T a real, string
10de0 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 20 69   or blob value i
10df0 6e 74 6f 20 61 20 72 6f 77 69 64 20 0a 23 20 20  nto a rowid .#  
10e00 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 66          column f
10e10 61 69 6c 2c 20 61 6e 64 0a 23 20 20 20 20 20 20  ail, and.#      
10e20 20 33 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74   3. Attempting t
10e30 6f 20 49 4e 53 45 52 54 20 61 20 4e 55 4c 4c 20  o INSERT a NULL 
10e40 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77  value into a row
10e50 69 64 20 63 6f 6c 75 6d 6e 20 63 61 75 73 65 73  id column causes
10e60 20 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20   the.#          
10e70 73 79 73 74 65 6d 20 74 6f 20 61 75 74 6f 6d 61  system to automa
10e80 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 61  tically select a
10e90 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  n integer value 
10ea0 74 6f 20 75 73 65 2e 0a 23 0a 0a 0a 23 20 45 56  to use..#...# EV
10eb0 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 32  IDENCE-OF: R-642
10ec0 32 34 2d 36 32 35 37 38 20 49 66 20 61 6e 20 55  24-62578 If an U
10ed0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
10ee0 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20  attempts to set 
10ef0 61 6e 0a 23 20 69 6e 74 65 67 65 72 20 70 72 69  an.# integer pri
10f00 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69  mary key or rowi
10f10 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e 55  d column to a NU
10f20 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65  LL or blob value
10f30 2c 20 6f 72 20 74 6f 20 61 0a 23 20 73 74 72 69  , or to a.# stri
10f40 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng or real value
10f50 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
10f60 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
10f70 72 74 65 64 20 74 6f 20 61 6e 0a 23 20 69 6e 74  rted to an.# int
10f80 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70  eger, a "datatyp
10f90 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f  e mismatch" erro
10fa0 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65  r occurs and the
10fb0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 23 20   statement is.# 
10fc0 61 62 6f 72 74 65 64 2e 0a 23 0a 64 72 6f 70 5f  aborted..#.drop_
10fd0 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78  all_tables.do_ex
10fe0 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 39 2e 30  ecsql_test 5.9.0
10ff0 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
11000 45 20 74 31 32 28 78 20 49 4e 54 45 47 45 52 20  E t12(x INTEGER 
11010 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b  PRIMARY KEY, y);
11020 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
11030 31 32 20 56 41 4c 55 45 53 28 35 2c 20 27 66 69  12 VALUES(5, 'fi
11040 76 65 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74  ve');.}.do_creat
11050 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 39  etable_tests 5.9
11060 2e 31 20 2d 71 75 65 72 79 20 7b 20 53 45 4c 45  .1 -query { SELE
11070 43 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20  CT typeof(x), x 
11080 46 52 4f 4d 20 74 31 32 20 7d 20 7b 0a 20 20 31  FROM t12 } {.  1
11090 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53     "UPDATE t12 S
110a0 45 54 20 78 20 3d 20 34 22 20 20 20 20 20 20 20  ET x = 4"       
110b0 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20  {integer 4}.  2 
110c0 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
110d0 54 20 78 20 3d 20 31 30 2e 30 22 20 20 20 20 7b  T x = 10.0"    {
110e0 69 6e 74 65 67 65 72 20 31 30 7d 0a 20 20 33 20  integer 10}.  3 
110f0 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
11100 54 20 78 20 3d 20 27 31 32 2e 30 27 22 20 20 7b  T x = '12.0'"  {
11110 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20  integer 12}.  4 
11120 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
11130 54 20 78 20 3d 20 27 2d 31 35 2e 30 27 22 20 7b  T x = '-15.0'" {
11140 69 6e 74 65 67 65 72 20 2d 31 35 7d 0a 7d 0a 64  integer -15}.}.d
11150 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
11160 73 74 73 20 35 2e 39 2e 32 20 2d 65 72 72 6f 72  sts 5.9.2 -error
11170 20 7b 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69   {.  datatype mi
11180 73 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20  smatch.} {.  1  
11190 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
111a0 20 78 20 3d 20 34 2e 31 22 20 20 20 20 20 20 20   x = 4.1"       
111b0 20 20 7b 7d 0a 20 20 32 20 20 20 22 55 50 44 41    {}.  2   "UPDA
111c0 54 45 20 74 31 32 20 53 45 54 20 78 20 3d 20 27  TE t12 SET x = '
111d0 68 65 6c 6c 6f 27 22 20 20 20 20 20 7b 7d 0a 20  hello'"     {}. 
111e0 20 33 20 20 20 22 55 50 44 41 54 45 20 74 31 32   3   "UPDATE t12
111f0 20 53 45 54 20 78 20 3d 20 4e 55 4c 4c 22 20 20   SET x = NULL"  
11200 20 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 22        {}.  4   "
11210 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78  UPDATE t12 SET x
11220 20 3d 20 58 27 41 42 43 44 27 22 20 20 20 20 20   = X'ABCD'"     
11230 7b 7d 0a 20 20 35 20 20 20 22 55 50 44 41 54 45  {}.  5   "UPDATE
11240 20 74 31 32 20 53 45 54 20 78 20 3d 20 58 27 33   t12 SET x = X'3
11250 39 30 30 27 22 20 20 20 20 20 7b 7d 0a 20 20 36  900'"     {}.  6
11260 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53     "UPDATE t12 S
11270 45 54 20 78 20 3d 20 58 27 33 39 27 22 20 20 20  ET x = X'39'"   
11280 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44      {}.}..# EVID
11290 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 35 37 33 34  ENCE-OF: R-05734
112a0 2d 31 33 36 32 39 20 49 66 20 61 6e 20 49 4e 53  -13629 If an INS
112b0 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74  ERT statement at
112c0 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74  tempts to insert
112d0 20 61 0a 23 20 62 6c 6f 62 20 76 61 6c 75 65 2c   a.# blob value,
112e0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 6f 72 20   or a string or 
112f0 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20  real value that 
11300 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
11310 73 73 6c 79 0a 23 20 63 6f 6e 76 65 72 74 65 64  ssly.# converted
11320 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69   to an integer i
11330 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 70  nto an integer p
11340 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f  rimary key or ro
11350 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23 20  wid column, a.# 
11360 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  "datatype mismat
11370 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73  ch" error occurs
11380 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65   and the stateme
11390 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 23  nt is aborted..#
113a0 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
113b0 20 35 2e 31 30 2e 30 20 7b 20 44 45 4c 45 54 45   5.10.0 { DELETE
113c0 20 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63   FROM t12 }.do_c
113d0 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
113e0 20 35 2e 31 30 2e 31 20 2d 65 72 72 6f 72 20 7b   5.10.1 -error {
113f0 20 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73   .  datatype mis
11400 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20  match.} {.  1   
11410 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32  "INSERT INTO t12
11420 28 78 29 20 56 41 4c 55 45 53 28 34 2e 31 29 22  (x) VALUES(4.1)"
11430 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 22 49       {}.  2   "I
11440 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78  NSERT INTO t12(x
11450 29 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27  ) VALUES('hello'
11460 29 22 20 7b 7d 0a 20 20 33 20 20 20 22 49 4e 53  )" {}.  3   "INS
11470 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
11480 56 41 4c 55 45 53 28 58 27 41 42 43 44 27 29 22  VALUES(X'ABCD')"
11490 20 7b 7d 0a 20 20 34 20 20 20 22 49 4e 53 45 52   {}.  4   "INSER
114a0 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41  T INTO t12(x) VA
114b0 4c 55 45 53 28 58 27 33 39 30 30 27 29 22 20 7b  LUES(X'3900')" {
114c0 7d 0a 20 20 35 20 20 20 22 49 4e 53 45 52 54 20  }.  5   "INSERT 
114d0 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55  INTO t12(x) VALU
114e0 45 53 28 58 27 33 39 27 29 22 20 20 20 7b 7d 0a  ES(X'39')"   {}.
114f0 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
11500 5f 74 65 73 74 73 20 35 2e 31 30 2e 32 20 2d 71  _tests 5.10.2 -q
11510 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54  uery { .  SELECT
11520 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46 52   typeof(x), x FR
11530 4f 4d 20 74 31 32 20 0a 7d 20 2d 72 65 70 61 69  OM t12 .} -repai
11540 72 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  r {.  execsql { 
11550 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 32 20  DELETE FROM t12 
11560 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53  }.} {.  1   "INS
11570 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
11580 56 41 4c 55 45 53 28 34 29 22 20 20 20 20 20 20  VALUES(4)"      
11590 20 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32   {integer 4}.  2
115a0 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
115b0 74 31 32 28 78 29 20 56 41 4c 55 45 53 28 31 30  t12(x) VALUES(10
115c0 2e 30 29 22 20 20 20 20 7b 69 6e 74 65 67 65 72  .0)"    {integer
115d0 20 31 30 7d 0a 20 20 33 20 20 20 22 49 4e 53 45   10}.  3   "INSE
115e0 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
115f0 41 4c 55 45 53 28 27 31 32 2e 30 27 29 22 20 20  ALUES('12.0')"  
11600 7b 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34  {integer 12}.  4
11610 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
11620 74 31 32 28 78 29 20 56 41 4c 55 45 53 28 27 34  t12(x) VALUES('4
11630 65 33 27 29 22 20 20 20 7b 69 6e 74 65 67 65 72  e3')"   {integer
11640 20 34 30 30 30 7d 0a 20 20 35 20 20 20 22 49 4e   4000}.  5   "IN
11650 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11660 20 56 41 4c 55 45 53 28 27 2d 31 34 2e 30 27 29   VALUES('-14.0')
11670 22 20 7b 69 6e 74 65 67 65 72 20 2d 31 34 7d 0a  " {integer -14}.
11680 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
11690 3a 20 52 2d 30 37 39 38 36 2d 34 36 30 32 34 20  : R-07986-46024 
116a0 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  If an INSERT sta
116b0 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20  tement attempts 
116c0 74 6f 20 69 6e 73 65 72 74 20 61 0a 23 20 4e 55  to insert a.# NU
116d0 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  LL value into a 
116e0 72 6f 77 69 64 20 6f 72 20 69 6e 74 65 67 65 72  rowid or integer
116f0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
11700 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 0a  umn, the system.
11710 23 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74  # chooses an int
11720 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73  eger value to us
11730 65 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 61  e as the rowid a
11740 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 23 0a  utomatically..#.
11750 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
11760 35 2e 31 31 2e 30 20 7b 20 44 45 4c 45 54 45 20  5.11.0 { DELETE 
11770 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72  FROM t12 }.do_cr
11780 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
11790 35 2e 31 31 20 2d 71 75 65 72 79 20 7b 20 0a 20  5.11 -query { . 
117a0 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78   SELECT typeof(x
117b0 29 2c 20 78 20 46 52 4f 4d 20 74 31 32 20 57 48  ), x FROM t12 WH
117c0 45 52 45 20 79 20 49 53 20 28 53 45 4c 45 43 54  ERE y IS (SELECT
117d0 20 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 32   max(y) FROM t12
117e0 29 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53  ).} {.  1   "INS
117f0 45 52 54 20 49 4e 54 4f 20 74 31 32 20 44 45 46  ERT INTO t12 DEF
11800 41 55 4c 54 20 56 41 4c 55 45 53 22 20 20 20 20  AULT VALUES"    
11810 20 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e 74              {int
11820 65 67 65 72 20 31 7d 0a 20 20 32 20 20 20 22 49  eger 1}.  2   "I
11830 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79  NSERT INTO t12(y
11840 29 20 20 20 56 41 4c 55 45 53 28 35 29 22 20 20  )   VALUES(5)"  
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 69                {i
11860 6e 74 65 67 65 72 20 32 7d 0a 20 20 33 20 20 20  nteger 2}.  3   
11870 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32  "INSERT INTO t12
11880 28 78 2c 79 29 20 56 41 4c 55 45 53 28 4e 55 4c  (x,y) VALUES(NUL
11890 4c 2c 20 31 30 29 22 20 20 20 20 20 20 20 20 20  L, 10)"         
118a0 7b 69 6e 74 65 67 65 72 20 33 7d 0a 20 20 34 20  {integer 3}.  4 
118b0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
118c0 31 32 28 78 2c 79 29 20 53 45 4c 45 43 54 20 4e  12(x,y) SELECT N
118d0 55 4c 4c 2c 20 31 35 20 46 52 4f 4d 20 74 31 32  ULL, 15 FROM t12
118e0 22 20 0a 20 20 20 20 20 20 7b 69 6e 74 65 67 65  " .      {intege
118f0 72 20 34 20 69 6e 74 65 67 65 72 20 35 20 69 6e  r 4 integer 5 in
11900 74 65 67 65 72 20 36 7d 0a 20 20 35 20 20 20 22  teger 6}.  5   "
11910 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11920 79 29 20 53 45 4c 45 43 54 20 32 30 20 46 52 4f  y) SELECT 20 FRO
11930 4d 20 74 31 32 20 4c 49 4d 49 54 20 33 22 0a 20  M t12 LIMIT 3". 
11940 20 20 20 20 20 7b 69 6e 74 65 67 65 72 20 37 20       {integer 7 
11950 69 6e 74 65 67 65 72 20 38 20 69 6e 74 65 67 65  integer 8 intege
11960 72 20 39 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74  r 9}.}..finish_t
11970 65 73 74 0a                                      est.