From: drh <> Date: Fri, 29 May 2026 12:23:38 +0000 (+0000) Subject: The -csv option to the CLI also sets "-limits off", for legacy X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=991cbd78b37a4b6e6e305bc04ebd267af4c0f745;p=thirdparty%2Fsqlite.git The -csv option to the CLI also sets "-limits off", for legacy compatibility, and because that seems to make sense. [forum:/info/2026-05-28T16:23:36Z|Forum thread 2026-05-28T16:23:36Z]. FossilOrigin-Name: d15cd64160192119a5f12afec14dbfbb30fb38a8557cb9dc559b3f061c15687a --- diff --git a/manifest b/manifest index 0ab61b91ce..f60d9602cb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\sa\sresource\sleak\sin\san\serror\spath\sin\sthe\sicu\sextension. -D 2026-05-28T11:29:05.704 +C The\s-csv\soption\sto\sthe\sCLI\salso\ssets\s"-limits\soff",\sfor\slegacy\ncompatibility,\sand\sbecause\sthat\sseems\sto\smake\ssense.\n[forum:/info/2026-05-28T16:23:36Z|Forum\sthread\s2026-05-28T16:23:36Z]. +D 2026-05-29T12:23:38.019 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -739,7 +739,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 7e936a09405cb59e2b3e51a3ad23753e4803afc5269c5171a54c9bdd70f4fc50 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 4c05cde130f26991b7411d8c6809e0630625e18078742c963a047b4b9cc01d49 -F src/shell.c.in 691fac6a7f6f6fc72836aa2779d81b8cf67c896a15699c65e810cd1e8c6270f4 +F src/shell.c.in 6104d39c2416ce235c01134cd79c5be5fdd71323d58be4ace6910b2c3f89253c F src/sqlite.h.in 749454ec71c875bc130d399ff9a7e47191d143d1b9d8b4af3839b6028df9eda9 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479 F src/sqlite3ext.h 9788c301f95370fa30e808861f1d2e6f022a816ddbe2a4f67486784c1b31db2e @@ -2208,8 +2208,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P 646e9b49153ebd7e09e3ef72cc4f64fb685d0cfd8b158ef7d11d37c50c3f0b7e -R 81bf729d8c4142161698f7ae0f57bcc2 -U dan -Z a8503d1e8f8b2786c97fea82e248cce7 +P 87c37dab7e53d1bd891f3fed624963b35ab15a785706d0964b5d07ab70421c10 +R 8367c73dbaaca89b3d19653c5b15b836 +U drh +Z 434986435224008c0a9c313fa9bac32b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 47828d23fe..b55fabd9f3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -87c37dab7e53d1bd891f3fed624963b35ab15a785706d0964b5d07ab70421c10 +d15cd64160192119a5f12afec14dbfbb30fb38a8557cb9dc559b3f061c15687a diff --git a/src/shell.c.in b/src/shell.c.in index 01b3f93679..fc50e43013 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -2104,6 +2104,43 @@ static void modeSetStr(char **az, const char *zNew){ } } +/* Forward reference */ +static int pickStr(const char *zArg, char **pzErr, ...); + +/* +** Change the limits on the display mode. Return 0 on +** success. Return non-zero if zArg is mis-formatted. +** +** Valid arguments: +** +** "on" Default limits +** "off" All limits turned off +** L,C Line and Characters limits set +** L,C,T Line, Character, and Title limits set +** +** Anything else returns non-zero +*/ +static int modeSetLimit(ShellState *p, const char *zArg){ + int k = zArg==0 ? 1 : pickStr(zArg,0,"on","off",""); + if( k==0 ){ + p->mode.spec.nLineLimit = DFLT_LINE_LIMIT; + p->mode.spec.nCharLimit = DFLT_CHAR_LIMIT; + p->mode.spec.nTitleLimit = DFLT_TITLE_LIMIT; + }else if( k==1 ){ + p->mode.spec.nLineLimit = 0; + p->mode.spec.nCharLimit = 0; + p->mode.spec.nTitleLimit = 0; + }else{ + int L, C, T = 0; + int nNum = sscanf(zArg, "%d,%d,%d", &L, &C, &T); + if( nNum<2 || L<0 || C<0 || T<0) return 1; + p->mode.spec.nLineLimit = L; + p->mode.spec.nCharLimit = C; + if( nNum==3 ) p->mode.spec.nTitleLimit = T; + } + return 0; +} + /* ** Change the mode to eMode */ @@ -2140,6 +2177,7 @@ static void modeChange(ShellState *p, unsigned char eMode){ u8 mFlags = p->mode.mFlags; modeFree(&p->mode); modeChange(p, MODE_List); + modeSetLimit(p, "off"); p->mode.mFlags = mFlags; }else if( eMode==MODE_TTY ){ u8 mFlags = p->mode.mFlags; @@ -8720,26 +8758,10 @@ static int dotCmdMode(ShellState *p){ dotCmdError(p, i-1, "missing argument", 0); return 1; } - k = pickStr(azArg[i],0,"on","off",""); - if( k==0 ){ - p->mode.spec.nLineLimit = DFLT_LINE_LIMIT; - p->mode.spec.nCharLimit = DFLT_CHAR_LIMIT; - p->mode.spec.nTitleLimit = DFLT_TITLE_LIMIT; - }else if( k==1 ){ - p->mode.spec.nLineLimit = 0; - p->mode.spec.nCharLimit = 0; - p->mode.spec.nTitleLimit = 0; - }else{ - int L, C, T = 0; - int nNum = sscanf(azArg[i], "%d,%d,%d", &L, &C, &T); - if( nNum<2 || L<0 || C<0 || T<0){ - dotCmdError(p, i, "bad argument", "Should be \"L,C,T\" where L, C" - " and T are unsigned integers"); - return 1; - } - p->mode.spec.nLineLimit = L; - p->mode.spec.nCharLimit = C; - if( nNum==3 ) p->mode.spec.nTitleLimit = T; + if( modeSetLimit(p, azArg[i]) ){ + dotCmdError(p, i, "bad argument", "Should be \"on\" or \"off\" or " + "\"L,C,T\" where L, C, and T are unsigned integers"); + return 1; } chng = 1; }else if( optionMatch(z,"list") ){ @@ -9980,9 +10002,6 @@ static int do_meta_command(const char *zLine, ShellState *p){ shell_check_oom(zSql); modePush(p); modeChange(p, MODE_BATCH); - p->mode.spec.nLineLimit = 0; - p->mode.spec.nCharLimit = 0; - p->mode.spec.nTitleLimit = 0; shell_exec(p, zSql, 0); modePop(p); sqlite3_free(zSql); @@ -13352,13 +13371,13 @@ static const char zOptions[] = " -A ARGS... run \".archive ARGS\" and exit\n" #endif " -append append the database to the end of the file\n" - " -ascii set output mode to 'ascii'\n" + " -ascii set '.mode ascii'\n" " -bail stop after hitting an error\n" " -batch force batch I/O\n" - " -box set output mode to 'box'\n" + " -box set '.mode box'\n" " -cmd COMMAND run \"COMMAND\" before reading stdin\n" - " -column set output mode to 'column'\n" - " -csv set output mode to 'csv'\n" + " -column set '.mode column'\n" + " -csv set '.mode csv -limits off'\n" #if !defined(SQLITE_OMIT_DESERIALIZE) " -deserialize open the database using sqlite3_deserialize()\n" #endif @@ -13370,14 +13389,14 @@ static const char zOptions[] = " -heap SIZE Size of heap for memsys3 or memsys5\n" #endif " -help show this message\n" - " -html set output mode to HTML\n" + " -html set '.mode html'\n" " -ifexists only open if database already exists\n" " -interactive force interactive I/O\n" - " -json set output mode to 'json'\n" - " -line set output mode to 'line'\n" - " -list set output mode to 'list'\n" + " -json set '.mode json'\n" + " -line set '.mode line'\n" + " -list set '.mode list'\n" " -lookaside SIZE N use N entries of SZ bytes for lookaside memory\n" - " -markdown set output mode to 'markdown'\n" + " -markdown set '.mode markdown'\n" #if !defined(SQLITE_OMIT_DESERIALIZE) " -maxsize N maximum size for a --deserialize database\n" #endif @@ -13394,7 +13413,7 @@ static const char zOptions[] = " -nullvalue TEXT set text string for NULL values. Default ''\n" " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n" " -pcachetrace trace all page cache operations\n" - " -quote set output mode to 'quote'\n" + " -quote set '.mode quote'\n" " -readonly open the database read-only\n" " -safe enable safe-mode\n" " -screenwidth N use N as the default screenwidth \n" @@ -13403,8 +13422,8 @@ static const char zOptions[] = " -sorterref SIZE sorter references threshold size\n" #endif " -stats print memory stats before each finalize\n" - " -table set output mode to 'table'\n" - " -tabs set output mode to 'tabs'\n" + " -table set '.mode table'\n" + " -tabs set '.mode tabs'\n" " -unsafe-testing allow unsafe commands and modes for testing\n" " -version show SQLite version\n" " -vfs NAME use NAME as the default VFS\n" @@ -14006,6 +14025,7 @@ int SQLITE_CDECL main(int argc, char **argv){ modeChange(&data, MODE_Box); }else if( cli_strcmp(z,"-csv")==0 ){ modeChange(&data, MODE_Csv); + modeSetLimit(&data, "off"); }else if( cli_strcmp(z,"-escape")==0 && i+1