static const ModeInfo aModeInfo[] = {
/* zName eCSep eRSep eNull eText eHdr eBlob bHdr eStyle eCx */
- { "ascii", 7, 6, 9, 1, 1, 1, 1, 12, 0 },
- { "box", 0, 0, 9, 1, 1, 1, 2, 1, 2 },
+ { "ascii", 7, 6, 9, 1, 1, 0, 1, 12, 0 },
+ { "box", 0, 0, 9, 1, 1, 0, 2, 1, 2 },
{ "c", 4, 1, 10, 5, 5, 4, 1, 12, 0 },
- { "column", 0, 0, 9, 1, 1, 1, 2, 2, 2 },
+ { "column", 0, 0, 9, 1, 1, 0, 2, 2, 2 },
{ "count", 0, 0, 0, 0, 0, 0, 0, 3, 0 },
- { "csv", 4, 5, 9, 3, 3, 3, 1, 12, 0 },
- { "html", 0, 0, 9, 4, 4, 1, 2, 7, 0 },
- { "insert", 0, 0, 10, 2, 2, 2, 1, 8, 0 },
- { "jatom", 4, 1, 11, 6, 6, 5, 1, 12, 0 },
- { "jobject", 0, 1, 11, 6, 6, 5, 0, 10, 0 },
+ { "csv", 4, 5, 9, 3, 3, 0, 1, 12, 0 },
+ { "html", 0, 0, 9, 4, 4, 0, 2, 7, 0 },
+ { "insert", 0, 0, 10, 2, 2, 0, 1, 8, 0 },
+ { "jatom", 4, 1, 11, 6, 6, 0, 1, 12, 0 },
+ { "jobject", 0, 1, 11, 6, 6, 0, 0, 10, 0 },
{ "json", 0, 0, 11, 6, 6, 0, 0, 9, 0 },
{ "line", 0, 1, 9, 1, 1, 0, 0, 11, 1 },
- { "list", 2, 1, 9, 1, 1, 1, 1, 12, 0 },
- { "markdown", 0, 0, 9, 1, 1, 1, 2, 13, 2 },
+ { "list", 2, 1, 9, 1, 1, 0, 1, 12, 0 },
+ { "markdown", 0, 0, 9, 1, 1, 0, 2, 13, 2 },
{ "off", 0, 0, 0, 0, 0, 0, 0, 14, 0 },
- { "qbox", 0, 0, 9, 2, 1, 2, 2, 1, 2 },
- { "quote", 4, 1, 10, 2, 2, 2, 1, 12, 0 },
- { "split", 0, 0, 9, 1, 1, 1, 1, 2, 2 },
- { "table", 0, 0, 9, 1, 1, 1, 2, 19, 2 },
- { "tabs", 8, 1, 9, 3, 3, 1, 1, 12, 0 },
+ { "qbox", 0, 0, 9, 2, 1, 0, 2, 1, 2 },
+ { "quote", 4, 1, 10, 2, 2, 0, 1, 12, 0 },
+ { "split", 0, 0, 9, 1, 1, 0, 1, 2, 2 },
+ { "table", 0, 0, 9, 1, 1, 0, 2, 19, 2 },
+ { "tabs", 8, 1, 9, 3, 3, 0, 1, 12, 0 },
{ "tcl", 3, 1, 12, 5, 5, 4, 1, 12, 0 },
- { "www", 0, 0, 9, 4, 4, 1, 2, 7, 0 }
+ { "www", 0, 0, 9, 4, 4, 0, 2, 7, 0 }
}; /* | / / | / / | | \
** | / / | / / | | \_ 2: columnar
** Index into aModeStr[] | / / | | 1: line
** v-------------------' | hdrs? | The QRF style
** 0: n/a blob | v-----'
** 1: plain v_---------' 0: n/a
- ** 2: sql 0: n/a 1: no
+ ** 2: sql 0: auto 1: no
** 3: csv 1: as-text 2: yes
** 4: html 2: sql
** 5: c 3: hex
** 6: json 4: c
** 5: json
+ ** 6: size
******************************************************************/
/*
** These are the column/row/line separators used by the various
if( pArg->mode.bAutoScreenWidth ){
spec.nScreenWidth = shellScreenWidth();
}
+ if( spec.eBlob==QRF_BLOB_Auto ){
+ switch( spec.eText ){
+ case QRF_TEXT_Sql: spec.eBlob = QRF_BLOB_Sql; break;
+ case QRF_TEXT_Json: spec.eBlob = QRF_BLOB_Json; break;
+ default: spec.eBlob = QRF_BLOB_Text; break;
+ }
+ }
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_AUTHORIZATION)
if( pArg->expert.pExpert ){
savedMode = p->mode;
p->mode.spec.zTableName = (char*)zTable;
p->mode.eMode = MODE_Insert;
+ p->mode.spec.eText = QRF_TEXT_Sql;
+ p->mode.spec.eBlob = QRF_BLOB_Sql;
p->mode.spec.bTitles = QRF_No;
rc = shell_exec(p, sSelect.zTxt, 0);
if( (rc&0xff)==SQLITE_CORRUPT ){
** meaning "left", "centered", and "right", with
** one letter per column starting from the left.
** Unspecified alignment defaults to 'L'.
+** --blob-quote ARG ARG can be "auto", "text", "sql", "hex", "tcl",
+** "tcl", "json", or "size". Default is "auto".
** --charlimit N Set the maximum number of output characters to
** show for any single SQL value to N. Longer values
** truncated. Zero means "no limit".
"Should contain only characters L, C, and R.");
return 1;
}
+ }else if( pickStr(z,0,"-blob","-blob-quote","")>=0 ){
+ if( (++i)>=nArg ){
+ dotCmdError(p, i-1, "missing argument", 0);
+ return 1;
+ }
+ k = pickStr(azArg[i], 0,
+ "auto", "text", "sql", "hex", "tcl", "json", "size", "");
+ /* 0 1 2 3 4 5 6
+ ** Must match QRF_BLOB_xxxx values. See also tag-20251124a */
+ if( k>=0 ){
+ p->mode.spec.eBlob = k & 0xff;
+ }
+ chng = 1;
}else if( 0<=(k=pickStr(z,0,"-charlimit","-linelimit","")) ){
int w; /* 0 1 */
if( i+1>=nArg ){
}else if( optionMatch(z,"noquote") ){
/* (undocumented legacy) --noquote always turns quoting off */
p->mode.spec.eText = QRF_TEXT_Plain;
- p->mode.spec.eBlob = QRF_BLOB_Text;
+ p->mode.spec.eBlob = QRF_BLOB_Auto;
chng = 1;
}else if( optionMatch(z,"quote") ){
if( i+1<nArg
case 1: /* on */
case 2: /* sql */
p->mode.spec.eText = QRF_TEXT_Sql;
- p->mode.spec.eBlob = QRF_BLOB_Sql;
break;
case 3: /* csv */
p->mode.spec.eText = QRF_TEXT_Csv;
- p->mode.spec.eBlob = QRF_BLOB_Text;
break;
case 4: /* html */
p->mode.spec.eText = QRF_TEXT_Html;
- p->mode.spec.eBlob = QRF_BLOB_Text;
break;
case 5: /* tcl */
p->mode.spec.eText = QRF_TEXT_Tcl;
- p->mode.spec.eBlob = QRF_BLOB_Text;
break;
case 6: /* json */
p->mode.spec.eText = QRF_TEXT_Json;
- p->mode.spec.eBlob = QRF_BLOB_Json;
break;
default: /* off */
p->mode.spec.eText = QRF_TEXT_Plain;
- p->mode.spec.eBlob = QRF_BLOB_Text;
break;
}
chng = 1;
}
sqlite3_str_append(pDesc, "\"", 1);
}
+ if( bAll || p->mode.spec.eBlob!=QRF_BLOB_Auto ){
+ const char *azBQuote[] =
+ { "auto", "text", "sql", "hex", "tcl", "json", "size" };
+ /* 0 1 2 3 4 5 6
+ ** Must match QRF_BLOB_xxxx values. See all instances of tag-20251124a */
+ u8 e = p->mode.spec.eBlob;
+ sqlite3_str_appendf(pDesc, " --blob-quote %s", azBQuote[e]);
+ }
if( bAll || p->mode.spec.nCharLimit>0 ){
sqlite3_str_appendf(pDesc, " --charlimit %d",p->mode.spec.nCharLimit);
}