SQLite

Check-in [8b2954dd83]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:The output of the ".dump" command in the CLI quotes newline and carriage-return characters using "char(10)" and "char(13)".
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | string-quoting-dump
Files: files | file ages | folders
SHA1: 8b2954dd8376e2de985cf5dedeb6eec32c430505
User & Date: drh 2017-03-11 01:56:41.692
Context
2017-03-13
18:24
In the output of the ".dump" command in the CLI, quote newline and carriage-return characters using the char() function, so that they do not get eaten by end-of-line processing logic in the OS or in other command-line utilities and/or libraries. (check-in: 68f6dc7af1 user: drh tags: trunk)
2017-03-11
01:56
The output of the ".dump" command in the CLI quotes newline and carriage-return characters using "char(10)" and "char(13)". (Closed-Leaf check-in: 8b2954dd83 user: drh tags: string-quoting-dump)
00:46
Increase the number of significant digits in floating point literals on ".dump" output from the shell. (check-in: 7359fcacaa user: drh tags: trunk)
Changes
Side-by-Side Diff Ignore Whitespace Patch
Changes to src/shell.c.
1486
1487
1488
1489
1490
1491
1492



1493
1494
1495
1496

1497
1498

1499
1500
1501

1502
1503
1504


1505

1506
1507
1508





1509
1510
1511
1512
1513
1514















1515
1516




1517
1518




1519
1520
1521
1522
1523
1524
1525
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498

1499
1500

1501



1502
1503
1504

1505
1506
1507
1508



1509
1510
1511
1512
1513






1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534


1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545







+
+
+



-
+

-
+
-
-
-
+


-
+
+

+
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+
+
+
+
-
-
+
+
+
+







  raw_printf(out,"X'");
  for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); }
  raw_printf(out,"'");
}

/*
** Output the given string as a quoted string using SQL quoting conventions.
**
** The "\n" and "\r" characters are converted to char(10) and char(13)
** to prevent them from being transformed by end-of-line translators.
*/
static void output_quoted_string(FILE *out, const char *z){
  int i;
  int nSingle = 0;
  char c;
  setBinaryMode(out, 1);
  for(i=0; z[i]; i++){
  for(i=0; (c = z[i])!=0 && c!='\'' && c!='\n' && c!='\r'; i++){}
    if( z[i]=='\'' ) nSingle++;
  }
  if( nSingle==0 ){
  if( c==0 ){
    utf8_printf(out,"'%s'",z);
  }else{
    raw_printf(out,"'");
    int inQuote = 0;
    int bStarted = 0;
    while( *z ){
      for(i=0; (c = z[i])!=0 && c!='\n' && c!='\r' && c!='\''; i++){}
      for(i=0; z[i] && z[i]!='\''; i++){}
      if( i==0 ){
        raw_printf(out,"''");
      if( c=='\'' ) i++;
      if( i ){
        if( !inQuote ){
          if( bStarted ) raw_printf(out, "||");
          raw_printf(out, "'");
        z++;
      }else if( z[i]=='\'' ){
        utf8_printf(out,"%.*s''",i,z);
        z += i+1;
      }else{
        utf8_printf(out,"%s",z);
          inQuote = 1;
        }
        utf8_printf(out, "%.*s", i, z);
        z += i;
        bStarted = 1;
      }
      if( c=='\'' ){
        raw_printf(out, "'");
        continue;
      }
      if( inQuote ){
        raw_printf(out, "'");
        inQuote = 0;
      }
      if( c==0 ){
        break;
      }
      for(i=0; (c = z[i])=='\r' || c=='\n'; i++){
        if( bStarted ) raw_printf(out, "||");
        raw_printf(out, "char(%d)", c);
        bStarted = 1;
    }
    raw_printf(out,"'");
      }
      z += i;
    }
    if( inQuote ) raw_printf(out, "'");
  }
  setTextMode(out, 1);
}

/*
** Output the given string as a quoted according to C or TCL quoting rules.
*/