]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Show --rowcount for "--style insert". New test cases.
authordrh <>
Tue, 7 Jul 2026 11:00:10 +0000 (11:00 +0000)
committerdrh <>
Tue, 7 Jul 2026 11:00:10 +0000 (11:00 +0000)
FossilOrigin-Name: 386c40e3a9706111542b7f336e82f7bb6e9f43c6056185f9f3bd9aae1159070a

ext/qrf/qrf.c
manifest
manifest.uuid
test/modeA.sql
test/qrf01.test

index 03a5a72d386d5604d1e25335744755b73e776210..6efb1c8ada9c238ebd58f2eed144691910a71be6 100644 (file)
@@ -3071,6 +3071,7 @@ int sqlite3_format_query_result(
         qrfSimpleTitle(&qrf);
       }
       if( qrf.nCol>0 && qrf.spec.bRowCount==QRF_Yes ){
+        const char *zPlural = qrf.nRow==1 ? "" : "s";
         switch( qrf.spec.eStyle ){
           case QRF_STYLE_Line:
             if( qrf.nRow>0 ) sqlite3_str_append(qrf.pOut, "\n", 1);
@@ -3078,12 +3079,15 @@ int sqlite3_format_query_result(
           case QRF_STYLE_Csv:
           case QRF_STYLE_List:
           case QRF_STYLE_Quote:
-            sqlite3_str_appendf(qrf.pOut,"(%d row%s)\n",
-                                qrf.nRow, qrf.nRow==1 ? "" : "s");
+            sqlite3_str_appendf(qrf.pOut,"(%d row%s)\n",qrf.nRow,zPlural);
             break;
           case QRF_STYLE_Html:
             sqlite3_str_appendf(qrf.pOut,"<!-- %d row%s -->\n",
-                                qrf.nRow, qrf.nRow==1 ? "" : "s");
+                                qrf.nRow, zPlural);
+            break;
+          case QRF_STYLE_Insert:
+            sqlite3_str_appendf(qrf.pOut,"/* %d row%s inserted */\n",
+                                qrf.nRow, zPlural);
             break;
         }
       }
index f4efb1690903aa555e3902f0f1617463d56fee34..61f6efa70ea6e7e4145c1ed45e5b72ce85addccb 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Continuing\swork\son\s--rowcount\sand\s--title\salways.
-D 2026-07-07T00:23:38.996
+C Show\s--rowcount\sfor\s"--style\sinsert".\s\sNew\stest\scases.
+D 2026-07-07T11:00:10.684
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -425,7 +425,7 @@ F ext/misc/zipfile.c 5cf901996c840b32a5c03d947c4ee86bda166f6e595a41871840df85204
 F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
 F ext/qrf/README.md 3dfd5de860cdc0c572d8926ba0c1b3cc8925487dfbda10e63af66a8811907687
 F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
-F ext/qrf/qrf.c 151396f96eb0262443b2dda0313976ffb072b17341374d80cd9681d38345000d
+F ext/qrf/qrf.c 660da110dcf6e0b458fba4ac5d6609b633efc6dddd64e2bc5af7f8a0579b7475
 F ext/qrf/qrf.h fcbc33578176b2fd9dda8310d8f6ba4eaf4f75052f466dfe682802e6664df8bd
 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
 F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
@@ -1461,7 +1461,7 @@ F test/mmap4.test 2e2b4e32555b58da15176e6fe750f17c9dcf7f93
 F test/mmapcorrupt.test 470fb44fe92e99c1d23701d156f8c17865f5b027063c9119dcfdb842791f4465
 F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
 F test/mmapwarm.test 2272005969cd17a910077bd5082f70bc1fefad9a875afec7fc9af483898ecaf3
-F test/modeA.sql b3110eb88e3d7eb86bbf0e52e8d45bde036608baa3c98fbce07dfe3eab1928e1
+F test/modeA.sql eda688a95bfed5da5b8516ada67db3b696e903cd5bd2a0b900300cb2e5f64451
 F test/multiplex.test d74c034e52805f6de8cc5432cef8c9eb774bb64ec29b83a22effc8ca4dac1f08
 F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
 F test/multiplex3.test fac575e0b1b852025575a6a8357701d80933e98b5d2fe6d35ddaa68f92f6a1f7
@@ -1533,7 +1533,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 cc17b3efe5d4de8b1f2c9ddd0bb8a6b6934d4f32252803d9d145fac3cecb369e
+F test/qrf01.test dafebb59e6aa6523b5bf6ff64d1992bbf869be9c221fb18567a67d04874f69ca
 F test/qrf02.test 39b4afdc000bedccdafc0aecf17638df67a67aaa2d2942865ae6abcc48ba0e92
 F test/qrf03.test e7efe46d204671726b4707585126cd78d107368de4a7d0c7b8d5157cdd8624ed
 F test/qrf04.test 0894692c998d2401dcc33449c02051b503ecce0c94217be54fb007c82d2d1379
@@ -2213,8 +2213,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 600c6b464050078b38cc688668148f684243e7c5f08d0aae4d5f72aa6f985482
-R 6b8e1ec56e5918c44216302c94fac591
+P adeb4fbb86a8a781d7efb0eecb9c84ce605d0bd45f63992bf2ecd60765a60d2c
+R f7fdf80c6283e7cb9c051183725987bf
 U drh
-Z 7a466c86906d29efc86be3f3db820048
+Z 2ec65d5f66458affd3eb44f92e876b01
 # Remove this line to create a well-formed Fossil manifest.
index 71f1f786095987387e55735dbdef895fa41c396e..cffa2e7ba87e242a062ec78f28165d4562078156 100644 (file)
@@ -1 +1 @@
-adeb4fbb86a8a781d7efb0eecb9c84ce605d0bd45f63992bf2ecd60765a60d2c
+386c40e3a9706111542b7f336e82f7bb6e9f43c6056185f9f3bd9aae1159070a
index b20f1a6a083bc46ded940d953593704444a1b96a..02199b5005f7cbe4f968cbdd2351dc7932aedf1c 100644 (file)
@@ -327,6 +327,27 @@ SELECT * FROM tbl1;
 INSERT INTO new_table VALUES('hello!',10);
 INSERT INTO new_table VALUES('goodbye',20);
 END
+.testcase 730
+.mode insert new_table --titles always --rowcount on
+SELECT * FROM tbl1;
+.check <<END
+INSERT INTO new_table(one,two) VALUES('hello!',10);
+INSERT INTO new_table(one,two) VALUES('goodbye',20);
+/* 2 rows inserted */
+END
+.testcase 740
+.mode insert new_table --titles always --rowcount on
+SELECT * FROM tbl1 WHERE two<0;
+.check <<END
+/* 0 rows inserted */
+END
+.testcase 750
+.mode insert new_table --titles always --rowcount on
+SELECT * FROM tbl1 WHERE two<15;
+.check <<END
+INSERT INTO new_table(one,two) VALUES('hello!',10);
+/* 1 row inserted */
+END
 
 # QRF reports an error if the string is too big.
 #
index c8a6527419326963400163544b5b3136a469cbf4..d3f1580a4dce3a5a406485d26122ba501e87b030 100644 (file)
@@ -31,7 +31,7 @@ do_test 1.10 {
 │ BLOB │     │ Ἀμήν  │
 ╰──────┴─────┴───────╯
 }
-do_test 1.11a {
+do_test 1.11.0 {
   set result "\n[db format -title off {SELECT * FROM t1}]"
 } {
 ╭──────┬─────┬───────╮
@@ -39,7 +39,7 @@ do_test 1.11a {
 │ BLOB │     │ Ἀμήν  │
 ╰──────┴─────┴───────╯
 }
-do_test 1.11b {
+do_test 1.11.1 {
   set result "\n[db format -text sql {SELECT * FROM t1}]"
 } {
 ╭─────────────┬─────┬─────────╮
@@ -49,7 +49,7 @@ do_test 1.11b {
 │ x'424c4f42' │     │ 'Ἀμήν'  │
 ╰─────────────┴─────┴─────────╯
 }
-do_test 1.11c {
+do_test 1.11.2 {
   set result "\n[db format -text sql -border off {SELECT * FROM t1}]"
 } {
       a      │  b  │    c
@@ -57,7 +57,7 @@ do_test 1.11c {
  1           │ 2.5 │ 'three'
  x'424c4f42' │     │ 'Ἀμήν'
 }
-do_test 1.11d {
+do_test 1.11.3 {
   set result "\n[db format -text relaxed -blob sql -border off \
                  {SELECT * FROM t1}]"
 } {
@@ -66,7 +66,7 @@ do_test 1.11d {
  1           │ 2.5 │ three
  x'424c4f42' │     │ Ἀμήν
 }
-do_test 1.11e {
+do_test 1.11.4 {
   set result "\n[db format -rowcount on {SELECT * FROM t1}]"
 } {
 ╭──────┬─────┬───────╮
@@ -77,7 +77,7 @@ do_test 1.11e {
 ╰──────┴─────┴───────╯
 (2 rows)
 }
-do_test 1.11f {
+do_test 1.11.5 {
   set result "\n[db format -rowcount on {SELECT * FROM t1 WHERE a=1}]"
 } {
 ╭───┬─────┬───────╮
@@ -87,22 +87,22 @@ do_test 1.11f {
 ╰───┴─────┴───────╯
 (1 row)
 }
-do_test 1.11g {
+do_test 1.11.6 {
   set result "\n[db format {SELECT * FROM t1 WHERE a=2}]"
 } {}
-do_test 1.11h {
+do_test 1.11.7 {
   set result "\n[db format -rowcount on {SELECT * FROM t1 WHERE a=2}]"
 } {
 (0 rows)
 }
-do_test 1.11i {
+do_test 1.11.8 {
   set result "\n[db format -title always -rowcount off {SELECT * FROM t1 WHERE a=2}]"
 } {
 ╭───┬───┬───╮
 │ a │ b │ c │
 ╰───┴───┴───╯
 }
-do_test 1.11j {
+do_test 1.11.9 {
   set result "\n[db format -title always -rowcount on {SELECT * FROM t1 WHERE a=2}]"
 } {
 ╭───┬───┬───╮
@@ -143,7 +143,14 @@ do_test 1.16 {
   catch {db format -text sql -style unk {SELECT * FROM t1}} res
   set res
 } {bad format style (-style) "unk": must be auto, box, column, count, csv, eqp, explain, html, insert, jobject, json, line, list, markdown, quote, stats, stats-est, stats-vm, or table}
-
+do_test 1.17 {
+  catch {db format -text sql -title unk {SELECT * FROM t1}} res
+  set res
+} {bad -title "unk": must be off, on, always, auto, csv, html, json, plain, relaxed, sql, or tcl}
+do_test 1.18 {
+  catch {db format -text sql -rowcount unk {SELECT * FROM t1}} res
+  set res
+} {bad -rowcount "unk": must be auto, yes, no, on, or off}
        
 do_test 1.20 {
   set result "\n[db format -style box {SELECT * FROM t1}]"
@@ -166,6 +173,34 @@ do_test 1.30 {
 | BLOB |     | Ἀμήν  |
 +------+-----+-------+
 }
+do_test 1.30.1 {
+  set result "\n[db format -style table -rowcount on {SELECT * FROM t1}]"
+} {
++------+-----+-------+
+|  a   |  b  |   c   |
++------+-----+-------+
+| 1    | 2.5 | three |
+| BLOB |     | Ἀμήν  |
++------+-----+-------+
+(2 rows)
+}
+do_test 1.30.2 {
+  set result "\n[db format -style table -rowcount off {SELECT * FROM t1 WHERE a=2}]"
+} {
+}
+do_test 1.30.3 {
+  set result "\n[db format -style table -rowcount on {SELECT * FROM t1 WHERE a=2}]"
+} {
+(0 rows)
+}
+do_test 1.30.4 {
+  set result "\n[db format -style table -rowcount on -title always {SELECT * FROM t1 WHERE a=2}]"
+} {
++---+---+---+
+| a | b | c |
++---+---+---+
+(0 rows)
+}
 do_test 1.31 {
   set result "\n[db format -style table -title off {SELECT * FROM t1}]"
 } {
@@ -192,7 +227,7 @@ do_test 1.33 {
    1|2.5|three
 BLOB|   |Ἀμήν
 }
-do_test 1.34 {
+do_test 1.34.0 {
   set result "\n[db format -style box -border off \
                  -screenwidth 30 \
                  {SELECT * FROM t1}]"
@@ -202,6 +237,14 @@ do_test 1.34 {
     1 │ 2.5 │ three
  BLOB │     │ Ἀμήν
 }
+do_test 1.34.1 {
+  set result "\n[db format -style box -border off \
+                 -screenwidth 30 -title always \
+                 {SELECT * FROM t1 WHERE a=2}]"
+} {
+ a │ b │ c
+───┴───┴───
+}
 do_test 1.35 {
   set result "\n[db format -style box -border off \
                  -screenwidth 15 \
@@ -227,29 +270,38 @@ do_test 1.41 {
 1     2.5  three
 BLOB       Ἀμήν
 }
+do_test 1.42 {
+  set result "\n[db format -style column -title always {SELECT * FROM t1 WHERE a=2}]"
+} {
+a  b  c
+}
 
 do_test 1.50 {
   db format -style count {SELECT * FROM t1}
 } 2
 
-do_test 1.60a {
+do_test 1.60.0 {
   db format -style list -columnsep , -rowsep \r\n -text csv -blob tcl {SELECT * FROM t1}
 } "1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"
-do_test 1.60b {
+do_test 1.60.1 {
   db format -style csv -columnsep xyz -rowsep pqr -text sql -blob sql {SELECT * FROM t1}
 } "1,2.5,three\r\nx'424c4f42',,\"Ἀμήν\"\r\n"
-do_test 1.61a {
+do_test 1.61.0 {
   db format -style list -columnsep , -rowsep \r\n -text csv -title auto -blob tcl {SELECT * FROM t1}
 } "a,b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"
-do_test 1.61b {
+do_test 1.61.1 {
   db format -style csv -title auto -blob tcl {SELECT * FROM t1}
 } "a,b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"
-do_test 1.62a {
+do_test 1.62.2 {
   db format -style list -columnsep , -rowsep \r\n -text csv -title csv -blob tcl {SELECT a AS 'a x y', b, c FROM t1}
 } "\"a x y\",b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"
-do_test 1.62b {
+do_test 1.62.1 {
   db format -style csv -title csv -blob tcl {SELECT a AS 'a x y', b, c FROM t1}
 } "\"a x y\",b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"
+do_test 1.63.0 {
+  db format -style list -columnsep , -rowsep \r\n -text csv \
+       -title always -rowcount on -blob tcl {SELECT * FROM t1 WHERE a=2}
+} "a,b,c\r\n(0 rows)"
 
 do_test 1.70 {
   set result "\n[db format -style html {SELECT * FROM t1}]"
@@ -298,6 +350,40 @@ do_test 1.72 {
 <TD>xy&#39;z
 </TR>
 }
+do_test 1.73 {
+  set result "\n[db format -style html -rowcount on {SELECT * FROM t1 WHERE a=1}]"
+} {
+<TR>
+<TD>1
+<TD>2.5
+<TD>three
+</TR>
+<!-- 1 row -->
+}
+do_test 1.74 {
+  set result "\n[db format -style html -rowcount on {SELECT * FROM t1 WHERE a=2}]"
+} {
+<!-- 0 rows -->
+}
+do_test 1.75 {
+  set result "\n[db format -style html -title always -rowcount on {SELECT * FROM t1 WHERE a=2}]"
+} {
+<TR>
+<TH>a
+<TH>b
+<TH>c
+</TR>
+<!-- 0 rows -->
+}
+do_test 1.76 {
+  set result "\n[db format -style html -title always -rowcount off {SELECT * FROM t1 WHERE a=2}]"
+} {
+<TR>
+<TH>a
+<TH>b
+<TH>c
+</TR>
+}
 
 do_test 1.80 {
   set result "\n[db format -style insert {SELECT * FROM t1}]"
@@ -318,13 +404,20 @@ do_test 1.82 {
 INSERT INTO t1(a,b,c) VALUES(1,2.5,'three');
 INSERT INTO t1(a,b,c) VALUES(x'424c4f42',NULL,'Ἀμήν');
 }
-do_test 1.83 {
+do_test 1.83.0 {
   set result "\n[db format -style insert -tablename drop -title on \
       {SELECT a AS "a-b", b, c AS "123" FROM t1}]"
 } {
 INSERT INTO "drop"("a-b",b,"123") VALUES(1,2.5,'three');
 INSERT INTO "drop"("a-b",b,"123") VALUES(x'424c4f42',NULL,'Ἀμήν');
 }
+do_test 1.83.1 {
+  set result "\n[db format -style insert -tablename drop -title always \
+      {SELECT a AS "a-b", b, c AS "123" FROM t1}]"
+} {
+INSERT INTO "drop"("a-b",b,"123") VALUES(1,2.5,'three');
+INSERT INTO "drop"("a-b",b,"123") VALUES(x'424c4f42',NULL,'Ἀμήν');
+}
 do_test 1.84 {
   set result "\n[db format -style insert {SELECT * FROM t1} -multiinsert 2000]"
 } {
@@ -344,6 +437,14 @@ INSERT INTO tab VALUES(1,10),
 INSERT INTO tab VALUES(6,60),
   (7,70);
 }
+do_test 1.86 {
+  set result "\n[db format -style insert -tablename drop -title on \
+      -rowcount on {SELECT a AS "a-b", b, c AS "123" FROM t1}]"
+} {
+INSERT INTO "drop"("a-b",b,"123") VALUES(1,2.5,'three');
+INSERT INTO "drop"("a-b",b,"123") VALUES(x'424c4f42',NULL,'Ἀμήν');
+/* 2 rows inserted */
+}
 
 do_test 1.90 {
   set result "\n[db format -style json {SELECT * FROM t1}]"
@@ -363,6 +464,13 @@ do_test 1.92 {
 {"a":1,"b":2.5,"c":"three","xyz":"abc\n123\r\nxyz"}
 {"a":"\u0042\u004c\u004f\u0042","b":null,"c":"Ἀμήν","xyz":"abc\n123\r\nxyz"}
 }
+do_test 1.93 {
+  set result "\n[db format -style json -title always -rowcount on {SELECT * FROM t1}]"
+} {
+[{"a":1,"b":2.5,"c":"three"},
+{"a":"\u0042\u004c\u004f\u0042","b":null,"c":"Ἀμήν"}]
+}
+
 
 do_test 1.100 {
   set result "\n[db format -style line {SELECT * FROM t1}]"
@@ -398,6 +506,24 @@ a = x'424c4f42'
 b = (NULL)
 c = 'Ἀμήν'
 }
+do_test 1.103 {
+  set result "\n[db format -style line -title always -rowcount on {SELECT * FROM t1}]"
+} {
+a: 1
+b: 2.5
+c: three
+
+a: BLOB
+b: 
+c: Ἀμήν
+
+(2 rows)
+}
+do_test 1.104 {
+  set result "\n[db format -style line -title always -rowcount on {SELECT * FROM t1 WHERE a=2}]"
+} {
+(0 rows)
+}
 
 do_test 1.110 {
   set result "\n[db format -style list {SELECT * FROM t1}]"
@@ -420,6 +546,27 @@ a|b|c
 1|2.5|'three'
 x'424c4f42'|NULL|'Ἀμήν'
 }
+do_test 1.113 {
+  set result "\n[db format -style list {SELECT * FROM t1 WHERE a=2}]"
+} {
+}
+do_test 1.114 {
+  set result "\n[db format -style list -rowcount on {SELECT * FROM t1 WHERE a=2}]"
+} {
+(0 rows)
+}
+do_test 1.115 {
+  set result "\n[db format -style list -rowcount on -title always {SELECT * FROM t1 WHERE a=2}]"
+} {
+a|b|c
+(0 rows)
+}
+do_test 1.116 {
+  set result "\n[db format -style list -rowcount off -title always {SELECT * FROM t1 WHERE a=2}]"
+} {
+a|b|c
+}
+
 do_test 1.118 {
   set rc [catch {db format -style list -title unk {SELECT * FROM t1}} res]
   lappend rc $res
@@ -440,6 +587,21 @@ do_test 1.121 {
 | 1    | 2.5 | three |
 | BLOB |     | Ἀμήν  |
 }
+do_test 1.122 {
+  set result "\n[db format -style markdown -rowcount on {SELECT * FROM t1}]"
+} {
+|  a   |  b  |   c   |
+|------|-----|-------|
+| 1    | 2.5 | three |
+| BLOB |     | Ἀμήν  |
+(2 rows)
+}
+do_test 1.123 {
+  set result "\n[db format -style markdown -rowcount on -title always {SELECT * FROM t1 WHERE a=2}]"
+} {
+| a | b | c |
+(0 rows)
+}
 
 do_test 1.130 {
   set result "\n[db format -style quote {SELECT * FROM t1}]"
@@ -454,6 +616,19 @@ do_test 1.131 {
 1,2.5,'three'
 x'424c4f42',NULL,'Ἀμήν'
 }
+do_test 1.132 {
+  set result "\n[db format -style quote -rowcount on {SELECT * FROM t1}]"
+} {
+1,2.5,'three'
+x'424c4f42',NULL,'Ἀμήν'
+(2 rows)
+}
+do_test 1.133 {
+  set result "\n[db format -style quote -rowcount off -title always \
+                 {SELECT * FROM t1 WHERE a=2}]"
+} {
+'a','b','c'
+}
 
 do_execsql_test 2.0 {
   DELETE FROM t1;