From: drh <> Date: Wed, 22 Mar 2023 16:01:06 +0000 (+0000) Subject: In the CLI, the magic parameter :inf and :nan bind floating point values X-Git-Tag: version-3.42.0~233 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8854f30295cb35cb5d6185aed84d2fe6336dcf8a;p=thirdparty%2Fsqlite.git In the CLI, the magic parameter :inf and :nan bind floating point values Infinity and NaN, respectively, as an add to testing SQLite's handling of those quantities. FossilOrigin-Name: c70a61d8fbfb722679398c211aa48ccd84a392a6b59ba70551fe3a9fbab9a6d5 --- diff --git a/manifest b/manifest index cfbaa56a74..fe149a5cb3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sthe\sversion\snumber\sfor\sthe\sTEA\starball\sto\s3.42.0,\sto\smatch\sthe\score. -D 2023-03-22T14:51:22.647 +C In\sthe\sCLI,\sthe\smagic\sparameter\s:inf\sand\s:nan\sbind\sfloating\spoint\svalues\nInfinity\sand\sNaN,\srespectively,\sas\san\sadd\sto\stesting\sSQLite's\shandling\sof\nthose\squantities. +D 2023-03-22T16:01:06.778 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -626,7 +626,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 3e53e02ce87c9582bd7e7d22f13f4094a271678d9dc72820fa257a2abb5e4032 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92 F src/select.c 64a4b48a14f5d19a5ddc4afde37a435aebb92113f52653f8fe9e69fc3e9ff9aa -F src/shell.c.in 7394f84ace7bcff18c686b09ff7a1c02ffc5fb8fb851b3b2be128762ee71589e +F src/shell.c.in e66360191de42f8b43454886a059e3eb983e6dc0f2bd855dd4ff5244694f61a6 F src/sqlite.h.in f01033703156615566bb329144d736a37fc35a278049db91127782a9c799b938 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h da473ce2b3d0ae407a6300c4a164589b9a6bfdbec9462688a8593ff16f3bb6e4 @@ -2051,8 +2051,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P badf7d0e3cfa6efaff4b132cb4ecca79a16e73197c5e275db14ccb5ff938276d -R f9a0e32a5a944935ccdf4d832a3793b8 +P 03e6918e7f749c3ca1fa66df28b203ff26680f129003e20c71ca246cf7ff34fe +R 8e977335e4f9dd507a1a79512cd70e26 U drh -Z c47bf29e585485f3f7c489971119cf34 +Z e01204911fdf00ed5178cd1186ef489a # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 4085c2d2fb..50d888f24e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -03e6918e7f749c3ca1fa66df28b203ff26680f129003e20c71ca246cf7ff34fe \ No newline at end of file +c70a61d8fbfb722679398c211aa48ccd84a392a6b59ba70551fe3a9fbab9a6d5 \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 199a6df9dd..b97889f938 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -99,6 +99,7 @@ typedef unsigned short int u16; #include #include #include +#include #include "sqlite3.h" typedef sqlite3_int64 i64; typedef sqlite3_uint64 u64; @@ -3387,12 +3388,13 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ if( nVar==0 ) return; /* Nothing to do */ if( sqlite3_table_column_metadata(pArg->db, "TEMP", "sqlite_parameters", "key", 0, 0, 0, 0, 0)!=SQLITE_OK ){ - return; /* Parameter table does not exist */ + rc = SQLITE_NOTFOUND; + pQ = 0; + }else{ + rc = sqlite3_prepare_v2(pArg->db, + "SELECT value FROM temp.sqlite_parameters" + " WHERE key=?1", -1, &pQ, 0); } - rc = sqlite3_prepare_v2(pArg->db, - "SELECT value FROM temp.sqlite_parameters" - " WHERE key=?1", -1, &pQ, 0); - if( rc || pQ==0 ) return; for(i=1; i<=nVar; i++){ char zNum[30]; const char *zVar = sqlite3_bind_parameter_name(pStmt, i); @@ -3401,8 +3403,12 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ zVar = zNum; } sqlite3_bind_text(pQ, 1, zVar, -1, SQLITE_STATIC); - if( sqlite3_step(pQ)==SQLITE_ROW ){ + if( rc==SQLITE_OK && pQ && sqlite3_step(pQ)==SQLITE_ROW ){ sqlite3_bind_value(pStmt, i, sqlite3_column_value(pQ, 0)); + }else if( sqlite3_strlike("_NAN", zVar, 0)==0 ){ + sqlite3_bind_double(pStmt, i, NAN); + }else if( sqlite3_strlike("_INF", zVar, 0)==0 ){ + sqlite3_bind_double(pStmt, i, INFINITY); }else{ sqlite3_bind_null(pStmt, i); }