Fossil SCM
Use the DBSTAT virtual table as a table-valued function instead of creating a TEMP instance of the table, while generating the /repo-tabsize page.
Commit
14f83bc04992c48e225564f4b904e1b1acc00f8b
Parent
24a0667e785c19b…
1 file changed
+4
-7
+4
-7
| --- src/stat.c | ||
| +++ src/stat.c | ||
| @@ -422,19 +422,18 @@ | ||
| 422 | 422 | style_submenu_element("Stat", "Repository Stats", "stat"); |
| 423 | 423 | if( g.perm.Admin ){ |
| 424 | 424 | style_submenu_element("Schema", "Repository Schema", "repo_schema"); |
| 425 | 425 | } |
| 426 | 426 | db_multi_exec( |
| 427 | - "CREATE VIRTUAL TABLE temp.dbx USING dbstat(repository);" | |
| 428 | 427 | "CREATE TEMP TABLE trans(name TEXT PRIMARY KEY,tabname TEXT)WITHOUT ROWID;" |
| 429 | 428 | "INSERT INTO trans(name,tabname)" |
| 430 | 429 | " SELECT name, tbl_name FROM repository.sqlite_master;" |
| 431 | 430 | "CREATE TEMP TABLE piechart(amt REAL, label TEXT);" |
| 432 | 431 | "INSERT INTO piechart(amt,label)" |
| 433 | 432 | " SELECT count(*), " |
| 434 | - " coalesce((SELECT tabname FROM trans WHERE trans.name=dbx.name),name)" | |
| 435 | - " FROM dbx" | |
| 433 | + " coalesce((SELECT tabname FROM trans WHERE trans.name=dbstat.name),name)" | |
| 434 | + " FROM dbstat('repository')" | |
| 436 | 435 | " GROUP BY 2 ORDER BY 2;" |
| 437 | 436 | ); |
| 438 | 437 | nPageFree = db_int(0, "PRAGMA repository.freelist_count"); |
| 439 | 438 | if( nPageFree>0 ){ |
| 440 | 439 | db_multi_exec( |
| @@ -449,20 +448,18 @@ | ||
| 449 | 448 | piechart_render(800,500,PIE_OTHER|PIE_PERCENT); |
| 450 | 449 | @ </svg></center> |
| 451 | 450 | |
| 452 | 451 | if( g.localOpen ){ |
| 453 | 452 | db_multi_exec( |
| 454 | - "DROP TABLE temp.dbx;" | |
| 455 | - "CREATE VIRTUAL TABLE temp.dbx USING dbstat(localdb);" | |
| 456 | 453 | "DELETE FROM trans;" |
| 457 | 454 | "INSERT INTO trans(name,tabname)" |
| 458 | 455 | " SELECT name, tbl_name FROM localdb.sqlite_master;" |
| 459 | 456 | "DELETE FROM piechart;" |
| 460 | 457 | "INSERT INTO piechart(amt,label)" |
| 461 | 458 | " SELECT count(*), " |
| 462 | - " coalesce((SELECT tabname FROM trans WHERE trans.name=dbx.name),name)" | |
| 463 | - " FROM dbx" | |
| 459 | + " coalesce((SELECT tabname FROM trans WHERE trans.name=dbstat.name),name)" | |
| 460 | + " FROM dbstat('localdb')" | |
| 464 | 461 | " GROUP BY 2 ORDER BY 2;" |
| 465 | 462 | ); |
| 466 | 463 | nPageFree = db_int(0, "PRAGMA localdb.freelist_count"); |
| 467 | 464 | if( nPageFree>0 ){ |
| 468 | 465 | db_multi_exec( |
| 469 | 466 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -422,19 +422,18 @@ | |
| 422 | style_submenu_element("Stat", "Repository Stats", "stat"); |
| 423 | if( g.perm.Admin ){ |
| 424 | style_submenu_element("Schema", "Repository Schema", "repo_schema"); |
| 425 | } |
| 426 | db_multi_exec( |
| 427 | "CREATE VIRTUAL TABLE temp.dbx USING dbstat(repository);" |
| 428 | "CREATE TEMP TABLE trans(name TEXT PRIMARY KEY,tabname TEXT)WITHOUT ROWID;" |
| 429 | "INSERT INTO trans(name,tabname)" |
| 430 | " SELECT name, tbl_name FROM repository.sqlite_master;" |
| 431 | "CREATE TEMP TABLE piechart(amt REAL, label TEXT);" |
| 432 | "INSERT INTO piechart(amt,label)" |
| 433 | " SELECT count(*), " |
| 434 | " coalesce((SELECT tabname FROM trans WHERE trans.name=dbx.name),name)" |
| 435 | " FROM dbx" |
| 436 | " GROUP BY 2 ORDER BY 2;" |
| 437 | ); |
| 438 | nPageFree = db_int(0, "PRAGMA repository.freelist_count"); |
| 439 | if( nPageFree>0 ){ |
| 440 | db_multi_exec( |
| @@ -449,20 +448,18 @@ | |
| 449 | piechart_render(800,500,PIE_OTHER|PIE_PERCENT); |
| 450 | @ </svg></center> |
| 451 | |
| 452 | if( g.localOpen ){ |
| 453 | db_multi_exec( |
| 454 | "DROP TABLE temp.dbx;" |
| 455 | "CREATE VIRTUAL TABLE temp.dbx USING dbstat(localdb);" |
| 456 | "DELETE FROM trans;" |
| 457 | "INSERT INTO trans(name,tabname)" |
| 458 | " SELECT name, tbl_name FROM localdb.sqlite_master;" |
| 459 | "DELETE FROM piechart;" |
| 460 | "INSERT INTO piechart(amt,label)" |
| 461 | " SELECT count(*), " |
| 462 | " coalesce((SELECT tabname FROM trans WHERE trans.name=dbx.name),name)" |
| 463 | " FROM dbx" |
| 464 | " GROUP BY 2 ORDER BY 2;" |
| 465 | ); |
| 466 | nPageFree = db_int(0, "PRAGMA localdb.freelist_count"); |
| 467 | if( nPageFree>0 ){ |
| 468 | db_multi_exec( |
| 469 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -422,19 +422,18 @@ | |
| 422 | style_submenu_element("Stat", "Repository Stats", "stat"); |
| 423 | if( g.perm.Admin ){ |
| 424 | style_submenu_element("Schema", "Repository Schema", "repo_schema"); |
| 425 | } |
| 426 | db_multi_exec( |
| 427 | "CREATE TEMP TABLE trans(name TEXT PRIMARY KEY,tabname TEXT)WITHOUT ROWID;" |
| 428 | "INSERT INTO trans(name,tabname)" |
| 429 | " SELECT name, tbl_name FROM repository.sqlite_master;" |
| 430 | "CREATE TEMP TABLE piechart(amt REAL, label TEXT);" |
| 431 | "INSERT INTO piechart(amt,label)" |
| 432 | " SELECT count(*), " |
| 433 | " coalesce((SELECT tabname FROM trans WHERE trans.name=dbstat.name),name)" |
| 434 | " FROM dbstat('repository')" |
| 435 | " GROUP BY 2 ORDER BY 2;" |
| 436 | ); |
| 437 | nPageFree = db_int(0, "PRAGMA repository.freelist_count"); |
| 438 | if( nPageFree>0 ){ |
| 439 | db_multi_exec( |
| @@ -449,20 +448,18 @@ | |
| 448 | piechart_render(800,500,PIE_OTHER|PIE_PERCENT); |
| 449 | @ </svg></center> |
| 450 | |
| 451 | if( g.localOpen ){ |
| 452 | db_multi_exec( |
| 453 | "DELETE FROM trans;" |
| 454 | "INSERT INTO trans(name,tabname)" |
| 455 | " SELECT name, tbl_name FROM localdb.sqlite_master;" |
| 456 | "DELETE FROM piechart;" |
| 457 | "INSERT INTO piechart(amt,label)" |
| 458 | " SELECT count(*), " |
| 459 | " coalesce((SELECT tabname FROM trans WHERE trans.name=dbstat.name),name)" |
| 460 | " FROM dbstat('localdb')" |
| 461 | " GROUP BY 2 ORDER BY 2;" |
| 462 | ); |
| 463 | nPageFree = db_int(0, "PRAGMA localdb.freelist_count"); |
| 464 | if( nPageFree>0 ){ |
| 465 | db_multi_exec( |
| 466 |