Hex Artifact Content
Not logged in

Artifact c780fb4f32ae73072ae3d93c07bc6c24d5270cdb:

File src/schema.c part of check-in [4c82c7773f] - Fix some annoyances with "merge". This involves a schema change to the _FOSSIL_ file. Older versions will continue to work, but it would make since to "close" and "open" local source tree after updating to this version of fossil, in order to update the schema. by drh on 2007-08-30 20:27:14.

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 2c 20 20 20 20 20  EXT UNIQUE,     
0b30: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 48 41            -- 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 20 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 29 3b 0a 40 20 43 52 45 41 54 45 20 54 41 42   );.@ CREATE TAB
0bb0: 4c 45 20 64 65 6c 74 61 28 0a 40 20 20 20 72 69  LE delta(.@   ri
0bc0: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
0bd0: 59 20 4b 45 59 2c 20 20 20 20 20 20 20 20 20 20  Y KEY,          
0be0: 20 20 20 20 20 20 20 2d 2d 20 52 65 63 6f 72 64         -- Record
0bf0: 20 49 44 0a 40 20 20 20 73 72 63 69 64 20 49 4e   ID.@   srcid IN
0c00: 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 52  TEGER NOT NULL R
0c10: 45 46 45 52 45 4e 43 45 53 20 62 6c 6f 62 20 20  EFERENCES blob  
0c20: 20 2d 2d 20 52 65 63 6f 72 64 20 68 6f 6c 64 69   -- Record holdi
0c30: 6e 67 20 73 6f 75 72 63 65 20 64 6f 63 75 6d 65  ng source docume
0c40: 6e 74 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45  nt.@ );.@ CREATE
0c50: 20 49 4e 44 45 58 20 64 65 6c 74 61 5f 69 31 20   INDEX delta_i1 
0c60: 4f 4e 20 64 65 6c 74 61 28 73 72 63 69 64 29 3b  ON delta(srcid);
0c70: 0a 40 0a 40 20 2d 2d 20 57 68 65 6e 65 76 65 72  .@.@ -- Whenever
0c80: 20 6e 65 77 20 62 6c 6f 62 73 20 61 72 65 20 72   new blobs are r
0c90: 65 63 65 69 76 65 64 20 69 6e 74 6f 20 74 68 65  eceived into the
0ca0: 20 72 65 70 6f 73 69 74 6f 72 79 2c 20 61 6e 20   repository, an 
0cb0: 65 6e 74 72 79 0a 40 20 2d 2d 20 69 6e 20 74 68  entry.@ -- in th
0cc0: 69 73 20 74 61 62 6c 65 20 72 65 63 6f 72 64 73  is table records
0cd0: 20 74 68 65 20 73 6f 75 72 63 65 20 6f 66 20 74   the source of t
0ce0: 68 65 20 62 6c 6f 62 2e 0a 40 20 2d 2d 0a 40 20  he blob..@ --.@ 
0cf0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 72 63 76  CREATE TABLE rcv
0d00: 66 72 6f 6d 28 0a 40 20 20 20 72 63 76 69 64 20  from(.@   rcvid 
0d10: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0d20: 4b 45 59 2c 20 20 20 20 20 20 2d 2d 20 52 65 63  KEY,      -- Rec
0d30: 65 69 76 65 64 2d 46 72 6f 6d 20 49 44 0a 40 20  eived-From ID.@ 
0d40: 20 20 75 69 64 20 49 4e 54 45 47 45 52 20 52 45    uid INTEGER RE
0d50: 46 45 52 45 4e 43 45 53 20 75 73 65 72 2c 20 20  FERENCES user,  
0d60: 20 20 2d 2d 20 55 73 65 72 20 6c 6f 67 69 6e 0a    -- User login.
0d70: 40 20 20 20 6d 74 69 6d 65 20 44 41 54 45 54 49  @   mtime DATETI
0d80: 4d 45 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ME,             
0d90: 20 20 20 20 2d 2d 20 54 69 6d 65 20 6f 72 20 72      -- Time or r
0da0: 65 63 65 69 70 74 0a 40 20 20 20 6e 6f 6e 63 65  eceipt.@   nonce
0db0: 20 54 45 58 54 20 55 4e 49 51 55 45 2c 20 20 20   TEXT UNIQUE,   
0dc0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 4e 6f             -- No
0dd0: 6e 63 65 20 75 73 65 64 20 66 6f 72 20 6c 6f 67  nce used for log
0de0: 69 6e 0a 40 20 20 20 69 70 61 64 64 72 20 54 45  in.@   ipaddr TE
0df0: 58 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  XT              
0e00: 20 20 20 20 20 20 20 2d 2d 20 52 65 6d 6f 74 65         -- Remote
0e10: 20 49 50 20 61 64 64 72 65 73 73 2e 20 20 4e 55   IP address.  NU
0e20: 4c 4c 20 66 6f 72 20 64 69 72 65 63 74 2e 0a 40  LL for direct..@
0e30: 20 29 3b 0a 40 0a 40 20 2d 2d 20 49 6e 66 6f 72   );.@.@ -- Infor
0e40: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 75 73 65  mation about use
0e50: 72 73 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45  rs.@ --.@ CREATE
0e60: 20 54 41 42 4c 45 20 75 73 65 72 28 0a 40 20 20   TABLE user(.@  
0e70: 20 75 69 64 20 49 4e 54 45 47 45 52 20 50 52 49   uid INTEGER PRI
0e80: 4d 41 52 59 20 4b 45 59 2c 20 20 20 20 20 20 20  MARY KEY,       
0e90: 20 2d 2d 20 55 73 65 72 20 49 44 0a 40 20 20 20   -- User ID.@   
0ea0: 6c 6f 67 69 6e 20 54 45 58 54 2c 20 20 20 20 20  login TEXT,     
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ec0: 2d 2d 20 6c 6f 67 69 6e 20 6e 61 6d 65 20 6f 66  -- login name of
0ed0: 20 74 68 65 20 75 73 65 72 0a 40 20 20 20 70 77   the user.@   pw
0ee0: 20 54 45 58 54 2c 20 20 20 20 20 20 20 20 20 20   TEXT,          
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
0f00: 20 70 61 73 73 77 6f 72 64 0a 40 20 20 20 63 61   password.@   ca
0f10: 70 20 54 45 58 54 2c 20 20 20 20 20 20 20 20 20  p TEXT,         
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
0f30: 20 43 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   Capabilities of
0f40: 20 74 68 69 73 20 75 73 65 72 0a 40 20 20 20 63   this user.@   c
0f50: 6f 6f 6b 69 65 20 54 45 58 54 2c 20 20 20 20 20  ookie TEXT,     
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
0f70: 2d 20 57 57 57 20 6c 6f 67 69 6e 20 63 6f 6f 6b  - WWW login cook
0f80: 69 65 0a 40 20 20 20 69 70 61 64 64 72 20 54 45  ie.@   ipaddr TE
0f90: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  XT,             
0fa0: 20 20 20 20 20 20 20 2d 2d 20 49 50 20 61 64 64         -- IP add
0fb0: 72 65 73 73 20 66 6f 72 20 77 68 69 63 68 20 63  ress for which c
0fc0: 6f 6f 6b 69 65 20 69 73 20 76 61 6c 69 64 0a 40  ookie is valid.@
0fd0: 20 20 20 63 65 78 70 69 72 65 20 44 41 54 45 54     cexpire DATET
0fe0: 49 4d 45 2c 20 20 20 20 20 20 20 20 20 20 20 20  IME,            
0ff0: 20 20 20 2d 2d 20 54 69 6d 65 20 77 68 65 6e 20     -- Time when 
1000: 63 6f 6f 6b 69 65 20 65 78 70 69 72 65 73 0a 40  cookie expires.@
1010: 20 20 20 69 6e 66 6f 20 54 45 58 54 2c 20 20 20     info TEXT,   
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1030: 20 20 20 2d 2d 20 63 6f 6e 74 61 63 74 20 69 6e     -- contact in
1040: 66 6f 72 6d 61 74 69 6f 6e 0a 40 20 20 20 70 68  formation.@   ph
1050: 6f 74 6f 20 42 4c 4f 42 20 20 20 20 20 20 20 20  oto BLOB        
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
1070: 20 4a 50 45 47 20 69 6d 61 67 65 20 6f 66 20 74   JPEG image of t
1080: 68 69 73 20 75 73 65 72 0a 40 20 29 3b 0a 40 0a  his user.@ );.@.
1090: 40 20 2d 2d 20 54 68 65 20 56 41 52 20 74 61 62  @ -- The VAR tab
10a0: 6c 65 20 68 6f 6c 64 73 20 6d 69 73 63 65 6c 6c  le holds miscell
10b0: 61 6e 6f 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f  anous informatio
10c0: 6e 20 61 62 6f 75 74 20 74 68 65 20 72 65 70 6f  n about the repo
10d0: 73 69 74 6f 72 79 2e 0a 40 20 2d 2d 20 69 6e 20  sitory..@ -- in 
10e0: 74 68 65 20 66 6f 72 6d 20 6f 66 20 6e 61 6d 65  the form of name
10f0: 2d 76 61 6c 75 65 20 70 61 69 72 73 2e 0a 40 20  -value pairs..@ 
1100: 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c  --.@ CREATE TABL
1110: 45 20 63 6f 6e 66 69 67 28 0a 40 20 20 20 6e 61  E config(.@   na
1120: 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
1130: 4b 45 59 20 4e 4f 54 20 4e 55 4c 4c 2c 20 20 2d  KEY NOT NULL,  -
1140: 2d 20 50 72 69 6d 61 72 79 20 6e 61 6d 65 20 6f  - Primary name o
1150: 66 20 74 68 65 20 65 6e 74 72 79 0a 40 20 20 20  f the entry.@   
1160: 76 61 6c 75 65 20 43 4c 4f 42 2c 20 20 20 20 20  value CLOB,     
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1180: 20 2d 2d 20 43 6f 6e 74 65 6e 74 20 6f 66 20 74   -- Content of t
1190: 68 65 20 6e 61 6d 65 64 20 70 61 72 61 6d 65 74  he named paramet
11a0: 65 72 0a 40 20 20 20 43 48 45 43 4b 28 20 74 79  er.@   CHECK( ty
11b0: 70 65 6f 66 28 6e 61 6d 65 29 3d 27 74 65 78 74  peof(name)='text
11c0: 27 20 41 4e 44 20 6c 65 6e 67 74 68 28 6e 61 6d  ' AND length(nam
11d0: 65 29 3e 3d 31 20 29 0a 40 20 29 3b 0a 3b 0a 63  e)>=1 ).@ );.;.c
11e0: 6f 6e 73 74 20 63 68 61 72 20 7a 52 65 70 6f 73  onst char zRepos
11f0: 69 74 6f 72 79 53 63 68 65 6d 61 32 5b 5d 20 3d  itorySchema2[] =
1200: 0a 40 20 2d 2d 20 46 69 6c 65 6e 61 6d 65 73 0a  .@ -- Filenames.
1210: 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41  @ --.@ CREATE TA
1220: 42 4c 45 20 66 69 6c 65 6e 61 6d 65 28 0a 40 20  BLE filename(.@ 
1230: 20 20 66 6e 69 64 20 49 4e 54 45 47 45 52 20 50    fnid INTEGER P
1240: 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20 2d  RIMARY KEY,    -
1250: 2d 20 46 69 6c 65 6e 61 6d 65 20 49 44 0a 40 20  - Filename ID.@ 
1260: 20 20 6e 61 6d 65 20 54 45 58 54 20 55 4e 49 51    name TEXT UNIQ
1270: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 2d  UE             -
1280: 2d 20 4e 61 6d 65 20 6f 66 20 66 69 6c 65 20 70  - Name of file p
1290: 61 67 65 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20  age.@ );.@.@ -- 
12a0: 4c 69 6e 6b 61 67 65 73 20 62 65 74 77 65 65 6e  Linkages between
12b0: 20 6d 61 6e 69 66 65 73 74 73 2c 20 66 69 6c 65   manifests, file
12c0: 73 20 63 72 65 61 74 65 64 20 62 79 20 74 68 61  s created by tha
12d0: 74 20 6d 61 6e 69 66 65 73 74 2c 20 61 6e 64 0a  t manifest, and.
12e0: 40 20 2d 2d 20 74 68 65 20 6e 61 6d 65 73 20 6f  @ -- the names o
12f0: 66 20 74 68 6f 73 65 20 66 69 6c 65 73 2e 0a 40  f those files..@
1300: 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42   --.@ CREATE TAB
1310: 4c 45 20 6d 6c 69 6e 6b 28 0a 40 20 20 20 6d 69  LE mlink(.@   mi
1320: 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  d INTEGER REFERE
1330: 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20 20 20 20  NCES blob,      
1340: 20 20 2d 2d 20 4d 61 6e 69 66 65 73 74 20 49 44    -- Manifest ID
1350: 20 77 68 65 72 65 20 63 68 61 6e 67 65 20 6f 63   where change oc
1360: 63 75 72 73 0a 40 20 20 20 70 69 64 20 49 4e 54  curs.@   pid INT
1370: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
1380: 62 6c 6f 62 2c 20 20 20 20 20 20 20 20 2d 2d 20  blob,        -- 
1390: 46 69 6c 65 20 49 44 20 69 6e 20 70 61 72 65 6e  File ID in paren
13a0: 74 20 6d 61 6e 69 66 65 73 74 0a 40 20 20 20 66  t manifest.@   f
13b0: 69 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52  id INTEGER REFER
13c0: 45 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20 20 20  ENCES blob,     
13d0: 20 20 20 2d 2d 20 43 68 61 6e 67 65 64 20 66 69     -- Changed fi
13e0: 6c 65 20 49 44 20 69 6e 20 74 68 69 73 20 6d 61  le ID in this ma
13f0: 6e 69 66 65 73 74 0a 40 20 20 20 66 6e 69 64 20  nifest.@   fnid 
1400: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
1410: 45 53 20 66 69 6c 65 6e 61 6d 65 20 20 20 20 2d  ES filename    -
1420: 2d 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66 69  - Name of the fi
1430: 6c 65 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45  le.@ );.@ CREATE
1440: 20 49 4e 44 45 58 20 6d 6c 69 6e 6b 5f 69 31 20   INDEX mlink_i1 
1450: 4f 4e 20 6d 6c 69 6e 6b 28 6d 69 64 29 3b 0a 40  ON mlink(mid);.@
1460: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 6d 6c   CREATE INDEX ml
1470: 69 6e 6b 5f 69 32 20 4f 4e 20 6d 6c 69 6e 6b 28  ink_i2 ON mlink(
1480: 66 6e 69 64 29 3b 0a 40 20 43 52 45 41 54 45 20  fnid);.@ CREATE 
1490: 49 4e 44 45 58 20 6d 6c 69 6e 6b 5f 69 33 20 4f  INDEX mlink_i3 O
14a0: 4e 20 6d 6c 69 6e 6b 28 66 69 64 29 3b 0a 40 20  N mlink(fid);.@ 
14b0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 6d 6c 69  CREATE INDEX mli
14c0: 6e 6b 5f 69 34 20 4f 4e 20 6d 6c 69 6e 6b 28 70  nk_i4 ON mlink(p
14d0: 69 64 29 3b 0a 40 0a 40 20 2d 2d 20 50 61 72 65  id);.@.@ -- Pare
14e0: 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65  nt/child linkage
14f0: 73 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20  s.@ --.@ CREATE 
1500: 54 41 42 4c 45 20 70 6c 69 6e 6b 28 0a 40 20 20  TABLE plink(.@  
1510: 20 70 69 64 20 49 4e 54 45 47 45 52 20 52 45 46   pid INTEGER REF
1520: 45 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20  ERENCES blob,   
1530: 20 2d 2d 20 50 61 72 65 6e 74 20 6d 61 6e 69 66   -- Parent manif
1540: 65 73 74 0a 40 20 20 20 63 69 64 20 49 4e 54 45  est.@   cid INTE
1550: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 62  GER REFERENCES b
1560: 6c 6f 62 2c 20 20 20 20 2d 2d 20 43 68 69 6c 64  lob,    -- Child
1570: 20 6d 61 6e 69 66 65 73 74 0a 40 20 20 20 69 73   manifest.@   is
1580: 70 72 69 6d 20 42 4f 4f 4c 45 41 4e 2c 20 20 20  prim BOOLEAN,   
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
15a0: 20 70 69 64 20 69 73 20 74 68 65 20 70 72 69 6d   pid is the prim
15b0: 61 72 79 20 70 61 72 65 6e 74 20 6f 66 20 63 69  ary parent of ci
15c0: 64 0a 40 20 20 20 6d 74 69 6d 65 20 44 41 54 45  d.@   mtime DATE
15d0: 54 49 4d 45 2c 20 20 20 20 20 20 20 20 20 20 20  TIME,           
15e0: 20 20 20 20 20 20 2d 2d 20 74 68 65 20 64 61 74        -- the dat
15f0: 65 2f 74 69 6d 65 20 73 74 61 6d 70 20 6f 6e 20  e/time stamp on 
1600: 63 69 64 0a 40 20 20 20 55 4e 49 51 55 45 28 70  cid.@   UNIQUE(p
1610: 69 64 2c 20 63 69 64 29 0a 40 20 29 3b 0a 40 20  id, cid).@ );.@ 
1620: 43 52 45 41 54 45 20 49 4e 44 45 58 20 70 6c 69  CREATE INDEX pli
1630: 6e 6b 5f 69 32 20 4f 4e 20 70 6c 69 6e 6b 28 63  nk_i2 ON plink(c
1640: 69 64 29 3b 0a 40 0a 40 20 2d 2d 20 45 76 65 6e  id);.@.@ -- Even
1650: 74 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ts used to gener
1660: 61 74 65 20 61 20 74 69 6d 65 6c 69 6e 65 0a 40  ate a timeline.@
1670: 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42   --.@ CREATE TAB
1680: 4c 45 20 65 76 65 6e 74 28 0a 40 20 20 20 74 79  LE event(.@   ty
1690: 70 65 20 54 45 58 54 2c 0a 40 20 20 20 6d 74 69  pe TEXT,.@   mti
16a0: 6d 65 20 44 41 54 45 54 49 4d 45 2c 0a 40 20 20  me DATETIME,.@  
16b0: 20 6f 62 6a 69 64 20 49 4e 54 45 47 45 52 2c 0a   objid INTEGER,.
16c0: 40 20 20 20 75 69 64 20 49 4e 54 45 47 45 52 20  @   uid INTEGER 
16d0: 52 45 46 45 52 45 4e 43 45 53 20 75 73 65 72 2c  REFERENCES user,
16e0: 0a 40 20 20 20 75 73 65 72 20 54 45 58 54 2c 0a  .@   user TEXT,.
16f0: 40 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45 58 54  @   comment TEXT
1700: 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45 20 49  .@ );.@ CREATE I
1710: 4e 44 45 58 20 65 76 65 6e 74 5f 69 31 20 4f 4e  NDEX event_i1 ON
1720: 20 65 76 65 6e 74 28 6d 74 69 6d 65 29 3b 0a 40   event(mtime);.@
1730: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 65 76   CREATE INDEX ev
1740: 65 6e 74 5f 69 32 20 4f 4e 20 65 76 65 6e 74 28  ent_i2 ON event(
1750: 6f 62 6a 69 64 29 3b 0a 40 0a 40 20 2d 2d 20 41  objid);.@.@ -- A
1760: 20 72 65 63 6f 72 64 20 6f 66 20 70 68 61 6e 74   record of phant
1770: 6f 6d 73 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54  oms.@ --.@ CREAT
1780: 45 20 54 41 42 4c 45 20 70 68 61 6e 74 6f 6d 28  E TABLE phantom(
1790: 0a 40 20 20 20 72 69 64 20 49 4e 54 45 47 45 52  .@   rid INTEGER
17a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 20 20 20   PRIMARY KEY    
17b0: 20 20 20 20 20 2d 2d 20 52 65 63 6f 72 64 20 49       -- Record I
17c0: 44 20 6f 66 20 74 68 65 20 70 68 61 6e 74 6f 6d  D of the phantom
17d0: 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d 20 41 67 67  .@ );.@.@ -- Agg
17e0: 72 65 67 61 74 65 64 20 74 69 63 6b 65 74 20 69  regated ticket i
17f0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 40 20 2d 2d 0a  nformation.@ --.
1800: 40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  @ CREATE TABLE t
1810: 6b 74 28 0a 40 20 20 20 74 6b 74 69 64 20 49 4e  kt(.@   tktid IN
1820: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1830: 59 2c 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20  Y,           -- 
1840: 49 6e 74 65 72 6e 61 6c 20 74 69 63 6b 65 74 20  Internal ticket 
1850: 49 44 0a 40 20 20 20 66 6e 69 64 20 49 4e 54 45  ID.@   fnid INTE
1860: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 66  GER REFERENCES f
1870: 69 6c 65 6e 61 6d 65 2c 20 20 20 20 2d 2d 20 4e  ilename,    -- N
1880: 61 6d 65 20 6f 66 20 74 68 65 20 74 69 63 6b 65  ame of the ticke
1890: 74 20 66 69 6c 65 0a 40 20 20 20 72 69 64 20 49  t file.@   rid I
18a0: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
18b0: 53 20 62 6c 6f 62 2c 20 20 20 20 20 20 20 20 20  S blob,         
18c0: 2d 2d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 69  -- version of ti
18d0: 63 6b 65 74 20 66 69 6c 65 20 73 63 61 6e 6e 65  cket file scanne
18e0: 64 0a 40 20 20 20 74 69 74 6c 65 20 54 45 58 54  d.@   title TEXT
18f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1900: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 74 69             -- ti
1910: 74 6c 65 20 6f 66 20 74 68 65 20 74 69 63 6b 65  tle of the ticke
1920: 74 0a 40 20 20 20 72 65 6d 61 72 6b 73 20 54 45  t.@   remarks TE
1930: 58 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20  XT              
1940: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 74 65             -- te
1950: 78 74 20 6f 66 20 74 68 65 20 74 69 63 6b 65 74  xt of the ticket
1960: 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45 20 54  .@ );.@ CREATE T
1970: 41 42 4c 45 20 74 6b 74 74 61 67 28 0a 40 20 20  ABLE tkttag(.@  
1980: 20 74 61 67 69 64 20 49 4e 54 45 47 45 52 20 50   tagid INTEGER P
1990: 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20 20  RIMARY KEY,     
19a0: 20 20 20 20 20 20 2d 2d 20 4e 75 6d 65 72 69 63        -- Numeric
19b0: 20 74 61 67 20 49 44 0a 40 20 20 20 6e 61 6d 65   tag ID.@   name
19c0: 20 54 45 58 54 20 55 4e 49 51 55 45 20 20 20 20   TEXT UNIQUE    
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 20 2d 2d 20 48 75 6d 61 6e 2d 72 65 61 64 61 62   -- Human-readab
19f0: 6c 65 20 6e 61 6d 65 20 6f 66 20 74 61 67 0a 40  le name of tag.@
1a00: 20 29 3b 0a 40 20 43 52 45 41 54 45 20 54 41 42   );.@ CREATE TAB
1a10: 4c 45 20 74 6b 74 6d 61 70 28 0a 40 20 20 20 74  LE tktmap(.@   t
1a20: 6b 74 69 64 20 49 4e 54 45 47 45 52 20 52 45 46  ktid INTEGER REF
1a30: 45 52 45 4e 43 45 53 20 74 6b 74 2c 20 20 20 20  ERENCES tkt,    
1a40: 20 20 20 20 2d 2d 20 54 68 69 73 20 74 69 63 6b      -- This tick
1a50: 65 74 0a 40 20 20 20 74 61 67 69 64 20 49 4e 54  et.@   tagid INT
1a60: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
1a70: 74 6b 74 74 61 67 2c 20 20 20 20 20 2d 2d 20 20  tkttag,     --  
1a80: 20 20 2e 2e 2e 2e 68 6f 6c 64 73 20 74 68 69 73    ....holds this
1a90: 20 74 61 67 0a 40 20 20 20 55 4e 49 51 55 45 28   tag.@   UNIQUE(
1aa0: 74 6b 74 69 64 2c 20 74 61 67 69 64 29 0a 40 20  tktid, tagid).@ 
1ab0: 29 3b 0a 40 20 43 52 45 41 54 45 20 49 4e 44 45  );.@ CREATE INDE
1ac0: 58 20 74 6b 74 6d 61 70 5f 69 32 20 4f 4e 20 74  X tktmap_i2 ON t
1ad0: 6b 74 6d 61 70 28 74 61 67 69 64 29 3b 0a 3b 0a  ktmap(tagid);.;.
1ae0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
1af0: 61 20 66 6f 72 20 74 68 65 20 6c 6f 63 61 74 65  a for the locate
1b00: 20 46 4f 53 53 49 4c 20 64 61 74 61 62 61 73 65   FOSSIL database
1b10: 20 66 69 6c 65 20 66 6f 75 6e 64 20 61 74 20 74   file found at t
1b20: 68 65 20 72 6f 6f 74 0a 2a 2a 20 6f 66 20 76 65  he root.** of ve
1b30: 72 79 20 63 68 65 63 6b 2d 6f 75 74 2e 20 20 54  ry check-out.  T
1b40: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
1b50: 74 61 69 6e 73 20 74 68 65 20 63 6f 6d 70 6c 65  tains the comple
1b60: 74 65 20 73 74 61 74 65 20 6f 66 0a 2a 2a 20 74  te state of.** t
1b70: 68 65 20 63 68 65 63 6b 6f 75 74 2e 0a 2a 2f 0a  he checkout..*/.
1b80: 63 6f 6e 73 74 20 63 68 61 72 20 7a 4c 6f 63 61  const char zLoca
1b90: 6c 53 63 68 65 6d 61 5b 5d 20 3d 0a 40 20 2d 2d  lSchema[] =.@ --
1ba0: 20 54 68 65 20 56 56 41 52 20 74 61 62 6c 65 20   The VVAR table 
1bb0: 68 6f 6c 64 73 20 6d 69 73 63 65 6c 6c 61 6e 6f  holds miscellano
1bc0: 75 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  us information a
1bd0: 62 6f 75 74 20 74 68 65 20 6c 6f 63 61 6c 20 64  bout the local d
1be0: 61 74 61 62 61 73 65 0a 40 20 2d 2d 20 69 6e 20  atabase.@ -- in 
1bf0: 74 68 65 20 66 6f 72 6d 20 6f 66 20 6e 61 6d 65  the form of name
1c00: 2d 76 61 6c 75 65 20 70 61 69 72 73 2e 20 20 54  -value pairs.  T
1c10: 68 69 73 20 69 73 20 73 69 6d 69 6c 61 72 20 74  his is similar t
1c20: 6f 20 74 68 65 20 56 41 52 20 74 61 62 6c 65 0a  o the VAR table.
1c30: 40 20 2d 2d 20 74 61 62 6c 65 20 69 6e 20 74 68  @ -- table in th
1c40: 65 20 72 65 70 6f 73 69 74 6f 72 79 20 65 78 63  e repository exc
1c50: 65 70 74 20 74 68 61 74 20 74 68 69 73 20 74 61  ept that this ta
1c60: 62 6c 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ble holds inform
1c70: 61 74 69 6f 6e 20 74 68 61 74 0a 40 20 2d 2d 20  ation that.@ -- 
1c80: 69 73 20 73 70 65 63 69 66 69 63 20 74 6f 20 74  is specific to t
1c90: 68 65 20 6c 6f 63 61 6c 20 63 68 65 63 6b 6f 75  he local checkou
1ca0: 74 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20 49 6d 70  t..@ --.@ -- Imp
1cb0: 6f 72 74 61 6e 74 20 56 61 72 69 61 62 6c 65 73  ortant Variables
1cc0: 3a 0a 40 20 2d 2d 0a 40 20 2d 2d 20 20 20 20 20  :.@ --.@ --     
1cd0: 72 65 70 6f 73 69 74 6f 72 79 20 20 20 20 20 20  repository      
1ce0: 20 20 46 75 6c 6c 20 70 61 74 68 6e 61 6d 65 20    Full pathname 
1cf0: 6f 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72  of the repositor
1d00: 79 20 64 61 74 61 62 61 73 65 0a 40 20 2d 2d 20  y database.@ -- 
1d10: 20 20 20 20 75 73 65 72 2d 69 64 20 20 20 20 20      user-id     
1d20: 20 20 20 20 20 20 55 73 65 72 69 64 20 74 6f 20        Userid to 
1d30: 75 73 65 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54  use.@ --.@ CREAT
1d40: 45 20 54 41 42 4c 45 20 76 76 61 72 28 0a 40 20  E TABLE vvar(.@ 
1d50: 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
1d60: 41 52 59 20 4b 45 59 20 4e 4f 54 20 4e 55 4c 4c  ARY KEY NOT NULL
1d70: 2c 20 20 2d 2d 20 50 72 69 6d 61 72 79 20 6e 61  ,  -- Primary na
1d80: 6d 65 20 6f 66 20 74 68 65 20 65 6e 74 72 79 0a  me of the entry.
1d90: 40 20 20 20 76 61 6c 75 65 20 43 4c 4f 42 2c 20  @   value CLOB, 
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 20 20 20 20 2d 2d 20 43 6f 6e 74 65 6e 74 20       -- Content 
1dc0: 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 70 61 72  of the named par
1dd0: 61 6d 65 74 65 72 0a 40 20 20 20 43 48 45 43 4b  ameter.@   CHECK
1de0: 28 20 74 79 70 65 6f 66 28 6e 61 6d 65 29 3d 27  ( typeof(name)='
1df0: 74 65 78 74 27 20 41 4e 44 20 6c 65 6e 67 74 68  text' AND length
1e00: 28 6e 61 6d 65 29 3e 3d 31 20 29 0a 40 20 29 3b  (name)>=1 ).@ );
1e10: 0a 40 0a 40 20 2d 2d 20 45 61 63 68 20 65 6e 74  .@.@ -- Each ent
1e20: 72 79 20 69 6e 20 74 68 65 20 76 66 69 6c 65 20  ry in the vfile 
1e30: 74 61 62 6c 65 20 72 65 70 72 65 73 65 6e 74 73  table represents
1e40: 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 6f   a single file o
1e50: 72 20 66 6f 6c 64 65 72 0a 40 20 2d 2d 20 74 68  r folder.@ -- th
1e60: 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
1e70: 76 65 72 73 69 6f 6e 2e 0a 40 20 2d 2d 0a 40 20  version..@ --.@ 
1e80: 2d 2d 20 54 68 65 20 66 69 6c 65 2e 72 69 64 20  -- The file.rid 
1e90: 66 69 65 6c 64 20 69 73 20 30 20 66 6f 72 20 66  field is 0 for f
1ea0: 69 6c 65 73 20 6f 72 20 66 6f 6c 64 65 72 73 20  iles or folders 
1eb0: 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 0a 40  that have been.@
1ec0: 20 2d 2d 20 61 64 64 65 64 20 62 75 74 20 6e 6f   -- added but no
1ed0: 74 20 79 65 74 20 63 6f 6d 6d 69 74 74 65 64 2e  t yet committed.
1ee0: 0a 40 20 2d 2d 0a 40 20 2d 2d 20 56 66 69 6c 65  .@ --.@ -- Vfile
1ef0: 2e 63 68 6e 67 65 64 20 69 73 20 30 20 66 6f 72  .chnged is 0 for
1f00: 20 75 6e 6d 6f 64 69 66 69 65 64 20 66 69 6c 65   unmodified file
1f10: 73 2c 20 31 20 66 6f 72 20 66 69 6c 65 73 20 74  s, 1 for files t
1f20: 68 61 74 20 68 61 76 65 0a 40 20 2d 2d 20 62 65  hat have.@ -- be
1f30: 65 6e 20 65 64 69 74 65 64 20 6f 72 20 77 68 69  en edited or whi
1f40: 63 68 20 68 61 76 65 20 62 65 65 6e 20 73 75 62  ch have been sub
1f50: 6a 65 63 74 65 64 20 74 6f 20 61 20 33 2d 77 61  jected to a 3-wa
1f60: 79 20 6d 65 72 67 65 2e 20 20 0a 40 20 2d 2d 20  y merge.  .@ -- 
1f70: 56 66 69 6c 65 2e 63 68 6e 67 65 64 20 69 73 20  Vfile.chnged is 
1f80: 32 20 69 66 20 74 68 65 20 66 69 6c 65 20 68 61  2 if the file ha
1f90: 73 20 62 65 65 6e 20 72 65 70 6c 61 63 65 64 20  s been replaced 
1fa0: 66 72 6f 6d 20 61 20 64 69 66 66 65 72 65 6e 74  from a different
1fb0: 0a 40 20 2d 2d 20 76 65 72 73 69 6f 6e 20 62 79  .@ -- version by
1fc0: 20 74 68 65 20 6d 65 72 67 65 20 61 6e 64 20 33   the merge and 3
1fd0: 20 69 66 20 74 68 65 20 66 69 6c 65 20 68 61 73   if the file has
1fe0: 20 62 65 65 6e 20 61 64 64 65 64 20 62 79 20 61   been added by a
1ff0: 20 6d 65 72 67 65 2e 0a 40 20 2d 2d 20 54 68 65   merge..@ -- The
2000: 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2010: 65 65 6e 20 76 66 69 6c 65 2e 63 68 6e 67 65 64  een vfile.chnged
2020: 3d 3d 32 20 61 6e 64 20 61 20 72 65 67 75 6c 61  ==2 and a regula
2030: 72 20 61 64 64 20 69 73 20 74 68 61 74 0a 40 20  r add is that.@ 
2040: 2d 2d 20 77 69 74 68 20 76 66 69 6c 65 2e 63 68  -- with vfile.ch
2050: 6e 67 65 64 3d 3d 32 20 77 65 20 6b 6e 6f 77 20  nged==2 we know 
2060: 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
2070: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
2080: 66 69 6c 65 0a 40 20 2d 2d 20 69 73 20 61 6c 72  file.@ -- is alr
2090: 65 61 64 79 20 69 6e 20 74 68 65 20 72 65 70 6f  eady in the repo
20a0: 73 69 74 6f 72 79 2e 0a 40 20 2d 2d 20 0a 40 20  sitory..@ -- .@ 
20b0: 2d 2d 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c  --.@ CREATE TABL
20c0: 45 20 76 66 69 6c 65 28 0a 40 20 20 20 69 64 20  E vfile(.@   id 
20d0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
20e0: 4b 45 59 2c 20 20 20 20 20 20 20 20 20 20 20 2d  KEY,           -
20f0: 2d 20 49 44 20 6f 66 20 74 68 65 20 63 68 65 63  - ID of the chec
2100: 6b 65 64 20 6f 75 74 20 66 69 6c 65 0a 40 20 20  ked out file.@  
2110: 20 76 69 64 20 49 4e 54 45 47 45 52 20 52 45 46   vid INTEGER REF
2120: 45 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20 20 20  ERENCES blob,   
2130: 20 20 20 2d 2d 20 54 68 65 20 76 65 72 73 69 6f     -- The versio
2140: 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 70  n this file is p
2150: 61 72 74 20 6f 66 2e 0a 40 20 20 20 63 68 6e 67  art of..@   chng
2160: 65 64 20 49 4e 54 20 44 45 46 41 55 4c 54 20 30  ed INT DEFAULT 0
2170: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d  ,             --
2180: 20 30 3a 75 6e 63 68 6e 67 65 64 20 31 3a 65 64   0:unchnged 1:ed
2190: 69 74 65 64 20 32 3a 6d 2d 63 68 6e 67 20 33 3a  ited 2:m-chng 3:
21a0: 6d 2d 61 64 64 0a 40 20 20 20 64 65 6c 65 74 65  m-add.@   delete
21b0: 64 20 42 4f 4f 4c 45 41 4e 20 44 45 46 41 55 4c  d BOOLEAN DEFAUL
21c0: 54 20 30 2c 20 20 20 20 20 20 20 20 2d 2d 20 54  T 0,        -- T
21d0: 72 75 65 20 69 66 20 64 65 6c 65 74 65 64 20 0a  rue if deleted .
21e0: 40 20 20 20 72 69 64 20 49 4e 54 45 47 45 52 2c  @   rid INTEGER,
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 20 20 2d 2d 20 4f 72 69 67 69 6e 61        -- Origina
2210: 6c 6c 79 20 66 72 6f 6d 20 74 68 69 73 20 72 65  lly from this re
2220: 70 6f 73 69 74 6f 72 79 20 72 65 63 6f 72 64 0a  pository record.
2230: 40 20 20 20 6d 72 69 64 20 49 4e 54 45 47 45 52  @   mrid INTEGER
2240: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
2250: 20 20 20 20 20 20 2d 2d 20 42 61 73 65 64 20 6f        -- Based o
2260: 6e 20 74 68 69 73 20 72 65 63 6f 72 64 20 64 75  n this record du
2270: 65 20 74 6f 20 61 20 6d 65 72 67 65 0a 40 20 20  e to a merge.@  
2280: 20 70 61 74 68 6e 61 6d 65 20 54 45 58 54 2c 20   pathname TEXT, 
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 2d 2d 20 46 75 6c 6c 20 70 61 74 68 6e     -- Full pathn
22b0: 61 6d 65 0a 40 20 20 20 55 4e 49 51 55 45 28 70  ame.@   UNIQUE(p
22c0: 61 74 68 6e 61 6d 65 2c 76 69 64 29 0a 40 20 29  athname,vid).@ )
22d0: 3b 0a 40 0a 40 20 2d 2d 20 54 68 69 73 20 74 61  ;.@.@ -- This ta
22e0: 62 6c 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ble holds a reco
22f0: 72 64 20 6f 66 20 75 6e 63 6f 6d 6d 69 74 74 65  rd of uncommitte
2300: 64 20 6d 65 72 67 65 73 20 69 6e 20 74 68 65 20  d merges in the 
2310: 6c 6f 63 61 6c 0a 40 20 2d 2d 20 66 69 6c 65 20  local.@ -- file 
2320: 74 72 65 65 2e 20 20 49 66 20 61 20 56 46 49 4c  tree.  If a VFIL
2330: 45 20 65 6e 74 72 79 20 77 69 74 68 20 69 64 20  E entry with id 
2340: 68 61 73 20 6d 65 72 67 65 64 20 77 69 74 68 20  has merged with 
2350: 61 6e 6f 74 68 65 72 0a 40 20 2d 2d 20 72 65 63  another.@ -- rec
2360: 6f 72 64 2c 20 74 68 65 72 65 20 69 73 20 61 6e  ord, there is an
2370: 20 65 6e 74 72 79 20 69 6e 20 74 68 69 73 20 74   entry in this t
2380: 61 62 6c 65 20 77 69 74 68 20 28 69 64 2c 6d 65  able with (id,me
2390: 72 67 65 29 20 77 68 65 72 65 0a 40 20 2d 2d 20  rge) where.@ -- 
23a0: 6d 65 72 67 65 20 69 73 20 74 68 65 20 52 45 43  merge is the REC
23b0: 4f 52 44 20 74 61 62 6c 65 20 65 6e 74 72 79 20  ORD table entry 
23c0: 74 68 61 74 20 74 68 65 20 66 69 6c 65 20 6d 65  that the file me
23d0: 72 67 65 64 20 61 67 61 69 6e 73 74 2e 0a 40 20  rged against..@ 
23e0: 2d 2d 20 41 6e 20 69 64 20 6f 66 20 30 20 68 65  -- An id of 0 he
23f0: 72 65 20 6d 65 61 6e 73 20 74 68 65 20 76 65 72  re means the ver
2400: 73 69 6f 6e 20 72 65 63 6f 72 64 20 69 74 73 65  sion record itse
2410: 6c 66 2e 0a 40 0a 40 20 43 52 45 41 54 45 20 54  lf..@.@ CREATE T
2420: 41 42 4c 45 20 76 6d 65 72 67 65 28 0a 40 20 20  ABLE vmerge(.@  
2430: 20 69 64 20 49 4e 54 45 47 45 52 20 52 45 46 45   id INTEGER REFE
2440: 52 45 4e 43 45 53 20 76 66 69 6c 65 2c 20 20 20  RENCES vfile,   
2450: 20 20 20 2d 2d 20 56 46 49 4c 45 20 65 6e 74 72     -- VFILE entr
2460: 79 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20  y that has been 
2470: 6d 65 72 67 65 64 0a 40 20 20 20 6d 65 72 67 65  merged.@   merge
2480: 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20 20   INTEGER,       
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
24a0: 4d 65 72 67 65 64 20 77 69 74 68 20 74 68 69 73  Merged with this
24b0: 20 72 65 63 6f 72 64 0a 40 20 20 20 55 4e 49 51   record.@   UNIQ
24c0: 55 45 28 69 64 2c 20 6d 65 72 67 65 29 0a 40 20  UE(id, merge).@ 
24d0: 29 3b 0a 3b 0a 0a 63 6f 6e 73 74 20 63 68 61 72  );.;..const char
24e0: 20 7a 53 65 72 76 65 72 54 65 6d 70 53 63 68 65   zServerTempSche
24f0: 6d 61 5b 5d 20 3d 0a 40 20 2d 2d 20 41 20 63 6f  ma[] =.@ -- A co
2500: 70 79 20 6f 66 20 74 68 65 20 76 66 69 6c 65 20  py of the vfile 
2510: 74 61 62 6c 65 20 73 63 68 65 6d 61 20 75 73 65  table schema use
2520: 64 20 62 79 20 74 68 65 20 57 57 57 20 73 65 72  d by the WWW ser
2530: 76 65 72 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54  ver.@ --.@ CREAT
2540: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 76 66 69  E TEMP TABLE vfi
2550: 6c 65 28 0a 40 20 20 20 69 64 20 49 4e 54 45 47  le(.@   id INTEG
2560: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
2570: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 49 44 20            -- ID 
2580: 6f 66 20 74 68 65 20 63 68 65 63 6b 65 64 20 6f  of the checked o
2590: 75 74 20 66 69 6c 65 0a 40 20 20 20 76 69 64 20  ut file.@   vid 
25a0: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
25b0: 45 53 20 72 65 63 6f 72 64 2c 20 20 20 20 2d 2d  ES record,    --
25c0: 20 54 68 65 20 76 65 72 73 69 6f 6e 20 74 68 69   The version thi
25d0: 73 20 66 69 6c 65 20 69 73 20 70 61 72 74 20 6f  s file is part o
25e0: 66 2e 0a 40 20 20 20 63 68 6e 67 65 64 20 49 4e  f..@   chnged IN
25f0: 54 20 44 45 46 41 55 4c 54 20 30 2c 20 20 20 20  T DEFAULT 0,    
2600: 20 20 20 20 20 20 20 20 20 2d 2d 20 30 3a 75 6e           -- 0:un
2610: 63 68 6e 67 65 64 20 31 3a 65 64 69 74 65 64 20  chnged 1:edited 
2620: 32 3a 6d 2d 63 68 6e 67 20 33 3a 6d 2d 61 64 64  2:m-chng 3:m-add
2630: 0a 40 20 20 20 64 65 6c 65 74 65 64 20 42 4f 4f  .@   deleted BOO
2640: 4c 45 41 4e 20 44 45 46 41 55 4c 54 20 30 2c 20  LEAN DEFAULT 0, 
2650: 20 20 20 20 20 20 20 2d 2d 20 54 72 75 65 20 69         -- True i
2660: 66 20 64 65 6c 65 74 65 64 20 0a 40 20 20 20 72  f deleted .@   r
2670: 69 64 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20  id INTEGER,     
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 2d 2d 20 4f 72 69 67 69 6e 61 6c 6c 79 20 66   -- Originally f
26a0: 72 6f 6d 20 74 68 69 73 20 72 65 70 6f 73 69 74  rom this reposit
26b0: 6f 72 79 20 72 65 63 6f 72 64 0a 40 20 20 20 6d  ory record.@   m
26c0: 72 69 64 20 49 4e 54 45 47 45 52 2c 20 20 20 20  rid INTEGER,    
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 2d 2d 20 42 61 73 65 64 20 6f 6e 20 74 68 69   -- Based on thi
26f0: 73 20 72 65 63 6f 72 64 20 64 75 65 20 74 6f 20  s record due to 
2700: 61 20 6d 65 72 67 65 0a 40 20 20 20 70 61 74 68  a merge.@   path
2710: 6e 61 6d 65 20 54 45 58 54 2c 20 20 20 20 20 20  name TEXT,      
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
2730: 20 46 75 6c 6c 20 70 61 74 68 6e 61 6d 65 0a 40   Full pathname.@
2740: 20 20 20 55 4e 49 51 55 45 28 70 61 74 68 6e 61     UNIQUE(pathna
2750: 6d 65 2c 76 69 64 29 0a 40 20 29 3b 0a 3b 0a     me,vid).@ );.;.