Changeset: 6d4452a022a1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6d4452a022a1
Branch: cleanup_types
Log Message:

merged with default


diffs (truncated from 1081 to 300 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
@@ -1362,6 +1362,8 @@ exp2bin_file_loader(backend *be, sql_exp
 
        file_loader_t *fl = fl_find(ext);
        if (!fl)
+               fl = fl_find("csv");
+       if (!fl)
                return NULL;
        sql_exp *fexp = arg_list->h->data;
        assert(is_atom(fexp->type));
diff --git a/sql/backends/monet5/vaults/csv/csv.c 
b/sql/backends/monet5/vaults/csv/csv.c
--- a/sql/backends/monet5/vaults/csv/csv.c
+++ b/sql/backends/monet5/vaults/csv/csv.c
@@ -189,6 +189,8 @@ detect_bool(const char *s, const char *e
 static bool
 detect_bigint(const char *s, const char *e)
 {
+       if (s[0] == '-' || s[0] == '+')
+               s++;
        while(s < e) {
                if (!isdigit(*s))
                        break;
@@ -204,6 +206,8 @@ detect_decimal(const char *s, const char
 {
        int dotseen = 0;
 
+       if (s[0] == '-' || s[0] == '+')
+               s++;
        while(s < e) {
                if (!dotseen && *s == '.')
                        dotseen = (int)(e-(s+1));
@@ -371,6 +375,7 @@ typedef struct csv_t {
        char quote;
        char delim;
        bool has_header;
+       bool extra_tsep;
 } csv_t;
 
 /*
@@ -402,7 +407,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c
        if (l<0)
                return RUNTIME_LOAD_ERROR;
        buf[l] = 0;
-       bool has_header = false;
+       bool has_header = false, extra_tsep = false;
        int nr_fields = 0;
        char q = detect_quote(buf);
        char d = detect_delimiter(buf, q, &nr_fields);
@@ -425,13 +430,20 @@ csv_relation(mvc *sql, sql_subfunc *f, c
                        sql_subtype *t = (types[col].type == CSV_DECIMAL)?
                                        sql_bind_subtype(sql->sa, st, 18, 
types[col].scale):
                                        sql_bind_subtype(sql->sa, st,  0, 
types[col].scale);
-
-                       list_append(typelist, t);
-                       list_append(res_exps, exp_column(sql->sa, NULL, name, 
t, CARD_MULTI, 1, 0, 0));
+                       if (!t && (col+1) == nr_fields && types[col].type == 
CSV_NULL) {
+                               nr_fields--;
+                               extra_tsep = true;
+                       } else if (t) {
+                               list_append(typelist, t);
+                               list_append(res_exps, exp_column(sql->sa, NULL, 
name, t, CARD_MULTI, 1, 0, 0));
+                       } else {
+                               GDKfree(types);
+                               throw(SQL, SQLSTATE(42000), "csv" "type %s not 
found\n", st);
+                       }
                } else {
                        /* shouldn't be possible, we fallback to strings */
                        GDKfree(types);
-                       assert(0);
+                       throw(SQL, SQLSTATE(42000), "csv" "type unknown\n");
                }
        }
        GDKfree(types);
@@ -443,6 +455,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c
        r->sname[0] = 0;
        r->quote = q;
        r->delim = d;
+       r->extra_tsep = extra_tsep;
        r->has_header = has_header;
        f->sname = (char*)r; /* pass schema++ */
        return MAL_SUCCEED;
@@ -467,7 +480,7 @@ csv_load(void *BE, sql_subfunc *f, char 
                sql_subtype *tp = tn->data;
                sql_column *c = NULL;
 
-               if (mvc_create_column(&c, be->mvc, t, name, tp) != LOG_OK) {
+               if (!tp || mvc_create_column(&c, be->mvc, t, name, tp) != 
LOG_OK) {
                        //throw(SQL, SQLSTATE(42000), "csv" RUNTIME_LOAD_ERROR);
                        return NULL;
                }
@@ -480,15 +493,23 @@ csv_load(void *BE, sql_subfunc *f, char 
 
        sql_subtype tpe;
        sql_find_subtype(&tpe, "varchar", 0, 0);
-       char tsep[2], ssep[2];
+       char tsep[2], rsep[3], ssep[2];
        tsep[0] = r->delim;
        tsep[1] = 0;
        ssep[0] = r->quote;
        ssep[1] = 0;
+       if (r->extra_tsep) {
+               rsep[0] = r->delim;
+               rsep[1] = '\n';
+               rsep[2] = 0;
+       } else {
+               rsep[0] = '\n';
+               rsep[1] = 0;
+       }
        list *args = append( append( append( append( append( 
new_exp_list(sql->sa),
        exp_atom_ptr(sql->sa, t)),
        exp_atom_str(sql->sa, tsep, &tpe)),
-       exp_atom_str(sql->sa, "\n", &tpe)),
+       exp_atom_str(sql->sa, rsep, &tpe)),
        exp_atom_str(sql->sa, ssep, &tpe)),
        exp_atom_str(sql->sa, "", &tpe));
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -592,7 +592,9 @@ file_loader_add_table_column_types(mvc *
                        *d = 0;
                        fl = fl_find(ext);
                }
-               if (!fl)
+               if (!fl) /* fallback */
+                       fl = fl_find("csv");
+               if (!fl) /* not expected */
                        return sa_message(sql->ta, "Filename extension '%s' 
missing", ext?ext:"");
        }
        str err = fl->add_types(sql, f, filename, res_exps, tname);
diff --git a/sql/test/BugTracker-2014/Tests/All 
b/sql/test/BugTracker-2014/Tests/All
--- a/sql/test/BugTracker-2014/Tests/All
+++ b/sql/test/BugTracker-2014/Tests/All
@@ -52,7 +52,7 @@ insert_into_temp_table.Bug-3600
 too_general_errmsg.Bug-3605
 querylog.Bug-3607
 fk-property-assert.Bug-3612
-HAVE_HGE?hexadecimal_literals.Bug-3621
+hexadecimal_literals.Bug-3621
 orderby_column_exp.Bug-3620
 typecast_error.Bug-3622
 case-sqrt.Bug-3627
diff --git a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.test 
b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.test
--- a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.test
+++ b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.test
@@ -416,41 +416,76 @@ select 0x00000000000000007ffffffffffffff
 ----
 9223372036854775807
 
+onlyif has-hugeint
 query I rowsort
 select 0x8000000000000000
 ----
 9223372036854775808
 
+skipif has-hugeint
+statement error
+select 0x8000000000000000
+
+onlyif has-hugeint
 query I rowsort
 select 0x00000000000000008000000000000000
 ----
 9223372036854775808
 
+skipif has-hugeint
+statement error
+select 0x00000000000000008000000000000000
+
+onlyif has-hugeint
 query I rowsort
 select 0x8000000000000001
 ----
 9223372036854775809
 
+skipif has-hugeint
+statement error
+select 0x8000000000000001
+
+onlyif has-hugeint
 query I rowsort
 select 0x00000000000000008000000000000001
 ----
 9223372036854775809
 
+skipif has-hugeint
+statement error
+select 0x00000000000000008000000000000001
+
+onlyif has-hugeint
 query I rowsort
 select 0xffffffffffffffff
 ----
 18446744073709551615
 
+skipif has-hugeint
+statement error
+select 0xffffffffffffffff
+
+onlyif has-hugeint
 query I rowsort
 select 0x0000000000000000ffffffffffffffff
 ----
 18446744073709551615
 
+skipif has-hugeint
+statement error
+select 0x0000000000000000ffffffffffffffff
+
+onlyif has-hugeint
 query I rowsort
 select 0x7fffffffffffffffffffffffffffffff
 ----
 170141183460469231731687303715884105727
 
+skipif has-hugeint
+statement error
+select 0x7fffffffffffffffffffffffffffffff
+
 statement error
 select 0x80000000000000000000000000000000
 
@@ -495,16 +530,26 @@ select 0x123456789abcdef0
 ----
 1311768467463790320
 
+onlyif has-hugeint
 query I rowsort
 select 0x123456789abcdef01
 ----
 20988295479420645121
 
+skipif has-hugeint
+statement error
+select 0x123456789abcdef01
+
+onlyif has-hugeint
 query I rowsort
 select 0x123456789abcdef0123456789abcdef0
 ----
 24197857203266734864793317670504947440
 
+skipif has-hugeint
+statement error
+select 0x123456789abcdef0123456789abcdef0
+
 statement error
 select 0x123456789abcdef0123456789abcdef01
 
@@ -926,41 +971,76 @@ select -0x00000000000000007fffffffffffff
 ----
 -9223372036854775807
 
+onlyif has-hugeint
 query I rowsort
 select -0x8000000000000000
 ----
 -9223372036854775808
 
+skipif has-hugeint
+statement error
+select -0x8000000000000000
+
+onlyif has-hugeint
 query I rowsort
 select -0x00000000000000008000000000000000
 ----
 -9223372036854775808
 
+skipif has-hugeint
+statement error
+select -0x00000000000000008000000000000000
+
+onlyif has-hugeint
 query I rowsort
 select -0x8000000000000001
 ----
 -9223372036854775809
 
+skipif has-hugeint
+statement error
+select -0x8000000000000001
+
+onlyif has-hugeint
 query I rowsort
 select -0x00000000000000008000000000000001
 ----
 -9223372036854775809
 
+skipif has-hugeint
+statement error
+select -0x00000000000000008000000000000001
+
+onlyif has-hugeint
 query I rowsort
 select -0xffffffffffffffff
 ----
 -18446744073709551615
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to