Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the command-line shell in CSV move, put strings in C-style double-quotes. Ticket #911. (CVS 2009) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1376a0bb8d864de755c614b2ecce4342 |
User & Date: | drh 2004-10-07 00:32:40.000 |
Context
2004-10-07
| ||
03:06 | Additional parser optimizations. (CVS 2010) (check-in: 618dee121e user: drh tags: trunk) | |
00:32 | In the command-line shell in CSV move, put strings in C-style double-quotes. Ticket #911. (CVS 2009) (check-in: 1376a0bb8d user: drh tags: trunk) | |
2004-10-06
| ||
15:52 | Fix naming conflict between sqlite.h and sqlite3.h. Ticket #946. (CVS 2007) (check-in: 3037041263 user: drh tags: trunk) | |
Changes
Changes to src/shell.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains code to implement the "sqlite" command line ** utility for accessing SQLite databases. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains code to implement the "sqlite" command line ** utility for accessing SQLite databases. ** ** $Id: shell.c,v 1.116 2004/10/07 00:32:40 drh Exp $ */ #include <stdlib.h> #include <string.h> #include <stdio.h> #include <assert.h> #include "sqlite3.h" #include <ctype.h> |
︙ | ︙ | |||
238 239 240 241 242 243 244 | #define MODE_Line 0 /* One column per line. Blank line between records */ #define MODE_Column 1 /* One record per line in neat columns */ #define MODE_List 2 /* One record per line with a separator */ #define MODE_Semi 3 /* Same as MODE_List but append ";" to each line */ #define MODE_Html 4 /* Generate an XHTML table */ #define MODE_Insert 5 /* Generate SQL "insert" statements */ #define MODE_Tcl 6 /* Generate ANSI-C or TCL quoted elements */ | > | > | 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | #define MODE_Line 0 /* One column per line. Blank line between records */ #define MODE_Column 1 /* One record per line in neat columns */ #define MODE_List 2 /* One record per line with a separator */ #define MODE_Semi 3 /* Same as MODE_List but append ";" to each line */ #define MODE_Html 4 /* Generate an XHTML table */ #define MODE_Insert 5 /* Generate SQL "insert" statements */ #define MODE_Tcl 6 /* Generate ANSI-C or TCL quoted elements */ #define MODE_Csv 7 /* Quote strings, numbers are plain */ #define MODE_NUM_OF 8 /* The number of modes (not a mode itself) */ char *modeDescr[MODE_NUM_OF] = { "line", "column", "list", "semi", "html", "insert", "tcl", "csv", }; /* ** Number of elements in an array */ #define ArraySize(X) (sizeof(X)/sizeof(X[0])) |
︙ | ︙ | |||
334 335 336 337 338 339 340 341 342 343 344 345 346 347 | fprintf(out,"&"); }else{ break; } z += i + 1; } } /* ** This routine runs when the user presses Ctrl-C */ static void interrupt_handler(int NotUsed){ seenInterrupt = 1; if( db ) sqlite3_interrupt(db); | > > > > > > > > > > > > > > > > > > > | 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 | fprintf(out,"&"); }else{ break; } z += i + 1; } } /* ** Output a single term of CSV. Actually, p->separator is used for ** the separator, which may or may not be a comma. p->nullvalue is ** the null value. Strings are quoted using ANSI-C rules. Numbers ** appear outside of quotes. */ static void output_csv(struct callback_data *p, const char *z, int bSep){ if( z==0 ){ fprintf(p->out,"%s",p->nullvalue); }else if( isNumber(z, 0) ){ fprintf(p->out,"%s",z); }else{ output_c_string(p->out, z); } if( bSep ){ fprintf(p->out, p->separator); } } /* ** This routine runs when the user presses Ctrl-C */ static void interrupt_handler(int NotUsed){ seenInterrupt = 1; if( db ) sqlite3_interrupt(db); |
︙ | ︙ | |||
467 468 469 470 471 472 473 474 475 476 477 478 479 480 | fprintf(p->out,"\n"); } if( azArg==0 ) break; for(i=0; i<nArg; i++){ output_c_string(p->out, azArg[i] ? azArg[i] : p->nullvalue); fprintf(p->out, "%s", p->separator); } fprintf(p->out,"\n"); break; } case MODE_Insert: { if( azArg==0 ) break; fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable); for(i=0; i<nArg; i++){ | > > > > > > > > > > > > > > | 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | fprintf(p->out,"\n"); } if( azArg==0 ) break; for(i=0; i<nArg; i++){ output_c_string(p->out, azArg[i] ? azArg[i] : p->nullvalue); fprintf(p->out, "%s", p->separator); } fprintf(p->out,"\n"); break; } case MODE_Csv: { if( p->cnt++==0 && p->showHeader ){ for(i=0; i<nArg; i++){ output_csv(p, azCol[i], i<nArg-1); } fprintf(p->out,"\n"); } if( azArg==0 ) break; for(i=0; i<nArg; i++){ output_csv(p, azArg[i], i<nArg-1); } fprintf(p->out,"\n"); break; } case MODE_Insert: { if( azArg==0 ) break; fprintf(p->out,"INSERT INTO %s VALUES(",p->zDestTable); for(i=0; i<nArg; i++){ |
︙ | ︙ | |||
1110 1111 1112 1113 1114 1115 1116 | }else if( strncmp(azArg[1],"list",n2)==0 ){ p->mode = MODE_List; }else if( strncmp(azArg[1],"html",n2)==0 ){ p->mode = MODE_Html; }else if( strncmp(azArg[1],"tcl",n2)==0 ){ p->mode = MODE_Tcl; }else if( strncmp(azArg[1],"csv",n2)==0 ){ | | | 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 | }else if( strncmp(azArg[1],"list",n2)==0 ){ p->mode = MODE_List; }else if( strncmp(azArg[1],"html",n2)==0 ){ p->mode = MODE_Html; }else if( strncmp(azArg[1],"tcl",n2)==0 ){ p->mode = MODE_Tcl; }else if( strncmp(azArg[1],"csv",n2)==0 ){ p->mode = MODE_Csv; strcpy(p->separator, ","); }else if( strncmp(azArg[1],"tabs",n2)==0 ){ p->mode = MODE_List; strcpy(p->separator, "\t"); }else if( strncmp(azArg[1],"insert",n2)==0 ){ p->mode = MODE_Insert; if( nArg>=3 ){ |
︙ | ︙ |