Changeset: 3b04094ce0d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3b04094ce0d7
Modified Files:
sql/server/rel_xml.c
Branch: Jun2020
Log Message:
no access to a global sql_allocated structure
diffs (107 lines):
diff --git a/sql/server/rel_xml.c b/sql/server/rel_xml.c
--- a/sql/server/rel_xml.c
+++ b/sql/server/rel_xml.c
@@ -13,9 +13,6 @@
#include "sql_semantic.h"
#include "sql_parser.h"
-static sql_subtype xml_type = { NULL, 0, 0 };
-static sql_subtype str_type = { NULL, 0, 0 };
-
static sql_exp *
rel_xmlelement(sql_query *query, sql_rel **rel, symbol *sym, int f, exp_kind
knd)
{
@@ -24,7 +21,12 @@ rel_xmlelement(sql_query *query, sql_rel
const char *tag = d->data.sval;
dlist *ns_attrs_elms = d->next->data.lval;
sql_exp *ns_st = NULL, *attr_st = NULL, *res = NULL;
+ sql_type *t = NULL;
+ sql_subtype xml_type;
+ if ((t = mvc_bind_type(sql, "xml")) == NULL)
+ return sql_error(sql, 02, SQLSTATE(42000) "XML: xml type
missing, probably the xml module wasn't added");
+ sql_init_subtype(&xml_type, t, 0, 0);
if (ns_attrs_elms) {
symbol *ns = ns_attrs_elms->h->data.sym;
symbol *attr = ns_attrs_elms->h->next->data.sym;
@@ -46,6 +48,9 @@ rel_xmlelement(sql_query *query, sql_rel
st = exp_subtype(c_st);
assert(st);
if (type_cmp(st->type, xml_type.type) != 0) {
+ sql_subtype str_type;
+
+ sql_find_subtype(&str_type, "clob", 0,
0);
/* convert to string first */
c_st = rel_check_type(sql, &str_type,
rel ? *rel : NULL, c_st, type_equal);
/* then to xml */
@@ -94,7 +99,12 @@ rel_xmlforest(sql_query *query, sql_rel
symbol *ns = d->data.sym;
dlist *elms = d->next->data.lval;
sql_exp *ns_st, *attr_st, *res = NULL;
+ sql_type *t = NULL;
+ sql_subtype xml_type;
+ if ((t = mvc_bind_type(sql, "xml")) == NULL)
+ return sql_error(sql, 02, SQLSTATE(42000) "XML: xml type
missing, probably the xml module wasn't added");
+ sql_init_subtype(&xml_type, t, 0, 0);
if (ns) {
ns_st = rel_value_exp(query, rel, ns, f, knd);
} else {
@@ -119,6 +129,9 @@ rel_xmlforest(sql_query *query, sql_rel
st = exp_subtype(c_st);
assert(st);
if (type_cmp(st->type, xml_type.type) != 0) {
+ sql_subtype str_type;
+
+ sql_find_subtype(&str_type, "clob", 0, 0);
/* convert to string first */
c_st = rel_check_type(sql, &str_type, rel ?
*rel : NULL, c_st, type_equal);
/* then to xml */
@@ -174,6 +187,9 @@ rel_xmlattribute(sql_query *query, sql_r
if (!attr_name)
attr_name = "single_value";
}
+ sql_subtype str_type;
+
+ sql_find_subtype(&str_type, "clob", 0, 0);
attr_name_st = exp_atom_str(query->sql->sa, attr_name, &str_type);
return rel_binop_(query->sql, rel ? *rel : NULL, attr_name_st, attr_st,
NULL, "attribute", card_value);
}
@@ -218,7 +234,9 @@ rel_xmlpi(sql_query *query, sql_rel **re
char *target = d->data.sval;
symbol *val = d->next->data.sym;
sql_exp *target_st, *val_st;
+ sql_subtype str_type;
+ sql_find_subtype(&str_type, "clob", 0, 0);
target_st = exp_atom_str(query->sql->sa, target, &str_type);
if (!val)
val_st = rel_value_exp(query, rel, val, f, knd);
@@ -236,7 +254,12 @@ rel_xmltext(sql_query *query, sql_rel **
dnode *d = sym->data.lval->h;
symbol *text = d->data.sym;
sql_exp *text_st;
+ sql_type *t = NULL;
+ sql_subtype xml_type;
+ if ((t = mvc_bind_type(query->sql, "xml")) == NULL)
+ return sql_error(query->sql, 02, SQLSTATE(42000) "XML: xml type
missing, probably the xml module wasn't added");
+ sql_init_subtype(&xml_type, t, 0, 0);
text_st = rel_value_exp(query, rel, text, f, knd);
if (!text_st || (text_st = rel_check_type(query->sql, &xml_type, rel ?
*rel : NULL, text_st, type_equal)) == NULL)
return NULL;
@@ -248,14 +271,6 @@ rel_xml(sql_query *query, sql_rel **rel,
{
mvc *sql = query->sql;
sql_exp *ret = NULL;
- sql_type *t = NULL;
-
- if (!xml_type.type) {
- if ((t = mvc_bind_type(sql, "xml")) == NULL)
- return sql_error(sql, 02, SQLSTATE(42000) "XML: xml
type missing, probably the xml module wasn't added");
- sql_init_subtype(&xml_type, t, 0, 0);
- sql_find_subtype(&str_type, "clob", 0, 0);
- }
switch (s->token) {
case SQL_XMLELEMENT:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list