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

Reply via email to