/* parse arguments of read command */ static int runread(int argc, char **argv){ char *name = NULL; char *tstr = NULL; for(int i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ usage(); } else if(!name){ name = argv[i]; } else if(!tstr){ tstr = argv[i]; } else { usage(); } } if(!name || !tstr) usage(); int tnum = tcatoix(tstr); if(tnum < 1) usage(); int rv = procread(name, tnum); return rv; }
/* main routine */ int main(int argc, char **argv){ g_progname = argv[0]; g_dbgfd = INVALID_HANDLE_VALUE; const char *ebuf = getenv("TCDBGFD"); if (ebuf) { int debugfd = tcatoix(ebuf); #ifdef __MINGW32__ g_dbgfd = (HANDLE) _get_osfhandle(debugfd); #else g_dbgfd = debugfd; #endif } if(argc < 2) usage(); int rv = 0; if(!strcmp(argv[1], "create")){ rv = runcreate(argc, argv); } else if(!strcmp(argv[1], "inform")){ rv = runinform(argc, argv); } else if(!strcmp(argv[1], "put")){ rv = runput(argc, argv); } else if(!strcmp(argv[1], "out")){ rv = runout(argc, argv); } else if(!strcmp(argv[1], "get")){ rv = runget(argc, argv); } else if(!strcmp(argv[1], "list")){ rv = runlist(argc, argv); } else if(!strcmp(argv[1], "search")){ rv = runsearch(argc, argv); } else if(!strcmp(argv[1], "optimize")){ rv = runoptimize(argc, argv); } else if(!strcmp(argv[1], "setindex")){ rv = runsetindex(argc, argv); } else if(!strcmp(argv[1], "importtsv")){ rv = runimporttsv(argc, argv); } else if(!strcmp(argv[1], "version") || !strcmp(argv[1], "--version")){ rv = runversion(argc, argv); } else { usage(); } return rv; }
/* parse arguments of import command */ static int runimport(int argc, char **argv){ char *upath = NULL; uint64_t lim = 0; for(int i = 2; i < argc; i++){ if(!upath && argv[i][0] == '-'){ if(!strcmp(argv[i], "-lim")){ if(++i >= argc) usage(); lim = tcatoix(argv[i]); } else { usage(); } } else if(!upath){ upath = argv[i]; } else { usage(); } } if(!upath) usage(); int rv = procimport(upath, lim); return rv; }
/* main routine */ int main(int argc, char **argv){ g_progname = argv[0]; const char *ebuf = getenv("TCRNDSEED"); g_randseed = ebuf ? tcatoix(ebuf) : tctime() * 1000; srand(g_randseed); if(argc < 2) usage(); int rv = 0; if(!strcmp(argv[1], "combo")){ rv = runcombo(argc, argv); } else if(!strcmp(argv[1], "typical")){ rv = runtypical(argc, argv); } else { usage(); } if(rv != 0){ printf("FAILED: TCRNDSEED=%u PID=%d", g_randseed, (int)getpid()); for(int i = 0; i < argc; i++){ printf(" %s", argv[i]); } printf("\n\n"); } return rv; }
/* parse arguments of list command */ static int runlist(int argc, char **argv){ char *name = NULL; int sep = -1; int max = -1; bool pv = false; bool px = false; char *fmstr = NULL; for(int i = 2; i < argc; i++){ if(!name && argv[i][0] == '-'){ if(!strcmp(argv[i], "-sep")){ if(++i >= argc) usage(); sep = sepstrtochr(argv[i]); } else if(!strcmp(argv[i], "-m")){ if(++i >= argc) usage(); max = tcatoix(argv[i]); } else if(!strcmp(argv[i], "-pv")){ pv = true; } else if(!strcmp(argv[i], "-px")){ px = true; } else if(!strcmp(argv[i], "-fm")){ if(++i >= argc) usage(); fmstr = argv[i]; } else { usage(); } } else if(!name){ name = argv[i]; } else { usage(); } } if(!name) usage(); name = tcsprintf("%s#mode=r", name); int rv = proclist(name, sep, max, pv, px, fmstr); tcfree(name); return rv; }
/* parse arguments of list command */ static int runlist(int argc, char **argv){ char *path = NULL; int omode = 0; int max = -1; bool pv = false; bool px = false; char *fmstr = NULL; for(int i = 2; i < argc; i++){ if(!path && argv[i][0] == '-'){ if(!strcmp(argv[i], "-nl")){ omode |= HDBONOLCK; } else if(!strcmp(argv[i], "-nb")){ omode |= HDBOLCKNB; } else if(!strcmp(argv[i], "-m")){ if(++i >= argc) usage(); max = tcatoix(argv[i]); } else if(!strcmp(argv[i], "-pv")){ pv = true; } else if(!strcmp(argv[i], "-px")){ px = true; } else if(!strcmp(argv[i], "-fm")){ if(++i >= argc) usage(); fmstr = argv[i]; } else { usage(); } } else if(!path){ path = argv[i]; } else { usage(); } } if(!path) usage(); int rv = proclist(path, omode, max, pv, px, fmstr); return rv; }
/* parse arguments of create command */ static int runcreate(int argc, char **argv){ char *dbpath = NULL; char *sstr = NULL; bool fts = false; for(int i = 2; i < argc; i++){ if(!dbpath && argv[i][0] == '-'){ if(!strcmp(argv[i], "-fts")){ fts = true; } else { usage(); } } else if(!dbpath){ dbpath = argv[i]; } else if(!sstr){ sstr = argv[i]; } else { usage(); } } if(!dbpath) usage(); int scale = sstr ? tcatoix(sstr) : -1; int rv = proccreate(dbpath, scale, fts); return rv; }
/* parse arguments of optimize command */ static int runoptimize(int argc, char **argv) { char *path = NULL; char *lmstr = NULL; char *nmstr = NULL; char *bstr = NULL; char *astr = NULL; char *fstr = NULL; TCCMP cmp = NULL; int opts = UINT8_MAX; int omode = 0; bool df = false; for (int i = 2; i < argc; i++) { if (!path && argv[i][0] == '-') { if (!strcmp(argv[i], "-cd")) { cmp = tccmpdecimal; } else if (!strcmp(argv[i], "-ci")) { cmp = tccmpint32; } else if (!strcmp(argv[i], "-cj")) { cmp = tccmpint64; } else if (!strcmp(argv[i], "-tl")) { if (opts == UINT8_MAX) opts = 0; opts |= BDBTLARGE; } else if (!strcmp(argv[i], "-td")) { if (opts == UINT8_MAX) opts = 0; opts |= BDBTDEFLATE; } else if (!strcmp(argv[i], "-tb")) { if (opts == UINT8_MAX) opts = 0; opts |= BDBTBZIP; } else if (!strcmp(argv[i], "-tt")) { if (opts == UINT8_MAX) opts = 0; opts |= BDBTTCBS; } else if (!strcmp(argv[i], "-tx")) { if (opts == UINT8_MAX) opts = 0; opts |= BDBTEXCODEC; } else if (!strcmp(argv[i], "-tz")) { if (opts == UINT8_MAX) opts = 0; } else if (!strcmp(argv[i], "-nl")) { omode |= BDBONOLCK; } else if (!strcmp(argv[i], "-nb")) { omode |= BDBOLCKNB; } else if (!strcmp(argv[i], "-df")) { df = true; } else { usage(); } } else if (!path) { path = argv[i]; } else if (!lmstr) { lmstr = argv[i]; } else if (!nmstr) { nmstr = argv[i]; } else if (!bstr) { bstr = argv[i]; } else if (!astr) { astr = argv[i]; } else if (!fstr) { fstr = argv[i]; } else { usage(); } } if (!path) usage(); int lmemb = lmstr ? tcatoix(lmstr) : -1; int nmemb = nmstr ? tcatoix(nmstr) : -1; int bnum = bstr ? tcatoix(bstr) : -1; int apow = astr ? tcatoix(astr) : -1; int fpow = fstr ? tcatoix(fstr) : -1; int rv = procoptimize(path, lmemb, nmemb, bnum, apow, fpow, cmp, opts, omode, df); return rv; }
/* parse arguments of search command */ static int runsearch(int argc, char **argv){ char *path = NULL; TCLIST *conds = tcmpoollistnew(tcmpoolglobal()); char *oname = NULL; char *otype = NULL; int omode = 0; int max = -1; int skip = -1; bool pv = false; bool px = false; bool kw = false; bool ph = false; int bt = 0; bool rm = false; char *mtype = NULL; for(int i = 2; i < argc; i++){ if(!path && argv[i][0] == '-'){ if(!strcmp(argv[i], "-nl")){ omode |= TDBONOLCK; } else if(!strcmp(argv[i], "-nb")){ omode |= TDBOLCKNB; } else if(!strcmp(argv[i], "-ord")){ if(++i >= argc) usage(); oname = argv[i]; if(++i >= argc) usage(); otype = argv[i]; } else if(!strcmp(argv[i], "-m")){ if(++i >= argc) usage(); max = tcatoix(argv[i]); } else if(!strcmp(argv[i], "-sk")){ if(++i >= argc) usage(); skip = tcatoix(argv[i]); } else if(!strcmp(argv[i], "-kw")){ kw = true; } else if(!strcmp(argv[i], "-pv")){ pv = true; } else if(!strcmp(argv[i], "-px")){ px = true; } else if(!strcmp(argv[i], "-ph")){ ph = true; } else if(!strcmp(argv[i], "-bt")){ if(++i >= argc) usage(); bt = tcatoix(argv[i]); } else if(!strcmp(argv[i], "-rm")){ rm = true; } else if(!strcmp(argv[i], "-ms")){ if(++i >= argc) usage(); mtype = argv[i]; } else { usage(); } } else if(!path){ path = argv[i]; } else { tclistpush2(conds, argv[i]); } } if(!path || tclistnum(conds) % 3 != 0) usage(); int rv = procsearch(path, conds, oname, otype, omode, max, skip, pv, px, kw, ph, bt, rm, mtype); return rv; }