Hex Artifact Content
Not logged in

Artifact 89e594d6c0dd9dc04f368aaaed983688c6cd8313:

File src/schema.c part of check-in [2dffce041d] - Add the ability to detect file changes using only the mtime. This is turned on using the "fossil setting mtime-changes ON" command. It is off by default, but it does make many operations go much faster, especially on large repositories, so we might want to start turning it on by default. by drh on 2008-12-06 18:02:21.

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68  (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76  lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c  ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20  l be useful,.** 
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a  ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54  * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55   A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20  RPOSE.  See the 
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50  GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c  ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20  d have received 
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e  a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e  .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72  g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69  ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65  te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20  ation, Inc., 59 
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53  Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73  uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31  ton, MA  02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20  307, USA..**.** 
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69  Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20  nformation:.**  
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a   drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68  *   http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a  waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0360: 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 66 69 6c  .** .** This fil
0370: 65 20 63 6f 6e 74 61 69 6e 73 20 73 74 72 69 6e  e contains strin
0380: 67 20 63 6f 6e 73 74 61 6e 74 73 20 74 68 61 74  g constants that
0390: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 64   implement the d
03a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
03b0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e  */.#include "con
03c0: 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  fig.h".#include 
03d0: 22 73 63 68 65 6d 61 2e 68 22 0a 0a 2f 2a 0a 2a  "schema.h"../*.*
03e0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 73  * The database s
03f0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 7e 2f  chema for the ~/
0400: 2e 66 6f 73 73 69 6c 20 63 6f 6e 66 69 67 75 72  .fossil configur
0410: 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 2e 0a  ation database..
0420: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 7a 43  */.const char zC
0430: 6f 6e 66 69 67 53 63 68 65 6d 61 5b 5d 20 3d 20  onfigSchema[] = 
0440: 0a 40 20 2d 2d 20 54 68 69 73 20 66 69 6c 65 20  .@ -- This file 
0450: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 63 68  contains the sch
0460: 65 6d 61 20 66 6f 72 20 74 68 65 20 64 61 74 61  ema for the data
0470: 62 61 73 65 20 74 68 61 74 20 69 73 20 6b 65 70  base that is kep
0480: 74 20 69 6e 20 74 68 65 0a 40 20 2d 2d 20 7e 2f  t in the.@ -- ~/
0490: 2e 66 6f 73 73 69 6c 20 66 69 6c 65 20 61 6e 64  .fossil file and
04a0: 20 74 68 61 74 20 73 74 6f 72 65 73 20 69 6e 66   that stores inf
04b0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
04c0: 68 65 20 75 73 65 72 73 20 73 65 74 75 70 2e 0a  he users setup..
04d0: 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41  @ --.@ CREATE TA
04e0: 42 4c 45 20 67 6c 6f 62 61 6c 5f 63 6f 6e 66 69  BLE global_confi
04f0: 67 28 0a 40 20 20 20 6e 61 6d 65 20 54 45 58 54  g(.@   name TEXT
0500: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 40 20   PRIMARY KEY,.@ 
0510: 20 20 76 61 6c 75 65 20 54 45 58 54 0a 40 20 29    value TEXT.@ )
0520: 3b 0a 3b 0a 0a 23 69 66 20 49 4e 54 45 52 46 41  ;.;..#if INTERFA
0530: 43 45 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  CE./*.** The con
0540: 74 65 6e 74 20 74 61 62 6c 65 73 20 68 61 76 65  tent tables have
0550: 20 61 20 63 6f 6e 74 65 6e 74 20 76 65 72 73 69   a content versi
0560: 6f 6e 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  on number which 
0570: 72 61 72 65 6c 79 0a 2a 2a 20 63 68 61 6e 67 65  rarely.** change
0580: 73 2e 20 20 54 68 65 20 61 75 78 20 74 61 62 6c  s.  The aux tabl
0590: 65 73 20 68 61 76 65 20 61 6e 20 61 72 62 69 74  es have an arbit
05a0: 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rary version num
05b0: 62 65 72 20 28 74 79 70 69 63 61 6c 6c 79 0a 2a  ber (typically.*
05c0: 2a 20 61 20 64 61 74 65 29 20 77 68 69 63 68 20  * a date) which 
05d0: 63 61 6e 20 63 68 61 6e 67 65 20 66 72 65 71 75  can change frequ
05e0: 65 6e 74 6c 79 2e 20 20 57 68 65 6e 20 74 68 65  ently.  When the
05f0: 20 63 6f 6e 74 65 6e 74 20 73 63 68 65 6d 61 20   content schema 
0600: 63 68 61 6e 67 65 73 2c 0a 2a 2a 20 77 65 20 68  changes,.** we h
0610: 61 76 65 20 74 6f 20 65 78 65 63 75 74 65 20 73  ave to execute s
0620: 70 65 63 69 61 6c 20 70 72 6f 63 65 64 75 72 65  pecial procedure
0630: 73 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20  s to update the 
0640: 73 63 68 65 6d 61 2e 20 20 57 68 65 6e 0a 2a 2a  schema.  When.**
0650: 20 74 68 65 20 61 75 78 20 73 63 68 65 6d 61 20   the aux schema 
0660: 63 68 61 6e 67 65 73 2c 20 61 6c 6c 20 77 65 20  changes, all we 
0670: 6e 65 65 64 20 74 6f 20 64 6f 20 69 73 20 72 65  need to do is re
0680: 62 75 69 6c 64 20 74 68 65 20 64 61 74 61 62 61  build the databa
0690: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  se..*/.#define C
06a0: 4f 4e 54 45 4e 54 5f 53 43 48 45 4d 41 20 20 22  ONTENT_SCHEMA  "
06b0: 31 22 0a 23 64 65 66 69 6e 65 20 41 55 58 5f 53  1".#define AUX_S
06c0: 43 48 45 4d 41 20 20 20 20 20 20 22 32 30 30 36  CHEMA      "2006
06d0: 2d 31 32 2d 32 33 22 0a 0a 23 65 6e 64 69 66 20  -12-23"..#endif 
06e0: 2f 2a 20 49 4e 54 45 52 46 41 43 45 20 2a 2f 0a  /* INTERFACE */.
06f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
0700: 6d 61 20 66 6f 72 20 61 20 72 65 70 6f 73 69 74  ma for a reposit
0710: 6f 72 79 20 64 61 74 61 62 61 73 65 2e 20 20 0a  ory database.  .
0720: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 31 5b 5d 20  **.** Schema1[] 
0730: 63 6f 6e 74 61 69 6e 73 20 70 61 72 74 73 20 6f  contains parts o
0740: 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 68 61  f the schema tha
0750: 74 20 61 72 65 20 66 69 78 65 64 20 61 6e 64 20  t are fixed and 
0760: 75 6e 63 68 61 6e 67 69 6e 67 0a 2a 2a 20 61 63  unchanging.** ac
0770: 72 6f 73 73 20 76 65 72 73 69 6f 6e 73 2e 20 20  ross versions.  
0780: 53 63 68 65 6d 61 32 5b 5d 20 63 6f 6e 74 61 69  Schema2[] contai
0790: 6e 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  ns parts of the 
07a0: 73 63 68 65 6d 61 20 74 68 61 74 20 63 61 6e 0a  schema that can.
07b0: 2a 2a 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ** change from o
07c0: 6e 65 20 76 65 72 73 69 6f 6e 20 74 6f 20 74 68  ne version to th
07d0: 65 20 6e 65 78 74 2e 20 20 54 68 65 20 69 6e 66  e next.  The inf
07e0: 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53 63 68 65  ormation in Sche
07f0: 6d 61 32 5b 5d 0a 2a 2a 20 63 61 6e 20 62 65 20  ma2[].** can be 
0800: 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  reconstructed fr
0810: 6f 6d 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  om the informati
0820: 6f 6e 20 69 6e 20 53 63 68 65 6d 61 31 5b 5d 2e  on in Schema1[].
0830: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 7a  .*/.const char z
0840: 52 65 70 6f 73 69 74 6f 72 79 53 63 68 65 6d 61  RepositorySchema
0850: 31 5b 5d 20 3d 20 0a 40 20 2d 2d 20 54 68 65 20  1[] = .@ -- The 
0860: 42 4c 4f 42 20 61 6e 64 20 44 45 4c 54 41 20 74  BLOB and DELTA t
0870: 61 62 6c 65 73 20 63 6f 6e 74 61 69 6e 20 61 6c  ables contain al
0880: 6c 20 72 65 63 6f 72 64 73 20 68 65 6c 64 20 69  l records held i
0890: 6e 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  n the repository
08a0: 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20 54 68 65 20  ..@ --.@ -- The 
08b0: 42 4c 4f 42 2e 43 4f 4e 54 45 4e 54 20 63 6f 6c  BLOB.CONTENT col
08c0: 75 6d 6e 20 69 73 20 61 6c 77 61 79 73 20 63 6f  umn is always co
08d0: 6d 70 72 65 73 73 65 64 20 75 73 69 6e 67 20 6c  mpressed using l
08e0: 69 62 7a 2e 20 20 54 68 69 73 0a 40 20 2d 2d 20  ibz.  This.@ -- 
08f0: 63 6f 6c 75 6d 6e 20 6d 69 67 68 74 20 68 6f 6c  column might hol
0900: 64 20 74 68 65 20 66 75 6c 6c 20 74 65 78 74 20  d the full text 
0910: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 72  of the record or
0920: 20 69 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 40   it might hold.@
0930: 20 2d 2d 20 61 20 64 65 6c 74 61 20 74 68 61 74   -- a delta that
0940: 20 69 73 20 61 62 6c 65 20 74 6f 20 72 65 63 6f   is able to reco
0950: 6e 73 74 72 75 63 74 20 74 68 65 20 72 65 63 6f  nstruct the reco
0960: 72 64 20 66 72 6f 6d 20 73 6f 6d 65 20 6f 74 68  rd from some oth
0970: 65 72 0a 40 20 2d 2d 20 72 65 63 6f 72 64 2e 20  er.@ -- record. 
0980: 20 49 66 20 42 4c 4f 42 2e 43 4f 4e 54 45 4e 54   If BLOB.CONTENT
0990: 20 68 6f 6c 64 73 20 61 20 64 65 6c 74 61 2c 20   holds a delta, 
09a0: 74 68 65 6e 20 61 20 44 45 4c 54 41 20 74 61 62  then a DELTA tab
09b0: 6c 65 20 65 6e 74 72 79 0a 40 20 2d 2d 20 77 69  le entry.@ -- wi
09c0: 6c 6c 20 65 78 69 73 74 20 66 6f 72 20 74 68 65  ll exist for the
09d0: 20 72 65 63 6f 72 64 20 61 6e 64 20 74 68 61 74   record and that
09e0: 20 65 6e 74 72 79 20 77 69 6c 6c 20 70 6f 69 6e   entry will poin
09f0: 74 20 74 6f 20 61 6e 6f 74 68 65 72 0a 40 20 2d  t to another.@ -
0a00: 2d 20 65 6e 74 72 79 20 74 68 61 74 20 68 6f 6c  - entry that hol
0a10: 64 73 20 74 68 65 20 73 6f 75 72 63 65 20 6f 66  ds the source of
0a20: 20 74 68 65 20 64 65 6c 74 61 2e 20 20 44 65 6c   the delta.  Del
0a30: 74 61 73 20 63 61 6e 20 62 65 20 63 68 61 69 6e  tas can be chain
0a40: 65 64 2e 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54  ed..@ --.@ CREAT
0a50: 45 20 54 41 42 4c 45 20 62 6c 6f 62 28 0a 40 20  E TABLE blob(.@ 
0a60: 20 20 72 69 64 20 49 4e 54 45 47 45 52 20 50 52    rid INTEGER PR
0a70: 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20 20 20  IMARY KEY,      
0a80: 20 20 2d 2d 20 52 65 63 6f 72 64 20 49 44 0a 40    -- Record ID.@
0a90: 20 20 20 72 63 76 69 64 20 49 4e 54 45 47 45 52     rcvid INTEGER
0aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0ab0: 20 20 20 2d 2d 20 4f 72 69 67 69 6e 20 6f 66 20     -- Origin of 
0ac0: 74 68 69 73 20 72 65 63 6f 72 64 0a 40 20 20 20  this record.@   
0ad0: 73 69 7a 65 20 49 4e 54 45 47 45 52 2c 20 20 20  size INTEGER,   
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 2d 2d 20 53 69 7a 65 20 6f 66 20 63 6f 6e 74 65  -- Size of conte
0b00: 6e 74 2e 20 2d 31 20 66 6f 72 20 61 20 70 68 61  nt. -1 for a pha
0b10: 6e 74 6f 6d 2e 0a 40 20 20 20 75 75 69 64 20 54  ntom..@   uuid T
0b20: 45 58 54 20 55 4e 49 51 55 45 20 4e 4f 54 20 4e  EXT UNIQUE NOT N
0b30: 55 4c 4c 2c 20 20 20 20 20 20 2d 2d 20 53 48 41  ULL,      -- SHA
0b40: 31 20 68 61 73 68 20 6f 66 20 74 68 65 20 63 6f  1 hash of the co
0b50: 6e 74 65 6e 74 0a 40 20 20 20 63 6f 6e 74 65 6e  ntent.@   conten
0b60: 74 20 42 4c 4f 42 2c 20 20 20 20 20 20 20 20 20  t BLOB,         
0b70: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 43 6f 6d            -- Com
0b80: 70 72 65 73 73 65 64 20 63 6f 6e 74 65 6e 74 20  pressed content 
0b90: 6f 66 20 74 68 69 73 20 72 65 63 6f 72 64 0a 40  of this record.@
0ba0: 20 20 20 43 48 45 43 4b 28 20 6c 65 6e 67 74 68     CHECK( length
0bb0: 28 75 75 69 64 29 3d 3d 34 30 20 41 4e 44 20 72  (uuid)==40 AND r
0bc0: 69 64 3e 30 20 29 0a 40 20 29 3b 0a 40 20 43 52  id>0 ).@ );.@ CR
0bd0: 45 41 54 45 20 54 41 42 4c 45 20 64 65 6c 74 61  EATE TABLE delta
0be0: 28 0a 40 20 20 20 72 69 64 20 49 4e 54 45 47 45  (.@   rid INTEGE
0bf0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20  R PRIMARY KEY,  
0c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
0c10: 2d 20 52 65 63 6f 72 64 20 49 44 0a 40 20 20 20  - Record ID.@   
0c20: 73 72 63 69 64 20 49 4e 54 45 47 45 52 20 4e 4f  srcid INTEGER NO
0c30: 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45  T NULL REFERENCE
0c40: 53 20 62 6c 6f 62 20 20 20 2d 2d 20 52 65 63 6f  S blob   -- Reco
0c50: 72 64 20 68 6f 6c 64 69 6e 67 20 73 6f 75 72 63  rd holding sourc
0c60: 65 20 64 6f 63 75 6d 65 6e 74 0a 40 20 29 3b 0a  e document.@ );.
0c70: 40 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 64  @ CREATE INDEX d
0c80: 65 6c 74 61 5f 69 31 20 4f 4e 20 64 65 6c 74 61  elta_i1 ON delta
0c90: 28 73 72 63 69 64 29 3b 0a 40 0a 40 20 2d 2d 20  (srcid);.@.@ -- 
0ca0: 57 68 65 6e 65 76 65 72 20 6e 65 77 20 62 6c 6f  Whenever new blo
0cb0: 62 73 20 61 72 65 20 72 65 63 65 69 76 65 64 20  bs are received 
0cc0: 69 6e 74 6f 20 74 68 65 20 72 65 70 6f 73 69 74  into the reposit
0cd0: 6f 72 79 2c 20 61 6e 20 65 6e 74 72 79 0a 40 20  ory, an entry.@ 
0ce0: 2d 2d 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  -- in this table
0cf0: 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 6f 75   records the sou
0d00: 72 63 65 20 6f 66 20 74 68 65 20 62 6c 6f 62 2e  rce of the blob.
0d10: 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54  .@ --.@ CREATE T
0d20: 41 42 4c 45 20 72 63 76 66 72 6f 6d 28 0a 40 20  ABLE rcvfrom(.@ 
0d30: 20 20 72 63 76 69 64 20 49 4e 54 45 47 45 52 20    rcvid INTEGER 
0d40: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20  PRIMARY KEY,    
0d50: 20 20 2d 2d 20 52 65 63 65 69 76 65 64 2d 46 72    -- Received-Fr
0d60: 6f 6d 20 49 44 0a 40 20 20 20 75 69 64 20 49 4e  om ID.@   uid IN
0d70: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
0d80: 20 75 73 65 72 2c 20 20 20 20 2d 2d 20 55 73 65   user,    -- Use
0d90: 72 20 6c 6f 67 69 6e 0a 40 20 20 20 6d 74 69 6d  r login.@   mtim
0da0: 65 20 44 41 54 45 54 49 4d 45 2c 20 20 20 20 20  e DATETIME,     
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 54              -- T
0dc0: 69 6d 65 20 6f 72 20 72 65 63 65 69 70 74 0a 40  ime or receipt.@
0dd0: 20 20 20 6e 6f 6e 63 65 20 54 45 58 54 20 55 4e     nonce TEXT UN
0de0: 49 51 55 45 2c 20 20 20 20 20 20 20 20 20 20 20  IQUE,           
0df0: 20 20 20 2d 2d 20 4e 6f 6e 63 65 20 75 73 65 64     -- Nonce used
0e00: 20 66 6f 72 20 6c 6f 67 69 6e 0a 40 20 20 20 69   for login.@   i
0e10: 70 61 64 64 72 20 54 45 58 54 20 20 20 20 20 20  paddr TEXT      
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
0e30: 2d 20 52 65 6d 6f 74 65 20 49 50 20 61 64 64 72  - Remote IP addr
0e40: 65 73 73 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 64  ess.  NULL for d
0e50: 69 72 65 63 74 2e 0a 40 20 29 3b 0a 40 0a 40 20  irect..@ );.@.@ 
0e60: 2d 2d 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  -- Information a
0e70: 62 6f 75 74 20 75 73 65 72 73 0a 40 20 2d 2d 0a  bout users.@ --.
0e80: 40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 75  @ CREATE TABLE u
0e90: 73 65 72 28 0a 40 20 20 20 75 69 64 20 49 4e 54  ser(.@   uid INT
0ea0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0eb0: 2c 20 20 20 20 20 20 20 20 2d 2d 20 55 73 65 72  ,        -- User
0ec0: 20 49 44 0a 40 20 20 20 6c 6f 67 69 6e 20 54 45   ID.@   login TE
0ed0: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
0ee0: 20 20 20 20 20 20 20 20 2d 2d 20 6c 6f 67 69 6e          -- login
0ef0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 75 73 65   name of the use
0f00: 72 0a 40 20 20 20 70 77 20 54 45 58 54 2c 20 20  r.@   pw TEXT,  
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f20: 20 20 20 20 20 20 2d 2d 20 70 61 73 73 77 6f 72        -- passwor
0f30: 64 0a 40 20 20 20 63 61 70 20 54 45 58 54 2c 20  d.@   cap TEXT, 
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 20 20 20 20 20 20 2d 2d 20 43 61 70 61 62 69 6c        -- Capabil
0f60: 69 74 69 65 73 20 6f 66 20 74 68 69 73 20 75 73  ities of this us
0f70: 65 72 0a 40 20 20 20 63 6f 6f 6b 69 65 20 54 45  er.@   cookie TE
0f80: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
0f90: 20 20 20 20 20 20 20 2d 2d 20 57 57 57 20 6c 6f         -- WWW lo
0fa0: 67 69 6e 20 63 6f 6f 6b 69 65 0a 40 20 20 20 69  gin cookie.@   i
0fb0: 70 61 64 64 72 20 54 45 58 54 2c 20 20 20 20 20  paddr TEXT,     
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
0fd0: 2d 20 49 50 20 61 64 64 72 65 73 73 20 66 6f 72  - IP address for
0fe0: 20 77 68 69 63 68 20 63 6f 6f 6b 69 65 20 69 73   which cookie is
0ff0: 20 76 61 6c 69 64 0a 40 20 20 20 63 65 78 70 69   valid.@   cexpi
1000: 72 65 20 44 41 54 45 54 49 4d 45 2c 20 20 20 20  re DATETIME,    
1010: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 54 69             -- Ti
1020: 6d 65 20 77 68 65 6e 20 63 6f 6f 6b 69 65 20 65  me when cookie e
1030: 78 70 69 72 65 73 0a 40 20 20 20 69 6e 66 6f 20  xpires.@   info 
1040: 54 45 58 54 2c 20 20 20 20 20 20 20 20 20 20 20  TEXT,           
1050: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f             -- co
1060: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
1070: 6e 0a 40 20 20 20 70 68 6f 74 6f 20 42 4c 4f 42  n.@   photo BLOB
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 20 20 20 2d 2d 20 4a 50 45 47 20 69 6d        -- JPEG im
10a0: 61 67 65 20 6f 66 20 74 68 69 73 20 75 73 65 72  age of this user
10b0: 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 54 68 65  .@ );.@.@ -- The
10c0: 20 56 41 52 20 74 61 62 6c 65 20 68 6f 6c 64 73   VAR table holds
10d0: 20 6d 69 73 63 65 6c 6c 61 6e 6f 75 73 20 69 6e   miscellanous in
10e0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10f0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a  the repository..
1100: 40 20 2d 2d 20 69 6e 20 74 68 65 20 66 6f 72 6d  @ -- in the form
1110: 20 6f 66 20 6e 61 6d 65 2d 76 61 6c 75 65 20 70   of name-value p
1120: 61 69 72 73 2e 0a 40 20 2d 2d 0a 40 20 43 52 45  airs..@ --.@ CRE
1130: 41 54 45 20 54 41 42 4c 45 20 63 6f 6e 66 69 67  ATE TABLE config
1140: 28 0a 40 20 20 20 6e 61 6d 65 20 54 45 58 54 20  (.@   name TEXT 
1150: 50 52 49 4d 41 52 59 20 4b 45 59 20 4e 4f 54 20  PRIMARY KEY NOT 
1160: 4e 55 4c 4c 2c 20 20 2d 2d 20 50 72 69 6d 61 72  NULL,  -- Primar
1170: 79 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 6e  y name of the en
1180: 74 72 79 0a 40 20 20 20 76 61 6c 75 65 20 43 4c  try.@   value CL
1190: 4f 42 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  OB,             
11a0: 20 20 20 20 20 20 20 20 20 2d 2d 20 43 6f 6e 74           -- Cont
11b0: 65 6e 74 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  ent of the named
11c0: 20 70 61 72 61 6d 65 74 65 72 0a 40 20 20 20 43   parameter.@   C
11d0: 48 45 43 4b 28 20 74 79 70 65 6f 66 28 6e 61 6d  HECK( typeof(nam
11e0: 65 29 3d 27 74 65 78 74 27 20 41 4e 44 20 6c 65  e)='text' AND le
11f0: 6e 67 74 68 28 6e 61 6d 65 29 3e 3d 31 20 29 0a  ngth(name)>=1 ).
1200: 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 41 72 74 69  @ );.@.@ -- Arti
1210: 66 61 63 74 73 20 74 68 61 74 20 73 68 6f 75 6c  facts that shoul
1220: 64 20 6e 6f 74 20 62 65 20 70 72 6f 63 65 73 73  d not be process
1230: 65 64 20 61 72 65 20 69 64 65 6e 74 69 66 69 65  ed are identifie
1240: 64 20 69 6e 20 74 68 65 0a 40 20 2d 2d 20 22 73  d in the.@ -- "s
1250: 68 75 6e 22 20 74 61 62 6c 65 2e 20 20 41 72 74  hun" table.  Art
1260: 69 66 61 63 74 73 20 74 68 61 74 20 61 72 65 20  ifacts that are 
1270: 63 6f 6e 74 72 6f 6c 2d 66 69 6c 65 20 66 6f 72  control-file for
1280: 67 65 72 69 65 73 20 6f 72 0a 40 20 2d 2d 20 73  geries or.@ -- s
1290: 70 61 6d 20 6f 72 20 61 72 74 69 66 61 63 74 73  pam or artifacts
12a0: 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e 74 73 20   whose contents 
12b0: 76 69 6f 6c 61 74 65 20 61 64 6d 69 6e 69 73 74  violate administ
12c0: 72 61 74 69 76 65 20 70 6f 6c 69 63 79 0a 40 20  rative policy.@ 
12d0: 2d 2d 20 63 61 6e 20 62 65 20 73 68 75 6e 6e 65  -- can be shunne
12e0: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72  d in order to pr
12f0: 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20  event them from 
1300: 63 6f 6e 74 61 6d 69 6e 61 74 69 6e 67 0a 40 20  contaminating.@ 
1310: 2d 2d 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72  -- the repositor
1320: 79 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20 53 68 75  y..@ --.@ -- Shu
1330: 6e 6e 65 64 20 61 72 74 69 66 61 63 74 73 20 64  nned artifacts d
1340: 6f 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74  o not exist in t
1350: 68 65 20 62 6c 6f 62 20 74 61 62 6c 65 2e 20 20  he blob table.  
1360: 48 65 6e 63 65 20 74 68 65 79 0a 40 20 2d 2d 20  Hence they.@ -- 
1370: 68 61 76 65 20 6e 6f 74 20 61 72 74 69 66 61 63  have not artifac
1380: 74 20 49 44 20 28 72 69 64 29 20 61 6e 64 20 77  t ID (rid) and w
1390: 65 20 74 68 75 73 20 6d 75 73 74 20 73 74 6f 72  e thus must stor
13a0: 65 20 74 68 65 69 72 20 66 75 6c 6c 0a 40 20 2d  e their full.@ -
13b0: 2d 20 55 55 49 44 2e 0a 40 20 2d 2d 0a 40 20 43  - UUID..@ --.@ C
13c0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 68 75 6e  REATE TABLE shun
13d0: 28 75 75 69 64 20 55 4e 49 51 55 45 29 3b 0a 40  (uuid UNIQUE);.@
13e0: 0a 40 20 2d 2d 20 41 72 74 69 66 61 63 74 73 20  .@ -- Artifacts 
13f0: 74 68 61 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20  that should not 
1400: 62 65 20 70 75 73 68 65 64 20 61 72 65 20 73 74  be pushed are st
1410: 6f 72 65 64 20 69 6e 20 74 68 65 20 22 70 72 69  ored in the "pri
1420: 76 61 74 65 22 0a 40 20 2d 2d 20 74 61 62 6c 65  vate".@ -- table
1430: 2e 20 20 50 72 69 76 61 74 65 20 61 72 74 69 66  .  Private artif
1440: 61 63 74 73 20 61 72 65 20 6f 6d 69 74 74 65 64  acts are omitted
1450: 20 66 72 6f 6d 20 74 68 65 20 22 75 6e 63 6c 75   from the "unclu
1460: 73 74 65 72 65 64 22 20 61 6e 64 0a 40 20 2d 2d  stered" and.@ --
1470: 20 22 75 6e 73 65 6e 74 22 20 74 61 62 6c 65 73   "unsent" tables
1480: 2e 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20  ..@ --.@ CREATE 
1490: 54 41 42 4c 45 20 70 72 69 76 61 74 65 28 72 69  TABLE private(ri
14a0: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
14b0: 59 20 4b 45 59 29 3b 0a 40 0a 40 20 2d 2d 20 41  Y KEY);.@.@ -- A
14c0: 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 69 73 20  n entry in this 
14d0: 74 61 62 6c 65 20 64 65 73 63 72 69 62 65 73 20  table describes 
14e0: 61 20 64 61 74 61 62 61 73 65 20 71 75 65 72 79  a database query
14f0: 20 74 68 61 74 20 67 65 6e 65 72 61 74 65 73 20   that generates 
1500: 61 0a 40 20 2d 2d 20 74 61 62 6c 65 20 6f 66 20  a.@ -- table of 
1510: 74 69 63 6b 65 74 73 2e 0a 40 20 2d 2d 0a 40 20  tickets..@ --.@ 
1520: 43 52 45 41 54 45 20 54 41 42 4c 45 20 72 65 70  CREATE TABLE rep
1530: 6f 72 74 66 6d 74 28 0a 40 20 20 20 20 72 6e 20  ortfmt(.@    rn 
1540: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
1550: 6b 65 79 2c 20 20 2d 2d 20 52 65 70 6f 72 74 20  key,  -- Report 
1560: 6e 75 6d 62 65 72 0a 40 20 20 20 20 6f 77 6e 65  number.@    owne
1570: 72 20 74 65 78 74 2c 20 20 20 20 20 20 20 20 20  r text,         
1580: 20 20 20 20 20 2d 2d 20 4f 77 6e 65 72 20 6f 66       -- Owner of
1590: 20 74 68 69 73 20 72 65 70 6f 72 74 20 66 6f 72   this report for
15a0: 6d 61 74 20 28 6e 6f 74 20 75 73 65 64 29 0a 40  mat (not used).@
15b0: 20 20 20 20 74 69 74 6c 65 20 74 65 78 74 2c 20      title text, 
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
15d0: 54 69 74 6c 65 20 6f 66 20 74 68 69 73 20 72 65  Title of this re
15e0: 70 6f 72 74 0a 40 20 20 20 20 63 6f 6c 73 20 74  port.@    cols t
15f0: 65 78 74 2c 20 20 20 20 20 20 20 20 20 20 20 20  ext,            
1600: 20 20 20 2d 2d 20 41 20 63 6f 6c 6f 72 2d 6b 65     -- A color-ke
1610: 79 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 0a  y specification.
1620: 40 20 20 20 20 73 71 6c 63 6f 64 65 20 74 65 78  @    sqlcode tex
1630: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d  t             --
1640: 20 41 6e 20 53 51 4c 20 53 45 4c 45 43 54 20 73   An SQL SELECT s
1650: 74 61 74 65 6d 65 6e 74 20 66 6f 72 20 74 68 69  tatement for thi
1660: 73 20 72 65 70 6f 72 74 0a 40 20 29 3b 0a 40 20  s report.@ );.@ 
1670: 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 70 6f  INSERT INTO repo
1680: 72 74 66 6d 74 28 74 69 74 6c 65 2c 63 6f 6c 73  rtfmt(title,cols
1690: 2c 73 71 6c 63 6f 64 65 29 20 56 41 4c 55 45 53  ,sqlcode) VALUES
16a0: 28 27 41 6c 6c 20 54 69 63 6b 65 74 73 27 2c 27  ('All Tickets','
16b0: 23 66 66 66 66 66 66 20 4b 65 79 3a 0a 40 20 23  #ffffff Key:.@ #
16c0: 66 32 64 63 64 63 20 41 63 74 69 76 65 0a 40 20  f2dcdc Active.@ 
16d0: 23 65 38 65 38 65 38 20 52 65 76 69 65 77 0a 40  #e8e8e8 Review.@
16e0: 20 23 63 66 65 38 62 64 20 46 69 78 65 64 0a 40   #cfe8bd Fixed.@
16f0: 20 23 62 64 65 35 64 36 20 54 65 73 74 65 64 0a   #bde5d6 Tested.
1700: 40 20 23 63 61 63 61 65 35 20 44 65 66 65 72 72  @ #cacae5 Deferr
1710: 65 64 0a 40 20 23 63 38 63 38 63 38 20 43 6c 6f  ed.@ #c8c8c8 Clo
1720: 73 65 64 27 2c 27 53 45 4c 45 43 54 0a 40 20 20  sed','SELECT.@  
1730: 20 43 41 53 45 20 57 48 45 4e 20 73 74 61 74 75   CASE WHEN statu
1740: 73 20 49 4e 20 28 27 27 4f 70 65 6e 27 27 2c 27  s IN (''Open'','
1750: 27 56 65 72 69 66 69 65 64 27 27 29 20 54 48 45  'Verified'') THE
1760: 4e 20 27 27 23 66 32 64 63 64 63 27 27 0a 40 20  N ''#f2dcdc''.@ 
1770: 20 20 20 20 20 20 20 57 48 45 4e 20 73 74 61 74         WHEN stat
1780: 75 73 3d 27 27 52 65 76 69 65 77 27 27 20 54 48  us=''Review'' TH
1790: 45 4e 20 27 27 23 65 38 65 38 65 38 27 27 0a 40  EN ''#e8e8e8''.@
17a0: 20 20 20 20 20 20 20 20 57 48 45 4e 20 73 74 61          WHEN sta
17b0: 74 75 73 3d 27 27 46 69 78 65 64 27 27 20 54 48  tus=''Fixed'' TH
17c0: 45 4e 20 27 27 23 63 66 65 38 62 64 27 27 0a 40  EN ''#cfe8bd''.@
17d0: 20 20 20 20 20 20 20 20 57 48 45 4e 20 73 74 61          WHEN sta
17e0: 74 75 73 3d 27 27 54 65 73 74 65 64 27 27 20 54  tus=''Tested'' T
17f0: 48 45 4e 20 27 27 23 62 64 65 35 64 36 27 27 0a  HEN ''#bde5d6''.
1800: 40 20 20 20 20 20 20 20 20 57 48 45 4e 20 73 74  @        WHEN st
1810: 61 74 75 73 3d 27 27 44 65 66 65 72 72 65 64 27  atus=''Deferred'
1820: 27 20 54 48 45 4e 20 27 27 23 63 61 63 61 65 35  ' THEN ''#cacae5
1830: 27 27 0a 40 20 20 20 20 20 20 20 20 45 4c 53 45  ''.@        ELSE
1840: 20 27 27 23 63 38 63 38 63 38 27 27 20 45 4e 44   ''#c8c8c8'' END
1850: 20 41 53 20 27 27 62 67 63 6f 6c 6f 72 27 27 2c   AS ''bgcolor'',
1860: 0a 40 20 20 20 73 75 62 73 74 72 28 74 6b 74 5f  .@   substr(tkt_
1870: 75 75 69 64 2c 31 2c 31 30 29 20 41 53 20 27 27  uuid,1,10) AS ''
1880: 23 27 27 2c 0a 40 20 20 20 64 61 74 65 74 69 6d  #'',.@   datetim
1890: 65 28 74 6b 74 5f 6d 74 69 6d 65 29 20 41 53 20  e(tkt_mtime) AS 
18a0: 27 27 6d 74 69 6d 65 27 27 2c 0a 40 20 20 20 74  ''mtime'',.@   t
18b0: 79 70 65 2c 0a 40 20 20 20 73 74 61 74 75 73 2c  ype,.@   status,
18c0: 0a 40 20 20 20 73 75 62 73 79 73 74 65 6d 2c 0a  .@   subsystem,.
18d0: 40 20 20 20 74 69 74 6c 65 0a 40 20 46 52 4f 4d  @   title.@ FROM
18e0: 20 74 69 63 6b 65 74 27 29 3b 0a 40 0a 40 20 2d   ticket');.@.@ -
18f0: 2d 20 53 6f 6d 65 20 74 69 63 6b 65 74 20 63 6f  - Some ticket co
1900: 6e 74 65 6e 74 20 28 73 75 63 68 20 61 73 20 74  ntent (such as t
1910: 68 65 20 6f 72 69 67 69 6e 61 74 6f 72 73 20 65  he originators e
1920: 6d 61 69 6c 20 61 64 64 72 65 73 73 20 6f 72 20  mail address or 
1930: 63 6f 6e 74 61 63 74 0a 40 20 2d 2d 20 69 6e 66  contact.@ -- inf
1940: 6f 72 6d 61 74 69 6f 6e 29 20 6e 65 65 64 73 20  ormation) needs 
1950: 74 6f 20 62 65 20 6f 62 73 63 75 72 65 64 20 74  to be obscured t
1960: 6f 20 70 72 6f 74 65 63 74 20 70 72 69 76 61 63  o protect privac
1970: 79 2e 20 20 54 68 69 73 20 69 73 20 61 63 68 69  y.  This is achi
1980: 65 76 65 64 0a 40 20 2d 2d 20 62 79 20 73 74 6f  eved.@ -- by sto
1990: 72 69 6e 67 20 61 6e 20 53 48 41 31 20 68 61 73  ring an SHA1 has
19a0: 68 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  h of the content
19b0: 2e 20 20 46 6f 72 20 64 69 73 70 6c 61 79 2c 20  .  For display, 
19c0: 74 68 65 20 68 61 73 68 20 69 73 0a 40 20 2d 2d  the hash is.@ --
19d0: 20 6d 61 70 70 65 64 20 62 61 63 6b 20 69 6e 74   mapped back int
19e0: 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74  o the original t
19f0: 65 78 74 20 75 73 69 6e 67 20 74 68 69 73 20 74  ext using this t
1a00: 61 62 6c 65 2e 20 20 0a 40 20 2d 2d 0a 40 20 2d  able.  .@ --.@ -
1a10: 2d 20 54 68 69 73 20 74 61 62 6c 65 20 63 6f 6e  - This table con
1a20: 74 61 69 6e 73 20 73 65 6e 73 69 74 69 76 65 20  tains sensitive 
1a30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
1a40: 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 73 68  should not be sh
1a50: 61 72 65 64 0a 40 20 2d 2d 20 77 69 74 68 20 75  ared.@ -- with u
1a60: 6e 61 75 74 68 6f 72 69 7a 65 64 20 75 73 65 72  nauthorized user
1a70: 73 2e 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45  s..@ --.@ CREATE
1a80: 20 54 41 42 4c 45 20 63 6f 6e 63 65 61 6c 65 64   TABLE concealed
1a90: 28 0a 40 20 20 20 68 61 73 68 20 54 45 58 54 20  (.@   hash TEXT 
1aa0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 40 20 20  PRIMARY KEY,.@  
1ab0: 20 63 6f 6e 74 65 6e 74 20 54 45 58 54 0a 40 20   content TEXT.@ 
1ac0: 29 3b 0a 3b 0a 0a 63 6f 6e 73 74 20 63 68 61 72  );.;..const char
1ad0: 20 7a 52 65 70 6f 73 69 74 6f 72 79 53 63 68 65   zRepositorySche
1ae0: 6d 61 32 5b 5d 20 3d 0a 40 20 2d 2d 20 46 69 6c  ma2[] =.@ -- Fil
1af0: 65 6e 61 6d 65 73 0a 40 20 2d 2d 0a 40 20 43 52  enames.@ --.@ CR
1b00: 45 41 54 45 20 54 41 42 4c 45 20 66 69 6c 65 6e  EATE TABLE filen
1b10: 61 6d 65 28 0a 40 20 20 20 66 6e 69 64 20 49 4e  ame(.@   fnid IN
1b20: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1b30: 59 2c 20 20 20 20 2d 2d 20 46 69 6c 65 6e 61 6d  Y,    -- Filenam
1b40: 65 20 49 44 0a 40 20 20 20 6e 61 6d 65 20 54 45  e ID.@   name TE
1b50: 58 54 20 55 4e 49 51 55 45 20 20 20 20 20 20 20  XT UNIQUE       
1b60: 20 20 20 20 20 20 2d 2d 20 4e 61 6d 65 20 6f 66        -- Name of
1b70: 20 66 69 6c 65 20 70 61 67 65 0a 40 20 29 3b 0a   file page.@ );.
1b80: 40 0a 40 20 2d 2d 20 4c 69 6e 6b 61 67 65 73 20  @.@ -- Linkages 
1b90: 62 65 74 77 65 65 6e 20 6d 61 6e 69 66 65 73 74  between manifest
1ba0: 73 2c 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  s, files created
1bb0: 20 62 79 20 74 68 61 74 20 6d 61 6e 69 66 65 73   by that manifes
1bc0: 74 2c 20 61 6e 64 0a 40 20 2d 2d 20 74 68 65 20  t, and.@ -- the 
1bd0: 6e 61 6d 65 73 20 6f 66 20 74 68 6f 73 65 20 66  names of those f
1be0: 69 6c 65 73 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20  iles..@ --.@ -- 
1bf0: 70 69 64 3d 3d 30 20 69 66 20 74 68 65 20 66 69  pid==0 if the fi
1c00: 6c 65 20 69 73 20 61 64 64 65 64 20 62 79 20 63  le is added by c
1c10: 68 65 63 6b 2d 69 6e 20 6d 69 64 2e 0a 40 20 2d  heck-in mid..@ -
1c20: 2d 20 66 69 64 3d 3d 30 20 69 66 20 74 68 65 20  - fid==0 if the 
1c30: 66 69 6c 65 20 69 73 20 72 65 6d 6f 76 65 64 20  file is removed 
1c40: 62 79 20 63 68 65 63 6b 2d 69 6e 20 6d 69 64 2e  by check-in mid.
1c50: 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54  .@ --.@ CREATE T
1c60: 41 42 4c 45 20 6d 6c 69 6e 6b 28 0a 40 20 20 20  ABLE mlink(.@   
1c70: 6d 69 64 20 49 4e 54 45 47 45 52 20 52 45 46 45  mid INTEGER REFE
1c80: 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20 20  RENCES blob,    
1c90: 20 20 20 20 2d 2d 20 4d 61 6e 69 66 65 73 74 20      -- Manifest 
1ca0: 49 44 20 77 68 65 72 65 20 63 68 61 6e 67 65 20  ID where change 
1cb0: 6f 63 63 75 72 73 0a 40 20 20 20 70 69 64 20 49  occurs.@   pid I
1cc0: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
1cd0: 53 20 62 6c 6f 62 2c 20 20 20 20 20 20 20 20 2d  S blob,        -
1ce0: 2d 20 46 69 6c 65 20 49 44 20 69 6e 20 70 61 72  - File ID in par
1cf0: 65 6e 74 20 6d 61 6e 69 66 65 73 74 0a 40 20 20  ent manifest.@  
1d00: 20 66 69 64 20 49 4e 54 45 47 45 52 20 52 45 46   fid INTEGER REF
1d10: 45 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20  ERENCES blob,   
1d20: 20 20 20 20 20 2d 2d 20 43 68 61 6e 67 65 64 20       -- Changed 
1d30: 66 69 6c 65 20 49 44 20 69 6e 20 74 68 69 73 20  file ID in this 
1d40: 6d 61 6e 69 66 65 73 74 0a 40 20 20 20 66 6e 69  manifest.@   fni
1d50: 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  d INTEGER REFERE
1d60: 4e 43 45 53 20 66 69 6c 65 6e 61 6d 65 2c 20 20  NCES filename,  
1d70: 20 2d 2d 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   -- Name of the 
1d80: 66 69 6c 65 0a 40 20 20 20 70 66 6e 69 64 20 49  file.@   pfnid I
1d90: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
1da0: 53 20 66 69 6c 65 6e 61 6d 65 20 20 20 2d 2d 20  S filename   -- 
1db0: 50 72 65 76 69 6f 75 73 20 6e 61 6d 65 2e 20 30  Previous name. 0
1dc0: 20 69 66 20 75 6e 63 68 61 6e 67 65 64 0a 40 20   if unchanged.@ 
1dd0: 29 3b 0a 40 20 43 52 45 41 54 45 20 49 4e 44 45  );.@ CREATE INDE
1de0: 58 20 6d 6c 69 6e 6b 5f 69 31 20 4f 4e 20 6d 6c  X mlink_i1 ON ml
1df0: 69 6e 6b 28 6d 69 64 29 3b 0a 40 20 43 52 45 41  ink(mid);.@ CREA
1e00: 54 45 20 49 4e 44 45 58 20 6d 6c 69 6e 6b 5f 69  TE INDEX mlink_i
1e10: 32 20 4f 4e 20 6d 6c 69 6e 6b 28 66 6e 69 64 29  2 ON mlink(fnid)
1e20: 3b 0a 40 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.@ CREATE INDEX
1e30: 20 6d 6c 69 6e 6b 5f 69 33 20 4f 4e 20 6d 6c 69   mlink_i3 ON mli
1e40: 6e 6b 28 66 69 64 29 3b 0a 40 20 43 52 45 41 54  nk(fid);.@ CREAT
1e50: 45 20 49 4e 44 45 58 20 6d 6c 69 6e 6b 5f 69 34  E INDEX mlink_i4
1e60: 20 4f 4e 20 6d 6c 69 6e 6b 28 70 69 64 29 3b 0a   ON mlink(pid);.
1e70: 40 0a 40 20 2d 2d 20 50 61 72 65 6e 74 2f 63 68  @.@ -- Parent/ch
1e80: 69 6c 64 20 6c 69 6e 6b 61 67 65 73 0a 40 20 2d  ild linkages.@ -
1e90: 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c 45  -.@ CREATE TABLE
1ea0: 20 70 6c 69 6e 6b 28 0a 40 20 20 20 70 69 64 20   plink(.@   pid 
1eb0: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
1ec0: 45 53 20 62 6c 6f 62 2c 20 20 20 20 2d 2d 20 50  ES blob,    -- P
1ed0: 61 72 65 6e 74 20 6d 61 6e 69 66 65 73 74 0a 40  arent manifest.@
1ee0: 20 20 20 63 69 64 20 49 4e 54 45 47 45 52 20 52     cid INTEGER R
1ef0: 45 46 45 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20  EFERENCES blob, 
1f00: 20 20 20 2d 2d 20 43 68 69 6c 64 20 6d 61 6e 69     -- Child mani
1f10: 66 65 73 74 0a 40 20 20 20 69 73 70 72 69 6d 20  fest.@   isprim 
1f20: 42 4f 4f 4c 45 41 4e 2c 20 20 20 20 20 20 20 20  BOOLEAN,        
1f30: 20 20 20 20 20 20 20 20 20 2d 2d 20 70 69 64 20           -- pid 
1f40: 69 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 70  is the primary p
1f50: 61 72 65 6e 74 20 6f 66 20 63 69 64 0a 40 20 20  arent of cid.@  
1f60: 20 6d 74 69 6d 65 20 44 41 54 45 54 49 4d 45 2c   mtime DATETIME,
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 20 2d 2d 20 74 68 65 20 64 61 74 65 2f 74 69 6d   -- the date/tim
1f90: 65 20 73 74 61 6d 70 20 6f 6e 20 63 69 64 0a 40  e stamp on cid.@
1fa0: 20 20 20 55 4e 49 51 55 45 28 70 69 64 2c 20 63     UNIQUE(pid, c
1fb0: 69 64 29 0a 40 20 29 3b 0a 40 20 43 52 45 41 54  id).@ );.@ CREAT
1fc0: 45 20 49 4e 44 45 58 20 70 6c 69 6e 6b 5f 69 32  E INDEX plink_i2
1fd0: 20 4f 4e 20 70 6c 69 6e 6b 28 63 69 64 29 3b 0a   ON plink(cid);.
1fe0: 40 0a 40 20 2d 2d 20 45 76 65 6e 74 73 20 75 73  @.@ -- Events us
1ff0: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
2000: 20 74 69 6d 65 6c 69 6e 65 0a 40 20 2d 2d 0a 40   timeline.@ --.@
2010: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 76   CREATE TABLE ev
2020: 65 6e 74 28 0a 40 20 20 20 74 79 70 65 20 54 45  ent(.@   type TE
2030: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
2040: 20 20 20 20 20 20 20 20 20 2d 2d 20 54 79 70 65           -- Type
2050: 20 6f 66 20 65 76 65 6e 74 0a 40 20 20 20 6d 74   of event.@   mt
2060: 69 6d 65 20 44 41 54 45 54 49 4d 45 2c 20 20 20  ime DATETIME,   
2070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
2080: 20 44 61 74 65 20 61 6e 64 20 74 69 6d 65 20 77   Date and time w
2090: 68 65 6e 20 74 68 65 20 65 76 65 6e 74 20 6f 63  hen the event oc
20a0: 63 75 72 73 0a 40 20 20 20 6f 62 6a 69 64 20 49  curs.@   objid I
20b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
20c0: 45 59 2c 20 20 20 20 20 20 2d 2d 20 41 73 73 6f  EY,      -- Asso
20d0: 63 69 61 74 65 64 20 72 65 63 6f 72 64 20 49 44  ciated record ID
20e0: 0a 40 20 20 20 75 69 64 20 49 4e 54 45 47 45 52  .@   uid INTEGER
20f0: 20 52 45 46 45 52 45 4e 43 45 53 20 75 73 65 72   REFERENCES user
2100: 2c 20 20 20 20 2d 2d 20 55 73 65 72 20 77 68 6f  ,    -- User who
2110: 20 63 61 75 73 65 64 20 74 68 65 20 65 76 65 6e   caused the even
2120: 74 0a 40 20 20 20 62 67 63 6f 6c 6f 72 20 54 45  t.@   bgcolor TE
2130: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
2140: 20 20 20 20 20 20 2d 2d 20 43 6f 6c 6f 72 20 73        -- Color s
2150: 65 74 20 62 79 20 27 62 67 63 6f 6c 6f 72 27 20  et by 'bgcolor' 
2160: 70 72 6f 70 65 72 74 79 0a 40 20 20 20 62 72 62  property.@   brb
2170: 67 63 6f 6c 6f 72 20 54 45 58 54 2c 20 20 20 20  gcolor TEXT,    
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
2190: 43 6f 6c 6f 72 20 73 65 74 20 62 79 20 27 62 72  Color set by 'br
21a0: 2d 62 67 63 6f 6c 6f 72 27 20 70 72 6f 70 65 72  -bgcolor' proper
21b0: 74 79 0a 40 20 20 20 65 75 73 65 72 20 54 45 58  ty.@   euser TEX
21c0: 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T,              
21d0: 20 20 20 20 20 20 20 2d 2d 20 55 73 65 72 20 73         -- User s
21e0: 65 74 20 62 79 20 27 75 73 65 72 27 20 70 72 6f  et by 'user' pro
21f0: 70 65 72 74 79 0a 40 20 20 20 75 73 65 72 20 54  perty.@   user T
2200: 45 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20  EXT,            
2210: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 4e 61 6d            -- Nam
2220: 65 20 6f 66 20 74 68 65 20 75 73 65 72 0a 40 20  e of the user.@ 
2230: 20 20 65 63 6f 6d 6d 65 6e 74 20 54 45 58 54 2c    ecomment TEXT,
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2250: 20 20 2d 2d 20 43 6f 6d 6d 65 6e 74 20 73 65 74    -- Comment set
2260: 20 62 79 20 27 63 6f 6d 6d 65 6e 74 27 20 70 72   by 'comment' pr
2270: 6f 70 65 72 74 79 0a 40 20 20 20 63 6f 6d 6d 65  operty.@   comme
2280: 6e 74 20 54 45 58 54 20 20 20 20 20 20 20 20 20  nt TEXT         
2290: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 43 6f             -- Co
22a0: 6d 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67  mment describing
22b0: 20 74 68 65 20 65 76 65 6e 74 0a 40 20 29 3b 0a   the event.@ );.
22c0: 40 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 65  @ CREATE INDEX e
22d0: 76 65 6e 74 5f 69 31 20 4f 4e 20 65 76 65 6e 74  vent_i1 ON event
22e0: 28 6d 74 69 6d 65 29 3b 0a 40 0a 40 20 2d 2d 20  (mtime);.@.@ -- 
22f0: 41 20 72 65 63 6f 72 64 20 6f 66 20 70 68 61 6e  A record of phan
2300: 74 6f 6d 73 2e 20 20 41 20 70 68 61 6e 74 6f 6d  toms.  A phantom
2310: 20 69 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72   is a record for
2320: 20 77 68 69 63 68 20 77 65 20 6b 6e 6f 77 20 74   which we know t
2330: 68 65 0a 40 20 2d 2d 20 55 55 49 44 20 62 75 74  he.@ -- UUID but
2340: 20 77 65 20 64 6f 20 6e 6f 74 20 28 79 65 74 29   we do not (yet)
2350: 20 6b 6e 6f 77 20 74 68 65 20 66 69 6c 65 20 63   know the file c
2360: 6f 6e 74 65 6e 74 2e 0a 40 20 2d 2d 0a 40 20 43  ontent..@ --.@ C
2370: 52 45 41 54 45 20 54 41 42 4c 45 20 70 68 61 6e  REATE TABLE phan
2380: 74 6f 6d 28 0a 40 20 20 20 72 69 64 20 49 4e 54  tom(.@   rid INT
2390: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
23a0: 20 20 20 20 20 20 20 20 20 2d 2d 20 52 65 63 6f           -- Reco
23b0: 72 64 20 49 44 20 6f 66 20 74 68 65 20 70 68 61  rd ID of the pha
23c0: 6e 74 6f 6d 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d  ntom.@ );.@.@ --
23d0: 20 55 6e 63 6c 75 73 74 65 72 65 64 20 72 65 63   Unclustered rec
23e0: 6f 72 64 73 2e 20 20 41 6e 20 75 6e 63 6c 75 73  ords.  An unclus
23f0: 74 65 72 65 64 20 72 65 63 6f 72 64 20 69 73 20  tered record is 
2400: 61 20 72 65 63 6f 72 64 20 28 69 6e 63 6c 75 64  a record (includ
2410: 69 6e 67 0a 40 20 2d 2d 20 61 20 63 6c 75 73 74  ing.@ -- a clust
2420: 65 72 20 72 65 63 6f 72 64 73 20 74 68 65 6d 73  er records thems
2430: 65 6c 76 65 73 29 20 74 68 61 74 20 69 73 20 6e  elves) that is n
2440: 6f 74 20 6d 65 6e 74 69 6f 6e 65 64 20 62 79 20  ot mentioned by 
2450: 73 6f 6d 65 20 6f 74 68 65 72 0a 40 20 2d 2d 20  some other.@ -- 
2460: 63 6c 75 73 74 65 72 2e 0a 40 20 2d 2d 0a 40 20  cluster..@ --.@ 
2470: 2d 2d 20 50 68 61 6e 74 6f 6d 73 20 61 72 65 20  -- Phantoms are 
2480: 75 73 75 61 6c 6c 79 20 69 6e 63 6c 75 64 65 64  usually included
2490: 20 69 6e 20 74 68 65 20 75 6e 63 6c 75 73 74 65   in the uncluste
24a0: 72 65 64 20 74 61 62 6c 65 2e 20 20 41 20 6e 65  red table.  A ne
24b0: 77 20 63 6c 75 73 74 65 72 0a 40 20 2d 2d 20 77  w cluster.@ -- w
24c0: 69 6c 6c 20 6e 65 76 65 72 20 62 65 20 63 72 65  ill never be cre
24d0: 61 74 65 64 20 74 68 61 74 20 63 6f 6e 74 61 69  ated that contai
24e0: 6e 73 20 61 20 70 68 61 6e 74 6f 6d 2e 20 20 42  ns a phantom.  B
24f0: 75 74 20 61 6e 6f 74 68 65 72 20 72 65 70 6f 73  ut another repos
2500: 69 74 6f 72 79 0a 40 20 2d 2d 20 6d 69 67 68 74  itory.@ -- might
2510: 20 73 65 6e 64 20 75 73 20 61 20 63 6c 75 73 74   send us a clust
2520: 65 72 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  er that contains
2530: 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 61 72   entries that ar
2540: 65 20 70 68 61 6e 74 6f 6d 73 20 74 6f 0a 40 20  e phantoms to.@ 
2550: 2d 2d 20 75 73 2e 0a 40 20 2d 2d 0a 40 20 43 52  -- us..@ --.@ CR
2560: 45 41 54 45 20 54 41 42 4c 45 20 75 6e 63 6c 75  EATE TABLE unclu
2570: 73 74 65 72 65 64 28 0a 40 20 20 20 72 69 64 20  stered(.@   rid 
2580: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
2590: 4b 45 59 20 20 20 20 20 20 20 20 20 2d 2d 20 52  KEY         -- R
25a0: 65 63 6f 72 64 20 49 44 20 6f 66 20 74 68 65 20  ecord ID of the 
25b0: 75 6e 63 6c 75 73 74 65 72 65 64 20 66 69 6c 65  unclustered file
25c0: 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 52 65 63  .@ );.@.@ -- Rec
25d0: 6f 72 64 73 20 77 68 69 63 68 20 68 61 76 65 20  ords which have 
25e0: 6e 65 76 65 72 20 62 65 65 6e 20 70 75 73 68 65  never been pushe
25f0: 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 73 65 72  d to another ser
2600: 76 65 72 2e 20 20 54 68 69 73 20 69 73 0a 40 20  ver.  This is.@ 
2610: 2d 2d 20 75 73 65 64 20 74 6f 20 72 65 64 75 63  -- used to reduc
2620: 65 20 70 75 73 68 20 6f 70 65 72 61 74 69 6f 6e  e push operation
2630: 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 48 54  s to a single HT
2640: 54 50 20 72 65 71 75 65 73 74 20 69 6e 20 74 68  TP request in th
2650: 65 0a 40 20 2d 2d 20 63 6f 6d 6d 6f 6e 20 63 61  e.@ -- common ca
2660: 73 65 20 77 68 65 6e 20 6f 6e 65 20 72 65 70 6f  se when one repo
2670: 73 69 74 6f 72 79 20 6f 6e 6c 79 20 74 61 6c 6b  sitory only talk
2680: 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 73 65  s to a single se
2690: 72 76 65 72 2e 0a 40 20 2d 2d 0a 40 20 43 52 45  rver..@ --.@ CRE
26a0: 41 54 45 20 54 41 42 4c 45 20 75 6e 73 65 6e 74  ATE TABLE unsent
26b0: 28 0a 40 20 20 20 72 69 64 20 49 4e 54 45 47 45  (.@   rid INTEGE
26c0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 20 20  R PRIMARY KEY   
26d0: 20 20 20 20 20 20 2d 2d 20 52 65 63 6f 72 64 20        -- Record 
26e0: 49 44 20 6f 66 20 74 68 65 20 70 68 61 6e 74 6f  ID of the phanto
26f0: 6d 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 45 61  m.@ );.@.@ -- Ea
2700: 63 68 20 62 61 73 65 6c 69 6e 65 20 6f 72 20 6d  ch baseline or m
2710: 61 6e 69 66 65 73 74 20 63 61 6e 20 68 61 76 65  anifest can have
2720: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 67   one or more tag
2730: 73 2e 20 20 41 20 74 61 67 0a 40 20 2d 2d 20 69  s.  A tag.@ -- i
2740: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 20 72  s defined by a r
2750: 6f 77 20 69 6e 20 74 68 65 20 6e 65 78 74 20 74  ow in the next t
2760: 61 62 6c 65 2e 0a 40 20 2d 2d 20 0a 40 20 2d 2d  able..@ -- .@ --
2770: 20 57 69 6b 69 20 70 61 67 65 73 20 61 72 65 20   Wiki pages are 
2780: 74 61 67 67 65 64 20 77 69 74 68 20 22 77 69 6b  tagged with "wik
2790: 69 2d 4e 41 4d 45 22 20 77 68 65 72 65 20 4e 41  i-NAME" where NA
27a0: 4d 45 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  ME is the name o
27b0: 66 0a 40 20 2d 2d 20 74 68 65 20 77 69 6b 69 20  f.@ -- the wiki 
27c0: 70 61 67 65 2e 20 20 54 69 63 6b 65 74 73 20 63  page.  Tickets c
27d0: 68 61 6e 67 65 73 20 61 72 65 20 74 61 67 67 65  hanges are tagge
27e0: 64 20 77 69 74 68 20 22 74 69 63 6b 65 74 2d 55  d with "ticket-U
27f0: 55 49 44 22 20 77 68 65 72 65 20 0a 40 20 2d 2d  UID" where .@ --
2800: 20 55 55 49 44 20 69 73 20 74 68 65 20 69 6e 64   UUID is the ind
2810: 65 6e 74 69 66 69 65 72 20 6f 66 20 74 68 65 20  entifier of the 
2820: 74 69 63 6b 65 74 2e 20 20 54 61 67 73 20 75 73  ticket.  Tags us
2830: 65 64 20 74 6f 20 61 73 73 69 67 6e 20 73 79 6d  ed to assign sym
2840: 62 6f 6c 69 63 0a 40 20 2d 2d 20 6e 61 6d 65 73  bolic.@ -- names
2850: 20 74 6f 20 62 61 73 65 6c 69 6e 65 73 20 61 72   to baselines ar
2860: 65 20 62 72 61 6e 63 68 65 73 20 61 72 65 20 6f  e branches are o
2870: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 79 6d 2d  f the form "sym-
2880: 4e 41 4d 45 22 20 77 68 65 72 65 0a 40 20 2d 2d  NAME" where.@ --
2890: 20 4e 41 4d 45 20 69 73 20 74 68 65 20 73 79 6d   NAME is the sym
28a0: 62 6f 6c 69 63 20 6e 61 6d 65 2e 0a 40 20 2d 2d  bolic name..@ --
28b0: 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .@ CREATE TABLE 
28c0: 74 61 67 28 0a 40 20 20 20 74 61 67 69 64 20 49  tag(.@   tagid I
28d0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
28e0: 45 59 2c 20 20 20 20 20 20 20 2d 2d 20 4e 75 6d  EY,       -- Num
28f0: 65 72 69 63 20 74 61 67 20 49 44 0a 40 20 20 20  eric tag ID.@   
2900: 74 61 67 6e 61 6d 65 20 54 45 58 54 20 55 4e 49  tagname TEXT UNI
2910: 51 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20  QUE             
2920: 20 2d 2d 20 54 61 67 20 6e 61 6d 65 2e 0a 40 20   -- Tag name..@ 
2930: 29 3b 0a 40 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.@ INSERT INTO
2940: 20 74 61 67 20 56 41 4c 55 45 53 28 31 2c 20 27   tag VALUES(1, '
2950: 62 67 63 6f 6c 6f 72 27 29 3b 20 20 20 20 20 20  bgcolor');      
2960: 20 20 20 2d 2d 20 54 41 47 5f 42 47 43 4f 4c 4f     -- TAG_BGCOLO
2970: 52 0a 40 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  R.@ INSERT INTO 
2980: 74 61 67 20 56 41 4c 55 45 53 28 32 2c 20 27 63  tag VALUES(2, 'c
2990: 6f 6d 6d 65 6e 74 27 29 3b 20 20 20 20 20 20 20  omment');       
29a0: 20 20 2d 2d 20 54 41 47 5f 43 4f 4d 4d 45 4e 54    -- TAG_COMMENT
29b0: 0a 40 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .@ INSERT INTO t
29c0: 61 67 20 56 41 4c 55 45 53 28 33 2c 20 27 75 73  ag VALUES(3, 'us
29d0: 65 72 27 29 3b 20 20 20 20 20 20 20 20 20 20 20  er');           
29e0: 20 2d 2d 20 54 41 47 5f 55 53 45 52 0a 40 20 49   -- TAG_USER.@ I
29f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 67 20 56  NSERT INTO tag V
2a00: 41 4c 55 45 53 28 34 2c 20 27 68 69 64 64 65 6e  ALUES(4, 'hidden
2a10: 27 29 3b 20 20 20 20 20 20 20 20 20 20 2d 2d 20  ');          -- 
2a20: 54 41 47 5f 48 49 44 44 45 4e 0a 40 20 49 4e 53  TAG_HIDDEN.@ INS
2a30: 45 52 54 20 49 4e 54 4f 20 74 61 67 20 56 41 4c  ERT INTO tag VAL
2a40: 55 45 53 28 35 2c 20 27 70 72 69 76 61 74 65 27  UES(5, 'private'
2a50: 29 3b 20 20 20 20 20 20 20 20 20 2d 2d 20 54 41  );         -- TA
2a60: 47 5f 50 52 49 56 41 54 45 0a 40 20 49 4e 53 45  G_PRIVATE.@ INSE
2a70: 52 54 20 49 4e 54 4f 20 74 61 67 20 56 41 4c 55  RT INTO tag VALU
2a80: 45 53 28 36 2c 20 27 63 6c 75 73 74 65 72 27 29  ES(6, 'cluster')
2a90: 3b 20 20 20 20 20 20 20 20 20 2d 2d 20 54 41 47  ;         -- TAG
2aa0: 5f 43 4c 55 53 54 45 52 0a 40 0a 40 20 2d 2d 20  _CLUSTER.@.@ -- 
2ab0: 41 73 73 69 67 6e 6d 65 6e 74 73 20 6f 66 20 74  Assignments of t
2ac0: 61 67 73 20 74 6f 20 62 61 73 65 6c 69 6e 65 73  ags to baselines
2ad0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20  .  Note that we 
2ae0: 61 6c 6c 6f 77 20 74 61 67 73 20 74 6f 0a 40 20  allow tags to.@ 
2af0: 2d 2d 20 68 61 76 65 20 76 61 6c 75 65 73 20 61  -- have values a
2b00: 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 6d 2e  ssigned to them.
2b10: 20 20 53 6f 20 77 65 20 61 72 65 20 6e 6f 74 20    So we are not 
2b20: 72 65 61 6c 6c 79 20 64 65 61 6c 69 6e 67 20 77  really dealing w
2b30: 69 74 68 0a 40 20 2d 2d 20 74 61 67 73 20 68 65  ith.@ -- tags he
2b40: 72 65 2e 20 20 54 68 65 73 65 20 61 72 65 20 72  re.  These are r
2b50: 65 61 6c 6c 79 20 70 72 6f 70 65 72 74 69 65 73  eally properties
2b60: 2e 20 20 42 75 74 20 77 65 20 61 72 65 20 67 6f  .  But we are go
2b70: 69 6e 67 20 74 6f 0a 40 20 2d 2d 20 6b 65 65 70  ing to.@ -- keep
2b80: 20 63 61 6c 6c 69 6e 67 20 74 68 65 6d 20 74 61   calling them ta
2b90: 67 73 20 62 65 63 61 75 73 65 20 69 6e 20 6d 61  gs because in ma
2ba0: 6e 79 20 63 61 73 65 73 20 74 68 65 20 76 61 6c  ny cases the val
2bb0: 75 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 40  ue is ignored..@
2bc0: 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42   --.@ CREATE TAB
2bd0: 4c 45 20 74 61 67 78 72 65 66 28 0a 40 20 20 20  LE tagxref(.@   
2be0: 74 61 67 69 64 20 49 4e 54 45 47 45 52 20 52 45  tagid INTEGER RE
2bf0: 46 45 52 45 4e 43 45 53 20 74 61 67 2c 20 20 20  FERENCES tag,   
2c00: 2d 2d 20 54 68 65 20 74 61 67 20 74 68 61 74 20  -- The tag that 
2c10: 61 64 64 65 64 20 6f 72 20 72 65 6d 6f 76 65 64  added or removed
2c20: 0a 40 20 20 20 74 61 67 74 79 70 65 20 49 4e 54  .@   tagtype INT
2c30: 45 47 45 52 2c 20 20 20 20 20 20 20 20 20 20 20  EGER,           
2c40: 20 20 20 20 20 2d 2d 20 30 3a 63 61 6e 63 65 6c       -- 0:cancel
2c50: 20 20 31 3a 73 69 6e 67 6c 65 20 20 32 3a 62 72    1:single  2:br
2c60: 61 6e 63 68 0a 40 20 20 20 73 72 63 69 64 20 49  anch.@   srcid I
2c70: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
2c80: 53 20 62 6c 6f 62 2c 20 20 2d 2d 20 4f 72 69 67  S blob,  -- Orig
2c90: 69 6e 20 6f 66 20 74 68 65 20 74 61 67 2e 20 30  in of the tag. 0
2ca0: 20 66 6f 72 20 70 72 6f 70 61 67 61 74 65 64 20   for propagated 
2cb0: 74 61 67 73 0a 40 20 20 20 76 61 6c 75 65 20 54  tags.@   value T
2cc0: 45 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20  EXT,            
2cd0: 20 20 20 20 20 20 20 20 20 2d 2d 20 56 61 6c 75           -- Valu
2ce0: 65 20 6f 66 20 74 68 65 20 74 61 67 2e 20 20 4d  e of the tag.  M
2cf0: 69 67 68 74 20 62 65 20 4e 55 4c 4c 2e 0a 40 20  ight be NULL..@ 
2d00: 20 20 6d 74 69 6d 65 20 54 49 4d 45 53 54 41 4d    mtime TIMESTAM
2d10: 50 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  P,              
2d20: 20 20 2d 2d 20 54 69 6d 65 20 6f 66 20 61 64 64    -- Time of add
2d30: 69 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c  ition or removal
2d40: 0a 40 20 20 20 72 69 64 20 49 4e 54 45 47 45 52  .@   rid INTEGER
2d50: 20 52 45 46 45 52 45 4e 43 45 20 62 6c 6f 62 2c   REFERENCE blob,
2d60: 20 20 20 20 20 2d 2d 20 42 61 73 65 6c 69 6e 65       -- Baseline
2d70: 20 74 68 61 74 20 74 61 67 20 61 64 64 65 64 2f   that tag added/
2d80: 72 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 40 20 20  removed from.@  
2d90: 20 55 4e 49 51 55 45 28 72 69 64 2c 20 74 61 67   UNIQUE(rid, tag
2da0: 69 64 29 0a 40 20 29 3b 0a 40 20 43 52 45 41 54  id).@ );.@ CREAT
2db0: 45 20 49 4e 44 45 58 20 74 61 67 78 72 65 66 5f  E INDEX tagxref_
2dc0: 69 31 20 4f 4e 20 74 61 67 78 72 65 66 28 74 61  i1 ON tagxref(ta
2dd0: 67 69 64 2c 20 6d 74 69 6d 65 29 3b 0a 40 0a 40  gid, mtime);.@.@
2de0: 20 2d 2d 20 54 65 6d 70 6c 61 74 65 20 66 6f 72   -- Template for
2df0: 20 74 68 65 20 54 49 43 4b 45 54 20 74 61 62 6c   the TICKET tabl
2e00: 65 0a 40 20 2d 2d 0a 40 20 2d 2d 20 4e 42 3a 20  e.@ --.@ -- NB: 
2e10: 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68  when changing th
2e20: 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
2e30: 54 49 43 4b 45 54 20 74 61 62 6c 65 20 68 65 72  TICKET table her
2e40: 65 2c 20 61 6c 73 6f 20 6d 61 6b 65 20 74 68 65  e, also make the
2e50: 0a 40 20 2d 2d 20 73 61 6d 65 20 63 68 61 6e 67  .@ -- same chang
2e60: 65 20 69 6e 20 74 6b 74 73 65 74 75 70 2e 63 2e  e in tktsetup.c.
2e70: 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54  .@ --.@ CREATE T
2e80: 41 42 4c 45 20 74 69 63 6b 65 74 28 0a 40 20 20  ABLE ticket(.@  
2e90: 20 2d 2d 20 44 6f 20 6e 6f 74 20 63 68 61 6e 67   -- Do not chang
2ea0: 65 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 74 68 61  e any column tha
2eb0: 74 20 62 65 67 69 6e 73 20 77 69 74 68 20 74 6b  t begins with tk
2ec0: 74 5f 0a 40 20 20 20 74 6b 74 5f 69 64 20 49 4e  t_.@   tkt_id IN
2ed0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
2ee0: 59 2c 0a 40 20 20 20 74 6b 74 5f 75 75 69 64 20  Y,.@   tkt_uuid 
2ef0: 54 45 58 54 20 55 4e 49 51 55 45 2c 0a 40 20 20  TEXT UNIQUE,.@  
2f00: 20 74 6b 74 5f 6d 74 69 6d 65 20 44 41 54 45 2c   tkt_mtime DATE,
2f10: 0a 40 20 20 20 2d 2d 20 41 64 64 20 61 73 20 6d  .@   -- Add as m
2f20: 61 6e 79 20 66 69 65 6c 64 20 61 73 20 72 65 71  any field as req
2f30: 75 69 72 65 64 20 62 65 6c 6f 77 20 74 68 69 73  uired below this
2f40: 20 6c 69 6e 65 0a 40 20 20 20 74 79 70 65 20 54   line.@   type T
2f50: 45 58 54 2c 0a 40 20 20 20 73 74 61 74 75 73 20  EXT,.@   status 
2f60: 54 45 58 54 2c 0a 40 20 20 20 73 75 62 73 79 73  TEXT,.@   subsys
2f70: 74 65 6d 20 54 45 58 54 2c 0a 40 20 20 20 70 72  tem TEXT,.@   pr
2f80: 69 6f 72 69 74 79 20 54 45 58 54 2c 0a 40 20 20  iority TEXT,.@  
2f90: 20 73 65 76 65 72 69 74 79 20 54 45 58 54 2c 0a   severity TEXT,.
2fa0: 40 20 20 20 66 6f 75 6e 64 69 6e 20 54 45 58 54  @   foundin TEXT
2fb0: 2c 0a 40 20 20 20 70 72 69 76 61 74 65 5f 63 6f  ,.@   private_co
2fc0: 6e 74 61 63 74 20 54 45 58 54 2c 0a 40 20 20 20  ntact TEXT,.@   
2fd0: 72 65 73 6f 6c 75 74 69 6f 6e 20 54 45 58 54 2c  resolution TEXT,
2fe0: 0a 40 20 20 20 74 69 74 6c 65 20 54 45 58 54 2c  .@   title TEXT,
2ff0: 0a 40 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 58  .@   comment TEX
3000: 54 0a 40 20 29 3b 0a 3b 0a 0a 2f 2a 0a 2a 2a 20  T.@ );.;../*.** 
3010: 50 72 65 64 65 66 69 6e 65 64 20 74 61 67 69 64  Predefined tagid
3020: 20 76 61 6c 75 65 73 0a 2a 2f 0a 23 69 66 20 49   values.*/.#if I
3030: 4e 54 45 52 46 41 43 45 0a 23 20 64 65 66 69 6e  NTERFACE.# defin
3040: 65 20 54 41 47 5f 42 47 43 4f 4c 4f 52 20 20 20  e TAG_BGCOLOR   
3050: 20 31 20 20 20 20 20 2f 2a 20 53 65 74 20 74 68   1     /* Set th
3060: 65 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c  e background col
3070: 6f 72 20 66 6f 72 20 64 69 73 70 6c 61 79 20 2a  or for display *
3080: 2f 0a 23 20 64 65 66 69 6e 65 20 54 41 47 5f 43  /.# define TAG_C
3090: 4f 4d 4d 45 4e 54 20 20 20 20 32 20 20 20 20 20  OMMENT    2     
30a0: 2f 2a 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20  /* The check-in 
30b0: 63 6f 6d 6d 65 6e 74 20 2a 2f 0a 23 20 64 65 66  comment */.# def
30c0: 69 6e 65 20 54 41 47 5f 55 53 45 52 20 20 20 20  ine TAG_USER    
30d0: 20 20 20 33 20 20 20 20 20 2f 2a 20 55 73 65 72     3     /* User
30e0: 20 77 68 6f 20 6d 61 64 65 20 61 20 63 68 65 63   who made a chec
30f0: 6b 69 6e 67 20 2a 2f 0a 23 20 64 65 66 69 6e 65  king */.# define
3100: 20 54 41 47 5f 48 49 44 44 45 4e 20 20 20 20 20   TAG_HIDDEN     
3110: 34 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  4     /* Do not 
3120: 64 69 73 70 6c 61 79 20 6f 72 20 73 79 6e 63 20  display or sync 
3130: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 54 41 47 5f  */.# define TAG_
3140: 50 52 49 56 41 54 45 20 20 20 20 35 20 20 20 20  PRIVATE    5    
3150: 20 2f 2a 20 44 69 73 70 6c 61 79 20 62 75 74 20   /* Display but 
3160: 64 6f 20 6e 6f 74 20 73 79 6e 63 20 2a 2f 0a 23  do not sync */.#
3170: 20 64 65 66 69 6e 65 20 54 41 47 5f 43 4c 55 53   define TAG_CLUS
3180: 54 45 52 20 20 20 20 36 20 20 20 20 20 2f 2a 20  TER    6     /* 
3190: 41 20 63 6c 75 73 74 65 72 20 2a 2f 0a 23 65 6e  A cluster */.#en
31a0: 64 69 66 0a 23 69 66 20 45 58 50 4f 52 54 5f 49  dif.#if EXPORT_I
31b0: 4e 54 45 52 46 41 43 45 0a 23 20 64 65 66 69 6e  NTERFACE.# defin
31c0: 65 20 4d 41 58 5f 49 4e 54 5f 54 41 47 20 20 20  e MAX_INT_TAG   
31d0: 20 36 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61   6     /* The la
31e0: 72 67 65 73 74 20 70 72 65 2d 61 73 73 69 67 6e  rgest pre-assign
31f0: 65 64 20 74 61 67 20 69 64 20 2a 2f 0a 23 65 6e  ed tag id */.#en
3200: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  dif../*.** The s
3210: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 6c 6f  chema for the lo
3220: 63 61 74 65 20 46 4f 53 53 49 4c 20 64 61 74 61  cate FOSSIL data
3230: 62 61 73 65 20 66 69 6c 65 20 66 6f 75 6e 64 20  base file found 
3240: 61 74 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 6f  at the root.** o
3250: 66 20 76 65 72 79 20 63 68 65 63 6b 2d 6f 75 74  f very check-out
3260: 2e 20 20 54 68 69 73 20 64 61 74 61 62 61 73 65  .  This database
3270: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 6f   contains the co
3280: 6d 70 6c 65 74 65 20 73 74 61 74 65 20 6f 66 0a  mplete state of.
3290: 2a 2a 20 74 68 65 20 63 68 65 63 6b 6f 75 74 2e  ** the checkout.
32a0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 7a  .*/.const char z
32b0: 4c 6f 63 61 6c 53 63 68 65 6d 61 5b 5d 20 3d 0a  LocalSchema[] =.
32c0: 40 20 2d 2d 20 54 68 65 20 56 56 41 52 20 74 61  @ -- The VVAR ta
32d0: 62 6c 65 20 68 6f 6c 64 73 20 6d 69 73 63 65 6c  ble holds miscel
32e0: 6c 61 6e 6f 75 73 20 69 6e 66 6f 72 6d 61 74 69  lanous informati
32f0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 6f 63  on about the loc
3300: 61 6c 20 64 61 74 61 62 61 73 65 0a 40 20 2d 2d  al database.@ --
3310: 20 69 6e 20 74 68 65 20 66 6f 72 6d 20 6f 66 20   in the form of 
3320: 6e 61 6d 65 2d 76 61 6c 75 65 20 70 61 69 72 73  name-value pairs
3330: 2e 20 20 54 68 69 73 20 69 73 20 73 69 6d 69 6c  .  This is simil
3340: 61 72 20 74 6f 20 74 68 65 20 56 41 52 20 74 61  ar to the VAR ta
3350: 62 6c 65 0a 40 20 2d 2d 20 74 61 62 6c 65 20 69  ble.@ -- table i
3360: 6e 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  n the repository
3370: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 69   except that thi
3380: 73 20 74 61 62 6c 65 20 68 6f 6c 64 73 20 69 6e  s table holds in
3390: 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 40  formation that.@
33a0: 20 2d 2d 20 69 73 20 73 70 65 63 69 66 69 63 20   -- is specific 
33b0: 74 6f 20 74 68 65 20 6c 6f 63 61 6c 20 63 68 65  to the local che
33c0: 63 6b 6f 75 74 2e 0a 40 20 2d 2d 0a 40 20 2d 2d  ckout..@ --.@ --
33d0: 20 49 6d 70 6f 72 74 61 6e 74 20 56 61 72 69 61   Important Varia
33e0: 62 6c 65 73 3a 0a 40 20 2d 2d 0a 40 20 2d 2d 20  bles:.@ --.@ -- 
33f0: 20 20 20 20 72 65 70 6f 73 69 74 6f 72 79 20 20      repository  
3400: 20 20 20 20 20 20 46 75 6c 6c 20 70 61 74 68 6e        Full pathn
3410: 61 6d 65 20 6f 66 20 74 68 65 20 72 65 70 6f 73  ame of the repos
3420: 69 74 6f 72 79 20 64 61 74 61 62 61 73 65 0a 40  itory database.@
3430: 20 2d 2d 20 20 20 20 20 75 73 65 72 2d 69 64 20   --     user-id 
3440: 20 20 20 20 20 20 20 20 20 20 55 73 65 72 69 64            Userid
3450: 20 74 6f 20 75 73 65 0a 40 20 2d 2d 0a 40 20 43   to use.@ --.@ C
3460: 52 45 41 54 45 20 54 41 42 4c 45 20 76 76 61 72  REATE TABLE vvar
3470: 28 0a 40 20 20 20 6e 61 6d 65 20 54 45 58 54 20  (.@   name TEXT 
3480: 50 52 49 4d 41 52 59 20 4b 45 59 20 4e 4f 54 20  PRIMARY KEY NOT 
3490: 4e 55 4c 4c 2c 20 20 2d 2d 20 50 72 69 6d 61 72  NULL,  -- Primar
34a0: 79 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 6e  y name of the en
34b0: 74 72 79 0a 40 20 20 20 76 61 6c 75 65 20 43 4c  try.@   value CL
34c0: 4f 42 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  OB,             
34d0: 20 20 20 20 20 20 20 20 20 2d 2d 20 43 6f 6e 74           -- Cont
34e0: 65 6e 74 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  ent of the named
34f0: 20 70 61 72 61 6d 65 74 65 72 0a 40 20 20 20 43   parameter.@   C
3500: 48 45 43 4b 28 20 74 79 70 65 6f 66 28 6e 61 6d  HECK( typeof(nam
3510: 65 29 3d 27 74 65 78 74 27 20 41 4e 44 20 6c 65  e)='text' AND le
3520: 6e 67 74 68 28 6e 61 6d 65 29 3e 3d 31 20 29 0a  ngth(name)>=1 ).
3530: 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 45 61 63 68  @ );.@.@ -- Each
3540: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 76 66   entry in the vf
3550: 69 6c 65 20 74 61 62 6c 65 20 72 65 70 72 65 73  ile table repres
3560: 65 6e 74 73 20 61 20 73 69 6e 67 6c 65 20 66 69  ents a single fi
3570: 6c 65 20 69 6e 20 74 68 65 0a 40 20 2d 2d 20 63  le in the.@ -- c
3580: 75 72 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2e  urrent checkout.
3590: 0a 40 20 2d 2d 0a 40 20 2d 2d 20 54 68 65 20 66  .@ --.@ -- The f
35a0: 69 6c 65 2e 72 69 64 20 66 69 65 6c 64 20 69 73  ile.rid field is
35b0: 20 30 20 66 6f 72 20 66 69 6c 65 73 20 6f 72 20   0 for files or 
35c0: 66 6f 6c 64 65 72 73 20 74 68 61 74 20 68 61 76  folders that hav
35d0: 65 20 62 65 65 6e 0a 40 20 2d 2d 20 61 64 64 65  e been.@ -- adde
35e0: 64 20 62 75 74 20 6e 6f 74 20 79 65 74 20 63 6f  d but not yet co
35f0: 6d 6d 69 74 74 65 64 2e 0a 40 20 2d 2d 0a 40 20  mmitted..@ --.@ 
3600: 2d 2d 20 56 66 69 6c 65 2e 63 68 6e 67 65 64 20  -- Vfile.chnged 
3610: 69 73 20 30 20 66 6f 72 20 75 6e 6d 6f 64 69 66  is 0 for unmodif
3620: 69 65 64 20 66 69 6c 65 73 2c 20 31 20 66 6f 72  ied files, 1 for
3630: 20 66 69 6c 65 73 20 74 68 61 74 20 68 61 76 65   files that have
3640: 0a 40 20 2d 2d 20 62 65 65 6e 20 65 64 69 74 65  .@ -- been edite
3650: 64 20 6f 72 20 77 68 69 63 68 20 68 61 76 65 20  d or which have 
3660: 62 65 65 6e 20 73 75 62 6a 65 63 74 65 64 20 74  been subjected t
3670: 6f 20 61 20 33 2d 77 61 79 20 6d 65 72 67 65 2e  o a 3-way merge.
3680: 20 20 0a 40 20 2d 2d 20 56 66 69 6c 65 2e 63 68    .@ -- Vfile.ch
3690: 6e 67 65 64 20 69 73 20 32 20 69 66 20 74 68 65  nged is 2 if the
36a0: 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 72   file has been r
36b0: 65 70 6c 61 63 65 64 20 66 72 6f 6d 20 61 20 64  eplaced from a d
36c0: 69 66 66 65 72 65 6e 74 0a 40 20 2d 2d 20 76 65  ifferent.@ -- ve
36d0: 72 73 69 6f 6e 20 62 79 20 74 68 65 20 6d 65 72  rsion by the mer
36e0: 67 65 20 61 6e 64 20 33 20 69 66 20 74 68 65 20  ge and 3 if the 
36f0: 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 61 64  file has been ad
3700: 64 65 64 20 62 79 20 61 20 6d 65 72 67 65 2e 0a  ded by a merge..
3710: 40 20 2d 2d 20 54 68 65 20 64 69 66 66 65 72 65  @ -- The differe
3720: 6e 63 65 20 62 65 74 77 65 65 6e 20 76 66 69 6c  nce between vfil
3730: 65 2e 63 68 6e 67 65 64 3d 3d 32 20 61 6e 64 20  e.chnged==2 and 
3740: 61 20 72 65 67 75 6c 61 72 20 61 64 64 20 69 73  a regular add is
3750: 20 74 68 61 74 0a 40 20 2d 2d 20 77 69 74 68 20   that.@ -- with 
3760: 76 66 69 6c 65 2e 63 68 6e 67 65 64 3d 3d 32 20  vfile.chnged==2 
3770: 77 65 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65  we know that the
3780: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
3790: 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 40 20 2d   of the file.@ -
37a0: 2d 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20  - is already in 
37b0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a  the repository..
37c0: 40 20 2d 2d 20 0a 40 20 2d 2d 0a 40 20 43 52 45  @ -- .@ --.@ CRE
37d0: 41 54 45 20 54 41 42 4c 45 20 76 66 69 6c 65 28  ATE TABLE vfile(
37e0: 0a 40 20 20 20 69 64 20 49 4e 54 45 47 45 52 20  .@   id INTEGER 
37f0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20  PRIMARY KEY,    
3800: 20 20 20 20 20 20 20 2d 2d 20 49 44 20 6f 66 20         -- ID of 
3810: 74 68 65 20 63 68 65 63 6b 65 64 20 6f 75 74 20  the checked out 
3820: 66 69 6c 65 0a 40 20 20 20 76 69 64 20 49 4e 54  file.@   vid INT
3830: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
3840: 62 6c 6f 62 2c 20 20 20 20 20 20 2d 2d 20 54 68  blob,      -- Th
3850: 65 20 62 61 73 65 6c 69 6e 65 20 74 68 69 73 20  e baseline this 
3860: 66 69 6c 65 20 69 73 20 70 61 72 74 20 6f 66 2e  file is part of.
3870: 0a 40 20 20 20 63 68 6e 67 65 64 20 49 4e 54 20  .@   chnged INT 
3880: 44 45 46 41 55 4c 54 20 30 2c 20 20 20 20 20 20  DEFAULT 0,      
3890: 20 20 20 20 20 20 20 2d 2d 20 30 3a 75 6e 63 68         -- 0:unch
38a0: 6e 67 65 64 20 31 3a 65 64 69 74 65 64 20 32 3a  nged 1:edited 2:
38b0: 6d 2d 63 68 6e 67 20 33 3a 6d 2d 61 64 64 0a 40  m-chng 3:m-add.@
38c0: 20 20 20 64 65 6c 65 74 65 64 20 42 4f 4f 4c 45     deleted BOOLE
38d0: 41 4e 20 44 45 46 41 55 4c 54 20 30 2c 20 20 20  AN DEFAULT 0,   
38e0: 20 20 20 20 20 2d 2d 20 54 72 75 65 20 69 66 20       -- True if 
38f0: 64 65 6c 65 74 65 64 20 0a 40 20 20 20 72 69 64  deleted .@   rid
3900: 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20 20   INTEGER,       
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
3920: 2d 20 4f 72 69 67 69 6e 61 6c 6c 79 20 66 72 6f  - Originally fro
3930: 6d 20 74 68 69 73 20 72 65 70 6f 73 69 74 6f 72  m this repositor
3940: 79 20 72 65 63 6f 72 64 0a 40 20 20 20 6d 72 69  y record.@   mri
3950: 64 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20  d INTEGER,      
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
3970: 2d 20 42 61 73 65 64 20 6f 6e 20 74 68 69 73 20  - Based on this 
3980: 72 65 63 6f 72 64 20 64 75 65 20 74 6f 20 61 20  record due to a 
3990: 6d 65 72 67 65 0a 40 20 20 20 6d 74 69 6d 65 20  merge.@   mtime 
39a0: 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20 20 20  INTEGER,        
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 4d              -- M
39c0: 6f 64 69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65  odification time
39d0: 20 6f 66 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b   of file on disk
39e0: 0a 40 20 20 20 70 61 74 68 6e 61 6d 65 20 54 45  .@   pathname TE
39f0: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
3a00: 20 20 20 20 20 20 20 2d 2d 20 46 75 6c 6c 20 70         -- Full p
3a10: 61 74 68 6e 61 6d 65 20 72 65 6c 61 74 69 76 65  athname relative
3a20: 20 74 6f 20 72 6f 6f 74 0a 40 20 20 20 6f 72 69   to root.@   ori
3a30: 67 6e 61 6d 65 20 54 45 58 54 2c 20 20 20 20 20  gname TEXT,     
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
3a50: 2d 20 4f 72 69 67 69 6e 61 6c 20 70 61 74 68 6e  - Original pathn
3a60: 61 6d 65 2e 20 4e 55 4c 4c 20 69 66 20 75 6e 63  ame. NULL if unc
3a70: 68 61 6e 67 65 64 0a 40 20 20 20 55 4e 49 51 55  hanged.@   UNIQU
3a80: 45 28 70 61 74 68 6e 61 6d 65 2c 76 69 64 29 0a  E(pathname,vid).
3a90: 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 54 68 69 73  @ );.@.@ -- This
3aa0: 20 74 61 62 6c 65 20 68 6f 6c 64 73 20 61 20 72   table holds a r
3ab0: 65 63 6f 72 64 20 6f 66 20 75 6e 63 6f 6d 6d 69  ecord of uncommi
3ac0: 74 74 65 64 20 6d 65 72 67 65 73 20 69 6e 20 74  tted merges in t
3ad0: 68 65 20 6c 6f 63 61 6c 0a 40 20 2d 2d 20 66 69  he local.@ -- fi
3ae0: 6c 65 20 74 72 65 65 2e 20 20 49 66 20 61 20 56  le tree.  If a V
3af0: 46 49 4c 45 20 65 6e 74 72 79 20 77 69 74 68 20  FILE entry with 
3b00: 69 64 20 68 61 73 20 6d 65 72 67 65 64 20 77 69  id has merged wi
3b10: 74 68 20 61 6e 6f 74 68 65 72 0a 40 20 2d 2d 20  th another.@ -- 
3b20: 72 65 63 6f 72 64 2c 20 74 68 65 72 65 20 69 73  record, there is
3b30: 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 69   an entry in thi
3b40: 73 20 74 61 62 6c 65 20 77 69 74 68 20 28 69 64  s table with (id
3b50: 2c 6d 65 72 67 65 29 20 77 68 65 72 65 0a 40 20  ,merge) where.@ 
3b60: 2d 2d 20 6d 65 72 67 65 20 69 73 20 74 68 65 20  -- merge is the 
3b70: 52 45 43 4f 52 44 20 74 61 62 6c 65 20 65 6e 74  RECORD table ent
3b80: 72 79 20 74 68 61 74 20 74 68 65 20 66 69 6c 65  ry that the file
3b90: 20 6d 65 72 67 65 64 20 61 67 61 69 6e 73 74 2e   merged against.
3ba0: 0a 40 20 2d 2d 20 41 6e 20 69 64 20 6f 66 20 30  .@ -- An id of 0
3bb0: 20 68 65 72 65 20 6d 65 61 6e 73 20 74 68 65 20   here means the 
3bc0: 76 65 72 73 69 6f 6e 20 72 65 63 6f 72 64 20 69  version record i
3bd0: 74 73 65 6c 66 2e 0a 40 0a 40 20 43 52 45 41 54  tself..@.@ CREAT
3be0: 45 20 54 41 42 4c 45 20 76 6d 65 72 67 65 28 0a  E TABLE vmerge(.
3bf0: 40 20 20 20 69 64 20 49 4e 54 45 47 45 52 20 52  @   id INTEGER R
3c00: 45 46 45 52 45 4e 43 45 53 20 76 66 69 6c 65 2c  EFERENCES vfile,
3c10: 20 20 20 20 20 20 2d 2d 20 56 46 49 4c 45 20 65        -- VFILE e
3c20: 6e 74 72 79 20 74 68 61 74 20 68 61 73 20 62 65  ntry that has be
3c30: 65 6e 20 6d 65 72 67 65 64 0a 40 20 20 20 6d 65  en merged.@   me
3c40: 72 67 65 20 49 4e 54 45 47 45 52 2c 20 20 20 20  rge INTEGER,    
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c60: 2d 2d 20 4d 65 72 67 65 64 20 77 69 74 68 20 74  -- Merged with t
3c70: 68 69 73 20 72 65 63 6f 72 64 0a 40 20 20 20 55  his record.@   U
3c80: 4e 49 51 55 45 28 69 64 2c 20 6d 65 72 67 65 29  NIQUE(id, merge)
3c90: 0a 40 20 29 3b 0a 40 20 20 20 0a 3b 0a           .@ );.@   .;.