Changeset: 7a6458e25242 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7a6458e25242 Modified Files: sql/server/sqlparse.c Branch: default Log Message:
Implements -b option that enables indent for sqlparse for now only available for WHERE's propositional logic statements diffs (168 lines): diff --git a/sql/server/sqlparse.c b/sql/server/sqlparse.c --- a/sql/server/sqlparse.c +++ b/sql/server/sqlparse.c @@ -155,11 +155,11 @@ qname_schema_object(dlist *qname) } -static char * sp_symbol2string(mvc *sql, symbol *se, int expression, char **err, int depth); +static char * sp_symbol2string(mvc *sql, symbol *se, int expression, char **err, int depth, bool indent); static char * dlist2string(mvc *sql, dlist *l, char *sep, char *lb, char *rb, int expression, char **err, int depth, bool indent); static char * -dnode2string(mvc *sql, dnode *n, int expression, char **err, int depth) +dnode2string(mvc *sql, dnode *n, int expression, char **err, int depth, bool indent) { char *s = NULL; if (n->type == type_string) { @@ -176,9 +176,9 @@ dnode2string(mvc *sql, dnode *n, int exp snprintf(buf, sizeof(buf), LLFMT, n->data.l_val); s = sa_strdup(sql->ta, buf); } else if (n->type == type_symbol) { - s = sp_symbol2string(sql, n->data.sym, expression, err, depth); + s = sp_symbol2string(sql, n->data.sym, expression, err, depth, indent); } else if (n->type == type_list) { - s = dlist2string(sql, n->data.lval, ", ", "( ", " )", expression, err, depth, false); + s = dlist2string(sql, n->data.lval, ", ", "( ", " )", expression, err, depth, indent); } else if (n->type == type_type) { s = sql_subtype_string(sql->ta, &n->data.typeval); } @@ -197,7 +197,7 @@ dlist2string(mvc *sql, dlist *l, char *s bool first_el = lb; for (n=l->h; n; n = n->next) { - char *s = dnode2string(sql, n, expression, err, depth); + char *s = dnode2string(sql, n, expression, err, depth, indent); if (!s) return NULL; @@ -284,7 +284,7 @@ sa_concat(allocator *sa, char *prefix, c } static char * -sp_symbol2string(mvc *sql, symbol *se, int expression, char **err, int depth) +sp_symbol2string(mvc *sql, symbol *se, int expression, char **err, int depth, bool indent) { if (!se) return "EMPTY SYMBOL"; @@ -294,17 +294,17 @@ sp_symbol2string(mvc *sql, symbol *se, i SelectNode *s = (SelectNode*)se; char *res = s->distinct?"SELECT DISTINCT (\n":"SELECT (\n"; if (s->from) - res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->from, expression, err, depth), "\n"); + res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->from, expression, err, depth, indent), "\n"); if (s->where) - res = sa_concat(sql->ta, "", res, "WHERE ", sp_symbol2string(sql, s->where, expression, err, depth + 1), "\n"); + res = sa_concat(sql->ta, "", res, "WHERE ", sp_symbol2string(sql, s->where, expression, err, depth + 1, indent), "\n"); if (s->groupby) - res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->groupby, expression, err, depth), "\n"); + res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->groupby, expression, err, depth, indent), "\n"); if (s->having) - res = sa_concat(sql->ta, "", res, "HAVING ", sp_symbol2string(sql, s->having, expression, err, depth), "\n"); + res = sa_concat(sql->ta, "", res, "HAVING ", sp_symbol2string(sql, s->having, expression, err, depth, indent), "\n"); if (s->orderby) - res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->orderby, expression, err, depth), "\n"); + res = sa_concat(sql->ta, "", res, NULL, sp_symbol2string(sql, s->orderby, expression, err, depth, indent), "\n"); if (s->selection) - res = sa_concat(sql->ta, "", res, "SELECTION ", dlist2string(sql, s->selection, ", ", "( ", " )", expression, err, depth, false), "\n"); + res = sa_concat(sql->ta, "", res, "SELECTION ", dlist2string(sql, s->selection, ", ", "(", ")", expression, err, depth, indent), "\n"); return res; } case SQL_NOP: { @@ -324,7 +324,7 @@ sp_symbol2string(mvc *sql, symbol *se, i return NULL; for (aux = ops; aux; aux = aux->next) { - if (!(inputs[i] = sp_symbol2string(sql, aux->data.sym, expression, err, depth))) { + if (!(inputs[i] = sp_symbol2string(sql, aux->data.sym, expression, err, depth, false))) { return NULL; } inputs_length += strlen(inputs[i]); @@ -405,7 +405,7 @@ sp_symbol2string(mvc *sql, symbol *se, i dlist *dl = se->data.lval; char *val = NULL, *tpe = NULL, *res; - if (!(val = sp_symbol2string(sql, dl->h->data.sym, expression, err, depth), 0) || + if (!(val = sp_symbol2string(sql, dl->h->data.sym, expression, err, depth, false), 0) || !(tpe = subtype2string2(sql->ta, &dl->h->next->data.typeval))) return NULL; if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(val) + strlen(tpe) + 11))) @@ -415,7 +415,7 @@ sp_symbol2string(mvc *sql, symbol *se, i case SQL_SET: { /* dlist(ident-list, expression) */ dlist *set = se->data.lval; char *ident = dlist2string(sql, set->h->data.lval, ".", NULL, NULL, expression, err, depth, false); - char *exp = dnode2string(sql, set->h->next, expression, err, depth); + char *exp = dnode2string(sql, set->h->next, expression, err, depth, indent); size_t len = strlen(ident) + strlen(exp); char *res; if ((res = SA_NEW_ARRAY(sql->ta, char, len + 6))) @@ -425,7 +425,7 @@ sp_symbol2string(mvc *sql, symbol *se, i case SQL_AND: case SQL_OR: char *tok_str = token2string(se->token); - char *args = dlist2string(sql, se->data.lval, ", ", " (", " )", expression, err, depth + 1, true); + char *args = dlist2string(sql, se->data.lval, ", ", " (", " )", expression, err, depth + 1, indent); char *res; if (!args) @@ -447,7 +447,7 @@ sp_symbol2string(mvc *sql, symbol *se, i return res; } else if (se->type == type_symbol) { char *tok_str = token2string(se->token); - char *sym = sp_symbol2string(sql, se->data.sym, expression, err, depth); + char *sym = sp_symbol2string(sql, se->data.sym, expression, err, depth, false); char *res; if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(tok_str) + strlen(sym) + 5))) @@ -491,18 +491,38 @@ sp_symbol2string(mvc *sql, symbol *se, i return NULL; } +static void +usage_error(char *selfname) +{ + printf("Usage: %s [-b] file.sql\n", selfname); +} + int main(int argc, char *argv[]) { - if (argc > 2) { - printf("usage: %s file.sql\n", argv[0]); + if (argc != 2 && argc != 3) { + usage_error(argv[0]); return -1; } + + int opt; + bool beautify = false; + while ((opt = getopt(argc, argv, "b")) != -1) { + switch (opt) { + case 'b': + beautify = true; + break; + default: /* '?' */ + usage_error(argv[0]); + return -1; + } + } + mnstr_init(); - stream *f = open_rstream(argv[1]); + stream *f = open_rstream(argv[optind]); if (!f) { - printf("ERROR: Failed to open file '%s'\n", argv[1]); + printf("ERROR: Failed to open file '%s'\n", argv[optind]); return -2; } bstream *rs = bstream_create(f, 8192); @@ -520,7 +540,7 @@ main(int argc, char *argv[]) while ((err = sqlparse(m)) == 0 && m->scanner.rs->pos < m->scanner.rs->len) { if (m->sym) { char *err = NULL; - char *res = sp_symbol2string(m, m->sym, 1, &err, 0); + char *res = sp_symbol2string(m, m->sym, 1, &err, 0, beautify); if (err) printf("ERROR:\n%s\n", err); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org