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

Reply via email to