Changeset: 6f7568c33ad3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6f7568c33ad3
Modified Files:
        
Branch: default
Log Message:

merge


diffs (truncated from 1447 to 300 lines):

diff --git a/clients/odbc/driver/SQLPrepare.c b/clients/odbc/driver/SQLPrepare.c
--- a/clients/odbc/driver/SQLPrepare.c
+++ b/clients/odbc/driver/SQLPrepare.c
@@ -94,8 +94,8 @@ SQLPrepare_(ODBCStmt *stmt,
 #ifdef ODBCDEBUG
        ODBCLOG("SQLPrepare: \"%s\"\n", query);
 #endif
-       s = malloc(strlen(query) + 15);
-       strcat(strcpy(s, "prepareresult "), query);
+       s = malloc(strlen(query) + 9);
+       strcat(strcpy(s, "prepare "), query);
        free(query);
 
        ODBCResetStmt(stmt);
diff --git a/java/src/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java 
b/java/src/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
--- a/java/src/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
+++ b/java/src/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
@@ -115,7 +115,7 @@ public class MonetPreparedStatement
                        resultSetHoldability
                );
 
-               if (!super.execute("PREPARERESULT " + prepareQuery))
+               if (!super.execute("PREPARE " + prepareQuery))
                        throw new SQLException("Unexpected server response", 
"M0M10");
 
                // cheat a bit to get the ID and the number of columns
diff --git a/monetdb5/modules/atoms/mtime.mx b/monetdb5/modules/atoms/mtime.mx
--- a/monetdb5/modules/atoms/mtime.mx
+++ b/monetdb5/modules/atoms/mtime.mx
@@ -862,7 +862,7 @@ command daytime(t:timestamp) :daytime ad
 
 typedef int date;
 #define date_nil ((date) int_nil)
-#define date_isnil(X)  (X == date_nil)
+#define date_isnil(X)  ((X) == date_nil)
 @c
 #include "monetdb_config.h"
 #include "mtime.h"
@@ -875,7 +875,7 @@ typedef int date;
  */
 typedef int daytime;
 #define daytime_nil ((daytime) int_nil)
-#define daytime_isnil(X) ( X == (daytime) int_nil)
+#define daytime_isnil(X) ((X) == daytime_nil)
 
 /*
  * @- timestamp
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -4186,7 +4186,7 @@ daytime_2time_daytime( daytime *res, day
 
        /* correct fraction */
        *res = *v;
-       if (d < 3) {
+       if (!daytime_isnil(*v) && d < 3) {
                *res /= scales[3-d];
                *res *= scales[3-d];
        }
@@ -5613,6 +5613,10 @@ second_interval_daytime( lng *res, dayti
        lng r = *(int*)s;
 
        (void)sk;
+       if (daytime_isnil(*s)) {
+               *res = lng_nil;
+               return MAL_SUCCEED;
+       }
        switch(k) {
        case isec:
                break;
diff --git a/sql/backends/monet5/sql_result.mx 
b/sql/backends/monet5/sql_result.mx
--- a/sql/backends/monet5/sql_result.mx
+++ b/sql/backends/monet5/sql_result.mx
@@ -158,8 +158,15 @@ sql_time_tostr(void *TS_RES, char **buf,
        tmp = (daytime) val;
 
        len1 = daytime_tostr(&s1, &big, &tmp);
-       if (len1 == 3 && strcmp(s1, "nil") == 0) 
+       if (len1 == 3 && strcmp(s1, "nil") == 0) {
+               if (*len < 4 || *buf == NULL) {
+                       if (*buf)
+                               GDKfree(*buf);
+                       *buf = (str) GDKmalloc(*len = 4);
+               }
+               strcpy(*buf, s1);
                return len1;
+       }
 
        /* fixup the fraction, default is 3 */
        len1 += (ts_res->fraction-3);
@@ -679,12 +686,11 @@ mvc_export_prepare(mvc *c, stream *out, 
        int len2 = 1, len3 = 1;
        sql_arg *a;
        sql_subtype *t;
-       int result = (c->emode == m_prepareresult);
 
        if (!out)
                return 0;
 
-       if (result && is_project(q->rel->op) && q->rel->exps) {
+       if (is_project(q->rel->op) && q->rel->exps) {
                unsigned int max2 = 10, max3 = 10; /* to help calculate widths 
*/
                sql_rel *r = q->rel;
 
@@ -746,27 +752,17 @@ mvc_export_prepare(mvc *c, stream *out, 
        }
 
        /* write header, query type: Q_PREPARE */
-       if (result) { 
-               if (mnstr_printf(out,
-                       "&5 %d %d 6 %d\n" /* TODO: add type here: r(esult) or 
u(pdate) */
-                       "%% 
.prepare,\t.prepare,\t.prepare,\t.prepare,\t.prepare,\t.prepare # table_name\n"
-                       "%% type,\tdigits,\tscale,\tschema,\ttable,\tcolumn # 
name\n"
-                       "%% varchar,\tint,\tint,\tstr,\tstr,\tstr # type\n"
-                       "%% " SZFMT ",\t%d,\t%d,\t" SZFMT ",\t" SZFMT ",\t" 
SZFMT " # length\n",
-                       q->id, nrows, nrows, len1, len2, len3, len4, len5, 
len6) < 0) 
-                       return -1;
-       } else {
-               if (mnstr_printf(out,
-                       "&5 %d %d 3 %d\n" /* TODO: add type here: r(esult) or 
u(pdate) */
-                       "%% .prepare,\t.prepare,\t.prepare # table_name\n"
-                       "%% type,\tdigits,\tscale # name\n"
-                       "%% varchar,\tint,\tint # type\n"
-                       "%% " SZFMT ",\t%d,\t%d # length\n",
-                       q->id, nrows, nrows, len1, len2, len3) < 0) 
-                       return -1;
+       if (mnstr_printf(out,
+                        "&5 %d %d 6 %d\n" /* TODO: add type here: r(esult) or 
u(pdate) */
+                        "%% 
.prepare,\t.prepare,\t.prepare,\t.prepare,\t.prepare,\t.prepare # table_name\n"
+                        "%% type,\tdigits,\tscale,\tschema,\ttable,\tcolumn # 
name\n"
+                        "%% varchar,\tint,\tint,\tstr,\tstr,\tstr # type\n"
+                        "%% " SZFMT ",\t%d,\t%d,\t" SZFMT ",\t" SZFMT ",\t" 
SZFMT " # length\n",
+                        q->id, nrows, nrows, len1, len2, len3, len4, len5, 
len6) < 0) {
+               return -1;
        }
 
-       if (result && is_project(q->rel->op) && q->rel->exps) {
+       if (is_project(q->rel->op) && q->rel->exps) {
                sql_rel *r = q->rel;
 
                for (n = r->exps->h; n; n = n->next) {
@@ -795,24 +791,20 @@ mvc_export_prepare(mvc *c, stream *out, 
                }
        }
        if (c->params) {
-               char *extra = "";
                int i;
 
                q->paramlen = nparam;
                q->params = SA_NEW_ARRAY(q->sa, sql_subtype, nrows);
-               if (result) 
-                       extra = ",\tNULL,\tNULL,\tNULL";
                for (n = c->params->h, i=0; n; n = n->next, i++) {
                        a = n->data;
                        t = &a->type;
 
                        if (t) {
                                if (mnstr_printf(out,
-                                       "[ \"%s\",\t%d,\t%d%s\t]\n",
+                                       "[ 
\"%s\",\t%d,\t%d,\tNULL,\tNULL,\tNULL\t]\n",
                                        t->type->sqlname,
                                        t->digits,
-                                       t->scale,
-                                       extra
+                                       t->scale
                                ) < 0) {
                                        return -1;
                                }
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -392,10 +392,10 @@ sql_update_dec2011( Client c, mvc *m )
 
                                        if (c->type.type->eclass == EC_INTERVAL 
&&
                                            strcmp(c->type.type->sqlname, 
"sec_interval") == 0) {
-                                               while (bufsize < pos + 100 + 
strlen(s->base.name) + strlen(t->base.name) + 2*strlen(c->base.name))
+                                               while (bufsize < pos + 100 + 
strlen(s->base.name) + strlen(t->base.name) + 3*strlen(c->base.name))
                                                        buf = GDKrealloc(buf, 
bufsize += 1024);
-                                               pos += snprintf(buf+pos, 
bufsize-pos, "update \"%s\".\"%s\" set \"%s\"=1000*\"%s\";\n",
-                                                       s->base.name, 
t->base.name, c->base.name, c->base.name);
+                                               pos += snprintf(buf+pos, 
bufsize-pos, "update \"%s\".\"%s\" set \"%s\"=1000*\"%s\" where \"%s\" is not 
null;\n",
+                                                       s->base.name, 
t->base.name, c->base.name, c->base.name, c->base.name);
                                        }
                                }
                        }
@@ -1395,13 +1395,11 @@ SQLparser(Client c)
                /* generate and call the MAL code */
                if (m->emode == m_explain)
                        SQLshowPlan(c);
-               if (m->emode == m_dot)
-                       SQLshowDot(c);
                if (m->emod & mod_trace)
                        SQLsetTrace(be, c, TRUE);
                if (m->emod & mod_debug)
                        SQLsetDebugger(c, m, TRUE);
-               if ((m->emode != m_inplace && m->emode != m_prepare && m->emode 
!= m_prepareresult && !m->caching && m->emode != m_explain && m->emode != 
m_dot) || s->type == st_none || m->type == Q_TRANS) {
+               if ((m->emode != m_inplace && m->emode != m_prepare && 
!m->caching && m->emode != m_explain ) || s->type == st_none || m->type == 
Q_TRANS) {
                        InstrPtr p;
                        MalBlkPtr curBlk;
 
@@ -1418,6 +1416,8 @@ SQLparser(Client c)
 
                        if (m->emode == m_inplace)
                                m->emode = m_normal;
+                       if (m->emode == m_dot)
+                               SQLshowDot(c);
                } else {
                        /* generate a factory instantiation */
                        be->q = qc_insert(m->qc,
@@ -1427,7 +1427,7 @@ SQLparser(Client c)
                                        m->args,      /* the argument list */
                                        m->argc,
                                        m->scanner.key ^ 
m->session->schema->base.id,  /* the statement hash key */
-                                       (m->emode == m_prepare || m->emode == 
m_prepareresult) ? Q_PREPARE :
+                                       m->emode == m_prepare ? Q_PREPARE :
                                        m->type,  /* the type of the statement 
*/
                                        sql_escape_str(QUERY(m->scanner)));
                        scanner_query_processed(&(m->scanner));
@@ -1446,7 +1446,7 @@ SQLparser(Client c)
                }
        }
        if (be->q) {
-               if (m->emode == m_prepare || m->emode == m_prepareresult)
+               if (m->emode == m_prepare)
                        err = mvc_export_prepare(m, c->fdout, be->q, "");
                else if (m->emode == m_inplace) {
                        /* everything ready for a fast call */
@@ -1637,7 +1637,7 @@ SQLengineIntern(Client c, backend *be)
                msg = SQLexecutePrepared(c, be, be->q );
                goto cleanup_engine;
        }
-       if( m->emode == m_prepare || m->emode == m_prepareresult){
+       if( m->emode == m_prepare){
                goto cleanup_engine;
        } else if (m->emode == m_explain || m->emode == m_dot) {
                /*
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -5551,7 +5551,7 @@ _rel_optimizer(mvc *sql, sql_rel *rel, i
                rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes); 
        }
 
-       if (gp.cnt[op_select] && (!sql->emode == m_prepare || !sql->emode == 
m_prepareresult)) 
+       if (gp.cnt[op_select] && !sql->emode == m_prepare) 
                rel = rewrite(sql, rel, &rel_simplify_like_select, &changes); 
 
        if (gp.cnt[op_select]) 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -4334,7 +4334,7 @@ rel_value_exp2(mvc *sql, sql_rel **rel, 
                return NULL;
        }
        case SQL_PARAMETER:{
-               if (sql->emode != m_prepare && sql->emode != m_prepareresult)
+               if (sql->emode != m_prepare)
                        return sql_error(sql, 02, "SELECT: parameters ('?') not 
allowed in normal queries, use PREPARE");
                assert(se->type == type_int);
                return exp_atom_ref(sql->sa, se->data.i_val, NULL);
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -48,7 +48,6 @@
 #define m_prepare 3
 #define m_explain 4 
 #define m_plan 5 
-#define m_prepareresult 6
 #define m_dot 8
 
 /* special modes for function/procedure and view instantiation and
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -544,7 +544,7 @@ SQLCODE SQLERROR UNDER WHENEVER
 %token CHECK CONSTRAINT CREATE
 %token TYPE PROCEDURE FUNCTION AGGREGATE RETURNS EXTERNAL sqlNAME DECLARE
 %token CALL LANGUAGE 
-%token SQL_EXPLAIN SQL_PLAN SQL_DEBUG SQL_TRACE SQL_DOT PREPARE PREPARERESULT 
EXECUTE
+%token SQL_EXPLAIN SQL_PLAN SQL_DEBUG SQL_TRACE SQL_DOT PREPARE EXECUTE
 %token DEFAULT DISTINCT DROP
 %token FOREIGN
 %token RENAME ENCRYPTED UNENCRYPTED PASSWORD GRANT REVOKE ROLE ADMIN INTO
@@ -595,20 +595,6 @@ sqlstmt:
                          }
                          YYACCEPT;
                        }
- | PREPARERESULT       { mvc *m = (mvc*)parm;
-                         m->emode = m_prepareresult; 
-                         m->scanner.as = m->scanner.yycur; 
-                         m->scanner.key = 0;
-                       }
-       sql SCOLON      { mvc *m = (mvc*)parm;
-                         if (m->sym) {
-                               append_symbol(m->sym->data.lval, $3);
-                               $$ = m->sym;
-                         } else {
-                               m->sym = $$ = $3;
-                         }
-                         YYACCEPT;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to