influence creation of the zonefile file.
Currently the only <parameters> 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
#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;
int maxAutoFrameSize;
};
+/*
+** A structure to store a deserialized zonefile header in.
+*/
typedef struct ZonefileHeader ZonefileHeader;
struct ZonefileHeader {
u32 magicNumber;
u8 extendedHeaderSize;
};
+/*
+** Buffer structure used by the zonefile_write() implementation.
+*/
typedef struct ZonefileBuffer ZonefileBuffer;
struct ZonefileBuffer {
u8 *a;
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);
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
-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
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
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
-100137c7f68b2d9a329d6d43e6c0a81b6ac843678b670ab6cce5f510bc58b7a8
\ No newline at end of file
+d65e5855743534cb8db0d77d107579eae6daafc25c2f6035efa12c3ff0abbe7a
\ No newline at end of file