libfossil  Hex Artifact Content

Artifact 2ec958e9f60f948244222c948ae9979ad016302b:

Wiki page [SQLSnippets] by stephan 2014-11-03 21:35:56.
0000: 44 20 32 30 31 34 2d 31 31 2d 30 33 54 32 31 3a  D 2014-11-03T21:
0010: 33 35 3a 35 36 2e 32 34 34 0a 4c 20 53 51 4c 53  35:56.244.L SQLS
0020: 6e 69 70 70 65 74 73 0a 50 20 64 35 36 33 36 38  nippets.P d56368
0030: 65 62 62 39 33 37 62 37 36 33 65 38 35 62 32 37  ebb937b763e85b27
0040: 35 34 38 30 30 64 31 34 35 66 32 38 38 61 31 36  54800d145f288a16
0050: 62 34 0a 55 20 73 74 65 70 68 61 6e 0a 57 20 39  b4.U stephan.W 9
0060: 32 34 35 0a 3c 68 31 3e 53 51 4c 20 53 6e 69 70  245.<h1>SQL Snip
0070: 70 65 74 73 3c 2f 68 31 3e 0d 0a 0d 0a 54 68 69  pets</h1>....Thi
0080: 73 20 70 61 67 65 20 68 6f 73 74 73 20 61 20 63  s page hosts a c
0090: 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 53 51 4c  ollection of SQL
00a0: 20 73 6e 69 70 70 65 74 73 20 77 68 69 63 68 20   snippets which 
00b0: 68 61 76 65 20 70 72 6f 76 65 6e 20 75 73 65 66  have proven usef
00c0: 75 6c 20 77 68 65 6e 20 74 69 6e 6b 65 72 69 6e  ul when tinkerin
00d0: 67 20 66 69 6c 65 20 66 6f 73 73 69 6c 2e 20 4d  g file fossil. M
00e0: 6f 72 65 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ore can be found
00f0: 20 5b 2f 64 69 72 2f 73 71 6c 7c 69 6e 20 74 68   [/dir/sql|in th
0100: 65 20 73 6f 75 72 63 65 20 74 72 65 65 5d 20 2d  e source tree] -
0110: 20 73 65 65 20 74 68 65 20 66 69 6c 65 73 20 6e   see the files n
0120: 61 6d 65 64 20 3c 74 74 3e 71 2d 2a 2e 73 71 6c  amed <tt>q-*.sql
0130: 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 68 32 3e 4c 69  </tt>.....<h2>Li
0140: 73 74 20 6f 66 20 66 69 6c 65 73 20 63 68 61 6e  st of files chan
0150: 67 65 64 20 62 79 20 61 20 67 69 76 65 6e 20 63  ged by a given c
0160: 6f 6d 6d 69 74 20 55 55 49 44 3a 3c 2f 68 32 3e  ommit UUID:</h2>
0170: 0d 0a 0d 0a 0d 0a 54 6f 20 67 65 74 20 6a 75 73  ......To get jus
0180: 74 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 66  t the names of f
0190: 69 6c 65 73 20 6d 6f 64 69 66 69 65 64 20 69 6e  iles modified in
01a0: 20 61 20 67 69 76 65 6e 20 52 49 44 3a 0d 0a 0d   a given RID:...
01b0: 0a 3c 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e 0d 0a  .<nowiki><pre>..
01c0: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
01d0: 20 66 69 6c 65 6e 61 6d 65 20 66 2c 20 6d 6c 69   filename f, mli
01e0: 6e 6b 20 6d 0d 0a 57 48 45 52 45 20 6d 2e 6d 69  nk m..WHERE m.mi
01f0: 64 3d 33 32 34 32 20 2d 2d 20 63 68 65 63 6b 69  d=3242 -- checki
0200: 6e 20 52 49 44 20 76 61 6c 75 65 0d 0a 41 4e 44  n RID value..AND
0210: 20 6d 2e 66 6e 69 64 3d 66 2e 66 6e 69 64 3b 0d   m.fnid=f.fnid;.
0220: 0a 3c 2f 70 72 65 3e 3c 2f 6e 6f 77 69 6b 69 3e  .</pre></nowiki>
0230: 0d 0a 0d 0a 54 6f 20 67 65 74 20 6d 6f 72 65 20  ....To get more 
0240: 69 6e 66 6f 2e 2e 2e 0d 0a 0d 0a 3c 6e 6f 77 69  info.......<nowi
0250: 6b 69 3e 3c 70 72 65 3e 0d 0a 53 45 4c 45 43 54  ki><pre>..SELECT
0260: 0d 0a 20 20 20 20 62 66 2e 75 75 69 64 2c 0d 0a  ..    bf.uuid,..
0270: 20 20 20 20 66 69 6c 65 6e 61 6d 65 2e 6e 61 6d      filename.nam
0280: 65 20 66 6e 61 6d 65 2c 0d 0a 20 20 20 20 62 66  e fname,..    bf
0290: 2e 73 69 7a 65 0d 0a 46 52 4f 4d 20 6d 6c 69 6e  .size..FROM mlin
02a0: 6b 2c 20 66 69 6c 65 6e 61 6d 65 2c 0d 0a 20 20  k, filename,..  
02b0: 20 20 62 6c 6f 62 20 62 66 2c 20 2d 2d 20 46 49    blob bf, -- FI
02c0: 4c 45 20 62 6c 6f 62 0d 0a 20 20 20 20 62 6c 6f  LE blob..    blo
02d0: 62 20 62 6d 20 2d 2d 20 4d 41 4e 49 46 45 53 54  b bm -- MANIFEST
02e0: 2f 63 68 65 63 6b 69 6e 20 62 6c 6f 62 0d 0a 57  /checkin blob..W
02f0: 48 45 52 45 20 0d 0a 62 6d 2e 75 75 69 64 20 67  HERE ..bm.uuid g
0300: 6c 6f 62 20 27 36 62 35 38 31 63 38 39 66 39 30  lob '6b581c89f90
0310: 63 2a 27 0d 0a 2d 2d 20 72 65 73 70 3a 20 62 6d  c*'..-- resp: bm
0320: 2e 72 69 64 3d 72 69 64 5f 6f 66 5f 63 68 65 63  .rid=rid_of_chec
0330: 6b 69 6e 0d 0a 41 4e 44 20 66 69 6c 65 6e 61 6d  kin..AND filenam
0340: 65 2e 66 6e 69 64 3d 6d 6c 69 6e 6b 2e 66 6e 69  e.fnid=mlink.fni
0350: 64 0d 0a 41 4e 44 20 62 66 2e 72 69 64 3d 6d 6c  d..AND bf.rid=ml
0360: 69 6e 6b 2e 66 69 64 0d 0a 41 4e 44 20 62 6d 2e  ink.fid..AND bm.
0370: 72 69 64 3d 6d 6c 69 6e 6b 2e 6d 69 64 0d 0a 3b  rid=mlink.mid..;
0380: 0d 0a 3c 2f 70 72 65 3e 3c 2f 6e 6f 77 69 6b 69  ..</pre></nowiki
0390: 3e 0d 0a 0d 0a 54 6f 20 67 65 74 20 74 69 6d 65  >....To get time
03a0: 73 74 61 6d 70 20 69 6e 66 6f 20 28 73 61 6d 65  stamp info (same
03b0: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 72   value for all r
03c0: 6f 77 73 29 20 77 65 20 6e 65 65 64 20 74 68 65  ows) we need the
03d0: 20 22 65 76 65 6e 74 22 20 74 61 62 6c 65 3a 0d   "event" table:.
03e0: 0a 0d 0a 3c 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e  ...<nowiki><pre>
03f0: 0d 0a 53 45 4c 45 43 54 0d 0a 20 20 20 20 62 66  ..SELECT..    bf
0400: 2e 75 75 69 64 2c 0d 0a 20 20 20 20 66 69 6c 65  .uuid,..    file
0410: 6e 61 6d 65 2e 6e 61 6d 65 20 66 6e 61 6d 65 2c  name.name fname,
0420: 0d 0a 20 20 20 20 62 66 2e 73 69 7a 65 2c 0d 0a  ..    bf.size,..
0430: 20 20 20 20 64 61 74 65 74 69 6d 65 28 65 76 65      datetime(eve
0440: 6e 74 2e 6d 74 69 6d 65 29 0d 0a 46 52 4f 4d 20  nt.mtime)..FROM 
0450: 6d 6c 69 6e 6b 2c 20 66 69 6c 65 6e 61 6d 65 2c  mlink, filename,
0460: 20 65 76 65 6e 74 2c 0d 0a 20 20 20 20 62 6c 6f   event,..    blo
0470: 62 20 62 66 2c 20 2d 2d 20 46 49 4c 45 20 62 6c  b bf, -- FILE bl
0480: 6f 62 0d 0a 20 20 20 20 62 6c 6f 62 20 62 6d 20  ob..    blob bm 
0490: 2d 2d 20 4d 41 4e 49 46 45 53 54 2f 63 68 65 63  -- MANIFEST/chec
04a0: 6b 69 6e 20 62 6c 6f 62 0d 0a 57 48 45 52 45 20  kin blob..WHERE 
04b0: 0d 0a 62 6d 2e 75 75 69 64 20 67 6c 6f 62 20 27  ..bm.uuid glob '
04c0: 36 62 35 38 31 63 38 39 66 39 30 63 2a 27 0d 0a  6b581c89f90c*'..
04d0: 2d 2d 20 72 65 73 70 3a 20 62 6d 2e 72 69 64 3d  -- resp: bm.rid=
04e0: 72 69 64 5f 6f 66 5f 63 68 65 63 6b 69 6e 0d 0a  rid_of_checkin..
04f0: 41 4e 44 20 66 69 6c 65 6e 61 6d 65 2e 66 6e 69  AND filename.fni
0500: 64 3d 6d 6c 69 6e 6b 2e 66 6e 69 64 0d 0a 41 4e  d=mlink.fnid..AN
0510: 44 20 65 76 65 6e 74 2e 6f 62 6a 69 64 3d 6d 6c  D event.objid=ml
0520: 69 6e 6b 2e 6d 69 64 0d 0a 41 4e 44 20 62 66 2e  ink.mid..AND bf.
0530: 72 69 64 3d 6d 6c 69 6e 6b 2e 66 69 64 0d 0a 41  rid=mlink.fid..A
0540: 4e 44 20 62 6d 2e 72 69 64 3d 6d 6c 69 6e 6b 2e  ND bm.rid=mlink.
0550: 6d 69 64 0d 0a 3b 0d 0a 0d 0a 3c 2f 70 72 65 3e  mid..;....</pre>
0560: 3c 2f 6e 6f 77 69 6b 69 3e 0d 0a 0d 0a 0d 0a 3c  </nowiki>......<
0570: 68 32 3e 41 6c 6c 20 61 6e 63 65 73 74 6f 72 73  h2>All ancestors
0580: 20 6f 66 20 61 20 67 69 76 65 6e 20 63 68 65 63   of a given chec
0590: 6b 69 6e 3c 2f 68 32 3e 0d 0a 0d 0a 4d 79 20 66  kin</h2>....My f
05a0: 69 72 73 74 20 22 57 49 54 48 20 52 45 43 55 52  irst "WITH RECUR
05b0: 53 49 56 45 22 20 73 74 61 74 65 6d 65 6e 74 2c  SIVE" statement,
05c0: 20 61 64 61 70 74 65 64 20 66 72 6f 6d 20 6f 6e   adapted from on
05d0: 65 20 77 72 69 74 74 65 6e 20 62 79 20 64 72 68  e written by drh
05e0: 2c 20 6c 69 73 74 73 20 69 6e 66 6f 72 6d 61 74  , lists informat
05f0: 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 61 6e  ion about the an
0600: 63 65 73 74 72 79 20 6f 66 20 61 20 67 69 76 65  cestry of a give
0610: 6e 20 63 6f 6d 6d 69 74 2e 2e 2e 0d 0a 0d 0a 3c  n commit.......<
0620: 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e 0d 0a 2d 2d  nowiki><pre>..--
0630: 20 41 6c 6c 20 61 6e 63 65 73 74 6f 72 73 20 28   All ancestors (
0640: 64 69 72 65 63 74 20 6f 72 20 6d 65 72 67 65 64  direct or merged
0650: 21 29 20 6f 66 20 74 68 65 20 63 68 65 63 6b 69  !) of the checki
0660: 6e 0d 0a 2d 2d 20 52 49 44 20 67 69 76 65 6e 20  n..-- RID given 
0670: 69 6e 20 74 68 65 20 66 69 72 73 74 20 53 45 4c  in the first SEL
0680: 45 43 54 2e 2e 2e 0d 0a 57 49 54 48 20 52 45 43  ECT.....WITH REC
0690: 55 52 53 49 56 45 0d 0a 20 20 6f 72 69 67 69 6e  URSIVE..  origin
06a0: 28 72 69 64 29 20 41 53 28 0d 0a 20 20 20 20 53  (rid) AS(..    S
06b0: 45 4c 45 43 54 20 33 32 38 35 20 2d 2d 20 6f 72  ELECT 3285 -- or
06c0: 69 67 69 6e 20 52 49 44 0d 0a 20 20 29 2c 0d 0a  igin RID..  ),..
06d0: 20 20 61 6e 63 65 73 74 6f 72 73 28 72 69 64 2c    ancestors(rid,
06e0: 75 75 69 64 2c 74 6d 2c 75 73 65 72 2c 63 6f 6d  uuid,tm,user,com
06f0: 6d 65 6e 74 29 20 41 53 20 28 0d 0a 20 20 20 20  ment) AS (..    
0700: 20 2d 2d 20 43 68 61 6e 67 65 20 74 68 69 73 20   -- Change this 
0710: 63 68 65 63 6b 69 6e 20 52 49 44 3a 0d 0a 20 20  checkin RID:..  
0720: 20 20 20 53 45 4c 45 43 54 20 62 2e 72 69 64 2c     SELECT b.rid,
0730: 20 62 2e 75 75 69 64 2c 20 65 2e 6d 74 69 6d 65   b.uuid, e.mtime
0740: 2c 20 65 2e 75 73 65 72 2c 0d 0a 20 20 20 20 20  , e.user,..     
0750: 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28         coalesce(
0760: 65 2e 65 63 6f 6d 6d 65 6e 74 2c 65 2e 63 6f 6d  e.ecomment,e.com
0770: 6d 65 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 46  ment)..        F
0780: 52 4f 4d 20 62 6c 6f 62 20 62 2c 20 65 76 65 6e  ROM blob b, even
0790: 74 20 65 2c 20 6f 72 69 67 69 6e 0d 0a 20 20 20  t e, origin..   
07a0: 20 20 20 20 20 57 48 45 52 45 20 62 2e 72 69 64       WHERE b.rid
07b0: 3d 6f 72 69 67 69 6e 2e 72 69 64 20 61 6e 64 20  =origin.rid and 
07c0: 65 2e 6f 62 6a 69 64 3d 62 2e 72 69 64 0d 0a 20  e.objid=b.rid.. 
07d0: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0d 0a 20      UNION ALL.. 
07e0: 20 20 20 20 53 45 4c 45 43 54 20 70 2e 70 69 64      SELECT p.pid
07f0: 2c 20 62 2e 75 75 69 64 2c 20 65 2e 6d 74 69 6d  , b.uuid, e.mtim
0800: 65 2c 20 65 2e 75 73 65 72 2c 0d 0a 20 20 20 20  e, e.user,..    
0810: 20 20 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65          coalesce
0820: 28 65 2e 65 63 6f 6d 6d 65 6e 74 2c 65 2e 63 6f  (e.ecomment,e.co
0830: 6d 6d 65 6e 74 29 0d 0a 20 20 20 20 20 46 52 4f  mment)..     FRO
0840: 4d 20 70 6c 69 6e 6b 20 70 2c 20 62 6c 6f 62 20  M plink p, blob 
0850: 62 2c 20 61 6e 63 65 73 74 6f 72 73 20 61 2c 20  b, ancestors a, 
0860: 65 76 65 6e 74 20 65 0d 0a 20 20 20 20 20 20 20  event e..       
0870: 20 57 48 45 52 45 20 70 2e 63 69 64 3d 62 2e 72   WHERE p.cid=b.r
0880: 69 64 0d 0a 20 20 20 20 20 20 20 20 41 4e 44 20  id..        AND 
0890: 70 2e 63 69 64 3d 61 2e 72 69 64 0d 0a 20 20 20  p.cid=a.rid..   
08a0: 20 20 20 20 20 41 4e 44 20 65 2e 6f 62 6a 69 64       AND e.objid
08b0: 3d 70 2e 70 69 64 0d 0a 20 29 0d 0a 53 45 4c 45  =p.pid.. )..SELE
08c0: 43 54 20 61 2e 72 69 64 2c 0d 0a 20 20 20 20 20  CT a.rid,..     
08d0: 20 20 73 75 62 73 74 72 28 61 2e 75 75 69 64 2c    substr(a.uuid,
08e0: 30 2c 38 29 20 75 75 69 64 2c 0d 0a 20 20 20 20  0,8) uuid,..    
08f0: 20 20 20 64 61 74 65 74 69 6d 65 28 61 2e 74 6d     datetime(a.tm
0900: 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 20 74 69  ,'localtime') ti
0910: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 75 73 65 72  me,..       user
0920: 2c 0d 0a 20 20 20 20 20 20 20 73 75 62 73 74 72  ,..       substr
0930: 28 63 6f 6d 6d 65 6e 74 2c 30 2c 32 30 29 7c 7c  (comment,0,20)||
0940: 27 2e 2e 2e 27 20 63 6f 6d 6d 65 6e 74 0d 0a 66  '...' comment..f
0950: 72 6f 6d 20 61 6e 63 65 73 74 6f 72 73 20 61 0d  rom ancestors a.
0960: 0a 2d 2d 20 4f 70 74 69 6f 6e 61 6c 6c 79 20 6c  .-- Optionally l
0970: 69 6d 69 74 20 69 74 20 74 6f 20 74 68 65 20 66  imit it to the f
0980: 69 72 73 74 20 4e 0d 0a 2d 2d 20 61 6e 63 65 73  irst N..-- ances
0990: 74 6f 72 73 20 28 69 6e 63 6c 75 64 69 6e 67 20  tors (including 
09a0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 65  the original che
09b0: 63 6b 69 6e 29 3a 0d 0a 20 20 20 20 20 4c 49 4d  ckin):..     LIM
09c0: 49 54 20 36 0d 0a 3b 0d 0a 3c 2f 70 72 65 3e 3c  IT 6..;..</pre><
09d0: 2f 6e 6f 77 69 6b 69 3e 0d 0a 0d 0a 0d 0a 45 78  /nowiki>......Ex
09e0: 61 6d 70 6c 65 20 6f 75 74 70 75 74 3a 0d 0a 3c  ample output:..<
09f0: 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e 0d 0a 72 69  nowiki><pre>..ri
0a00: 64 09 75 75 69 64 09 74 69 6d 65 09 75 73 65 72  d.uuid.time.user
0a10: 09 63 6f 6d 6d 65 6e 74 0d 0a 33 32 38 35 09 30  .comment..3285.0
0a20: 38 34 63 30 35 61 09 32 30 31 34 2d 30 32 2d 30  84c05a.2014-02-0
0a30: 33 20 32 30 3a 31 38 3a 30 37 09 73 74 65 70 68  3 20:18:07.steph
0a40: 61 6e 09 64 69 73 61 62 6c 65 64 20 61 75 74 6f  an.disabled auto
0a50: 2d 75 70 64 61 74 2e 2e 2e 0d 0a 33 33 30 32 09  -updat.....3302.
0a60: 30 38 34 63 30 35 61 09 32 30 31 34 2d 30 32 2d  084c05a.2014-02-
0a70: 30 33 20 31 38 3a 33 34 3a 32 37 09 73 74 65 70  03 18:34:27.step
0a80: 68 61 6e 09 78 36 34 2f 69 33 32 20 63 6f 6d 70  han.x64/i32 comp
0a90: 61 74 69 62 69 6c 69 2e 2e 2e 0d 0a 33 32 39 32  atibili.....3292
0aa0: 09 37 38 32 38 39 34 65 09 32 30 31 34 2d 30 32  .782894e.2014-02
0ab0: 2d 30 33 20 31 34 3a 30 31 3a 34 37 09 73 74 65  -03 14:01:47.ste
0ac0: 70 68 61 6e 09 52 65 6d 6f 76 65 64 20 63 68 65  phan.Removed che
0ad0: 63 6b 20 66 6f 72 20 73 2e 2e 2e 0d 0a 33 32 38  ck for s.....328
0ae0: 36 09 34 65 39 64 30 38 37 09 32 30 31 34 2d 30  6.4e9d087.2014-0
0af0: 32 2d 30 33 20 31 31 3a 33 33 3a 32 39 09 73 74  2-03 11:33:29.st
0b00: 65 70 68 61 6e 09 6d 69 6e 6f 72 20 62 75 69 6c  ephan.minor buil
0b10: 64 2f 70 6f 72 74 61 62 69 2e 2e 2e 0d 0a 33 32  d/portabi.....32
0b20: 35 37 09 32 34 39 61 64 30 32 09 32 30 31 34 2d  57.249ad02.2014-
0b30: 30 32 2d 30 32 20 31 39 3a 31 35 3a 32 34 09 73  02-02 19:15:24.s
0b40: 74 65 70 68 61 6e 09 6d 69 6e 6f 72 20 64 6f 63  tephan.minor doc
0b50: 20 75 70 64 61 74 65 2e 2e 2e 2e 0d 0a 33 32 35   update......325
0b60: 35 09 33 63 30 33 34 36 32 09 32 30 31 34 2d 30  5.3c03462.2014-0
0b70: 32 2d 30 32 20 31 39 3a 31 30 3a 32 30 09 73 74  2-02 19:10:20.st
0b80: 65 70 68 61 6e 09 41 64 64 65 64 20 75 6e 69 74  ephan.Added unit
0b90: 20 74 65 73 74 20 66 6f 72 2e 2e 2e 0d 0a 3c 2f   test for.....</
0ba0: 70 72 65 3e 3c 2f 6e 6f 77 69 6b 69 3e 0d 0a 0d  pre></nowiki>...
0bb0: 0a 0d 0a 28 53 69 64 65 62 61 72 3a 20 74 68 61  ...(Sidebar: tha
0bc0: 74 20 73 61 6d 65 20 69 6e 66 6f 20 69 73 20 61  t same info is a
0bd0: 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  ll available in 
0be0: 74 68 65 20 65 76 65 6e 74 20 74 61 62 6c 65 2c  the event table,
0bf0: 20 73 6f 20 77 65 20 63 6f 75 6c 64 0d 0a 63 68   so we could..ch
0c00: 61 6e 67 65 20 74 68 65 20 72 65 63 75 72 73 69  ange the recursi
0c10: 6f 6e 20 74 6f 20 6f 6e 6c 79 20 66 65 74 63 68  on to only fetch
0c20: 20 74 68 65 20 52 49 44 73 2c 20 74 68 65 6e 20   the RIDs, then 
0c30: 6a 6f 69 6e 20 74 68 61 74 20 64 61 74 61 20 74  join that data t
0c40: 6f 0d 0a 74 68 65 20 65 76 65 6e 74 20 74 61 62  o..the event tab
0c50: 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 73 61  le to get the sa
0c60: 6d 65 20 69 6e 66 6f 2e 29 0d 0a 0d 0a 41 20 76  me info.)....A v
0c70: 65 72 79 20 73 69 6d 69 6c 61 72 20 71 75 65 72  ery similar quer
0c80: 79 2c 20 77 68 69 63 68 20 63 6f 75 6c 64 20 70  y, which could p
0c90: 6f 73 73 69 62 6c 79 20 62 65 20 73 69 6d 70 6c  ossibly be simpl
0ca0: 69 66 69 65 64 20 62 79 20 6f 6e 65 20 77 69 73  ified by one wis
0cb0: 65 72 20 69 6e 20 74 68 65 20 77 61 79 73 20 6f  er in the ways o
0cc0: 66 20 53 51 4c 20 74 68 61 6e 20 6d 79 73 65 6c  f SQL than mysel
0cd0: 66 2c 20 77 68 69 63 68 20 75 73 65 73 20 61 20  f, which uses a 
0ce0: 28 4a 75 6c 69 61 6e 29 20 74 69 6d 65 20 74 6f  (Julian) time to
0cf0: 20 6c 69 6d 69 74 20 68 6f 77 20 66 61 72 20 62   limit how far b
0d00: 61 63 6b 20 74 68 65 20 61 6e 63 65 73 74 72 79  ack the ancestry
0d10: 20 63 68 65 63 6b 20 67 6f 65 73 3a 0d 0a 0d 0a   check goes:....
0d20: 3c 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e 0d 0a 57  <nowiki><pre>..W
0d30: 49 54 48 20 52 45 43 55 52 53 49 56 45 0d 0a 20  ITH RECURSIVE.. 
0d40: 20 61 6e 63 65 73 74 6f 72 73 28 72 69 64 2c 75   ancestors(rid,u
0d50: 75 69 64 2c 74 6d 29 20 41 53 20 28 0d 0a 20 20  uid,tm) AS (..  
0d60: 20 20 20 2d 2d 20 43 68 61 6e 67 65 20 74 68 69     -- Change thi
0d70: 73 20 63 68 65 63 6b 69 6e 20 52 49 44 3a 0d 0a  s checkin RID:..
0d80: 20 20 20 20 20 53 45 4c 45 43 54 20 62 2e 72 69       SELECT b.ri
0d90: 64 2c 20 62 2e 75 75 69 64 2c 20 65 2e 6d 74 69  d, b.uuid, e.mti
0da0: 6d 65 20 46 52 4f 4d 20 62 6c 6f 62 20 62 2c 20  me FROM blob b, 
0db0: 65 76 65 6e 74 20 65 0d 0a 20 20 20 20 20 20 20  event e..       
0dc0: 20 57 48 45 52 45 20 62 2e 72 69 64 3d 33 32 37   WHERE b.rid=327
0dd0: 39 20 61 6e 64 20 65 2e 6f 62 6a 69 64 3d 62 2e  9 and e.objid=b.
0de0: 72 69 64 0d 0a 20 20 20 20 20 55 4e 49 4f 4e 20  rid..     UNION 
0df0: 41 4c 4c 0d 0a 20 20 20 20 20 53 45 4c 45 43 54  ALL..     SELECT
0e00: 20 70 2e 70 69 64 2c 20 62 2e 75 75 69 64 2c 20   p.pid, b.uuid, 
0e10: 65 2e 6d 74 69 6d 65 0d 0a 20 20 20 20 20 46 52  e.mtime..     FR
0e20: 4f 4d 20 70 6c 69 6e 6b 20 70 2c 20 62 6c 6f 62  OM plink p, blob
0e30: 20 62 2c 20 61 6e 63 65 73 74 6f 72 73 20 61 2c   b, ancestors a,
0e40: 20 65 76 65 6e 74 20 65 0d 0a 20 20 20 20 20 20   event e..      
0e50: 20 20 57 48 45 52 45 20 70 2e 63 69 64 3d 62 2e    WHERE p.cid=b.
0e60: 72 69 64 0d 0a 20 20 20 20 20 20 20 20 41 4e 44  rid..        AND
0e70: 20 70 2e 63 69 64 3d 61 2e 72 69 64 0d 0a 20 20   p.cid=a.rid..  
0e80: 20 20 20 20 20 20 41 4e 44 20 65 2e 6f 62 6a 69        AND e.obji
0e90: 64 3d 70 2e 70 69 64 0d 0a 20 20 20 20 20 20 20  d=p.pid..       
0ea0: 20 41 4e 44 20 65 2e 6d 74 69 6d 65 20 3e 20 32   AND e.mtime > 2
0eb0: 34 35 36 36 39 31 2e 33 31 38 30 39 32 34 33 20  456691.31809243 
0ec0: 2d 2d 20 6d 74 69 6d 65 20 6f 66 20 52 49 44 20  -- mtime of RID 
0ed0: 33 32 37 39 20 6d 69 6e 75 73 20 31 20 64 61 79  3279 minus 1 day
0ee0: 0d 0a 20 29 0d 0a 53 45 4c 45 43 54 20 62 2e 72  .. )..SELECT b.r
0ef0: 69 64 2c 0d 0a 20 20 20 20 20 20 20 73 75 62 73  id,..       subs
0f00: 74 72 28 62 2e 75 75 69 64 2c 30 2c 38 29 20 75  tr(b.uuid,0,8) u
0f10: 75 69 64 2c 0d 0a 20 20 20 20 20 20 20 64 61 74  uid,..       dat
0f20: 65 74 69 6d 65 28 61 2e 74 6d 2c 27 6c 6f 63 61  etime(a.tm,'loca
0f30: 6c 74 69 6d 65 27 29 20 74 69 6d 65 0d 0a 66 72  ltime') time..fr
0f40: 6f 6d 20 62 6c 6f 62 20 62 2c 20 61 6e 63 65 73  om blob b, ances
0f50: 74 6f 72 73 20 61 0d 0a 57 48 45 52 45 20 62 2e  tors a..WHERE b.
0f60: 72 69 64 3d 61 2e 72 69 64 0d 0a 3c 2f 70 72 65  rid=a.rid..</pre
0f70: 3e 3c 2f 6e 6f 77 69 6b 69 3e 0d 0a 0d 0a 0d 0a  ></nowiki>......
0f80: 48 65 72 65 27 73 20 61 20 6d 6f 72 65 20 72 65  Here's a more re
0f90: 66 69 6e 65 64 20 76 61 72 69 61 6e 74 20 6f 66  fined variant of
0fa0: 20 74 68 65 20 61 62 6f 76 65 2c 20 61 70 70 6c   the above, appl
0fb0: 79 69 6e 67 20 77 68 61 74 20 69 20 6c 65 61 72  ying what i lear
0fc0: 6e 65 64 20 64 75 72 69 6e 67 0d 0a 61 6e 20 65  ned during..an e
0fd0: 76 65 6e 69 6e 67 20 6f 72 20 74 77 6f 20 6f 66  vening or two of
0fe0: 20 74 69 6e 6b 65 72 69 6e 67 20 77 69 74 68 20   tinkering with 
0ff0: 69 74 2e 2e 2e 0d 0a 0d 0a 3c 6e 6f 77 69 6b 69  it.......<nowiki
1000: 3e 3c 70 72 65 3e 0d 0a 2d 2d 20 41 6c 6c 20 61  ><pre>..-- All a
1010: 6e 63 65 73 74 6f 72 73 20 28 64 69 72 65 63 74  ncestors (direct
1020: 20 6f 72 20 6d 65 72 67 65 64 21 29 20 6f 66 20   or merged!) of 
1030: 74 68 65 20 63 68 65 63 6b 69 6e 0d 0a 2d 2d 20  the checkin..-- 
1040: 52 49 44 20 67 69 76 65 6e 20 69 6e 20 74 68 65  RID given in the
1050: 20 66 69 72 73 74 20 53 45 4c 45 43 54 2e 2e 2e   first SELECT...
1060: 0d 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  ..WITH RECURSIVE
1070: 0d 0a 2d 2d 20 43 68 61 6e 67 65 20 63 6f 6e 66  ..-- Change conf
1080: 69 67 2e 72 69 64 20 61 6e 64 20 63 6f 6e 66 69  ig.rid and confi
1090: 67 2e 63 75 74 6f 66 66 54 69 6d 65 20 74 6f 20  g.cutoffTime to 
10a0: 63 68 61 6e 67 65 20 74 68 65 20 71 75 65 72 79  change the query
10b0: 27 73 20 62 65 68 61 76 69 6f 75 72 2e 0d 0a 2d  's behaviour...-
10c0: 2d 20 72 69 64 20 69 73 20 74 68 65 20 73 74 61  - rid is the sta
10d0: 72 74 69 6e 67 20 76 65 72 73 69 6f 6e 0d 0a 2d  rting version..-
10e0: 2d 20 63 75 74 6f 66 66 54 69 6d 65 20 69 73 20  - cutoffTime is 
10f0: 61 20 4a 75 6c 69 61 6e 20 44 61 79 20 6c 69 6d  a Julian Day lim
1100: 69 74 20 77 68 65 6e 20 73 65 61 72 63 68 69 6e  it when searchin
1110: 67 20 66 6f 72 20 6f 6c 64 65 72 0d 0a 2d 2d 20  g for older..-- 
1120: 76 65 72 73 69 6f 6e 73 2c 20 62 61 73 65 64 20  versions, based 
1130: 6f 6e 20 72 69 64 27 73 20 63 68 65 63 6b 69 6e  on rid's checkin
1140: 20 74 69 6d 65 2e 20 49 66 20 63 75 74 6f 66 66   time. If cutoff
1150: 54 69 6d 65 20 69 73 20 30 0d 0a 2d 2d 20 6f 72  Time is 0..-- or
1160: 20 6c 65 73 73 20 74 68 65 6e 20 6e 6f 20 74 69   less then no ti
1170: 6d 65 20 6c 69 6d 69 74 20 69 73 20 61 70 70 6c  me limit is appl
1180: 69 65 64 2e 0d 0a 20 20 63 6f 6e 66 69 67 28 72  ied...  config(r
1190: 69 64 2c 63 75 74 6f 66 66 54 69 6d 65 29 20 41  id,cutoffTime) A
11a0: 53 28 0d 0a 0d 0a 2d 2d 20 4d 6f 73 74 20 72 65  S(....-- Most re
11b0: 63 65 6e 74 20 63 6f 6d 6d 69 74 3a 0d 0a 20 20  cent commit:..  
11c0: 20 20 53 45 4c 45 43 54 20 28 53 45 4c 45 43 54    SELECT (SELECT
11d0: 20 4d 41 58 28 6f 62 6a 69 64 29 20 46 52 4f 4d   MAX(objid) FROM
11e0: 20 65 76 65 6e 74 20 4f 52 44 45 52 20 42 59 20   event ORDER BY 
11f0: 6d 74 69 6d 65 20 44 45 53 43 29 20 72 69 64 2c  mtime DESC) rid,
1200: 0d 0a 2d 2d 20 53 45 4c 45 43 54 20 33 32 38 35  ..-- SELECT 3285
1210: 20 61 73 20 72 69 64 0d 0a 2d 2d 20 4a 75 6c 69   as rid..-- Juli
1220: 61 6e 20 64 61 79 20 6c 69 6d 69 74 20 74 6f 20  an day limit to 
1230: 67 6f 20 62 61 63 6b 20 69 6e 20 74 69 6d 65 2e  go back in time.
1240: 20 3c 3d 30 20 6d 65 61 6e 73 20 75 6e 6c 69 6d   <=0 means unlim
1250: 69 74 65 64 3a 0d 0a 20 20 20 31 2e 35 20 63 75  ited:..   1.5 cu
1260: 74 6f 66 66 54 69 6d 65 0d 0a 2d 2d 20 4e 6f 20  toffTime..-- No 
1270: 6c 69 6d 69 74 3a 0d 0a 2d 2d 20 20 20 20 30 0d  limit:..--    0.
1280: 0a 20 20 29 2c 0d 0a 20 20 6f 72 69 67 69 6e 28  .  ),..  origin(
1290: 72 69 64 2c 20 6d 74 69 6d 65 2c 63 75 74 6f 66  rid, mtime,cutof
12a0: 66 54 69 6d 65 29 20 41 53 28 0d 0a 20 20 20 20  fTime) AS(..    
12b0: 2d 2d 20 6f 72 69 67 69 6e 20 52 49 44 0d 0a 20  -- origin RID.. 
12c0: 20 20 20 53 45 4c 45 43 54 20 62 2e 72 69 64 20     SELECT b.rid 
12d0: 61 73 20 72 69 64 2c 0d 0a 20 20 20 20 20 20 20  as rid,..       
12e0: 20 20 20 20 65 2e 6d 74 69 6d 65 20 61 73 20 6d      e.mtime as m
12f0: 74 69 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  time,..         
1300: 20 20 63 6f 6e 66 69 67 2e 63 75 74 6f 66 66 54    config.cutoffT
1310: 69 6d 65 20 63 75 74 6f 66 66 54 69 6d 65 0d 0a  ime cutoffTime..
1320: 20 20 20 20 46 52 4f 4d 20 62 6c 6f 62 20 62 2c      FROM blob b,
1330: 20 65 76 65 6e 74 20 65 2c 20 63 6f 6e 66 69 67   event e, config
1340: 0d 0a 20 20 20 20 57 48 45 52 45 0d 0a 20 20 20  ..    WHERE..   
1350: 20 62 2e 72 69 64 3d 63 6f 6e 66 69 67 2e 72 69   b.rid=config.ri
1360: 64 0d 0a 20 20 20 20 41 4e 44 20 65 2e 6f 62 6a  d..    AND e.obj
1370: 69 64 3d 62 2e 72 69 64 0d 0a 20 20 29 2c 0d 0a  id=b.rid..  ),..
1380: 20 20 61 6e 63 65 73 74 6f 72 73 28 72 69 64 2c    ancestors(rid,
1390: 75 75 69 64 2c 74 6d 2c 75 73 65 72 2c 63 6f 6d  uuid,tm,user,com
13a0: 6d 65 6e 74 29 20 41 53 20 28 0d 0a 20 20 20 20  ment) AS (..    
13b0: 20 53 45 4c 45 43 54 20 62 2e 72 69 64 2c 20 62   SELECT b.rid, b
13c0: 2e 75 75 69 64 2c 20 65 2e 6d 74 69 6d 65 2c 20  .uuid, e.mtime, 
13d0: 65 2e 75 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  e.user,..       
13e0: 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65 2e       coalesce(e.
13f0: 65 63 6f 6d 6d 65 6e 74 2c 65 2e 63 6f 6d 6d 65  ecomment,e.comme
1400: 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 46 52 4f  nt)..        FRO
1410: 4d 20 62 6c 6f 62 20 62 2c 20 65 76 65 6e 74 20  M blob b, event 
1420: 65 2c 20 6f 72 69 67 69 6e 0d 0a 20 20 20 20 20  e, origin..     
1430: 20 20 20 57 48 45 52 45 20 62 2e 72 69 64 3d 6f     WHERE b.rid=o
1440: 72 69 67 69 6e 2e 72 69 64 20 61 6e 64 20 65 2e  rigin.rid and e.
1450: 6f 62 6a 69 64 3d 62 2e 72 69 64 0d 0a 20 20 20  objid=b.rid..   
1460: 20 20 55 4e 49 4f 4e 20 41 4c 4c 0d 0a 20 20 20    UNION ALL..   
1470: 20 20 53 45 4c 45 43 54 20 70 2e 70 69 64 2c 20    SELECT p.pid, 
1480: 62 2e 75 75 69 64 2c 20 65 2e 6d 74 69 6d 65 2c  b.uuid, e.mtime,
1490: 20 65 2e 75 73 65 72 2c 0d 0a 20 20 20 20 20 20   e.user,..      
14a0: 20 20 20 20 20 20 63 6f 61 6c 65 73 63 65 28 65        coalesce(e
14b0: 2e 65 63 6f 6d 6d 65 6e 74 2c 65 2e 63 6f 6d 6d  .ecomment,e.comm
14c0: 65 6e 74 29 0d 0a 20 20 20 20 20 46 52 4f 4d 20  ent)..     FROM 
14d0: 70 6c 69 6e 6b 20 70 2c 20 62 6c 6f 62 20 62 2c  plink p, blob b,
14e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 6e 63 65  ..          ance
14f0: 73 74 6f 72 73 20 61 2c 20 65 76 65 6e 74 20 65  stors a, event e
1500: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 72 69  ,..          ori
1510: 67 69 6e 0d 0a 20 20 20 20 20 20 20 20 57 48 45  gin..        WHE
1520: 52 45 20 70 2e 63 69 64 3d 62 2e 72 69 64 0d 0a  RE p.cid=b.rid..
1530: 20 20 20 20 20 20 20 20 41 4e 44 20 70 2e 63 69          AND p.ci
1540: 64 3d 61 2e 72 69 64 0d 0a 20 20 20 20 20 20 20  d=a.rid..       
1550: 20 41 4e 44 20 65 2e 6f 62 6a 69 64 3d 70 2e 70   AND e.objid=p.p
1560: 69 64 0d 0a 2d 2d 20 4f 6e 6c 79 20 74 72 61 63  id..-- Only trac
1570: 65 20 62 61 63 6b 20 74 68 69 73 20 66 61 72 20  e back this far 
1580: 69 6e 20 74 69 6d 65 20 28 4a 75 6c 69 61 6e 20  in time (Julian 
1590: 44 61 79 73 29 2e 2e 2e 0d 0a 2d 2d 20 52 65 70  Days).....-- Rep
15a0: 6c 61 63 65 20 73 65 74 20 63 6f 6e 66 69 67 2e  lace set config.
15b0: 63 75 74 6f 66 66 54 69 6d 65 20 74 6f 20 30 20  cutoffTime to 0 
15c0: 74 6f 20 67 6f 20 62 61 63 6b 20 61 6e 79 20 61  to go back any a
15d0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 0d 0a 2d  mount of time..-
15e0: 2d 20 28 61 6e 64 20 62 65 20 70 72 65 70 61 72  - (and be prepar
15f0: 65 64 20 74 6f 20 61 64 64 20 61 20 4c 49 4d 49  ed to add a LIMI
1600: 54 20 75 6e 6c 65 73 73 20 79 6f 75 20 77 61 6e  T unless you wan
1610: 74 20 61 20 6c 6f 6e 67 2c 0d 0a 2d 2d 20 6c 6f  t a long,..-- lo
1620: 6e 67 20 6c 69 73 74 29 2e 0d 0a 20 20 20 20 20  ng list)...     
1630: 20 20 20 41 4e 44 20 43 41 53 45 20 57 48 45 4e     AND CASE WHEN
1640: 20 6f 72 69 67 69 6e 2e 63 75 74 6f 66 66 54 69   origin.cutoffTi
1650: 6d 65 3e 30 20 54 48 45 4e 20 65 2e 6d 74 69 6d  me>0 THEN e.mtim
1660: 65 20 3e 3d 20 28 6f 72 69 67 69 6e 2e 6d 74 69  e >= (origin.mti
1670: 6d 65 20 2d 20 6f 72 69 67 69 6e 2e 63 75 74 6f  me - origin.cuto
1680: 66 66 54 69 6d 65 29 20 45 4c 53 45 20 31 20 45  ffTime) ELSE 1 E
1690: 4e 44 0d 0a 20 29 0d 0a 53 45 4c 45 43 54 20 61  ND.. )..SELECT a
16a0: 2e 72 69 64 2c 0d 0a 20 20 20 20 20 20 20 73 75  .rid,..       su
16b0: 62 73 74 72 28 61 2e 75 75 69 64 2c 30 2c 38 29  bstr(a.uuid,0,8)
16c0: 20 75 75 69 64 2c 0d 0a 20 20 20 20 20 20 20 64   uuid,..       d
16d0: 61 74 65 74 69 6d 65 28 61 2e 74 6d 2c 27 6c 6f  atetime(a.tm,'lo
16e0: 63 61 6c 74 69 6d 65 27 29 20 74 69 6d 65 2c 0d  caltime') time,.
16f0: 0a 20 20 20 20 20 20 20 75 73 65 72 2c 0d 0a 20  .       user,.. 
1700: 20 20 20 20 20 20 73 75 62 73 74 72 28 63 6f 6d        substr(com
1710: 6d 65 6e 74 2c 30 2c 32 30 29 7c 7c 27 2e 2e 2e  ment,0,20)||'...
1720: 27 20 63 6f 6d 6d 65 6e 74 0d 0a 66 72 6f 6d 20  ' comment..from 
1730: 61 6e 63 65 73 74 6f 72 73 20 61 0d 0a 2d 2d 20  ancestors a..-- 
1740: 4f 70 74 69 6f 6e 61 6c 6c 79 20 6c 69 6d 69 74  Optionally limit
1750: 20 69 74 20 74 6f 20 74 68 65 20 66 69 72 73 74   it to the first
1760: 20 4e 0d 0a 2d 2d 20 61 6e 63 65 73 74 6f 72 73   N..-- ancestors
1770: 20 28 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20   (including the 
1780: 6f 72 69 67 69 6e 61 6c 20 63 68 65 63 6b 69 6e  original checkin
1790: 29 3a 0d 0a 2d 2d 20 4c 49 4d 49 54 20 32 35 0d  ):..-- LIMIT 25.
17a0: 0a 2d 2d 20 41 20 63 6f 6e 66 69 67 2e 63 75 74  .-- A config.cut
17b0: 6f 66 66 54 69 6d 65 20 74 69 6d 65 20 63 61 6e  offTime time can
17c0: 20 70 72 65 76 65 6e 74 20 69 74 20 66 72 6f 6d   prevent it from
17d0: 20 67 6f 69 6e 67 20 74 6f 6f 20 66 61 72 20 62   going too far b
17e0: 61 63 6b 0d 0a 3b 0d 0a 3c 2f 70 72 65 3e 3c 2f  ack..;..</pre></
17f0: 6e 6f 77 69 6b 69 3e 0d 0a 0d 0a 0d 0a 3c 68 32  nowiki>......<h2
1800: 3e 43 68 65 63 6b 6f 75 74 2d 76 73 2d 72 65 70  >Checkout-vs-rep
1810: 6f 20 4f 76 65 72 76 69 65 77 3c 2f 68 32 3e 0d  o Overview</h2>.
1820: 0a 0d 0a 41 6e 20 6f 76 65 72 76 69 65 77 20 6f  ...An overview o
1830: 66 20 69 6e 66 6f 20 73 69 6d 69 6c 61 72 20 74  f info similar t
1840: 6f 20 74 68 61 74 20 70 72 6f 76 69 64 65 64 20  o that provided 
1850: 62 79 20 3c 74 74 3e 66 6f 73 73 69 6c 20 63 68  by <tt>fossil ch
1860: 61 6e 67 65 73 3c 2f 74 74 3e 20 61 6e 64 20 73  anges</tt> and s
1870: 69 6d 69 6c 61 72 20 63 6f 6d 6d 61 6e 64 73 3a  imilar commands:
1880: 0d 0a 0d 0a 3c 6e 6f 77 69 6b 69 3e 3c 70 72 65  ....<nowiki><pre
1890: 3e 0d 0a 53 45 4c 45 43 54 0d 0a 20 20 20 20 20  >..SELECT..     
18a0: 20 20 20 69 64 2c 76 69 64 2c 20 6d 72 69 64 2c     id,vid, mrid,
18b0: 20 64 65 6c 65 74 65 64 2c 0d 0a 20 20 20 20 20   deleted,..     
18c0: 20 20 20 63 68 6e 67 65 64 2c 0d 0a 20 20 20 20     chnged,..    
18d0: 20 20 20 20 64 61 74 65 74 69 6d 65 28 6d 74 69      datetime(mti
18e0: 6d 65 2c 27 75 6e 69 78 65 70 6f 63 68 27 2c 27  me,'unixepoch','
18f0: 6c 6f 63 61 6c 74 69 6d 65 27 29 20 61 73 20 6c  localtime') as l
1900: 6f 63 61 6c 5f 74 69 6d 65 2c 0d 0a 20 20 20 20  ocal_time,..    
1910: 20 20 20 20 73 69 7a 65 2c 20 75 75 69 64 2c 20      size, uuid, 
1920: 6f 72 69 67 6e 61 6d 65 2c 20 70 61 74 68 6e 61  origname, pathna
1930: 6d 65 0d 0a 46 52 4f 4d 20 76 66 69 6c 65 20 4c  me..FROM vfile L
1940: 45 46 54 20 4a 4f 49 4e 20 62 6c 6f 62 20 4f 4e  EFT JOIN blob ON
1950: 20 76 66 69 6c 65 2e 6d 72 69 64 3d 62 6c 6f 62   vfile.mrid=blob
1960: 2e 72 69 64 0d 0a 57 48 45 52 45 20 76 69 64 3d  .rid..WHERE vid=
1970: 28 53 45 4c 45 43 54 20 76 61 6c 75 65 20 46 52  (SELECT value FR
1980: 4f 4d 20 76 76 61 72 20 57 48 45 52 45 20 6e 61  OM vvar WHERE na
1990: 6d 65 3d 27 63 68 65 63 6b 6f 75 74 27 29 0d 0a  me='checkout')..
19a0: 41 4e 44 20 63 68 6e 67 65 64 0d 0a 4f 52 44 45  AND chnged..ORDE
19b0: 52 20 42 59 20 70 61 74 68 6e 61 6d 65 3b 0d 0a  R BY pathname;..
19c0: 3c 2f 70 72 65 3e 3c 2f 6e 6f 77 69 6b 69 3e 0d  </pre></nowiki>.
19d0: 0a 0d 0a 0d 0a 3c 68 32 3e 41 6e 63 65 73 74 72  .....<h2>Ancestr
19e0: 79 20 6f 66 20 61 20 46 69 6c 65 3c 2f 68 32 3e  y of a File</h2>
19f0: 0d 0a 0d 0a 41 6e 20 6f 76 65 72 76 69 65 77 20  ....An overview 
1a00: 6f 66 20 69 6e 66 6f 20 74 68 65 20 61 6e 63 65  of info the ance
1a10: 73 74 72 79 20 6f 66 20 61 20 66 69 6c 65 3a 0d  stry of a file:.
1a20: 0a 0d 0a 3c 6e 6f 77 69 6b 69 3e 3c 70 72 65 3e  ...<nowiki><pre>
1a30: 0d 0a 53 45 4c 45 43 54 0d 0a 62 2e 75 75 69 64  ..SELECT..b.uuid
1a40: 20 61 73 20 6d 61 6e 69 66 65 73 74 55 75 69 64   as manifestUuid
1a50: 2c 0d 0a 64 61 74 65 74 69 6d 65 28 70 2e 6d 74  ,..datetime(p.mt
1a60: 69 6d 65 29 20 61 73 20 6d 61 6e 69 66 65 73 74  ime) as manifest
1a70: 54 69 6d 65 2c 0d 0a 2d 2d 20 20 20 20 20 20 20  Time,..--       
1a80: 6d 6c 2e 2a 2c 0d 0a 62 2e 73 69 7a 65 20 41 53  ml.*,..b.size AS
1a90: 20 6d 61 6e 69 66 65 73 74 53 69 7a 65 2c 0d 0a   manifestSize,..
1aa0: 66 6e 2e 6e 61 6d 65 20 41 53 20 66 69 6c 65 6e  fn.name AS filen
1ab0: 61 6d 65 0d 0a 46 52 4f 4d 20 6d 6c 69 6e 6b 20  ame..FROM mlink 
1ac0: 6d 6c 2c 20 66 69 6c 65 6e 61 6d 65 20 66 6e 2c  ml, filename fn,
1ad0: 20 62 6c 6f 62 20 62 2c 20 70 6c 69 6e 6b 20 70   blob b, plink p
1ae0: 0d 0a 57 48 45 52 45 20 6d 6c 2e 66 6e 69 64 3d  ..WHERE ml.fnid=
1af0: 66 6e 2e 66 6e 69 64 0d 0a 41 4e 44 20 66 6e 2e  fn.fnid..AND fn.
1b00: 6e 61 6d 65 3d 27 66 2d 74 69 6d 65 6c 69 6e 65  name='f-timeline
1b10: 2e 63 27 20 2d 2d 20 43 48 41 4e 47 45 20 54 48  .c' -- CHANGE TH
1b20: 49 53 20 4e 41 4d 45 0d 0a 41 4e 44 20 6d 6c 2e  IS NAME..AND ml.
1b30: 6d 69 64 3d 62 2e 72 69 64 0d 0a 41 4e 44 20 70  mid=b.rid..AND p
1b40: 2e 63 69 64 3d 6d 6c 2e 6d 69 64 0d 0a 4f 52 44  .cid=ml.mid..ORD
1b50: 45 52 20 42 59 20 6d 61 6e 69 66 65 73 74 54 69  ER BY manifestTi
1b60: 6d 65 20 44 45 53 43 3b 0d 0a 3c 2f 70 72 65 3e  me DESC;..</pre>
1b70: 3c 2f 6e 6f 77 69 6b 69 3e 0d 0a 0d 0a 4e 6f 74  </nowiki>....Not
1b80: 20 79 65 74 20 73 75 72 65 20 68 6f 77 20 69 74   yet sure how it
1b90: 20 62 65 68 61 76 65 73 20 61 63 72 6f 73 73 20   behaves across 
1ba0: 62 72 61 6e 63 68 65 73 2c 20 61 6e 64 20 69 74  branches, and it
1bb0: 20 63 65 72 74 61 69 6e 6c 79 20 64 6f 65 73 6e   certainly doesn
1bc0: 27 74 20 74 72 61 63 6b 20 72 65 6e 61 6d 65 73  't track renames
1bd0: 2e 0d 0a 0d 0a 3c 68 32 3e 4c 61 74 65 73 74 20  .....<h2>Latest 
1be0: 43 68 65 63 6b 69 6e 20 49 6e 66 6f 20 66 6f 72  Checkin Info for
1bf0: 20 61 20 47 69 76 65 6e 20 42 72 61 6e 63 68 3c   a Given Branch<
1c00: 2f 68 32 3e 0d 0a 0d 0a 54 68 69 73 20 63 61 6e  /h2>....This can
1c10: 20 70 72 6f 62 61 62 6c 79 20 62 65 20 64 6f 6e   probably be don
1c20: 65 20 6d 6f 72 65 20 73 69 6d 70 6c 79 2c 20 62  e more simply, b
1c30: 75 74 20 68 65 72 65 27 73 20 61 6e 20 61 70 70  ut here's an app
1c40: 72 6f 61 63 68 20 77 68 69 63 68 20 75 73 65 73  roach which uses
1c50: 20 61 20 43 54 45 20 74 6f 20 73 65 6c 65 63 74   a CTE to select
1c60: 20 61 20 6c 69 73 74 20 6f 66 20 62 72 61 6e 63   a list of branc
1c70: 68 20 6e 61 6d 65 73 3a 0d 0a 0d 0a 3c 6e 6f 77  h names:....<now
1c80: 69 6b 69 3e 3c 70 72 65 3e 0d 0a 57 49 54 48 20  iki><pre>..WITH 
1c90: 62 72 61 6e 63 68 28 6e 61 6d 65 29 20 41 53 20  branch(name) AS 
1ca0: 28 0d 0a 20 20 53 45 4c 45 43 54 20 27 64 61 76  (..  SELECT 'dav
1cb0: 65 27 0d 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c 0d  e'..  UNION ALL.
1cc0: 0a 20 20 53 45 4c 45 43 54 20 27 74 72 75 6e 6b  .  SELECT 'trunk
1cd0: 27 0d 0a 29 2c 0d 0a 6c 61 74 65 73 74 42 79 42  '..),..latestByB
1ce0: 72 61 6e 63 68 28 6e 61 6d 65 2c 20 72 69 64 2c  ranch(name, rid,
1cf0: 20 75 75 69 64 2c 20 74 73 29 20 41 53 28 0d 0a   uuid, ts) AS(..
1d00: 20 20 20 20 20 53 45 4c 45 43 54 20 62 72 61 6e       SELECT bran
1d10: 63 68 2e 6e 61 6d 65 2c 20 65 76 65 6e 74 2e 6f  ch.name, event.o
1d20: 62 6a 69 64 2c 20 62 6c 6f 62 2e 75 75 69 64 2c  bjid, blob.uuid,
1d30: 20 64 61 74 65 74 69 6d 65 28 6d 61 78 28 65 76   datetime(max(ev
1d40: 65 6e 74 2e 6d 74 69 6d 65 29 29 0d 0a 20 20 20  ent.mtime))..   
1d50: 20 20 46 52 4f 4d 20 74 61 67 2c 20 74 61 67 78    FROM tag, tagx
1d60: 72 65 66 2c 20 65 76 65 6e 74 2c 20 62 72 61 6e  ref, event, bran
1d70: 63 68 2c 20 62 6c 6f 62 0d 0a 20 20 20 20 20 57  ch, blob..     W
1d80: 48 45 52 45 20 74 61 67 2e 74 61 67 6e 61 6d 65  HERE tag.tagname
1d90: 3d 27 73 79 6d 2d 27 20 7c 7c 20 62 72 61 6e 63  ='sym-' || branc
1da0: 68 2e 6e 61 6d 65 0d 0a 20 20 20 20 20 41 4e 44  h.name..     AND
1db0: 20 74 61 67 78 72 65 66 2e 74 61 67 69 64 3d 74   tagxref.tagid=t
1dc0: 61 67 2e 74 61 67 69 64 0d 0a 20 20 20 20 20 41  ag.tagid..     A
1dd0: 4e 44 20 74 61 67 78 72 65 66 2e 74 61 67 74 79  ND tagxref.tagty
1de0: 70 65 3e 30 0d 0a 20 20 20 20 20 41 4e 44 20 65  pe>0..     AND e
1df0: 76 65 6e 74 2e 6f 62 6a 69 64 3d 74 61 67 78 72  vent.objid=tagxr
1e00: 65 66 2e 72 69 64 0d 0a 20 20 20 20 20 41 4e 44  ef.rid..     AND
1e10: 20 62 6c 6f 62 2e 72 69 64 3d 65 76 65 6e 74 2e   blob.rid=event.
1e20: 6f 62 6a 69 64 0d 0a 20 20 20 20 20 41 4e 44 20  objid..     AND 
1e30: 65 76 65 6e 74 2e 74 79 70 65 20 47 4c 4f 42 20  event.type GLOB 
1e40: 27 63 69 27 0d 0a 20 20 20 20 20 47 52 4f 55 50  'ci'..     GROUP
1e50: 20 42 59 20 62 72 61 6e 63 68 2e 6e 61 6d 65 0d   BY branch.name.
1e60: 0a 29 0d 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f  .)..SELECT * FRO
1e70: 4d 20 6c 61 74 65 73 74 42 79 42 72 61 6e 63 68  M latestByBranch
1e80: 0d 0a 4f 52 44 45 52 20 42 59 20 74 73 20 44 45  ..ORDER BY ts DE
1e90: 53 43 0d 0a 3b 0d 0a 3c 2f 70 72 65 3e 3c 2f 6e  SC..;..</pre></n
1ea0: 6f 77 69 6b 69 3e 0d 0a 3c 68 32 3e 52 65 63 75  owiki>..<h2>Recu
1eb0: 72 73 69 6f 6e 20 45 78 61 6d 70 6c 65 3c 2f 68  rsion Example</h
1ec0: 32 3e 0d 0a 0d 0a 53 65 65 20 61 6c 73 6f 3a 20  2>....See also: 
1ed0: 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69  [http://www.sqli
1ee0: 74 65 2e 6f 72 67 2f 64 72 61 66 74 2f 6c 61 6e  te.org/draft/lan
1ef0: 67 5f 77 69 74 68 2e 68 74 6d 6c 5d 0d 0a 0d 0a  g_with.html]....
1f00: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73  The following is
1f10: 20 61 64 61 70 74 65 64 20 66 72 6f 6d 20 61 20   adapted from a 
1f20: 73 71 6c 69 74 65 20 6d 61 69 6c 69 6e 67 20 6c  sqlite mailing l
1f30: 69 73 74 20 70 6f 73 74 20 62 79 20 50 65 74 69  ist post by Peti
1f40: 74 65 20 41 62 65 69 6c 6c 65 20 6f 6e 20 32 30  te Abeille on 20
1f50: 31 34 30 32 30 33 2c 20 6e 6f 74 20 64 69 72 65  140203, not dire
1f60: 63 74 6c 79 20 61 70 70 6c 69 63 61 62 6c 65 20  ctly applicable 
1f70: 74 6f 20 66 6f 73 73 69 6c 20 62 75 74 20 77 68  to fossil but wh
1f80: 69 63 68 20 69 73 20 61 6e 20 69 6e 74 65 72 65  ich is an intere
1f90: 73 74 69 6e 67 20 65 78 61 6d 70 6c 65 20 6e 6f  sting example no
1fa0: 6e 65 74 68 65 6c 65 73 73 20 61 6e 64 20 77 68  netheless and wh
1fb0: 69 63 68 20 63 61 6e 20 63 65 72 74 61 69 6e 6c  ich can certainl
1fc0: 79 20 62 65 20 75 73 65 64 20 61 73 20 61 20 6d  y be used as a m
1fd0: 6f 64 65 6c 20 66 6f 72 20 67 65 6e 65 72 61 74  odel for generat
1fe0: 69 6e 67 20 66 6f 73 73 69 6c 2d 72 65 6c 61 74  ing fossil-relat
1ff0: 65 64 20 64 61 74 61 3a 0d 0a 0d 0a 3c 6e 6f 77  ed data:....<now
2000: 69 6b 69 3e 3c 70 72 65 3e 0d 0a 77 69 74 68 0d  iki><pre>..with.
2010: 0a 44 61 74 61 53 65 74 28 6e 6f 64 65 2c 70 61  .DataSet(node,pa
2020: 72 65 6e 74 29 0d 0a 61 73 0d 0a 28 0d 0a 20 20  rent)..as..(..  
2030: 73 65 6c 65 63 74 20 20 27 41 27 2c 20 6e 75 6c  select  'A', nul
2040: 6c 20 75 6e 69 6f 6e 20 61 6c 6c 0d 0a 20 20 73  l union all..  s
2050: 65 6c 65 63 74 20 20 27 46 27 2c 20 6e 75 6c 6c  elect  'F', null
2060: 20 75 6e 69 6f 6e 20 61 6c 6c 0d 0a 20 20 73 65   union all..  se
2070: 6c 65 63 74 20 20 27 42 27 2c 20 27 41 27 20 75  lect  'B', 'A' u
2080: 6e 69 6f 6e 20 61 6c 6c 0d 0a 20 20 73 65 6c 65  nion all..  sele
2090: 63 74 20 20 27 43 27 2c 20 27 42 27 20 75 6e 69  ct  'C', 'B' uni
20a0: 6f 6e 20 61 6c 6c 0d 0a 20 20 73 65 6c 65 63 74  on all..  select
20b0: 20 20 27 45 27 2c 20 27 46 27 20 75 6e 69 6f 6e    'E', 'F' union
20c0: 20 61 6c 6c 0d 0a 20 20 73 65 6c 65 63 74 20 20   all..  select  
20d0: 27 48 27 2c 20 27 45 27 20 75 6e 69 6f 6e 20 61  'H', 'E' union a
20e0: 6c 6c 0d 0a 20 20 73 65 6c 65 63 74 20 20 27 47  ll..  select  'G
20f0: 27 2c 20 27 45 27 20 75 6e 69 6f 6e 20 61 6c 6c  ', 'E' union all
2100: 0d 0a 20 20 73 65 6c 65 63 74 20 20 27 44 27 2c  ..  select  'D',
2110: 20 27 43 27 0d 0a 29 2c 0d 0a 48 69 65 72 61 72   'C'..),..Hierar
2120: 63 68 79 28 20 6e 6f 64 65 2c 20 70 61 72 65 6e  chy( node, paren
2130: 74 2c 20 6c 65 76 65 6c 2c 20 70 61 74 68 2c 20  t, level, path, 
2140: 69 73 48 65 61 64 2c 20 69 73 54 61 69 6c 20 29  isHead, isTail )
2150: 0d 0a 61 73 0d 0a 28 0d 0a 20 20 73 65 6c 65 63  ..as..(..  selec
2160: 74 20 20 44 61 74 61 53 65 74 2e 6e 6f 64 65 20  t  DataSet.node 
2170: 61 73 20 6e 6f 64 65 2c 0d 0a 20 20 20 20 20 20  as node,..      
2180: 20 20 20 20 27 4e 55 4c 4c 27 20 61 73 20 70 61      'NULL' as pa
2190: 72 65 6e 74 2c 20 2d 2d 20 44 61 74 61 53 65 74  rent, -- DataSet
21a0: 2e 70 61 72 65 6e 74 2c 0d 0a 20 20 20 20 20 20  .parent,..      
21b0: 20 20 20 20 30 20 61 73 20 6c 65 76 65 6c 2c 0d      0 as level,.
21c0: 0a 20 20 20 20 20 20 20 20 20 20 27 20 e2 86 92  .          ' ...
21d0: 20 27 20 7c 7c 20 44 61 74 61 53 65 74 2e 6e 6f   ' || DataSet.no
21e0: 64 65 20 61 73 20 70 61 74 68 2c 0d 0a 20 20 20  de as path,..   
21f0: 20 20 20 20 20 20 20 44 61 74 61 53 65 74 2e 70         DataSet.p
2200: 61 72 65 6e 74 20 49 53 20 4e 55 4c 4c 2c 0d 0a  arent IS NULL,..
2210: 20 20 20 20 20 20 20 20 20 20 4e 4f 54 20 45 58            NOT EX
2220: 49 53 54 53 20 28 53 45 4c 45 43 54 20 31 20 46  ISTS (SELECT 1 F
2230: 52 4f 4d 20 44 61 74 61 53 65 74 20 64 20 57 48  ROM DataSet d WH
2240: 45 52 45 20 64 2e 70 61 72 65 6e 74 3d 44 61 74  ERE d.parent=Dat
2250: 61 53 65 74 2e 6e 6f 64 65 29 0d 0a 20 20 66 72  aSet.node)..  fr
2260: 6f 6d 20 20 20 20 20 44 61 74 61 53 65 74 0d 0a  om     DataSet..
2270: 20 20 77 68 65 72 65 20 20 20 20 44 61 74 61 53    where    DataS
2280: 65 74 2e 70 61 72 65 6e 74 20 69 73 20 6e 75 6c  et.parent is nul
2290: 6c 0d 0a 0d 0a 20 20 75 6e 69 6f 6e 20 61 6c 6c  l....  union all
22a0: 0d 0a 20 20 73 65 6c 65 63 74 20 20 44 61 74 61  ..  select  Data
22b0: 53 65 74 2e 6e 6f 64 65 20 61 73 20 6e 6f 64 65  Set.node as node
22c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 61 74  ,..          Dat
22d0: 61 53 65 74 2e 70 61 72 65 6e 74 20 61 73 20 70  aSet.parent as p
22e0: 61 72 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  arent,..        
22f0: 20 20 48 69 65 72 61 72 63 68 79 2e 6c 65 76 65    Hierarchy.leve
2300: 6c 20 2b 20 31 20 61 73 20 6c 65 76 65 6c 2c 0d  l + 1 as level,.
2310: 0a 20 20 20 20 20 20 20 20 20 20 48 69 65 72 61  .          Hiera
2320: 72 63 68 79 2e 70 61 74 68 20 7c 7c 20 27 20 e2  rchy.path || ' .
2330: 86 92 20 27 20 7c 7c 20 44 61 74 61 53 65 74 2e  .. ' || DataSet.
2340: 6e 6f 64 65 20 61 73 20 70 61 74 68 2c 0d 0a 20  node as path,.. 
2350: 20 20 20 20 20 20 20 20 20 44 61 74 61 53 65 74           DataSet
2360: 2e 70 61 72 65 6e 74 20 49 53 20 4e 55 4c 4c 2c  .parent IS NULL,
2370: 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 4f 54 20  ..          NOT 
2380: 45 58 49 53 54 53 20 28 53 45 4c 45 43 54 20 31  EXISTS (SELECT 1
2390: 20 46 52 4f 4d 20 44 61 74 61 53 65 74 20 64 20   FROM DataSet d 
23a0: 57 48 45 52 45 20 64 2e 70 61 72 65 6e 74 3d 44  WHERE d.parent=D
23b0: 61 74 61 53 65 74 2e 6e 6f 64 65 29 0d 0a 20 20  ataSet.node)..  
23c0: 66 72 6f 6d 20 20 20 20 48 69 65 72 61 72 63 68  from    Hierarch
23d0: 79 0d 0a 20 20 6a 6f 69 6e 20 20 20 20 44 61 74  y..  join    Dat
23e0: 61 53 65 74 0d 0a 20 20 6f 6e 20 20 20 20 20 20  aSet..  on      
23f0: 44 61 74 61 53 65 74 2e 70 61 72 65 6e 74 20 3d  DataSet.parent =
2400: 20 48 69 65 72 61 72 63 68 79 2e 6e 6f 64 65 0d   Hierarchy.node.
2410: 0a 20 20 4f 52 44 45 52 20 42 59 20 70 61 72 65  .  ORDER BY pare
2420: 6e 74 2c 20 6e 6f 64 65 0d 0a 29 0d 0a 73 65 6c  nt, node..)..sel
2430: 65 63 74 20 20 20 20 2a 0d 0a 66 72 6f 6d 20 20  ect    *..from  
2440: 20 20 20 20 48 69 65 72 61 72 63 68 79 0d 0a 2d      Hierarchy..-
2450: 2d 20 77 68 65 72 65 20 6c 65 76 65 6c 3e 31 0d  - where level>1.
2460: 0a 6f 72 64 65 72 20 62 79 20 20 70 61 74 68 3b  .order by  path;
2470: 0d 0a 3c 2f 70 72 65 3e 3c 2f 6e 6f 77 69 6b 69  ..</pre></nowiki
2480: 3e 0a 5a 20 64 61 35 61 37 31 34 34 34 39 61 65  >.Z da5a714449ae
2490: 63 32 35 63 65 65 63 31 65 32 63 38 63 37 31 31  c25ceec1e2c8c711
24a0: 37 37 39 64 0a                                   779d.