Changeset: a21f0a23b0c3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a21f0a23b0c3
Modified Files:
        sql/server/rel_optimizer.c
Branch: default
Log Message:

Merge with Dec2011 branch.


diffs (155 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
@@ -137,8 +137,7 @@ SQLPrepare_(ODBCStmt *stmt,
 
                mapi_fetch_row(hdl);
                if (ncols == 3 ||
-                   (s = mapi_fetch_field(hdl, 5)) == NULL ||
-                   *s == 0) {
+                   (s = mapi_fetch_field(hdl, 5)) == NULL) {
                        /* either old prepare (i.e. old server) or no
                         * column name: either way, this describes a
                         * parameter */
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
@@ -302,7 +302,7 @@ public class MonetPreparedStatement
        private int getColumnIdx(int colnr) throws SQLException {
                int curcol = 0;
                for (int i = 0; i < size; i++) {
-                       if (!column[i].equals(""))
+                       if (column[i] != null)
                                continue;
                        curcol++;
                        if (curcol == colnr)
@@ -350,7 +350,7 @@ public class MonetPreparedStatement
                                int cnt = 0;
 
                                for (int i = 0; i < size; i++) {
-                                       if (!column[i].equals(""))
+                                       if (column[i] != null)
                                                cnt++;
                                }
                                
@@ -2192,7 +2192,7 @@ public class MonetPreparedStatement
                // check if all columns are set and do a replace
                int col = 0;
                for (int i = 0; i < size; i++) {
-                       if (!column[i].equals(""))
+                       if (column[i] != null)
                                continue;
                        col++;
                        if (col > 1)
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
@@ -673,7 +673,8 @@ int
 mvc_export_prepare(mvc *c, stream *out, cq *q, str w)
 {
        node *n;
-       int len = c->params ? list_length(c->params) : 0;
+       int nparam = c->params ? list_length(c->params) : 0;
+       int nrows = nparam;
        size_t len1 = 0, len4 = 0, len5 = 0, len6 = 0;  /* column widths */
        int len2 = 1, len3 = 1;
        sql_arg *a;
@@ -687,7 +688,7 @@ mvc_export_prepare(mvc *c, stream *out, 
                unsigned int max2 = 10, max3 = 10; /* to help calculate widths 
*/
                sql_rel *r = q->rel;
 
-               len += list_length(r->exps);
+               nrows += list_length(r->exps);
 
                for (n = r->exps->h; n; n = n->next) {
                        char *name;
@@ -715,7 +716,7 @@ mvc_export_prepare(mvc *c, stream *out, 
                        name = e->name;
                        if (!name && e->type == e_column && e->r)
                                name = e->r;
-                       slen = strlen(name);
+                       slen = name ? strlen(name) : 0;
                        if (slen > len6)
                                len6 = slen;
                }
@@ -752,7 +753,7 @@ mvc_export_prepare(mvc *c, stream *out, 
                        "%% 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, len, len, len1, len2, len3, len4, len5, len6) < 
0) 
+                       q->id, nrows, nrows, len1, len2, len3, len4, len5, 
len6) < 0) 
                        return -1;
        } else {
                if (mnstr_printf(out,
@@ -761,7 +762,7 @@ mvc_export_prepare(mvc *c, stream *out, 
                        "%% type,\tdigits,\tscale # name\n"
                        "%% varchar,\tint,\tint # type\n"
                        "%% " SZFMT ",\t%d,\t%d # length\n",
-                       q->id, len, len, len1, len2, len3) < 0) 
+                       q->id, nrows, nrows, len1, len2, len3) < 0) 
                        return -1;
        }
 
@@ -797,10 +798,10 @@ mvc_export_prepare(mvc *c, stream *out, 
                char *extra = "";
                int i;
 
-               q->paramlen = len;
-               q->params = SA_NEW_ARRAY(q->sa, sql_subtype, len);
+               q->paramlen = nparam;
+               q->params = SA_NEW_ARRAY(q->sa, sql_subtype, nrows);
                if (result) 
-                       extra = ",\t\"\",\t\"\",\t\"\"";
+                       extra = ",\tNULL,\tNULL,\tNULL";
                for (n = c->params->h, i=0; n; n = n->next, i++) {
                        a = n->data;
                        t = &a->type;
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
@@ -705,8 +705,8 @@ order_join_expressions(sql_allocator *sa
                sql_exp *e = n->data;
 
                keys[i] = exp_keyvalue(e);
-               /* add some weigth for the selections */
-               if (e->type == e_cmp) {
+               /* add some weight for the selections */
+               if (e->type == e_cmp && !is_complex_exp(e->flag)) {
                        sql_rel *l = find_rel(rels, e->l);
                        sql_rel *r = find_rel(rels, e->r);
 
@@ -827,10 +827,12 @@ order_joins(mvc *sql, list *rels, list *
                /* find the involved relations */
 
                /* complex expressions may touch multiple base tables 
-                * Should be push up to extra selection.
+                * Should be pushed up to extra selection.
                 * */
-               l = find_one_rel(rels, cje->l);
-               r = find_one_rel(rels, cje->r);
+               if (cje->type != e_cmp || !is_complex_exp(cje->flag)) {
+                       l = find_one_rel(rels, cje->l);
+                       r = find_one_rel(rels, cje->r);
+               }
 
                if (l && r && l != r) {
                        list_remove_data(sdje, cje);
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -1856,6 +1856,15 @@ def RunTest(env, TST, BusyPorts, COND, o
 
         t0 = time.time()
         tres = DoIt(env, SERVER, CALL, TST, EXT, PRELUDE, TestOutFile, 
TestErrFile, STIMEOUT, CTIMEOUT, TIMEOUT, ME, MAPIsockets, length)
+        if tres == 'segfault':
+            # rename core file, if any -- might have to check
+            # /proc/sys/kernel/core_pattern in the future but hopefully
+            # this value is kept sane
+            if os.path.exists('core'):
+                try:
+                    os.rename('core', 'core-%s' % (TST))
+                except:
+                    pass
 
         t1 = time.time()
         TX = t1 - t0
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to