Hex Artifact Content
Not logged in

Artifact aef05753638a3d8786976862b71652008b2b8dfc:

File src/schema.c part of check-in [b6e22e62cf] - Attempting to rationalize the tagging and branching logic. The "branch" command has been resurrected and appears to work now. The "tag branch" command has been removed. Special tags "newbranch" and "closed" used to manage branches. New changes are not well-tested - use with caution. You must "rebuild" when upgrading through this version. by drh on 2009-01-20 16:51:19.

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 20 49 4e 53 45 52  _CLUSTER.@ INSER
2ab0: 54 20 49 4e 54 4f 20 74 61 67 20 56 41 4c 55 45  T INTO tag VALUE
2ac0: 53 28 37 2c 20 27 6e 65 77 62 72 61 6e 63 68 27  S(7, 'newbranch'
2ad0: 29 3b 20 20 20 20 20 20 20 2d 2d 20 54 41 47 5f  );       -- TAG_
2ae0: 4e 45 57 42 52 41 4e 43 48 0a 40 20 49 4e 53 45  NEWBRANCH.@ INSE
2af0: 52 54 20 49 4e 54 4f 20 74 61 67 20 56 41 4c 55  RT INTO tag VALU
2b00: 45 53 28 38 2c 20 27 63 6c 6f 73 65 64 27 29 3b  ES(8, 'closed');
2b10: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 54 41 47            -- TAG
2b20: 5f 43 4c 4f 53 45 44 0a 40 0a 40 20 2d 2d 20 41  _CLOSED.@.@ -- A
2b30: 73 73 69 67 6e 6d 65 6e 74 73 20 6f 66 20 74 61  ssignments of ta
2b40: 67 73 20 74 6f 20 62 61 73 65 6c 69 6e 65 73 2e  gs to baselines.
2b50: 20 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 61    Note that we a
2b60: 6c 6c 6f 77 20 74 61 67 73 20 74 6f 0a 40 20 2d  llow tags to.@ -
2b70: 2d 20 68 61 76 65 20 76 61 6c 75 65 73 20 61 73  - have values as
2b80: 73 69 67 6e 65 64 20 74 6f 20 74 68 65 6d 2e 20  signed to them. 
2b90: 20 53 6f 20 77 65 20 61 72 65 20 6e 6f 74 20 72   So we are not r
2ba0: 65 61 6c 6c 79 20 64 65 61 6c 69 6e 67 20 77 69  eally dealing wi
2bb0: 74 68 0a 40 20 2d 2d 20 74 61 67 73 20 68 65 72  th.@ -- tags her
2bc0: 65 2e 20 20 54 68 65 73 65 20 61 72 65 20 72 65  e.  These are re
2bd0: 61 6c 6c 79 20 70 72 6f 70 65 72 74 69 65 73 2e  ally properties.
2be0: 20 20 42 75 74 20 77 65 20 61 72 65 20 67 6f 69    But we are goi
2bf0: 6e 67 20 74 6f 0a 40 20 2d 2d 20 6b 65 65 70 20  ng to.@ -- keep 
2c00: 63 61 6c 6c 69 6e 67 20 74 68 65 6d 20 74 61 67  calling them tag
2c10: 73 20 62 65 63 61 75 73 65 20 69 6e 20 6d 61 6e  s because in man
2c20: 79 20 63 61 73 65 73 20 74 68 65 20 76 61 6c 75  y cases the valu
2c30: 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 0a 40 20  e is ignored..@ 
2c40: 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c  --.@ CREATE TABL
2c50: 45 20 74 61 67 78 72 65 66 28 0a 40 20 20 20 74  E tagxref(.@   t
2c60: 61 67 69 64 20 49 4e 54 45 47 45 52 20 52 45 46  agid INTEGER REF
2c70: 45 52 45 4e 43 45 53 20 74 61 67 2c 20 20 20 2d  ERENCES tag,   -
2c80: 2d 20 54 68 65 20 74 61 67 20 74 68 61 74 20 61  - The tag that a
2c90: 64 64 65 64 20 6f 72 20 72 65 6d 6f 76 65 64 0a  dded or removed.
2ca0: 40 20 20 20 74 61 67 74 79 70 65 20 49 4e 54 45  @   tagtype INTE
2cb0: 47 45 52 2c 20 20 20 20 20 20 20 20 20 20 20 20  GER,            
2cc0: 20 20 20 20 2d 2d 20 30 3a 63 61 6e 63 65 6c 20      -- 0:cancel 
2cd0: 20 31 3a 73 69 6e 67 6c 65 20 20 32 3a 62 72 61   1:single  2:bra
2ce0: 6e 63 68 0a 40 20 20 20 73 72 63 69 64 20 49 4e  nch.@   srcid IN
2cf0: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
2d00: 20 62 6c 6f 62 2c 20 20 2d 2d 20 4f 72 69 67 69   blob,  -- Origi
2d10: 6e 20 6f 66 20 74 68 65 20 74 61 67 2e 20 30 20  n of the tag. 0 
2d20: 66 6f 72 20 70 72 6f 70 61 67 61 74 65 64 20 74  for propagated t
2d30: 61 67 73 0a 40 20 20 20 76 61 6c 75 65 20 54 45  ags.@   value TE
2d40: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
2d50: 20 20 20 20 20 20 20 20 2d 2d 20 56 61 6c 75 65          -- Value
2d60: 20 6f 66 20 74 68 65 20 74 61 67 2e 20 20 4d 69   of the tag.  Mi
2d70: 67 68 74 20 62 65 20 4e 55 4c 4c 2e 0a 40 20 20  ght be NULL..@  
2d80: 20 6d 74 69 6d 65 20 54 49 4d 45 53 54 41 4d 50   mtime TIMESTAMP
2d90: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2da0: 20 2d 2d 20 54 69 6d 65 20 6f 66 20 61 64 64 69   -- Time of addi
2db0: 74 69 6f 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 0a  tion or removal.
2dc0: 40 20 20 20 72 69 64 20 49 4e 54 45 47 45 52 20  @   rid INTEGER 
2dd0: 52 45 46 45 52 45 4e 43 45 20 62 6c 6f 62 2c 20  REFERENCE blob, 
2de0: 20 20 20 20 2d 2d 20 42 61 73 65 6c 69 6e 65 20      -- Baseline 
2df0: 74 68 61 74 20 74 61 67 20 61 64 64 65 64 2f 72  that tag added/r
2e00: 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 40 20 20 20  emoved from.@   
2e10: 55 4e 49 51 55 45 28 72 69 64 2c 20 74 61 67 69  UNIQUE(rid, tagi
2e20: 64 29 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45  d).@ );.@ CREATE
2e30: 20 49 4e 44 45 58 20 74 61 67 78 72 65 66 5f 69   INDEX tagxref_i
2e40: 31 20 4f 4e 20 74 61 67 78 72 65 66 28 74 61 67  1 ON tagxref(tag
2e50: 69 64 2c 20 6d 74 69 6d 65 29 3b 0a 40 0a 40 20  id, mtime);.@.@ 
2e60: 2d 2d 20 54 65 6d 70 6c 61 74 65 20 66 6f 72 20  -- Template for 
2e70: 74 68 65 20 54 49 43 4b 45 54 20 74 61 62 6c 65  the TICKET table
2e80: 0a 40 20 2d 2d 0a 40 20 2d 2d 20 4e 42 3a 20 77  .@ --.@ -- NB: w
2e90: 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hen changing the
2ea0: 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 54   schema of the T
2eb0: 49 43 4b 45 54 20 74 61 62 6c 65 20 68 65 72 65  ICKET table here
2ec0: 2c 20 61 6c 73 6f 20 6d 61 6b 65 20 74 68 65 0a  , also make the.
2ed0: 40 20 2d 2d 20 73 61 6d 65 20 63 68 61 6e 67 65  @ -- same change
2ee0: 20 69 6e 20 74 6b 74 73 65 74 75 70 2e 63 2e 0a   in tktsetup.c..
2ef0: 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41  @ --.@ CREATE TA
2f00: 42 4c 45 20 74 69 63 6b 65 74 28 0a 40 20 20 20  BLE ticket(.@   
2f10: 2d 2d 20 44 6f 20 6e 6f 74 20 63 68 61 6e 67 65  -- Do not change
2f20: 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 74 68 61 74   any column that
2f30: 20 62 65 67 69 6e 73 20 77 69 74 68 20 74 6b 74   begins with tkt
2f40: 5f 0a 40 20 20 20 74 6b 74 5f 69 64 20 49 4e 54  _.@   tkt_id INT
2f50: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2f60: 2c 0a 40 20 20 20 74 6b 74 5f 75 75 69 64 20 54  ,.@   tkt_uuid T
2f70: 45 58 54 20 55 4e 49 51 55 45 2c 0a 40 20 20 20  EXT UNIQUE,.@   
2f80: 74 6b 74 5f 6d 74 69 6d 65 20 44 41 54 45 2c 0a  tkt_mtime DATE,.
2f90: 40 20 20 20 2d 2d 20 41 64 64 20 61 73 20 6d 61  @   -- Add as ma
2fa0: 6e 79 20 66 69 65 6c 64 20 61 73 20 72 65 71 75  ny field as requ
2fb0: 69 72 65 64 20 62 65 6c 6f 77 20 74 68 69 73 20  ired below this 
2fc0: 6c 69 6e 65 0a 40 20 20 20 74 79 70 65 20 54 45  line.@   type TE
2fd0: 58 54 2c 0a 40 20 20 20 73 74 61 74 75 73 20 54  XT,.@   status T
2fe0: 45 58 54 2c 0a 40 20 20 20 73 75 62 73 79 73 74  EXT,.@   subsyst
2ff0: 65 6d 20 54 45 58 54 2c 0a 40 20 20 20 70 72 69  em TEXT,.@   pri
3000: 6f 72 69 74 79 20 54 45 58 54 2c 0a 40 20 20 20  ority TEXT,.@   
3010: 73 65 76 65 72 69 74 79 20 54 45 58 54 2c 0a 40  severity TEXT,.@
3020: 20 20 20 66 6f 75 6e 64 69 6e 20 54 45 58 54 2c     foundin TEXT,
3030: 0a 40 20 20 20 70 72 69 76 61 74 65 5f 63 6f 6e  .@   private_con
3040: 74 61 63 74 20 54 45 58 54 2c 0a 40 20 20 20 72  tact TEXT,.@   r
3050: 65 73 6f 6c 75 74 69 6f 6e 20 54 45 58 54 2c 0a  esolution TEXT,.
3060: 40 20 20 20 74 69 74 6c 65 20 54 45 58 54 2c 0a  @   title TEXT,.
3070: 40 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 58 54  @   comment TEXT
3080: 0a 40 20 29 3b 0a 3b 0a 0a 2f 2a 0a 2a 2a 20 50  .@ );.;../*.** P
3090: 72 65 64 65 66 69 6e 65 64 20 74 61 67 69 64 20  redefined tagid 
30a0: 76 61 6c 75 65 73 0a 2a 2f 0a 23 69 66 20 49 4e  values.*/.#if IN
30b0: 54 45 52 46 41 43 45 0a 23 20 64 65 66 69 6e 65  TERFACE.# define
30c0: 20 54 41 47 5f 42 47 43 4f 4c 4f 52 20 20 20 20   TAG_BGCOLOR    
30d0: 31 20 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65  1     /* Set the
30e0: 20 62 61 63 6b 67 72 6f 75 6e 64 20 63 6f 6c 6f   background colo
30f0: 72 20 66 6f 72 20 64 69 73 70 6c 61 79 20 2a 2f  r for display */
3100: 0a 23 20 64 65 66 69 6e 65 20 54 41 47 5f 43 4f  .# define TAG_CO
3110: 4d 4d 45 4e 54 20 20 20 20 32 20 20 20 20 20 2f  MMENT    2     /
3120: 2a 20 54 68 65 20 63 68 65 63 6b 2d 69 6e 20 63  * The check-in c
3130: 6f 6d 6d 65 6e 74 20 2a 2f 0a 23 20 64 65 66 69  omment */.# defi
3140: 6e 65 20 54 41 47 5f 55 53 45 52 20 20 20 20 20  ne TAG_USER     
3150: 20 20 33 20 20 20 20 20 2f 2a 20 55 73 65 72 20    3     /* User 
3160: 77 68 6f 20 6d 61 64 65 20 61 20 63 68 65 63 6b  who made a check
3170: 69 6e 67 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  ing */.# define 
3180: 54 41 47 5f 48 49 44 44 45 4e 20 20 20 20 20 34  TAG_HIDDEN     4
3190: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 64       /* Do not d
31a0: 69 73 70 6c 61 79 20 6f 72 20 73 79 6e 63 20 2a  isplay or sync *
31b0: 2f 0a 23 20 64 65 66 69 6e 65 20 54 41 47 5f 50  /.# define TAG_P
31c0: 52 49 56 41 54 45 20 20 20 20 35 20 20 20 20 20  RIVATE    5     
31d0: 2f 2a 20 44 69 73 70 6c 61 79 20 62 75 74 20 64  /* Display but d
31e0: 6f 20 6e 6f 74 20 73 79 6e 63 20 2a 2f 0a 23 20  o not sync */.# 
31f0: 64 65 66 69 6e 65 20 54 41 47 5f 43 4c 55 53 54  define TAG_CLUST
3200: 45 52 20 20 20 20 36 20 20 20 20 20 2f 2a 20 41  ER    6     /* A
3210: 20 63 6c 75 73 74 65 72 20 2a 2f 0a 23 20 64 65   cluster */.# de
3220: 66 69 6e 65 20 54 41 47 5f 4e 45 57 42 52 41 4e  fine TAG_NEWBRAN
3230: 43 48 20 20 37 20 20 20 20 20 2f 2a 20 46 69 72  CH  7     /* Fir
3240: 73 74 20 63 68 65 63 6b 2d 69 6e 20 6f 66 20 61  st check-in of a
3250: 20 6e 65 77 20 6e 61 6d 65 64 20 62 72 61 6e 63   new named branc
3260: 68 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 54 41  h */.# define TA
3270: 47 5f 43 4c 4f 53 45 44 20 20 20 20 20 38 20 20  G_CLOSED     8  
3280: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 69 73     /* Do not dis
3290: 70 6c 61 79 20 74 68 69 73 20 63 68 65 63 6b 2d  play this check-
32a0: 69 6e 20 61 73 20 61 20 6c 65 61 66 20 2a 2f 0a  in as a leaf */.
32b0: 23 65 6e 64 69 66 0a 23 69 66 20 45 58 50 4f 52  #endif.#if EXPOR
32c0: 54 5f 49 4e 54 45 52 46 41 43 45 0a 23 20 64 65  T_INTERFACE.# de
32d0: 66 69 6e 65 20 4d 41 58 5f 49 4e 54 5f 54 41 47  fine MAX_INT_TAG
32e0: 20 20 20 20 38 20 20 20 20 20 2f 2a 20 54 68 65      8     /* The
32f0: 20 6c 61 72 67 65 73 74 20 70 72 65 2d 61 73 73   largest pre-ass
3300: 69 67 6e 65 64 20 74 61 67 20 69 64 20 2a 2f 0a  igned tag id */.
3310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
3320: 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e schema for the
3330: 20 6c 6f 63 61 74 65 20 46 4f 53 53 49 4c 20 64   locate FOSSIL d
3340: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 75  atabase file fou
3350: 6e 64 20 61 74 20 74 68 65 20 72 6f 6f 74 0a 2a  nd at the root.*
3360: 2a 20 6f 66 20 76 65 72 79 20 63 68 65 63 6b 2d  * of very check-
3370: 6f 75 74 2e 20 20 54 68 69 73 20 64 61 74 61 62  out.  This datab
3380: 61 73 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ase contains the
3390: 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65 20   complete state 
33a0: 6f 66 0a 2a 2a 20 74 68 65 20 63 68 65 63 6b 6f  of.** the checko
33b0: 75 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  ut..*/.const cha
33c0: 72 20 7a 4c 6f 63 61 6c 53 63 68 65 6d 61 5b 5d  r zLocalSchema[]
33d0: 20 3d 0a 40 20 2d 2d 20 54 68 65 20 56 56 41 52   =.@ -- The VVAR
33e0: 20 74 61 62 6c 65 20 68 6f 6c 64 73 20 6d 69 73   table holds mis
33f0: 63 65 6c 6c 61 6e 6f 75 73 20 69 6e 66 6f 72 6d  cellanous inform
3400: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
3410: 6c 6f 63 61 6c 20 64 61 74 61 62 61 73 65 0a 40  local database.@
3420: 20 2d 2d 20 69 6e 20 74 68 65 20 66 6f 72 6d 20   -- in the form 
3430: 6f 66 20 6e 61 6d 65 2d 76 61 6c 75 65 20 70 61  of name-value pa
3440: 69 72 73 2e 20 20 54 68 69 73 20 69 73 20 73 69  irs.  This is si
3450: 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 56 41 52  milar to the VAR
3460: 20 74 61 62 6c 65 0a 40 20 2d 2d 20 74 61 62 6c   table.@ -- tabl
3470: 65 20 69 6e 20 74 68 65 20 72 65 70 6f 73 69 74  e in the reposit
3480: 6f 72 79 20 65 78 63 65 70 74 20 74 68 61 74 20  ory except that 
3490: 74 68 69 73 20 74 61 62 6c 65 20 68 6f 6c 64 73  this table holds
34a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
34b0: 74 0a 40 20 2d 2d 20 69 73 20 73 70 65 63 69 66  t.@ -- is specif
34c0: 69 63 20 74 6f 20 74 68 65 20 6c 6f 63 61 6c 20  ic to the local 
34d0: 63 68 65 63 6b 6f 75 74 2e 0a 40 20 2d 2d 0a 40  checkout..@ --.@
34e0: 20 2d 2d 20 49 6d 70 6f 72 74 61 6e 74 20 56 61   -- Important Va
34f0: 72 69 61 62 6c 65 73 3a 0a 40 20 2d 2d 0a 40 20  riables:.@ --.@ 
3500: 2d 2d 20 20 20 20 20 72 65 70 6f 73 69 74 6f 72  --     repositor
3510: 79 20 20 20 20 20 20 20 20 46 75 6c 6c 20 70 61  y        Full pa
3520: 74 68 6e 61 6d 65 20 6f 66 20 74 68 65 20 72 65  thname of the re
3530: 70 6f 73 69 74 6f 72 79 20 64 61 74 61 62 61 73  pository databas
3540: 65 0a 40 20 2d 2d 20 20 20 20 20 75 73 65 72 2d  e.@ --     user-
3550: 69 64 20 20 20 20 20 20 20 20 20 20 20 55 73 65  id           Use
3560: 72 69 64 20 74 6f 20 75 73 65 0a 40 20 2d 2d 0a  rid to use.@ --.
3570: 40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 76  @ CREATE TABLE v
3580: 76 61 72 28 0a 40 20 20 20 6e 61 6d 65 20 54 45  var(.@   name TE
3590: 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4e  XT PRIMARY KEY N
35a0: 4f 54 20 4e 55 4c 4c 2c 20 20 2d 2d 20 50 72 69  OT NULL,  -- Pri
35b0: 6d 61 72 79 20 6e 61 6d 65 20 6f 66 20 74 68 65  mary name of the
35c0: 20 65 6e 74 72 79 0a 40 20 20 20 76 61 6c 75 65   entry.@   value
35d0: 20 43 4c 4f 42 2c 20 20 20 20 20 20 20 20 20 20   CLOB,          
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 43              -- C
35f0: 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6e 61  ontent of the na
3600: 6d 65 64 20 70 61 72 61 6d 65 74 65 72 0a 40 20  med parameter.@ 
3610: 20 20 43 48 45 43 4b 28 20 74 79 70 65 6f 66 28    CHECK( typeof(
3620: 6e 61 6d 65 29 3d 27 74 65 78 74 27 20 41 4e 44  name)='text' AND
3630: 20 6c 65 6e 67 74 68 28 6e 61 6d 65 29 3e 3d 31   length(name)>=1
3640: 20 29 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 45   ).@ );.@.@ -- E
3650: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
3660: 20 76 66 69 6c 65 20 74 61 62 6c 65 20 72 65 70   vfile table rep
3670: 72 65 73 65 6e 74 73 20 61 20 73 69 6e 67 6c 65  resents a single
3680: 20 66 69 6c 65 20 69 6e 20 74 68 65 0a 40 20 2d   file in the.@ -
3690: 2d 20 63 75 72 72 65 6e 74 20 63 68 65 63 6b 6f  - current checko
36a0: 75 74 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20 54 68  ut..@ --.@ -- Th
36b0: 65 20 66 69 6c 65 2e 72 69 64 20 66 69 65 6c 64  e file.rid field
36c0: 20 69 73 20 30 20 66 6f 72 20 66 69 6c 65 73 20   is 0 for files 
36d0: 6f 72 20 66 6f 6c 64 65 72 73 20 74 68 61 74 20  or folders that 
36e0: 68 61 76 65 20 62 65 65 6e 0a 40 20 2d 2d 20 61  have been.@ -- a
36f0: 64 64 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74  dded but not yet
3700: 20 63 6f 6d 6d 69 74 74 65 64 2e 0a 40 20 2d 2d   committed..@ --
3710: 0a 40 20 2d 2d 20 56 66 69 6c 65 2e 63 68 6e 67  .@ -- Vfile.chng
3720: 65 64 20 69 73 20 30 20 66 6f 72 20 75 6e 6d 6f  ed is 0 for unmo
3730: 64 69 66 69 65 64 20 66 69 6c 65 73 2c 20 31 20  dified files, 1 
3740: 66 6f 72 20 66 69 6c 65 73 20 74 68 61 74 20 68  for files that h
3750: 61 76 65 0a 40 20 2d 2d 20 62 65 65 6e 20 65 64  ave.@ -- been ed
3760: 69 74 65 64 20 6f 72 20 77 68 69 63 68 20 68 61  ited or which ha
3770: 76 65 20 62 65 65 6e 20 73 75 62 6a 65 63 74 65  ve been subjecte
3780: 64 20 74 6f 20 61 20 33 2d 77 61 79 20 6d 65 72  d to a 3-way mer
3790: 67 65 2e 20 20 0a 40 20 2d 2d 20 56 66 69 6c 65  ge.  .@ -- Vfile
37a0: 2e 63 68 6e 67 65 64 20 69 73 20 32 20 69 66 20  .chnged is 2 if 
37b0: 74 68 65 20 66 69 6c 65 20 68 61 73 20 62 65 65  the file has bee
37c0: 6e 20 72 65 70 6c 61 63 65 64 20 66 72 6f 6d 20  n replaced from 
37d0: 61 20 64 69 66 66 65 72 65 6e 74 0a 40 20 2d 2d  a different.@ --
37e0: 20 76 65 72 73 69 6f 6e 20 62 79 20 74 68 65 20   version by the 
37f0: 6d 65 72 67 65 20 61 6e 64 20 33 20 69 66 20 74  merge and 3 if t
3800: 68 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  he file has been
3810: 20 61 64 64 65 64 20 62 79 20 61 20 6d 65 72 67   added by a merg
3820: 65 2e 0a 40 20 2d 2d 20 54 68 65 20 64 69 66 66  e..@ -- The diff
3830: 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 76  erence between v
3840: 66 69 6c 65 2e 63 68 6e 67 65 64 3d 3d 32 20 61  file.chnged==2 a
3850: 6e 64 20 61 20 72 65 67 75 6c 61 72 20 61 64 64  nd a regular add
3860: 20 69 73 20 74 68 61 74 0a 40 20 2d 2d 20 77 69   is that.@ -- wi
3870: 74 68 20 76 66 69 6c 65 2e 63 68 6e 67 65 64 3d  th vfile.chnged=
3880: 3d 32 20 77 65 20 6b 6e 6f 77 20 74 68 61 74 20  =2 we know that 
3890: 74 68 65 20 63 75 72 72 65 6e 74 20 76 65 72 73  the current vers
38a0: 69 6f 6e 20 6f 66 20 74 68 65 20 66 69 6c 65 0a  ion of the file.
38b0: 40 20 2d 2d 20 69 73 20 61 6c 72 65 61 64 79 20  @ -- is already 
38c0: 69 6e 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72  in the repositor
38d0: 79 2e 0a 40 20 2d 2d 20 0a 40 20 2d 2d 0a 40 20  y..@ -- .@ --.@ 
38e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 66 69  CREATE TABLE vfi
38f0: 6c 65 28 0a 40 20 20 20 69 64 20 49 4e 54 45 47  le(.@   id INTEG
3900: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
3910: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 49 44 20            -- ID 
3920: 6f 66 20 74 68 65 20 63 68 65 63 6b 65 64 20 6f  of the checked o
3930: 75 74 20 66 69 6c 65 0a 40 20 20 20 76 69 64 20  ut file.@   vid 
3940: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
3950: 45 53 20 62 6c 6f 62 2c 20 20 20 20 20 20 2d 2d  ES blob,      --
3960: 20 54 68 65 20 62 61 73 65 6c 69 6e 65 20 74 68   The baseline th
3970: 69 73 20 66 69 6c 65 20 69 73 20 70 61 72 74 20  is file is part 
3980: 6f 66 2e 0a 40 20 20 20 63 68 6e 67 65 64 20 49  of..@   chnged I
3990: 4e 54 20 44 45 46 41 55 4c 54 20 30 2c 20 20 20  NT DEFAULT 0,   
39a0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 30 3a 75            -- 0:u
39b0: 6e 63 68 6e 67 65 64 20 31 3a 65 64 69 74 65 64  nchnged 1:edited
39c0: 20 32 3a 6d 2d 63 68 6e 67 20 33 3a 6d 2d 61 64   2:m-chng 3:m-ad
39d0: 64 0a 40 20 20 20 64 65 6c 65 74 65 64 20 42 4f  d.@   deleted BO
39e0: 4f 4c 45 41 4e 20 44 45 46 41 55 4c 54 20 30 2c  OLEAN DEFAULT 0,
39f0: 20 20 20 20 20 20 20 20 2d 2d 20 54 72 75 65 20          -- True 
3a00: 69 66 20 64 65 6c 65 74 65 64 20 0a 40 20 20 20  if deleted .@   
3a10: 72 69 64 20 49 4e 54 45 47 45 52 2c 20 20 20 20  rid INTEGER,    
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 2d 2d 20 4f 72 69 67 69 6e 61 6c 6c 79 20    -- Originally 
3a40: 66 72 6f 6d 20 74 68 69 73 20 72 65 70 6f 73 69  from this reposi
3a50: 74 6f 72 79 20 72 65 63 6f 72 64 0a 40 20 20 20  tory record.@   
3a60: 6d 72 69 64 20 49 4e 54 45 47 45 52 2c 20 20 20  mrid INTEGER,   
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a80: 20 20 2d 2d 20 42 61 73 65 64 20 6f 6e 20 74 68    -- Based on th
3a90: 69 73 20 72 65 63 6f 72 64 20 64 75 65 20 74 6f  is record due to
3aa0: 20 61 20 6d 65 72 67 65 0a 40 20 20 20 6d 74 69   a merge.@   mti
3ab0: 6d 65 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20  me INTEGER,     
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
3ad0: 2d 20 4d 6f 64 69 66 69 63 61 74 69 6f 6e 20 74  - Modification t
3ae0: 69 6d 65 20 6f 66 20 66 69 6c 65 20 6f 6e 20 64  ime of file on d
3af0: 69 73 6b 0a 40 20 20 20 70 61 74 68 6e 61 6d 65  isk.@   pathname
3b00: 20 54 45 58 54 2c 20 20 20 20 20 20 20 20 20 20   TEXT,          
3b10: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 46 75 6c            -- Ful
3b20: 6c 20 70 61 74 68 6e 61 6d 65 20 72 65 6c 61 74  l pathname relat
3b30: 69 76 65 20 74 6f 20 72 6f 6f 74 0a 40 20 20 20  ive to root.@   
3b40: 6f 72 69 67 6e 61 6d 65 20 54 45 58 54 2c 20 20  origname TEXT,  
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 20 2d 2d 20 4f 72 69 67 69 6e 61 6c 20 70 61    -- Original pa
3b70: 74 68 6e 61 6d 65 2e 20 4e 55 4c 4c 20 69 66 20  thname. NULL if 
3b80: 75 6e 63 68 61 6e 67 65 64 0a 40 20 20 20 55 4e  unchanged.@   UN
3b90: 49 51 55 45 28 70 61 74 68 6e 61 6d 65 2c 76 69  IQUE(pathname,vi
3ba0: 64 29 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 54  d).@ );.@.@ -- T
3bb0: 68 69 73 20 74 61 62 6c 65 20 68 6f 6c 64 73 20  his table holds 
3bc0: 61 20 72 65 63 6f 72 64 20 6f 66 20 75 6e 63 6f  a record of unco
3bd0: 6d 6d 69 74 74 65 64 20 6d 65 72 67 65 73 20 69  mmitted merges i
3be0: 6e 20 74 68 65 20 6c 6f 63 61 6c 0a 40 20 2d 2d  n the local.@ --
3bf0: 20 66 69 6c 65 20 74 72 65 65 2e 20 20 49 66 20   file tree.  If 
3c00: 61 20 56 46 49 4c 45 20 65 6e 74 72 79 20 77 69  a VFILE entry wi
3c10: 74 68 20 69 64 20 68 61 73 20 6d 65 72 67 65 64  th id has merged
3c20: 20 77 69 74 68 20 61 6e 6f 74 68 65 72 0a 40 20   with another.@ 
3c30: 2d 2d 20 72 65 63 6f 72 64 2c 20 74 68 65 72 65  -- record, there
3c40: 20 69 73 20 61 6e 20 65 6e 74 72 79 20 69 6e 20   is an entry in 
3c50: 74 68 69 73 20 74 61 62 6c 65 20 77 69 74 68 20  this table with 
3c60: 28 69 64 2c 6d 65 72 67 65 29 20 77 68 65 72 65  (id,merge) where
3c70: 0a 40 20 2d 2d 20 6d 65 72 67 65 20 69 73 20 74  .@ -- merge is t
3c80: 68 65 20 52 45 43 4f 52 44 20 74 61 62 6c 65 20  he RECORD table 
3c90: 65 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 66  entry that the f
3ca0: 69 6c 65 20 6d 65 72 67 65 64 20 61 67 61 69 6e  ile merged again
3cb0: 73 74 2e 0a 40 20 2d 2d 20 41 6e 20 69 64 20 6f  st..@ -- An id o
3cc0: 66 20 30 20 68 65 72 65 20 6d 65 61 6e 73 20 74  f 0 here means t
3cd0: 68 65 20 76 65 72 73 69 6f 6e 20 72 65 63 6f 72  he version recor
3ce0: 64 20 69 74 73 65 6c 66 2e 0a 40 0a 40 20 43 52  d itself..@.@ CR
3cf0: 45 41 54 45 20 54 41 42 4c 45 20 76 6d 65 72 67  EATE TABLE vmerg
3d00: 65 28 0a 40 20 20 20 69 64 20 49 4e 54 45 47 45  e(.@   id INTEGE
3d10: 52 20 52 45 46 45 52 45 4e 43 45 53 20 76 66 69  R REFERENCES vfi
3d20: 6c 65 2c 20 20 20 20 20 20 2d 2d 20 56 46 49 4c  le,      -- VFIL
3d30: 45 20 65 6e 74 72 79 20 74 68 61 74 20 68 61 73  E entry that has
3d40: 20 62 65 65 6e 20 6d 65 72 67 65 64 0a 40 20 20   been merged.@  
3d50: 20 6d 65 72 67 65 20 49 4e 54 45 47 45 52 2c 20   merge INTEGER, 
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 2d 2d 20 4d 65 72 67 65 64 20 77 69 74     -- Merged wit
3d80: 68 20 74 68 69 73 20 72 65 63 6f 72 64 0a 40 20  h this record.@ 
3d90: 20 20 55 4e 49 51 55 45 28 69 64 2c 20 6d 65 72    UNIQUE(id, mer
3da0: 67 65 29 0a 40 20 29 3b 0a 40 20 20 20 0a 3b 0a  ge).@ );.@   .;.