Changeset: eca41256c075 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eca41256c075
Modified Files:
sql/server/rel_optimizer.c
tools/monetdbe/monetdbe.c
Branch: unlock
Log Message:
merged with default
diffs (truncated from 12826 to 300 lines):
diff --git a/ctest/tools/monetdbe/CMakeLists.txt
b/ctest/tools/monetdbe/CMakeLists.txt
--- a/ctest/tools/monetdbe/CMakeLists.txt
+++ b/ctest/tools/monetdbe/CMakeLists.txt
@@ -92,5 +92,6 @@ endif()
if (TESTING)
install(TARGETS
- example_proxy)
+ example_proxy
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
diff --git a/ctest/tools/monetdbe/example_proxy.c
b/ctest/tools/monetdbe/example_proxy.c
--- a/ctest/tools/monetdbe/example_proxy.c
+++ b/ctest/tools/monetdbe/example_proxy.c
@@ -17,6 +17,7 @@
int
main(int argc, char** argv)
{
+ (void) argc;
char* err = NULL;
monetdbe_database mdbe = NULL;
monetdbe_result* result = NULL;
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -315,9 +315,9 @@ SQLrank(Client cntxt, MalBlkPtr mb, MalS
goto bailout;
}
np = (bit*)Tloc(p, 0);
- for(j=1,k=1; rp<end; k++, np++, rp++) {
+ for(j=1; rp<end; np++, rp++) {
if (*np)
- j=k=1;
+ j=1;
*rp = j;
}
}
@@ -334,11 +334,10 @@ SQLrank(Client cntxt, MalBlkPtr mb, MalS
*rp = j;
}
} else { /* single value, ie no ordering */
- int icnt = (int) cnt;
- for(j=1; j<=icnt; j++, rp++)
- *rp = j;
+ for(; rp<end; rp++)
+ *rp = 1;
r->tsorted = true;
- r->tkey = true;
+ r->trevsorted = true;
}
}
BATsetcount(r, cnt);
@@ -432,11 +431,10 @@ SQLdense_rank(Client cntxt, MalBlkPtr mb
*rp = j;
}
} else { /* single value, ie no ordering */
- int icnt = (int) cnt;
- for(j=1; j<=icnt; j++, rp++)
- *rp = j;
+ for(; rp<end; rp++)
+ *rp = 1;
r->tsorted = true;
- r->tkey = true;
+ r->trevsorted = true;
}
}
BATsetcount(r, cnt);
@@ -472,10 +470,10 @@ SQLpercent_rank(Client cntxt, MalBlkPtr
}
(void)cntxt;
if (isaBatType(getArgType(mb, pci, 1))) {
- BUN cnt;
+ BUN ncnt, cnt;
int j, k;
dbl *rp, *end, cnt_cast;
- bit *np, *no;
+ bit *np, *np2, *no, *no2;
res = getArgReference_bat(stk, pci, 0);
if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 1)))) {
@@ -489,7 +487,6 @@ SQLpercent_rank(Client cntxt, MalBlkPtr
r->tsorted = r->trevsorted = BATcount(b) <= 1;
cnt = BATcount(b);
- cnt_cast = (dbl) (cnt - 1);
rp = (dbl*)Tloc(r, 0);
end = rp + cnt;
if (isaBatType(getArgType(mb, pci, 2))) {
@@ -499,25 +496,46 @@ SQLpercent_rank(Client cntxt, MalBlkPtr
goto bailout;
}
np = (bit*)Tloc(p, 0);
- no = (bit*)Tloc(o, 0);
- for(j=0,k=0; rp<end; k++, np++, no++, rp++) {
- if (*np)
- j=k=0;
- if (*no)
- j=k;
- *rp = j / cnt_cast;
+ np2 = np + BATcount(p);
+ no2 = no = (bit*)Tloc(o, 0);
+
+ for (; np<np2; np++, no++) {
+ if (*np) {
+ ncnt = no - no2;
+ if (ncnt == 1) {
+ for (; no2<no; no2++,
rp++)
+ *rp = 0.0;
+ } else {
+ cnt_cast = (dbl) (ncnt
- 1);
+ j = 0;
+ k = 0;
+ for (; no2<no; k++,
no2++, rp++) {
+ if (*no2)
+ j=k;
+ *rp = j /
cnt_cast;
+ }
+ }
+ }
+ }
+ ncnt = no - no2;
+ if (ncnt == 1) {
+ for (; no2<no; no2++, rp++)
+ *rp = 0.0;
+ } else {
+ cnt_cast = (dbl) (ncnt - 1);
+ j = 0;
+ k = 0;
+ for (; no2<no; k++, no2++, rp++) {
+ if (*no2)
+ j=k;
+ *rp = j / cnt_cast;
+ }
}
} else { /* single value, ie no ordering */
- if (!(p =
BATdescriptor(*getArgReference_bat(stk, pci, 2)))) {
- msg = createException(SQL,
"sql.percent_rank", SQLSTATE(HY005) "Cannot access column descriptor");
- goto bailout;
- }
- np = (bit*)Tloc(p, 0);
- for(j=0; rp<end; np++, rp++) {
- if (*np)
- j=0;
- *rp = j / cnt_cast;
- }
+ for(; rp<end; rp++)
+ *rp = 0.0;
+ r->tsorted = true;
+ r->trevsorted = true;
}
} else { /* single value, ie no partitions */
if (isaBatType(getArgType(mb, pci, 3))) {
@@ -526,14 +544,23 @@ SQLpercent_rank(Client cntxt, MalBlkPtr
goto bailout;
}
no = (bit*)Tloc(o, 0);
- for(j=0,k=0; rp<end; k++, no++, rp++) {
- if (*no)
- j=k;
- *rp = j / cnt_cast;
+
+ if (cnt == 1) {
+ for (; rp<end; rp++)
+ *rp = 0.0;
+ r->tsorted = true;
+ r->trevsorted = true;
+ } else {
+ cnt_cast = (dbl) (cnt - 1);
+ for(j=0,k=0; rp<end; k++, no++, rp++) {
+ if (*no)
+ j=k;
+ *rp = j / cnt_cast;
+ }
}
- } else { /* single value, ie no ordering - the outcome
will always be 0 */
+ } else { /* single value, ie no ordering */
for(; rp<end; rp++)
- *rp = 0;
+ *rp = 0.0;
r->tsorted = true;
r->trevsorted = true;
}
@@ -544,7 +571,7 @@ SQLpercent_rank(Client cntxt, MalBlkPtr
} else {
dbl *res = getArgReference_dbl(stk, pci, 0);
- *res = 1;
+ *res = 0.0;
}
bailout:
@@ -611,7 +638,7 @@ SQLcume_dist(Client cntxt, MalBlkPtr mb,
}
}
for (; bo1 < bo2; bo1++, rb++)
- *rb = 1;
+ *rb = 1.0;
}
}
j = 0;
@@ -626,11 +653,11 @@ SQLcume_dist(Client cntxt, MalBlkPtr mb,
}
}
for (; bo1 < bo2; bo1++, rb++)
- *rb = 1;
+ *rb = 1.0;
} else { /* single value, ie no ordering */
rp = rb + BATcount(b);
for (; rb<rp; rb++)
- *rb = 1;
+ *rb = 1.0;
r->tsorted = true;
r->trevsorted = true;
}
@@ -652,11 +679,11 @@ SQLcume_dist(Client cntxt, MalBlkPtr mb,
}
}
for (; bo1 < bo2; bo1++, rb++)
- *rb = 1;
+ *rb = 1.0;
} else { /* single value, ie no ordering */
rp = rb + BATcount(b);
for (; rb<rp; rb++)
- *rb = 1;
+ *rb = 1.0;
r->tsorted = true;
r->trevsorted = true;
}
@@ -667,7 +694,7 @@ SQLcume_dist(Client cntxt, MalBlkPtr mb,
} else {
dbl *res = getArgReference_dbl(stk, pci, 0);
- *res = 1;
+ *res = 1.0;
}
bailout:
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
@@ -1017,7 +1017,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
if (!(f = sql_bind_func_(sql, "sys", fname, tl,
F_FILT)))
- return sql_error(sql, -1,
SQLSTATE(42000) "Filter: missing function '%s'\n", fname);
+ return sql_error(sql, ERR_NOTFOUND,
SQLSTATE(42000) "Filter: missing function '%s'\n", fname);
if (!execute_priv(sql, f->func))
return sql_error(sql, -1,
SQLSTATE(42000) "Filter: no privilege to call filter function '%s'\n", fname);
return exp_filter(sql->sa, lexps, rexps, f,
anti);
@@ -1049,7 +1049,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
}
convertIdent(tname);
if (!(tpe = sql_bind_subtype(sql->sa, tname, d, s)))
- return sql_error(sql, -1, SQLSTATE(42000) "SQL
type %s(%d, %d) not found\n", tname, d, s);
+ return sql_error(sql, ERR_NOTFOUND,
SQLSTATE(42000) "SQL type %s(%d, %d) not found\n", tname, d, s);
skipWS(r, pos);
*e = old;
if (r[*pos] == '[') { /* convert */
@@ -1077,7 +1077,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
tname = b;
convertIdent(tname);
if (!(tpe = sql_bind_subtype(sql->sa, tname, 0, 0)))
- return sql_error(sql, -1, SQLSTATE(42000) "SQL type %s
not found\n", tname);
+ return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000)
"SQL type %s not found\n", tname);
st = readString(r,pos);
if (st && strcmp(st, "NULL") == 0)
exp = exp_atom(sql->sa, atom_general(sql->sa, tpe,
NULL));
@@ -1121,7 +1121,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
convertIdent(tname);
s = mvc_bind_schema(sql, tname);
if (tname && !s)
- return sql_error(sql, -1, SQLSTATE(42000) "Schema %s
not found\n", tname);
+ return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000)
"Schema %s not found\n", tname);
if (grp) {
if (exps && exps->h) {
list *ops = sa_list(sql->sa);
@@ -1132,7 +1132,7 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
a = sql_bind_func(sql, tname, cname,
sql_bind_localtype("void"), NULL, F_AGGR); /* count(*) */
}
if (!a)
- return sql_error(sql, -1, SQLSTATE(42000)
"Aggregate '%s%s%s %d' not found\n", tname ? tname : "", tname ? "." : "",
cname, list_length(exps));
+ return sql_error(sql, ERR_NOTFOUND,
SQLSTATE(42000) "Aggregate '%s%s%s %d' not found\n", tname ? tname : "", tname
? "." : "", cname, list_length(exps));
if (!execute_priv(sql, a->func))
return sql_error(sql, -1, SQLSTATE(42000)
"Aggregate: no privilege to call aggregate '%s%s%s %d'\n", tname ? tname : "",
tname ? "." : "", cname, list_length(exps));
exp = exp_aggr( sql->sa, exps, a, unique, no_nils,
CARD_ATOM, 1);
@@ -1140,63 +1140,73 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
set_zero_if_empty(exp);
} else {
int nops = list_length(exps);
- list *ops = sa_list(sql->sa);
- for( n = exps->h; n; n = n->next)
- append(ops, exp_subtype(n->data));
+ if (!strcmp(tname, "sys") && (!strcmp(cname,
"ifthenelse") || !strcmp(cname, "casewhen") || !strcmp(cname, "coalesce") ||
!strcmp(cname, "nullif"))) {
+ /* these functions are bound on a different way
*/
+ if ((f = sql_find_func(sql, NULL, cname,
!strcmp(cname, "ifthenelse") ? 3 : 2, F_FUNC, NULL))) {
+ if (!execute_priv(sql, f->func))
+ return sql_error(sql, -1,
SQLSTATE(42000) "Function: no privilege to call function '%s%s%s %d'\n", tname
? tname : "", tname ? "." : "", cname, nops);
+ sql_exp *res = exps->t->data;
+ sql_subtype *restype = exp_subtype(res);
+ f->res->h->data =
sql_create_subtype(sql->sa, restype->type, restype->digits, restype->scale);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list