]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add support for "brotli" compression to the zonefile module.
authordan <dan@noemail.net>
Sat, 17 Feb 2018 20:22:23 +0000 (20:22 +0000)
committerdan <dan@noemail.net>
Sat, 17 Feb 2018 20:22:23 +0000 (20:22 +0000)
FossilOrigin-Name: 3eb25b3fa5733b4418e7e2633be34b763e2c70342bb9c418a07c9f7d4b196fac

ext/zonefile/zonefile.c
manifest
manifest.uuid

index e2c1bc467f658f907b2c03e9241f5fc4aba82dbf..69e66fde0f969f372f5efdece479e9b91ae0909c 100644 (file)
@@ -72,14 +72,21 @@ static u32 zonefileGet32(const u8 *aBuf){
 #include <string.h>
 #include <assert.h>
 
-#ifdef SQLITE_HAVE_ZLIB 
-#include <zlib.h>
-static int zfZlibOpen(void **pp, u8 *aDict, int nDict){
+static int zfGenericOpen(void **pp, u8 *aDict, int nDict){
   *pp = 0;
   return SQLITE_OK;
 }
-static void zfZlibClose(void *p){
+static void zfGenericClose(void *p){
+}
+static int zfGenericUncompressSize(
+  void *p, 
+  const u8 *aSrc, int nSrc
+){
+  return (int)zonefileGet32(aSrc);
 }
+
+#ifdef SQLITE_HAVE_ZLIB 
+#include <zlib.h>
 static int zfZlibCompressBound(void *p, int nSrc){
   return (int)compressBound((uLong)nSrc) + 4;
 }
@@ -94,12 +101,6 @@ static int zfZlibCompress(
   zonefilePut32(aDest, nSrc);
   return rc==Z_OK ? SQLITE_OK : SQLITE_ERROR;
 }
-static int zfZlibUncompressSize(
-  void *p, 
-  const u8 *aSrc, int nSrc
-){
-  return (int)zonefileGet32(aSrc);
-}
 static int zfZlibUncompress(
   void *p, 
   u8 *aDest, int nDest, 
@@ -112,12 +113,6 @@ static int zfZlibUncompress(
 #endif
 #ifdef SQLITE_HAVE_ZSTD 
 #include <zstd.h>
-static int zfZstdOpen(void **pp, u8 *aDict, int nDict){
-  *pp = 0;
-  return SQLITE_OK;
-}
-static void zfZstdClose(void *p){
-}
 static int zfZstdCompressBound(void *p, int nSrc){
   return (int)ZSTD_compressBound((size_t)nSrc);
 }
@@ -197,9 +192,6 @@ static int zfZstddictTrain(
   *pnDict = (int)sz;
   return SQLITE_OK;
 }
-static int zfZstddictCompressBound(void *p, int nSrc){
-  return (int)ZSTD_compressBound((size_t)nSrc);
-}
 static int zfZstddictCompress(
   void *p, 
   u8 *aDest, int *pnDest, 
@@ -216,9 +208,6 @@ static int zfZstddictCompress(
   *pnDest = (int)rc;
   return SQLITE_OK;
 }
-static int zfZstddictUncompressSize(void *p, const u8 *aSrc, int nSrc){
-  return (int)ZSTD_getFrameContentSize(aSrc, (size_t)nSrc);
-}
 static int zfZstddictUncompress(
   void *p, 
   u8 *aDest, int nDest, 
@@ -236,12 +225,6 @@ static int zfZstddictUncompress(
 #ifdef SQLITE_HAVE_LZ4 
 #include <lz4.h>
 #include <lz4hc.h>
-static int zfLz4Open(void **pp, u8 *aDict, int nDict){
-  *pp = 0;
-  return SQLITE_OK;
-}
-static void zfLz4Close(void *p){
-}
 static int zfLz4CompressBound(void *p, int nSrc){
   return (int)LZ4_compressBound((uLong)nSrc) + 4;
 }
@@ -267,9 +250,6 @@ static int zfLz4Compress(
   zonefilePut32(aDest, nSrc);
   return rc==0 ? SQLITE_ERROR : SQLITE_OK;
 }
-static int zfLz4UncompressSize(void *p, const u8 *aSrc, int nSrc){
-  return (int)zonefileGet32(aSrc);
-}
 static int zfLz4hcCompress(
   void *p, 
   u8 *aDest, int *pnDest, 
@@ -284,6 +264,38 @@ static int zfLz4hcCompress(
 }
 #endif
 
+#ifdef SQLITE_HAVE_BROTLI 
+#include <brotli/encode.h>
+#include <brotli/decode.h>
+
+static int zfBrotliCompressBound(void *p, int nSrc){
+  return (int)BrotliEncoderMaxCompressedSize((size_t)nSrc) + 4;
+}
+static int zfBrotliCompress(
+  void *p, 
+  u8 *aDest, int *pnDest, 
+  const u8 *aSrc, int nSrc
+){
+  size_t nDest = (size_t)*pnDest - 4;
+  BROTLI_BOOL rc = BrotliEncoderCompress(
+      BROTLI_DEFAULT_QUALITY, BROTLI_DEFAULT_WINDOW, BROTLI_DEFAULT_MODE,
+      (size_t)nSrc, aSrc, &nDest, &aDest[4]
+  );
+  *pnDest = (int)nDest + 4;
+  zonefilePut32(aDest, nSrc);
+  return rc==0 ? SQLITE_ERROR : SQLITE_OK;
+}
+static int zfBrotliUncompress(
+  void *p, 
+  u8 *aDest, int nDest, 
+  const u8 *aSrc, int nSrc
+){
+  size_t n = nDest;
+  BrotliDecoderResult rc = BrotliDecoderDecompress(nSrc-4, &aSrc[4], &n, aDest);
+  return rc==BROTLI_DECODER_RESULT_SUCCESS ? SQLITE_OK : SQLITE_ERROR;
+}
+#endif
+
 typedef struct ZonefileCompress ZonefileCompress;
 static struct ZonefileCompress {
   int eType;
@@ -301,7 +313,7 @@ static struct ZonefileCompress {
   },
 #ifdef SQLITE_HAVE_ZSTD
   { ZONEFILE_COMPRESSION_ZSTD,             "zstd",
-    zfZstdOpen, zfZstdClose, 
+    zfGenericOpen, zfGenericClose, 
     0,
     zfZstdCompressBound, zfZstdCompress, 
     zfZstdUncompressSize, zfZstdUncompress
@@ -309,35 +321,38 @@ static struct ZonefileCompress {
   { ZONEFILE_COMPRESSION_ZSTD_GLOBAL_DICT, "zstd_global_dict",
     zfZstddictOpen, zfZstddictClose, 
     zfZstddictTrain,
-    zfZstddictCompressBound, zfZstddictCompress, 
-    zfZstddictUncompressSize, zfZstddictUncompress
+    zfZstdCompressBound, zfZstddictCompress, 
+    zfZstdUncompressSize, zfZstddictUncompress
   },
 #endif /* SQLITE_HAVE_ZSTD */
 #ifdef SQLITE_HAVE_ZLIB
   { ZONEFILE_COMPRESSION_ZLIB,             "zlib",
-    zfZlibOpen, zfZlibClose, 
+    zfGenericOpen, zfGenericClose, 
     0,
     zfZlibCompressBound, zfZlibCompress, 
-    zfZlibUncompressSize, zfZlibUncompress
+    zfGenericUncompressSize, zfZlibUncompress
   },
 #endif /* SQLITE_HAVE_ZLIB */
 #ifdef SQLITE_HAVE_BROTLI
   { ZONEFILE_COMPRESSION_BROTLI,           "brotli",
-    0, 0, 0, 0, 0, 0, 0
+    zfGenericOpen, zfGenericClose, 
+    0,
+    zfBrotliCompressBound, zfBrotliCompress, 
+    zfGenericUncompressSize, zfBrotliUncompress
   },
 #endif /* SQLITE_HAVE_BROTLI */
 #ifdef SQLITE_HAVE_LZ4
   { ZONEFILE_COMPRESSION_LZ4,              "lz4",
-    zfLz4Open, zfLz4Close, 
+    zfGenericOpen, zfGenericClose, 
     0,
     zfLz4CompressBound, zfLz4Compress, 
-    zfLz4UncompressSize, zfLz4Uncompress
+    zfGenericUncompressSize, zfLz4Uncompress
   },
   { ZONEFILE_COMPRESSION_LZ4HC,            "lz4hc",
-    zfLz4Open, zfLz4Close, 
+    zfGenericOpen, zfGenericClose, 
     0,
     zfLz4CompressBound, zfLz4hcCompress, 
-    zfLz4UncompressSize, zfLz4Uncompress
+    zfGenericUncompressSize, zfLz4Uncompress
   },
 #endif /* SQLITE_HAVE_LZ4 */
 };
index 20b7231d080037a963e3d05a5bcd5b97ab4d176c..d5bc229376060aeaf295047f34b1d3a46993a837 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssupport\sfor\scompression\stypes\s"lz4"\sand\s"lz4hc"\sto\sthe\szonefile\smodule.
-D 2018-02-17T19:38:02.757
+C Add\ssupport\sfor\s"brotli"\scompression\sto\sthe\szonefile\smodule.
+D 2018-02-17T20:22:23.498
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
@@ -409,7 +409,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
 F ext/userauth/userauth.c 3410be31283abba70255d71fd24734e017a4497f
 F ext/zonefile/README.md 387ad2b748e98eeea21fd4dbb609fefe313263fadb3fc6c01c512b4c95e55ae4
-F ext/zonefile/zonefile.c cb0e2d294bc064bd995e9df7737636395e3101b17de688b2cf0e2159e561482c
+F ext/zonefile/zonefile.c 95233e917f4bdcc28fead61c4ad991b1ee18ea44fdba30a7e50e6484ea79fe31
 F ext/zonefile/zonefile1.test 0f84e56cd4f7b2c05443d1a2632c20ef635cc7f92de2868d92a2a6c09a9258ad
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
@@ -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 a993a50bb8d5a3bf7cf79e09204814e172ba0bf9b3949e81912ef83f0d4bb44e
-R 446a2537d684855afb526eb1141b7e7d
+P bbe5b21ffab3cd312680ca9f179c5847790c17fb91d4174985153c6c398d48e3
+R 4ceb71e701bfbb226e3bec90adf489aa
 U dan
-Z 61481f5925196a4938887596830579d3
+Z 3bc85025f17818043a52cc73d7feb53a
index cfb2a80aef19aa6146f143cf237ab6fb02296b91..a0926326bab8e0d546cf07a899eb780202bc30c9 100644 (file)
@@ -1 +1 @@
-bbe5b21ffab3cd312680ca9f179c5847790c17fb91d4174985153c6c398d48e3
\ No newline at end of file
+3eb25b3fa5733b4418e7e2633be34b763e2c70342bb9c418a07c9f7d4b196fac
\ No newline at end of file