]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the built-in affinity() SQL function.
authordrh <drh@noemail.net>
Mon, 26 Dec 2016 00:18:36 +0000 (00:18 +0000)
committerdrh <drh@noemail.net>
Mon, 26 Dec 2016 00:18:36 +0000 (00:18 +0000)
FossilOrigin-Name: 57e40e1cb1bcd3dd8473d2fdeecc9c7ff3d6192b

manifest
manifest.uuid
src/expr.c
src/func.c
src/sqliteInt.h

index 2e7abd7f9ee435327ab432418ff4540ffcfbd8c2..7d07fb38d67e68eac504d2f2e114a094ffd3a7d6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enhance\sthe\sfuzztest\sutility\swith\sthe\s--prng-seed\soption.\s\sAlways\sreseed\sthe\nPRNG\sprior\sto\seach\stest.
-D 2016-12-26T00:15:56.766
+C Add\sthe\sbuilt-in\saffinity()\sSQL\sfunction.
+D 2016-12-26T00:18:36.252
 F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da
@@ -341,10 +341,10 @@ F src/ctime.c 9f2296a4e5d26ebf0e0d95a0af4628f1ea694e7a
 F src/date.c b48378aeac68fa20c811404955a9b62108df47d8
 F src/dbstat.c 19ee7a4e89979d4df8e44cfac7a8f905ec89b77d
 F src/delete.c c8bc10d145c9666a34ae906250326fdaa8d58fa5
-F src/expr.c a90e37bc542abe33890cafccacbf8a7db9cb5401
+F src/expr.c dfde7bf6d3293c34b975aef24a7b9e4f6dbe89da
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 2e9aabe1aee76273aff8a84ee92c464e095400ae
-F src/func.c 43916c1d8e6da5d107d91d2b212577d4f69a876a
+F src/func.c 18193418066b4a46df0678167a61e2ecb532449e
 F src/global.c dcdb89f30b7aa531c5660030af106bc5bc48ef2e
 F src/hash.c 63d0ee752a3b92d4695b2b1f5259c4621b2cfebd
 F src/hash.h ab34c5c54a9e9de2e790b24349ba5aab3dbb4fd4
@@ -393,7 +393,7 @@ F src/shell.c 48ab675e5526903d2b7bea8c9736cafa345544e1
 F src/sqlite.h.in e8e2d108d82647f0a812fdb74accf91c1ec08ddc
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 8648034aa702469afb553231677306cc6492a1ae
-F src/sqliteInt.h 2075e22d50833ca2d9956d0b7a6bfb845ad05dd2
+F src/sqliteInt.h 5a4ac95a34d9d323b2276ae1ed2b3eaafce6c97e
 F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
 F src/status.c a9e66593dfb28a9e746cba7153f84d49c1ddc4b1
 F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
@@ -1539,7 +1539,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P def29333655691c7d54451193be13445a2857d29
-R e04e5338dd0157c18f4661e2b40e485c
+P 8c5187f69d719b69aa6eaf2dc8f89243e5979222
+R b3d06bee0b628897cfc6aea60fc78deb
+T *branch * affinity-sql-func
+T *sym-affinity-sql-func *
+T -sym-trunk *
 U drh
-Z 34d4889fdc22385ba735ec50d68d537d
+Z 89d8ee615380053a8bde91353136b95e
index ab702bb52dece6ef47b7bb03710be038d92db753..aa72dce7c8afe16b238a946e9fd0907a70ff27bb 100644 (file)
@@ -1 +1 @@
-8c5187f69d719b69aa6eaf2dc8f89243e5979222
\ No newline at end of file
+57e40e1cb1bcd3dd8473d2fdeecc9c7ff3d6192b
\ No newline at end of file
index ecc6c7928b98dadf731b4e708a375dbcb1dcfa01..883273b3bc253ebe806facd5dd5f2ee561bd0ae8 100644 (file)
@@ -3621,6 +3621,20 @@ int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
         return sqlite3ExprCodeTarget(pParse, pFarg->a[0].pExpr, target);
       }
 
+      /* The AFFINITY() function evaluates to a string that describes
+      ** the type affinity of the argument.  This is used for testing of
+      ** the SQLite type logic.
+      */
+      if( pDef->funcFlags & SQLITE_FUNC_AFFINITY ){
+        const char *azAff[] = { "blob", "text", "numeric", "integer", "real" };
+        char aff;
+        assert( nFarg==1 );
+        aff = sqlite3ExprAffinity(pFarg->a[0].pExpr);
+        sqlite3VdbeLoadString(v, target, 
+                              aff ? azAff[aff-SQLITE_AFF_BLOB] : "none");
+        return target;
+      }
+
       for(i=0; i<nFarg; i++){
         if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
           testcase( i==31 );
index 5b8ed6dd2bf3c51f07adf5b35a54c639a7187693..ec50d97af059f9b3b267be8dfd474aaca1d919e7 100644 (file)
@@ -1772,6 +1772,7 @@ void sqlite3RegisterBuiltinFunctions(void){
     FUNCTION2(unlikely,          1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
     FUNCTION2(likelihood,        2, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
     FUNCTION2(likely,            1, 0, 0, noopFunc,  SQLITE_FUNC_UNLIKELY),
+    FUNCTION2(affinity,          1, 0, 0, noopFunc,  SQLITE_FUNC_AFFINITY),
     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
index d78d2072deec463bd7e5693c73857525df5dedea..c4aaf39244a11037128f382090ae89a2b295f2e9 100644 (file)
@@ -1561,6 +1561,7 @@ struct FuncDestructor {
 #define SQLITE_FUNC_MINMAX   0x1000 /* True for min() and max() aggregates */
 #define SQLITE_FUNC_SLOCHNG  0x2000 /* "Slow Change". Value constant during a
                                     ** single query - might change over time */
+#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */
 
 /*
 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are