Fossil SCM

Add support for optional <var>tkt_ucard</var> column of the <var>TICKETCHNG</var> table. If this column is present than its value is populated from the U-card record of the corresponding artifact.

george 2022-05-01 21:00 tkt-ucard
Commit d681e1dc1d4ccc73e791d7021bf29a8edd1d93f5b21d9a868ae66e2f46b5c67d
--- src/schema.c
+++ src/schema.c
@@ -458,10 +458,11 @@
458458
@ CREATE TABLE ticketchng(
459459
@ -- Do not change any column that begins with tkt_
460460
@ tkt_id INTEGER REFERENCES ticket,
461461
@ tkt_rid INTEGER REFERENCES blob,
462462
@ tkt_mtime DATE,
463
+@ -- tkt_ucard TEXT, -- optional predefined field
463464
@ -- Add as many fields as required below this line
464465
@ login TEXT,
465466
@ username TEXT,
466467
@ mimetype TEXT,
467468
@ icomment TEXT
468469
--- src/schema.c
+++ src/schema.c
@@ -458,10 +458,11 @@
458 @ CREATE TABLE ticketchng(
459 @ -- Do not change any column that begins with tkt_
460 @ tkt_id INTEGER REFERENCES ticket,
461 @ tkt_rid INTEGER REFERENCES blob,
462 @ tkt_mtime DATE,
 
463 @ -- Add as many fields as required below this line
464 @ login TEXT,
465 @ username TEXT,
466 @ mimetype TEXT,
467 @ icomment TEXT
468
--- src/schema.c
+++ src/schema.c
@@ -458,10 +458,11 @@
458 @ CREATE TABLE ticketchng(
459 @ -- Do not change any column that begins with tkt_
460 @ tkt_id INTEGER REFERENCES ticket,
461 @ tkt_rid INTEGER REFERENCES blob,
462 @ tkt_mtime DATE,
463 @ -- tkt_ucard TEXT, -- optional predefined field
464 @ -- Add as many fields as required below this line
465 @ login TEXT,
466 @ username TEXT,
467 @ mimetype TEXT,
468 @ icomment TEXT
469
+7 -1
--- src/tkt.c
+++ src/tkt.c
@@ -39,10 +39,11 @@
3939
#define USEDBY_BOTH 03
4040
static u8 haveTicket = 0; /* True if the TICKET table exists */
4141
static u8 haveTicketCTime = 0; /* True if TICKET.TKT_CTIME exists */
4242
static u8 haveTicketChng = 0; /* True if the TICKETCHNG table exists */
4343
static u8 haveTicketChngRid = 0; /* True if TICKETCHNG.TKT_RID exists */
44
+static u8 haveTicketChngUcard=0; /* True if TICKETCHNG.TKT_UCARD exists */
4445
4546
/*
4647
** Compare two entries in aField[] for sorting purposes
4748
*/
4849
static int nameCmpr(const void *a, const void *b){
@@ -95,10 +96,11 @@
9596
while( db_step(&q)==SQLITE_ROW ){
9697
const char *zFieldName = db_column_text(&q, 1);
9798
haveTicketChng = 1;
9899
if( memcmp(zFieldName,"tkt_",4)==0 ){
99100
if( strcmp(zFieldName,"tkt_rid")==0 ) haveTicketChngRid = 1;
101
+ if( strcmp(zFieldName,"tkt_ucard")==0 ) haveTicketChngUcard = 1;
100102
continue;
101103
}
102104
if( (i = fieldId(zFieldName))>=0 ){
103105
aField[i].mUsed |= USEDBY_TICKETCHNG;
104106
continue;
@@ -250,16 +252,20 @@
250252
db_prepare(&q, "%s", blob_sql_text(&sql1));
251253
db_bind_double(&q, ":mtime", p->rDate);
252254
db_step(&q);
253255
db_finalize(&q);
254256
blob_reset(&sql1);
255
- if( blob_size(&sql2)>0 || haveTicketChngRid ){
257
+ if( blob_size(&sql2)>0 || haveTicketChngRid || haveTicketChngUcard ){
256258
int fromTkt = 0;
257259
if( haveTicketChngRid ){
258260
blob_append_literal(&sql2, ",tkt_rid");
259261
blob_append_sql(&sql3, ",%d", rid);
260262
}
263
+ if( haveTicketChngUcard && p->zUser ){
264
+ blob_append_literal(&sql2, ",tkt_ucard");
265
+ blob_append_sql(&sql3, ",%Q", p->zUser );
266
+ }
261267
for(i=0; i<nField; i++){
262268
if( aUsed[i]==0
263269
&& (aField[i].mUsed & USEDBY_BOTH)==USEDBY_BOTH
264270
){
265271
const char *z = aField[i].zName;
266272
--- src/tkt.c
+++ src/tkt.c
@@ -39,10 +39,11 @@
39 #define USEDBY_BOTH 03
40 static u8 haveTicket = 0; /* True if the TICKET table exists */
41 static u8 haveTicketCTime = 0; /* True if TICKET.TKT_CTIME exists */
42 static u8 haveTicketChng = 0; /* True if the TICKETCHNG table exists */
43 static u8 haveTicketChngRid = 0; /* True if TICKETCHNG.TKT_RID exists */
 
44
45 /*
46 ** Compare two entries in aField[] for sorting purposes
47 */
48 static int nameCmpr(const void *a, const void *b){
@@ -95,10 +96,11 @@
95 while( db_step(&q)==SQLITE_ROW ){
96 const char *zFieldName = db_column_text(&q, 1);
97 haveTicketChng = 1;
98 if( memcmp(zFieldName,"tkt_",4)==0 ){
99 if( strcmp(zFieldName,"tkt_rid")==0 ) haveTicketChngRid = 1;
 
100 continue;
101 }
102 if( (i = fieldId(zFieldName))>=0 ){
103 aField[i].mUsed |= USEDBY_TICKETCHNG;
104 continue;
@@ -250,16 +252,20 @@
250 db_prepare(&q, "%s", blob_sql_text(&sql1));
251 db_bind_double(&q, ":mtime", p->rDate);
252 db_step(&q);
253 db_finalize(&q);
254 blob_reset(&sql1);
255 if( blob_size(&sql2)>0 || haveTicketChngRid ){
256 int fromTkt = 0;
257 if( haveTicketChngRid ){
258 blob_append_literal(&sql2, ",tkt_rid");
259 blob_append_sql(&sql3, ",%d", rid);
260 }
 
 
 
 
261 for(i=0; i<nField; i++){
262 if( aUsed[i]==0
263 && (aField[i].mUsed & USEDBY_BOTH)==USEDBY_BOTH
264 ){
265 const char *z = aField[i].zName;
266
--- src/tkt.c
+++ src/tkt.c
@@ -39,10 +39,11 @@
39 #define USEDBY_BOTH 03
40 static u8 haveTicket = 0; /* True if the TICKET table exists */
41 static u8 haveTicketCTime = 0; /* True if TICKET.TKT_CTIME exists */
42 static u8 haveTicketChng = 0; /* True if the TICKETCHNG table exists */
43 static u8 haveTicketChngRid = 0; /* True if TICKETCHNG.TKT_RID exists */
44 static u8 haveTicketChngUcard=0; /* True if TICKETCHNG.TKT_UCARD exists */
45
46 /*
47 ** Compare two entries in aField[] for sorting purposes
48 */
49 static int nameCmpr(const void *a, const void *b){
@@ -95,10 +96,11 @@
96 while( db_step(&q)==SQLITE_ROW ){
97 const char *zFieldName = db_column_text(&q, 1);
98 haveTicketChng = 1;
99 if( memcmp(zFieldName,"tkt_",4)==0 ){
100 if( strcmp(zFieldName,"tkt_rid")==0 ) haveTicketChngRid = 1;
101 if( strcmp(zFieldName,"tkt_ucard")==0 ) haveTicketChngUcard = 1;
102 continue;
103 }
104 if( (i = fieldId(zFieldName))>=0 ){
105 aField[i].mUsed |= USEDBY_TICKETCHNG;
106 continue;
@@ -250,16 +252,20 @@
252 db_prepare(&q, "%s", blob_sql_text(&sql1));
253 db_bind_double(&q, ":mtime", p->rDate);
254 db_step(&q);
255 db_finalize(&q);
256 blob_reset(&sql1);
257 if( blob_size(&sql2)>0 || haveTicketChngRid || haveTicketChngUcard ){
258 int fromTkt = 0;
259 if( haveTicketChngRid ){
260 blob_append_literal(&sql2, ",tkt_rid");
261 blob_append_sql(&sql3, ",%d", rid);
262 }
263 if( haveTicketChngUcard && p->zUser ){
264 blob_append_literal(&sql2, ",tkt_ucard");
265 blob_append_sql(&sql3, ",%Q", p->zUser );
266 }
267 for(i=0; i<nField; i++){
268 if( aUsed[i]==0
269 && (aField[i].mUsed & USEDBY_BOTH)==USEDBY_BOTH
270 ){
271 const char *z = aField[i].zName;
272
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -86,10 +86,11 @@
8686
@ CREATE TABLE ticketchng(
8787
@ -- Do not change any column that begins with tkt_
8888
@ tkt_id INTEGER REFERENCES ticket,
8989
@ tkt_rid INTEGER REFERENCES blob,
9090
@ tkt_mtime DATE,
91
+@ -- tkt_ucard TEXT, -- optional predefined field
9192
@ -- Add as many fields as required below this line
9293
@ login TEXT,
9394
@ username TEXT,
9495
@ mimetype TEXT,
9596
@ icomment TEXT
9697
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -86,10 +86,11 @@
86 @ CREATE TABLE ticketchng(
87 @ -- Do not change any column that begins with tkt_
88 @ tkt_id INTEGER REFERENCES ticket,
89 @ tkt_rid INTEGER REFERENCES blob,
90 @ tkt_mtime DATE,
 
91 @ -- Add as many fields as required below this line
92 @ login TEXT,
93 @ username TEXT,
94 @ mimetype TEXT,
95 @ icomment TEXT
96
--- src/tktsetup.c
+++ src/tktsetup.c
@@ -86,10 +86,11 @@
86 @ CREATE TABLE ticketchng(
87 @ -- Do not change any column that begins with tkt_
88 @ tkt_id INTEGER REFERENCES ticket,
89 @ tkt_rid INTEGER REFERENCES blob,
90 @ tkt_mtime DATE,
91 @ -- tkt_ucard TEXT, -- optional predefined field
92 @ -- Add as many fields as required below this line
93 @ login TEXT,
94 @ username TEXT,
95 @ mimetype TEXT,
96 @ icomment TEXT
97

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button