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