@@ -23,10 +23,59 @@
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "config.h"
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "leaf.h"
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <assert.h>
27 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the check-in with RID=rid is a leaf.
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A leaf has no children in the same branch.
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int is_a_leaf(int rid){
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char zSql[] =
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ SELECT 1 FROM plink
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE pid=%d
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ AND coalesce((SELECT value FROM tagxref
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ =coalesce((SELECT value FROM tagxref
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ;
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = db_int(0, zSql, rid, TAG_BRANCH, TAG_BRANCH);
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc==0;
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Count the number of primary non-branch children for the given check-in.
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A primary child is one where the parent is the primary parent, not
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a merge parent. A "leaf" is a node that has zero children of any
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** kind. This routine counts only primary children.
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A non-branch child is one which is on the same branch as the parent.
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int count_nonbranch_children(int pid){
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nNonBranch = 0;
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static Stmt q;
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char zSql[] =
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ SELECT count(*) FROM plink
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE pid=:pid AND isprim
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ AND coalesce((SELECT value FROM tagxref
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE tagid=%d AND rid=plink.pid), 'trunk')
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ =coalesce((SELECT value FROM tagxref
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ WHERE tagid=%d AND rid=plink.cid), 'trunk')
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ;
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_static_prepare(&q, zSql, TAG_BRANCH, TAG_BRANCH);
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_bind_int(&q, ":pid", pid);
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_step(&q)==SQLITE_ROW ){
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nNonBranch = db_column_int(&q, 0);
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_reset(&q);
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return nNonBranch;
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
28 77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
30 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Recompute the entire LEAF table.
31 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
32 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This can be expensive (5 seconds or so) for a really large repository.
@@ -40,12 +89,11 @@
40 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" EXCEPT"
41 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" SELECT pid FROM plink"
42 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE coalesce((SELECT value FROM tagxref"
43 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=%d AND rid=plink.pid),'trunk')"
44 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" == coalesce((SELECT value FROM tagxref"
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE tagid=%d AND rid=plink.cid),'trunk')"
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND isprim",
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE tagid=%d AND rid=plink.cid),'trunk')",
47 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TAG_BRANCH, TAG_BRANCH
48 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
49 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -63,11 +111,11 @@
63 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Stmt removeLeaf;
64 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
65 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_static_prepare(&checkIfLeaf,
67 115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT 1 FROM plink"
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE pid=:rid AND isprim"
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE pid=:rid"
69 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND coalesce((SELECT value FROM tagxref"
70 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=%d AND rid=:rid),'trunk')"
71 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" == coalesce((SELECT value FROM tagxref"
72 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=%d AND rid=plink.cid),'trunk');",
73 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TAG_BRANCH, TAG_BRANCH
74 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!