Fossil SCM

Improvements to the ".fullschema" command in the command-line shell.

jan.nijtmans 2014-07-18 22:03 trunk
Commit 13f8ba6ca89c8ae3398062162ad19e71f5d28571
1 file changed +28 -15
+28 -15
--- src/shell.c
+++ src/shell.c
@@ -2414,10 +2414,11 @@
24142414
}else
24152415
24162416
if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
24172417
struct callback_data data;
24182418
char *zErrMsg = 0;
2419
+ int doStats = 0;
24192420
if( nArg!=1 ){
24202421
fprintf(stderr, "Usage: .fullschema\n");
24212422
rc = 1;
24222423
goto meta_command_exit;
24232424
}
@@ -2432,25 +2433,37 @@
24322433
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
24332434
"WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
24342435
"ORDER BY rowid",
24352436
callback, &data, &zErrMsg
24362437
);
2437
- sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master;'",
2438
- callback, &data, &zErrMsg);
2439
- data.mode = MODE_Insert;
2440
- data.zDestTable = "sqlite_stat1";
2441
- shell_exec(p->db, "SELECT * FROM sqlite_stat1",
2442
- shell_callback, &data,&zErrMsg);
2443
- data.zDestTable = "sqlite_stat3";
2444
- shell_exec(p->db, "SELECT * FROM sqlite_stat3",
2445
- shell_callback, &data,&zErrMsg);
2446
- data.zDestTable = "sqlite_stat4";
2447
- shell_exec(p->db, "SELECT * FROM sqlite_stat4",
2448
- shell_callback, &data, &zErrMsg);
2449
- data.mode = MODE_Semi;
2450
- shell_exec(p->db, "SELECT 'ANALYZE sqlite_master;'",
2451
- shell_callback, &data, &zErrMsg);
2438
+ if( rc==SQLITE_OK ){
2439
+ sqlite3_stmt *pStmt;
2440
+ rc = sqlite3_prepare_v2(p->db,
2441
+ "SELECT rowid FROM sqlite_master"
2442
+ " WHERE name GLOB 'sqlite_stat[134]'",
2443
+ -1, &pStmt, 0);
2444
+ doStats = sqlite3_step(pStmt)==SQLITE_ROW;
2445
+ sqlite3_finalize(pStmt);
2446
+ }
2447
+ if( doStats==0 ){
2448
+ fprintf(p->out, "/* No STAT tables available */\n");
2449
+ }else{
2450
+ fprintf(p->out, "ANALYZE sqlite_master;\n");
2451
+ sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'",
2452
+ callback, &data, &zErrMsg);
2453
+ data.mode = MODE_Insert;
2454
+ data.zDestTable = "sqlite_stat1";
2455
+ shell_exec(p->db, "SELECT * FROM sqlite_stat1",
2456
+ shell_callback, &data,&zErrMsg);
2457
+ data.zDestTable = "sqlite_stat3";
2458
+ shell_exec(p->db, "SELECT * FROM sqlite_stat3",
2459
+ shell_callback, &data,&zErrMsg);
2460
+ data.zDestTable = "sqlite_stat4";
2461
+ shell_exec(p->db, "SELECT * FROM sqlite_stat4",
2462
+ shell_callback, &data, &zErrMsg);
2463
+ fprintf(p->out, "ANALYZE sqlite_master;\n");
2464
+ }
24522465
}else
24532466
24542467
if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){
24552468
if( nArg==2 ){
24562469
p->showHeader = booleanValue(azArg[1]);
24572470
--- src/shell.c
+++ src/shell.c
@@ -2414,10 +2414,11 @@
2414 }else
2415
2416 if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
2417 struct callback_data data;
2418 char *zErrMsg = 0;
 
2419 if( nArg!=1 ){
2420 fprintf(stderr, "Usage: .fullschema\n");
2421 rc = 1;
2422 goto meta_command_exit;
2423 }
@@ -2432,25 +2433,37 @@
2432 " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
2433 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2434 "ORDER BY rowid",
2435 callback, &data, &zErrMsg
2436 );
2437 sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master;'",
2438 callback, &data, &zErrMsg);
2439 data.mode = MODE_Insert;
2440 data.zDestTable = "sqlite_stat1";
2441 shell_exec(p->db, "SELECT * FROM sqlite_stat1",
2442 shell_callback, &data,&zErrMsg);
2443 data.zDestTable = "sqlite_stat3";
2444 shell_exec(p->db, "SELECT * FROM sqlite_stat3",
2445 shell_callback, &data,&zErrMsg);
2446 data.zDestTable = "sqlite_stat4";
2447 shell_exec(p->db, "SELECT * FROM sqlite_stat4",
2448 shell_callback, &data, &zErrMsg);
2449 data.mode = MODE_Semi;
2450 shell_exec(p->db, "SELECT 'ANALYZE sqlite_master;'",
2451 shell_callback, &data, &zErrMsg);
 
 
 
 
 
 
 
 
 
 
 
 
2452 }else
2453
2454 if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){
2455 if( nArg==2 ){
2456 p->showHeader = booleanValue(azArg[1]);
2457
--- src/shell.c
+++ src/shell.c
@@ -2414,10 +2414,11 @@
2414 }else
2415
2416 if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
2417 struct callback_data data;
2418 char *zErrMsg = 0;
2419 int doStats = 0;
2420 if( nArg!=1 ){
2421 fprintf(stderr, "Usage: .fullschema\n");
2422 rc = 1;
2423 goto meta_command_exit;
2424 }
@@ -2432,25 +2433,37 @@
2433 " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
2434 "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
2435 "ORDER BY rowid",
2436 callback, &data, &zErrMsg
2437 );
2438 if( rc==SQLITE_OK ){
2439 sqlite3_stmt *pStmt;
2440 rc = sqlite3_prepare_v2(p->db,
2441 "SELECT rowid FROM sqlite_master"
2442 " WHERE name GLOB 'sqlite_stat[134]'",
2443 -1, &pStmt, 0);
2444 doStats = sqlite3_step(pStmt)==SQLITE_ROW;
2445 sqlite3_finalize(pStmt);
2446 }
2447 if( doStats==0 ){
2448 fprintf(p->out, "/* No STAT tables available */\n");
2449 }else{
2450 fprintf(p->out, "ANALYZE sqlite_master;\n");
2451 sqlite3_exec(p->db, "SELECT 'ANALYZE sqlite_master'",
2452 callback, &data, &zErrMsg);
2453 data.mode = MODE_Insert;
2454 data.zDestTable = "sqlite_stat1";
2455 shell_exec(p->db, "SELECT * FROM sqlite_stat1",
2456 shell_callback, &data,&zErrMsg);
2457 data.zDestTable = "sqlite_stat3";
2458 shell_exec(p->db, "SELECT * FROM sqlite_stat3",
2459 shell_callback, &data,&zErrMsg);
2460 data.zDestTable = "sqlite_stat4";
2461 shell_exec(p->db, "SELECT * FROM sqlite_stat4",
2462 shell_callback, &data, &zErrMsg);
2463 fprintf(p->out, "ANALYZE sqlite_master;\n");
2464 }
2465 }else
2466
2467 if( c=='h' && strncmp(azArg[0], "headers", n)==0 ){
2468 if( nArg==2 ){
2469 p->showHeader = booleanValue(azArg[1]);
2470

Keyboard Shortcuts

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