CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
qrf01.test1168 linesDownload Raw Back to test
1# 2025-11-052#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11#12# Test cases for the Query Result Formatter (QRF)13#14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17set testprefix qrf0118 19do_execsql_test 1.0 {20  CREATE TABLE t1(a, b, c);21  INSERT INTO t1 VALUES(1,2.5,'three'),(x'424c4f42',NULL,'Ἀμήν');22}23 24do_test 1.10 {25  set result "\n[db format {SELECT * FROM t1}]"26} {27╭──────┬─────┬───────╮28│  a   │  b  │   c   │29╞══════╪═════╪═══════╡30│    1 │ 2.5 │ three │31│ BLOB │     │ Ἀμήν  │32╰──────┴─────┴───────╯33}34do_test 1.11a {35  set result "\n[db format -title off {SELECT * FROM t1}]"36} {37╭──────┬─────┬───────╮38│    1 │ 2.5 │ three │39│ BLOB │     │ Ἀμήν  │40╰──────┴─────┴───────╯41}42do_test 1.11b {43  set result "\n[db format -text sql {SELECT * FROM t1}]"44} {45╭─────────────┬─────┬─────────╮46│      a      │  b  │    c    │47╞═════════════╪═════╪═════════╡48│           1 │ 2.5 │ 'three' │49│ x'424c4f42' │     │ 'Ἀμήν'  │50╰─────────────┴─────┴─────────╯51}52do_test 1.11c {53  set result "\n[db format -text sql -border off {SELECT * FROM t1}]"54} {55      a      │  b  │    c56═════════════╪═════╪═════════57 1           │ 2.5 │ 'three'58 x'424c4f42' │     │ 'Ἀμήν'59}60do_test 1.11d {61  set result "\n[db format -text relaxed -blob sql -border off \62                 {SELECT * FROM t1}]"63} {64      a      │  b  │   c65═════════════╪═════╪═══════66 1           │ 2.5 │ three67 x'424c4f42' │     │ Ἀμήν68}69do_test 1.12 {70  set result "\n[db format -text csv {SELECT * FROM t1}]"71} {72╭────────────────────┬─────┬────────╮73│         a          │  b  │   c    │74╞════════════════════╪═════╪════════╡75│                  1 │ 2.5 │ three  │76│ "\102\114\117\102" │     │ "Ἀμήν" │77╰────────────────────┴─────┴────────╯78}79do_test 1.13 {80  set result "\n[db format -text csv -blob hex {SELECT * FROM t1}]"81} {82╭──────────┬─────┬────────╮83│    a     │  b  │   c    │84╞══════════╪═════╪════════╡85│        1 │ 2.5 │ three  │86│ 424c4f42 │     │ "Ἀμήν" │87╰──────────┴─────┴────────╯88}89do_test 1.14 {90  catch {db format -text unk -blob hex {SELECT * FROM t1}} res91  set res92} {bad -text "unk": must be auto, csv, html, json, plain, relaxed, sql, or tcl}93do_test 1.15 {94  catch {db format -text sql -blob unk {SELECT * FROM t1}} res95  set res96} {bad BLOB encoding (-blob) "unk": must be auto, hex, json, tcl, text, sql, or size}97do_test 1.16 {98  catch {db format -text sql -style unk {SELECT * FROM t1}} res99  set res100} {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}101 102	103do_test 1.20 {104  set result "\n[db format -style box {SELECT * FROM t1}]"105} {106╭──────┬─────┬───────╮107│  a   │  b  │   c   │108╞══════╪═════╪═══════╡109│    1 │ 2.5 │ three │110│ BLOB │     │ Ἀμήν  │111╰──────┴─────┴───────╯112}113 114do_test 1.30 {115  set result "\n[db format -style table {SELECT * FROM t1}]"116} {117+------+-----+-------+118|  a   |  b  |   c   |119+------+-----+-------+120| 1    | 2.5 | three |121| BLOB |     | Ἀμήν  |122+------+-----+-------+123}124do_test 1.31 {125  set result "\n[db format -style table -title off {SELECT * FROM t1}]"126} {127+------+-----+-------+128| 1    | 2.5 | three |129| BLOB |     | Ἀμήν  |130+------+-----+-------+131}132do_test 1.32 {133  set result "\n[db format -style table -border off {SELECT * FROM t1}]"134} {135  a   |  b  |   c136------+-----+-------137    1 | 2.5 | three138 BLOB |     | Ἀμήν139}140do_test 1.33 {141  set result "\n[db format -style table -border off \142                 -screenwidth 15 \143                 {SELECT * FROM t1}]"144} {145 a  | b |  c146----+---+-----147   1|2.5|three148BLOB|   |Ἀμήν149}150do_test 1.34 {151  set result "\n[db format -style box -border off \152                 -screenwidth 30 \153                 {SELECT * FROM t1}]"154} {155  a   │  b  │   c156══════╪═════╪═══════157    1 │ 2.5 │ three158 BLOB │     │ Ἀμήν159}160do_test 1.35 {161  set result "\n[db format -style box -border off \162                 -screenwidth 15 \163                 {SELECT * FROM t1}]"164} {165 a  │ b │  c166════╪═══╪═════167   1│2.5│three168BLOB│   │Ἀμήν169}170 171do_test 1.40 {172  set result "\n[db format -style column {SELECT * FROM t1}]"173} {174a     b    c175----  ---  -----1761     2.5  three177BLOB       Ἀμήν178}179do_test 1.41 {180  set result "\n[db format -style column -title off {SELECT * FROM t1}]"181} {1821     2.5  three183BLOB       Ἀμήν184}185 186do_test 1.50 {187  db format -style count {SELECT * FROM t1}188} 2189 190do_test 1.60a {191  db format -style list -columnsep , -rowsep \r\n -text csv -blob tcl {SELECT * FROM t1}192} "1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"193do_test 1.60b {194  db format -style csv -columnsep xyz -rowsep pqr -text sql -blob sql {SELECT * FROM t1}195} "1,2.5,three\r\nx'424c4f42',,\"Ἀμήν\"\r\n"196do_test 1.61a {197  db format -style list -columnsep , -rowsep \r\n -text csv -title auto -blob tcl {SELECT * FROM t1}198} "a,b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"199do_test 1.61b {200  db format -style csv -title auto -blob tcl {SELECT * FROM t1}201} "a,b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"202do_test 1.62a {203  db format -style list -columnsep , -rowsep \r\n -text csv -title csv -blob tcl {SELECT a AS 'a x y', b, c FROM t1}204} "\"a x y\",b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"205do_test 1.62b {206  db format -style csv -title csv -blob tcl {SELECT a AS 'a x y', b, c FROM t1}207} "\"a x y\",b,c\r\n1,2.5,three\r\n\"\\102\\114\\117\\102\",,\"Ἀμήν\"\r\n"208 209do_test 1.70 {210  set result "\n[db format -style html {SELECT * FROM t1}]"211} {212<TR>213<TD>1214<TD>2.5215<TD>three216</TR>217<TR>218<TD>BLOB219<TD>null220<TD>Ἀμήν221</TR>222}223do_test 1.71 {224  set result "\n[db format -style html -title auto {SELECT * FROM t1}]"225} {226<TR>227<TH>a228<TH>b229<TH>c230</TR>231<TR>232<TD>1233<TD>2.5234<TD>three235</TR>236<TR>237<TD>BLOB238<TD>null239<TD>Ἀμήν240</TR>241}242 243do_test 1.80 {244  set result "\n[db format -style insert {SELECT * FROM t1}]"245} {246INSERT INTO tab VALUES(1,2.5,'three');247INSERT INTO tab VALUES(x'424c4f42',NULL,'Ἀμήν');248}249do_test 1.81 {250  set result "\n[db format -style insert -tablename t1 {SELECT * FROM t1}]"251} {252INSERT INTO t1 VALUES(1,2.5,'three');253INSERT INTO t1 VALUES(x'424c4f42',NULL,'Ἀμήν');254}255do_test 1.82 {256  set result "\n[db format -style insert -tablename t1 -title auto \257      {SELECT * FROM t1}]"258} {259INSERT INTO t1(a,b,c) VALUES(1,2.5,'three');260INSERT INTO t1(a,b,c) VALUES(x'424c4f42',NULL,'Ἀμήν');261}262do_test 1.83 {263  set result "\n[db format -style insert -tablename drop -title on \264      {SELECT a AS "a-b", b, c AS "123" FROM t1}]"265} {266INSERT INTO "drop"("a-b",b,"123") VALUES(1,2.5,'three');267INSERT INTO "drop"("a-b",b,"123") VALUES(x'424c4f42',NULL,'Ἀμήν');268}269 270do_test 1.90 {271  set result "\n[db format -style json {SELECT * FROM t1}]"272} {273[{"a":1,"b":2.5,"c":"three"},274{"a":"\u0042\u004c\u004f\u0042","b":null,"c":"Ἀμήν"}]275}276do_test 1.91 {277  set result "\n[db format -style jobject {SELECT * FROM t1}]"278} {279{"a":1,"b":2.5,"c":"three"}280{"a":"\u0042\u004c\u004f\u0042","b":null,"c":"Ἀμήν"}281}282do_test 1.92 {283  set result "\n[db format -style jobject {SELECT *, unistr('abc\u000a123\u000d\u000axyz') AS xyz FROM t1}]"284} {285{"a":1,"b":2.5,"c":"three","xyz":"abc\n123\r\nxyz"}286{"a":"\u0042\u004c\u004f\u0042","b":null,"c":"Ἀμήν","xyz":"abc\n123\r\nxyz"}287}288 289do_test 1.100 {290  set result "\n[db format -style line {SELECT * FROM t1}]"291} {292a: 1293b: 2.5294c: three295 296a: BLOB297b: 298c: Ἀμήν299}300do_test 1.101 {301  set result "\n[db format -style line -null (NULL) {SELECT * FROM t1}]"302} {303a: 1304b: 2.5305c: three306 307a: BLOB308b: (NULL)309c: Ἀμήν310}311do_test 1.102 {312  set result "\n[db format -style line -null (NULL) -columnsep { = } \313                 -text sql {SELECT * FROM t1}]"314} {315a = 1316b = 2.5317c = 'three'318 319a = x'424c4f42'320b = (NULL)321c = 'Ἀμήν'322}323 324do_test 1.110 {325  set result "\n[db format -style list {SELECT * FROM t1}]"326} {3271|2.5|three328BLOB||Ἀμήν329}330do_test 1.111 {331  set result "\n[db format -style list -title on {SELECT * FROM t1}]"332} {333a|b|c3341|2.5|three335BLOB||Ἀμήν336}337do_test 1.112 {338  set result "\n[db format -style list -title on -text sql -null NULL \339                 -title plain {SELECT * FROM t1}]"340} {341a|b|c3421|2.5|'three'343x'424c4f42'|NULL|'Ἀμήν'344}345do_test 1.118 {346  set rc [catch {db format -style list -title unk {SELECT * FROM t1}} res]347  lappend rc $res348} {1 {bad -title "unk": must be off, on, auto, csv, html, json, plain, relaxed, sql, or tcl}}349 350 351do_test 1.120 {352  set result "\n[db format -style markdown {SELECT * FROM t1}]"353} {354|  a   |  b  |   c   |355|------|-----|-------|356| 1    | 2.5 | three |357| BLOB |     | Ἀμήν  |358}359do_test 1.121 {360  set result "\n[db format -style markdown -title off {SELECT * FROM t1}]"361} {362| 1    | 2.5 | three |363| BLOB |     | Ἀμήν  |364}365 366do_test 1.130 {367  set result "\n[db format -style quote {SELECT * FROM t1}]"368} {3691,2.5,'three'370x'424c4f42',NULL,'Ἀμήν'371}372do_test 1.131 {373  set result "\n[db format -style quote -title on {SELECT * FROM t1}]"374} {375'a','b','c'3761,2.5,'three'377x'424c4f42',NULL,'Ἀμήν'378}379 380 381do_execsql_test 2.0 {382  DELETE FROM t1;383  INSERT INTO t1 VALUES(1,2,'The quick fox jumps over the lazy brown dog.');384}385do_test 2.1 {386  set result "\n[db format -widths {5 -5 19} -wordwrap on \387                 {SELECT * FROM t1}]"388} {389╭───────┬───────┬─────────────────────╮390│   a   │   b   │          c          │391╞═══════╪═══════╪═════════════════════╡392│     1 │     2 │ The quick fox jumps │393│       │       │ over the lazy brown │394│       │       │ dog.                │395╰───────┴───────┴─────────────────────╯396}397do_test 2.2 {398  set result "\n[db format -widths {5 -5 19} -wordwrap off \399                 {SELECT * FROM t1}]"400} {401╭───────┬───────┬─────────────────────╮402│   a   │   b   │          c          │403╞═══════╪═══════╪═════════════════════╡404│     1 │     2 │ The quick fox jumps │405│       │       │ over the lazy brown │406│       │       │ dog.                │407╰───────┴───────┴─────────────────────╯408}409do_test 2.3 {410  set result "\n[db format -widths {5 -5 18} -wordwrap on \411                 {SELECT * FROM t1}]"412} {413╭───────┬───────┬────────────────────╮414│   a   │   b   │         c          │415╞═══════╪═══════╪════════════════════╡416│     1 │     2 │ The quick fox      │417│       │       │ jumps over the     │418│       │       │ lazy brown dog.    │419╰───────┴───────┴────────────────────╯420}421do_test 2.4 {422  set result "\n[db format -widths {5 -5 -18} -wordwrap on \423                 {SELECT * FROM t1}]"424} {425╭───────┬───────┬────────────────────╮426│   a   │   b   │         c          │427╞═══════╪═══════╪════════════════════╡428│     1 │     2 │      The quick fox │429│       │       │     jumps over the │430│       │       │    lazy brown dog. │431╰───────┴───────┴────────────────────╯432}433do_test 2.5 {434  set result "\n[db format -widths {5 -5 19} -wordwrap off \435                 {SELECT * FROM t1}]"436} {437╭───────┬───────┬─────────────────────╮438│   a   │   b   │          c          │439╞═══════╪═══════╪═════════════════════╡440│     1 │     2 │ The quick fox jumps │441│       │       │ over the lazy brown │442│       │       │ dog.                │443╰───────┴───────┴─────────────────────╯444}445do_test 2.6 {446  set result "\n[db format -widths {5 -5 18} -wordwrap off \447                 {SELECT * FROM t1}]"448} {449╭───────┬───────┬────────────────────╮450│   a   │   b   │         c          │451╞═══════╪═══════╪════════════════════╡452│     1 │     2 │ The quick fox jump │453│       │       │ s over the lazy br │454│       │       │ own dog.           │455╰───────┴───────┴────────────────────╯456}457do_test 2.7 {458  set result "\n[db format -widths {5 5 18} -wordwrap yes \459                 -align {left center right} -titlealign right \460                 {SELECT * FROM t1}]"461} {462╭───────┬───────┬────────────────────╮463│     a │     b │                  c │464╞═══════╪═══════╪════════════════════╡465│ 1     │   2   │      The quick fox │466│       │       │     jumps over the │467│       │       │    lazy brown dog. │468╰───────┴───────┴────────────────────╯469}470do_test 2.8 {471  set result "\n[db format -widths {5 8 11} -wordwrap yes \472                 -align {auto auto center} -titlealign left \473                 -defaultalign right \474                 {SELECT * FROM t1}]"475} {476╭───────┬──────────┬─────────────╮477│ a     │ b        │ c           │478╞═══════╪══════════╪═════════════╡479│     1 │        2 │  The quick  │480│       │          │  fox jumps  │481│       │          │  over the   │482│       │          │ lazy brown  │483│       │          │    dog.     │484╰───────┴──────────┴─────────────╯485}486do_test 2.9 {487  catch {db format -align {auto xyz 123} {SELECT * FROM t1}} res488  set res489} {bad column alignment (-align) "xyz": must be auto, bottom, c, center, e, left, middle, n, ne, nw, right, s, se, sw, top, or w}490do_test 2.10 {491  catch {db format -defaultalign xyz {SELECT * FROM t1}} res492  set res493} {bad default alignment (-defaultalign) "xyz": must be auto, bottom, c, center, e, left, middle, n, ne, nw, right, s, se, sw, top, or w}494do_test 2.11 {495  catch {db format -titlealign xyz {SELECT * FROM t1}} res496  set res497} {bad title alignment (-titlealign) "xyz": must be auto, bottom, c, center, e, left, middle, n, ne, nw, right, s, se, sw, top, or w}498 499 500do_execsql_test 2.30 {501  UPDATE t1 SET c='Η γρήγορη αλεπού πηδάει πάνω από το τεμπέλικο καφέ σκυλί';502  SELECT hex(c) FROM t1;503} {CE9720CEB3CF81CEAECEB3CEBFCF81CEB720CEB1CEBBCEB5CF80CEBFCF8D20CF80CEB7CEB4CEACCEB5CEB920CF80CEACCEBDCF8920CEB1CF80CF8C20CF84CEBF20CF84CEB5CEBCCF80CEADCEBBCEB9CEBACEBF20CEBACEB1CF86CEAD20CF83CEBACF85CEBBCEAF}504do_test 2.31 {505  set result "\n[db format -widths {5 -5 18} -wordwrap on \506                 {SELECT * FROM t1}]"507} {508╭───────┬───────┬────────────────────╮509│   a   │   b   │         c          │510╞═══════╪═══════╪════════════════════╡511│     1 │     2 │ Η γρήγορη αλεπού   │512│       │       │ πηδάει πάνω από το │513│       │       │ τεμπέλικο καφέ     │514│       │       │ σκυλί              │515╰───────┴───────┴────────────────────╯516}517do_test 2.32 {518  set result "\n[db format -widths {5 5 18} -align {left center center} -wordwrap on \519                 {SELECT * FROM t1}]"520} {521╭───────┬───────┬────────────────────╮522│   a   │   b   │         c          │523╞═══════╪═══════╪════════════════════╡524│ 1     │   2   │  Η γρήγορη αλεπού  │525│       │       │ πηδάει πάνω από το │526│       │       │   τεμπέλικο καφέ   │527│       │       │       σκυλί        │528╰───────┴───────┴────────────────────╯529}530 531 532do_execsql_test 3.0 {533  DELETE FROM t1;534  INSERT INTO t1 VALUES(1,2,unistr('abc\u001b[1;31m123\u001b[0mxyz'));535}536do_test 3.1 {537  set result "\n[db format {SELECT * FROM t1}]"538} {539╭───┬───┬────────────────────────╮540│ a │ b │           c            │541╞═══╪═══╪════════════════════════╡542│ 1 │ 2 │ abc^[[1;31m123^[[0mxyz │543╰───┴───┴────────────────────────╯544}545do_test 3.2 {546  set result "\n[db format -esc off {SELECT * FROM t1}]"547  string map [list \033 X] $result548} {549╭───┬───┬───────────╮550│ a │ b │     c     │551╞═══╪═══╪═══════════╡552│ 1 │ 2 │ abcX[1;31m123X[0mxyz │553╰───┴───┴───────────╯554}555do_test 3.3 {556  set result "\n[db format -esc symbol {SELECT * FROM t1}]"557} {558╭───┬───┬──────────────────────╮559│ a │ b │          c           │560╞═══╪═══╪══════════════════════╡561│ 1 │ 2 │ abc␛[1;31m123␛[0mxyz │562╰───┴───┴──────────────────────╯563}564do_test 3.4 {565  set result "\n[db format -esc ascii {SELECT * FROM t1}]"566} {567╭───┬───┬────────────────────────╮568│ a │ b │           c            │569╞═══╪═══╪════════════════════════╡570│ 1 │ 2 │ abc^[[1;31m123^[[0mxyz │571╰───┴───┴────────────────────────╯572}573do_test 3.5 {574  catch {db format -esc unk {SELECT * FROM t1}} res575  set res576} {bad control character escape (-esc) "unk": must be ascii, auto, off, or symbol}577 578do_execsql_test 4.0 {579  DELETE FROM t1;580  INSERT INTO t1 VALUES(json('{a:5,b:6}'), jsonb('{c:1,d:2}'), 99);581}582do_test 4.1 {583  set result "\n[db format -text sql {SELECT * FROM t1}]"584} {585╭─────────────────┬───────────────────────┬────╮586│        a        │           b           │ c  │587╞═════════════════╪═══════════════════════╪════╡588│ '{"a":5,"b":6}' │ x'8c1763133117641332' │ 99 │589╰─────────────────┴───────────────────────┴────╯590}591do_test 4.2 {592  set result "\n[db format -text sql -textjsonb on {SELECT * FROM t1}]"593} {594╭─────────────────┬────────────────────────┬────╮595│        a        │           b            │ c  │596╞═════════════════╪════════════════════════╪════╡597│ '{"a":5,"b":6}' │ jsonb('{"c":1,"d":2}') │ 99 │598╰─────────────────┴────────────────────────┴────╯599}600do_test 4.3 {601  set result "\n[db format -text plain -textjsonb on -wrap 11 \602              {SELECT a AS json, b AS jsonb, c AS num FROM t1}]"603} {604╭─────────────┬─────────────┬─────╮605│    json     │    jsonb    │ num │606╞═════════════╪═════════════╪═════╡607│ {"a":5,"b": │ {"c":1,"d": │  99 │608│ 6}          │ 2}          │     │609╰─────────────┴─────────────┴─────╯610}611 612do_execsql_test 5.0 {613  DROP TABLE t1;614  CREATE TABLE t1(name, mtime, value);615  INSERT INTO t1 VALUES616    ('entry-one',1708791504,zeroblob(300)),617    (unistr('one\u000atwo\u000athree'),1333206973,NULL),618    ('sample-jsonb',1333101221,jsonb('{619       "alpha":53.11688723,620       "beta":"qrfWidthPrint(p, p->pOut, -p->u.sLine.mxColWth);",621       "zeta":[15,null,1333206973,"fd8ffe000104a46494600010101"]}'));622}623do_test 5.1 {624  set sql {SELECT name, mtime, datetime(mtime,'unixepoch') AS time,625                        value FROM t1 ORDER BY mtime}626  set result "\n[db format -style line -screenwidth 60 -blob sql \627                   -text sql -wordwrap off -linelimit 77 \628                   -columnsep { = } $sql]"629} {630 name = 'sample-jsonb'631mtime = 1333101221632 time = '2012-03-30 09:53:41'633value = x'cc7c57616c706861b535332e31313638383732334762657461634        c73071726657696474685072696e7428702c20702d3e704f7574635        2c202d702d3e752e734c696e652e6d78436f6c577468293b477a636        657461cb2c23313500a331333333323036393733c71b66643866637        6665303030313034613436343934363030303130313031'638 639 name = unistr('one\u000atwo\u000athree')640mtime = 1333206973641 time = '2012-03-31 15:16:13'642value = 643 644 name = 'entry-one'645mtime = 1708791504646 time = '2024-02-24 16:18:24'647value = x'00000000000000000000000000000000000000000000000000648        0000000000000000000000000000000000000000000000000000649        0000000000000000000000000000000000000000000000000000650        0000000000000000000000000000000000000000000000000000651        0000000000000000000000000000000000000000000000000000652        0000000000000000000000000000000000000000000000000000653        0000000000000000000000000000000000000000000000000000654        0000000000000000000000000000000000000000000000000000655        0000000000000000000000000000000000000000000000000000656        0000000000000000000000000000000000000000000000000000657        0000000000000000000000000000000000000000000000000000658        000000000000000000000000000000'659}660do_test 5.2a {661  set sql {SELECT name, mtime, datetime(mtime,'unixepoch') AS time,662                        value FROM t1 ORDER BY mtime}663  set result "\n[db format -style line -screenwidth 60 -blob sql \664                   -text plain -esc off -textjsonb yes -columnsep { = }\665                   -wordwrap yes -linelimit 3 $sql]"666} {667 name = sample-jsonb668mtime = 1333101221669 time = 2012-03-30 09:53:41670value = {"alpha":53.11688723,"beta":"qrfWidthPrint(p,671        p->pOut, -p->u.sLine.mxColWth);","zeta":[15,null,672        1333206973,"fd8ffe000104a46494600010101"]}673 674 name = one675        two676        three677mtime = 1333206973678 time = 2012-03-31 15:16:13679value = 680 681 name = entry-one682mtime = 1708791504683 time = 2024-02-24 16:18:24684value = x'00000000000000000000000000000000000000000000000000685        0000000000000000000000000000000000000000000000000000686        0000000000000000000000000000000000000000000000000000687        ...688}689set sqlnolabel "SELECT name, mtime, datetime(mtime,'unixepoch'),\690                      value FROM t1 ORDER BY mtime"691do_test 5.2b {692  set result "\n[db format -style line -screenwidth 60 -blob sql \693                   -text plain -esc off -textjsonb no -titlelimit 12 \694                   -wordwrap yes -linelimit 3 $sqlnolabel ]"695} {696        name: sample-jsonb697       mtime: 1333101221698datetime(...: 2012-03-30 09:53:41699       value: x'cc7c57616c706861b535332e31313638383732334762700               657461c73071726657696474685072696e7428702c2070701               2d3e704f75742c202d702d3e752e734c696e652e6d7843702               ...703 704        name: one705               two706               three707       mtime: 1333206973708datetime(...: 2012-03-31 15:16:13709       value: 710 711        name: entry-one712       mtime: 1708791504713datetime(...: 2024-02-24 16:18:24714       value: x'00000000000000000000000000000000000000000000715               0000000000000000000000000000000000000000000000716               0000000000000000000000000000000000000000000000717               ...718}719set sql "SELECT name, mtime, datetime(mtime,'unixepoch') AS time,\720                      value FROM t1 ORDER BY mtime"721do_test 5.3a {722  set result "\n[db format -style box -widths {0 10 10 14}\723                 -align {left right right center} \724                 -blob sql \725                 -text plain -esc off -textjsonb no \726                   -wordwrap yes -linelimit 2 $sql]"727} {728╭──────────────┬────────────┬────────────┬────────────────╮729│     name     │   mtime    │    time    │     value      │730╞══════════════╪════════════╪════════════╪════════════════╡731│ sample-jsonb │ 1333101221 │ 2012-03-30 │ x'cc7c57616c70 │732│              │            │   09:53:41 │ 6861b535332e31 │733│              │            │            │      ...       │734├──────────────┼────────────┼────────────┼────────────────┤735│ one          │ 1333206973 │ 2012-03-31 │                │736│ two          │            │   15:16:13 │                │737│ ...          │            │            │                │738├──────────────┼────────────┼────────────┼────────────────┤739│ entry-one    │ 1708791504 │ 2024-02-24 │ x'000000000000 │740│              │            │   16:18:24 │ 00000000000000 │741│              │            │            │      ...       │742╰──────────────┴────────────┴────────────┴────────────────╯743}744do_test 5.3b {745  set result "\n[db format -style box -widths {0 10 0 14} \746                 -align {left right right center} \747                 -blob sql -titlelimit 12 \748                 -text plain -esc off -textjsonb no \749                   -wordwrap yes -linelimit 2 $sqlnolabel ]"750} {751╭──────────────┬────────────┬─────────────────────┬────────────────╮752│     name     │   mtime    │    datetime(...     │     value      │753╞══════════════╪════════════╪═════════════════════╪════════════════╡754│ sample-jsonb │ 1333101221 │ 2012-03-30 09:53:41 │ x'cc7c57616c70 │755│              │            │                     │ 6861b535332e31 │756│              │            │                     │      ...       │757├──────────────┼────────────┼─────────────────────┼────────────────┤758│ one          │ 1333206973 │ 2012-03-31 15:16:13 │                │759│ two          │            │                     │                │760│ ...          │            │                     │                │761├──────────────┼────────────┼─────────────────────┼────────────────┤762│ entry-one    │ 1708791504 │ 2024-02-24 16:18:24 │ x'000000000000 │763│              │            │                     │ 00000000000000 │764│              │            │                     │      ...       │765╰──────────────┴────────────┴─────────────────────┴────────────────╯766}767do_test 5.3c {768  set result "\n[db format -style table -widths {0 10 10 14}\769                 -align {center right right right} \770                 -blob sql \771                 -text plain -esc off -textjsonb no \772                   -wordwrap yes -linelimit 2 $sql]"773} {774+--------------+------------+------------+----------------+775|     name     |   mtime    |    time    |     value      |776+--------------+------------+------------+----------------+777| sample-jsonb | 1333101221 | 2012-03-30 | x'cc7c57616c70 |778|              |            |   09:53:41 | 6861b535332e31 |779|              |            |            |            ... |780+--------------+------------+------------+----------------+781|     one      | 1333206973 | 2012-03-31 |                |782|     two      |            |   15:16:13 |                |783|     ...      |            |            |                |784+--------------+------------+------------+----------------+785|  entry-one   | 1708791504 | 2024-02-24 | x'000000000000 |786|              |            |   16:18:24 | 00000000000000 |787|              |            |            |            ... |788+--------------+------------+------------+----------------+789}790do_test 5.3c {791  set result "\n[db format -style column -widths {0 10 10 14}\792                 -align {center right right right} \793                 -blob sql \794                 -text plain -esc off -textjsonb no \795                   -wordwrap yes -linelimit 2 $sql]"796} {797    name        mtime        time         value798------------  ----------  ----------  --------------799sample-jsonb  1333101221  2012-03-30  x'cc7c57616c70800                            09:53:41  6861b535332e31801                                                 ...802 803    one       1333206973  2012-03-31804    two                     15:16:13805    ...806 807 entry-one    1708791504  2024-02-24  x'000000000000808                            16:18:24  00000000000000809                                                 ...810}811do_test 5.4 {812  db eval {813    CREATE TABLE t2(a,b,c,d,e);814    WITH v(x) AS (SELECT 'abcdefghijklmnopqrstuvwxyz')815    INSERT INTO t2 SELECT x,x,x,x,x FROM v;816  }817  set sql {SELECT char(0x61,0xa,0x62,0xa,0x63,0xa,0x64) a,818           mtime b, mtime c, mtime d, mtime e FROM t1}819  set result "\n[db format -style box -widths {1 2 3 4 5}\820                -linelimit 3 -wordwrap off {SELECT *, 'x' AS x FROM t2}]"821} {822╭────┬────┬─────┬──────┬───────┬───╮823│ a  │ b  │  c  │  d   │   e   │ x │824╞════╪════╪═════╪══════╪═══════╪═══╡825│ ab │ ab │ abc │ abcd │ abcde │ x │826│ cd │ cd │ def │ efgh │ fghij │   │827│ ef │ ef │ ghi │ ijkl │ klmno │   │828│ .. │ .. │ ... │ ...  │ ...   │   │829╰────┴────┴─────┴──────┴───────┴───╯830}831 832do_execsql_test 6.0 {833  DELETE FROM t2;834  INSERT INTO t2 VALUES835     (1, 2.5, 'three', x'342028666f757229', null);836}837do_test 6.1a {838  set result "\n[db format -style list -null NULL \839                 -text tcl -columnsep , \840                 {SELECT * FROM t2}]"841} {8421,2.5,"three","\064\040\050\146\157\165\162\051",NULL843}844 845do_execsql_test 7.0 {846  CREATE TABLE t7(a,b);847  INSERT INTO t7 VALUES('abcdefghijklmnop',848    'abcぁdefかghiのjklはmnop');849}850do_test 7.1 {851  set result "\n[db format -style list -charlimit 13 \852                 {SELECT * FROM t7}]"853} {854abcdefghijklm...|abcぁdefかghi...855}856do_test 7.2 {857  set result "\n[db format -style list -charlimit 14 \858                 {SELECT * FROM t7}]"859} {860abcdefghijklmn...|abcぁdefかghi...861}862do_test 7.3 {863  set result "\n[db format -style list -charlimit 15 \864                 {SELECT * FROM t7}]"865} {866abcdefghijklmno...|abcぁdefかghiの...867}868do_test 7.4 {869  set result "\n[db format -style list -charlimit 16 \870                 {SELECT * FROM t7}]"871} {872abcdefghijklmnop|abcぁdefかghiのj...873}874 875do_test 8.0 {876  set result "\n[db format -style table {877    WITH c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<10)878    SELECT 'aaa' AS 'a', format('%.*c',n,'b')||char(9)||'xx' AS x FROM c}]"879} {880+-----+--------------------+881|  a  |         x          |882+-----+--------------------+883| aaa | b       xx         |884| aaa | bb      xx         |885| aaa | bbb     xx         |886| aaa | bbbb    xx         |887| aaa | bbbbb   xx         |888| aaa | bbbbbb  xx         |889| aaa | bbbbbbb xx         |890| aaa | bbbbbbbb        xx |891| aaa | bbbbbbbbb       xx |892| aaa | bbbbbbbbbb      xx |893+-----+--------------------+894}895do_test 8.1 {896  set result "\n[db format -style table {897    WITH c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<10)898    SELECT 'aaaa' AS 'a', format('%.*c',n,'b')||char(9)||'xx' AS x FROM c}]"899} {900+------+--------------------+901|  a   |         x          |902+------+--------------------+903| aaaa | b       xx         |904| aaaa | bb      xx         |905| aaaa | bbb     xx         |906| aaaa | bbbb    xx         |907| aaaa | bbbbb   xx         |908| aaaa | bbbbbb  xx         |909| aaaa | bbbbbbb xx         |910| aaaa | bbbbbbbb        xx |911| aaaa | bbbbbbbbb       xx |912| aaaa | bbbbbbbbbb      xx |913+------+--------------------+914}915do_test 8.3 {916  set result "\n[db format -style table -esc off {917    WITH c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<15)918    SELECT 'aaa' AS 'a',n, 'xx'||char(n)||'yy' AS xy FROM c919     WHERE n NOT IN (8,10,13,14)}]"920} {921+-----+----+------------+922|  a  | n  |     xy     |923+-----+----+------------+924| aaa | 1  | xx␁yy      |925| aaa | 2  | xx␂yy      |926| aaa | 3  | xx␃yy      |927| aaa | 4  | xx␄yy      |928| aaa | 5  | xx␅yy      |929| aaa | 6  | xx␆yy      |930| aaa | 7  | xx␇yy      |931| aaa | 9  | xx      yy |932| aaa | 11 | xx␋yy      |933| aaa | 12 | xx␌yy      |934| aaa | 15 | xx␏yy      |935+-----+----+------------+936}937do_test 8.4 {938  set result "\n[db format -style table -esc off {939    WITH c(n) AS (VALUES(1) UNION ALL SELECT n+1 FROM c WHERE n<15)940    SELECT 'aaa' AS 'a',n, 'xx'||char(n)||'yy'||char(9)||'zz' AS xyz FROM c941     WHERE n NOT IN (8,10,13,14)}]"942} {943+-----+----+--------------------+944|  a  | n  |        xyz         |945+-----+----+--------------------+946| aaa | 1  | xx␁yy   zz         |947| aaa | 2  | xx␂yy   zz         |948| aaa | 3  | xx␃yy   zz         |949| aaa | 4  | xx␄yy   zz         |950| aaa | 5  | xx␅yy   zz         |951| aaa | 6  | xx␆yy   zz         |952| aaa | 7  | xx␇yy   zz         |953| aaa | 9  | xx      yy      zz |954| aaa | 11 | xx␋yy   zz         |955| aaa | 12 | xx␌yy   zz         |956| aaa | 15 | xx␏yy   zz         |957+-----+----+--------------------+958}959 960do_test 9.1 {961  db eval {962    CREATE TABLE t9(x);963    INSERT INTO t9 VALUES964      (x'4331323334'),965      (x'c30431323334'),966      (x'd3000431323334'),967      (x'e30000000431323334'),968      (x'f3000000000000000431323334');969  }970  db format -style list -text plain -rowsep , -textjsonb on \971               {SELECT * FROM t9}972} {1234,1234,1234,1234,1234,}973do_test 9.2 {974  db format -style list -text sql -rowsep , -textjsonb on \975               {SELECT * FROM t9}976} {jsonb('1234'),jsonb('1234'),jsonb('1234'),jsonb('1234'),jsonb('1234'),}977do_test 9.3 {978  db format -style json  {SELECT * FROM t9 WHERE rowid<0}979} {}980do_test 9.4 {981  db format -style jobject  {SELECT * FROM t9 WHERE rowid<0}982} {}983 984do_test 10.1 {985  db eval {986    DROP TABLE IF EXISTS t1;987    CREATE TABLE t1(x);988    INSERT INTO t1(x) VALUES989      ('alice'),990      ('bob'),991      ('cinderella-cinderella'),992      ('daniel'),993      ('emma'),994      ('fred'),995      ('gertrude'),996      ('harold'),997      ('ingrid'),998      ('jake'),999      ('lisa'),1000      ('mike'),1001      ('nina'),1002      ('octavian'),1003      ('paula'),1004      ('quintus'),1005      ('rita'),1006      ('sam'),1007      ('tammy'),1008      ('ulysses'),1009      ('violet'),1010      ('william'),1011      ('xanthippe'),1012      ('yates'),1013      ('zoe');1014  }1015  set result "\n[db format -style column -title off -screenwidth 41 -splitcolumn on \1016                    {SELECT x FROM t1}]"1017} {1018alice                  octavian1019bob                    paula1020cinderella-cinderella  quintus1021daniel                 rita1022emma                   sam1023fred                   tammy1024gertrude               ulysses1025harold                 violet1026ingrid                 william1027jake                   xanthippe1028lisa                   yates1029mike                   zoe1030nina1031}1032do_test 10.2 {1033  set result "\n[db format -style column -title off -screenwidth 42 -splitcolumn on \1034                    {SELECT x FROM t1}]"1035} {1036alice                  jake      tammy1037bob                    lisa      ulysses1038cinderella-cinderella  mike      violet1039daniel                 nina      william1040emma                   octavian  xanthippe1041fred                   paula     yates1042gertrude               quintus   zoe1043harold                 rita1044ingrid                 sam1045}1046do_test 10.3 {1047  set result "\n[db format -style column -title off -screenwidth 51 -splitcolumn on \1048                    {SELECT x FROM t1}]"1049} {1050alice                  harold    paula    william1051bob                    ingrid    quintus  xanthippe1052cinderella-cinderella  jake      rita     yates1053daniel                 lisa      sam      zoe1054emma                   mike      tammy1055fred                   nina      ulysses1056gertrude               octavian  violet1057}1058do_test 10.4 {1059  set result "\n[db format -style column -title off -screenwidth 61 -splitcolumn on \1060                    {SELECT x FROM t1}]"1061} {1062alice                  fred      lisa      quintus  violet1063bob                    gertrude  mike      rita     william1064cinderella-cinderella  harold    nina      sam      xanthippe1065daniel                 ingrid    octavian  tammy    yates1066emma                   jake      paula     ulysses  zoe1067}1068do_test 10.5 {1069  set result "\n[db format -style column -title off -screenwidth 74 -splitcolumn on \1070                    {SELECT x FROM t1}]"1071} {1072alice                  emma      ingrid  nina      rita     violet     zoe1073bob                    fred      jake    octavian  sam      william1074cinderella-cinderella  gertrude  lisa    paula     tammy    xanthippe1075daniel                 harold    mike    quintus   ulysses  yates1076}1077 1078do_test 11.1 {1079  set result "\n[db format -style table -blob size {SELECT randomblob(1234)}]"1080} {1081+------------------+1082| randomblob(1234) |1083+------------------+1084| (1234-byte blob) |1085+------------------+1086}1087 1088do_test 12.1 {1089  set result "\n[db format -style box -text html \1090                  {SELECT 'abc','','xyz'}]"1091} {1092╭───────┬────┬───────╮1093│ 'abc' │ '' │ 'xyz' │1094╞═══════╪════╪═══════╡1095│ abc   │    │ xyz   │1096╰───────┴────┴───────╯1097}1098 1099# Tests for "relaxed" quoting1100#1101do_test 13.2 {1102  db eval {1103    CREATE TABLE t13(a,b);1104    INSERT INTO t13(a,b) VALUES1105      (1,'NULL'),1106      (0,'-NULL-'),1107      (0,''),1108      (1,'''abcde'),1109      (1,'abcde'''),1110      (0,'abcde'),1111      (1,' abcde'),1112      (1,'abcde '),1113      (1,'+0'),1114      (1,'-0'),1115      (1,'012345'),1116      (0,'012xyz345'),1117      (1,'0123.45'),1118      (0,'12.34.56'),1119      (0,'12.3e'),1120      (1,'12.3e+123'),1121      (1,'12.3e-34'),1122      (1,'12.3E56'),1123      (1,'12E56'),1124      (0,'12.5E5.6'),1125      (0,'12.5e+'),1126      (0,'12.5e-'),1127      (1,'+Inf'),(1,'-Inf'),(1,'Inf');1128  }1129  set result \n[db format -style box -text relaxed -null NULL \1130                 -align {center left} \1131                 {SELECT if(a,'yes','') AS 'quoted?', b AS string1132                   FROM t13 ORDER BY rowid}]1133} {1134╭─────────┬─────────────╮1135│ quoted? │   string    │1136╞═════════╪═════════════╡1137│   yes   │ 'NULL'      │1138│         │ -NULL-      │1139│         │             │1140│   yes   │ '''abcde'   │1141│   yes   │ 'abcde'''   │1142│         │ abcde       │1143│   yes   │ ' abcde'    │1144│   yes   │ 'abcde '    │1145│   yes   │ '+0'        │1146│   yes   │ '-0'        │1147│   yes   │ '012345'    │1148│         │ 012xyz345   │1149│   yes   │ '0123.45'   │1150│         │ 12.34.56    │1151│         │ 12.3e       │1152│   yes   │ '12.3e+123' │1153│   yes   │ '12.3e-34'  │1154│   yes   │ '12.3E56'   │1155│   yes   │ '12E56'     │1156│         │ 12.5E5.6    │1157│         │ 12.5e+      │1158│         │ 12.5e-      │1159│   yes   │ '+Inf'      │1160│   yes   │ '-Inf'      │1161│   yes   │ 'Inf'       │1162╰─────────┴─────────────╯1163}1164 1165db close1166 1167finish_test1168