Changeset: a22703fbcb16 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a22703fbcb16
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/rel_tvtree.c
        sql/backends/monet5/sql_statement.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/storage/bat/bat_storage.c
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
Branch: nested
Log Message:

initial steps for unnest(ARRAY[1,2]))


diffs (truncated from 305 to 300 lines):

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
@@ -834,6 +834,7 @@ tuple_result(backend *be, list *cols)
        return stmt_list(be, row);
 }
 
+// TODO: >>>>>>>>>>>>>>>>>>>> remove value_list and friends
 static stmt *
 value_list(backend *be, sql_exp *vals_exp, stmt *left, stmt *sel)
 {
@@ -1798,13 +1799,11 @@ nested_stmts(backend *be, sql_exp *e, no
                                stmt *s = nested_stmts(be, e, &m);
                                s = stmt_alias(be, s, e->alias.label, 
exp_relname(e), exp_name(e));
                                s->subtype = *exp_subtype(e);
-                               //s->label = e->alias.label;
                                s->nested = true;
                                append(r, s);
                        } else {
                                stmt *s = m->data;
                                s = stmt_alias(be, s, e->alias.label, 
exp_relname(e), exp_name(e));
-                               //s->label = e->alias.label;
                                m = m->next;
                                append(r, s);
                        }
@@ -1812,6 +1811,7 @@ nested_stmts(backend *be, sql_exp *e, no
        }
        *M = m;
        stmt *s = stmt_list(be, r);
+       s->nrcols = 3;
        s->nested = true;
        s->subtype = *exp_subtype(e);
        s->multiset = s->subtype.multiset;
@@ -1932,8 +1932,6 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                        assert(vname->name);
                        s = stmt_var(be, vname->sname ? a_create(sql->sa, 
sa_strdup(sql->sa, vname->sname)) : NULL, sa_strdup(sql->sa, vname->name), 
e->tpe.type?&e->tpe:NULL, 0, e->flag);
                } else if (e->f) {              /* values */
-                       // TODO: >>>>>>>>>>>>>>>>>>>> remove value_list and 
friends
-                       value_list(NULL, e, left, sel);
                        s = value_tvtree(be, e, left, sel);
                } else {                        /* arguments */
                        sql_subtype *t = e->tpe.type?&e->tpe:NULL;
diff --git a/sql/backends/monet5/rel_tvtree.c b/sql/backends/monet5/rel_tvtree.c
--- a/sql/backends/monet5/rel_tvtree.c
+++ b/sql/backends/monet5/rel_tvtree.c
@@ -239,6 +239,7 @@ static bool
 tv_parse_values_(backend *be, tv_tree *t, sql_exp *value, stmt *left, stmt 
*sel)
 {
        stmt *i;
+       sql_exp* uc;
 
        switch (t->tvt) {
                case TV_BASIC:
@@ -250,12 +251,14 @@ tv_parse_values_(backend *be, tv_tree *t
                        break;
                case TV_MSET:
                case TV_SETOF:
-            if (is_convert(value->type))
+                       assert(is_convert(value->type));
+                       uc = value->l;
+                       if (!uc->f)
                        /* VALUES ('{1, 2, 3}') */
                 return mset_value_from_literal(be, t, value, left, sel);
             else
                        /* VALUES (array[1, 2, 3]) */
-                return mset_value_from_array_constructor(be, t, value, left, 
sel);
+                return mset_value_from_array_constructor(be, t, uc, left, sel);
             break;
                case TV_COMP:
                        if (is_convert(value->type))
@@ -367,7 +370,7 @@ tv_generate_stmts(backend *be, tv_tree *
 
                        /* we've appended in the stmt_list so update nrcols */
                        stmt_set_nrcols(s);
-
+                       s->subtype = *t->st;
                        return s;
                case TV_COMP:
                        sl = sa_list(be->mvc->sa);
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
@@ -4262,6 +4262,8 @@ stmt_convert(backend *be, stmt *v, stmt 
                return stmt_to_json(be, v, sel, f, t);
        if (EC_VARCHAR(f->type->eclass) && (t->type->composite || t->multiset))
                return stmt_from_varchar(be, v, sel, t);
+       if (f->type == t->type && t->multiset && v->subtype.multiset)
+               return v;
        if (f->type->eclass != EC_EXTERNAL && t->type->eclass != EC_EXTERNAL &&
                /* general cases */
                ((t->type->localtype == f->type->localtype && t->type->eclass 
== f->type->eclass &&
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1059,6 +1059,25 @@ noninternexp_setname(mvc *sql, sql_exp *
 }
 
 void
+noninternexp_settname(mvc *sql, sql_exp *e, sql_alias *rname)
+{
+       char *name = NULL;
+
+       if (!e->alias.label && e->type == e_psm && e->l) {
+               sql_rel *r = e->l;
+               if (is_project(r->op)) {
+                       sql_exp *ie = r->exps->t->data;
+                       e->alias = ie->alias;
+                       e->alias.parent = rname;
+                       return;
+               }
+       }
+       if (!exp_name(e))
+               name = make_label(sql->sa, ++sql->label);
+       noninternexp_setname(sql, e, rname, name);
+}
+
+void
 exp_setalias(sql_exp *e, int label, sql_alias *p, const char *name )
 {
        e->alias.label = label;
@@ -3842,7 +3861,22 @@ exp_check_multiset_type(mvc *sql, sql_su
                v->data = r;
        }
        exp->tpe = *t;
-       return exp;
+       /* keep a list of column names with the conversion, for later name 
resolving */
+       return exp_convert(sql, exp, &ct, t);
+}
+
+sql_exp *
+exp_check_multiset(mvc *sql, sql_exp *e)
+{
+       if (is_values(e)) { /* check for single tuple type */
+               sql_subtype t = *exp_subtype(e);
+               t.multiset = MS_ARRAY;
+               return exp_check_multiset_type(sql, &t, NULL, e, type_equal);
+       }
+       sql_subtype *st = exp_subtype(e);
+       if (st->multiset)
+               return e;
+       return NULL;
 }
 
 sql_exp *
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -119,6 +119,7 @@ extern void exp_setalias(sql_exp *e, int
 extern void exp_prop_alias(allocator *sa, sql_exp *e, sql_exp *oe);
 
 extern void noninternexp_setname(mvc *sql, sql_exp *e, sql_alias *p, const 
char *name );
+extern void noninternexp_settname(mvc *sql, sql_exp *e, sql_alias *p);
 extern char* make_label(allocator *sa, int nr);
 extern sql_exp* exp_label(allocator *sa, sql_exp *e, int nr);
 extern list* exps_label(mvc *sql, list *exps);
@@ -240,5 +241,6 @@ extern int rel_set_type_param(mvc *sql, 
 extern sql_exp *exp_convert_inplace(mvc *sql, sql_subtype *t, sql_exp *exp);
 extern sql_exp *exp_numeric_supertype(mvc *sql, sql_exp *e);
 extern sql_exp *exp_values_set_supertype(mvc *sql, sql_exp *values, 
sql_subtype *opt_super);
+extern sql_exp *exp_check_multiset(mvc *sql, sql_exp *exp); /* cast to any 
multiset */
 
 #endif /* _REL_EXP_H_ */
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -215,12 +215,9 @@ rel_table_optname(mvc *sql, sql_rel *sq,
                        list_hash_clear(sq->exps);
                        for (; ne; ne = ne->next) {
                                sql_exp *e = ne->data;
-                               char *name = NULL;
 
                                if (!is_intern(e)) {
-                                       if (!exp_name(e))
-                                               name = make_label(sql->sa, 
++sql->label);
-                                       noninternexp_setname(sql, e, ta, name);
+                                       noninternexp_settname(sql, e, ta);
                                        set_basecol(e);
                                }
                        }
@@ -759,8 +756,14 @@ rel_unnest_func(sql_query *query, list *
                return sql_error(query->sql, ERR_NOTFOUND, SQLSTATE(42000) 
"SELECT: unnest multiset missing");
        for( node *n = exps->h; n; n = n->next) {
                sql_exp *e = n->data;
-               if (!e->freevar || e->type != e_column)
-                       return sql_error(query->sql, ERR_NOTFOUND, 
SQLSTATE(42000) "SELECT: unnest multiset not found");
+               if (!e->freevar || e->type != e_column) {
+                       if ((e = exp_check_multiset(query->sql, e)) == NULL)
+                               return sql_error(query->sql, ERR_NOTFOUND, 
SQLSTATE(42000) "SELECT: unnest multiset not found");
+                       sql_rel *rp = rel_project(query->sql->sa, NULL, 
append(sa_list(query->sql->sa), e));
+                       rp->card = CARD_MULTI;
+                       sql_exp *el = exps_bind_column(e->f, "elements", NULL, 
NULL, 1);
+                       return rel_project(query->sql->sa, rp, 
append(sa_list(query->sql->sa), exp_ref(query->sql, el)));
+               }
                sql_rel *r = query_fetch_outer(query, e->freevar-1);
                if (r && !is_basetable(r->op)) {
                        sql_rel *rr = NULL;
@@ -1041,7 +1044,7 @@ rel_named_table_function(sql_query *quer
                rel = rel_file_loader(sql, exps, tl, tname);
                if (!rel)
                        return NULL;
-       } else if (!sname && strcmp(fname, "unnest") == 0) {
+       } else if (unnest) {
                tname = NULL;
                if (ast->data.lval->t->type == type_symbol && 
ast->data.lval->t->data.sym)
                        tname = 
ast->data.lval->t->data.sym->data.lval->h->data.sval;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -430,7 +430,7 @@ rel_inserts(mvc *sql, sql_table *t, sql_
                                }
                                if (!e)
                                        return sql_error(sql, 02, 
SQLSTATE(42000) "%s: column '%s' has no valid default value", action, 
c->base.name);
-                               if (!exps && j+1 < rowcount) {
+                               if (!exps) {
                                        exps = exp_values(sql->sa, 
sa_list(sql->sa));
                                        exps->tpe = c->type;
                                        exp_label(sql->sa, exps, ++sql->label);
@@ -438,7 +438,6 @@ rel_inserts(mvc *sql, sql_table *t, sql_
                                if (exps) {
                                        list *vals_list = exps->f;
 
-                                       assert(rowcount > 1);
                                        list_append(vals_list, e);
                                }
                                if (!exps)
@@ -609,7 +608,7 @@ insert_generate_inserts(sql_query *query
                                dnode *n;
                                node *v, *m;
 
-                               if (o->next && list_empty(exps)) {
+                               if (list_empty(exps)) { /* allways create an 
atom list, also for single atoms */
                                        for (n = values->h, m = collist->h; n 
&& m; n = n->next, m = m->next) {
                                                sql_exp *vals = 
exp_values(sql->sa, sa_list(sql->sa));
                                                sql_column *c = m->data;
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -566,7 +566,10 @@ delta_dup(sql_delta *d)
 static void *
 col_dup(sql_column *c)
 {
+       if (!ATOMIC_PTR_GET(&c->data))
+               return NULL;
        return delta_dup(ATOMIC_PTR_GET(&c->data));
+
 }
 
 static void *
diff --git a/sql/test/emptydb/Tests/check.stable.out 
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -2272,6 +2272,7 @@ select 'null in fkeys.delete_action', de
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "rand", "mmath",        
"Internal C",   "Scalar function",      true,   false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL    ]
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "sqlrand",      
"mmath",        "Internal C",   "Scalar function",      false,  false,  false,  
true,   NULL,   "res_0",        "int",  31,     0,      "out",  "arg_1",        
"int",  31,     0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rank", "SYSTEM",       "rank", "sql",  
"Internal C",   "Analytic function",    false,  false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  "arg_1",        "any",  0,      
0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
+[ "sys.functions",     "sys",  "read_nd_json", "SYSTEM",       "create 
function sys.read_nd_json(fname string) returns table(json json) external name 
json.read_nd_json;",     "json", "MAL",  "Function returning a table",   false, 
 false,  false,  true,   NULL,   "json", "json", 0,      0,      "out",  
"fname",        "varchar",      0,      0,      "in",   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string) returns string 
begin return sys.regexp_replace(ori, pat, rep, ''); end;",       "sql",  "SQL", 
 "Scalar function",      false,  false,  false,  true,   NULL,   "result",      
 "varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,     
 "in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",     
 0,      0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string, flg string) 
returns string external name pcre.replace;",        "pcre", "MAL",  "Scalar 
function",      false,  false,  false,  true,   NULL,   "result",       
"varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,      
"in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",      
0,      0,      "in",   "flg",  "varchar",      0,      0,      "in",   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rejects",      "SYSTEM",       "create 
function sys.rejects() returns table(rowid bigint, fldid int, \"message\" 
string, \"input\" string) external name sql.copy_rejects;",   "sql",  "MAL",  
"Function returning a table",   false,  false,  false,  true,   NULL,   
"rowid",        "bigint",       63,     0,      "out",  "fldid",        "int",  
31,     0,      "out",  "message",      "varchar",      0,      0,      "out",  
"input",        "varchar",      0,      0,      "out",  NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
@@ -4474,6 +4475,7 @@ select 'null in fkeys.delete_action', de
 [ "type used by function",     "inet", "inet", "sys",  "network",      "TYPE"  
]
 [ "type used by function",     "url",  "url",  "sys",  "newurl",       "TYPE"  
]
 [ "type used by function",     "url",  "url",  "sys",  "newurl",       "TYPE"  
]
+[ "type used by function",     "json", "json", "sys",  "read_nd_json", "TYPE"  
]
 [ "type used by function",     "inet", "inet", "sys",  "right_shift",  "TYPE"  
]
 [ "type used by function",     "inet", "inet", "sys",  "right_shift_assign",   
"TYPE"  ]
 [ "type used by function",     "inet", "inet", "sys",  "setmasklen",   "TYPE"  
]
diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit 
b/sql/test/emptydb/Tests/check.stable.out.32bit
--- a/sql/test/emptydb/Tests/check.stable.out.32bit
+++ b/sql/test/emptydb/Tests/check.stable.out.32bit
@@ -2268,6 +2268,7 @@ select 'null in fkeys.delete_action', de
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "rand", "mmath",        
"Internal C",   "Scalar function",      true,   false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL    ]
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "sqlrand",      
"mmath",        "Internal C",   "Scalar function",      false,  false,  false,  
true,   NULL,   "res_0",        "int",  31,     0,      "out",  "arg_1",        
"int",  31,     0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rank", "SYSTEM",       "rank", "sql",  
"Internal C",   "Analytic function",    false,  false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  "arg_1",        "any",  0,      
0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
+[ "sys.functions",     "sys",  "read_nd_json", "SYSTEM",       "create 
function sys.read_nd_json(fname string) returns table(json json) external name 
json.read_nd_json;",     "json", "MAL",  "Function returning a table",   false, 
 false,  false,  true,   NULL,   "json", "json", 0,      0,      "out",  
"fname",        "varchar",      0,      0,      "in",   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string) returns string 
begin return sys.regexp_replace(ori, pat, rep, ''); end;",       "sql",  "SQL", 
 "Scalar function",      false,  false,  false,  true,   NULL,   "result",      
 "varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,     
 "in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",     
 0,      0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string, flg string) 
returns string external name pcre.replace;",        "pcre", "MAL",  "Scalar 
function",      false,  false,  false,  true,   NULL,   "result",       
"varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,      
"in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",      
0,      0,      "in",   "flg",  "varchar",      0,      0,      "in",   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rejects",      "SYSTEM",       "create 
function sys.rejects() returns table(rowid bigint, fldid int, \"message\" 
string, \"input\" string) external name sql.copy_rejects;",   "sql",  "MAL",  
"Function returning a table",   false,  false,  false,  true,   NULL,   
"rowid",        "bigint",       63,     0,      "out",  "fldid",        "int",  
31,     0,      "out",  "message",      "varchar",      0,      0,      "out",  
"input",        "varchar",      0,      0,      "out",  NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
@@ -4467,6 +4468,7 @@ select 'null in fkeys.delete_action', de
 [ "type used by function",     "inet", "inet", "sys",  "network",      "TYPE"  
]
 [ "type used by function",     "url",  "url",  "sys",  "newurl",       "TYPE"  
]
 [ "type used by function",     "url",  "url",  "sys",  "newurl",       "TYPE"  
]
+[ "type used by function",     "json", "json", "sys",  "read_nd_json", "TYPE"  
]
 [ "type used by function",     "inet", "inet", "sys",  "right_shift",  "TYPE"  
]
 [ "type used by function",     "inet", "inet", "sys",  "right_shift_assign",   
"TYPE"  ]
 [ "type used by function",     "inet", "inet", "sys",  "setmasklen",   "TYPE"  
]
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128 
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -2309,6 +2309,7 @@ select 'null in fkeys.delete_action', de
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "rand", "mmath",        
"Internal C",   "Scalar function",      true,   false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL    ]
 [ "sys.functions",     "sys",  "rand", "SYSTEM",       "sqlrand",      
"mmath",        "Internal C",   "Scalar function",      false,  false,  false,  
true,   NULL,   "res_0",        "int",  31,     0,      "out",  "arg_1",        
"int",  31,     0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rank", "SYSTEM",       "rank", "sql",  
"Internal C",   "Analytic function",    false,  false,  false,  true,   NULL,   
"res_0",        "int",  31,     0,      "out",  "arg_1",        "any",  0,      
0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
+[ "sys.functions",     "sys",  "read_nd_json", "SYSTEM",       "create 
function sys.read_nd_json(fname string) returns table(json json) external name 
json.read_nd_json;",     "json", "MAL",  "Function returning a table",   false, 
 false,  false,  true,   NULL,   "json", "json", 0,      0,      "out",  
"fname",        "varchar",      0,      0,      "in",   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string) returns string 
begin return sys.regexp_replace(ori, pat, rep, ''); end;",       "sql",  "SQL", 
 "Scalar function",      false,  false,  false,  true,   NULL,   "result",      
 "varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,     
 "in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",     
 0,      0,      "in",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,  
 NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "regexp_replace",       "SYSTEM",       "create 
function sys.regexp_replace(ori string, pat string, rep string, flg string) 
returns string external name pcre.replace;",        "pcre", "MAL",  "Scalar 
function",      false,  false,  false,  true,   NULL,   "result",       
"varchar",      0,      0,      "out",  "ori",  "varchar",      0,      0,      
"in",   "pat",  "varchar",      0,      0,      "in",   "rep",  "varchar",      
0,      0,      "in",   "flg",  "varchar",      0,      0,      "in",   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL    ]
 [ "sys.functions",     "sys",  "rejects",      "SYSTEM",       "create 
function sys.rejects() returns table(rowid bigint, fldid int, \"message\" 
string, \"input\" string) external name sql.copy_rejects;",   "sql",  "MAL",  
"Function returning a table",   false,  false,  false,  true,   NULL,   
"rowid",        "bigint",       63,     0,      "out",  "fldid",        "int",  
31,     0,      "out",  "message",      "varchar",      0,      0,      "out",  
"input",        "varchar",      0,      0,      "out",  NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
@@ -4590,6 +4591,7 @@ select 'null in fkeys.delete_action', de
 [ "type used by function",     "inet", "inet", "sys",  "network",      "TYPE"  
]
 [ "type used by function",     "url",  "url",  "sys",  "newurl",       "TYPE"  
]
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to