]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Name changes. QRF_TEXT_Off becomes QRF_TEXT_Plain. mxTotalWidth becomes
authordrh <>
Sat, 8 Nov 2025 22:46:29 +0000 (22:46 +0000)
committerdrh <>
Sat, 8 Nov 2025 22:46:29 +0000 (22:46 +0000)
nScreenWidth.

FossilOrigin-Name: 871567e377e976e0bb191d466019d1d4abe126f2da1880f1e25cd92b06a666d1

ext/qrf/README.md
ext/qrf/qrf.c
ext/qrf/qrf.h
manifest
manifest.uuid
src/tclsqlite.c
test/qrf01.test

index 2b8709174d0acc44e02371d2172f11fa26a92f1b..ad85a5275eccd1ebb3791420f3b047309420ff84 100644 (file)
@@ -77,7 +77,7 @@ struct sqlite3_qrf_spec {
   unsigned char bWordWrap;    /* Try to wrap on word boundaries */
   unsigned char bTextJsonb;   /* Render JSONB blobs as JSON text */
   short int mxColWidth;       /* Maximum width of any individual column */
-  short int mxTotalWidth;     /* Maximum overall table width */
+  short int nScreenWidth;     /* Try to keep output short so that it fits */
   short int mxRowHeight;      /* Maximum number of lines for any row */
   int mxLength;               /* Maximum content to display per element */
   int nWidth;                 /* Number of entries in aWidth[] */
@@ -207,7 +207,7 @@ Both fields can have one of the following values:
 
 > ~~~
 #define QRF_TEXT_Auto    0 /* Choose text encoding automatically */
-#define QRF_TEXT_Off     1 /* Literal text */
+#define QRF_TEXT_Plain   1 /* Literal text */
 #define QRF_TEXT_Sql     2 /* Quote as an SQL literal */
 #define QRF_TEXT_Csv     3 /* CSV-style quoting */
 #define QRF_TEXT_Html    4 /* HTML-style quoting */
@@ -218,7 +218,7 @@ Both fields can have one of the following values:
 A value of QRF_TEXT_Auto means that the query result formatter will choose
 what it thinks will be the best text encoding.
 
-A value of QRF_TEXT_Off means that text values appear in the output exactly
+A value of QRF_TEXT_Plain means that text values appear in the output exactly
 as they are found in the database file, with no translation.
 
 A value of QRF_TEXT_Sql means that text values are escaped so that they
@@ -306,37 +306,42 @@ mxLength setting.
 As for 2025-11-07, the mxLength constraint is not yet implemented.
 The current behavior is always as if mxLength where zero.*
 
-### 2.9 Word Wrapping In Columnar Styles (mxColWidth, mxTotalWidth, bWordWrap)
+### 2.9 Word Wrapping In Columnar Styles (mxColWidth, bWordWrap)
 
 When using columnar formatting modes (QRF_STYLE_Box, QRF_STYLE_Column,
 QRF_STYLE_Markdown, or QRF_STYLE_Table), the formatter attempts to limit
 the width of any individual column to sqlite3_qrf_spec.mxColWidth characters
 if mxColWidth is non-zero.  A zero value for mxColWidth means "unlimited".
-The formatter also attempts to limit the width of the entire table to
-no more than sqlite3_qrf_spec.mxTotalWidth characters.  Again, a zero
-value means "no-limit".
-
 The mxColWidth limit might be exceeded if the limit is very small.
-The mxTotalWidth is "best effort"; the formatter might go significantly
-beyond the mxTotalWidth if the table has too many columns
-to squeeze into the specified space.
-
-In order to keep individual columns, or the entire table, within
-requested width limits, it is sometimes necessary to wrap the content
-for a single row of a single column across multiple lines.  When this
-becomes necessary and if the bWordWrap setting is QRF_SW_On, then the
+
+In order to keep individual columns within requested width limits,
+it is sometimes necessary to wrap the content for a single row of
+a single column across multiple lines.  When this
+becomes necessary and if the bWordWrap setting is QRF_Yes, then the
 formatter attempts to split the content on whitespace or at a word boundary.
-If bWordWrap is QRF_SW_Off, then the formatter is free to split content
+If bWordWrap is QRF_No, then the formatter is free to split content
 anywhere, including in the middle of a word.
 
 For narrow columns and wide words, it might sometimes be necessary to split
-a column in the middle of a word, even when bWordWrap is QRF_SW_On.
+a column in the middle of a word, even when bWordWrap is QRF_Yes.
+
+### 2.10 Helping The Output To Fit On The Terminal (nScreenWidth)
+
+The sqlite3_qrf_spec.nScreenWidth field can be set the number of
+characters that will fit on one line on the viewer output device.
+This is typically a number like 80 or 132.  The formatter will attempt
+to reduce the length of output lines, depending on the style, so
+that all output fits on that screen.
+
+A value of zero for nScreenWidth means "unknown" or "no width limit".
+When the value is zero, the formatter makes no attempt to keep the
+lines of output short.
 
-*The mxTotalWidth setting is a place-holder.
-As for 2025-11-07, the mxTotalWidth constraint is not yet implemented.
-The current behavior is always as if mxTotalWidth where zero.*
+The nScreenWidth is a hint to the formatter, not a requirement.
+The formatter trieds to keep lines below the nScreenWidth limit,
+but it does not guarantee that it will.
 
-### 2.10 Individual Column Width (nWidth and aWidth)
+### 2.11 Individual Column Width (nWidth and aWidth)
 
 The sqlite3_qrf_spec.aWidth field is a pointer to an array of
 signed 16-bit integers that control the width of individual columns
@@ -374,7 +379,7 @@ Again, negative values for aWidth\[\] entries are supported for
 backwards compatibility only, and are not recommended for new
 applications.
 
-### 2.11 Alignment (nAlignment, aAlignment, eDfltAlign, eTitleAlign)
+### 2.12 Alignment (nAlignment, aAlignment, eDfltAlign, eTitleAlign)
 
 Some cells in a display table might contain a lot of text and thus
 be wide, or they might contain newline characters or be wrapped by
@@ -452,7 +457,7 @@ specify a vertical alignment, then values are top-aligned
 The vertical alignment settings are currently ignored and 
 the vertical alignment is always QRF_ALIGN_Top.*
 
-### 2.12 Row and Column Separator Strings
+### 2.13 Row and Column Separator Strings
 
 The sqlite3_qrf_spec.zColumnSep and sqlite3_qrf_spec.zRowSep strings
 are alternative column and row separator character sequences.  If not
@@ -460,18 +465,18 @@ specified (if these pointers are left as NULL) then appropriate defaults
 are used.  Some output styles have hard-coded column and row separators
 and these settings are ignored for those styles.
 
-### 2.13 The Output Table Name
+### 2.14 The Output Table Name
 
 The sqlite3_qrf_spec.zTableName value is the name of the output table
 when eStyle is QRF_STYLE_Insert.
 
-### 2.14 The Rendering Of NULL
+### 2.15 The Rendering Of NULL
 
 If a value is NULL then show the NULL using the string
 found in sqlite3_qrf_spec.zNull.  If zNull is itself a NULL pointer
 then NULL values are rendered as an empty string.
 
-### 2.15 Optional Value Rendering Callback
+### 2.16 Optional Value Rendering Callback
 
 If the sqlite3_qrf_spec.xRender field is not NULL, then each
 sqlite3_value coming out of the query is first passed to the
@@ -579,7 +584,7 @@ same line, each separated by a single "`|`" character and with lines
 terminated by a single newline (\\u000a or \\n).  These column
 and row separator choices can be overridden using the zColumnSep
 and zRowSep fields of the `sqlite3_qrf_spec` structure.  The text
-formatting is QRF_TEXT_Off, and BLOB encoding is QRF_BLOB_Text.  So
+formatting is QRF_TEXT_Plain, and BLOB encoding is QRF_BLOB_Text.  So
 characters appear in the output exactly as they appear in the database.
 Except the eEsp mode defaults to `QRF_ESC_On`, so that control
 characters are escaped, for safety.
index f1e28fd2b79dceeb4b18c9cc21225a605fee031f..a5129aee7b11c95d0ed5a75e1ea198f9024cac05 100644 (file)
@@ -1371,7 +1371,7 @@ static void qrfColumnar(Qrf *p){
     data.aiCol[i] = w;
   }
 
-  /* TBD: Narrow columns so that the total is less than p->spec.mxTotalWidth */
+  /* TBD: Narrow columns so that the total is less than p->spec.nScreenWidth */
 
   /* Draw the line across the top of the table.  Also initialize
   ** the row boundary and column separator texts. */
@@ -1818,14 +1818,14 @@ qrf_reinit:
     p->spec.eEsc = QRF_ESC_Ascii;
   }
   if( p->spec.eText==QRF_Auto ){
-    p->spec.eText = QRF_TEXT_Off;
+    p->spec.eText = QRF_TEXT_Plain;
   }
   if( p->spec.eTitle==QRF_Auto ){
     switch( p->spec.eStyle ){
       case QRF_STYLE_Box:
       case QRF_STYLE_Column:
       case QRF_STYLE_Table:
-        p->spec.eTitle = QRF_TEXT_Off;
+        p->spec.eTitle = QRF_TEXT_Plain;
         break;
       default:
         p->spec.eTitle = p->spec.eText;
@@ -2002,7 +2002,7 @@ static void qrfOneSimpleRow(Qrf *p){
       }
       if( p->nRow ) sqlite3_str_append(p->pOut, "\n", 1);
       pVal = sqlite3_str_new(p->db);
-      mxW = p->spec.mxTotalWidth ? p->spec.mxTotalWidth : QRF_MAX_WIDTH;
+      mxW = p->spec.nScreenWidth ? p->spec.nScreenWidth : QRF_MAX_WIDTH;
       mxW -= 3 + p->u.sLine.mxColWth;
       bWW = p->spec.bWordWrap==QRF_Yes;
       for(i=0; i<p->nCol; i++){
index 8882389f763fde7078cfaa2122549e33ebea6437..7094ce0544b23afab113b8ea638e237f8108c2af 100644 (file)
@@ -34,7 +34,7 @@ struct sqlite3_qrf_spec {
   unsigned char eDfltAlign;   /* Default alignment, no covered by aAlignment */
   unsigned char eTitleAlign;  /* Alignment for column headers */
   short int mxColWidth;       /* Maximum width of any individual column */
-  short int mxTotalWidth;     /* Maximum overall table width */
+  short int nScreenWidth;     /* Maximum overall table width */
   short int mxRowHeight;      /* Maximum number of lines for any row */
   int mxLength;               /* Maximum content to display per element */
   int nWidth;                 /* Number of entries in aWidth[] */
@@ -64,7 +64,7 @@ int sqlite3_format_query_result(
 
 /*
 ** Range of values for sqlite3_qrf_spec.aWidth[] entries and for
-** sqlite3_qrf_spec.mxColWidth and .mxTotalWidth
+** sqlite3_qrf_spec.mxColWidth and .nScreenWidth
 */
 #define QRF_MAX_WIDTH    10000
 #define QRF_MIN_WIDTH    0
@@ -98,7 +98,7 @@ int sqlite3_format_query_result(
 ** Allowed values for sqlite3_qrf_spec.eText
 */
 #define QRF_TEXT_Auto    0 /* Choose text encoding automatically */
-#define QRF_TEXT_Off     1 /* Literal text */
+#define QRF_TEXT_Plain   1 /* Literal text */
 #define QRF_TEXT_Sql     2 /* Quote as an SQL literal */
 #define QRF_TEXT_Csv     3 /* CSV-style quoting */
 #define QRF_TEXT_Html    4 /* HTML-style quoting */
index 75fee92fc7fa4840d128e64550a53b74cc6a3ab9..e8647c10998508c29a861b185131b7e0742fb6bf 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improvements\sto\sQRF_STYLE_Line.\s\sMake\sit\sresponsive\sto\smxTotalWidth\sand\nmxRowHeight.\s\sIndent\ssubsequent\slines\sappropriately.\s\sAdd\scorresponding\ntest\scases.
-D 2025-11-08T18:31:57.772
+C Name\schanges.\s\sQRF_TEXT_Off\sbecomes\sQRF_TEXT_Plain.\s\smxTotalWidth\sbecomes\nnScreenWidth.
+D 2025-11-08T22:46:29.898
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -416,9 +416,9 @@ F ext/misc/wholenumber.c 0fa0c082676b7868bf2fa918e911133f2b349bcdceabd1198bba5f6
 F ext/misc/windirent.h 02211ce51f3034c675f2dbf4d228194d51b3ee05734678bad5106fff6292e60c
 F ext/misc/zipfile.c 09e6e3a3ff40a99677de3c0bc6569bd5f4709b1844ac3d1c1452a456c5a62f1c
 F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
-F ext/qrf/README.md 7c32e08e1cc5bb704f243a641ddfaf2f00152bbeb62c3a621efcf9371e6b156b
-F ext/qrf/qrf.c d3e4b93a3324d904f0e56eb198caac51d361aa0f6df5bc89433a445517321205
-F ext/qrf/qrf.h 3917767fdd7547bded156327f2b6bf3e1dbf6c7ea787f67f31453815986fe780
+F ext/qrf/README.md 5011393a53bfb26b59488e5d8d8576de521058876b61318d4fe476375a4ae9a2
+F ext/qrf/qrf.c aefc0febac369be026fb91830112c6ccec9f63c457bda0a502d69e123d89c8bd
+F ext/qrf/qrf.h 49a106a7484c9761bb66bebe0043fbf43302624734a9f9734e0fa410a908e525
 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
 F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
 F ext/rbu/rbu10.test 7c22caa32c2ff26983ca8320779a31495a6555737684af7aba3daaf762ef3363
@@ -743,7 +743,7 @@ F src/sqliteInt.h 88f7fc9ce1630d9a5f7e0a8e1f3287cdc63882fba985c18e7eee1b9f457f59
 F src/sqliteLimit.h fe70bd8983e5d317a264f2ea97473b359faf3ebb0827877a76813f5cf0cdc364
 F src/status.c 7565d63a79aa2f326339a24a0461a60096d0bd2bce711fefb50b5c89335f3592
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
-F src/tclsqlite.c c2b9e546a4bf533de0a3a45c05823132f3affe013ac2cd21825ef28125acd162
+F src/tclsqlite.c 667adb8b432f95ca79a86024fff4fd76f503fc8db72ea29b6f4d0b0d4382518a
 F src/tclsqlite.h 614b3780a62522bc9f8f2b9fb22689e8009958e7aa77e572d0f3149050af348a
 F src/test1.c f880ab766eeedf2c063662bd9538b923fd42c4341b7bfc2150a6d93ab8b9341c
 F src/test2.c 62f0830958f9075692c29c6de51b495ae8969e1bef85f239ffcd9ba5fb44a5ff
@@ -1506,7 +1506,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 7c7727c6b2c0e142f2c6a580244dc9e2252a0388ef3482b07d1a8eb61b0ed3ae
+F test/qrf01.test 8553f38836e3ea3320dd0ff908ee166e48ec6c1d7fc9ee81fd10c865fdc7e393
 F test/qrf02.test 39b4afdc000bedccdafc0aecf17638df67a67aaa2d2942865ae6abcc48ba0e92
 F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca
 F test/quick.test 1681febc928d686362d50057c642f77a02c62e57
@@ -2173,8 +2173,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 712b890531d351cf19d57d8cc6dced5cdd2c394d69fd1ace98298d79ddca269a
-R ac97135f8cce6d7345e47fd96772396a
+P 23ddc38cf19845a385c8b33002805c3c864ab9b2e36c3d609794444b06d20c89
+R b6f6aa554fc5421ef5be83514503ceb2
 U drh
-Z 9b6bf880f890c81874b8c914cec4e44f
+Z 55336ab4764d6f83d6e0beaecb47e53f
 # Remove this line to create a well-formed Fossil manifest.
index 47afc5062f27b9087a595caf8d68599172a5621f..7b1bcd2489220b84a190d3cfe2cb0dbf4bd06229 100644 (file)
@@ -1 +1 @@
-23ddc38cf19845a385c8b33002805c3c864ab9b2e36c3d609794444b06d20c89
+871567e377e976e0bb191d466019d1d4abe126f2da1880f1e25cd92b06a666d1
index 609b9ce13a95a66cdfe5c564fc9eb68cfb5c1864..06e49b03762119c2c30f089cab5315d770ff1d32 100644 (file)
@@ -2066,7 +2066,7 @@ static void DbHookCmd(
 **     -defaultalign ("auto"|"left"|...)       Default alignment
 **     -titalalign ("auto"|"left"|"right"|...) Default column name alignment
 **     -maxcolwidth NUMBER                     Max width of any single column
-**     -maxtotalwidth NUMBER                   Max width of the entire table
+**     -screenwidth NUMBER                     Width of the display TTY
 **     -maxrowheight NUMBER                    Max height of a row in a table
 **     -maxlength NUMBER                       Content truncated to this size
 **     -align LIST-OF-ALIGNMENT                Alignment of columns
@@ -2092,7 +2092,7 @@ static void DbHookCmd(
 **     -defaultalign     eDfltAlign
 **     -titlealign       eTitleAlign
 **     -maxcolwidth      mxColWidth
-**     -maxtotalwidth    mxTotalWidth
+**     -screenwidth      nScreenWidth
 **     -maxrowheight     mxRowHeight
 **     -maxlength        mxLength
 **     -align            nAlign, aAlign
@@ -2188,12 +2188,12 @@ static int dbQrf(SqliteDb *pDb, int objc, Tcl_Obj *const*objv){
     }else if( strcmp(zArg,"-text")==0 || strcmp(zArg, "-title")==0 ){
       static const char *azText[] = {
         "auto",             "csv",              "html",
-        "json",             "off",              "sql",
+        "json",             "plain",            "sql",
         "tcl",              0
       };
       static unsigned char aTextMap[] = {
         QRF_TEXT_Auto,      QRF_TEXT_Csv,       QRF_TEXT_Html,
-        QRF_TEXT_Json,      QRF_TEXT_Off,       QRF_TEXT_Sql,
+        QRF_TEXT_Json,      QRF_TEXT_Plain,     QRF_TEXT_Sql,
         QRF_TEXT_Tcl
       };
       int txt;
@@ -2257,7 +2257,7 @@ static int dbQrf(SqliteDb *pDb, int objc, Tcl_Obj *const*objv){
       }
       i++;
     }else if( strcmp(zArg,"-maxcolwidth")==0
-           || strcmp(zArg,"-maxtotalwidth")==0 
+           || strcmp(zArg,"-screenwidth")==0 
            || strcmp(zArg,"-maxrowheight")==0 
     ){
       int v = 0;
@@ -2273,7 +2273,7 @@ static int dbQrf(SqliteDb *pDb, int objc, Tcl_Obj *const*objv){
       }else if( zArg[4]=='r' ){
         qrf.mxRowHeight = v;
       }else{
-        qrf.mxTotalWidth = v;
+        qrf.nScreenWidth = v;
       }
       i++;
     }else if( strcmp(zArg,"-maxlength")==0 ){
index a25b134a6c81fc1dd679c7de7a5c989b4923d694..937c8f592415fc3e0915ebdd3612b51c56995bb5 100644 (file)
@@ -72,7 +72,7 @@ do_test 1.13 {
 do_test 1.14 {
   catch {db format -text unk -blob hex {SELECT * FROM t1}} res
   set res
-} {bad text encoding (-text) "unk": must be auto, csv, html, json, off, sql, or tcl}
+} {bad text encoding (-text) "unk": must be auto, csv, html, json, plain, sql, or tcl}
 do_test 1.15 {
   catch {db format -text sql -blob unk {SELECT * FROM t1}} res
   set res
@@ -272,7 +272,7 @@ BLOB||Ἀμήν
 }
 do_test 1.112 {
   set result "\n[db format -style list -columnnames on -text sql -null NULL \
-                 -title off {SELECT * FROM t1}]"
+                 -title plain {SELECT * FROM t1}]"
 } {
 a|b|c
 1|2.5|'three'
@@ -533,7 +533,7 @@ do_test 4.2 {
 └─────────────────┴─────────────────┴────┘
 }
 do_test 4.3 {
-  set result "\n[db format -text off -textjsonb on -maxcolwidth 11 \
+  set result "\n[db format -text plain -textjsonb on -maxcolwidth 11 \
               {SELECT a AS json, b AS jsonb, c AS num FROM t1}]"
 } {
 ┌─────────────┬─────────────┬─────┐
@@ -558,7 +558,7 @@ do_execsql_test 5.0 {
 do_test 5.1 {
   set sql {SELECT name, mtime, datetime(mtime,'unixepoch') AS time,
                         value FROM t1 ORDER BY mtime}
-  set result "\n[db format -style line -maxtotalwidth 60 -blob sql \
+  set result "\n[db format -style line -screenwidth 60 -blob sql \
                    -text sql -wordwrap off -maxrowheight 77 $sql]"
 } {
  name = unistr('one\u000atwo\u000athree')
@@ -591,11 +591,11 @@ value = x'00000000000000000000000000000000000000000000000000
         0000000000000000000000000000000000000000000000000000
         000000000000000000000000000000'
 }
-do_test 5.1 {
+do_test 5.2 {
   set sql {SELECT name, mtime, datetime(mtime,'unixepoch') AS time,
                         value FROM t1 ORDER BY mtime}
-  set result "\n[db format -style line -maxtotalwidth 60 -blob sql \
-                   -text off -esc off -textjsonb yes \
+  set result "\n[db format -style line -screenwidth 60 -blob sql \
+                   -text plain -esc off -textjsonb yes \
                    -wordwrap yes -maxrowheight 3 $sql]"
 } {
  name = one