Changeset: 251da67f00a6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=251da67f00a6
Modified Files:
        sql/backends/monet5/sql_arrays.c
        sql/backends/monet5/sql_arrays.h
        sql/backends/monet5/sql_arrays.mal
        sql/backends/monet5/sql_gencode.c
Branch: arrays
Log Message:

st_tid returns the desription of the array and not tids


diffs (88 lines):

diff --git a/sql/backends/monet5/sql_arrays.c b/sql/backends/monet5/sql_arrays.c
--- a/sql/backends/monet5/sql_arrays.c
+++ b/sql/backends/monet5/sql_arrays.c
@@ -147,3 +147,31 @@ str mvc_bind_array_column(Client cntxt, 
                throw(SQL, "sql.bind_array_column", "unable to find %s.%s(%s)", 
*sname, *tname, *cname);
        throw(SQL, "sql.bind_array_column", "unable to find %s(%s)", *tname, 
*cname);
 }
+
+str mvc_array(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) {
+       ptr* array = getArgReference_ptr(stk, pci, 0);
+       mvc *m = NULL;
+       str msg;
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+       str *sname = getArgReference_str(stk, pci, 3);
+       str *tname = getArgReference_str(stk, pci, 4);
+       
+       if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+               return msg;
+       if ((msg = checkSQLContext(cntxt)) != NULL)
+               return msg;
+       
+       s = mvc_bind_schema(m, *sname);
+       if (s == NULL)
+               throw(SQL, "sql.bind_array_dimension", "unable to find %s.%s", 
*sname, *tname);
+       t = mvc_bind_table(m, s, *tname);
+       if (t == NULL)
+               throw(SQL, "sql.bind_array_dimension", "unable to find %s.%s", 
*sname, *tname);
+
+       *array = get_array(t);
+
+       return MAL_SUCCEED;
+}
+
+
diff --git a/sql/backends/monet5/sql_arrays.h b/sql/backends/monet5/sql_arrays.h
--- a/sql/backends/monet5/sql_arrays.h
+++ b/sql/backends/monet5/sql_arrays.h
@@ -25,6 +25,7 @@
 
 sql5_export str mvc_bind_array_column(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str mvc_bind_array_dimension(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
+sql5_export str mvc_array(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
 //sql5_export str mvc_get_cells(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 //sql5_export str mvc_dimension_subselect_with_cand_bat_wrap(Client cntxt, 
MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
diff --git a/sql/backends/monet5/sql_arrays.mal 
b/sql/backends/monet5/sql_arrays.mal
--- a/sql/backends/monet5/sql_arrays.mal
+++ b/sql/backends/monet5/sql_arrays.mal
@@ -5,3 +5,7 @@ comment "Get a pointer to the dimension 
 pattern sql.bind_array_column(mvc:int, schema:str, array:str, column:str) 
(:bat[:oid,:any], :ptr)
 address mvc_bind_array_column
 comment "Bind the 'schema.array.column' BAT";
+
+pattern sql.array(mvc:int, schema:str, arr:str) :ptr
+address mvc_array
+comment "Get the description of the 'schema.array'";
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
@@ -937,16 +937,22 @@ static int
                        int tt = TYPE_oid;
                        sql_table *t = s->op4.tval;
 
-                       q = newStmt1(mb, sqlRef, "tid");
-                       if (q == NULL)
-                               return -1;
-                       setVarType(mb, getArg(q, 0), newBatType(ht, tt));
-                       setVarUDFtype(mb, getArg(q, 0));
+                       if(isArray(t)) {
+                               q = newStmt1(mb, sqlRef, "array");
+                       } else {
+                               q = newStmt1(mb, sqlRef, "tid");
+                               if (q == NULL)
+                                       return -1;
+                               setVarType(mb, getArg(q, 0), newBatType(ht, 
tt));
+                               setVarUDFtype(mb, getArg(q, 0));
+                       }
                        q = pushArgument(mb, q, sql->mvc_var);
                        q = pushSchema(mb, q, t);
                        q = pushStr(mb, q, t->base.name);
+               
                        if (q == NULL)
                                return -1;
+                       
                        s->nr = getDestVar(q);
                }
                        break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to