Changeset: 46ece3c7eaf1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/46ece3c7eaf1
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
Branch: directappend
Log Message:

Pass append_from instruction into mvc_import_table_wrap


diffs (110 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
@@ -4270,7 +4270,7 @@ dump_code(void)
        dump_code_state.pos = stop;
 }
 
-static sql_table*
+static sql_exp*
 can_use_appendfrom(sql_rel *rel)
 {
        if (rel->flag & UPD_NO_CONSTRAINT) {
@@ -4398,56 +4398,7 @@ can_use_appendfrom(sql_rel *rel)
        if (strcmp(destination_table->base.name, "banana") != 0 && 
strcmp(destination_table->base.name, "dummy") != 0)
                return NULL;
 
-       return destination_table;
-}
-
-static stmt *
-rel2bin_appendfrom(backend *be, sql_rel *rel, list *refs, sql_table *t)
-{
-       (void)rel;
-       (void)refs;
-       (void)t;
-
-       char *tname = t->base.name;
-       char *sname = t->s->base.name;
-
-       // find the call to sys.copyfrom so we can look at its parameters
-       // duplicated from can_use_appendfrom, these functions should probably
-       // be merged
-       sql_rel *p = rel;
-       if (rel->flag & UPD_COMP)
-               p = p->r;
-       if (p->op == op_project)
-               p = p->l;
-       sql_exp *copy_from = p->r;
-       sql_subfunc *sf = copy_from->f;
-       assert(0 == strcmp(sf->func->imp, "copy_from"));
-       list *args = copy_from->l;
-       sql_exp *arg5 = args->h->next->next->next->next->next->data;
-       assert(arg5->type == e_atom);
-       atom *a = arg5->l;
-       assert(atom_type(a)->type->localtype == TYPE_str);
-       char *filename = a->data.val.pval;
-
-
-       InstrPtr append_instr = newFcnCallArgs(be->mb, sqlRef, "append_from", 
3);
-       setDestType(be->mb, append_instr, newBatType(TYPE_oid));
-       append_instr = pushStr(be->mb, append_instr, sname);
-       append_instr = pushStr(be->mb, append_instr, tname);
-       append_instr = pushStr(be->mb, append_instr, filename);
-
-       InstrPtr count_instr = newFcnCallArgs(be->mb, aggrRef, countRef, 1);
-       count_instr = pushArgument(be->mb, count_instr, 
getDestVar(append_instr));
-
-
-       int destvar = getDestVar(count_instr);
-
-       stmt *s = stmt_none(be);
-       s->nr = destvar;
-
-       be->rowcount = be->rowcount ? add_to_rowcount_accumulator(be, s->nr) : 
s->nr;
-
-       return s;
+       return copy_from;
 }
 
 static stmt *
@@ -4457,11 +4408,17 @@ rel2bin_insert(backend *be, sql_rel *rel
        dump_code_state.pos = 0;
        dump_code();
 
-       sql_table *tbl = can_use_appendfrom(rel);
-       if (tbl != NULL) {
-               stmt *s = rel2bin_appendfrom(be, rel, refs, tbl);
-               dump_code();
-               return s;
+       sql_exp *copyfrom = can_use_appendfrom(rel);
+       if (copyfrom != NULL) {
+               // later on we'll do this properly, passing an extra parameter,
+               // for now we adjust an existing parameter
+               list *args = copyfrom->l;
+               sql_exp* arg7 = 
args->h->next->next->next->next->next->next->next->next->data;
+               assert(arg7->type == e_atom);
+               atom *a = arg7->l;
+               assert(atom_type(a)->type->localtype == TYPE_int);
+               int *best_effort = &a->data.val.ival;
+               *best_effort += 100; // magic
        }
 
        mvc *sql = be->mvc;
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
@@ -2902,7 +2902,13 @@ mvc_import_table_wrap(Client cntxt, MalB
        const char *fname = *getArgReference_str(stk, pci, pci->retc + 5);
        lng sz = *getArgReference_lng(stk, pci, pci->retc + 6);
        lng offset = *getArgReference_lng(stk, pci, pci->retc + 7);
+       bool append_directly = false;
        int besteffort = *getArgReference_int(stk, pci, pci->retc + 8);
+       if (besteffort >= 100) {
+               besteffort -= 100;
+               append_directly = true;
+       }
+       (void)append_directly;
        char *fixed_widths = *getArgReference_str(stk, pci, pci->retc + 9);
        int onclient = *getArgReference_int(stk, pci, pci->retc + 10);
        bool escape = *getArgReference_int(stk, pci, pci->retc + 11);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to