Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Shell command-line parsing enhancements suggested by Mike Hall. (CVS 956) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
5656fe48b192dc84cb5977f826ff99d8 |
User & Date: | drh 2003-05-04 18:30:59.000 |
Context
2003-05-04
| ||
20:42 | Added tests trying (unsuccessfully) to reproduce ticket #304. (CVS 957) (check-in: fda637f453 user: drh tags: trunk) | |
18:30 | Shell command-line parsing enhancements suggested by Mike Hall. (CVS 956) (check-in: 5656fe48b1 user: drh tags: trunk) | |
17:58 | Fix deficiencies in sqlite_complete() pointed out by R. Dennis Cote. (CVS 955) (check-in: 54b33a5ed9 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.77 2003/05/04 18:30:59 drh Exp $ */ #include <stdlib.h> #include <string.h> #include <stdio.h> #include "sqlite.h" #include "sqliteInt.h" #include <ctype.h> |
︙ | ︙ | |||
1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 | if(in && isatty(fileno(stdout))) { printf("Loading resources from %s\n",sqliterc); process_input(p,in); fclose(in); } return; } /* ** Initialize the state information in data */ void main_init(struct callback_data *data) { memset(data, 0, sizeof(*data)); data->mode = MODE_List; | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 | if(in && isatty(fileno(stdout))) { printf("Loading resources from %s\n",sqliterc); process_input(p,in); fclose(in); } return; } /* ** Show available command line options */ static const char zOptions[] = " -init filename read/process named file\n" " -echo print commands before execution\n" " -[no]header turn headers on or off\n" " -column set output mode to 'column'\n" " -html set output mode to HTML\n" " -line set output mode to 'line'\n" " -list set output mode to 'list'\n" " -separator 'x' set output field separator (|)\n" " -nullvalue 'text' set text string for NULL values\n" " -version show SQLite version\n" " -help show this text, also show dot-commands\n" ; static void usage(int showDetail){ fprintf(stderr, "Usage: %s [OPTIONS] FILENAME [SQL]\n", Argv0); if( showDetail ){ fprintf(stderr, "Options are:\n%s", zOptions); }else{ fprintf(stderr, "Use the -help option for additional information\n"); } exit(1); } /* ** Initialize the state information in data */ void main_init(struct callback_data *data) { memset(data, 0, sizeof(*data)); data->mode = MODE_List; |
︙ | ︙ | |||
1174 1175 1176 1177 1178 1179 1180 | */ for(i=1; i<argc; i++){ if( argv[i][0]!='-' ) break; if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){ i++; } } | < < < < | | 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 | */ for(i=1; i<argc; i++){ if( argv[i][0]!='-' ) break; if( strcmp(argv[i],"-separator")==0 || strcmp(argv[i],"-nullvalue")==0 ){ i++; } } data.zDbFilename = i<argc ? argv[i] : ":memory:"; data.out = stdout; /* Go ahead and open the database file if it already exists. If the ** file does not exist, delay opening it. This prevents empty database ** files from being created if a user mistypes the database name argument ** to the sqlite command-line tool. */ |
︙ | ︙ | |||
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 | data.showHeader = 0; argc--; argv++; }else if( strcmp(argv[1],"-echo")==0 ){ data.echoOn = 1; argc--; argv++; }else{ fprintf(stderr,"%s: unknown option: %s\n", Argv0, argv[1]); return 1; } } | > > > > > > | > > | 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 | data.showHeader = 0; argc--; argv++; }else if( strcmp(argv[1],"-echo")==0 ){ data.echoOn = 1; argc--; argv++; }else if( strcmp(argv[1],"-version")==0 ){ printf("%s\n", sqlite_version); return 1; }else if( strcmp(argv[1],"-help")==0 ){ usage(1); }else{ fprintf(stderr,"%s: unknown option: %s\n", Argv0, argv[1]); fprintf(stderr,"Use -help for a list of options.\n"); return 1; } } if( argc<2 ){ usage(0); }else if( argc==3 ){ /* Run just the command that follows the database name */ if( argv[2][0]=='.' ){ do_meta_command(argv[2], &data); exit(0); }else{ int rc; |
︙ | ︙ |
Changes to src/tokenize.c.
︙ | ︙ | |||
11 12 13 14 15 16 17 | ************************************************************************* ** An tokenizer for SQL ** ** This file contains C code that splits an SQL input string up into ** individual tokens and sends those tokens one-by-one over to the ** parser for analysis. ** | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ************************************************************************* ** An tokenizer for SQL ** ** This file contains C code that splits an SQL input string up into ** individual tokens and sends those tokens one-by-one over to the ** parser for analysis. ** ** $Id: tokenize.c,v 1.60 2003/05/04 18:30:59 drh Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> #include <stdlib.h> /* |
︙ | ︙ | |||
561 562 563 564 565 566 567 | u8 token; /* Value of the next token */ /* The following matrix defines the transition from one state to another ** according to what token is seen. trans[state][token] returns the ** next state. */ static const u8 trans[7][8] = { | | | 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 | u8 token; /* Value of the next token */ /* The following matrix defines the transition from one state to another ** according to what token is seen. trans[state][token] returns the ** next state. */ static const u8 trans[7][8] = { /* Token: */ /* State: ** EXPLAIN CREATE TEMP TRIGGER END SEMI WS OTHER */ /* 0 START: */ { 1, 2, 3, 3, 3, 0, 0, 3, }, /* 1 EXPLAIN: */ { 3, 2, 3, 3, 3, 0, 1, 3, }, /* 2 CREATE: */ { 3, 3, 2, 4, 3, 0, 2, 3, }, /* 3 NORMAL: */ { 3, 3, 3, 3, 3, 0, 3, 3, }, /* 4 TRIGGER: */ { 4, 4, 4, 4, 4, 5, 4, 4, }, /* 5 SEMI: */ { 4, 4, 4, 4, 6, 5, 5, 4, }, |
︙ | ︙ | |||
625 626 627 628 629 630 631 | zSql++; while( *zSql && *zSql!=c ){ zSql++; } if( *zSql==0 ) return 0; token = tkOTHER; break; } default: { | | | | 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 | zSql++; while( *zSql && *zSql!=c ){ zSql++; } if( *zSql==0 ) return 0; token = tkOTHER; break; } default: { if( isIdChar[(u8)*zSql] ){ /* Keywords and unquoted identifiers */ int nId; for(nId=1; isIdChar[(u8)zSql[nId]]; nId++){} switch( *zSql ){ case 'c': case 'C': { if( nId==6 && sqliteStrNICmp(zSql, "create", 6)==0 ){ token = tkCREATE; }else{ token = tkOTHER; } |
︙ | ︙ |