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

Artifact 84e3d0fe9f12d0d2ac852465c6f8450aea0d6f43:


0000: 23 20 32 30 30 37 20 41 70 72 69 6c 20 36 0a 23  # 2007 April 6.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 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 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 74 6f 20 76 65 72 69 66 79 20 64 61 74 61 62 61  to verify databa
01d0: 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 0a  se file format..
01e0: 23 0a 23 20 24 49 64 3a 20 66 69 6c 65 66 6d 74  #.# $Id: filefmt
01f0: 2e 74 65 73 74 2c 76 20 31 2e 33 20 32 30 30 39  .test,v 1.3 2009
0200: 2f 30 36 2f 31 38 20 31 31 3a 33 34 3a 34 33 20  /06/18 11:34:43 
0210: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 64 62 20 63 6c 6f 73 65  ter.tcl.db close
0260: 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f  .file delete -fo
0270: 72 63 65 20 74 65 73 74 2e 64 62 20 74 65 73 74  rce test.db test
0280: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 23 20 44  .db-journal..# D
0290: 61 74 61 62 61 73 65 20 62 65 67 69 6e 73 20 77  atabase begins w
02a0: 69 74 68 20 76 61 6c 69 64 20 31 36 2d 62 79 74  ith valid 16-byt
02b0: 65 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 2e  e header string.
02c0: 0a 23 0a 64 6f 5f 74 65 73 74 20 66 69 6c 65 66  .#.do_test filef
02d0: 6d 74 2d 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  mt-1.1 {.  sqlit
02e0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
02f0: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
0300: 54 41 42 4c 45 20 74 31 28 78 29 7d 0a 20 20 64  TABLE t1(x)}.  d
0310: 62 20 63 6c 6f 73 65 0a 20 20 68 65 78 69 6f 5f  b close.  hexio_
0320: 72 65 61 64 20 74 65 73 74 2e 64 62 20 30 20 31  read test.db 0 1
0330: 36 0a 7d 20 7b 35 33 35 31 34 43 36 39 37 34 36  6.} {53514C69746
0340: 35 32 30 36 36 36 46 37 32 36 44 36 31 37 34 32  520666F726D61742
0350: 30 33 33 30 30 7d 0a 0a 23 20 49 66 20 74 68 65  03300}..# If the
0360: 20 31 36 2d 62 79 74 65 20 68 65 61 64 65 72 20   16-byte header 
0370: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20  is changed, the 
0380: 66 69 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 6f 70  file will not op
0390: 65 6e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 69 6c  en.#.do_test fil
03a0: 65 66 6d 74 2d 31 2e 32 20 7b 0a 20 20 68 65 78  efmt-1.2 {.  hex
03b0: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
03c0: 20 30 20 35 34 0a 20 20 73 65 74 20 78 20 5b 63   0 54.  set x [c
03d0: 61 74 63 68 20 7b 73 71 6c 69 74 65 33 20 64 62  atch {sqlite3 db
03e0: 20 74 65 73 74 2e 64 62 7d 20 65 72 72 5d 0a 20   test.db} err]. 
03f0: 20 6c 61 70 70 65 6e 64 20 78 20 24 65 72 72 0a   lappend x $err.
0400: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0410: 20 66 69 6c 65 66 6d 74 2d 31 2e 33 20 7b 0a 20   filefmt-1.3 {. 
0420: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0430: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0440: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0450: 65 72 0a 20 20 7d 0a 7d 20 7b 31 20 7b 66 69 6c  er.  }.} {1 {fil
0460: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
0470: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
0480: 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 69  ase}}.do_test fi
0490: 6c 65 66 6d 74 2d 31 2e 34 20 7b 0a 20 20 64 62  lefmt-1.4 {.  db
04a0: 20 63 6c 6f 73 65 0a 20 20 68 65 78 69 6f 5f 77   close.  hexio_w
04b0: 72 69 74 65 20 74 65 73 74 2e 64 62 20 30 20 35  rite test.db 0 5
04c0: 33 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  3.  sqlite3 db t
04d0: 65 73 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71  est.db.  catchsq
04e0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
04f0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c  ount(*) FROM sql
0500: 69 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d  ite_master.  }.}
0510: 20 7b 30 20 31 7d 0a 0a 23 20 54 68 65 20 70 61   {0 1}..# The pa
0520: 67 65 2d 73 69 7a 65 20 69 73 20 73 74 6f 72 65  ge-size is store
0530: 64 20 61 74 20 6f 66 66 73 65 74 20 31 36 0a 23  d at offset 16.#
0540: 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72  .ifcapable pager
0550: 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 66 6f 72  _pragmas {.  for
0560: 65 61 63 68 20 70 61 67 65 73 69 7a 65 20 7b 35  each pagesize {5
0570: 31 32 20 31 30 32 34 20 32 30 34 38 20 34 30 39  12 1024 2048 409
0580: 36 20 38 31 39 32 20 31 36 33 38 34 20 33 32 37  6 8192 16384 327
0590: 36 38 7d 20 7b 0a 20 20 20 20 20 69 66 20 7b 5b  68} {.     if {[
05a0: 69 6e 66 6f 20 65 78 69 73 74 73 20 53 51 4c 49  info exists SQLI
05b0: 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45  TE_MAX_PAGE_SIZE
05c0: 5d 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 24  ].          && $
05d0: 70 61 67 65 73 69 7a 65 3e 24 53 51 4c 49 54 45  pagesize>$SQLITE
05e0: 5f 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 7d 20  _MAX_PAGE_SIZE} 
05f0: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 64 6f  continue.     do
0600: 5f 74 65 73 74 20 66 69 6c 65 66 6d 74 2d 31 2e  _test filefmt-1.
0610: 35 2e 24 70 61 67 65 73 69 7a 65 2e 31 20 7b 0a  5.$pagesize.1 {.
0620: 20 20 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a         db close.
0630: 20 20 20 20 20 20 20 66 69 6c 65 20 64 65 6c 65         file dele
0640: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64  te -force test.d
0650: 62 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  b.       sqlite3
0660: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
0670: 20 20 20 64 62 20 65 76 61 6c 20 22 50 52 41 47     db eval "PRAG
0680: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f  MA auto_vacuum=O
0690: 46 46 22 0a 20 20 20 20 20 20 20 64 62 20 65 76  FF".       db ev
06a0: 61 6c 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f  al "PRAGMA page_
06b0: 73 69 7a 65 3d 24 70 61 67 65 73 69 7a 65 22 0a  size=$pagesize".
06c0: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
06d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
06e0: 78 29 7d 0a 20 20 20 20 20 20 20 66 69 6c 65 20  x)}.       file 
06f0: 73 69 7a 65 20 74 65 73 74 2e 64 62 0a 20 20 20  size test.db.   
0700: 20 20 7d 20 5b 65 78 70 72 20 24 70 61 67 65 73    } [expr $pages
0710: 69 7a 65 2a 32 5d 0a 20 20 20 20 20 64 6f 5f 74  ize*2].     do_t
0720: 65 73 74 20 66 69 6c 65 66 6d 74 2d 31 2e 35 2e  est filefmt-1.5.
0730: 24 70 61 67 65 73 69 7a 65 2e 32 20 7b 0a 20 20  $pagesize.2 {.  
0740: 20 20 20 20 20 68 65 78 69 6f 5f 67 65 74 5f 69       hexio_get_i
0750: 6e 74 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 74  nt [hexio_read t
0760: 65 73 74 2e 64 62 20 31 36 20 32 5d 0a 20 20 20  est.db 16 2].   
0770: 20 20 7d 20 24 70 61 67 65 73 69 7a 65 0a 20 20    } $pagesize.  
0780: 7d 0a 7d 0a 0a 23 20 54 68 65 20 70 61 67 65 2d  }.}..# The page-
0790: 73 69 7a 65 20 6d 75 73 74 20 62 65 20 61 20 70  size must be a p
07a0: 6f 77 65 72 20 6f 66 20 32 0a 23 0a 64 6f 5f 74  ower of 2.#.do_t
07b0: 65 73 74 20 66 69 6c 65 66 6d 74 2d 31 2e 36 20  est filefmt-1.6 
07c0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 68  {.  db close.  h
07d0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
07e0: 64 62 20 31 36 20 5b 68 65 78 69 6f 5f 72 65 6e  db 16 [hexio_ren
07f0: 64 65 72 5f 69 6e 74 31 36 20 31 30 32 35 5d 0a  der_int16 1025].
0800: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
0810: 74 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  t.db.  catchsql 
0820: 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f  {.     SELECT co
0830: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69  unt(*) FROM sqli
0840: 74 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20  te_master.  }.} 
0850: 7b 31 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72  {1 {file is encr
0860: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
0870: 61 20 64 61 74 61 62 61 73 65 7d 7d 0a 0a 0a 23  a database}}...#
0880: 20 54 68 65 20 70 61 67 65 2d 73 69 7a 65 20 6d   The page-size m
0890: 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
08a0: 35 31 32 20 62 79 74 65 73 0a 23 0a 64 6f 5f 74  512 bytes.#.do_t
08b0: 65 73 74 20 66 69 6c 65 66 6d 74 2d 31 2e 37 20  est filefmt-1.7 
08c0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 68  {.  db close.  h
08d0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
08e0: 64 62 20 31 36 20 5b 68 65 78 69 6f 5f 72 65 6e  db 16 [hexio_ren
08f0: 64 65 72 5f 69 6e 74 31 36 20 32 35 36 5d 0a 20  der_int16 256]. 
0900: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0910: 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  .db.  catchsql {
0920: 0a 20 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  .     SELECT cou
0930: 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74  nt(*) FROM sqlit
0940: 65 5f 6d 61 73 74 65 72 0a 20 20 7d 0a 7d 20 7b  e_master.  }.} {
0950: 31 20 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79  1 {file is encry
0960: 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61  pted or is not a
0970: 20 64 61 74 61 62 61 73 65 7d 7d 0a 0a 23 20 55   database}}..# U
0980: 73 61 62 6c 65 20 73 70 61 63 65 20 70 65 72 20  sable space per 
0990: 70 61 67 65 20 28 70 61 67 65 2d 73 69 7a 65 20  page (page-size 
09a0: 6d 69 6e 75 73 20 75 6e 75 73 65 64 20 73 70 61  minus unused spa
09b0: 63 65 20 70 65 72 20 70 61 67 65 29 0a 23 20 6d  ce per page).# m
09c0: 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
09d0: 34 38 30 20 62 79 74 65 73 0a 23 0a 69 66 63 61  480 bytes.#.ifca
09e0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
09f0: 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  mas {.  do_test 
0a00: 66 69 6c 65 66 6d 74 2d 31 2e 38 20 7b 0a 20 20  filefmt-1.8 {.  
0a10: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66    db close.    f
0a20: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
0a30: 65 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73 71  e test.db.    sq
0a40: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
0a50: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52  .    db eval {PR
0a60: 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d 35  AGMA page_size=5
0a70: 31 32 3b 20 43 52 45 41 54 45 20 54 41 42 4c 45  12; CREATE TABLE
0a80: 20 74 31 28 78 29 7d 0a 20 20 20 20 64 62 20 63   t1(x)}.    db c
0a90: 6c 6f 73 65 0a 20 20 20 20 68 65 78 69 6f 5f 77  lose.    hexio_w
0aa0: 72 69 74 65 20 74 65 73 74 2e 64 62 20 32 30 20  rite test.db 20 
0ab0: 32 31 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  21.    sqlite3 d
0ac0: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 63 61  b test.db.    ca
0ad0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  tchsql {.       
0ae0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0af0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0b00: 65 72 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  er.    }.  } {1 
0b10: 7b 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74  {file is encrypt
0b20: 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64  ed or is not a d
0b30: 61 74 61 62 61 73 65 7d 7d 0a 7d 0a 0a 0a 66 69  atabase}}.}...fi
0b40: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.