]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhancements to the xBestIndex output from the ext/misc/vtablog.c
authordrh <>
Thu, 3 Jul 2025 14:10:03 +0000 (14:10 +0000)
committerdrh <>
Thu, 3 Jul 2025 14:10:03 +0000 (14:10 +0000)
extension.

FossilOrigin-Name: 8b31acc0b18f38eb4af6efebd1ea25cd65a146651101579aee20afd9ec6dc2de

ext/misc/vtablog.c
manifest
manifest.uuid

index e8f084e1b27fae4568693330afac66ff8daa210e..8e4631595dbbf8fe7854f4fb4868dbfb0d65dc61 100644 (file)
@@ -435,6 +435,39 @@ static int vtablogFilter(
   return SQLITE_OK;
 }
 
+/*
+** Return an sqlite3_index_info operator name in static space.
+** The name is possibly overwritten on subsequent calls.
+*/
+static char *vtablogOpName(unsigned char op){
+  static char zUnknown[30];
+  char *zOut;
+  switch( op ){
+    case SQLITE_INDEX_CONSTRAINT_EQ:        zOut = "EQ";        break;
+    case SQLITE_INDEX_CONSTRAINT_GT:        zOut = "GT";        break;
+    case SQLITE_INDEX_CONSTRAINT_LE:        zOut = "LE";        break;
+    case SQLITE_INDEX_CONSTRAINT_LT:        zOut = "LT";        break;
+    case SQLITE_INDEX_CONSTRAINT_GE:        zOut = "GE";        break;
+    case SQLITE_INDEX_CONSTRAINT_MATCH:     zOut = "MATCH";     break;
+    case SQLITE_INDEX_CONSTRAINT_LIKE:      zOut = "LIKE";      break;
+    case SQLITE_INDEX_CONSTRAINT_GLOB:      zOut = "GLOB";      break;
+    case SQLITE_INDEX_CONSTRAINT_REGEXP:    zOut = "REGEXP";    break;
+    case SQLITE_INDEX_CONSTRAINT_NE:        zOut = "NE";        break;
+    case SQLITE_INDEX_CONSTRAINT_ISNOT:     zOut = "ISNOT";     break;
+    case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: zOut = "ISNOTNULL"; break;
+    case SQLITE_INDEX_CONSTRAINT_ISNULL:    zOut = "ISNULL";    break;
+    case SQLITE_INDEX_CONSTRAINT_IS:        zOut = "IS";        break;
+    case SQLITE_INDEX_CONSTRAINT_LIMIT:     zOut = "LIMIT";     break;
+    case SQLITE_INDEX_CONSTRAINT_OFFSET:    zOut = "OFFSET";    break;
+    case SQLITE_INDEX_CONSTRAINT_FUNCTION:  zOut = "FUNCTION";  break;
+    default:
+      sqlite3_snprintf(sizeof(zUnknown),zUnknown,"%d",op);
+      zOut = zUnknown;
+      break;
+  }
+  return zOut;
+}
+
 /*
 ** SQLite will invoke this method one or more times while planning a query
 ** that uses the vtablog virtual table.  This routine needs to create
@@ -451,14 +484,33 @@ static int vtablogBestIndex(
   printf("  colUsed: 0x%016llx\n", p->colUsed);
   printf("  nConstraint: %d\n", p->nConstraint);
   for(i=0; i<p->nConstraint; i++){
+    sqlite3_value *pVal = 0;
+    int rc;
+    char zRhs[50];
+    rc = sqlite3_vtab_rhs_value(p, i, &pVal);
+    if( rc==SQLITE_OK ){
+      switch( sqlite3_value_type(pVal) ){
+        case SQLITE_NULL:     sqlite3_snprintf(50,zRhs,"NULL");  break;
+        case SQLITE_INTEGER:  sqlite3_snprintf(50,zRhs,"%lld",
+                                          sqlite3_value_int64(pVal)); break;
+        case SQLITE_FLOAT:    sqlite3_snprintf(50,zRhs,"%g",
+                                          sqlite3_value_double(pVal)); break;
+        case SQLITE_TEXT:     sqlite3_snprintf(50,zRhs,"TEXT");  break;
+        default:              sqlite3_snprintf(50,zRhs,"BLOB");  break;
+      }
+    }else{
+      sqlite3_snprintf(50,zRhs,"N/A");
+    }
     printf(
-       "  constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n",
+      "  constraint[%d]: col=%d termid=%d op=%s usabled=%d coll=%s rhs=%s\n",
        i,
        p->aConstraint[i].iColumn,
        p->aConstraint[i].iTermOffset,
-       p->aConstraint[i].op,
+       vtablogOpName(p->aConstraint[i].op),
        p->aConstraint[i].usable,
-       sqlite3_vtab_collation(p,i));
+       sqlite3_vtab_collation(p,i),
+       zRhs
+    );
   }
   printf("  nOrderBy: %d\n", p->nOrderBy);
   for(i=0; i<p->nOrderBy; i++){
index bf56baa1560040895b18de371d43250e8dcdfca3..c3d677cc50c4fdadab8b2185f68c770d7e94d963 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\suninitialized\svariable\sadded\syesterday\sby\s[d27d34fb746280e7].\nThis\sproblem\swas\sdiscovered\sovernight\sby\s\n[https://github.com/google/oss-fuzz|OSSFuzz].
-D 2025-07-03T11:52:17.583
+C Enhancements\sto\sthe\sxBestIndex\soutput\sfrom\sthe\sext/misc/vtablog.c\nextension.
+D 2025-07-03T14:10:03.834
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -456,7 +456,7 @@ F ext/misc/uuid.c 5bb2264c1b64d163efa46509544fd7500cb8769cb7c16dd52052da8d961505
 F ext/misc/vfslog.c 3932ab932eeb2601dbc4447cb14d445aaa9fbe43b863ef5f014401c3420afd20
 F ext/misc/vfsstat.c 0b23c0a69a2b63dc0ef0af44f9c1fc977300c480a1f7a9814500369d8211f56e
 F ext/misc/vfstrace.c 0e4b8b17ac0675ea90f6d168d8214687e06ca3efbc0060aad4814994d82b41fb
-F ext/misc/vtablog.c a197addbbd1e267a5476274b74953e1b6f050e28516f0a5fe7d6382753165ee6
+F ext/misc/vtablog.c ee27ec6595751db0ce4b8c2a2b72f6eca4d018d9d33e139dbd477e8d173f7b0e
 F ext/misc/vtshim.c e5bce24ab8c532f4fdc600148718fe1802cb6ed57417f1c1032d8961f72b0e8f
 F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f65b4fc0668
 F ext/misc/windirent.h 02211ce51f3034c675f2dbf4d228194d51b3ee05734678bad5106fff6292e60c
@@ -2208,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 2d2b61cba44a756a3a41ef5c95bbb0c0b7111f4b679c578fec9bd0b214cca367
-R 1edf105752f8a1297dddf11638994a45
+P 6db4703f1178fc808f3a75c355fb6638fb12c88f6e1ce7f579e200ced8089114
+R 50c4d2dc6029c61dab20b65ad02b720b
 U drh
-Z 4ca8b7187871a2cc09690de9bf418693
+Z 46c80e4b7ddf6a82d5b12bfb66b8a7fe
 # Remove this line to create a well-formed Fossil manifest.
index 3cd0cbc0ecc5b36707d8a46ef902346a5b5fbe5d..24b6ee8c9a8a1a1ead3d1831e055cb0ad164def6 100644 (file)
@@ -1 +1 @@
-6db4703f1178fc808f3a75c355fb6638fb12c88f6e1ce7f579e200ced8089114
+8b31acc0b18f38eb4af6efebd1ea25cd65a146651101579aee20afd9ec6dc2de