-C Rename\sQRF_STYLE_JsonLine\sto\sQRF_STYLE_JObject.\s\sAdd\snew\sconvenience\smodes\nto\sthe\sCLI\sand\sgenerally\srefactor\sand\simprove\sthe\s".mode"\scommand.\s\sSome\ntests\sare\sfailing,\smostly\sdue\sto\schanges\sin\serror\smessage\soutput\sand\ssimilar.
-D 2025-11-12T12:44:02.867
+C Add\sa\snew\sdirect\sCLI\stesting\sscript\sin\stest/modeA.clitest\sto\sdemonstration\nthat\scan\sbe\sdone.\s\sRig\sthis\sthis\sto\sbe\srun\sby\stest/shellB.test\sduring\snormal\ntesting.
+D 2025-11-12T13:46:11.794
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/resolve.c 5616fbcf3b833c7c705b24371828215ad0925d0c0073216c4f153348d5753f0a
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c ba9cd07ffa3277883c1986085f6ddc4320f4d35d5f212ab58df79a7ecc1a576a
-F src/shell.c.in ea1a9f9eb07db0d762b2ae12d23988fdc09360f4f6beac324a2a226d9fd5f740
+F src/shell.c.in 68396182b0d542eb223fb93e41fcfdb98ffa2caac8ce06868ec1e1da962badba
F src/sqlite.h.in 7403a952a8f1239de7525b73c4e3a0f9540ec0607ed24fec887f5832642d44b8
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 7f236ca1b175ffe03316d974ef57df79b3938466c28d2f95caef5e08c57f3a52
F test/mmapcorrupt.test 470fb44fe92e99c1d23701d156f8c17865f5b027063c9119dcfdb842791f4465
F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
F test/mmapwarm.test 2272005969cd17a910077bd5082f70bc1fefad9a875afec7fc9af483898ecaf3
+F test/modeA.clitest 7d6a81c5fe60ba07b5b68c9fb624fd7cb7c75be3fc364e17c75c47d8efaaa54d
F test/multiplex.test d74c034e52805f6de8cc5432cef8c9eb774bb64ec29b83a22effc8ca4dac1f08
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
F test/multiplex3.test fac575e0b1b852025575a6a8357701d80933e98b5d2fe6d35ddaa68f92f6a1f7
F test/shell8.test 641cf21a99c59404c24e3062923734951c4099a6b6b6520de00cf7a1249ee871
F test/shell9.test 8742a5b390cdcef6369f5aa223e415aa4255a4129ef249b177887dc635a87209
F test/shellA.test 1de183849ddb6b49d9f21a10a2f6f22bc66f962c0bfaed5baa5ecc3dc6d8f2d5
+F test/shellB.test d2b2f6256560145b8c027dbfc41cd2ac50b2ef25d5853f3ae80c9407f441c9d2
F test/shmlock.test 9f1f729a7fe2c46c88b156af819ac9b72c0714ac6f7246638a73c5752b5fd13c
F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
F test/testloadext.c 862b848783eaed9985fbce46c65cd214664376b549fae252b364d5d1ef350a27
F test/testrunner.tcl 86179a8e78997e9257cb8f738c5624cb23897da5297855578ba74715e64f1602 x
F test/testrunner_data.tcl c507a9afa911c03446ed90442ffd4a98aca02882c3d51bd1177c24795674def8
-F test/testrunner_estwork.tcl 7927a84327259a32854926f68a75292e33a61e7e052fdbfcb01f18696c99c724
+F test/testrunner_estwork.tcl 81e2ae10238f50540f42fbf2d94913052a99bfb494b69e546506323f195dcff9
F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899
F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502
F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 3450bc7eecb717abedbaeb56dc824e14eb35ed30322fe3dd3b4b1cbd5fd14c60
-R bae867483b903590efb761aa22052bac
+P 4c8109682e3a224fd8e015e73a9c1c7b6d56ad747d7ca7bc387bb92e1c98f731
+R e7fc6b191c336123ef02d62bdd856b8f
U drh
-Z c473f1769dc85c25ae73a4d9b1c09693
+Z 90d2468da1196b69530a9ff9957b86e3
# Remove this line to create a well-formed Fossil manifest.
-4c8109682e3a224fd8e015e73a9c1c7b6d56ad747d7ca7bc387bb92e1c98f731
+3107ebb9e1602fe5bed644c6f69426bebf307772e581b17a8fa3e50bd522e566
sqlite3_int64 szMax; /* --maxsize argument to .open */
char *zDestTable; /* Name of destination table when MODE_Insert */
char *zTempFile; /* Temporary file that might need deleting */
+ char *zErrPrefix; /* Alternative error message prefix */
char zTestcase[30]; /* Name of current test case */
char outfile[FILENAME_MAX]; /* Filename for *out */
sqlite3_stmt *pStmt; /* Current statement if any. */
#define SHFLG_Lookaside 0x00000002 /* Lookaside memory is used */
#define SHFLG_Backslash 0x00000004 /* The --backslash option is used */
#define SHFLG_PreserveRowid 0x00000008 /* .dump preserves rowid values */
+#define SHFLG_NoErrLineno 0x00000010 /* Omit line numbers from error msgs */
#define SHFLG_CountChanges 0x00000020 /* .changes setting */
#define SHFLG_DumpDataOnly 0x00000100 /* .dump show data only */
#define SHFLG_DumpNoSys 0x00000200 /* .dump omits system tables */
*/
static char *shellErrorLocation(ShellState *p){
char *zLoc;
- if( p->zInFile==0 || strcmp(p->zInFile,"<stdin>")==0){
+ if( p->zErrPrefix ){
+ zLoc = sqlite3_mprintf("%s", p->zErrPrefix);
+ }else if( p->zInFile==0 || strcmp(p->zInFile,"<stdin>")==0){
zLoc = sqlite3_mprintf("line %lld:", p->lineno);
}else{
zLoc = sqlite3_mprintf("%s:%lld:", p->zInFile, p->lineno);
i++;
modeSetStr(&p->mode.spec.zTableName, azArg[i]);
}
- chng = 1;
+ chng = 1;
+ }else if( optionMatch(z,"error-prefix") ){
+ if( i+1>=nArg ){
+ dotCmdError(p, i, "missing argument", 0);
+ return 1;
+ }
+ free(p->zErrPrefix);
+ p->zErrPrefix = strdup(azArg[++i]);
+ chng = 1;
}else if( z[0]=='-' ){
dotCmdError(p, i, "bad option", "Use \".help .mode\" for more info");
return 1;
free(argvToFree);
#endif
modeFree(&data.mode);
+ free(data.zErrPrefix);
free(data.zNonce);
free(data.dot.zCopy);
free(data.dot.azArg);
--- /dev/null
+# 2025-11-12
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# Test cases for the ".mode" command of the CLI.
+# To run these tests:
+#
+# ./sqlite3 <test/modeA.clitest
+#
+#
+.mode --error-prefix "Error:"
+CREATE TABLE t1(a,b,c,d,e);
+INSERT INTO t1 VALUES(1,2.5,'three',x'4444',NULL);
+INSERT INTO t1 SELECT b,c,d,e,a FROM t1;
+INSERT INTO t1 SELECT d,e,a,b,c FROM t1;
+.mode box
+
+.output memory
+SELECT * FROM t1;
+.output --verify END
+┌─────┬───────┬───────┬───────┬───────┐
+│ a │ b │ c │ d │ e │
+├─────┼───────┼───────┼───────┼───────┤
+│ 1 │ 2.5 │ three │ DD │ │
+│ 2.5 │ three │ DD │ │ 1 │
+│ DD │ │ 1 │ 2.5 │ three │
+│ │ 1 │ 2.5 │ three │ DD │
+└─────┴───────┴───────┴───────┴───────┘
+END
+.null xyz
+
+.output memory
+SELECT * FROM t1;
+.output --verify END
+┌─────┬───────┬───────┬───────┬───────┐
+│ a │ b │ c │ d │ e │
+├─────┼───────┼───────┼───────┼───────┤
+│ 1 │ 2.5 │ three │ DD │ xyz │
+│ 2.5 │ three │ DD │ xyz │ 1 │
+│ DD │ xyz │ 1 │ 2.5 │ three │
+│ xyz │ 1 │ 2.5 │ three │ DD │
+└─────┴───────┴───────┴───────┴───────┘
+END
+
+.output memory
+.mode foo
+.output --verify END
+Error: .mode foo
+Error: ^--- unknown mode
+Error: Use ".help .mode" for more info
+END
--- /dev/null
+# 2025-11-12
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# TESTRUNNER: shell
+#
+# Test cases for the command-line shell using the new ".output memory"
+# feature.
+#
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set CLI [test_cli_invocation]
+
+# Run an instance of the CLI on the file $name.
+# Capture the number of test cases and the number of
+# errors and increment the counts.
+#
+proc do_clitest {name} {
+ set mapping [list <NAME> $name]
+ set script [string map $mapping {
+ catch {exec {*}$::CLI :memory: ".read $::testdir/<NAME>" 2>@stdout} res
+ set ntest 0
+ set nerr 0
+ regexp {(\d+) tests run with (\d+) errors} $res all ntest nerr
+ set_test_counter count [expr {[set_test_counter count]+$ntest-1}]
+ set_test_counter errors [expr {[set_test_counter errors]+$nerr}]
+ set answer "$nerr errors"
+ }]
+ # puts $script
+ do_test shellB-$name $script {0 errors}
+}
+
+do_clitest modeA.clitest
+
+finish_test
set estwork(shell8.test) 104
set estwork(shell9.test) 3
set estwork(shellA.test) 2
+set estwork(shellB.test) 2
set estwork(shmlock.test) 27
set estwork(sidedelete.test) 10
set estwork(skipscan1.test) 7