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 -- [email protected]
To unsubscribe send an email to [email protected]