** Render a double r into pOut for use in scan-stats reporting.
**
** If r is greater than or equal to 1000, then render using qrfApproxInt64.
-** Otherwise render using %.1f.
+** Otherwise render using %.1g.
*/
static void qrfApproxDouble(sqlite3_str *pOut, double r){
if( r<0.0 ){
if( r>=1000.0 ){
qrfApproxInt64(pOut, (i64)r);
}else{
- sqlite3_str_appendf(pOut, "%.1f", r);
+ sqlite3_str_appendf(pOut, "%.1g", r);
}
}
int i = 0;
i64 nTotal = 0;
int nWidth = 0;
+ int prevPid = -1; /* Previous iPid */
+ double rEstCum = 1.0; /* Cumulative row estimate */
sqlite3_str *pLine = sqlite3_str_new(p->db);
sqlite3_str *pStats = sqlite3_str_new(p->db);
qrfEqpReset(p);
if( sqlite3_stmt_scanstatus_v2(pS,i,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&zo) ){
break;
}
+ sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_PARENTID,f,(void*)&iPid);
+ if( iPid!=prevPid ){
+ prevPid = iPid;
+ rEstCum = 1.0;
+ }
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_EST,f,(void*)&rEst);
+ rEstCum *= rEst;
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_NLOOP,f,(void*)&nLoop);
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_NVISIT,f,(void*)&nRow);
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_NCYCLE,f,(void*)&nCycle);
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_SELECTID,f,(void*)&iId);
- sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_PARENTID,f,(void*)&iPid);
sqlite3_stmt_scanstatus_v2(pS,i, SQLITE_SCANSTAT_NAME,f,(void*)&zName);
if( nCycle>=0 || nLoop>=0 || nRow>=0 ){
const char *zSp = "";
- double rpl;
sqlite3_str_reset(pStats);
if( nCycle>=0 && nTotal>0 ){
sqlite3_str_appendf(pStats, "cycles=");
sqlite3_str_appendf(pStats, "%sloops=", zSp);
qrfApproxInt64(pStats, nLoop);
zSp = " ";
+ if( p->spec.eStyle==QRF_STYLE_StatsEst ){
+ sqlite3_str_appendf(pStats, " [est ");
+ qrfApproxDouble(pStats, rEstCum/rEst);
+ sqlite3_str_appendf(pStats, "]");
+ }
}
if( nRow>=0 ){
sqlite3_str_appendf(pStats, "%srows=", zSp);
qrfApproxInt64(pStats, nRow);
zSp = " ";
+ if( p->spec.eStyle==QRF_STYLE_StatsEst ){
+ sqlite3_str_appendf(pStats, " [est ");
+ qrfApproxDouble(pStats, rEstCum);
+ sqlite3_str_appendf(pStats, "]");
+ }
}
-
- if( p->spec.eStyle==QRF_STYLE_StatsEst ){
- rpl = nLoop ? (double)nRow / (double)nLoop : 0.0;
- sqlite3_str_appendf(pStats, "%srpl=", zSp);
- qrfApproxDouble(pStats, rpl);
- sqlite3_str_appendf(pStats, " est=");
- qrfApproxDouble(pStats, rEst);
- }
-
sqlite3_str_appendf(pLine,
"% *s (%s)", -1*(nWidth-qrfStatsHeight(pS,i)*3), zo,
sqlite3_str_value(pStats)
-C Render\sscan-status\svalues\swith\s3\sor\s4\ssignificant\sdigits\sonly,\sfor\nimproved\sreadability.
-D 2026-02-04T13:35:32.765
+C Improved\sdisplay\sof\sscan-status\sestimates.
+D 2026-02-04T17:52:50.152
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
F ext/qrf/README.md e6e0ce2700acf6fd06312b42726a8f08ca240f30e1b122bff87c71c602046352
F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
-F ext/qrf/qrf.c 1b9df1070489d0e82abbd5eec844bf20ef65787cc44f69b02649e47dc03bde7d
+F ext/qrf/qrf.c fd014c041a2fd54c900800c69a4ef1a7611201a15a46b60b967f07abb2f7d21d
F ext/qrf/qrf.h 2ac14b0aaacf44636d8c81051bfeab4afae50a98fbb2e10ff5aed0c28a87b2b2
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 611cef0ec281ae06eac97df8048d617fd445c348c2fc1673202b9cc081a365db
-R 948a2925b6f14b356c852d71e9b3a7e0
+P d9102ff0c43a496e782b0a3ec86ba7cd45f8118a07f15a4f3d58b399466d6cf2
+R 71c5e12c89ae4ea6f7261fec39f95a65
U drh
-Z acac1c8caf17f6287150425d80569e65
+Z 78c49827531e9bf57fc9db5a8c807286
# Remove this line to create a well-formed Fossil manifest.