Changeset: 7c035001fe10 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7c035001fe10
Modified Files:
sql/backends/monet5/UDF/pyapi3/conversion3.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statistics.c
sql/backends/monet5/sql_upgrades.c
sql/backends/monet5/vaults/fits/fits.c
sql/common/sql_types.c
sql/include/sql_catalog.h
sql/server/rel_exp.c
sql/server/rel_select.c
sql/server/rel_sequence.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/server/sql_mvc.c
sql/server/sql_semantic.c
sql/storage/sql_catalog.c
sql/storage/store.c
Branch: Jul2021
Log Message:
Use sql name instead of backend name as the type's base name.
This simplifies transaction conflict detection on types.
Also fixed a bug on the supertype detection with clob and (var)char types. The
upgrade tests need to be re-approved.
diffs (truncated from 971 to 300 lines):
diff --git a/sql/backends/monet5/UDF/pyapi3/conversion3.c
b/sql/backends/monet5/UDF/pyapi3/conversion3.c
--- a/sql/backends/monet5/UDF/pyapi3/conversion3.c
+++ b/sql/backends/monet5/UDF/pyapi3/conversion3.c
@@ -395,7 +395,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
} else {
msg = createException(MAL,
"pyapi3.eval",
SQLSTATE(PY000) "Unsupported SQL Type: %s",
-
inp->sql_subtype->type->sqlname);
+
inp->sql_subtype->type->base.name);
}
goto wrapup;
}
@@ -1176,7 +1176,7 @@ str ConvertToSQLType(Client cntxt, BAT *
return createException(
MAL, "pyapi3.eval",
"Convert To SQL Type: Unrecognized SQL type %s
(%d).",
- sql_subtype->type->sqlname, (int)
sql_subtype->type->eclass);
+ sql_subtype->type->base.name, (int)
sql_subtype->type->eclass);
}
if (res == MAL_SUCCEED) {
*ret_bat = BATdescriptor(result_bat);
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -91,7 +91,7 @@ sql_unop_(backend *be, const char *fname
*/
return stmt_unop(be, rs, NULL, f);
} else if (rs) {
- char *type = tail_type(rs)->type->sqlname;
+ char *type = tail_type(rs)->type->base.name;
return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000) "SELECT: no
such unary operator '%s(%s)'", fname, type);
}
@@ -1644,14 +1644,14 @@ check_types(backend *be, sql_subtype *t,
}
if (err) {
stmt *res = sql_error(sql, 03, SQLSTATE(42000) "types %s(%u,%u)
(%s) and %s(%u,%u) (%s) are not equal",
- fromtype->type->sqlname,
+ fromtype->type->base.name,
fromtype->digits,
fromtype->scale,
- fromtype->type->base.name,
- t->type->sqlname,
+ fromtype->type->impl,
+ t->type->base.name,
t->digits,
t->scale,
- t->type->base.name
+ t->type->impl
);
return res;
}
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
@@ -802,7 +802,7 @@ sql_variables(Client cntxt, MalBlkPtr mb
msg = createException(SQL, "sql.variables",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
}
- if (BUNappend(types, value.tpe.type->sqlname, false) !=
GDK_SUCCEED) {
+ if (BUNappend(types, value.tpe.type->base.name, false)
!= GDK_SUCCEED) {
msg = createException(SQL, "sql.variables",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
goto bailout;
}
@@ -3879,7 +3879,7 @@ sql_storage(Client cntxt, MalBlkPtr mb,
if
(BUNappend(mode, str_nil, false) != GDK_SUCCEED)
goto bailout;
}
- if
(BUNappend(type, c->type.type->sqlname, false) != GDK_SUCCEED)
+ if
(BUNappend(type, c->type.type->base.name, false) != GDK_SUCCEED)
goto
bailout;
/*printf(" cnt
"BUNFMT, BATcount(bs)); */
@@ -4653,7 +4653,7 @@ SQLsession_prepared_statements_args(Clie
rname = ATOMnilptr(TYPE_str);
if (BUNappend(statementid, &(q->id), false) !=
GDK_SUCCEED ||
- BUNappend(type, t->type->sqlname,
false) != GDK_SUCCEED ||
+ BUNappend(type, t->type->base.name,
false) != GDK_SUCCEED ||
BUNappend(digits, &t->digits, false) !=
GDK_SUCCEED ||
BUNappend(scale, &t->scale, false) !=
GDK_SUCCEED ||
BUNappend(isinout, &inout, false) !=
GDK_SUCCEED ||
@@ -4674,7 +4674,7 @@ SQLsession_prepared_statements_args(Clie
sql_subtype *t = &a->type;
if (BUNappend(statementid, &(q->id), false) !=
GDK_SUCCEED ||
- BUNappend(type, t->type->sqlname,
false) != GDK_SUCCEED ||
+ BUNappend(type, t->type->base.name,
false) != GDK_SUCCEED ||
BUNappend(digits, &(t->digits), false)
!= GDK_SUCCEED ||
BUNappend(scale, &(t->scale), false) !=
GDK_SUCCEED ||
BUNappend(isinout, &inout, false) !=
GDK_SUCCEED ||
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -492,7 +492,7 @@ static int
buf = tmp;
}
- nr += snprintf(buf+nr, len-nr, "%s %s(%u,%u)%c", nme,
t->type->sqlname, t->digits, t->scale, n->next?',':' ');
+ nr += snprintf(buf+nr, len-nr, "%s %s(%u,%u)%c", nme,
t->type->base.name, t->digits, t->scale, n->next?',':' ');
}
s = buf;
}
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -743,7 +743,7 @@ mvc_import_table(Client cntxt, BAT ***ba
fmt[i].rsep = rsep;
fmt[i].seplen = _strlen(fmt[i].sep);
fmt[i].type = sql_subtype_string(m->ta, &col->type);
- fmt[i].adt = ATOMindex(col->type.type->base.name);
+ fmt[i].adt = ATOMindex(col->type.type->impl);
fmt[i].tostr = &_ASCIIadt_toStr;
fmt[i].frstr = &_ASCIIadt_frStr;
fmt[i].extra = col;
@@ -974,7 +974,7 @@ mvc_export_prepare(backend *b, stream *o
size_t slen;
t = exp_subtype(e);
- slen = strlen(t->type->sqlname);
+ slen = strlen(t->type->base.name);
if (slen > len1)
len1 = slen;
while (t->digits >= max2) {
@@ -1009,7 +1009,7 @@ mvc_export_prepare(backend *b, stream *o
a = n->data;
t = &a->type;
- slen = strlen(t->type->sqlname);
+ slen = strlen(t->type->base.name);
if (slen > len1)
len1 = slen;
while (t->digits >= max2) {
@@ -1050,7 +1050,7 @@ mvc_export_prepare(backend *b, stream *o
if (!rname && e->type == e_column && e->l)
rname = e->l;
- if (mnstr_printf(out, "[
\"%s\",\t%u,\t%u,\t\"%s\",\t\"%s\",\t\"%s\"\t]\n", t->type->sqlname, t->digits,
t->scale, schema ? schema : "", rname ? rname : "", name ? name : "") < 0) {
+ if (mnstr_printf(out, "[
\"%s\",\t%u,\t%u,\t\"%s\",\t\"%s\",\t\"%s\"\t]\n", t->type->base.name,
t->digits, t->scale, schema ? schema : "", rname ? rname : "", name ? name :
"") < 0) {
return -1;
}
}
@@ -1063,7 +1063,7 @@ mvc_export_prepare(backend *b, stream *o
a = n->data;
t = &a->type;
- if (!t || mnstr_printf(out, "[
\"%s\",\t%u,\t%u,\tNULL,\tNULL,\tNULL\t]\n", t->type->sqlname, t->digits,
t->scale) < 0)
+ if (!t || mnstr_printf(out, "[
\"%s\",\t%u,\t%u,\tNULL,\tNULL,\tNULL\t]\n", t->type->base.name, t->digits,
t->scale) < 0)
return -1;
}
}
@@ -1311,7 +1311,7 @@ mvc_export_row(backend *b, stream *s, re
mnstr_write(s, c->name, strlen(c->name), 1);
mnstr_write(s, ": ", 2, 1);
}
- ok = export_value(m, s, c->type.type->eclass,
c->type.type->sqlname, c->type.digits, c->type.scale, c->p, c->mtype, &buf,
&len, ns);
+ ok = export_value(m, s, c->type.type->eclass,
c->type.type->base.name, c->type.digits, c->type.scale, c->p, c->mtype, &buf,
&len, ns);
}
_DELETE(buf);
if (ok)
@@ -1457,7 +1457,7 @@ mvc_export_table(backend *b, stream *s,
fmt[i].extra = ts_res;
} else if (c->type.type->eclass == EC_TIME ||
c->type.type->eclass == EC_TIME_TZ) {
struct time_res *ts_res = tres + (i - 1);
- ts_res->has_tz = (strcmp(c->type.type->sqlname,
"timetz") == 0);
+ ts_res->has_tz = (strcmp(c->type.type->base.name,
"timetz") == 0);
ts_res->fraction = c->type.digits ? c->type.digits - 1
: 0;
ts_res->timezone = m->timezone;
@@ -1829,7 +1829,7 @@ mvc_export_head(backend *b, stream *s, i
for (i = 0; i < t->nr_cols; i++) {
res_col *c = t->cols + i;
- if (mnstr_write(s, c->type.type->sqlname,
strlen(c->type.type->sqlname), 1) != 1)
+ if (mnstr_write(s, c->type.type->base.name,
strlen(c->type.type->base.name), 1) != 1)
return -1;
if (i + 1 < t->nr_cols && mnstr_write(s, ",\t", 2, 1) != 1)
return -1;
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1270,7 +1270,7 @@ stmt *
stmt_atom(backend *be, atom *a)
{
MalBlkPtr mb = be->mb;
- InstrPtr q = EC_TEMP_FRAC(atom_type(a)->type->eclass) ? newStmt(mb,
calcRef, atom_type(a)->type->base.name) : newAssignment(mb);
+ InstrPtr q = EC_TEMP_FRAC(atom_type(a)->type->eclass) ? newStmt(mb,
calcRef, atom_type(a)->type->impl) : newAssignment(mb);
if (!q)
return NULL;
@@ -2447,7 +2447,7 @@ dump_export_header(mvc *sql, MalBlkPtr m
snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
metaInfo(tblPtr, Str, fqtn);
metaInfo(nmePtr, Str, cn);
- metaInfo(tpePtr, Str, (t->type->localtype ==
TYPE_void ? "char" : t->type->sqlname));
+ metaInfo(tpePtr, Str, (t->type->localtype ==
TYPE_void ? "char" : t->type->base.name));
metaInfo(lenPtr, Int, t->digits);
metaInfo(scalePtr, Int, t->scale);
list = pushArgument(mb, list, c->nr);
@@ -2714,7 +2714,7 @@ dump_header(mvc *sql, MalBlkPtr mb, list
snprintf(fqtn, fqtnl, "%s.%s", nsn, ntn);
metaInfo(tblPtr,Str,fqtn);
metaInfo(nmePtr,Str,cn);
- metaInfo(tpePtr,Str,(t->type->localtype ==
TYPE_void ? "char" : t->type->sqlname));
+ metaInfo(tpePtr,Str,(t->type->localtype ==
TYPE_void ? "char" : t->type->base.name));
metaInfo(lenPtr,Int,t->digits);
metaInfo(scalePtr,Int,t->scale);
list = pushArgument(mb,list,c->nr);
@@ -2767,7 +2767,7 @@ stmt_output(backend *be, stmt *lst)
if (q) {
q = pushStr(mb, q, fqtn);
q = pushStr(mb, q, cn);
- q = pushStr(mb, q, t->type->localtype
== TYPE_void ? "char" : t->type->sqlname);
+ q = pushStr(mb, q, t->type->localtype
== TYPE_void ? "char" : t->type->base.name);
q = pushInt(mb, q, t->digits);
q = pushInt(mb, q, t->scale);
q = pushInt(mb, q, t->type->eclass);
@@ -3067,7 +3067,7 @@ stmt_convert(backend *be, stmt *v, stmt
{
MalBlkPtr mb = be->mb;
InstrPtr q = NULL;
- const char *convert = t->type->base.name;
+ const char *convert = t->type->impl;
int pushed = (v->cand && v->cand == sel), no_candidates = 0;
/* convert types and make sure they are rounded up correctly */
@@ -3090,7 +3090,7 @@ stmt_convert(backend *be, stmt *v, stmt
/* external types have sqlname convert functions,
these can generate errors (fromstr cannot) */
if (t->type->eclass == EC_EXTERNAL)
- convert = t->type->sqlname;
+ convert = t->type->base.name;
else if (t->type->eclass == EC_MONTH)
convert = "month_interval";
else if (t->type->eclass == EC_SEC)
diff --git a/sql/backends/monet5/sql_statistics.c
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -307,7 +307,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
GDKfree(minval);
throw(SQL, "analyze",
SQLSTATE(42000) "ANALYZE: failed%s", log_res == LOG_CONFLICT ? " due to
conflict with another transaction" : "");
}
- if ((log_res =
store->table_api.table_insert(tr, sysstats, &c->base.id,
&c->type.type->sqlname, &width, &ts, samplesize ? &samplesize : &sz, &sz,
&uniq, &nils, &minval, &maxval, &sorted, &revsorted)) != LOG_OK) {
+ if ((log_res =
store->table_api.table_insert(tr, sysstats, &c->base.id,
&c->type.type->base.name, &width, &ts, samplesize ? &samplesize : &sz, &sz,
&uniq, &nils, &minval, &maxval, &sorted, &revsorted)) != LOG_OK) {
GDKfree(maxval);
GDKfree(minval);
throw(SQL, "analyze",
SQLSTATE(42000) "ANALYZE: failed%s", log_res == LOG_CONFLICT ? " due to
conflict with another transaction" : "");
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -57,7 +57,7 @@ sql_fix_system_tables(Client c, mvc *sql
pos += snprintf(buf + pos, bufsize - pos,
"insert into sys.types values"
" (%d, '%s', '%s', %u, %u, %d, %d, %d);\n",
- t->base.id, t->base.name, t->sqlname, t->digits,
+ t->base.id, t->impl, t->base.name, t->digits,
t->scale, t->radix, (int) t->eclass,
t->s ? t->s->base.id : s->base.id);
}
@@ -102,7 +102,7 @@ sql_fix_system_tables(Client c, mvc *sql
store_next_oid(store),
func->base.id,
number,
- arg->type.type->sqlname,
+ arg->type.type->base.name,
arg->type.digits,
arg->type.scale,
arg->inout, number);
@@ -119,7 +119,7 @@ sql_fix_system_tables(Client c, mvc *sql
store_next_oid(store),
func->base.id,
arg->name,
- arg->type.type->sqlname,
+ arg->type.type->base.name,
arg->type.digits,
arg->type.scale,
arg->inout, number);
@@ -133,7 +133,7 @@ sql_fix_system_tables(Client c, mvc *sql
store_next_oid(store),
func->base.id,
number,
- arg->type.type->sqlname,
+ arg->type.type->base.name,
arg->type.digits,
arg->type.scale,
arg->inout, number);
diff --git a/sql/backends/monet5/vaults/fits/fits.c
b/sql/backends/monet5/vaults/fits/fits.c
--- a/sql/backends/monet5/vaults/fits/fits.c
+++ b/sql/backends/monet5/vaults/fits/fits.c
@@ -294,7 +294,7 @@ str FITSexportTable(Client cntxt, MalBlk
{
char * columntype;
col = mvc_bind_column(m, tbl, colname[cc]);
- columntype = col -> type.type->sqlname;
+ columntype = col -> type.type->base.name;
if (strcmp(columntype,"boolean")==0)
{
@@ -964,7 +964,7 @@ str FITSloadTable(Client cntxt, MalBlkPt
fits_get_coltype(fptr, j, &tpcode[j - 1], &rep[j - 1], &wid[j -
1], &status);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list