Changeset: a83dd09114c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a83dd09114c4
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/modules/mal/tablet.c
        monetdb5/modules/mal/tablet.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_result.h
Branch: default
Log Message:

Merge with Aug2018 branch.
Note that changeset d5b35d896228 had to be done differently because of
the ON CLIENT option in COPY INTO.


diffs (128 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1797,7 +1797,7 @@ str SERVERsuspend(void *ret);
 str SERVERtrace(void *ret, int *mid, int *flag);
 ssize_t SQLBLOBfromstr(const char *instr, size_t *l, blob **val, bool 
external);
 ssize_t SQLBLOBtostr(str *tostr, size_t *l, const blob *pin, bool external);
-BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char 
*csep, const char *rsep, char quote, lng skip, lng maxrow, int best);
+BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char 
*csep, const char *rsep, char quote, lng skip, lng maxrow, int best, bool 
from_stdin);
 str STRBytes(int *res, const str *arg1);
 str STRConcat(str *res, const str *val1, const str *val2);
 str STRFromWChr(str *res, const int *at);
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -627,6 +627,7 @@ typedef struct {
        lng *time, wtime;                       /* time per col + time per 
thread */
        int rounds;                                     /* how often did we 
divide the work */
        bool ateof;                                     /* io control */
+       bool from_stdin;
        bstream *b;
        stream *out;
        MT_Id tid;
@@ -1235,8 +1236,8 @@ SQLproducer(void *p)
        READERtask *task = (READERtask *) p;
        int consoleinput = 0;
        int cur = 0;            // buffer being filled
-       bool blocked[MAXBUFFERS] = { 0 };
-       bool ateof[MAXBUFFERS] = { 0 };
+       bool blocked[MAXBUFFERS] = { false };
+       bool ateof[MAXBUFFERS] = { false };
        BUN cnt = 0, bufcnt[MAXBUFFERS] = { 0 };
        char *end, *e, *s, *base;
        const char *rsep = task->rsep;
@@ -1335,6 +1336,10 @@ SQLproducer(void *p)
                 * scan ended (we need to back off some since we could be in
                 * the middle of the record separator).  If this is too
                 * costly, we have to rethink the matter. */
+               if (task->from_stdin && *s == '\n' && task->maxrow == BUN_NONE) 
{
+                       ateof[cur] = true;
+                       goto reportlackofinput;
+               }
                for (e = s; *e && e < end && cnt < task->maxrow;) {
                        /* tokenize the record completely the format of the 
input
                         * should comply to the following grammar rule [
@@ -1597,7 +1602,7 @@ create_rejects_table(Client cntxt)
 }
 
 BUN
-SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char 
*csep, const char *rsep, char quote, lng skip, lng maxrow, int best)
+SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char 
*csep, const char *rsep, char quote, lng skip, lng maxrow, int best, bool 
from_stdin)
 {
        BUN cnt = 0, cntstart = 0, leftover = 0;
        int res = 0;            /* < 0: error, > 0: success, == 0: continue 
processing */
@@ -1617,6 +1622,7 @@ SQLload_file(Client cntxt, Tablet *as, b
        memset(ptask, 0, sizeof(ptask));
        task = (READERtask) {
                .cntxt = cntxt,
+               .from_stdin = from_stdin,
        };
 
        /* create the reject tables */
diff --git a/monetdb5/modules/mal/tablet.h b/monetdb5/modules/mal/tablet.h
--- a/monetdb5/modules/mal/tablet.h
+++ b/monetdb5/modules/mal/tablet.h
@@ -72,7 +72,7 @@ typedef struct Table_t {
        BAT *complaints;                        /* lines that did not match the 
required input */
 } Tablet;
 
-mal_export BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, 
const char *csep, const char *rsep, char quote, lng skip, lng maxrow, int best);
+mal_export BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, 
const char *csep, const char *rsep, char quote, lng skip, lng maxrow, int best, 
bool from_stdin);
 mal_export str TABLETcreate_bats(Tablet *as, BUN est);
 mal_export str TABLETcollect(BAT **bats, Tablet *as);
 mal_export str TABLETcollect_parts(BAT **bats, Tablet *as, BUN offset);
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
@@ -2649,7 +2649,7 @@ mvc_import_table_wrap(Client cntxt, MalB
        if (fname != NULL && strcmp(str_nil, fname) == 0)
                fname = NULL;
        if (fname == NULL) {
-               msg = mvc_import_table(cntxt, &b, be->mvc, be->mvc->scanner.rs, 
t, tsep, rsep, ssep, ns, sz, offset, locked, besteffort);
+               msg = mvc_import_table(cntxt, &b, be->mvc, be->mvc->scanner.rs, 
t, tsep, rsep, ssep, ns, sz, offset, locked, besteffort, true);
        } else {
                if (onclient) {
                        mnstr_write(be->mvc->scanner.ws, PROMPT3, 
sizeof(PROMPT3)-1, 1);
@@ -2724,7 +2724,7 @@ mvc_import_table_wrap(Client cntxt, MalB
                s = bstream_create(ss, 0x200000);
 #endif
                if (s != NULL) {
-                       msg = mvc_import_table(cntxt, &b, be->mvc, s, t, tsep, 
rsep, ssep, ns, sz, offset, locked, besteffort);
+                       msg = mvc_import_table(cntxt, &b, be->mvc, s, t, tsep, 
rsep, ssep, ns, sz, offset, locked, besteffort, false);
                        if (onclient) {
                                mnstr_write(be->mvc->scanner.ws, PROMPT3, 
sizeof(PROMPT3)-1, 1);
                                mnstr_flush(be->mvc->scanner.ws);
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -875,7 +875,7 @@ has_whitespace(const char *s)
 }
 
 str
-mvc_import_table(Client cntxt, BAT ***bats, mvc *m, bstream *bs, sql_table *t, 
const char *sep, const char *rsep, const char *ssep, const char *ns, lng sz, 
lng offset, int locked, int best)
+mvc_import_table(Client cntxt, BAT ***bats, mvc *m, bstream *bs, sql_table *t, 
const char *sep, const char *rsep, const char *ssep, const char *ns, lng sz, 
lng offset, int locked, int best, bool from_stdin)
 {
        int i = 0, j;
        node *n;
@@ -1007,7 +1007,7 @@ mvc_import_table(Client cntxt, BAT ***ba
                        }
                }
                if ( (locked || (msg = TABLETcreate_bats(&as, (BUN) (sz < 0 ? 
1000 : sz))) == MAL_SUCCEED)  ){
-                       if (!sz || (SQLload_file(cntxt, &as, bs, out, sep, 
rsep, ssep ? ssep[0] : 0, offset, sz, best) != BUN_NONE && 
+                       if (!sz || (SQLload_file(cntxt, &as, bs, out, sep, 
rsep, ssep ? ssep[0] : 0, offset, sz, best, from_stdin) != BUN_NONE && 
                                (best || !as.error))) {
                                *bats = (BAT**) GDKzalloc(sizeof(BAT *) * 
as.nr_attrs);
                                if ( *bats == NULL){
diff --git a/sql/backends/monet5/sql_result.h b/sql/backends/monet5/sql_result.h
--- a/sql/backends/monet5/sql_result.h
+++ b/sql/backends/monet5/sql_result.h
@@ -25,7 +25,7 @@ extern int mvc_export_chunk(backend *b, 
 
 extern int mvc_export_prepare(mvc *c, stream *s, cq *q, str w);
 
-extern str mvc_import_table(Client cntxt, BAT ***bats, mvc *c, bstream *s, 
sql_table *t, const char *sep, const char *rsep, const char *ssep, const char 
*ns, lng nr, lng offset, int locked, int best);
+extern str mvc_import_table(Client cntxt, BAT ***bats, mvc *c, bstream *s, 
sql_table *t, const char *sep, const char *rsep, const char *ssep, const char 
*ns, lng nr, lng offset, int locked, int best, bool from_stdin);
 extern int mvc_result_table(mvc *m, oid query_id, int nr_cols, int type, BAT 
*order);
 
 extern int mvc_result_column(mvc *m, char *tn, char *name, char *typename, int 
digits, int scale, BAT *b);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to