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 -- [email protected]
To unsubscribe send an email to [email protected]