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