| | @@ -141,44 +141,44 @@ |
| 141 | 141 | &zTag[4], zType); |
| 142 | 142 | return rid; |
| 143 | 143 | } |
| 144 | 144 | |
| 145 | 145 | /* "tag:" + symbolic-name */ |
| 146 | | - if( memcmp(zTag, "tag:", 4)==0 |
| 147 | | - || memcmp(zTag, "root:", 5)==0 |
| 148 | | - ){ |
| 149 | | - int isRoot = zTag[0]=='r'; |
| 146 | + if( memcmp(zTag, "tag:", 4)==0 ){ |
| 150 | 147 | rid = db_int(0, |
| 151 | 148 | "SELECT event.objid" |
| 152 | 149 | " FROM tag, tagxref, event" |
| 153 | 150 | " WHERE tag.tagname='sym-%q' " |
| 154 | 151 | " AND tagxref.tagid=tag.tagid AND tagxref.tagtype>0 " |
| 155 | 152 | " AND event.objid=tagxref.rid " |
| 156 | 153 | " AND event.type GLOB '%q'" |
| 157 | 154 | " ORDER BY event.mtime DESC /*sort*/", |
| 158 | | - &zTag[4+isRoot], zType |
| 159 | | - ); |
| 160 | | - if( isRoot && rid>0 ){ |
| 161 | | - Stmt q; |
| 162 | | - int rc; |
| 163 | | - db_prepare(&q, |
| 164 | | - "SELECT pid, EXISTS(SELECT 1 FROM tagxref" |
| 165 | | - " WHERE tagid=%d AND tagtype>0" |
| 166 | | - " AND value=%Q AND rid=plink.pid)" |
| 167 | | - " FROM plink" |
| 168 | | - " WHERE cid=:cid AND isprim", |
| 169 | | - TAG_BRANCH, &zTag[5] |
| 170 | | - ); |
| 171 | | - do{ |
| 172 | | - db_reset(&q); |
| 173 | | - db_bind_int(&q, ":cid", rid); |
| 174 | | - rc = db_step(&q); |
| 175 | | - if( rc!=SQLITE_ROW ) break; |
| 176 | | - rid = db_column_int(&q, 0); |
| 177 | | - }while( db_column_int(&q, 1)==1 && rid>0 ); |
| 178 | | - db_finalize(&q); |
| 179 | | - } |
| 155 | + &zTag[4], zType |
| 156 | + ); |
| 157 | + } |
| 158 | + |
| 159 | + /* root:TAG -> The origin of the branch */ |
| 160 | + if( memcmp(zTag, "root:", 5)==0 ){ |
| 161 | + Stmt q; |
| 162 | + int rc; |
| 163 | + rid = symbolic_name_to_rid(zTag+5, zType); |
| 164 | + db_prepare(&q, |
| 165 | + "SELECT pid, EXISTS(SELECT 1 FROM tagxref" |
| 166 | + " WHERE tagid=%d AND tagtype>0" |
| 167 | + " AND value=%Q AND rid=plink.pid)" |
| 168 | + " FROM plink" |
| 169 | + " WHERE cid=:cid AND isprim", |
| 170 | + TAG_BRANCH, &zTag[5] |
| 171 | + ); |
| 172 | + do{ |
| 173 | + db_reset(&q); |
| 174 | + db_bind_int(&q, ":cid", rid); |
| 175 | + rc = db_step(&q); |
| 176 | + if( rc!=SQLITE_ROW ) break; |
| 177 | + rid = db_column_int(&q, 0); |
| 178 | + }while( db_column_int(&q, 1)==1 && rid>0 ); |
| 179 | + db_finalize(&q); |
| 180 | 180 | return rid; |
| 181 | 181 | } |
| 182 | 182 | |
| 183 | 183 | /* symbolic-name ":" date-time */ |
| 184 | 184 | nTag = strlen(zTag); |
| 185 | 185 | |