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

Reply via email to