Changeset: a4c6f7cd319c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a4c6f7cd319c
Added Files:
        
sql/test/BugTracker-2015/Tests/date_comparison_incorrect_results.Bug-3834.sql
        
sql/test/BugTracker-2015/Tests/date_comparison_incorrect_results.Bug-3834.stable.err
        
sql/test/BugTracker-2015/Tests/date_comparison_incorrect_results.Bug-3834.stable.out
        sql/test/BugTracker-2015/Tests/null.Bug-3833.sql
        sql/test/BugTracker-2015/Tests/null.Bug-3833.stable.err
        sql/test/BugTracker-2015/Tests/null.Bug-3833.stable.out
Modified Files:
        clients/mapiclient/dump.c
        gdk/gdk_select.c
        monetdb5/modules/kernel/batcolor.h
        monetdb5/modules/kernel/batstr.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/sql_user.h
        sql/server/rel_schema.c
        sql/server/sql_parser.y
        sql/server/sql_qc.c
        sql/server/sql_scan.c
        sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.sql
        sql/test/BugTracker-2015/Tests/All
        sql/test/BugTracker-2015/Tests/schema_view2.Bug-3766.sql
        sql/test/bugs/Tests/not.stable.out
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp3.stable.out
        sql/test/pg_regress/Tests/strings.stable.err
        sql/test/pg_regress/Tests/strings.stable.err.int128
Branch: default
Log Message:

Merge with Jul2015 branch.


diffs (truncated from 1495 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -171,6 +171,41 @@ has_schemas_system(Mapi mid)
        return 0;
 }
 
+/* return TRUE if the HUGEINT type exists */
+static int
+has_hugeint(Mapi mid)
+{
+       MapiHdl hdl;
+       int ret;
+
+       if ((hdl = mapi_query(mid,
+                             "SELECT id "
+                             "FROM sys.types "
+                             "WHERE sqlname = 'hugeint'")) == NULL ||
+           mapi_error(mid))
+               goto bailout;
+       ret = mapi_get_row_count(hdl) == 1;
+       while ((mapi_fetch_row(hdl)) != 0) {
+               if (mapi_error(mid))
+                       goto bailout;
+       }
+       if (mapi_error(mid))
+               goto bailout;
+       mapi_close_handle(hdl);
+       return ret;
+
+  bailout:
+       if (hdl) {
+               if (mapi_result_error(hdl))
+                       mapi_explain_result(hdl, stderr);
+               else
+                       mapi_explain_query(hdl, stderr);
+               mapi_close_handle(hdl);
+       } else
+               mapi_explain(mid, stderr);
+       return 0;
+}
+
 static int
 dump_foreign_keys(Mapi mid, const char *schema, const char *tname, const char 
*tid, stream *toConsole)
 {
@@ -394,10 +429,11 @@ static int dump_column_definition(
        const char *schema,
        const char *tname,
        const char *tid,
-       int foreign);
+       int foreign,
+       int hashge);
 
 static int
-dump_type(Mapi mid, stream *toConsole, char *c_type, char *c_type_digits, char 
*c_type_scale)
+dump_type(Mapi mid, stream *toConsole, char *c_type, char *c_type_digits, char 
*c_type_scale, int hashge)
 {
        int space = 0;
 
@@ -502,13 +538,19 @@ dump_type(Mapi mid, stream *toConsole, c
                space = mnstr_printf(toConsole, "DECIMAL");
        } else if (strcmp(c_type, "table") == 0) {
                mnstr_printf(toConsole, "TABLE ");
-               dump_column_definition(mid, toConsole, NULL, NULL, 
c_type_digits, 1);
+               dump_column_definition(mid, toConsole, NULL, NULL, 
c_type_digits, 1, hashge);
        } else if (strcmp(c_type_digits, "0") == 0) {
                space = mnstr_printf(toConsole, "%s", toUpper(c_type));
        } else if (strcmp(c_type_scale, "0") == 0) {
                space = mnstr_printf(toConsole, "%s(%s)",
                                toUpper(c_type), c_type_digits);
        } else {
+               if (strcmp(c_type, "decimal") == 0) {
+                       if (strcmp(c_type_digits, "39") == 0)
+                               c_type_digits = "38";
+                       else if (!hashge && strcmp(c_type_digits, "19") == 0)
+                               c_type_digits = "18";
+               }
                space = mnstr_printf(toConsole, "%s(%s,%s)",
                                toUpper(c_type), c_type_digits, c_type_scale);
        }
@@ -516,7 +558,7 @@ dump_type(Mapi mid, stream *toConsole, c
 }
 
 static int
-dump_column_definition(Mapi mid, stream *toConsole, const char *schema, const 
char *tname, const char *tid, int foreign)
+dump_column_definition(Mapi mid, stream *toConsole, const char *schema, const 
char *tname, const char *tid, int foreign, int hashge)
 {
        MapiHdl hdl = NULL;
        char *query;
@@ -586,7 +628,7 @@ dump_column_definition(Mapi mid, stream 
 
                mnstr_printf(toConsole, "\t\"%s\"%*s ",
                             c_name, CAP(slen - strlen(c_name)), "");
-               space = dump_type(mid, toConsole, c_type, c_type_digits, 
c_type_scale);
+               space = dump_type(mid, toConsole, c_type, c_type_digits, 
c_type_scale, hashge);
                if (strcmp(c_null, "false") == 0) {
                        mnstr_printf(toConsole, "%*s NOT NULL",
                                        CAP(13 - space), "");
@@ -763,6 +805,7 @@ describe_table(Mapi mid, char *schema, c
        int type = 0;
        size_t maxquerylen;
        char *sname = NULL;
+       int hashge;
 
        if (schema == NULL) {
                if ((sname = strchr(tname, '.')) != NULL) {
@@ -778,6 +821,8 @@ describe_table(Mapi mid, char *schema, c
                schema = sname;
        }
 
+       hashge = has_hugeint(mid);
+
        maxquerylen = 512 + strlen(tname) + strlen(schema);
 
        query = malloc(maxquerylen);
@@ -830,7 +875,7 @@ describe_table(Mapi mid, char *schema, c
                             "",
                             schema, tname);
 
-               if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign))
+               if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign, hashge))
                        goto bailout;
                if (type == 5)
                        mnstr_printf(toConsole, " ON '%s'", view);
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1953,14 +1953,14 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                high -= BUNfirst(l);
                        } else {
                                if (li)
-                                       low = SORTfndlast(l, vrl);
+                                       low = SORTfndlast(l, vrh);
                                else
-                                       low = SORTfndfirst(l, vrl);
+                                       low = SORTfndfirst(l, vrh);
                                low -= BUNfirst(l);
                                if (hi)
-                                       high = SORTfndfirst(l, vrh);
+                                       high = SORTfndfirst(l, vrl);
                                else
-                                       high = SORTfndlast(l, vrh);
+                                       high = SORTfndlast(l, vrl);
                                high -= BUNfirst(l);
                        }
                        if (high <= low)
diff --git a/monetdb5/modules/kernel/batcolor.h 
b/monetdb5/modules/kernel/batcolor.h
--- a/monetdb5/modules/kernel/batcolor.h
+++ b/monetdb5/modules/kernel/batcolor.h
@@ -25,13 +25,6 @@
 #define batcolor_export extern
 #endif
 
-#ifdef HAVE_LANGINFO_H
-#include <langinfo.h>
-#endif
-#ifdef HAVE_ICONV_H
-#include <iconv.h>
-#endif
-
 batcolor_export str CLRbatColor(bat *ret, const bat *l);
 batcolor_export str CLRbatStr(bat *ret, const bat *l);
 batcolor_export str CLRbatRed(bat *ret, const bat *l);
diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c
--- a/monetdb5/modules/kernel/batstr.c
+++ b/monetdb5/modules/kernel/batstr.c
@@ -26,13 +26,6 @@
 #include "mal_exception.h"
 #include "str.h"
 
-#ifdef HAVE_LANGINFO_H
-#include <langinfo.h>
-#endif
-#ifdef HAVE_ICONV_H
-#include <iconv.h>
-#endif
-
 #ifdef WIN32
 #define batstr_export extern __declspec(dllexport)
 #else
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4839,7 +4839,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                                                        for (ncol = 
(t)->idxs.set->h; ncol; ncol = ncol->next) {
                                                                sql_base *bc = 
ncol->data;
                                                                sql_idx *c = 
(sql_idx *) ncol->data;
-                                                               if (c->type != 
no_idx) {
+                                                               if 
(idx_has_column(c->type)) {
                                                                        BAT *bn 
= store_funcs.bind_idx(tr, c, RDONLY);
                                                                        lng sz;
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -398,8 +398,18 @@ void
 SQLtrans(mvc *m)
 {
        m->caching = m->cache;
-       if (!m->session->active)
+       if (!m->session->active) {
+               sql_session *s;
+
                mvc_trans(m);
+               s = m->session;
+               if (!s->schema) {
+                       s->schema_name = monet5_user_get_def_schema(m, 
m->user_id);
+                       assert(s->schema_name);
+                       s->schema = find_sql_schema(s->tr, s->schema_name);
+                       assert(s->schema);
+               }
+       }
 }
 
 str
@@ -449,7 +459,7 @@ SQLinitClient(Client c)
        if (m->session->tr)
                reset_functions(m->session->tr);
        /* pass through credentials of the user if not console */
-       schema = monet5_user_get_def_schema(m, c->user);
+       schema = monet5_user_set_def_schema(m, c->user);
        if (!schema) {
                _DELETE(schema);
                throw(PERMD, "SQLinitClient", "08004!schema authorization 
error");
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -395,6 +395,52 @@ monet5_user_get_def_schema(mvc *m, oid u
        sql_column *schemas_name = NULL;
        sql_column *schemas_id = NULL;
        sql_table *auths = NULL;
+       sql_column *auths_id = NULL;
+       sql_column *auths_name = NULL;
+       void *p = 0;
+       str username = NULL;
+       str schema = NULL;
+
+       sys = find_sql_schema(m->session->tr, "sys");
+       auths = find_sql_table(sys, "auths");
+       auths_id = find_sql_column(auths, "id");
+       auths_name = find_sql_column(auths, "name");
+       if ((rid = table_funcs.column_find_row(m->session->tr, auths_id, &user, 
NULL)) != oid_nil)
+               username = table_funcs.column_find_value(m->session->tr, 
auths_name, rid);
+
+       user_info = find_sql_table(sys, "db_user_info");
+       users_name = find_sql_column(user_info, "name");
+       users_schema = find_sql_column(user_info, "default_schema");
+       if ((rid = table_funcs.column_find_row(m->session->tr, users_name, 
username, NULL)) != oid_nil)
+               p = table_funcs.column_find_value(m->session->tr, users_schema, 
rid);
+
+       assert(p);
+       schema_id = *(sqlid *) p;
+       _DELETE(p);
+
+       schemas = find_sql_table(sys, "schemas");
+       schemas_name = find_sql_column(schemas, "name");
+       schemas_id = find_sql_column(schemas, "id");
+
+       if ((rid = table_funcs.column_find_row(m->session->tr, schemas_id, 
&schema_id, NULL)) != oid_nil)
+               schema = table_funcs.column_find_value(m->session->tr, 
schemas_name, rid);
+       stack_set_string(m, "current_schema", schema);
+       return schema;
+}
+
+str
+monet5_user_set_def_schema(mvc *m, oid user)
+{
+       oid rid;
+       sqlid schema_id;
+       sql_schema *sys = NULL;
+       sql_table *user_info = NULL;
+       sql_column *users_name = NULL;
+       sql_column *users_schema = NULL;
+       sql_table *schemas = NULL;
+       sql_column *schemas_name = NULL;
+       sql_column *schemas_id = NULL;
+       sql_table *auths = NULL;
        sql_column *auths_name = NULL;
 
        void *p = 0;
diff --git a/sql/backends/monet5/sql_user.h b/sql/backends/monet5/sql_user.h
--- a/sql/backends/monet5/sql_user.h
+++ b/sql/backends/monet5/sql_user.h
@@ -11,7 +11,8 @@
 #include "sql.h"               /* includes sql_backend.h */
 
 sql5_export void monet5_user_init(backend_functions *be_funcs);
-sql5_export str monet5_user_get_def_schema(mvc *m, oid user);
+sql5_export str monet5_user_set_def_schema(mvc *m, oid user /* mal user id */);
+sql5_export str monet5_user_get_def_schema(mvc *m, oid user /* sql user id */);
 
 sql5_export str db_users_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str db_password_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -384,8 +384,26 @@ column_option(
                res = column_constraint_type(sql, opt_name, sym, ss, t, cs);
        }       break;
        case SQL_DEFAULT: {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to