Changeset: 953456cbe1d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=953456cbe1d8
Modified Files:
        monetdb5/optimizer/opt_bincopyfrom.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_bincopyfrom.c
        sql/server/rel_updates.c
Branch: copybinary
Log Message:

Pass the byteswap parameter to sql.importColumn


diffs (138 lines):

diff --git a/monetdb5/optimizer/opt_bincopyfrom.c 
b/monetdb5/optimizer/opt_bincopyfrom.c
--- a/monetdb5/optimizer/opt_bincopyfrom.c
+++ b/monetdb5/optimizer/opt_bincopyfrom.c
@@ -15,7 +15,7 @@
 #include "opt_bincopyfrom.h"
 
 static str transform(MalBlkPtr mb, InstrPtr importTable);
-static int extract_column(MalBlkPtr mb, InstrPtr old, int idx, str proto_path, 
int proto_bat_var, int count_var);
+static int extract_column(MalBlkPtr mb, InstrPtr old, int idx, str proto_path, 
int proto_bat_var, int count_var, bool byteswap);
 
 str
 OPTbincopyfromImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
@@ -96,6 +96,7 @@ transform(MalBlkPtr mb, InstrPtr old)
        int onclient_arg = *(int*)getVarValue(mb, getArg(old, old->retc + 2));
        bool onserver = !onclient_arg;
        bool onclient = !onserver;
+       bool byteswap = *(bit*)getVarValue(mb, getArg(old, old->retc + 3));
 
        // In the following loop we pick a "prototype column".
        // This is always a column with a non-nil path and will be the first 
column for
@@ -114,7 +115,7 @@ transform(MalBlkPtr mb, InstrPtr old)
                int tail_type = ATOMstorage(getBatType(var_type));
                if (tail_type >= prototype_type)
                        continue;
-               int path_idx = old->retc + 3 + i;
+               int path_idx = old->retc + 4 + i;
                int path_var = getArg(old, path_idx);
                if (VALisnil(&getVarConstant(mb, path_var)))
                        continue;
@@ -127,7 +128,7 @@ transform(MalBlkPtr mb, InstrPtr old)
                return createException(MAL, "optimizer.bincopyfrom", 
SQLSTATE(42000) "all paths are nil");
 
        // Always emit the prototype column first
-       int prototype_count_var = extract_column(mb, old, prototype_idx, NULL, 
-1, -1);
+       int prototype_count_var = extract_column(mb, old, prototype_idx, NULL, 
-1, -1, byteswap);
        assert(mb->stop > 0);
        int prototype_bat_var = getArg(getInstrPtr(mb, mb->stop - 1), 0);
        assert(prototype_count_var == getArg(getInstrPtr(mb, mb->stop - 1), 1));
@@ -138,7 +139,7 @@ transform(MalBlkPtr mb, InstrPtr old)
        for (int i = 0; i < old->retc; i++) {
                if (i == prototype_idx)
                        continue;
-               int new_row_count_var = extract_column(mb, old, i, 
prototype_path, prototype_bat_var, row_count_var);
+               int new_row_count_var = extract_column(mb, old, i, 
prototype_path, prototype_bat_var, row_count_var, byteswap);
                if (onclient)
                        row_count_var = new_row_count_var; // chain the 
importColumn statements
        }
@@ -149,7 +150,7 @@ transform(MalBlkPtr mb, InstrPtr old)
 }
 
 static int
-extract_column(MalBlkPtr mb, InstrPtr old, int idx, str proto_path, int 
proto_bat_var, int count_var)
+extract_column(MalBlkPtr mb, InstrPtr old, int idx, str proto_path, int 
proto_bat_var, int count_var, bool byteswap)
 {
        int var = getArg(old, idx);
        int var_type = getVarType(mb, var);
@@ -163,7 +164,7 @@ extract_column(MalBlkPtr mb, InstrPtr ol
 
        int onclient = *(int*)getVarValue(mb, getArg(old, old->retc + 2));
 
-       int path_idx = old->retc + 3 + idx;
+       int path_idx = old->retc + 4 + idx;
        int path_var = getArg(old, path_idx);
        str path = (str)getVarValue(mb, path_var);
 
@@ -182,6 +183,7 @@ extract_column(MalBlkPtr mb, InstrPtr ol
                        int new_count_var = newTmpVariable(mb, TYPE_oid);
                        pushReturn(mb, p, new_count_var);
                        pushStr(mb, p, method);
+                       pushBit(mb, p, byteswap);
                        pushStr(mb, p, path);
                        pushInt(mb, p, onclient);
                        if (count_var < 0)
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
@@ -5498,8 +5498,8 @@ static mel_func sql_init_funcs[] = {
  pattern("sql", "copy_from", mvc_import_table_wrap, true, "Import a table from 
bstream s with the \ngiven tuple and seperators (sep/rsep)", args(1,14, 
batvarargany("",0),arg("t",ptr),arg("sep",str),arg("rsep",str),arg("ssep",str),arg("ns",str),arg("fname",str),arg("nr",lng),arg("offset",lng),arg("locked",int),arg("best",int),arg("fwf",str),arg("onclient",int),arg("escape",int))),
  //we use bat.single now
  //pattern("sql", "single", CMDBATsingle, false, "", args(1,2, 
batargany("",2),argany("x",2))),
- pattern("sql", "importTable", mvc_bin_import_table_wrap, true, "Import a 
table from the files (fname)", args(1,5, 
batvarargany("",0),arg("sname",str),arg("tname",str),arg("onclient",int),vararg("fname",str))),
- pattern("sql", "importColumn", mvc_bin_import_column_wrap, false, "Import a 
column from the given file", args(2, 6, batargany("", 0),arg("", oid), 
arg("type",str),arg("path",str),arg("onclient",int),arg("nrows",oid))),
+ pattern("sql", "importTable", mvc_bin_import_table_wrap, true, "Import a 
table from the files (fname)", args(1,6, 
batvarargany("",0),arg("sname",str),arg("tname",str),arg("onclient",int),arg("bswap",bit),vararg("fname",str))),
+ pattern("sql", "importColumn", mvc_bin_import_column_wrap, false, "Import a 
column from the given file", args(2, 7, batargany("", 0),arg("", oid), 
arg("method",str),arg("bswap",bit),arg("path",str),arg("onclient",int),arg("nrows",oid))),
  command("aggr", "not_unique", not_unique, false, "check if the tail sorted 
bat b doesn't have unique tail values", args(1,2, arg("",bit),batarg("b",oid))),
  command("sql", "optimizers", getPipeCatalog, false, "", args(3,3, 
batarg("",str),batarg("",str),batarg("",str))),
  pattern("sql", "optimizer_updates", SQLoptimizersUpdate, false, "", noargs),
diff --git a/sql/backends/monet5/sql_bincopyfrom.c 
b/sql/backends/monet5/sql_bincopyfrom.c
--- a/sql/backends/monet5/sql_bincopyfrom.c
+++ b/sql/backends/monet5/sql_bincopyfrom.c
@@ -647,14 +647,16 @@ mvc_bin_import_column_wrap(Client cntxt,
        bat *ret = getArgReference_bat(stk, pci, 0);
        BUN *retcnt = getArgReference_oid(stk, pci, 1);
 
-       assert(pci->argc == 6);
+       assert(pci->argc == 7);
        str method = *getArgReference_str(stk, pci, 2);
-       str path = *getArgReference_str(stk, pci, 3);
-       int onclient = *getArgReference_int(stk, pci, 4);
-       BUN nrows = *getArgReference_oid(stk, pci, 5);
+       bit byteswap = *getArgReference_bit(stk, pci, 3);
+       str path = *getArgReference_str(stk, pci, 4);
+       int onclient = *getArgReference_int(stk, pci, 5);
+       BUN nrows = *getArgReference_oid(stk, pci, 6);
 
        backend *be = cntxt->sqlcontext;
 
+       (void)byteswap;
        return importColumn(be, ret, retcnt, method, path, onclient, nrows);
 }
 
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
@@ -1705,14 +1705,20 @@ bincopyfrom(sql_query *query, dlist *qna
        if (!collist)
                return NULL;
 
-       (void)endian;
+       bool do_byteswap =
+               #ifdef WORDS_BIGENDIAN
+                       endian == endian_little;
+               #else
+                       endian == endian_big;
+               #endif
 
        f->res = table_column_types(sql->sa, t);
        sql_find_subtype(&strtpe, "varchar", 0, 0);
-       args = append( append( append( new_exp_list(sql->sa),
+       args = append( append( append( append( new_exp_list(sql->sa),
                exp_atom_str(sql->sa, t->s?t->s->base.name:NULL, &strtpe)),
                exp_atom_str(sql->sa, t->base.name, &strtpe)),
-               exp_atom_int(sql->sa, onclient));
+               exp_atom_int(sql->sa, onclient)),
+               exp_atom_bool(sql->sa, do_byteswap));
 
        // create the list of files that is passed to the function as parameter
        for (i = 0; i < list_length(t->columns.set); i++) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to