]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix handling of maxAutoFrameSize parameter.
authordan <dan@noemail.net>
Tue, 13 Feb 2018 20:08:47 +0000 (20:08 +0000)
committerdan <dan@noemail.net>
Tue, 13 Feb 2018 20:08:47 +0000 (20:08 +0000)
FossilOrigin-Name: d65e5855743534cb8db0d77d107579eae6daafc25c2f6035efa12c3ff0abbe7a

ext/zonefile/README.md
ext/zonefile/zonefile.c
ext/zonefile/zonefile1.test
manifest
manifest.uuid

index ac79d3e1de227556dd9792d120f74a14387b3ebb..1f485a5e640b8f81f1b4e8cecc740dbb2dd73d95 100644 (file)
@@ -31,8 +31,9 @@ is the name of the database table to read and optional argument
 influence creation of the zonefile file. 
 
 Currently the only &lt;parameters&gt; attribute supported is 
-<i>maxAutoFrameSize</i>, which sets the maximum frame size in bytes for
-automatically generated zonefile frames. 
+<i>maxAutoFrameSize</i> (default value 65536), which sets the maximum 
+uncompressed frame size in bytes for automatically generated zonefile 
+frames.
 
 For example, to create a zonefile named "test.zonefile" based on the
 contents of database table "test_input" and with a maximum automatic
index c543ab95d39479623799859fcc82b7994f143371..22a8862823e235784eb94a184e24a783678252d2 100644 (file)
@@ -67,6 +67,10 @@ typedef unsigned long u32;
 #include <string.h>
 #include <assert.h>
 
+/*
+** A structure to store the parameters for a single zonefile_write()
+** invocation. 
+*/
 typedef struct ZonefileWrite ZonefileWrite;
 struct ZonefileWrite {
   int compressionTypeIndexData;
@@ -75,6 +79,9 @@ struct ZonefileWrite {
   int maxAutoFrameSize;
 };
 
+/*
+** A structure to store a deserialized zonefile header in.
+*/
 typedef struct ZonefileHeader ZonefileHeader;
 struct ZonefileHeader {
   u32 magicNumber;
@@ -90,6 +97,9 @@ struct ZonefileHeader {
   u8 extendedHeaderSize;
 };
 
+/*
+** Buffer structure used by the zonefile_write() implementation.
+*/
 typedef struct ZonefileBuffer ZonefileBuffer;
 struct ZonefileBuffer {
   u8 *a;
@@ -218,6 +228,9 @@ static int zonefileGetParams(
   p->maxAutoFrameSize = ZONEFILE_DEFAULT_MAXAUTOFRAMESIZE;
 
   rc = zonefilePrepare(db, &pStmt, &zErr,"SELECT key, value FROM json_each(?)");
+  if( rc==SQLITE_OK ){
+    sqlite3_bind_text(pStmt, 1, zJson, -1, SQLITE_STATIC);
+  }
   while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
     const char *zKey = (const char*)sqlite3_column_text(pStmt, 0);
     int iVal = sqlite3_column_int(pStmt, 1);
index 067a1f20880ccab762192242c192056d793c4fab..97fdab58585ceae1b9e01ffc50f25cecb33cb76b 100644 (file)
@@ -64,5 +64,89 @@ do_execsql_test 1.6 { SELECT count(*) FROM z1_shadow_idx } 0
 
 do_execsql_test 1.7 { DROP TABLE z1 }
 
+#-------------------------------------------------------------------------
+
+reset_db
+load_static_extension db zonefile
+
+do_execsql_test 2.0 {
+  CREATE TABLE zz(
+    k INTEGER PRIMARY KEY, 
+    frame INTEGER DEFAULT -1, 
+    idx INTEGER DEFAULT -1, 
+    v BLOB
+  );
+  CREATE TABLE rt(k INTEGER PRIMARY KEY, v BLOB);
+  CREATE VIRTUAL TABLE zone USING zonefile;
+}
+
+set nMinByte   0
+set nMaxByte 444
+foreach {zonefile lKey} {
+  test1.zonefile {195 1238 298 405 297}
+  test2.zonefile {124 1624 82 1929}
+  test3.zonefile {932 683 1751 410 41}
+  test4.zonefile {427 1491}
+  test5.zonefile {1004 473 801 394 1672 816 1577}
+  test6.zonefile {1374 1454 1005}
+  test7.zonefile {450 241 319 133}
+  test8.zonefile {1414 900 1406 1917 127 673}
+  test9.zonefile {1192 226 988 1292 718 1345 1675}
+  test10.zonefile {314}
+  test11.zonefile {1177 1597 60 532 291 1164 812}
+  test12.zonefile {1168 1290 1585 939 1916}
+  test13.zonefile {644 1784 1476 1283 433 506}
+  test14.zonefile {1141 1547 1506 364}
+  test15.zonefile {1756 1885 844 1880 1896 354}
+  test16.zonefile {1383 1928 1371}
+  test17.zonefile {93}
+  test18.zonefile {1067}
+  test19.zonefile {642}
+  test20.zonefile {1380 1857}
+  test21.zonefile {288 293 1968 1207 1739 231 300}
+  test22.zonefile {651 1007 607 830 299 1431}
+  test23.zonefile {81 1651 543 1949 256 119 1088}
+  test24.zonefile {1278 2024 682 1115 194 636 1804}
+  test25.zonefile {514 1155 171 2015 791}
+  test26.zonefile {1615 1228 147 1464}
+  test27.zonefile {55 1130 781 678 78}
+  test28.zonefile {1981 1401 1178}
+  test29.zonefile {1754 864 183 1953 1901}
+  test30.zonefile {1461 817}
+  test31.zonefile {1720 1722 686 1833}
+} {
+  forcedelete $zonefile
+  execsql { DELETE FROM zz; }
+  foreach k $lKey {
+    execsql { INSERT INTO zz(k, v) VALUES($k, randomblob($k)) }
+  }
+  execsql { INSERT INTO rt SELECT k, v FROM zz }
+  breakpoint
+  execsql { 
+    SELECT zonefile_write($zonefile, 'zz', '{"maxAutoFrameSize":2000}');
+    INSERT INTO zone_files(filename) VALUES($zonefile);
+  }
+}
+
+do_execsql_test 2.1 {
+  SELECT k FROM zone JOIN rt USING (k) WHERE zone.v!=rt.v
+}
+do_execsql_test 2.2 {
+  SELECT count(*) FROM zone JOIN rt USING (k);
+} {135}
+do_execsql_test 2.3 {
+  SELECT filename, 
+         json_extract(header, '$.numKeys'),
+         json_extract(header, '$.numFrames')
+  FROM zone_files 
+  WHERE filename IN ('test19.zonefile', 'test20.zonefile', 'test21.zonefile')
+  ORDER BY 1
+} {
+  test19.zonefile 1 1
+  test20.zonefile 2 2
+  test21.zonefile 7 4
+}
+
+
 finish_test
 
index 22ad5f1504ef0cdec1f5d89b3d33dd161cb1e31d..b7cd2bfc468291d3bbefb07e63265e613cd170d0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\sext/zonefile/README.md\sto\sdescribe\sthe\scurrently\savailable\nfunctionality.
-D 2018-02-13T19:01:08.333
+C Fix\shandling\sof\smaxAutoFrameSize\sparameter.
+D 2018-02-13T20:08:47.555
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
@@ -408,9 +408,9 @@ F ext/session/test_session.c eb0bd6c1ea791c1d66ee4ef94c16500dad936386
 F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
 F ext/userauth/userauth.c 3410be31283abba70255d71fd24734e017a4497f
-F ext/zonefile/README.md fd8039cb0b421059ef90d014b4d71a1e376cb7d1210e80a896d76908708669e4
-F ext/zonefile/zonefile.c 212c9a8778759c292685a0915ff5bcbdb9d279c2fe791021572617971c896c5b
-F ext/zonefile/zonefile1.test 8904658bd8332dc0d0c77c0c74c9c83dce4123a442bb971d5baf00170f6d0afe
+F ext/zonefile/README.md c42739c8276080be1c6d90ec47d98610af40336211dd382f87d1a8d2db7a3cdc
+F ext/zonefile/zonefile.c 0e2ace4a2590b96ea1ed6ecff98af7504e6774755961e42bf982d268d5366856
+F ext/zonefile/zonefile1.test 872ec8d549af0f1423601acdfe29390803fab3e14b8d5715f2f4bbd11431f1f5
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
@@ -1708,7 +1708,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8bf5154bc6e31e206931d97c743eadaba4ef938c11e006082d795439dadaeb8f
-R ac88557d5661bd1ac981fca2d5815858
+P 100137c7f68b2d9a329d6d43e6c0a81b6ac843678b670ab6cce5f510bc58b7a8
+R 9583ab6dfe2f7414596de2b26e5de239
 U dan
-Z 857bf6fa80777d961d06ea17c5dbe1b2
+Z 59c419e27cd53a130879134eaf3f69b6
index 994eb4acdd3b5ca7272502b54a160742c3b5b167..549a73d660e3f0c375ca68fa8c583f36e646ae9d 100644 (file)
@@ -1 +1 @@
-100137c7f68b2d9a329d6d43e6c0a81b6ac843678b670ab6cce5f510bc58b7a8
\ No newline at end of file
+d65e5855743534cb8db0d77d107579eae6daafc25c2f6035efa12c3ff0abbe7a
\ No newline at end of file