int main(int argc, const char **argv) { char *line; int i; if (argc<2) showusage (1); if (!strcmp (argv[1], "-d")) { if (argc == 4) return dbdiff (argv[2], argv[3]); showusage(0); } else if (!strcmp (argv[1], "-v")) showversion (); if (!strcmp (argv[1], "-h")) showusage (0); if (!strcmp (argv[1], "-j")) { if (argc>2) return sdb_dump (argv[2], 1); printf ("Missing database filename after -j\n"); return 1; } if (!strcmp (argv[1], "-")) { argv[1] = ""; if (argc == 2) { argv[2] = "-"; argc++; } } if (argc == 2) return sdb_dump (argv[1], 0); #if USE_MMAN signal (SIGINT, terminate); signal (SIGHUP, syncronize); #endif if (!strcmp (argv[2], "=")) return createdb (argv[1]); else if (!strcmp (argv[2], "-")) { if ((s = sdb_new (NULL, argv[1], 0))) { sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (;(line = stdin_gets ());) { save = sdb_query (s, line); free (line); } } } else { s = sdb_new (NULL, argv[1], 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (i=2; i<argc; i++) save = sdb_query (s, argv[i]); } terminate (0); return 0; }
static int sdb_grep_dump(const char *db, int fmt, bool grep, const char *expgrep) { char *v; char k[SDB_MAX_KEY] = { 0 }; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) { return 1; } sdb_config (s, options); sdb_dump_begin (s); if (fmt == MODE_JSON) { printf ("{"); } while (sdb_dump_dupnext (s, k, &v, NULL)) { if (grep && !strstr (k, expgrep) && !strstr (v, expgrep)) { continue; } switch (fmt) { case MODE_JSON: if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v == '{' || *v == '[') { printf ("%s\"%s\":%s", comma, k, v); } else { printf ("%s\"%s\":\"%s\"", comma, k, v); } comma = ","; break; case MODE_ZERO: printf ("%s=%s", k, v); fwrite ("", 1, 1, stdout); break; default: printf ("%s=%s\n", k, v); break; } free (v); } switch (fmt) { case MODE_ZERO: fflush (stdout); write (1, "", 1); break; case MODE_JSON: printf ("}\n"); break; } sdb_free (s); return 0; }
static void synchronize(int sig UNUSED) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->path, s->name, s->lock); if (n) { sdb_config (n, options); sdb_free (s); s = n; } }
static void syncronize(int sig UNUSED) { // TODO: must be in sdb_sync() or wat? Sdb *n; sdb_sync (s); n = sdb_new (s->path, s->name, s->lock); if (n) { sdb_config (n, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_free (s); s = n; } }
static int sdb_dump (const char *db, int fmt) { char *k, *v; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_dump_begin (s); if (fmt==MODE_JSON) printf ("{"); while (sdb_dump_dupnext (s, &k, &v, NULL)) { switch (fmt) { case MODE_JSON: if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v=='{' || *v=='[') { printf ("%s\"%s\":%s", comma, k, v); } else printf ("%s\"%s\":\"%s\"", comma, k, v); comma = ","; break; case MODE_ZERO: printf ("%s=%s", k, v); break; default: printf ("%s=%s\n", k, v); break; } #if 0 if (qf && strchr (v, SDB_RS)) { for (p=v; *p; p++) if (*p==SDB_RS) *p = ','; printf ("[]%s=%s\n", k, v); } else { printf ("%s=%s\n", k, v); } #endif free (k); free (v); } switch (fmt) { case MODE_ZERO: fflush (stdout); write (1, "", 1); break; case MODE_JSON: printf ("}\n"); break; } sdb_free (s); return 0; }
static int createdb(const char *f) { char *line, *eq; s = sdb_new (NULL, f, 0); if (!s || !sdb_disk_create (s)) { fprintf (stderr, "Cannot create database\n"); return 1; } sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (;(line = stdin_gets ());) { if ((eq = strchr (line, '='))) { *eq = 0; sdb_disk_insert (s, line, eq+1); } free (line); } sdb_disk_finish (s); return 0; }
static int createdb(const char *f, const char **args, int nargs) { char *line, *eq; s = sdb_new (NULL, f, 0); if (!s || !sdb_disk_create (s)) { eprintf ("Cannot create database\n"); return 1; } insertkeys (s, args, nargs, '='); sdb_config (s, options); for (;(line = stdin_slurp (NULL));) { if ((eq = strchr (line, '='))) { *eq++ = 0; sdb_disk_insert (s, line, eq); } free (line); } sdb_disk_finish (s); return 0; }
static int sdb_dump (const char *db, int json) { char *k, *v; const char *comma = ""; Sdb *s = sdb_new (NULL, db, 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_dump_begin (s); if (json) printf ("{"); while (sdb_dump_dupnext (s, &k, &v)) { if (json) { if (!strcmp (v, "true") || !strcmp (v, "false")) { printf ("%s\"%s\":%s", comma, k, v); } else if (sdb_isnum (v)) { printf ("%s\"%s\":%llu", comma, k, sdb_atoi (v)); } else if (*v=='{' || *v=='[') { printf ("%s\"%s\":%s", comma, k, v); } else printf ("%s\"%s\":\"%s\"", comma, k, v); comma = ","; } else { printf ("%s=%s\n", k, v); } #if 0 if (qf && strchr (v, SDB_RS)) { for (p=v; *p; p++) if (*p==SDB_RS) *p = ','; printf ("[]%s=%s\n", k, v); } else { printf ("%s=%s\n", k, v); } #endif free (k); free (v); } if (json) printf ("}\n"); sdb_free (s); return 0; }
static int sdb_dump (const char *db, int qf) { char *k, *v; Sdb *s = sdb_new (NULL, db, 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); sdb_dump_begin (s); while (sdb_dump_dupnext (s, &k, &v)) { printf ("%s=%s\n", k, v); #if 0 if (qf && strchr (v, SDB_RS)) { for (p=v; *p; p++) if (*p==SDB_RS) *p = ','; printf ("[]%s=%s\n", k, v); } else { printf ("%s=%s\n", k, v); } #endif free (k); free (v); } sdb_free (s); return 0; }
int main(int argc, const char **argv) { char *line; const char *arg, *grep = NULL; int i, ret, fmt = MODE_DFLT; int db0 = 1, argi = 1; bool interactive = false; /* terminate flags */ if (argc < 2) { return showusage (1); } arg = argv[1]; if (arg[0] == '-') {// && arg[1] && arg[2]==0) { switch (arg[1]) { case 0: /* no-op */ break; case '0': fmt = MODE_ZERO; db0++; argi++; if (db0 >= argc) { return showusage (1); } break; case 'g': db0 += 2; if (db0 >= argc) { return showusage (1); } grep = argv[2]; argi += 2; break; case 'J': options |= SDB_OPTION_JOURNAL; db0++; argi++; if (db0 >= argc) { return showusage (1); } break; case 'c': return (argc < 3)? showusage (1) : showcount (argv[2]); case 'v': return showversion (); case 'h': return showusage (2); case 'e': return base64encode (); case 'd': return base64decode (); case 'D': if (argc == 4) { return dbdiff (argv[2], argv[3]); } return showusage (0); case 'j': if (argc > 2) { return sdb_dump (argv[db0 + 1], MODE_JSON); } return jsonIndent(); default: eprintf ("Invalid flag %s\n", arg); break; } } /* sdb - */ if (argi == 1 && !strcmp (argv[argi], "-")) { /* no database */ argv[argi] = ""; if (argc == db0 + 1) { interactive = true; /* if no argument passed */ argv[argi] = "-"; argc++; argi++; } } /* sdb dbname */ if (argc - 1 == db0) { if (grep) { return sdb_grep (argv[db0], fmt, grep); } return sdb_dump (argv[db0], fmt); } #if USE_MMAN signal (SIGINT, terminate); signal (SIGHUP, synchronize); #endif ret = 0; if (interactive || !strcmp (argv[db0 + 1], "-")) { if ((s = sdb_new (NULL, argv[db0], 0))) { sdb_config (s, options); int kvs = db0 + 2; if (kvs < argc) { save |= insertkeys (s, argv + argi + 2, argc - kvs, '-'); } for (;(line = stdin_slurp (NULL));) { save |= sdb_query (s, line); if (fmt) { fflush (stdout); write (1, "", 1); } free (line); } } } else if (!strcmp (argv[db0 + 1], "=")) { ret = createdb (argv[db0], NULL, 0); } else { s = sdb_new (NULL, argv[db0], 0); if (!s) { return 1; } sdb_config (s, options); for (i = db0 + 1; i < argc; i++) { save |= sdb_query (s, argv[i]); if (fmt) { fflush (stdout); write (1, "", 1); } } } terminate (0); return ret; }
int main(int argc, const char **argv) { char *line; int i, ret, fmt = MODE_DFLT; int db0 = 1, argi = 1; int interactive = 0; /* terminate flags */ if (argc<2) showusage (1); if (!strcmp (argv[1], "-d")) { if (argc == 4) return dbdiff (argv[2], argv[3]); showusage (0); } if (!strcmp (argv[1], "-v")) showversion (); if (!strcmp (argv[1], "-h")) showusage (2); if (!strcmp (argv[1], "-j")) { if (argc>2) return sdb_dump (argv[db0+1], MODE_JSON); eprintf ("Missing database filename after -j\n"); return 1; } /* flags */ if (!strcmp (argv[argi], "-0")) { fmt = MODE_ZERO; db0++; argi++; } if (!strcmp (argv[argi], "-")) { /* no database */ argv[argi] = ""; if (argc == db0+1) { interactive = 1; /* if no argument passed */ argv[argi] = "-"; argc++; argi++; } } if (argc-1 == db0) return sdb_dump (argv[db0], fmt); #if USE_MMAN signal (SIGINT, terminate); signal (SIGHUP, syncronize); #endif ret = 0; if (interactive || !strcmp (argv[db0+1], "-")) { if ((s = sdb_new (NULL, argv[db0], 0))) { save |= insertkeys (s, argv+3, argc-3, '-'); sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (;(line = stdin_gets ());) { save |= sdb_query (s, line); if (fmt) { fflush (stdout); write (1, "", 1); } free (line); } } } else if (!strcmp (argv[db0+1], "=")) { ret = createdb (argv[db0], argv+db0+2, argc-(db0+2)); } else { s = sdb_new (NULL, argv[db0], 0); if (!s) return 1; sdb_config (s, SDB_OPTION_FS | SDB_OPTION_NOSTAMP); for (i=db0+1; i<argc; i++) { save |= sdb_query (s, argv[i]); if (fmt) { fflush (stdout); write (1, "", 1); } } } terminate (0); return ret; }