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

handle somewhat more dnode and dlist cases


diffs (101 lines):

diff --git a/sql/server/sqlparse.c b/sql/server/sqlparse.c
--- a/sql/server/sqlparse.c
+++ b/sql/server/sqlparse.c
@@ -172,10 +172,16 @@ dnode2string(mvc *sql, dnode *n, int exp
                char buf[10];
                snprintf(buf, sizeof(buf), "%d", n->data.i_val);
                s = sa_strdup(sql->ta, buf);
+       } else if (n->type == type_lng) {
+               char buf[16];
+               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);
        } else if (n->type == type_list) {
                s = dlist2string(sql, n->data.lval, ", ", expression, err);
+       } else if (n->type == type_type) {
+               s = sql_subtype_string(sql->ta, &n->data.typeval);
        }
        return s;
 }
@@ -184,17 +190,18 @@ static char *
 dlist2string(mvc *sql, dlist *l, char *sep, int expression, char **err)
 {
        if (!l)
-               return " EMPTY_LIST ";
+               return " EMPTY_LIST";
        char *b = NULL;
        dnode *n;
 
+       int seplen = strlen(sep);
        for (n=l->h; n; n = n->next) {
                char *s = dnode2string(sql, n, expression, err);
 
                if (!s)
                        return NULL;
                if (b) {
-                       char *o = SA_NEW_ARRAY(sql->ta, char, strlen(b) + 
strlen(s) + 2);
+                       char *o = SA_NEW_ARRAY(sql->ta, char, strlen(b) + 
strlen(s) + seplen + 1);
                        if (o)
                                stpcpy(stpcpy(stpcpy(o, b), sep), s);
                        b = o;
@@ -230,7 +237,7 @@ static char *
 sp_symbol2string(mvc *sql, symbol *se, int expression, char **err)
 {
        if (!se)
-               return "EMPTY SYMBOL ";
+               return "EMPTY SYMBOL";
        /* inner sp_symbol2string uses the temporary allocator */
        switch (se->token) {
        case SQL_NOP: {
@@ -290,8 +297,11 @@ sp_symbol2string(mvc *sql, symbol *se, i
                char *res;
 
                if (!sname)
-                       sname = sql->session->schema->base.name;
-               sname = symbol_escape_ident(sql->ta, sname);
+                       sname = "";
+               else
+                       sname = symbol_escape_ident(sql->ta, sname);
+               if (!seq)
+                       seq = "";
 
                if ((res = SA_NEW_ARRAY(sql->ta, char, strlen("next value for 
\"") + strlen(sname) + strlen(seq) + 5)))
                        stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "next value for 
\""), sname), "\".\""), seq), "\"");
@@ -321,10 +331,7 @@ sp_symbol2string(mvc *sql, symbol *se, i
                                stpcpy(stpcpy(stpcpy(stpcpy(stpcpy(res, "\""), 
first), "\".\""), second), "\"");
                        return res;
                } else {
-                       char *e = dlist2string(sql, l, ".", expression, err);
-                       if (e)
-                               *err = e;
-                       return NULL;
+                       return dlist2string(sql, l, ".", expression, err);
                }
        }
        case SQL_CAST: {
@@ -359,6 +366,24 @@ sp_symbol2string(mvc *sql, symbol *se, i
                        if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(tok_str) 
+ strlen(args) + 5)))
                                stpcpy(stpcpy(stpcpy(stpcpy(res, tok_str), "( 
"), args), ") ");
                        return res;
+               } else if (se->type == type_symbol) {
+                       char *tok_str = token2string(se->token);
+                       char *sym = sp_symbol2string(sql, se->data.sym,  
expression, err);
+                       char *res;
+
+                       if ((res = SA_NEW_ARRAY(sql->ta, char, strlen(tok_str) 
+ strlen(sym) + 5)))
+                               stpcpy(stpcpy(stpcpy(stpcpy(res, tok_str), " 
"), sym), " ");
+                       return res;
+               } else if (se->type == type_string) {
+                       char *tok_str = token2string(se->token);
+                       char *res = NULL;
+
+                       if (se->data.sval && ((res = SA_NEW_ARRAY(sql->ta, 
char, strlen(tok_str) + strlen(se->data.sval) + 2)))) {
+                               stpcpy(stpcpy(stpcpy(res, tok_str), " "), 
se->data.sval);
+                               return res;
+                       } else
+                               return tok_str;
+                       return res;
                } else {
                        const char msg[] = "SQL feature not yet available for 
expressions and default values: ";
                        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