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