Changeset: 2ec69f2ad422 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2ec69f2ad422
Modified Files:
        sql/server/sqlparse.c
Branch: clean_parser
Log Message:

improved adding list brackets


diffs (112 lines):

diff --git a/sql/server/sqlparse.c b/sql/server/sqlparse.c
--- a/sql/server/sqlparse.c
+++ b/sql/server/sqlparse.c
@@ -157,7 +157,7 @@ qname_schema_object(dlist *qname)
 
 
 static char * sp_symbol2string(mvc *sql, symbol *se, int expression, char 
**err);
-static char * dlist2string(mvc *sql, dlist *l, char *sep, int expression, char 
**err);
+static char * dlist2string(mvc *sql, dlist *l, char *sep, char *lb, char *rb, 
int expression, char **err);
 
 static char *
 dnode2string(mvc *sql, dnode *n, int expression, char **err)
@@ -179,7 +179,7 @@ dnode2string(mvc *sql, dnode *n, int exp
        } else if (n->type == type_symbol) {
                s = sp_symbol2string(sql, n->data.sym, expression, err);
        } else if (n->type == type_list) {
-               s = dlist2string(sql, n->data.lval, ", ", expression, err);
+               s = dlist2string(sql, n->data.lval, ", ", "( ", " )", 
expression, err);
        } else if (n->type == type_type) {
                s = sql_subtype_string(sql->ta, &n->data.typeval);
        }
@@ -187,14 +187,15 @@ dnode2string(mvc *sql, dnode *n, int exp
 }
 
 static char *
-dlist2string(mvc *sql, dlist *l, char *sep, int expression, char **err)
+dlist2string(mvc *sql, dlist *l, char *sep, char *lb, char *rb, int 
expression, char **err)
 {
        if (!l)
                return " EMPTY_LIST";
-       char *b = NULL;
+       char *b = lb;
        dnode *n;
 
        int seplen = strlen(sep);
+       bool skipsep = lb;
        for (n=l->h; n; n = n->next) {
                char *s = dnode2string(sql, n, expression, err);
 
@@ -202,8 +203,13 @@ dlist2string(mvc *sql, dlist *l, char *s
                        return NULL;
                if (b) {
                        char *o = SA_NEW_ARRAY(sql->ta, char, strlen(b) + 
strlen(s) + seplen + 1);
-                       if (o)
-                               stpcpy(stpcpy(stpcpy(o, b), sep), s);
+                       if (o) {
+                               if (skipsep)
+                                       stpcpy(stpcpy(o, b), s);
+                               else
+                                       stpcpy(stpcpy(stpcpy(o, b), sep), s);
+                               skipsep = false;
+                       }
                        b = o;
                        if (b == NULL)
                                return NULL;
@@ -211,6 +217,12 @@ dlist2string(mvc *sql, dlist *l, char *s
                        b = s;
                }
        }
+       if (rb) {
+               char *o = SA_NEW_ARRAY(sql->ta, char, strlen(b) + strlen(rb) + 
1);
+               if (o)
+                       stpcpy(stpcpy(o, b), rb);
+               b = o;
+       }
        return b;
 }
 
@@ -273,7 +285,7 @@ sp_symbol2string(mvc *sql, symbol *se, i
                if (s->orderby)
                        res = sa_concat(sql->ta, " ", res, NULL, 
sp_symbol2string(sql, s->orderby, expression, err), "\n");
                if (s->selection)
-                       res = sa_concat(sql->ta, " ", res, "SELECTION ", 
dlist2string(sql, s->selection, ", ", expression, err), "\n");
+                       res = sa_concat(sql->ta, " ", res, "SELECTION ", 
dlist2string(sql, s->selection, ", ", "( ", " )", expression, err), "\n");
                return res;
        }
        case SQL_NOP: {
@@ -367,7 +379,7 @@ sp_symbol2string(mvc *sql, symbol *se, i
                                stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "\""), 
first), "\".\""), second), "\"");
                        return res;
                } else {
-                       return dlist2string(sql, l, ".", expression, err);
+                       return dlist2string(sql, l, ".", NULL, NULL, 
expression, err);
                }
        }
        case SQL_CAST: {
@@ -382,7 +394,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, ".", expression, err);
+                                         char *ident = dlist2string(sql, 
set->h->data.lval, ".", NULL, NULL, expression, err);
                                          char *exp = dnode2string(sql, 
set->h->next, expression, err);
                                          int len = strlen(ident) + strlen(exp);
                                          char *res;
@@ -394,13 +406,13 @@ sp_symbol2string(mvc *sql, symbol *se, i
                /* generic */
                if (se->type == type_list) {
                        char *tok_str = token2string(se->token);
-                       char *args = dlist2string(sql, se->data.lval, ", ", 
expression, err);
+                       char *args = dlist2string(sql, se->data.lval, ", ", "( 
", " )", expression, err);
                        char *res;
 
                        if (!args)
                                args = "";
-                       if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(tok_str) 
+ strlen(args) + 5)))
-                               stpcpy(stpcpy(stpcpy(stpcpy(res, tok_str), "( 
"), args), ") ");
+                       if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(tok_str) 
+ strlen(args) + 1)))
+                               stpcpy(stpcpy(res, tok_str), args);
                        return res;
                } else if (se->type == type_symbol) {
                        char *tok_str = token2string(se->token);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to