Changeset: 373b1b4e4b8a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=373b1b4e4b8a
Modified Files:
        clients/odbc/driver/SQLPrepare.c
        java/src/nl/cwi/monetdb/jdbc/MonetPreparedStatement.java
        sql/backends/monet5/sql_result.mx
        sql/backends/monet5/sql_scenario.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_scan.c
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.err
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.stable.out
        
sql/test/BugTracker-2009/Tests/decimal_needs_truncation.SF-2605686.stable.out
        
sql/test/BugTracker-2009/Tests/prepare_commit_execute.SF-2606020.stable.out
        sql/test/BugTracker-2009/Tests/prepare_decimal_bug.SF-2831994.stable.out
        
sql/test/BugTracker-2010/Tests/crash_with_prepare_statement.Bug-2549.stable.out
        sql/test/BugTracker-2010/Tests/limit_in_prepare.Bug-2552.stable.out
        
sql/test/BugTracker-2010/Tests/prepare_on_boolean_bug.Bug-2581.stable.out
        
sql/test/BugTracker-2010/Tests/prepare_statements_crash_server.Bug-2599.stable.out
        sql/test/BugTracker-2010/Tests/prepare_stmt.Bug-2533.Bug-2534.stable.err
        sql/test/BugTracker-2010/Tests/prepare_stmt.Bug-2533.Bug-2534.stable.out
        sql/test/BugTracker/Tests/bind_with_cast.SF-1720934.stable.err
        sql/test/BugTracker/Tests/bind_with_cast.SF-1720934.stable.out
        sql/test/BugTracker/Tests/decimal_prepare.SF-1655818.stable.out
        sql/test/BugTracker/Tests/large_prepare.SF-1363729.stable.out
        sql/test/BugTracker/Tests/large_prepare_2.SF-1363729.stable.out
        sql/test/BugTracker/Tests/prepare_decimal_float.SF-1675795.stable.out
Branch: Dec2011
Log Message:

PREPARERESULT is now PREPARE.
parameters can be reliably recognized by a NULL column name (as
opposed to an empty string).


diffs (truncated from 1070 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/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
@@ -679,12 +679,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 +745,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 +784,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
@@ -1389,7 +1389,7 @@ SQLparser(Client c)
                        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) || 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;
 
@@ -1415,7 +1415,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));
@@ -1434,7 +1434,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 */
@@ -1626,7 +1626,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 ){
                /*
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
@@ -5365,7 +5365,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
@@ -4350,7 +4350,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
 
 /* special modes for function/procedure and view instantiation and
    dependency generation */
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
@@ -535,7 +535,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 PREPARE PREPARERESULT EXECUTE
+%token SQL_EXPLAIN SQL_PLAN SQL_DEBUG SQL_TRACE PREPARE EXECUTE
 %token DEFAULT DISTINCT DROP
 %token FOREIGN
 %token RENAME ENCRYPTED UNENCRYPTED PASSWORD GRANT REVOKE ROLE ADMIN INTO
@@ -586,20 +586,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;
-                       }
  | SQL_PLAN            { mvc *m = (mvc*)parm;
                          m->emode = m_plan;
                          m->scanner.as = m->scanner.yycur; 
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -285,7 +285,6 @@ scanner_init_keywords(void)
        keywords_insert("DEBUG", SQL_DEBUG);
        keywords_insert("TRACE", SQL_TRACE);
        keywords_insert("PREPARE", PREPARE);
-       keywords_insert("PREPARERESULT", PREPARERESULT);
        keywords_insert("PREP", PREPARE);
        keywords_insert("EXECUTE", EXECUTE);
        keywords_insert("EXEC", EXECUTE);
diff --git 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.err
 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.err
--- 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.err
+++ 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.err
@@ -10,10 +10,10 @@ stderr of test 'prepare-where.SF-1238867
 # 13:00:07 >  Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb 
--host=localhost --port=41457  < 
prepare-where.SF-1238867.1238959.1238965.1240124.sql
 # 13:00:07 >  
 
-MAPI  = monetdb@ottar:34070
+MAPI  = monetdb@madrid:32243
 QUERY = prepare select * from env() as env where ? = ?;
 ERROR = !Cannot have a parameter (?) on both sides of an expression
-MAPI  = monetdb@ottar:34070
+MAPI  = monetdb@madrid:32243
 QUERY = prepare select ? from env() as env;
 ERROR = !SELECT: subquery result missing
 
diff --git 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.out
 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.out
--- 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.out
+++ 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare-where.SF-1238867.1238959.1238965.1240124.stable.out
@@ -13,23 +13,30 @@ stdout of test 'prepare-where.SF-1238867
 
 Ready.
 
+# 12:37:36 >  
+# 12:37:36 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=madrid" 
"--port=32243"
+# 12:37:36 >  
 
-# 11:51:01 >  
-# 11:51:01 >  Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb 
--host=localhost --port=35781  < 
prepare-where.SF-1238867.1238959.1238965.1240124.sql
-# 11:51:01 >  
+#prepare select * from env() as env where 1 = ?;
+#prepare select * from env() as env where 1 = ?;
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    str,    str,    str # type
+% 7,   4,      1,      0,      3,      5 # length
+[ "varchar",   1024,   0,      "",     "env",  "name"  ]
+[ "varchar",   2048,   0,      "",     "env",  "value" ]
+[ "tinyint",   8,      0,      NULL,   NULL,   NULL    ]
+#prepare select * from env() as env where name in (?);
+#prepare select * from env() as env where name in (?);
+% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
+% type,        digits, scale,  schema, table,  column # name
+% varchar,     int,    int,    str,    str,    str # type
+% 7,   7,      1,      0,      3,      5 # length
+[ "varchar",   1024,   0,      "",     "env",  "name"  ]
+[ "varchar",   2048,   0,      "",     "env",  "value" ]
+[ "varchar",   1024,   0,      NULL,   NULL,   NULL    ]
 
-% .prepare,    .prepare,       .prepare # table_name
-% type,        digits, scale # name
-% varchar,     int,    int # type
-% 7,   1,      1 # length
-[ "tinyint",   8,      0       ]
-% .prepare,    .prepare,       .prepare # table_name
-% type,        digits, scale # name
-% varchar,     int,    int # type
-% 7,   4,      1 # length
-[ "varchar",   1024,   0       ]
+# 12:37:36 >  
+# 12:37:36 >  "Done."
+# 12:37:36 >  
 
-# 13:00:07 >  
-# 13:00:07 >  Done.
-# 13:00:07 >  
-
diff --git 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.stable.out
 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.stable.out
--- 
a/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.stable.out
+++ 
b/sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.stable.out
@@ -19,11 +19,15 @@ Ready.
 # 09:15:18 >  
 
 [ 3    ]
-% .prepare,    .prepare,       .prepare # table_name
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to