=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sqlite3/Attic/shell.c,v retrieving revision 1.1.1.5 retrieving revision 1.1.1.6 diff -c -r1.1.1.5 -r1.1.1.6 *** src/usr.bin/sqlite3/Attic/shell.c 2013/03/18 10:49:34 1.1.1.5 --- src/usr.bin/sqlite3/Attic/shell.c 2013/06/09 14:51:04 1.1.1.6 *************** *** 90,96 **** #define IsDigit(X) isdigit((unsigned char)X) #define ToLower(X) (char)tolower((unsigned char)X) ! #if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL) #include #include --- 90,97 ---- #define IsDigit(X) isdigit((unsigned char)X) #define ToLower(X) (char)tolower((unsigned char)X) ! #if !defined(_WIN32) && !defined(WIN32) && !defined(_WRS_KERNEL) \ ! && !defined(__minux) #include #include *************** *** 1525,1544 **** ** Interpret zArg as a boolean value. Return either 0 or 1. */ static int booleanValue(char *zArg){ ! int val = atoi(zArg); ! int j; ! for(j=0; zArg[j]; j++){ ! zArg[j] = ToLower(zArg[j]); } ! if( strcmp(zArg,"on")==0 ){ ! val = 1; ! }else if( strcmp(zArg,"yes")==0 ){ ! val = 1; } ! return val; } /* ** Close an output file, assuming it is not stderr or stdout */ static void output_file_close(FILE *f){ --- 1526,1583 ---- ** Interpret zArg as a boolean value. Return either 0 or 1. */ static int booleanValue(char *zArg){ ! int i; ! for(i=0; zArg[i]>='0' && zArg[i]<='9'; i++){} ! if( i>0 && zArg[i]==0 ) return atoi(zArg); ! if( sqlite3_stricmp(zArg, "on")==0 || sqlite3_stricmp(zArg,"yes")==0 ){ ! return 1; } ! if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){ ! return 0; } ! fprintf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", ! zArg); ! return 0; } /* + ** Interpret zArg as an integer value, possibly with suffixes. + */ + static sqlite3_int64 integerValue(const char *zArg){ + sqlite3_int64 v = 0; + static const struct { char *zSuffix; int iMult; } aMult[] = { + { "KiB", 1024 }, + { "MiB", 1024*1024 }, + { "GiB", 1024*1024*1024 }, + { "KB", 1000 }, + { "MB", 1000000 }, + { "GB", 1000000000 }, + { "K", 1000 }, + { "M", 1000000 }, + { "G", 1000000000 }, + }; + int i; + int isNeg = 0; + if( zArg[0]=='-' ){ + isNeg = 1; + zArg++; + }else if( zArg[0]=='+' ){ + zArg++; + } + while( isdigit(zArg[0]) ){ + v = v*10 + zArg[0] - '0'; + zArg++; + } + for(i=0; i=3 && strncmp(azArg[0], "backup", n)==0 && nArg>1 && nArg<4){ ! const char *zDestFile; ! const char *zDb; sqlite3 *pDest; sqlite3_backup *pBackup; ! if( nArg==2 ){ ! zDestFile = azArg[1]; ! zDb = "main"; ! }else{ ! zDestFile = azArg[2]; ! zDb = azArg[1]; } rc = sqlite3_open(zDestFile, &pDest); if( rc!=SQLITE_OK ){ fprintf(stderr, "Error: cannot open \"%s\"\n", zDestFile); sqlite3_close(pDest); return 1; } open_db(p); pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb); if( pBackup==0 ){ --- 1662,1711 ---- if( nArg==0 ) return 0; /* no tokens, no error */ n = strlen30(azArg[0]); c = azArg[0][0]; ! if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 ){ ! const char *zDestFile = 0; ! const char *zDb = 0; ! const char *zKey = 0; sqlite3 *pDest; sqlite3_backup *pBackup; ! int j; ! for(j=1; jdb, zDb); if( pBackup==0 ){ *************** *** 1742,1748 **** p->echoOn = booleanValue(azArg[1]); }else ! if( c=='e' && strncmp(azArg[0], "exit", n)==0 && nArg==1 ){ rc = 2; }else --- 1807,1814 ---- p->echoOn = booleanValue(azArg[1]); }else ! if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ ! if( nArg>1 && (rc = atoi(azArg[1]))!=0 ) exit(rc); rc = 2; }else *************** *** 2212,2219 **** " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) " "WHERE lower(tbl_name) LIKE shellstatic()" " AND type!='meta' AND sql NOTNULL " ! "ORDER BY substr(type,2,1), " ! " CASE type WHEN 'view' THEN rowid ELSE name END", callback, &data, &zErrMsg); zShellStatic = 0; } --- 2278,2284 ---- " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) " "WHERE lower(tbl_name) LIKE shellstatic()" " AND type!='meta' AND sql NOTNULL " ! "ORDER BY rowid", callback, &data, &zErrMsg); zShellStatic = 0; } *************** *** 2224,2231 **** " FROM sqlite_master UNION ALL" " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) " "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'" ! "ORDER BY substr(type,2,1)," ! " CASE type WHEN 'view' THEN rowid ELSE name END", callback, &data, &zErrMsg ); } --- 2289,2295 ---- " FROM sqlite_master UNION ALL" " SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) " "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'" ! "ORDER BY rowid", callback, &data, &zErrMsg ); } *************** *** 2347,2355 **** for(i=0; iout, "%s%-*s", zSp, maxlen, azResult[j] ? azResult[j] : ""); } ! fprintf(p->out, "\n"); } } for(ii=0; iidb, opt); ! printf("%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); --- 2470,2476 ---- if( nArg==3 ){ int opt = (int)strtol(azArg[2], 0, 0); rc = sqlite3_test_control(testctrl, p->db, opt); ! fprintf(p->out, "%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); *************** *** 2419,2425 **** case SQLITE_TESTCTRL_PRNG_RESET: if( nArg==2 ){ rc = sqlite3_test_control(testctrl); ! printf("%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]); } --- 2483,2489 ---- case SQLITE_TESTCTRL_PRNG_RESET: if( nArg==2 ){ rc = sqlite3_test_control(testctrl); ! fprintf(p->out, "%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes no options\n", azArg[1]); } *************** *** 2428,2436 **** /* sqlite3_test_control(int, uint) */ case SQLITE_TESTCTRL_PENDING_BYTE: if( nArg==3 ){ ! unsigned int opt = (unsigned int)atoi(azArg[2]); rc = sqlite3_test_control(testctrl, opt); ! printf("%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single unsigned" " int option\n", azArg[1]); --- 2492,2500 ---- /* sqlite3_test_control(int, uint) */ case SQLITE_TESTCTRL_PENDING_BYTE: if( nArg==3 ){ ! unsigned int opt = (unsigned int)integerValue(azArg[2]); rc = sqlite3_test_control(testctrl, opt); ! fprintf(p->out, "%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single unsigned" " int option\n", azArg[1]); *************** *** 2443,2449 **** if( nArg==3 ){ int opt = atoi(azArg[2]); rc = sqlite3_test_control(testctrl, opt); ! printf("%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); --- 2507,2513 ---- if( nArg==3 ){ int opt = atoi(azArg[2]); rc = sqlite3_test_control(testctrl, opt); ! fprintf(p->out, "%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single int option\n", azArg[1]); *************** *** 2456,2462 **** if( nArg==3 ){ const char *opt = azArg[2]; rc = sqlite3_test_control(testctrl, opt); ! printf("%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single char * option\n", azArg[1]); --- 2520,2526 ---- if( nArg==3 ){ const char *opt = azArg[2]; rc = sqlite3_test_control(testctrl, opt); ! fprintf(p->out, "%d (0x%08x)\n", rc, rc); } else { fprintf(stderr,"Error: testctrl %s takes a single char * option\n", azArg[1]); *************** *** 2501,2507 **** }else if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ ! printf("SQLite %s %s\n" /*extra-version-info*/, sqlite3_libversion(), sqlite3_sourceid()); }else --- 2565,2571 ---- }else if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ ! fprintf(p->out, "SQLite %s %s\n" /*extra-version-info*/, sqlite3_libversion(), sqlite3_sourceid()); }else *************** *** 2511,2517 **** if( p->db ){ sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName); if( zVfsName ){ ! printf("%s\n", zVfsName); sqlite3_free(zVfsName); } } --- 2575,2581 ---- if( p->db ){ sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName); if( zVfsName ){ ! fprintf(p->out, "%s\n", zVfsName); sqlite3_free(zVfsName); } } *************** *** 2520,2526 **** #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){ extern int sqlite3WhereTrace; ! sqlite3WhereTrace = atoi(azArg[1]); }else #endif --- 2584,2590 ---- #if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_WHERETRACE) if( c=='w' && strncmp(azArg[0], "wheretrace", n)==0 ){ extern int sqlite3WhereTrace; ! sqlite3WhereTrace = booleanValue(azArg[1]); }else #endif *************** *** 2706,2711 **** --- 2770,2779 ---- free(zSql); zSql = 0; nSql = 0; + }else if( zSql && _all_whitespace(zSql) ){ + free(zSql); + zSql = 0; + nSql = 0; } } if( zSql ){ *************** *** 2841,2846 **** --- 2909,2915 ---- " -interactive force interactive I/O\n" " -line set output mode to 'line'\n" " -list set output mode to 'list'\n" + " -mmap N default mmap size set to N\n" #ifdef SQLITE_ENABLE_MULTIPLEX " -multiplex enable the multiplexor VFS\n" #endif *************** *** 2960,2971 **** sqlite3_int64 szHeap; zSize = cmdline_option_value(argc, argv, ++i); ! szHeap = atoi(zSize); ! for(j=0; (c = zSize[j])!=0; j++){ ! if( c=='M' ){ szHeap *= 1000000; break; } ! if( c=='K' ){ szHeap *= 1000; break; } ! if( c=='G' ){ szHeap *= 1000000000; break; } ! } if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000; sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64); #endif --- 3029,3035 ---- sqlite3_int64 szHeap; zSize = cmdline_option_value(argc, argv, ++i); ! szHeap = integerValue(zSize); if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000; sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64); #endif *************** *** 2985,2990 **** --- 3049,3057 ---- extern int sqlite3_multiple_initialize(const char*,int); sqlite3_multiplex_initialize(0, 1); #endif + }else if( strcmp(z,"-mmap")==0 ){ + sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i)); + sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, sz, sz); }else if( strcmp(z,"-vfs")==0 ){ sqlite3_vfs *pVfs = sqlite3_vfs_find(cmdline_option_value(argc,argv,++i)); if( pVfs ){ *************** *** 3070,3075 **** --- 3137,3144 ---- stdin_is_interactive = 0; }else if( strcmp(z,"-heap")==0 ){ i++; + }else if( strcmp(z,"-mmap")==0 ){ + i++; }else if( strcmp(z,"-vfs")==0 ){ i++; #ifdef SQLITE_ENABLE_VFSTRACE *************** *** 3087,3093 **** z = cmdline_option_value(argc,argv,++i); if( z[0]=='.' ){ rc = do_meta_command(z, &data); ! if( rc && bail_on_error ) return rc; }else{ open_db(&data); rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg); --- 3156,3162 ---- z = cmdline_option_value(argc,argv,++i); if( z[0]=='.' ){ rc = do_meta_command(z, &data); ! if( rc && bail_on_error ) return rc==2 ? 0 : rc; }else{ open_db(&data); rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg); *************** *** 3111,3116 **** --- 3180,3186 ---- */ if( zFirstCmd[0]=='.' ){ rc = do_meta_command(zFirstCmd, &data); + if( rc==2 ) rc = 0; }else{ open_db(&data); rc = shell_exec(data.db, zFirstCmd, shell_callback, &data, &zErrMsg);