Fossil SCM

Add the -nocomplain option to the TH1 "query" command. Add the ability to query the unversioned table, if such a table exists.

drh 2016-08-16 20:48 trunk
Commit c8289bdce4b10243397a847979ce37f1cc0e4fdf
2 files changed +2 -1 +11 -1
+2 -1
--- src/report.c
+++ src/report.c
@@ -173,11 +173,11 @@
173173
const char *zArg4
174174
){
175175
int rc = SQLITE_OK;
176176
if( *(char**)pError ){
177177
/* We've already seen an error. No need to continue. */
178
- return SQLITE_OK;
178
+ return SQLITE_DENY;
179179
}
180180
switch( code ){
181181
case SQLITE_SELECT:
182182
case SQLITE_RECURSIVE:
183183
case SQLITE_FUNCTION: {
@@ -192,10 +192,11 @@
192192
"mlink",
193193
"plink",
194194
"event",
195195
"tag",
196196
"tagxref",
197
+ "unversioned",
197198
};
198199
int i;
199200
if( fossil_strncmp(zArg1, "fx_", 3)==0 ){
200201
break;
201202
}
202203
--- src/report.c
+++ src/report.c
@@ -173,11 +173,11 @@
173 const char *zArg4
174 ){
175 int rc = SQLITE_OK;
176 if( *(char**)pError ){
177 /* We've already seen an error. No need to continue. */
178 return SQLITE_OK;
179 }
180 switch( code ){
181 case SQLITE_SELECT:
182 case SQLITE_RECURSIVE:
183 case SQLITE_FUNCTION: {
@@ -192,10 +192,11 @@
192 "mlink",
193 "plink",
194 "event",
195 "tag",
196 "tagxref",
 
197 };
198 int i;
199 if( fossil_strncmp(zArg1, "fx_", 3)==0 ){
200 break;
201 }
202
--- src/report.c
+++ src/report.c
@@ -173,11 +173,11 @@
173 const char *zArg4
174 ){
175 int rc = SQLITE_OK;
176 if( *(char**)pError ){
177 /* We've already seen an error. No need to continue. */
178 return SQLITE_DENY;
179 }
180 switch( code ){
181 case SQLITE_SELECT:
182 case SQLITE_RECURSIVE:
183 case SQLITE_FUNCTION: {
@@ -192,10 +192,11 @@
192 "mlink",
193 "plink",
194 "event",
195 "tag",
196 "tagxref",
197 "unversioned",
198 };
199 int i;
200 if( fossil_strncmp(zArg1, "fx_", 3)==0 ){
201 break;
202 }
203
+11 -1
--- src/th_main.c
+++ src/th_main.c
@@ -1428,11 +1428,11 @@
14281428
Th_SetResult(interp, (const char *)zOut, -1);
14291429
return TH_OK;
14301430
}
14311431
14321432
/*
1433
-** TH1 command: query SQL CODE
1433
+** TH1 command: query [-nocomplain] SQL CODE
14341434
**
14351435
** Run the SQL query given by the SQL argument. For each row in the result
14361436
** set, run CODE.
14371437
**
14381438
** In SQL, parameters such as $var are filled in using the value of variable
@@ -1453,15 +1453,23 @@
14531453
const char *zTail;
14541454
int n, i;
14551455
int res = TH_OK;
14561456
int nVar;
14571457
char *zErr = 0;
1458
+ int noComplain = 0;
14581459
1460
+ if( argc>3 && argl[1]==11 && strncmp(argv[1], "-nocomplain", 11)==0 ){
1461
+ argc--;
1462
+ argv++;
1463
+ argl++;
1464
+ noComplain = 1;
1465
+ }
14591466
if( argc!=3 ){
14601467
return Th_WrongNumArgs(interp, "query SQL CODE");
14611468
}
14621469
if( g.db==0 ){
1470
+ if( noComplain ) return TH_OK;
14631471
Th_ErrorMessage(interp, "database is not open", 0, 0);
14641472
return TH_ERROR;
14651473
}
14661474
zSql = argv[1];
14671475
nSql = argl[1];
@@ -1469,10 +1477,11 @@
14691477
zErr = 0;
14701478
sqlite3_set_authorizer(g.db, report_query_authorizer, (void*)&zErr);
14711479
rc = sqlite3_prepare_v2(g.db, argv[1], argl[1], &pStmt, &zTail);
14721480
sqlite3_set_authorizer(g.db, 0, 0);
14731481
if( rc!=0 || zErr!=0 ){
1482
+ if( noComplain ) return TH_OK;
14741483
Th_ErrorMessage(interp, "SQL error: ",
14751484
zErr ? zErr : sqlite3_errmsg(g.db), -1);
14761485
return TH_ERROR;
14771486
}
14781487
n = (int)(zTail - zSql);
@@ -1502,10 +1511,11 @@
15021511
res = Th_Eval(interp, 0, argv[2], argl[2]);
15031512
if( res==TH_BREAK || res==TH_CONTINUE ) res = TH_OK;
15041513
}
15051514
rc = sqlite3_finalize(pStmt);
15061515
if( rc!=SQLITE_OK ){
1516
+ if( noComplain ) return TH_OK;
15071517
Th_ErrorMessage(interp, "SQL error: ", sqlite3_errmsg(g.db), -1);
15081518
return TH_ERROR;
15091519
}
15101520
}
15111521
return res;
15121522
--- src/th_main.c
+++ src/th_main.c
@@ -1428,11 +1428,11 @@
1428 Th_SetResult(interp, (const char *)zOut, -1);
1429 return TH_OK;
1430 }
1431
1432 /*
1433 ** TH1 command: query SQL CODE
1434 **
1435 ** Run the SQL query given by the SQL argument. For each row in the result
1436 ** set, run CODE.
1437 **
1438 ** In SQL, parameters such as $var are filled in using the value of variable
@@ -1453,15 +1453,23 @@
1453 const char *zTail;
1454 int n, i;
1455 int res = TH_OK;
1456 int nVar;
1457 char *zErr = 0;
 
1458
 
 
 
 
 
 
1459 if( argc!=3 ){
1460 return Th_WrongNumArgs(interp, "query SQL CODE");
1461 }
1462 if( g.db==0 ){
 
1463 Th_ErrorMessage(interp, "database is not open", 0, 0);
1464 return TH_ERROR;
1465 }
1466 zSql = argv[1];
1467 nSql = argl[1];
@@ -1469,10 +1477,11 @@
1469 zErr = 0;
1470 sqlite3_set_authorizer(g.db, report_query_authorizer, (void*)&zErr);
1471 rc = sqlite3_prepare_v2(g.db, argv[1], argl[1], &pStmt, &zTail);
1472 sqlite3_set_authorizer(g.db, 0, 0);
1473 if( rc!=0 || zErr!=0 ){
 
1474 Th_ErrorMessage(interp, "SQL error: ",
1475 zErr ? zErr : sqlite3_errmsg(g.db), -1);
1476 return TH_ERROR;
1477 }
1478 n = (int)(zTail - zSql);
@@ -1502,10 +1511,11 @@
1502 res = Th_Eval(interp, 0, argv[2], argl[2]);
1503 if( res==TH_BREAK || res==TH_CONTINUE ) res = TH_OK;
1504 }
1505 rc = sqlite3_finalize(pStmt);
1506 if( rc!=SQLITE_OK ){
 
1507 Th_ErrorMessage(interp, "SQL error: ", sqlite3_errmsg(g.db), -1);
1508 return TH_ERROR;
1509 }
1510 }
1511 return res;
1512
--- src/th_main.c
+++ src/th_main.c
@@ -1428,11 +1428,11 @@
1428 Th_SetResult(interp, (const char *)zOut, -1);
1429 return TH_OK;
1430 }
1431
1432 /*
1433 ** TH1 command: query [-nocomplain] SQL CODE
1434 **
1435 ** Run the SQL query given by the SQL argument. For each row in the result
1436 ** set, run CODE.
1437 **
1438 ** In SQL, parameters such as $var are filled in using the value of variable
@@ -1453,15 +1453,23 @@
1453 const char *zTail;
1454 int n, i;
1455 int res = TH_OK;
1456 int nVar;
1457 char *zErr = 0;
1458 int noComplain = 0;
1459
1460 if( argc>3 && argl[1]==11 && strncmp(argv[1], "-nocomplain", 11)==0 ){
1461 argc--;
1462 argv++;
1463 argl++;
1464 noComplain = 1;
1465 }
1466 if( argc!=3 ){
1467 return Th_WrongNumArgs(interp, "query SQL CODE");
1468 }
1469 if( g.db==0 ){
1470 if( noComplain ) return TH_OK;
1471 Th_ErrorMessage(interp, "database is not open", 0, 0);
1472 return TH_ERROR;
1473 }
1474 zSql = argv[1];
1475 nSql = argl[1];
@@ -1469,10 +1477,11 @@
1477 zErr = 0;
1478 sqlite3_set_authorizer(g.db, report_query_authorizer, (void*)&zErr);
1479 rc = sqlite3_prepare_v2(g.db, argv[1], argl[1], &pStmt, &zTail);
1480 sqlite3_set_authorizer(g.db, 0, 0);
1481 if( rc!=0 || zErr!=0 ){
1482 if( noComplain ) return TH_OK;
1483 Th_ErrorMessage(interp, "SQL error: ",
1484 zErr ? zErr : sqlite3_errmsg(g.db), -1);
1485 return TH_ERROR;
1486 }
1487 n = (int)(zTail - zSql);
@@ -1502,10 +1511,11 @@
1511 res = Th_Eval(interp, 0, argv[2], argl[2]);
1512 if( res==TH_BREAK || res==TH_CONTINUE ) res = TH_OK;
1513 }
1514 rc = sqlite3_finalize(pStmt);
1515 if( rc!=SQLITE_OK ){
1516 if( noComplain ) return TH_OK;
1517 Th_ErrorMessage(interp, "SQL error: ", sqlite3_errmsg(g.db), -1);
1518 return TH_ERROR;
1519 }
1520 }
1521 return res;
1522

Keyboard Shortcuts

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