Hex Artifact Content
Not logged in

Artifact 468ea581be85396cbbbb07494b6457e35c26024f:

File src/schema.c part of check-in [eea381f416] - Progress toward delta compression on the xfer protocol. The compression works well. But the client is not telling the server what files it has so the server does not have anything to delta against. by drh on 2007-08-09 03:19:18.

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 0a 40 20 2d 2d 20 50 61  fnid);.@.@ -- Pa
1490: 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61  rent/child linka
14a0: 67 65 73 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54  ges.@ --.@ CREAT
14b0: 45 20 54 41 42 4c 45 20 70 6c 69 6e 6b 28 0a 40  E TABLE plink(.@
14c0: 20 20 20 70 69 64 20 49 4e 54 45 47 45 52 20 52     pid INTEGER R
14d0: 45 46 45 52 45 4e 43 45 53 20 62 6c 6f 62 2c 20  EFERENCES blob, 
14e0: 20 20 20 2d 2d 20 50 61 72 65 6e 74 20 6d 61 6e     -- Parent man
14f0: 69 66 65 73 74 0a 40 20 20 20 63 69 64 20 49 4e  ifest.@   cid IN
1500: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
1510: 20 62 6c 6f 62 2c 20 20 20 20 2d 2d 20 43 68 69   blob,    -- Chi
1520: 6c 64 20 6d 61 6e 69 66 65 73 74 0a 40 20 20 20  ld manifest.@   
1530: 69 73 70 72 69 6d 20 42 4f 4f 4c 45 41 4e 2c 20  isprim BOOLEAN, 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1550: 2d 2d 20 70 69 64 20 69 73 20 74 68 65 20 70 72  -- pid is the pr
1560: 69 6d 61 72 79 20 70 61 72 65 6e 74 20 6f 66 20  imary parent of 
1570: 63 69 64 0a 40 20 20 20 6d 74 69 6d 65 20 44 41  cid.@   mtime DA
1580: 54 45 54 49 4d 45 2c 20 20 20 20 20 20 20 20 20  TETIME,         
1590: 20 20 20 20 20 20 20 20 2d 2d 20 74 68 65 20 64          -- the d
15a0: 61 74 65 2f 74 69 6d 65 20 73 74 61 6d 70 20 6f  ate/time stamp o
15b0: 6e 20 63 69 64 0a 40 20 20 20 55 4e 49 51 55 45  n cid.@   UNIQUE
15c0: 28 70 69 64 2c 20 63 69 64 29 0a 40 20 29 3b 0a  (pid, cid).@ );.
15d0: 40 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 70  @ CREATE INDEX p
15e0: 6c 69 6e 6b 5f 69 32 20 4f 4e 20 70 6c 69 6e 6b  link_i2 ON plink
15f0: 28 63 69 64 29 3b 0a 40 0a 40 20 2d 2d 20 45 76  (cid);.@.@ -- Ev
1600: 65 6e 74 73 20 75 73 65 64 20 74 6f 20 67 65 6e  ents used to gen
1610: 65 72 61 74 65 20 61 20 74 69 6d 65 6c 69 6e 65  erate a timeline
1620: 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54  .@ --.@ CREATE T
1630: 41 42 4c 45 20 65 76 65 6e 74 28 0a 40 20 20 20  ABLE event(.@   
1640: 74 79 70 65 20 54 45 58 54 2c 0a 40 20 20 20 6d  type TEXT,.@   m
1650: 74 69 6d 65 20 44 41 54 45 54 49 4d 45 2c 0a 40  time DATETIME,.@
1660: 20 20 20 6f 62 6a 69 64 20 49 4e 54 45 47 45 52     objid INTEGER
1670: 2c 0a 40 20 20 20 75 69 64 20 49 4e 54 45 47 45  ,.@   uid INTEGE
1680: 52 20 52 45 46 45 52 45 4e 43 45 53 20 75 73 65  R REFERENCES use
1690: 72 2c 0a 40 20 20 20 75 73 65 72 20 54 45 58 54  r,.@   user TEXT
16a0: 2c 0a 40 20 20 20 63 6f 6d 6d 65 6e 74 20 54 45  ,.@   comment TE
16b0: 58 54 0a 40 20 29 3b 0a 40 20 43 52 45 41 54 45  XT.@ );.@ CREATE
16c0: 20 49 4e 44 45 58 20 65 76 65 6e 74 5f 69 31 20   INDEX event_i1 
16d0: 4f 4e 20 65 76 65 6e 74 28 6d 74 69 6d 65 29 3b  ON event(mtime);
16e0: 0a 40 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .@ CREATE INDEX 
16f0: 65 76 65 6e 74 5f 69 32 20 4f 4e 20 65 76 65 6e  event_i2 ON even
1700: 74 28 6f 62 6a 69 64 29 3b 0a 40 0a 40 20 2d 2d  t(objid);.@.@ --
1710: 20 4d 61 6b 65 20 73 75 72 65 20 72 65 61 64 69   Make sure readi
1720: 6e 67 20 44 45 4c 54 41 20 62 79 20 53 52 43 49  ng DELTA by SRCI
1730: 44 20 69 73 20 65 66 66 69 63 69 65 6e 74 0a 40  D is efficient.@
1740: 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 49 4e 44   --.@ CREATE IND
1750: 45 58 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  EX IF NOT EXISTS
1760: 20 64 65 6c 74 61 5f 73 72 63 69 64 20 4f 4e 20   delta_srcid ON 
1770: 64 65 6c 74 61 28 73 72 63 69 64 2c 20 72 69 64  delta(srcid, rid
1780: 29 3b 0a 40 0a 40 20 2d 2d 20 41 67 67 72 65 67  );.@.@ -- Aggreg
1790: 61 74 65 64 20 74 69 63 6b 65 74 20 69 6e 66 6f  ated ticket info
17a0: 72 6d 61 74 69 6f 6e 0a 40 20 2d 2d 0a 40 20 43  rmation.@ --.@ C
17b0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 6b 74 28  REATE TABLE tkt(
17c0: 0a 40 20 20 20 74 6b 74 69 64 20 49 4e 54 45 47  .@   tktid INTEG
17d0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
17e0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 49 6e 74            -- Int
17f0: 65 72 6e 61 6c 20 74 69 63 6b 65 74 20 49 44 0a  ernal ticket ID.
1800: 40 20 20 20 66 6e 69 64 20 49 4e 54 45 47 45 52  @   fnid INTEGER
1810: 20 52 45 46 45 52 45 4e 43 45 53 20 66 69 6c 65   REFERENCES file
1820: 6e 61 6d 65 2c 20 20 20 20 2d 2d 20 4e 61 6d 65  name,    -- Name
1830: 20 6f 66 20 74 68 65 20 74 69 63 6b 65 74 20 66   of the ticket f
1840: 69 6c 65 0a 40 20 20 20 72 69 64 20 49 4e 54 45  ile.@   rid INTE
1850: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 62  GER REFERENCES b
1860: 6c 6f 62 2c 20 20 20 20 20 20 20 20 20 2d 2d 20  lob,         -- 
1870: 76 65 72 73 69 6f 6e 20 6f 66 20 74 69 63 6b 65  version of ticke
1880: 74 20 66 69 6c 65 20 73 63 61 6e 6e 65 64 0a 40  t file scanned.@
1890: 20 20 20 74 69 74 6c 65 20 54 45 58 54 2c 20 20     title TEXT,  
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 20 20 20 2d 2d 20 74 69 74 6c 65          -- title
18c0: 20 6f 66 20 74 68 65 20 74 69 63 6b 65 74 0a 40   of the ticket.@
18d0: 20 20 20 72 65 6d 61 72 6b 73 20 54 45 58 54 20     remarks TEXT 
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f0: 20 20 20 20 20 20 20 20 2d 2d 20 74 65 78 74 20          -- text 
1900: 6f 66 20 74 68 65 20 74 69 63 6b 65 74 0a 40 20  of the ticket.@ 
1910: 29 3b 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c  );.@ CREATE TABL
1920: 45 20 74 6b 74 74 61 67 28 0a 40 20 20 20 74 61  E tkttag(.@   ta
1930: 67 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d  gid INTEGER PRIM
1940: 41 52 59 20 4b 45 59 2c 20 20 20 20 20 20 20 20  ARY KEY,        
1950: 20 20 20 2d 2d 20 4e 75 6d 65 72 69 63 20 74 61     -- Numeric ta
1960: 67 20 49 44 0a 40 20 20 20 6e 61 6d 65 20 54 45  g ID.@   name TE
1970: 58 54 20 55 4e 49 51 55 45 20 20 20 20 20 20 20  XT UNIQUE       
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
1990: 20 48 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   Human-readable 
19a0: 6e 61 6d 65 20 6f 66 20 74 61 67 0a 40 20 29 3b  name of tag.@ );
19b0: 0a 40 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .@ CREATE TABLE 
19c0: 74 6b 74 6d 61 70 28 0a 40 20 20 20 74 6b 74 69  tktmap(.@   tkti
19d0: 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  d INTEGER REFERE
19e0: 4e 43 45 53 20 74 6b 74 2c 20 20 20 20 20 20 20  NCES tkt,       
19f0: 20 2d 2d 20 54 68 69 73 20 74 69 63 6b 65 74 0a   -- This ticket.
1a00: 40 20 20 20 74 61 67 69 64 20 49 4e 54 45 47 45  @   tagid INTEGE
1a10: 52 20 52 45 46 45 52 45 4e 43 45 53 20 74 6b 74  R REFERENCES tkt
1a20: 74 61 67 2c 20 20 20 20 20 2d 2d 20 20 20 20 2e  tag,     --    .
1a30: 2e 2e 2e 68 6f 6c 64 73 20 74 68 69 73 20 74 61  ...holds this ta
1a40: 67 0a 40 20 20 20 55 4e 49 51 55 45 28 74 6b 74  g.@   UNIQUE(tkt
1a50: 69 64 2c 20 74 61 67 69 64 29 0a 40 20 29 3b 0a  id, tagid).@ );.
1a60: 40 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74  @ CREATE INDEX t
1a70: 6b 74 6d 61 70 5f 69 32 20 4f 4e 20 74 6b 74 6d  ktmap_i2 ON tktm
1a80: 61 70 28 74 61 67 69 64 29 3b 0a 3b 0a 0a 2f 2a  ap(tagid);.;../*
1a90: 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
1aa0: 6f 72 20 74 68 65 20 6c 6f 63 61 74 65 20 46 4f  or the locate FO
1ab0: 53 53 49 4c 20 64 61 74 61 62 61 73 65 20 66 69  SSIL database fi
1ac0: 6c 65 20 66 6f 75 6e 64 20 61 74 20 74 68 65 20  le found at the 
1ad0: 72 6f 6f 74 0a 2a 2a 20 6f 66 20 76 65 72 79 20  root.** of very 
1ae0: 63 68 65 63 6b 2d 6f 75 74 2e 20 20 54 68 69 73  check-out.  This
1af0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69   database contai
1b00: 6e 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  ns the complete 
1b10: 73 74 61 74 65 20 6f 66 0a 2a 2a 20 74 68 65 20  state of.** the 
1b20: 63 68 65 63 6b 6f 75 74 2e 0a 2a 2f 0a 63 6f 6e  checkout..*/.con
1b30: 73 74 20 63 68 61 72 20 7a 4c 6f 63 61 6c 53 63  st char zLocalSc
1b40: 68 65 6d 61 5b 5d 20 3d 0a 40 20 2d 2d 20 54 68  hema[] =.@ -- Th
1b50: 65 20 56 56 41 52 20 74 61 62 6c 65 20 68 6f 6c  e VVAR table hol
1b60: 64 73 20 6d 69 73 63 65 6c 6c 61 6e 6f 75 73 20  ds miscellanous 
1b70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
1b80: 74 20 74 68 65 20 6c 6f 63 61 6c 20 64 61 74 61  t the local data
1b90: 62 61 73 65 0a 40 20 2d 2d 20 69 6e 20 74 68 65  base.@ -- in the
1ba0: 20 66 6f 72 6d 20 6f 66 20 6e 61 6d 65 2d 76 61   form of name-va
1bb0: 6c 75 65 20 70 61 69 72 73 2e 20 20 54 68 69 73  lue pairs.  This
1bc0: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
1bd0: 68 65 20 56 41 52 20 74 61 62 6c 65 0a 40 20 2d  he VAR table.@ -
1be0: 2d 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 72  - table in the r
1bf0: 65 70 6f 73 69 74 6f 72 79 20 65 78 63 65 70 74  epository except
1c00: 20 74 68 61 74 20 74 68 69 73 20 74 61 62 6c 65   that this table
1c10: 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
1c20: 6f 6e 20 74 68 61 74 0a 40 20 2d 2d 20 69 73 20  on that.@ -- is 
1c30: 73 70 65 63 69 66 69 63 20 74 6f 20 74 68 65 20  specific to the 
1c40: 6c 6f 63 61 6c 20 63 68 65 63 6b 6f 75 74 2e 0a  local checkout..
1c50: 40 20 2d 2d 0a 40 20 2d 2d 20 49 6d 70 6f 72 74  @ --.@ -- Import
1c60: 61 6e 74 20 56 61 72 69 61 62 6c 65 73 3a 0a 40  ant Variables:.@
1c70: 20 2d 2d 0a 40 20 2d 2d 20 20 20 20 20 72 65 70   --.@ --     rep
1c80: 6f 73 69 74 6f 72 79 20 20 20 20 20 20 20 20 46  ository        F
1c90: 75 6c 6c 20 70 61 74 68 6e 61 6d 65 20 6f 66 20  ull pathname of 
1ca0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 64  the repository d
1cb0: 61 74 61 62 61 73 65 0a 40 20 2d 2d 20 20 20 20  atabase.@ --    
1cc0: 20 75 73 65 72 2d 69 64 20 20 20 20 20 20 20 20   user-id        
1cd0: 20 20 20 55 73 65 72 69 64 20 74 6f 20 75 73 65     Userid to use
1ce0: 0a 40 20 2d 2d 0a 40 20 43 52 45 41 54 45 20 54  .@ --.@ CREATE T
1cf0: 41 42 4c 45 20 76 76 61 72 28 0a 40 20 20 20 6e  ABLE vvar(.@   n
1d00: 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59  ame TEXT PRIMARY
1d10: 20 4b 45 59 20 4e 4f 54 20 4e 55 4c 4c 2c 20 20   KEY NOT NULL,  
1d20: 2d 2d 20 50 72 69 6d 61 72 79 20 6e 61 6d 65 20  -- Primary name 
1d30: 6f 66 20 74 68 65 20 65 6e 74 72 79 0a 40 20 20  of the entry.@  
1d40: 20 76 61 6c 75 65 20 43 4c 4f 42 2c 20 20 20 20   value CLOB,    
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 2d 2d 20 43 6f 6e 74 65 6e 74 20 6f 66 20    -- Content of 
1d70: 74 68 65 20 6e 61 6d 65 64 20 70 61 72 61 6d 65  the named parame
1d80: 74 65 72 0a 40 20 20 20 43 48 45 43 4b 28 20 74  ter.@   CHECK( t
1d90: 79 70 65 6f 66 28 6e 61 6d 65 29 3d 27 74 65 78  ypeof(name)='tex
1da0: 74 27 20 41 4e 44 20 6c 65 6e 67 74 68 28 6e 61  t' AND length(na
1db0: 6d 65 29 3e 3d 31 20 29 0a 40 20 29 3b 0a 40 0a  me)>=1 ).@ );.@.
1dc0: 40 20 2d 2d 20 45 61 63 68 20 65 6e 74 72 79 20  @ -- Each entry 
1dd0: 69 6e 20 74 68 65 20 76 66 69 6c 65 20 74 61 62  in the vfile tab
1de0: 6c 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  le represents a 
1df0: 73 69 6e 67 6c 65 20 66 69 6c 65 20 6f 72 20 66  single file or f
1e00: 6f 6c 64 65 72 0a 40 20 2d 2d 20 74 68 61 74 20  older.@ -- that 
1e10: 69 73 20 70 61 72 74 20 6f 66 20 61 20 76 65 72  is part of a ver
1e20: 73 69 6f 6e 2e 0a 40 20 2d 2d 0a 40 20 2d 2d 20  sion..@ --.@ -- 
1e30: 54 68 65 20 76 66 69 6c 65 2e 70 61 72 65 6e 74  The vfile.parent
1e40: 20 66 69 65 6c 64 20 69 73 20 30 20 66 6f 72 20   field is 0 for 
1e50: 74 68 65 20 72 6f 6f 74 20 66 6f 6c 64 65 72 2e  the root folder.
1e60: 0a 40 20 2d 2d 0a 40 20 2d 2d 20 54 68 65 20 66  .@ --.@ -- The f
1e70: 69 6c 65 2e 72 69 64 20 66 69 65 6c 64 20 69 73  ile.rid field is
1e80: 20 30 20 66 6f 72 20 66 69 6c 65 73 20 6f 72 20   0 for files or 
1e90: 66 6f 6c 64 65 72 73 20 74 68 61 74 20 68 61 76  folders that hav
1ea0: 65 20 62 65 65 6e 0a 40 20 2d 2d 20 61 64 64 65  e been.@ -- adde
1eb0: 64 20 62 75 74 20 6e 6f 74 20 79 65 74 20 63 6f  d but not yet co
1ec0: 6d 6d 69 74 74 65 64 2e 0a 40 20 2d 2d 0a 40 20  mmitted..@ --.@ 
1ed0: 2d 2d 20 56 66 69 6c 65 2e 63 68 6e 67 65 64 20  -- Vfile.chnged 
1ee0: 69 73 20 30 20 66 6f 72 20 75 6e 6d 6f 64 69 66  is 0 for unmodif
1ef0: 69 65 64 20 66 69 6c 65 73 2c 20 31 20 66 6f 72  ied files, 1 for
1f00: 20 66 69 6c 65 73 20 74 68 61 74 20 68 61 76 65   files that have
1f10: 0a 40 20 2d 2d 20 62 65 65 6e 20 65 64 69 74 65  .@ -- been edite
1f20: 64 20 6f 72 20 77 68 69 63 68 20 68 61 76 65 20  d or which have 
1f30: 62 65 65 6e 20 73 75 62 6a 65 63 74 65 64 20 74  been subjected t
1f40: 6f 20 61 20 33 2d 77 61 79 20 6d 65 72 67 65 2e  o a 3-way merge.
1f50: 20 20 0a 40 20 2d 2d 20 56 66 69 6c 65 2e 63 68    .@ -- Vfile.ch
1f60: 6e 67 65 64 20 69 73 20 32 20 69 66 20 74 68 65  nged is 2 if the
1f70: 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 72   file has been r
1f80: 65 70 6c 61 63 65 64 20 66 72 6f 6d 20 61 20 64  eplaced from a d
1f90: 69 66 66 65 72 65 6e 74 0a 40 20 2d 2d 20 76 65  ifferent.@ -- ve
1fa0: 72 73 69 6f 6e 20 62 79 20 74 68 65 20 6d 65 72  rsion by the mer
1fb0: 67 65 20 61 6e 64 20 33 20 69 66 20 74 68 65 20  ge and 3 if the 
1fc0: 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 61 64  file has been ad
1fd0: 64 65 64 20 62 79 20 61 20 6d 65 72 67 65 2e 0a  ded by a merge..
1fe0: 40 20 2d 2d 20 54 68 65 20 64 69 66 66 65 72 65  @ -- The differe
1ff0: 6e 63 65 20 62 65 74 77 65 65 6e 20 76 66 69 6c  nce between vfil
2000: 65 2e 63 68 6e 67 65 64 3d 3d 32 20 61 6e 64 20  e.chnged==2 and 
2010: 61 20 72 65 67 75 6c 61 72 20 61 64 64 20 69 73  a regular add is
2020: 20 74 68 61 74 0a 40 20 2d 2d 20 77 69 74 68 20   that.@ -- with 
2030: 76 66 69 6c 65 2e 63 68 6e 67 65 64 3d 3d 32 20  vfile.chnged==2 
2040: 77 65 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65  we know that the
2050: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
2060: 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 40 20 2d   of the file.@ -
2070: 2d 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 20  - is already in 
2080: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a  the repository..
2090: 40 20 2d 2d 20 0a 40 20 2d 2d 0a 40 20 43 52 45  @ -- .@ --.@ CRE
20a0: 41 54 45 20 54 41 42 4c 45 20 76 66 69 6c 65 28  ATE TABLE vfile(
20b0: 0a 40 20 20 20 69 64 20 49 4e 54 45 47 45 52 20  .@   id INTEGER 
20c0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20  PRIMARY KEY,    
20d0: 20 20 20 20 20 20 20 2d 2d 20 49 44 20 6f 66 20         -- ID of 
20e0: 74 68 65 20 63 68 65 63 6b 65 64 20 6f 75 74 20  the checked out 
20f0: 66 69 6c 65 0a 40 20 20 20 76 69 64 20 49 4e 54  file.@   vid INT
2100: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
2110: 72 65 63 6f 72 64 2c 20 20 20 20 2d 2d 20 54 68  record,    -- Th
2120: 65 20 76 65 72 73 69 6f 6e 20 74 68 69 73 20 66  e version this f
2130: 69 6c 65 20 69 73 20 70 61 72 74 20 6f 66 2e 0a  ile is part of..
2140: 40 20 20 20 63 68 6e 67 65 64 20 49 4e 54 20 44  @   chnged INT D
2150: 45 46 41 55 4c 54 20 30 2c 20 20 20 20 20 20 20  EFAULT 0,       
2160: 20 20 20 20 20 20 2d 2d 20 30 3a 75 6e 63 68 6e        -- 0:unchn
2170: 67 65 64 20 31 3a 65 64 69 74 65 64 20 32 3a 6d  ged 1:edited 2:m
2180: 2d 63 68 6e 67 20 33 3a 6d 2d 61 64 64 0a 40 20  -chng 3:m-add.@ 
2190: 20 20 64 65 6c 65 74 65 64 20 42 4f 4f 4c 45 41    deleted BOOLEA
21a0: 4e 20 44 45 46 41 55 4c 54 20 30 2c 20 20 20 20  N DEFAULT 0,    
21b0: 20 20 20 20 2d 2d 20 54 72 75 65 20 69 66 20 64      -- True if d
21c0: 65 6c 65 74 65 64 20 0a 40 20 20 20 72 69 64 20  eleted .@   rid 
21d0: 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20 20 20  INTEGER,        
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
21f0: 20 4f 72 69 67 69 6e 61 6c 6c 79 20 66 72 6f 6d   Originally from
2200: 20 74 68 69 73 20 72 65 70 6f 73 69 74 6f 72 79   this repository
2210: 20 72 65 63 6f 72 64 0a 40 20 20 20 6d 72 69 64   record.@   mrid
2220: 20 49 4e 54 45 47 45 52 2c 20 20 20 20 20 20 20   INTEGER,       
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
2240: 20 42 61 73 65 64 20 6f 6e 20 74 68 69 73 20 72   Based on this r
2250: 65 63 6f 72 64 20 64 75 65 20 74 6f 20 61 20 6d  ecord due to a m
2260: 65 72 67 65 0a 40 20 20 20 70 61 74 68 6e 61 6d  erge.@   pathnam
2270: 65 20 54 45 58 54 2c 20 20 20 20 20 20 20 20 20  e TEXT,         
2280: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 46 75             -- Fu
2290: 6c 6c 20 70 61 74 68 6e 61 6d 65 0a 40 20 20 20  ll pathname.@   
22a0: 55 4e 49 51 55 45 28 70 61 74 68 6e 61 6d 65 2c  UNIQUE(pathname,
22b0: 76 69 64 29 0a 40 20 29 3b 0a 40 0a 40 20 2d 2d  vid).@ );.@.@ --
22c0: 20 54 68 69 73 20 74 61 62 6c 65 20 68 6f 6c 64   This table hold
22d0: 73 20 61 20 72 65 63 6f 72 64 20 6f 66 20 75 6e  s a record of un
22e0: 63 6f 6d 6d 69 74 74 65 64 20 6d 65 72 67 65 73  committed merges
22f0: 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 0a 40 20   in the local.@ 
2300: 2d 2d 20 66 69 6c 65 20 74 72 65 65 2e 20 20 49  -- file tree.  I
2310: 66 20 61 20 56 46 49 4c 45 20 65 6e 74 72 79 20  f a VFILE entry 
2320: 77 69 74 68 20 69 64 20 68 61 73 20 6d 65 72 67  with id has merg
2330: 65 64 20 77 69 74 68 20 61 6e 6f 74 68 65 72 0a  ed with another.
2340: 40 20 2d 2d 20 72 65 63 6f 72 64 2c 20 74 68 65  @ -- record, the
2350: 72 65 20 69 73 20 61 6e 20 65 6e 74 72 79 20 69  re is an entry i
2360: 6e 20 74 68 69 73 20 74 61 62 6c 65 20 77 69 74  n this table wit
2370: 68 20 28 69 64 2c 6d 65 72 67 65 29 20 77 68 65  h (id,merge) whe
2380: 72 65 0a 40 20 2d 2d 20 6d 65 72 67 65 20 69 73  re.@ -- merge is
2390: 20 74 68 65 20 52 45 43 4f 52 44 20 74 61 62 6c   the RECORD tabl
23a0: 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
23b0: 20 66 69 6c 65 20 6d 65 72 67 65 64 20 61 67 61   file merged aga
23c0: 69 6e 73 74 2e 0a 40 20 2d 2d 20 41 6e 20 69 64  inst..@ -- An id
23d0: 20 6f 66 20 30 20 68 65 72 65 20 6d 65 61 6e 73   of 0 here means
23e0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 72 65 63   the version rec
23f0: 6f 72 64 20 69 74 73 65 6c 66 2e 0a 40 0a 40 20  ord itself..@.@ 
2400: 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 6d 65  CREATE TABLE vme
2410: 72 67 65 28 0a 40 20 20 20 69 64 20 49 4e 54 45  rge(.@   id INTE
2420: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 76  GER REFERENCES v
2430: 66 69 6c 65 2c 20 20 20 20 20 20 2d 2d 20 56 46  file,      -- VF
2440: 49 4c 45 20 65 6e 74 72 79 20 74 68 61 74 20 68  ILE entry that h
2450: 61 73 20 62 65 65 6e 20 6d 65 72 67 65 64 0a 40  as been merged.@
2460: 20 20 20 6d 65 72 67 65 20 49 4e 54 45 47 45 52     merge INTEGER
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 20 20 2d 2d 20 4d 65 72 67 65 64 20 77       -- Merged w
2490: 69 74 68 20 74 68 69 73 20 72 65 63 6f 72 64 0a  ith this record.
24a0: 40 20 29 3b 0a 3b 0a 0a 63 6f 6e 73 74 20 63 68  @ );.;..const ch
24b0: 61 72 20 7a 53 65 72 76 65 72 54 65 6d 70 53 63  ar zServerTempSc
24c0: 68 65 6d 61 5b 5d 20 3d 0a 40 20 2d 2d 20 41 20  hema[] =.@ -- A 
24d0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 66 69 6c  copy of the vfil
24e0: 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61 20 75  e table schema u
24f0: 73 65 64 20 62 79 20 74 68 65 20 57 57 57 20 73  sed by the WWW s
2500: 65 72 76 65 72 0a 40 20 2d 2d 0a 40 20 43 52 45  erver.@ --.@ CRE
2510: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 76  ATE TEMP TABLE v
2520: 66 69 6c 65 28 0a 40 20 20 20 69 64 20 49 4e 54  file(.@   id INT
2530: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2540: 2c 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 49  ,           -- I
2550: 44 20 6f 66 20 74 68 65 20 63 68 65 63 6b 65 64  D of the checked
2560: 20 6f 75 74 20 66 69 6c 65 0a 40 20 20 20 76 69   out file.@   vi
2570: 64 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  d INTEGER REFERE
2580: 4e 43 45 53 20 72 65 63 6f 72 64 2c 20 20 20 20  NCES record,    
2590: 2d 2d 20 54 68 65 20 76 65 72 73 69 6f 6e 20 74  -- The version t
25a0: 68 69 73 20 66 69 6c 65 20 69 73 20 70 61 72 74  his file is part
25b0: 20 6f 66 2e 0a 40 20 20 20 63 68 6e 67 65 64 20   of..@   chnged 
25c0: 49 4e 54 20 44 45 46 41 55 4c 54 20 30 2c 20 20  INT DEFAULT 0,  
25d0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 30 3a             -- 0:
25e0: 75 6e 63 68 6e 67 65 64 20 31 3a 65 64 69 74 65  unchnged 1:edite
25f0: 64 20 32 3a 6d 2d 63 68 6e 67 20 33 3a 6d 2d 61  d 2:m-chng 3:m-a
2600: 64 64 0a 40 20 20 20 64 65 6c 65 74 65 64 20 42  dd.@   deleted B
2610: 4f 4f 4c 45 41 4e 20 44 45 46 41 55 4c 54 20 30  OOLEAN DEFAULT 0
2620: 2c 20 20 20 20 20 20 20 20 2d 2d 20 54 72 75 65  ,        -- True
2630: 20 69 66 20 64 65 6c 65 74 65 64 20 0a 40 20 20   if deleted .@  
2640: 20 72 69 64 20 49 4e 54 45 47 45 52 2c 20 20 20   rid INTEGER,   
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 20 2d 2d 20 4f 72 69 67 69 6e 61 6c 6c 79     -- Originally
2670: 20 66 72 6f 6d 20 74 68 69 73 20 72 65 70 6f 73   from this repos
2680: 69 74 6f 72 79 20 72 65 63 6f 72 64 0a 40 20 20  itory record.@  
2690: 20 6d 72 69 64 20 49 4e 54 45 47 45 52 2c 20 20   mrid INTEGER,  
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 2d 2d 20 42 61 73 65 64 20 6f 6e 20 74     -- Based on t
26c0: 68 69 73 20 72 65 63 6f 72 64 20 64 75 65 20 74  his record due t
26d0: 6f 20 61 20 6d 65 72 67 65 0a 40 20 20 20 70 61  o a merge.@   pa
26e0: 74 68 6e 61 6d 65 20 54 45 58 54 2c 20 20 20 20  thname TEXT,    
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 2d 2d 20 46 75 6c 6c 20 70 61 74 68 6e 61 6d 65  -- Full pathname
2710: 0a 40 20 20 20 55 4e 49 51 55 45 28 70 61 74 68  .@   UNIQUE(path
2720: 6e 61 6d 65 2c 76 69 64 29 0a 40 20 29 3b 0a 3b  name,vid).@ );.;
2730: 0a                                               .