]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Default .mode is now qbox with limits. New --compat YYYYMMDD command-line
authordrh <>
Sun, 16 Nov 2025 17:27:21 +0000 (17:27 +0000)
committerdrh <>
Sun, 16 Nov 2025 17:27:21 +0000 (17:27 +0000)
option, and new -DCOMPATIBILITY_DATE=YYYYMMDD compile-time options can
override.  Command ".mode YYYYMMDD" sets the mode to the default for the
date given.

FossilOrigin-Name: 52e022375961ad9460412e40e100219ee59055eb0ab309cbfc2ab19f61929a45

manifest
manifest.uuid
src/shell.c.in

index 4683d2153d049fe26045aab25fad00faa25b466d..71c1ad44b7044a678e8dc458ca11a0e9f48f67cd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\slong-standing\sbug\sin\s.schema\swhen\sthe\sargument\scontains\sa\s".".
-D 2025-11-16T10:49:51.306
+C Default\s.mode\sis\snow\sqbox\swith\slimits.\s\sNew\s--compat\sYYYYMMDD\scommand-line\noption,\sand\snew\s-DCOMPATIBILITY_DATE=YYYYMMDD\scompile-time\soptions\scan\noverride.\s\sCommand\s".mode\sYYYYMMDD"\ssets\sthe\smode\sto\sthe\sdefault\sfor\sthe\ndate\sgiven.
+D 2025-11-16T17:27:21.262
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -735,7 +735,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
 F src/resolve.c 5616fbcf3b833c7c705b24371828215ad0925d0c0073216c4f153348d5753f0a
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c ba9cd07ffa3277883c1986085f6ddc4320f4d35d5f212ab58df79a7ecc1a576a
-F src/shell.c.in c1606803c02f9dafc6c9644712be88b8f50cf267fd82c7085f8339de6a158a66
+F src/shell.c.in 2044498d05ffcaccdd713cce4d8482f6f3f66dbafb911c782a85bbfb47a8ca27
 F src/sqlite.h.in 795ce84cc136b4e74d882cf4fab56d2927c20b9af9fd2fcea27760a6fe50851b
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 5d5330f5f8461f5ce74960436ddcfa53ecd09c2b8b23901e22ae38aec3243998
@@ -2176,8 +2176,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 3e02804c387c89afde59eef8e464c6011e083e158873e4f8ab1f17bcc12b7c28
-R 01873a3f151ad28aeba6a62a8ffe1131
+P 404576214fc20161cdcb031d57696d6068506309c8faecd3e4424e5ced28046b
+R 656e4e2e056e170cfa1c688265c9909d
 U drh
-Z 08514ae94b4a719d2cf12e9dff1abcec
+Z 2168f764ba4213c8e8606210a6330583
 # Remove this line to create a well-formed Fossil manifest.
index 372a106253efa70ec5a6d03506f77f4da6373979..4b5ec8de963d717a10af3f0245c17305fcb5888f 100644 (file)
@@ -1 +1 @@
-404576214fc20161cdcb031d57696d6068506309c8faecd3e4424e5ced28046b
+52e022375961ad9460412e40e100219ee59055eb0ab309cbfc2ab19f61929a45
index 16bd8b4922b56ce893f0a0649f9f07cddc794cfb..b60d38c2f46c009959d9f177345159035814dee1 100644 (file)
@@ -1264,6 +1264,7 @@ typedef struct Mode {
 typedef struct ShellState ShellState;
 struct ShellState {
   sqlite3 *db;           /* The database */
+  int iCompat;           /* Compatibility date YYYYMMDD */
   u8 openMode;           /* SHELL_OPEN_NORMAL, _APPENDVFS, or _ZIPFILE */
   u8 doXdgOpen;          /* Invoke start/open/xdg-open in output_reset() */
   u8 nEqpLevel;          /* Depth of the EQP output graph */
@@ -1599,20 +1600,21 @@ static void modeChange(ShellState *p, unsigned char eMode){
 }
 
 /*
-** Initialize a newly allocate Mode object to reasonable
-** defaults.
+** Set the mode to the default according to p->iCompat.  It assumed
+** that the mode has already been freed and zeroed prior to calling
+** this routine.
 */
-static void modeInit(Mode *p){
-  memset(p, 0, sizeof(*p));
-  p->spec.iVersion = 1;
-  p->autoExplain = 1;
-  p->eMode = MODE_List;
-#ifdef _WIN32
-  p->crlfMode = 1;
-#endif
-  p->spec.zColumnSep = strdup("|");
-  p->spec.zRowSep = strdup("\n");
-  p->spec.zNull = strdup("");
+static void modeDefault(ShellState *p){
+  p->mode.spec.iVersion = 1;
+  p->mode.autoExplain = 1;
+  if( p->iCompat>=20251115 ){
+    modeChange(p, MODE_QBox);
+    p->mode.bAutoScreenWidth = 1;
+    p->mode.spec.nCharLimit = 300;
+    p->mode.spec.nLineLimit = 5;
+  }else{
+    modeChange(p, MODE_List);
+  }
 }
 
 /*
@@ -7349,6 +7351,12 @@ static int dotCmdMode(ShellState *p){
         modeSetStr(&p->mode.spec.zTableName, azArg[i]);
       }
       chng = 1;
+    }else if( z[0]=='2' && strlen(z)==8 && atoi(z)>20000101 ){
+      modeFree(&p->mode);
+      p->iCompat = atoi(z);
+      memset(&p->mode, 0, sizeof(p->mode));
+      modeDefault(p);
+      chng = 1;
     }else if( optionMatch(z,"align") ){
       char *zAlign;
       int nAlign;
@@ -12124,8 +12132,9 @@ static const char zOptions[] =
   "   -bail                stop after hitting an error\n"
   "   -batch               force batch I/O\n"
   "   -box                 set output mode to 'box'\n"
-  "   -column              set output mode to 'column'\n"
   "   -cmd COMMAND         run \"COMMAND\" before reading stdin\n"
+  "   -column              set output mode to 'column'\n"
+  "   -compat YYYYMMDD     set default options for date YYYYMMDD\n"
   "   -csv                 set output mode to 'csv'\n"
 #if !defined(SQLITE_OMIT_DESERIALIZE)
   "   -deserialize         open the database using sqlite3_deserialize()\n"
@@ -12208,7 +12217,12 @@ static void verify_uninitialized(void){
 */
 static void main_init(ShellState *p) {
   memset(p, 0, sizeof(*p));
-  modeInit(&p->mode);
+#if defined(COMPATIBILITY_DATE)
+  p->iCompat = COMPATIBILITY_DATE;
+#else
+  p->iCompat = 20251116;
+#endif
+  modeDefault(p);
   p->pAuxDb = &p->aAuxDb[0];
   p->shellFlgs = SHFLG_Lookaside;
   sqlite3_config(SQLITE_CONFIG_LOG, shellLog, p);
@@ -12461,6 +12475,11 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
       ** we do the actual processing of arguments later in a second pass.
       */
       stdin_is_interactive = 0;
+    }else if( cli_strcmp(z,"-compat")==0 ){
+      data.iCompat = atoi(cmdline_option_value(argc, argv, ++i));
+      modeFree(&data.mode);
+      memset(&data.mode, 0, sizeof(data.mode));
+      modeDefault(&data);
     }else if( cli_strcmp(z,"-utf8")==0 ){
     }else if( cli_strcmp(z,"-no-utf8")==0 ){
     }else if( cli_strcmp(z,"-no-rowid-in-view")==0 ){
@@ -12770,6 +12789,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
       stdin_is_interactive = 1;
     }else if( cli_strcmp(z,"-batch")==0 ){
       /* already handled */
+    }else if( cli_strcmp(z,"-compat")==0 ){
+      i++;      
     }else if( cli_strcmp(z,"-utf8")==0 ){
       /* already handled */
     }else if( cli_strcmp(z,"-no-utf8")==0 ){