Changeset: 173aface3c42 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=173aface3c42
Modified Files:
debian/monetdb5-sql.default
debian/monetdb5-sql.init.d
sql/backends/monet5/sql.mx
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/storage/bat/bat_storage.c
Branch: default
Log Message:
Merge with Feb2013 branch.
diffs (205 lines):
diff --git a/debian/monetdb5-sql.default b/debian/monetdb5-sql.default
--- a/debian/monetdb5-sql.default
+++ b/debian/monetdb5-sql.default
@@ -5,8 +5,5 @@
# should monetdbd be started at system startup (yes/no)
STARTUP="no"
-# should all databases be started (yes/no)
-START_ALL_DBS="no"
-
# the database farm where databases are kept
DBFARM=/var/lib/monetdb
diff --git a/debian/monetdb5-sql.init.d b/debian/monetdb5-sql.init.d
--- a/debian/monetdb5-sql.init.d
+++ b/debian/monetdb5-sql.init.d
@@ -71,7 +71,7 @@ case "$1" in
if running; then
echo "$NAME is already running"
- exit 1
+ exit 0
fi
init
@@ -83,10 +83,6 @@ case "$1" in
else
echo " ERROR, $NAME didn't start"
fi
-
- if [ "$START_ALL_DBS" = "yes" ]; then
- sudo -u monetdb "/usr/bin/monetdb start -a"
- fi
;;
stop)
if running ; then
@@ -94,7 +90,7 @@ case "$1" in
start-stop-daemon --stop --pidfile $PIDFILE --exec $DAEMON -c
monetdb:monetdb -- stop ${DBFARM}
echo "$NAME."
else
- echo "$NAME not running (${PIDFILE}."
+ echo "$NAME not running."
fi
;;
restart)
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
@@ -7614,8 +7614,8 @@ RAstatement(Client cntxt, MalBlkPtr mb,
str msg = getSQLContext(cntxt, mb, &m, &b);
sql_rel *rel;
- assert(m->sa == NULL);
- m->sa = sa_create();
+ if (!m->sa)
+ m->sa = sa_create();
rel = rel_read(m, *expr, &pos);
if (rel) {
int oldvtop = cntxt->curprg->def->vtop;
@@ -7623,11 +7623,8 @@ RAstatement(Client cntxt, MalBlkPtr mb,
stmt *s;
char *msg;
- rel_print(m, rel, 0);
- if (*opt) {
+ if (*opt)
rel = rel_optimizer(m, rel);
- rel_print(m, rel, 0);
- }
s = output_rel_bin(m, rel);
rel_destroy(rel);
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -707,7 +707,7 @@ read_exps(mvc *sql, sql_rel *lrel, sql_r
static sql_exp*
exp_read(mvc *sql, sql_rel *lrel, sql_rel *rrel, char *r, int *pos, int grp)
{
- comp_type f = cmp_equal;
+ int f = -1;
int not = 1, old, d=0, s=0, unique = 0, no_nils = 0;
char *tname, *cname = NULL, *e, *b = r + *pos, *st;
sql_exp *exp = NULL;
@@ -862,6 +862,11 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
exp->p = prop_create(sql->sa, PROP_HASHIDX, exp->p);
skipWS(r,pos);
}
+ if (strncmp(r+*pos, "HASHCOL", strlen("HASHCOL")) == 0) {
+ (*pos)+= (int) strlen("HASHCOL");
+ exp->p = prop_create(sql->sa, PROP_HASHCOL, exp->p);
+ skipWS(r,pos);
+ }
if (strncmp(r+*pos, "FETCH", strlen("FETCH")) == 0) {
(*pos)+= (int) strlen("FETCH");
exp->p = prop_create(sql->sa, PROP_FETCH, exp->p);
@@ -924,7 +929,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
default:
return exp;
}
- if (f) {
+ if (f >= 0) {
sql_exp *e;
skipWS(r,pos);
@@ -993,6 +998,10 @@ rel_read(mvc *sql, char *r, int *pos)
exps = read_exps(sql, rel, NULL, r, pos, '[', 0);
if (exps && list_length(exps))
rel->exps = exps;
+ if (strncmp(r+*pos, "COUNT", strlen("COUNT")) == 0) {
+ (*pos)+= (int) strlen("COUNT");
+ skipWS( r, pos);
+ }
return rel;
} else { /* top N */
*pos += (int) strlen("top N");
@@ -1058,22 +1067,23 @@ rel_read(mvc *sql, char *r, int *pos)
rel->exps = exps;
return rel;
case 's':
- *pos += (int) strlen("sample");
- skipWS(r, pos);
- if (r[*pos] != '(')
- return sql_error(sql, -1, "sample: missing '('\n");
- (*pos)++;
- skipWS(r, pos);
- nrel = rel_read(sql, r, pos);
- if (r[*pos] != ')')
- return sql_error(sql, -1, "sample: missing ')'\n");
- (*pos)++;
- skipWS(r, pos);
- exps = read_exps(sql, nrel, NULL, r, pos, '[', 0);
- rel = rel_sample(sql->sa, nrel, exps);
- return rel;
case 'a':
- if (r[*pos+2] == 'l') {
+ if (r[*pos+1] == 'a') {
+ *pos += (int) strlen("sample");
+ skipWS(r, pos);
+ if (r[*pos] != '(')
+ return sql_error(sql, -1, "sample: missing
'('\n");
+ (*pos)++;
+ skipWS(r, pos);
+ nrel = rel_read(sql, r, pos);
+ if (r[*pos] != ')')
+ return sql_error(sql, -1, "sample: missing
')'\n");
+ (*pos)++;
+ skipWS(r, pos);
+ exps = read_exps(sql, nrel, NULL, r, pos, '[', 0);
+ rel = rel_sample(sql->sa, nrel, exps);
+ return rel;
+ } else if (r[*pos+2] == 'l') {
*pos += (int) strlen("select");
skipWS(r, pos);
if (r[*pos] != '(')
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
@@ -2621,10 +2621,10 @@ exps_merge_rse( mvc *sql, list *l, list
* (x = c and y > 1 and y < 10) or
* (x = e and y > 1 and y < 20)
* ->
- * ((x = a and y > 1 and b < 5) or
- * (x = c and y > 1 and y < 5) or
- * (x = e and y > 1 and y < 5)) and
- * x in (a,b,c) and
+ * ((x = a and y > 1 and y < 5) or
+ * (x = c and y > 1 and y < 10) or
+ * (x = e and y > 1 and y < 20)) and
+ * x in (a,c,e) and
* y > 1 and y < 20
* */
static sql_rel *
@@ -5534,11 +5534,12 @@ _rel_optimizer(mvc *sql, sql_rel *rel, i
}
if (gp.cnt[op_select]) {
- rel = rewrite_topdown(sql, rel, &rel_push_select_down,
&changes);
- rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes);
/* only once */
if (level <= 0)
rel = rewrite(sql, rel, &rel_merge_rse, &changes);
+
+ rel = rewrite_topdown(sql, rel, &rel_push_select_down,
&changes);
+ rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes);
}
if (gp.cnt[op_select] && gp.cnt[op_join]) {
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -105,6 +105,14 @@ delta_bind_bat( sql_delta *bat, int acce
if (temp || access == RD_INS) {
assert(bat->ibid);
b = temp_descriptor(bat->ibid);
+ if (BATcount(b) && bat->ubid) {
+ BAT *upd = temp_descriptor(bat->ubid), *updins;
+
+ updins = BATsemijoin(upd, b);
+ bat_destroy(upd);
+ void_replace_bat(b, updins, TRUE);
+ bat_destroy(updins);
+ }
} else if (!bat->bid) {
int tt = 0;
b = temp_descriptor(bat->ibid);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list