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 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; }
SDB_API const char *sdb_type(const char *k) { if (!k || !*k) return "undefined"; if (sdb_isnum (k)) return "number"; if (sdb_isjson (k)) return "json"; if (strchr (k, ',')) return "array"; if (!strcmp (k, "true") || !strcmp (k, "false")) return "boolean"; return "string"; }
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; }