aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/rtree/rtree.c21
-rw-r--r--manifest20
-rw-r--r--manifest.uuid2
-rw-r--r--test/json/README.md57
-rwxr-xr-xtest/json/json-speed-check.sh21
-rw-r--r--test/json/jsonb-q1.txt (renamed from test/json/json-q1-b.txt)0
6 files changed, 69 insertions, 52 deletions
diff --git a/ext/rtree/rtree.c b/ext/rtree/rtree.c
index 1705abd51..013bb0b5b 100644
--- a/ext/rtree/rtree.c
+++ b/ext/rtree/rtree.c
@@ -717,7 +717,7 @@ static int nodeAcquire(
** increase its reference count and return it.
*/
if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){
- if( pParent && pParent!=pNode->pParent ){
+ if( pParent && ALWAYS(pParent!=pNode->pParent) ){
RTREE_IS_CORRUPT(pRtree);
return SQLITE_CORRUPT_VTAB;
}
@@ -3452,7 +3452,7 @@ static int rtreeSqlInit(
}
sqlite3_free(zSql);
}
- if( pRtree->nAux ){
+ if( pRtree->nAux && rc!=SQLITE_NOMEM ){
pRtree->zReadAuxSql = sqlite3_mprintf(
"SELECT * FROM \"%w\".\"%w_rowid\" WHERE rowid=?1",
zDb, zPrefix);
@@ -4141,15 +4141,13 @@ static int rtreeCheckTable(
check.zTab = zTab;
/* Find the number of auxiliary columns */
- if( check.rc==SQLITE_OK ){
- pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab);
- if( pStmt ){
- nAux = sqlite3_column_count(pStmt) - 2;
- sqlite3_finalize(pStmt);
- }else
- if( check.rc!=SQLITE_NOMEM ){
- check.rc = SQLITE_OK;
- }
+ pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab);
+ if( pStmt ){
+ nAux = sqlite3_column_count(pStmt) - 2;
+ sqlite3_finalize(pStmt);
+ }else
+ if( check.rc!=SQLITE_NOMEM ){
+ check.rc = SQLITE_OK;
}
/* Find number of dimensions in the rtree table. */
@@ -4204,6 +4202,7 @@ static int rtreeIntegrity(
if( rc==SQLITE_OK && *pzErr ){
*pzErr = sqlite3_mprintf("In RTree %s.%s:\n%z",
pRtree->zDb, pRtree->zName, *pzErr);
+ if( (*pzErr)==0 ) rc = SQLITE_NOMEM;
}
return rc;
}
diff --git a/manifest b/manifest
index 3807576f5..f6b997e25 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
C Ensure\sthat\sSQLITE_PROTOCOL\sis\snot\sreturned\stoo\searly\swhen\sa\sSQLITE_ENABLE_SETLK_TIMEOUT\sbuild\sfails\sto\sopen\sa\stransaction\son\sa\swal\smode\sdatabase\sin\scases\swhere\sblocking\slocks\sare\snot\sbeing\sused.
-D 2024-01-06T19:16:54.624
+D 2024-01-08T13:38:15.023
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -495,7 +495,7 @@ F ext/repair/test/checkindex01.test b530f141413b587c9eb78ff734de6bb79bc3515c3350
F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c
F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
F ext/rtree/geopoly.c 0dd4775e896cee6067979d67aff7c998e75c2c9d9cd8d62a1a790c09cde7adca
-F ext/rtree/rtree.c 2e1452a9338fe4db057fa677277bed86b65c667ed48b9b59144adae99f85a7cb
+F ext/rtree/rtree.c d0134bb75bc92b18a1dc011ec10419642f055c67af8ff44fc4a07c5fa9f189cb
F ext/rtree/rtree.h 4a690463901cb5e6127cf05eb8e642f127012fd5003830dbc974eca5802d9412
F ext/rtree/rtree1.test 2b5b8c719c6a4abe377f57766f428a49af36a93061cb146cccfdc3b30000c0a4
F ext/rtree/rtree2.test 9d9deddbb16fd0c30c36e6b4fdc3ee3132d765567f0f9432ee71e1303d32603d
@@ -1330,11 +1330,11 @@ F test/journal3.test 7c3cf23ffc77db06601c1fcfc9743de8441cb77db9d1aa931863d94f5ff
F test/jrnlmode.test 9b5bc01dac22223cb60ec2d5f97acf568d73820794386de5634dcadbea9e1946
F test/jrnlmode2.test 8759a1d4657c064637f8b079592651530db738419e1d649c6df7048cd724363d
F test/jrnlmode3.test 556b447a05be0e0963f4311e95ab1632b11c9eaa
-F test/json/README.md 63e3e589e1df8fd3cc1588ba1faaff659214003f8b77a15af5c6452b35e30ee2
+F test/json/README.md de59d5ba0bd2796d797115688630a6405bbf43a2891bad445ac6b9f38b83f236
F test/json/json-generator.tcl dc0dd0f393800c98658fc4c47eaa6af29d4e17527380cd28656fb261bddc8a3f
-F test/json/json-q1-b.txt 1e180fe6491efab307e318b22879e3a736ac9a96539bbde7911a13ee5b33abc7
F test/json/json-q1.txt 65f9d1cdcc4cffa9823fb73ed936aae5658700cd001fde448f68bfb91c807307
-F test/json/json-speed-check.sh b060a9a6c696c0a807d8929400fa11bd7113edc58b0d66b9795f424f8d0db326 x
+F test/json/json-speed-check.sh 912ee03e700a65c827ee0c7b4752c21ec5ef69cf7679d2f482ca817042bead52 x
+F test/json/jsonb-q1.txt 1e180fe6491efab307e318b22879e3a736ac9a96539bbde7911a13ee5b33abc7
F test/json101.test 70587d7d35ef9e2126364ba70f0c951f70827cfbd28649d779ff3df7e8f87547
F test/json102.test 557a46e16df1aa9bdbc4076a71a45814ea0e7503d6621d87d42a8c04cbc2b0ef
F test/json103.test 53df87f83a4e5fa0c0a56eb29ff6c94055c6eb919f33316d62161a8880112dbe
@@ -2156,11 +2156,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 541436004df6458dc2f38bdfa421099f78cab397f5f4795ca5f227531aaa6a3e
-R 93c12d3967c4e74bf7f57f8f4eca1454
-T *branch * enable-setlk-fix
-T *sym-enable-setlk-fix *
-T -sym-trunk *
+P 40f0a29e6dd90fcb969d7c0e49728ba0ee8f31d9e8f502b9a21469620a8ad283 b934a33671d8a0190082ad7e5e68c78fe0c558d102404eafc1de26e4e7d65b92
+R faa7ffdec00af93a5c93f6a8d8d1ed79
+T +closed b934a33671d8a0190082ad7e5e68c78fe0c558d102404eafc1de26e4e7d65b92
U dan
-Z 21f53e2f4fe1872998898c66db1dee4c
+Z f6fdb69739d322cda88ea774ad465280
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 770ea46d7..a6b67bde8 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-b934a33671d8a0190082ad7e5e68c78fe0c558d102404eafc1de26e4e7d65b92 \ No newline at end of file
+a8e9af1356f5fb2ec460f932dfbe89283bb4e3cf9fa677d1acdbe77ffa11dd04 \ No newline at end of file
diff --git a/test/json/README.md b/test/json/README.md
index 55044ffca..4ebbda6d3 100644
--- a/test/json/README.md
+++ b/test/json/README.md
@@ -4,40 +4,63 @@ JSON inputs.
# 1.0 Prerequisites
- 1. Valgrind
+ * Standard SQLite build environment (SQLite source tree, compiler, make, etc.)
- 2. Fossil
+ * Valgrind
- 3. tclsh
+ * Fossil (only the "fossil xdiff" command is used by this procedure)
+
+ * tclsh
# 2.0 Setup
- 1. Run: "`tclsh json-generator.tcl | sqlite3 json100mb.db`" to create
+ * Run: "`tclsh json-generator.tcl | sqlite3 json100mb.db`" to create
the 100 megabyte test database. Do this so that the "json100mb.db"
file lands in the directory from which you will run tests, not in
the test/json subdirectory of the source tree.
- 2. Build the baseline sqlite3.c file with sqlite3.h and shell.c.
- ("`CFLAGS='-Os -g' make -e clean sqlite3.c`")
+ * Make a copy of "json100mb.db" into "jsonb100mb.db" - change the prefix
+ from "json" to "jsonb".
+
+ * Bring up jsonb100mb.db in the sqlite3 command-line shell.
+ Convert all of the content into JSONB using a commands like this:
+
+> UPDATE data1 SET x=jsonb(x);
+> VACUUM;
+
+ * Build the baseline sqlite3.c file with sqlite3.h and shell.c.
+
+> make clean sqlite3.c
- 3. Run "`sh json-speed-check.sh trunk`". This creates the baseline
- profile in "jout-trunk.txt".
+ * Run "`sh json-speed-check.sh trunk`". This creates the baseline
+ profile in "jout-trunk.txt" for the preformance test using text JSON.
+
+ * Run "`sh json-speed-check.sh trunk --jsonb`". This creates the
+ baseline profile in "joutb-trunk.txt" for the performance test
+ for processing JSONB
+
+ * (Optional) Verify that the json100mb.db database really does contain
+ approximately 100MB of JSON content by running:
+
+> SELECT sum(length(x)) FROM data1;
+> SELECT * FROM data1 WHERE NOT json_valid(x);
# 3.0 Testing
- 1. Build the sqlite3.c (with sqlite3.h and shell.c) to be tested.
+ * Build the sqlite3.c (with sqlite3.h and shell.c) to be tested.
- 2. Run "`sh json-speed-check.sh x1`". The profile output will appear
+ * Run "`sh json-speed-check.sh x1`". The profile output will appear
in jout-x1.txt. Substitute any label you want in place of "x1".
- 3. Run the script shown below in the CLI.
+ * Run "`sh json-speed-check.sh x1 --jsonb`". The profile output will appear
+ in joutb-x1.txt. Substitute any label you want in place of "x1".
+
+ * Run the script shown below in the CLI.
Divide 2500 by the real elapse time from this test
to get an estimate for number of MB/s that the JSON parser is
able to process.
-> ~~~~
-.open json100mb.db
-.timer on
-WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<25)
-SELECT sum(json_valid(x)) FROM c, data1;
-~~~~
+> .open json100mb.db
+> .timer on
+> WITH RECURSIVE c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<25)
+> SELECT sum(json_valid(x)) FROM c, data1;
diff --git a/test/json/json-speed-check.sh b/test/json/json-speed-check.sh
index c57bfecd7..682a7aeed 100755
--- a/test/json/json-speed-check.sh
+++ b/test/json/json-speed-check.sh
@@ -35,6 +35,7 @@ LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_PROGRESS_CALLBACK"
LEAN_OPTS="$LEAN_OPTS -DSQLITE_OMIT_SHARED_CACHE"
LEAN_OPTS="$LEAN_OPTS -DSQLITE_USE_ALLOCA"
BASELINE="trunk"
+TYPE="json"
doExplain=0
doCachegrind=1
doVdbeProfile=0
@@ -57,6 +58,7 @@ while test "$1" != ""; do
;;
--jsonb)
doJsonB=1
+ TYPE="jsonb"
;;
-*)
CC_OPTS="$CC_OPTS $1"
@@ -73,18 +75,13 @@ rm -f cachegrind.out.* jsonshell
$CC -g -Os -Wall -I. $CC_OPTS ./shell.c ./sqlite3.c -o jsonshell -ldl -lpthread
ls -l jsonshell | tee -a summary-$NAME.txt
home=`echo $0 | sed -e 's,/[^/]*$,,'`
-if test $doJsonB -eq 1; then
- echo ./jsonshell json100mb_b.db "<$home/json-q1-b.txt"
- valgrind --tool=cachegrind ./jsonshell json100mb_b.db <$home/json-q1-b.txt \
+DB=$TYPE''100mb.db
+echo ./jsonshell $DB "<$home/$TYPE-q1.txt"
+valgrind --tool=cachegrind ./jsonshell json100mb_b.db <$home/$TYPE-q1.txt \
2>&1 | tee -a summary-$NAME.txt
-else
- echo ./jsonshell json100mb.db "<$home/json-q1.txt"
- valgrind --tool=cachegrind ./jsonshell json100mb.db <$home/json-q1.txt \
- 2>&1 | tee -a summary-$NAME.txt
-fi
-cg_anno.tcl cachegrind.out.* >jout-$NAME.txt
-echo '*****************************************************' >>jout-$NAME.txt
-sed 's/^[0-9=-]\{9\}/==00000==/' summary-$NAME.txt >>jout-$NAME.txt
+cg_anno.tcl cachegrind.out.* >$TYPE-$NAME.txt
+echo '*****************************************************' >>$TYPE-$NAME.txt
+sed 's/^[0-9=-]\{9\}/==00000==/' summary-$NAME.txt >>$TYPE-$NAME.txt
if test "$NAME" != "$BASELINE" -a $doDiff -ne 0; then
- fossil xdiff --tk -c 20 jout-$BASELINE.txt jout-$NAME.txt
+ fossil xdiff --tk -c 20 $TYPE-$BASELINE.txt $TYPE-$NAME.txt
fi
diff --git a/test/json/json-q1-b.txt b/test/json/jsonb-q1.txt
index e78c63670..e78c63670 100644
--- a/test/json/json-q1-b.txt
+++ b/test/json/jsonb-q1.txt