diff --git a/manifest b/manifest index b28a3014e1..60eb3a0e7b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C We\sdon't\sactually\sneed\sto\sincrement\sthe\sversion\snumber\sof\sQRF\sas\nversion\s2\shas\snot\syet\sbeen\sreleased.\s\sUpdates\sto\sthe\sQRF\sREADME.md\nfile. -D 2026-08-14T16:58:20.529 +C Add\ssupport\sfor\sinteger\sand\sfloat-point\sformat\sstrings\sto\sthe\n"format"\smethod\sof\sthe\ssqlite3\sobject\sin\sthe\sTCL\sinterface. +D 2026-08-14T17:22:08.365 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -751,7 +751,7 @@ F src/sqliteInt.h e024c4d4d6ec812e087c46126a5aea9ca3b386240459da6013aab90a9d18cf F src/sqliteLimit.h 7617f2ee673dab382046beba4552283f442cf1a181bb169ac38eb908135dd8da F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 -F src/tclsqlite.c dce1b8217ed34545d8ce04375f22dc05b3f04e124994bd110969d6267480c1b8 +F src/tclsqlite.c e827fa90c2f7571223a83f2a13b0105232730cb8496052bf09836870cab19396 F src/tclsqlite.h 614b3780a62522bc9f8f2b9fb22689e8009958e7aa77e572d0f3149050af348a F src/test1.c bd9e5123ef2136c960a16c09a1abfbcb6c1498e5193deb2acee188260a31a473 F src/test2.c a61ed01d9264a1db74ab42fbc981fc66165f85d5e3947e92be61a73e79ec4f2d @@ -1537,7 +1537,7 @@ F test/printf2.test 3f55c1871a5a65507416076f6eb97e738d5210aeda7595a74ee895f2224c F test/progress.test ebab27f670bd0d4eb9d20d49cef96e68141d92fb F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc F test/pushdown.test 46a626ef1c0ca79b85296ff2e078b9da20a50e9b804b38f441590c3987580ddd -F test/qrf01.test c5bf2300788e22ebfb6aa3a6ea299ba55e38766a7a8b4ecce4c7a0e36a8ef40d +F test/qrf01.test 8006b3a480b1318bd88854a984cea6592f199416d39e63b99dc0fd6266b4cbc4 F test/qrf02.test 39b4afdc000bedccdafc0aecf17638df67a67aaa2d2942865ae6abcc48ba0e92 F test/qrf03.test e7efe46d204671726b4707585126cd78d107368de4a7d0c7b8d5157cdd8624ed F test/qrf04.test 0894692c998d2401dcc33449c02051b503ecce0c94217be54fb007c82d2d1379 @@ -2218,8 +2218,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 4e86fc1922e347825e1160652a2d5e6c60d04eabe847621b08f03b05b66904ea -R 7fe990cfe87b3a171dfcbf7ce3ffa11d +P 3ccc25a06fd247da0ffd273c331ad992334d7e397e32a625dabe155eb37425f3 +R 9d81b88a7e702eae6945178079cf9fc7 U drh -Z 2af361d5c1c8c7766a79f6f3fa23b49d +Z fe8dac160c61fbfb81fa01b1cbd8d0e6 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 32e2a846eb..c173ce13f8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3ccc25a06fd247da0ffd273c331ad992334d7e397e32a625dabe155eb37425f3 +49778c334aaed6d05342a2063cf7f9f8caa1ec9aac0d49ac1db491ddd3d564b5 diff --git a/src/tclsqlite.c b/src/tclsqlite.c index eb72aa7bae..3a0110a4fd 100644 --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@ -2079,6 +2079,8 @@ static void DbHookCmd( ** -rowsep TEXT Row separator text ** -tablename TEXT Table name for style "insert" ** -null TEXT Text for NULL values +** -intfmt STRING Format for integer values +** -realfmt STRING Format for floating-point values ** ** A mapping from TCL "format" command options to sqlite3_qrf_spec fields ** is below. Use this to reference the QRF documentation: @@ -2096,6 +2098,7 @@ static void DbHookCmd( ** -defaultalign eDfltAlign ** -titlealign eTitleAlign ** -border bBorder +** -rowcount bRowCount ** -wrap nWrap ** -screenwidth nScreenWidth ** -linelimit nLineLimit @@ -2108,6 +2111,8 @@ static void DbHookCmd( ** -rowsep zRowSep ** -tablename zTableName ** -null zNull +** -intfmt zIntFmt +** -realfmt zRealFmt ** ** The TCL -title option maps to eTitle and bTitles as follows: ** @@ -2403,6 +2408,28 @@ static int dbQrf(SqliteDb *pDb, int objc, Tcl_Obj *const*objv){ }else if( strcmp(zArg,"-null")==0 ){ qrf.zNull = Tcl_GetString(objv[i+1]); i++; + }else if( strcmp(zArg,"-intfmt")==0 ){ + char *zFmt = Tcl_GetString(objv[i+1]); + if( zFmt[0]==0 || strcmp(zFmt,"default")==0 ){ + zFmt = 0; + }else if( sqlite3_qrf_ckformat(zFmt)!=1 ){ + Tcl_AppendResult(pDb->interp, "bad format for -intfmt", (char*)0); + rc = TCL_ERROR; + goto format_failed; + } + qrf.zIntFmt = zFmt; + i++; + }else if( strcmp(zArg,"-realfmt")==0 ){ + char *zFmt = Tcl_GetString(objv[i+1]); + if( zFmt[0]==0 || strcmp(zFmt,"default")==0 ){ + zFmt = 0; + }else if( sqlite3_qrf_ckformat(zFmt)!=2 ){ + Tcl_AppendResult(pDb->interp, "bad format for -realfmt", (char*)0); + rc = TCL_ERROR; + goto format_failed; + } + qrf.zRealFmt = zFmt; + i++; }else if( strcmp(zArg,"-version")==0 ){ /* Undocumented. Testing use only */ qrf.iVersion = atoi(Tcl_GetString(objv[i+1])); diff --git a/test/qrf01.test b/test/qrf01.test index c0e21a4521..140d1e16b6 100644 --- a/test/qrf01.test +++ b/test/qrf01.test @@ -1416,6 +1416,51 @@ do_test 13.2 { ╰─────────┴─────────────╯ } +do_test 14.1 { + set result \n[db format -style box -intfmt %,d -realfmt %.2f -rowcount on \ + {WITH RECURSIVE c(n) AS + (VALUES(0.01) UNION ALL SELECT n*10 FROM c WHERE n<1e8) + SELECT pi()*n, CAST(pi()*n AS INT) FROM c;}] +} { +╭──────────────┬─────────────────────╮ +│ pi()*n │ CAST(pi()*n AS INT) │ +╞══════════════╪═════════════════════╡ +│ 0.03 │ 0 │ +│ 0.31 │ 0 │ +│ 3.14 │ 3 │ +│ 31.42 │ 31 │ +│ 314.16 │ 314 │ +│ 3141.59 │ 3,141 │ +│ 31415.93 │ 31,415 │ +│ 314159.27 │ 314,159 │ +│ 3141592.65 │ 3,141,592 │ +│ 31415926.54 │ 31,415,926 │ +│ 314159265.36 │ 314,159,265 │ +╰──────────────┴─────────────────────╯ +(11 rows) +} +do_test 14.2 { + catch {db format -intfmt %.2f {SELECT 100, 2.5}} res + set res +} {bad format for -intfmt} +do_test 14.3 { + db format -style list -columnsep { } -intfmt default {SELECT 100, 2.5} +} {100 2.5} +do_test 14.4 { + db format -style list -columnsep { } -intfmt {} {SELECT 100, 2.5} +} {100 2.5} +do_test 14.5 { + catch {db format -realfmt %d {SELECT 100, 2.5}} res + set res +} {bad format for -realfmt} +do_test 14.6 { + db format -style list -columnsep { } -realfmt default {SELECT 100, 2.5} +} {100 2.5} +do_test 14.7 { + db format -style list -columnsep { } -realfmt {} {SELECT 100, 2.5} +} {100 2.5} + + db close finish_test