]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: use json_extract instead of awkward json_tree
authorPatrick Donnelly <pdonnell@ibm.com>
Sun, 8 Feb 2026 00:45:26 +0000 (19:45 -0500)
committerPatrick Donnelly <pdonnell@ibm.com>
Sun, 8 Feb 2026 19:31:01 +0000 (14:31 -0500)
Ideally this should be port better across sqlite3 versions. The sqlite3
on rocky10 failed because it started requiring components of the keys
to be quoted:

    sqlite> select * from p as a, p as b where a.i=1 and b.i = 2 and a.fullkey = '$."libcephsqlite_vfs"."opf_sync".avgcount' and b.fullkey = '$."libcephsqlite_vfs"."opf_sync".avgcount';
    i  key       value  type     atom  id   parent  fullkey                                    path                              i  key       value  type     atom  id   parent  fullkey
    -  --------  -----  -------  ----  ---  ------  -----------------------------------------  --------------------------------  -  --------  -----  -------  ----  ---  ------  ------------------
    1  avgcount  4      integer  4     581  570     $."libcephsqlite_vfs"."opf_sync".avgcount  $."libcephsqlite_vfs"."opf_sync"  2  avgcount  5      integer  5     581  570     $."libcephsqlite_v

Fixes: https://tracker.ceph.com/issues/74755
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
src/test/libcephsqlite/main.cc

index 7dbfd73fa675d95c2a3e0274326836a416b942e1..9e4bbeeec6ffb7a1c9f36e1be4efb1c475888e25 100644 (file)
@@ -94,9 +94,6 @@ protected:
       "PRAGMA cache_size = 32768;"
       "PRAGMA temp_store = memory;"
       "CREATE TEMPORARY TABLE perf (i INTEGER PRIMARY KEY, v TEXT);"
-      "CREATE TEMPORARY VIEW p AS"
-      "    SELECT perf.i, J.*"
-      "    FROM perf, json_tree(perf.v) AS J;"
       "INSERT INTO perf (v)"
       "    VALUES (ceph_perf());"
       ;
@@ -488,12 +485,10 @@ TEST_F(CephSQLiteTest, WALTransactionSync) {
     "END TRANSACTION;"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_vfs.opf_sync.avgcount' AND"
-    "          b.fullkey = '$.libcephsqlite_vfs.opf_sync.avgcount';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_vfs.opf_sync.avgcount') - "
+    "       json_extract(b.v, '$.libcephsqlite_vfs.opf_sync.avgcount') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
   int rc;
@@ -559,12 +554,10 @@ TEST_F(CephSQLiteTest, PersistTransactionSync) {
     "END TRANSACTION;"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_vfs.opf_sync.avgcount' AND"
-    "          b.fullkey = '$.libcephsqlite_vfs.opf_sync.avgcount';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_vfs.opf_sync.avgcount') - "
+    "       json_extract(b.v, '$.libcephsqlite_vfs.opf_sync.avgcount') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
   int rc;
@@ -615,18 +608,18 @@ TEST_F(CephSQLiteTest, InsertExclusiveLock) {
     "INSERT INTO foo (a) VALUES (RANDOM());"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom, b.atom, a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_vfs.opf_lock.avgcount' AND"
-    "          b.fullkey = '$.libcephsqlite_vfs.opf_lock.avgcount';"
-    "SELECT a.atom, b.atom, a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_striper.lock' AND"
-    "          b.fullkey = '$.libcephsqlite_striper.lock';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_vfs.opf_lock.avgcount'), "
+    "       json_extract(b.v, '$.libcephsqlite_vfs.opf_lock.avgcount'), "
+    "       json_extract(a.v, '$.libcephsqlite_vfs.opf_lock.avgcount') - "
+    "       json_extract(b.v, '$.libcephsqlite_vfs.opf_lock.avgcount') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
+    "SELECT json_extract(a.v, '$.libcephsqlite_striper.lock'), "
+    "       json_extract(b.v, '$.libcephsqlite_striper.lock'), "
+    "       json_extract(a.v, '$.libcephsqlite_striper.lock') - "
+    "       json_extract(b.v, '$.libcephsqlite_striper.lock') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
   int rc;
@@ -685,12 +678,12 @@ TEST_F(CephSQLiteTest, TransactionSizeUpdate) {
     "END TRANSACTION;"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom, b.atom, a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_striper.update_size' AND"
-    "          b.fullkey = '$.libcephsqlite_striper.update_size';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_striper.update_size'), "
+    "       json_extract(b.v, '$.libcephsqlite_striper.update_size'), "
+    "       json_extract(a.v, '$.libcephsqlite_striper.update_size') - "
+    "       json_extract(b.v, '$.libcephsqlite_striper.update_size') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
   int rc;
@@ -752,12 +745,12 @@ TEST_F(CephSQLiteTest, AllocatedGrowth) {
     "  LIMIT 1024;"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom, b.atom, a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_striper.update_allocated' AND"
-    "          b.fullkey = '$.libcephsqlite_striper.update_allocated';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_striper.update_allocated'), "
+    "       json_extract(b.v, '$.libcephsqlite_striper.update_allocated'), "
+    "       json_extract(a.v, '$.libcephsqlite_striper.update_allocated') - "
+    "       json_extract(b.v, '$.libcephsqlite_striper.update_allocated') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
   int rc;
@@ -854,18 +847,14 @@ TEST_F(CephSQLiteTest, DropMassive) {
     "VACUUM;"
     "INSERT INTO perf (v)"
     "    VALUES (ceph_perf());"
-    "SELECT a.atom, b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_striper.shrink' AND"
-    "          b.fullkey = '$.libcephsqlite_striper.shrink';"
-    "SELECT a.atom-b.atom"
-    "    FROM p AS a, p AS b"
-    "    WHERE a.i = ? AND"
-    "          b.i = ? AND"
-    "          a.fullkey = '$.libcephsqlite_striper.shrink_bytes' AND"
-    "          b.fullkey = '$.libcephsqlite_striper.shrink_bytes';"
+    "SELECT json_extract(a.v, '$.libcephsqlite_striper.shrink'), "
+    "       json_extract(b.v, '$.libcephsqlite_striper.shrink') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
+    "SELECT json_extract(a.v, '$.libcephsqlite_striper.shrink_bytes') - "
+    "       json_extract(b.v, '$.libcephsqlite_striper.shrink_bytes') "
+    "    FROM perf AS a, perf AS b"
+    "    WHERE a.i = ? AND b.i = ?;"
     ;
 
     int rc;