/ Hex Artifact Content
Login

Artifact c6daf10ffce8a898cd375b4a71615a741a6029d0:


0000: 23 20 32 30 30 34 20 4e 6f 76 65 6d 62 65 72 20  # 2004 November 
0010: 31 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  12.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 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 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  e AUTOINCREMENT 
01e0: 66 65 61 74 75 72 65 73 2e 0a 23 0a 23 20 24 49  features..#.# $I
01f0: 64 3a 20 61 75 74 6f 69 6e 63 2e 74 65 73 74 2c  d: autoinc.test,
0200: 76 20 31 2e 33 20 32 30 30 35 2f 30 31 2f 32 31  v 1.3 2005/01/21
0210: 20 31 31 3a 35 35 3a 32 37 20 64 61 6e 69 65 6c   11:55:27 daniel
0220: 6b 31 39 37 37 20 45 78 70 20 24 0a 23 0a 0a 73  k1977 Exp $.#..s
0230: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0240: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0250: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0260: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49  /tester.tcl..# I
0270: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73  f the library is
0280: 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69   not compiled wi
0290: 74 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  th autoincrement
02a0: 20 73 75 70 70 6f 72 74 20 74 68 65 6e 0a 23 20   support then.# 
02b0: 73 6b 69 70 20 61 6c 6c 20 74 65 73 74 73 20 69  skip all tests i
02c0: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 23 0a 69  n this file..#.i
02d0: 66 63 61 70 61 62 6c 65 20 7b 21 61 75 74 6f 69  fcapable {!autoi
02e0: 6e 63 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  nc} {.  finish_t
02f0: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0300: 23 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69  # The database i
0310: 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74  s initially empt
0320: 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74  y..#.do_test aut
0330: 6f 69 6e 63 2d 31 2e 31 20 7b 0a 20 20 65 78 65  oinc-1.1 {.  exe
0340: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0350: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
0360: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0370: 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20  type='table';.  
0380: 7d 0a 7d 20 7b 7d 0a 0a 23 20 41 64 64 20 61 20  }.} {}..# Add a 
0390: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 41  table with the A
03a0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
03b0: 74 75 72 65 2e 20 20 56 65 72 69 66 79 20 74 68  ture.  Verify th
03c0: 61 74 20 74 68 65 0a 23 20 53 51 4c 49 54 45 5f  at the.# SQLITE_
03d0: 53 45 51 55 45 4e 43 45 20 74 61 62 6c 65 20 67  SEQUENCE table g
03e0: 65 74 73 20 63 72 65 61 74 65 64 2e 0a 23 0a 64  ets created..#.d
03f0: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 31  o_test autoinc-1
0400: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0410: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0420: 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 20 50  E t1(x INTEGER P
0430: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
0440: 4e 43 52 45 4d 45 4e 54 2c 20 79 29 3b 0a 20 20  NCREMENT, y);.  
0450: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
0460: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0470: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
0480: 6c 65 27 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 73  le';.  }.} {t1 s
0490: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 0a  qlite_sequence}.
04a0: 0a 23 20 54 68 65 20 53 51 4c 49 54 45 5f 53 45  .# The SQLITE_SE
04b0: 51 55 45 4e 43 45 20 74 61 62 6c 65 20 69 73 20  QUENCE table is 
04c0: 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 0a  initially empty.
04d0: 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  #.do_test autoin
04e0: 63 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  c-1.3 {.  execsq
04f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0500: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
0510: 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  uence;.  }.} {}.
0520: 0a 23 20 43 6c 6f 73 65 20 61 6e 64 20 72 65 6f  .# Close and reo
0530: 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
0540: 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 65  .  Verify that e
0550: 76 65 72 79 74 68 69 6e 67 20 69 73 20 73 74 69  verything is sti
0560: 6c 6c 20 74 68 65 72 65 2e 0a 23 0a 64 6f 5f 74  ll there..#.do_t
0570: 65 73 74 20 61 75 74 6f 69 6e 63 2d 31 2e 34 20  est autoinc-1.4 
0580: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
0590: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
05a0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
05b0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
05c0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
05d0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 57 65 20  .  }.} {}..# We 
05e0: 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  are not allowed 
05f0: 74 6f 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69  to drop the sqli
0600: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
0610: 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74  e..#.do_test aut
0620: 6f 69 6e 63 2d 31 2e 35 20 7b 0a 20 20 63 61 74  oinc-1.5 {.  cat
0630: 63 68 73 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c  chsql {DROP TABL
0640: 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  E sqlite_sequenc
0650: 65 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 73  e}.} {1 {table s
0660: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 6d  qlite_sequence m
0670: 61 79 20 6e 6f 74 20 62 65 20 64 72 6f 70 70 65  ay not be droppe
0680: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  d}}.do_test auto
0690: 69 6e 63 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63  inc-1.6 {.  exec
06a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
06b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
06c0: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
06d0: 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 31 20 73 71  table'}.} {t1 sq
06e0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 0a 0a  lite_sequence}..
06f0: 23 20 49 6e 73 65 72 74 20 61 6e 20 65 6e 74 72  # Insert an entr
0700: 69 65 73 20 69 6e 74 6f 20 74 68 65 20 74 31 20  ies into the t1 
0710: 74 61 62 6c 65 20 61 6e 64 20 6d 61 6b 65 20 73  table and make s
0720: 75 72 65 20 74 68 65 20 6c 61 72 67 65 73 74 20  ure the largest 
0730: 6b 65 79 0a 23 20 69 73 20 61 6c 77 61 79 73 20  key.# is always 
0740: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20  recorded in the 
0750: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
0760: 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  table..#.do_test
0770: 20 61 75 74 6f 69 6e 63 2d 32 2e 31 20 7b 0a 20   autoinc-2.1 {. 
0780: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0790: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
07a0: 69 74 65 5f 73 65 71 75 65 6e 63 65 0a 20 20 7d  ite_sequence.  }
07b0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75  .} {}.do_test au
07c0: 74 6f 69 6e 63 2d 32 2e 32 20 7b 0a 20 20 65 78  toinc-2.2 {.  ex
07d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
07e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
07f0: 53 28 31 32 2c 33 34 29 3b 0a 20 20 20 20 53 45  S(12,34);.    SE
0800: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
0810: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d  te_sequence;.  }
0820: 0a 7d 20 7b 74 31 20 31 32 7d 0a 64 6f 5f 74 65  .} {t1 12}.do_te
0830: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 33 20 7b  st autoinc-2.3 {
0840: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0850: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0860: 56 41 4c 55 45 53 28 31 2c 32 33 29 3b 0a 20 20  VALUES(1,23);.  
0870: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0880: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
0890: 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 7d 0a 64  .  }.} {t1 12}.d
08a0: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32  o_test autoinc-2
08b0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
08c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
08d0: 20 74 31 20 56 41 4c 55 45 53 28 31 32 33 2c 34   t1 VALUES(123,4
08e0: 35 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  56);.    SELECT 
08f0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
0900: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74  quence;.  }.} {t
0910: 31 20 31 32 33 7d 0a 64 6f 5f 74 65 73 74 20 61  1 123}.do_test a
0920: 75 74 6f 69 6e 63 2d 32 2e 35 20 7b 0a 20 20 65  utoinc-2.5 {.  e
0930: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53  xecsql {.    INS
0940: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0950: 45 53 28 4e 55 4c 4c 2c 35 36 37 29 3b 0a 20 20  ES(NULL,567);.  
0960: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0970: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
0980: 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 34 7d 0a  .  }.} {t1 124}.
0990: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
09a0: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.6 {.  execsql 
09b0: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
09c0: 4d 20 74 31 20 57 48 45 52 45 20 79 3d 35 36 37  M t1 WHERE y=567
09d0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
09e0: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
09f0: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31  nce;.  }.} {t1 1
0a00: 32 34 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  24}.do_test auto
0a10: 69 6e 63 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63  inc-2.7 {.  exec
0a20: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
0a30: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0a40: 4e 55 4c 4c 2c 35 36 37 29 3b 0a 20 20 20 20 53  NULL,567);.    S
0a50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
0a60: 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20  ite_sequence;.  
0a70: 7d 0a 7d 20 7b 74 31 20 31 32 35 7d 0a 64 6f 5f  }.} {t1 125}.do_
0a80: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 38  test autoinc-2.8
0a90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0aa0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
0ab0: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  1;.    SELECT * 
0ac0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75  FROM sqlite_sequ
0ad0: 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20  ence;.  }.} {t1 
0ae0: 31 32 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  125}.do_test aut
0af0: 6f 69 6e 63 2d 32 2e 39 20 7b 0a 20 20 65 78 65  oinc-2.9 {.  exe
0b00: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
0b10: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0b20: 28 31 32 2c 33 34 29 3b 0a 20 20 20 20 53 45 4c  (12,34);.    SEL
0b30: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0b40: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
0b50: 7d 20 7b 74 31 20 31 32 35 7d 0a 64 6f 5f 74 65  } {t1 125}.do_te
0b60: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 31 30 20  st autoinc-2.10 
0b70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0b80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0b90: 20 56 41 4c 55 45 53 28 31 32 35 2c 34 35 36 29   VALUES(125,456)
0ba0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0bb0: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
0bc0: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31  nce;.  }.} {t1 1
0bd0: 32 35 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  25}.do_test auto
0be0: 69 6e 63 2d 32 2e 31 31 20 7b 0a 20 20 65 78 65  inc-2.11 {.  exe
0bf0: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
0c00: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0c10: 28 2d 31 32 33 34 35 36 37 2c 2d 31 29 3b 0a 20  (-1234567,-1);. 
0c20: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0c30: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
0c40: 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 32 35 7d  ;.  }.} {t1 125}
0c50: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
0c60: 2d 32 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -2.12 {.  execsq
0c70: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
0c80: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 33  NTO t1 VALUES(23
0c90: 34 2c 35 36 37 38 29 3b 0a 20 20 20 20 53 45 4c  4,5678);.    SEL
0ca0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0cb0: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
0cc0: 7d 20 7b 74 31 20 32 33 34 7d 0a 64 6f 5f 74 65  } {t1 234}.do_te
0cd0: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 31 33 20  st autoinc-2.13 
0ce0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0cf0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0d00: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0d10: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
0d20: 2c 31 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,1);.    SELECT 
0d30: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
0d40: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74  quence;.  }.} {t
0d50: 31 20 32 33 35 7d 0a 64 6f 5f 74 65 73 74 20 61  1 235}.do_test a
0d60: 75 74 6f 69 6e 63 2d 32 2e 31 34 20 7b 0a 20 20  utoinc-2.14 {.  
0d70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
0d80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
0d90: 20 20 7d 0a 7d 20 7b 32 33 35 20 31 7d 0a 0a 23    }.} {235 1}..#
0da0: 20 4d 61 6e 75 61 6c 6c 79 20 63 68 61 6e 67 65   Manually change
0db0: 20 74 68 65 20 61 75 74 6f 69 6e 63 72 65 6d 65   the autoincreme
0dc0: 6e 74 20 76 61 6c 75 65 73 20 69 6e 20 73 71 6c  nt values in sql
0dd0: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 0a 23 0a  ite_sequence..#.
0de0: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
0df0: 32 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.20 {.  execsql
0e00: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 73 71   {.    UPDATE sq
0e10: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 53 45  lite_sequence SE
0e20: 54 20 73 65 71 3d 31 32 33 34 20 57 48 45 52 45  T seq=1234 WHERE
0e30: 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20 20 20   name='t1';.    
0e40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0e50: 41 4c 55 45 53 28 4e 55 4c 4c 2c 32 29 3b 0a 20  ALUES(NULL,2);. 
0e60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0e70: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20   t1;.  }.} {235 
0e80: 31 20 31 32 33 35 20 32 7d 0a 64 6f 5f 74 65 73  1 1235 2}.do_tes
0e90: 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 31 20 7b  t autoinc-2.21 {
0ea0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0eb0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73   SELECT * FROM s
0ec0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a  qlite_sequence;.
0ed0: 20 20 7d 0a 7d 20 7b 74 31 20 31 32 33 35 7d 0a    }.} {t1 1235}.
0ee0: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
0ef0: 32 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.22 {.  execsql
0f00: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 73 71   {.    UPDATE sq
0f10: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 53 45  lite_sequence SE
0f20: 54 20 73 65 71 3d 4e 55 4c 4c 20 57 48 45 52 45  T seq=NULL WHERE
0f30: 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20 20 20   name='t1';.    
0f40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0f50: 41 4c 55 45 53 28 4e 55 4c 4c 2c 33 29 3b 0a 20  ALUES(NULL,3);. 
0f60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0f70: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20   t1;.  }.} {235 
0f80: 31 20 31 32 33 35 20 32 20 31 32 33 36 20 33 7d  1 1235 2 1236 3}
0f90: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
0fa0: 2d 32 2e 32 33 20 7b 0a 20 20 65 78 65 63 73 71  -2.23 {.  execsq
0fb0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
0fc0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71   FROM sqlite_seq
0fd0: 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31  uence;.  }.} {t1
0fe0: 20 31 32 33 36 7d 0a 64 6f 5f 74 65 73 74 20 61   1236}.do_test a
0ff0: 75 74 6f 69 6e 63 2d 32 2e 32 34 20 7b 0a 20 20  utoinc-2.24 {.  
1000: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
1010: 44 41 54 45 20 73 71 6c 69 74 65 5f 73 65 71 75  DATE sqlite_sequ
1020: 65 6e 63 65 20 53 45 54 20 73 65 71 3d 27 61 2d  ence SET seq='a-
1030: 73 74 72 69 6e 67 27 20 57 48 45 52 45 20 6e 61  string' WHERE na
1040: 6d 65 3d 27 74 31 27 3b 0a 20 20 20 20 49 4e 53  me='t1';.    INS
1050: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1060: 45 53 28 4e 55 4c 4c 2c 34 29 3b 0a 20 20 20 20  ES(NULL,4);.    
1070: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1080: 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20 31 20 31  ;.  }.} {235 1 1
1090: 32 33 35 20 32 20 31 32 33 36 20 33 20 31 32 33  235 2 1236 3 123
10a0: 37 20 34 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  7 4}.do_test aut
10b0: 6f 69 6e 63 2d 32 2e 32 35 20 7b 0a 20 20 65 78  oinc-2.25 {.  ex
10c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
10d0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
10e0: 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d  _sequence;.  }.}
10f0: 20 7b 74 31 20 31 32 33 37 7d 0a 64 6f 5f 74 65   {t1 1237}.do_te
1100: 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 32 36 20  st autoinc-2.26 
1110: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1120: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 73 71    DELETE FROM sq
1130: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 57 48  lite_sequence WH
1140: 45 52 45 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20  ERE name='t1';. 
1150: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1160: 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 35 29  1 VALUES(NULL,5)
1170: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1180: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32  ROM t1;.  }.} {2
1190: 33 35 20 31 20 31 32 33 35 20 32 20 31 32 33 36  35 1 1235 2 1236
11a0: 20 33 20 31 32 33 37 20 34 20 31 32 33 38 20 35   3 1237 4 1238 5
11b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  }.do_test autoin
11c0: 63 2d 32 2e 32 37 20 7b 0a 20 20 65 78 65 63 73  c-2.27 {.  execs
11d0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
11e0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
11f0: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74  quence;.  }.} {t
1200: 31 20 31 32 33 38 7d 0a 64 6f 5f 74 65 73 74 20  1 1238}.do_test 
1210: 61 75 74 6f 69 6e 63 2d 32 2e 32 38 20 7b 0a 20  autoinc-2.28 {. 
1220: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
1230: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 73 65 71  PDATE sqlite_seq
1240: 75 65 6e 63 65 20 53 45 54 20 73 65 71 3d 27 31  uence SET seq='1
1250: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37  2345678901234567
1260: 38 39 30 27 0a 20 20 20 20 20 20 57 48 45 52 45  890'.      WHERE
1270: 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20 20 20   name='t1';.    
1280: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1290: 41 4c 55 45 53 28 4e 55 4c 4c 2c 36 29 3b 0a 20  ALUES(NULL,6);. 
12a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
12b0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 32 33 35 20   t1;.  }.} {235 
12c0: 31 20 31 32 33 35 20 32 20 31 32 33 36 20 33 20  1 1235 2 1236 3 
12d0: 31 32 33 37 20 34 20 31 32 33 38 20 35 20 31 32  1237 4 1238 5 12
12e0: 33 39 20 36 7d 0a 64 6f 5f 74 65 73 74 20 61 75  39 6}.do_test au
12f0: 74 6f 69 6e 63 2d 32 2e 32 39 20 7b 0a 20 20 65  toinc-2.29 {.  e
1300: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1310: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
1320: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
1330: 7d 20 7b 74 31 20 31 32 33 39 7d 0a 0a 23 20 54  } {t1 1239}..# T
1340: 65 73 74 20 6d 75 6c 74 69 2d 72 6f 77 20 69 6e  est multi-row in
1350: 73 65 72 74 73 0a 23 0a 64 6f 5f 74 65 73 74 20  serts.#.do_test 
1360: 61 75 74 6f 69 6e 63 2d 32 2e 35 30 20 7b 0a 20  autoinc-2.50 {. 
1370: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
1380: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
1390: 45 52 45 20 79 3e 3d 33 3b 0a 20 20 20 20 49 4e  ERE y>=3;.    IN
13a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
13b0: 45 43 54 20 4e 55 4c 4c 2c 20 79 2b 32 20 46 52  ECT NULL, y+2 FR
13c0: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
13d0: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
13e0: 0a 7d 20 7b 32 33 35 20 31 20 31 32 33 35 20 32  .} {235 1 1235 2
13f0: 20 31 32 34 30 20 33 20 31 32 34 31 20 34 7d 0a   1240 3 1241 4}.
1400: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
1410: 32 2e 35 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.51 {.  execsql
1420: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1430: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75  FROM sqlite_sequ
1440: 65 6e 63 65 0a 20 20 7d 0a 7d 20 7b 74 31 20 31  ence.  }.} {t1 1
1450: 32 34 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  241}.do_test aut
1460: 6f 69 6e 63 2d 32 2e 35 32 20 7b 0a 20 20 65 78  oinc-2.52 {.  ex
1470: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
1480: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32  TE TEMP TABLE t2
1490: 20 41 53 20 53 45 4c 45 43 54 20 79 20 46 52 4f   AS SELECT y FRO
14a0: 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t1;.    INSERT
14b0: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
14c0: 4e 55 4c 4c 2c 20 79 2b 34 20 46 52 4f 4d 20 74  NULL, y+4 FROM t
14d0: 32 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  2;.    SELECT * 
14e0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
14f0: 32 33 35 20 31 20 31 32 33 35 20 32 20 31 32 34  235 1 1235 2 124
1500: 30 20 33 20 31 32 34 31 20 34 20 31 32 34 32 20  0 3 1241 4 1242 
1510: 35 20 31 32 34 33 20 36 20 31 32 34 34 20 37 20  5 1243 6 1244 7 
1520: 31 32 34 35 20 38 7d 0a 64 6f 5f 74 65 73 74 20  1245 8}.do_test 
1530: 61 75 74 6f 69 6e 63 2d 32 2e 35 33 20 7b 0a 20  autoinc-2.53 {. 
1540: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1550: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
1560: 69 74 65 5f 73 65 71 75 65 6e 63 65 0a 20 20 7d  ite_sequence.  }
1570: 0a 7d 20 7b 74 31 20 31 32 34 35 7d 0a 64 6f 5f  .} {t1 1245}.do_
1580: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 35  test autoinc-2.5
1590: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
15a0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
15b0: 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t1;.    INSERT I
15c0: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 4e 55  NTO t1 SELECT NU
15d0: 4c 4c 2c 20 79 20 46 52 4f 4d 20 74 32 3b 0a 20  LL, y FROM t2;. 
15e0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
15f0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 32 34 36   t1;.  }.} {1246
1600: 20 31 20 31 32 34 37 20 32 20 31 32 34 38 20 33   1 1247 2 1248 3
1610: 20 31 32 34 39 20 34 7d 0a 64 6f 5f 74 65 73 74   1249 4}.do_test
1620: 20 61 75 74 6f 69 6e 63 2d 32 2e 35 35 20 7b 0a   autoinc-2.55 {.
1630: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1640: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
1650: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 0a 20 20  lite_sequence.  
1660: 7d 0a 7d 20 7b 74 31 20 31 32 34 39 7d 0a 0a 23  }.} {t1 1249}..#
1670: 20 43 72 65 61 74 65 20 6d 75 6c 74 69 70 6c 65   Create multiple
1680: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
1690: 61 62 6c 65 73 2e 20 20 4d 61 6b 65 20 73 75 72  ables.  Make sur
16a0: 65 20 61 6c 6c 20 73 65 71 75 65 6e 63 65 73 20  e all sequences 
16b0: 61 72 65 0a 23 20 74 72 61 63 6b 65 64 20 73 65  are.# tracked se
16c0: 70 61 72 61 74 65 6c 79 20 61 6e 64 20 64 6f 20  parately and do 
16d0: 6e 6f 74 20 69 6e 74 65 72 66 65 72 65 20 77 69  not interfere wi
16e0: 74 68 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  th one another..
16f0: 23 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  #.do_test autoin
1700: 63 2d 32 2e 37 30 20 7b 0a 20 20 65 78 65 63 73  c-2.70 {.  execs
1710: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
1720: 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52 45 41  BLE t2;.    CREA
1730: 54 45 20 54 41 42 4c 45 20 74 32 28 64 2c 20 65  TE TABLE t2(d, e
1740: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1750: 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45 4d 45   KEY AUTOINCREME
1760: 4e 54 2c 20 66 29 3b 0a 20 20 20 20 49 4e 53 45  NT, f);.    INSE
1770: 52 54 20 49 4e 54 4f 20 74 32 28 64 29 20 56 41  RT INTO t2(d) VA
1780: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 53 45 4c  LUES(1);.    SEL
1790: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
17a0: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
17b0: 7d 20 7b 74 31 20 31 32 34 39 20 74 32 20 31 7d  } {t1 1249 t2 1}
17c0: 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63  .do_test autoinc
17d0: 2d 32 2e 37 31 20 7b 0a 20 20 65 78 65 63 73 71  -2.71 {.  execsq
17e0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
17f0: 4e 54 4f 20 74 32 28 64 29 20 56 41 4c 55 45 53  NTO t2(d) VALUES
1800: 28 32 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (2);.    SELECT 
1810: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
1820: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74  quence;.  }.} {t
1830: 31 20 31 32 34 39 20 74 32 20 32 7d 0a 64 6f 5f  1 1249 t2 2}.do_
1840: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 37  test autoinc-2.7
1850: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
1860: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1870: 74 31 28 78 29 20 56 41 4c 55 45 53 28 31 30 30  t1(x) VALUES(100
1880: 30 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  00);.    SELECT 
1890: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65  * FROM sqlite_se
18a0: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74  quence;.  }.} {t
18b0: 31 20 31 30 30 30 30 20 74 32 20 32 7d 0a 64 6f  1 10000 t2 2}.do
18c0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e  _test autoinc-2.
18d0: 37 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  73 {.  execsql {
18e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
18f0: 45 20 74 33 28 67 20 49 4e 54 45 47 45 52 20 50  E t3(g INTEGER P
1900: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
1910: 4e 43 52 45 4d 45 4e 54 2c 20 68 29 3b 0a 20 20  NCREMENT, h);.  
1920: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
1930: 28 68 29 20 56 41 4c 55 45 53 28 31 29 3b 0a 20  (h) VALUES(1);. 
1940: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1950: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
1960: 3b 0a 20 20 7d 0a 7d 20 7b 74 31 20 31 30 30 30  ;.  }.} {t1 1000
1970: 30 20 74 32 20 32 20 74 33 20 31 7d 0a 64 6f 5f  0 t2 2 t3 1}.do_
1980: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 32 2e 37  test autoinc-2.7
1990: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
19a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
19b0: 74 32 28 64 2c 65 29 20 56 41 4c 55 45 53 28 33  t2(d,e) VALUES(3
19c0: 2c 31 30 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,100);.    SELEC
19d0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
19e0: 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20  sequence;.  }.} 
19f0: 7b 74 31 20 31 30 30 30 30 20 74 32 20 31 30 30  {t1 10000 t2 100
1a00: 20 74 33 20 31 7d 0a 0a 0a 23 20 57 68 65 6e 20   t3 1}...# When 
1a10: 61 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20  a table with an 
1a20: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 73  AUTOINCREMENT is
1a30: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 63 6f   deleted, the co
1a40: 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 6e 74 72  rresponding entr
1a50: 79 0a 23 20 69 6e 20 74 68 65 20 53 51 4c 49 54  y.# in the SQLIT
1a60: 45 5f 53 45 51 55 45 4e 43 45 20 74 61 62 6c 65  E_SEQUENCE table
1a70: 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20   should also be 
1a80: 64 65 6c 65 74 65 64 2e 20 20 42 75 74 20 74 68  deleted.  But th
1a90: 65 20 53 51 4c 49 54 45 5f 53 45 51 55 45 4e 43  e SQLITE_SEQUENC
1aa0: 45 0a 23 20 74 61 62 6c 65 20 69 74 73 65 6c 66  E.# table itself
1ab0: 20 73 68 6f 75 6c 64 20 72 65 6d 61 69 6e 20 62   should remain b
1ac0: 65 68 69 6e 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  ehind..#.do_test
1ad0: 20 61 75 74 6f 69 6e 63 2d 33 2e 31 20 7b 0a 20   autoinc-3.1 {. 
1ae0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1af0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1b00: 65 5f 73 65 71 75 65 6e 63 65 7d 0a 7d 20 7b 74  e_sequence}.} {t
1b10: 31 20 74 32 20 74 33 7d 0a 64 6f 5f 74 65 73 74  1 t2 t3}.do_test
1b20: 20 61 75 74 6f 69 6e 63 2d 33 2e 32 20 7b 0a 20   autoinc-3.2 {. 
1b30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
1b40: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
1b50: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
1b60: 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  OM sqlite_sequen
1b70: 63 65 3b 0a 20 20 7d 0a 7d 20 7b 74 32 20 74 33  ce;.  }.} {t2 t3
1b80: 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e  }.do_test autoin
1b90: 63 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  c-3.3 {.  execsq
1ba0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
1bb0: 4c 45 20 74 33 3b 0a 20 20 20 20 53 45 4c 45 43  LE t3;.    SELEC
1bc0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
1bd0: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d  te_sequence;.  }
1be0: 0a 7d 20 7b 74 32 7d 0a 64 6f 5f 74 65 73 74 20  .} {t2}.do_test 
1bf0: 61 75 74 6f 69 6e 63 2d 33 2e 34 20 7b 0a 20 20  autoinc-3.4 {.  
1c00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
1c10: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20  OP TABLE t2;.   
1c20: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
1c30: 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  M sqlite_sequenc
1c40: 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 41  e;.  }.} {}..# A
1c50: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 6f 6e 20  UTOINCREMENT on 
1c60: 54 45 4d 50 20 74 61 62 6c 65 73 2e 0a 23 0a 64  TEMP tables..#.d
1c70: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 34  o_test autoinc-4
1c80: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1c90: 0a 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20 6e  .    SELECT 1, n
1ca0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
1cb0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
1cc0: 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20 20 20 53  e='table';.    S
1cd0: 45 4c 45 43 54 20 32 2c 20 6e 61 6d 65 20 46 52  ELECT 2, name FR
1ce0: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
1cf0: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
1d00: 3d 27 74 61 62 6c 65 27 3b 0a 20 20 7d 0a 7d 20  ='table';.  }.} 
1d10: 7b 31 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  {1 sqlite_sequen
1d20: 63 65 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  ce}.do_test auto
1d30: 69 6e 63 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  inc-4.2 {.  exec
1d40: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1d50: 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45   TABLE t1(x INTE
1d60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1d70: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 79  AUTOINCREMENT, y
1d80: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45  );.    CREATE TE
1d90: 4d 50 20 54 41 42 4c 45 20 74 33 28 61 20 49 4e  MP TABLE t3(a IN
1da0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1db0: 59 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c  Y AUTOINCREMENT,
1dc0: 20 62 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   b);.    SELECT 
1dd0: 31 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  1, name FROM sql
1de0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
1df0: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 20   type='table';. 
1e00: 20 20 20 53 45 4c 45 43 54 20 32 2c 20 6e 61 6d     SELECT 2, nam
1e10: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  e FROM sqlite_te
1e20: 6d 70 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  mp_master WHERE 
1e30: 74 79 70 65 3d 27 74 61 62 6c 65 27 3b 0a 20 20  type='table';.  
1e40: 7d 0a 7d 20 7b 31 20 73 71 6c 69 74 65 5f 73 65  }.} {1 sqlite_se
1e50: 71 75 65 6e 63 65 20 31 20 74 31 20 32 20 74 33  quence 1 t1 2 t3
1e60: 20 32 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e   2 sqlite_sequen
1e70: 63 65 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  ce}.do_test auto
1e80: 69 6e 63 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63  inc-4.3 {.  exec
1e90: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1ea0: 20 31 2c 20 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e   1, * FROM main.
1eb0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b  sqlite_sequence;
1ec0: 0a 20 20 20 20 53 45 4c 45 43 54 20 32 2c 20 2a  .    SELECT 2, *
1ed0: 20 46 52 4f 4d 20 74 65 6d 70 2e 73 71 6c 69 74   FROM temp.sqlit
1ee0: 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d 0a  e_sequence;.  }.
1ef0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 75 74  } {}.do_test aut
1f00: 6f 69 6e 63 2d 34 2e 34 20 7b 0a 20 20 65 78 65  oinc-4.4 {.  exe
1f10: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
1f20: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1f30: 28 31 30 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45  (10,1);.    INSE
1f40: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
1f50: 53 28 32 30 2c 32 29 3b 0a 20 20 20 20 49 4e 53  S(20,2);.    INS
1f60: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1f70: 45 53 28 4e 55 4c 4c 2c 33 29 3b 0a 20 20 20 20  ES(NULL,3);.    
1f80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
1f90: 41 4c 55 45 53 28 4e 55 4c 4c 2c 34 29 3b 0a 20  ALUES(NULL,4);. 
1fa0: 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62   }.} {}..ifcapab
1fb0: 6c 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64 6f  le compound {.do
1fc0: 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 34 2e  _test autoinc-4.
1fd0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
1fe0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1ff0: 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 41 4c 4c  ROM t1 UNION ALL
2000: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2010: 33 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 20 31  3;.  }.} {10 1 1
2020: 31 20 33 20 32 30 20 32 20 32 31 20 34 7d 0a 7d  1 3 20 2 21 4}.}
2030: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 63 6f   ;# ifcapable co
2040: 6d 70 6f 75 6e 64 0a 0a 64 6f 5f 74 65 73 74 20  mpound..do_test 
2050: 61 75 74 6f 69 6e 63 2d 34 2e 35 20 7b 0a 20 20  autoinc-4.5 {.  
2060: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2070: 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f 4d 20 6d  LECT 1, * FROM m
2080: 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  ain.sqlite_seque
2090: 6e 63 65 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  nce;.    SELECT 
20a0: 32 2c 20 2a 20 46 52 4f 4d 20 74 65 6d 70 2e 73  2, * FROM temp.s
20b0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a  qlite_sequence;.
20c0: 20 20 7d 0a 7d 20 7b 31 20 74 31 20 31 31 20 32    }.} {1 t1 11 2
20d0: 20 74 33 20 32 31 7d 0a 64 6f 5f 74 65 73 74 20   t3 21}.do_test 
20e0: 61 75 74 6f 69 6e 63 2d 34 2e 36 20 7b 0a 20 20  autoinc-4.6 {.  
20f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
2100: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
2110: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20  ECT * FROM t3;. 
2120: 20 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46     SELECT 1, * F
2130: 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  ROM main.sqlite_
2140: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 53 45  sequence;.    SE
2150: 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74  LECT 2, * FROM t
2160: 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  emp.sqlite_seque
2170: 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 31 20 74 31  nce;.  }.} {1 t1
2180: 20 32 31 20 32 20 74 33 20 32 31 7d 0a 64 6f 5f   21 2 t3 21}.do_
2190: 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 34 2e 37  test autoinc-4.7
21a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
21b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
21c0: 33 20 53 45 4c 45 43 54 20 78 2b 31 30 30 2c 20  3 SELECT x+100, 
21d0: 79 20 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20  y  FROM t1;.    
21e0: 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f 4d  SELECT 1, * FROM
21f0: 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65 71   main.sqlite_seq
2200: 75 65 6e 63 65 3b 0a 20 20 20 20 53 45 4c 45 43  uence;.    SELEC
2210: 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74 65 6d 70  T 2, * FROM temp
2220: 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  .sqlite_sequence
2230: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 74 31 20 32 31  ;.  }.} {1 t1 21
2240: 20 32 20 74 33 20 31 32 31 7d 0a 64 6f 5f 74 65   2 t3 121}.do_te
2250: 73 74 20 61 75 74 6f 69 6e 63 2d 34 2e 38 20 7b  st autoinc-4.8 {
2260: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2270: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a   DROP TABLE t3;.
2280: 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20      SELECT 1, * 
2290: 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65  FROM main.sqlite
22a0: 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 53  _sequence;.    S
22b0: 45 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20  ELECT 2, * FROM 
22c0: 74 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75  temp.sqlite_sequ
22d0: 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 31 20 74  ence;.  }.} {1 t
22e0: 31 20 32 31 7d 0a 64 6f 5f 74 65 73 74 20 61 75  1 21}.do_test au
22f0: 74 6f 69 6e 63 2d 34 2e 39 20 7b 0a 20 20 65 78  toinc-4.9 {.  ex
2300: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
2310: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32  TE TEMP TABLE t2
2320: 28 70 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (p INTEGER PRIMA
2330: 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43 52 45  RY KEY AUTOINCRE
2340: 4d 45 4e 54 2c 20 71 29 3b 0a 20 20 20 20 49 4e  MENT, q);.    IN
2350: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
2360: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
2370: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
2380: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 31 2c 20  ;.    SELECT 1, 
2390: 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69  * FROM main.sqli
23a0: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 20  te_sequence;.   
23b0: 20 53 45 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f   SELECT 2, * FRO
23c0: 4d 20 74 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65  M temp.sqlite_se
23d0: 71 75 65 6e 63 65 3b 0a 20 20 7d 0a 7d 20 7b 32  quence;.  }.} {2
23e0: 20 74 32 20 32 31 7d 0a 64 6f 5f 74 65 73 74 20   t2 21}.do_test 
23f0: 61 75 74 6f 69 6e 63 2d 34 2e 31 30 20 7b 0a 20  autoinc-4.10 {. 
2400: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
2410: 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20  ROP TABLE t2;.  
2420: 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52    SELECT 1, * FR
2430: 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73  OM main.sqlite_s
2440: 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 53 45 4c  equence;.    SEL
2450: 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74 65  ECT 2, * FROM te
2460: 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  mp.sqlite_sequen
2470: 63 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  ce;.  }.} {}..# 
2480: 4d 61 6b 65 20 73 75 72 65 20 41 55 54 4f 49 4e  Make sure AUTOIN
2490: 43 52 45 4d 45 4e 54 20 77 6f 72 6b 73 20 6f 6e  CREMENT works on
24a0: 20 41 54 54 41 43 48 2d 65 64 20 74 61 62 6c 65   ATTACH-ed table
24b0: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 75 74  s..#.do_test aut
24c0: 6f 69 6e 63 2d 35 2e 31 20 7b 0a 20 20 66 69 6c  oinc-5.1 {.  fil
24d0: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
24e0: 74 65 73 74 32 2e 64 62 0a 20 20 66 69 6c 65 20  test2.db.  file 
24f0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
2500: 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  st2.db-journal. 
2510: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
2520: 74 32 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  t2.db.  execsql 
2530: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2540: 4c 45 20 74 34 28 6d 20 49 4e 54 45 47 45 52 20  LE t4(m INTEGER 
2550: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f  PRIMARY KEY AUTO
2560: 49 4e 43 52 45 4d 45 4e 54 2c 20 6e 29 3b 0a 20  INCREMENT, n);. 
2570: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2580: 74 35 28 6f 2c 20 70 20 49 4e 54 45 47 45 52 20  t5(o, p INTEGER 
2590: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f  PRIMARY KEY AUTO
25a0: 49 4e 43 52 45 4d 45 4e 54 29 3b 0a 20 20 7d 20  INCREMENT);.  } 
25b0: 64 62 32 3b 0a 20 20 65 78 65 63 73 71 6c 20 7b  db2;.  execsql {
25c0: 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73  .    ATTACH 'tes
25d0: 74 32 2e 64 62 27 20 61 73 20 61 75 78 3b 0a 20  t2.db' as aux;. 
25e0: 20 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46     SELECT 1, * F
25f0: 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  ROM main.sqlite_
2600: 73 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 53 45  sequence;.    SE
2610: 4c 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74  LECT 2, * FROM t
2620: 65 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65  emp.sqlite_seque
2630: 6e 63 65 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  nce;.    SELECT 
2640: 33 2c 20 2a 20 46 52 4f 4d 20 61 75 78 2e 73 71  3, * FROM aux.sq
2650: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20  lite_sequence;. 
2660: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
2670: 61 75 74 6f 69 6e 63 2d 35 2e 32 20 7b 0a 20 20  autoinc-5.2 {.  
2680: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
2690: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
26a0: 55 45 53 28 4e 55 4c 4c 2c 31 29 3b 0a 20 20 20  UES(NULL,1);.   
26b0: 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52 4f   SELECT 1, * FRO
26c0: 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73 65  M main.sqlite_se
26d0: 71 75 65 6e 63 65 3b 0a 20 20 20 20 53 45 4c 45  quence;.    SELE
26e0: 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74 65 6d  CT 2, * FROM tem
26f0: 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  p.sqlite_sequenc
2700: 65 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 33 2c  e;.    SELECT 3,
2710: 20 2a 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c 69   * FROM aux.sqli
2720: 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20 7d  te_sequence;.  }
2730: 0a 7d 20 7b 33 20 74 34 20 31 7d 0a 64 6f 5f 74  .} {3 t4 1}.do_t
2740: 65 73 74 20 61 75 74 6f 69 6e 63 2d 35 2e 33 20  est autoinc-5.3 
2750: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2760: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
2770: 20 56 41 4c 55 45 53 28 31 30 30 2c 32 30 30 29   VALUES(100,200)
2780: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2790: 52 4f 4d 20 73 71 6c 69 74 65 5f 73 65 71 75 65  ROM sqlite_seque
27a0: 6e 63 65 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 74  nce.  } db2.} {t
27b0: 34 20 31 20 74 35 20 32 30 30 7d 0a 64 6f 5f 74  4 1 t5 200}.do_t
27c0: 65 73 74 20 61 75 74 6f 69 6e 63 2d 35 2e 34 20  est autoinc-5.4 
27d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
27e0: 20 20 53 45 4c 45 43 54 20 31 2c 20 2a 20 46 52    SELECT 1, * FR
27f0: 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f 73  OM main.sqlite_s
2800: 65 71 75 65 6e 63 65 3b 0a 20 20 20 20 53 45 4c  equence;.    SEL
2810: 45 43 54 20 32 2c 20 2a 20 46 52 4f 4d 20 74 65  ECT 2, * FROM te
2820: 6d 70 2e 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  mp.sqlite_sequen
2830: 63 65 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 33  ce;.    SELECT 3
2840: 2c 20 2a 20 46 52 4f 4d 20 61 75 78 2e 73 71 6c  , * FROM aux.sql
2850: 69 74 65 5f 73 65 71 75 65 6e 63 65 3b 0a 20 20  ite_sequence;.  
2860: 7d 0a 7d 20 7b 33 20 74 34 20 31 20 33 20 74 35  }.} {3 t4 1 3 t5
2870: 20 32 30 30 7d 0a 0a 23 20 52 65 71 75 69 72 65   200}..# Require
2880: 6d 65 6e 74 20 52 45 51 30 30 33 31 30 3a 20 20  ment REQ00310:  
2890: 4d 61 6b 65 20 73 75 72 65 20 61 6e 20 69 6e 73  Make sure an ins
28a0: 65 72 74 20 66 61 69 6c 73 20 69 66 20 74 68 65  ert fails if the
28b0: 20 73 65 71 75 65 6e 63 65 20 69 73 0a 23 20 61   sequence is.# a
28c0: 6c 72 65 61 64 79 20 61 74 20 69 74 73 20 6d 61  lready at its ma
28d0: 78 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 23 0a 64  ximum value..#.d
28e0: 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d 36  o_test autoinc-6
28f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2900: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2910: 45 20 74 36 28 76 20 49 4e 54 45 47 45 52 20 50  E t6(v INTEGER P
2920: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
2930: 4e 43 52 45 4d 45 4e 54 2c 20 77 29 3b 0a 20 20  NCREMENT, w);.  
2940: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
2950: 20 56 41 4c 55 45 53 28 39 32 32 33 33 37 32 30   VALUES(92233720
2960: 33 36 38 35 34 37 37 35 38 30 37 2c 31 29 3b 0a  36854775807,1);.
2970: 20 20 20 20 53 45 4c 45 43 54 20 73 65 71 20 46      SELECT seq F
2980: 52 4f 4d 20 6d 61 69 6e 2e 73 71 6c 69 74 65 5f  ROM main.sqlite_
2990: 73 65 71 75 65 6e 63 65 20 57 48 45 52 45 20 6e  sequence WHERE n
29a0: 61 6d 65 3d 27 74 36 27 3b 0a 20 20 7d 0a 7d 20  ame='t6';.  }.} 
29b0: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
29c0: 38 30 37 0a 64 6f 5f 74 65 73 74 20 61 75 74 6f  807.do_test auto
29d0: 69 6e 63 2d 36 2e 32 20 7b 0a 20 20 63 61 74 63  inc-6.2 {.  catc
29e0: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
29f0: 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53  T INTO t6 VALUES
2a00: 28 4e 55 4c 4c 2c 31 29 3b 0a 20 20 7d 0a 7d 20  (NULL,1);.  }.} 
2a10: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
2a20: 66 75 6c 6c 7d 7d 0a 0a 23 20 41 6c 6c 6f 77 20  full}}..# Allow 
2a30: 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  the AUTOINCREMEN
2a40: 54 20 6b 65 79 77 6f 72 64 20 69 6e 73 69 64 65  T keyword inside
2a50: 20 74 68 65 20 70 61 72 65 6e 74 68 65 73 65 73   the parentheses
2a60: 0a 23 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65  .# on a separate
2a70: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 64 65 73   PRIMARY KEY des
2a80: 69 67 6e 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 74  ignation..#.do_t
2a90: 65 73 74 20 61 75 74 6f 69 6e 63 2d 37 2e 31 20  est autoinc-7.1 
2aa0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2ab0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2ac0: 37 28 78 20 49 4e 54 45 47 45 52 2c 20 79 20 52  7(x INTEGER, y R
2ad0: 45 41 4c 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  EAL, PRIMARY KEY
2ae0: 28 78 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  (x AUTOINCREMENT
2af0: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    INSERT I
2b00: 4e 54 4f 20 74 37 28 79 29 20 56 41 4c 55 45 53  NTO t7(y) VALUES
2b10: 28 31 32 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  (123);.    INSER
2b20: 54 20 49 4e 54 4f 20 74 37 28 79 29 20 56 41 4c  T INTO t7(y) VAL
2b30: 55 45 53 28 32 33 34 29 3b 0a 20 20 20 20 44 45  UES(234);.    DE
2b40: 4c 45 54 45 20 46 52 4f 4d 20 74 37 3b 0a 20 20  LETE FROM t7;.  
2b50: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
2b60: 28 79 29 20 56 41 4c 55 45 53 28 33 34 35 29 3b  (y) VALUES(345);
2b70: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2b80: 4f 4d 20 74 37 3b 0a 20 20 7d 0a 7d 20 7b 33 20  OM t7;.  }.} {3 
2b90: 33 34 35 7d 0a 0a 23 20 54 65 73 74 20 74 68 61  345}..# Test tha
2ba0: 74 20 69 66 20 74 68 65 20 41 55 54 4f 49 4e 43  t if the AUTOINC
2bb0: 52 45 4d 45 4e 54 20 69 73 20 61 70 70 6c 69 65  REMENT is applie
2bc0: 64 20 74 6f 20 61 20 6e 6f 6e 20 69 6e 74 65 67  d to a non integ
2bd0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 23  er primary key.#
2be0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
2bf0: 67 65 20 69 73 20 73 65 6e 73 69 62 6c 65 2e 0a  ge is sensible..
2c00: 64 6f 5f 74 65 73 74 20 61 75 74 6f 69 6e 63 2d  do_test autoinc-
2c10: 37 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  7.2 {.  catchsql
2c20: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
2c30: 42 4c 45 20 74 38 28 78 20 54 45 58 54 20 50 52  BLE t8(x TEXT PR
2c40: 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e  IMARY KEY AUTOIN
2c50: 43 52 45 4d 45 4e 54 29 3b 0a 20 20 7d 0a 7d 20  CREMENT);.  }.} 
2c60: 7b 31 20 7b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  {1 {AUTOINCREMEN
2c70: 54 20 69 73 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65  T is only allowe
2c80: 64 20 6f 6e 20 61 6e 20 49 4e 54 45 47 45 52 20  d on an INTEGER 
2c90: 50 52 49 4d 41 52 59 20 4b 45 59 7d 7d 0a 0a 63  PRIMARY KEY}}..c
2ca0: 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d  atch {db2 close}
2cb0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.