Changeset: ced3016179b8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ced3016179b8
Modified Files:
        sql/server/rel_select.c
Branch: ordered-set-aggregates
Log Message:

Merge with default branch.


diffs (truncated from 4844 to 300 lines):

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
@@ -37,15 +37,17 @@ csv_open_file(char* filename)
 static const char *
 next_delim(const char *s, const char *e, char delim, char quote)
 {
-       bool inquote = false;
-       for(;  s < e; s++) {
-               if (*s == quote)
-                       inquote = !inquote;
-               else if (!inquote && *s == delim)
+       if (s && e) {
+               bool inquote = false;
+               for(;  s < e; s++) {
+                       if (*s == quote)
+                               inquote = !inquote;
+                       else if (!inquote && *s == delim)
+                               return s;
+               }
+               if (s <= e)
                        return s;
        }
-       if (s <= e)
-               return s;
        return NULL;
 }
 
@@ -242,6 +244,7 @@ detect_time(const char *s, const char *e
 static bool
 detect_date(const char *s, const char *e)
 {
+       /* TODO detect negative years */
        if ((e-s) != 10)
                return false;
        /* YYYY-MM-DD */
@@ -256,6 +259,7 @@ detect_date(const char *s, const char *e
 static bool
 detect_timestamp(const char *s, const char *e)
 {
+       /* TODO detect negative years */
        if ((e-s) != 16)
                return false;
        /* DATE TIME */
@@ -276,24 +280,26 @@ detect_types_row(const char *s, const ch
                int scale = 0;
 
                types[i].type = CSV_STRING;
-               if (n) {
+               types[i].scale = 0;
+               if (n && s) {
                        if (detect_null(s,n))
                                types[i].type = CSV_NULL;
                        else if (detect_bool(s,n))
                                types[i].type = CSV_BOOLEAN;
                        else if (detect_bigint(s, n))
                                types[i].type = CSV_BIGINT;
-                       else if (detect_decimal(s, n, &scale))
+                       else if (detect_decimal(s, n, &scale)) {
                                types[i].type = CSV_DECIMAL;
+                               types[i].scale = scale;
+                       }
                        else if (detect_time(s, n))
                                types[i].type = CSV_TIME;
                        else if (detect_date(s, n))
                                types[i].type = CSV_DATE;
                        else if (detect_timestamp(s, n))
                                types[i].type = CSV_TIMESTAMP;
-                       types[i].scale = scale;
+                       s = n+1;
                }
-               s = n+1;
        }
        return types;
 }
@@ -310,7 +316,7 @@ detect_types(const char *buf, char delim
 
                if (!e)
                        break;
-               csv_type *ntypes = detect_types_row( cur, e, delim, quote, 
nr_fields);
+               csv_type *ntypes = detect_types_row(cur, e, delim, quote, 
nr_fields);
                if (!ntypes)
                        return NULL;
                cur = e+1;
@@ -397,9 +403,7 @@ static str
 csv_relation(mvc *sql, sql_subfunc *f, char *filename, list *res_exps, char 
*tname)
 {
        stream *file = csv_open_file(filename);
-       char buf[8196+1];
-
-       if(file == NULL)
+       if (file == NULL)
                return RUNTIME_FILE_NOT_FOUND;
 
        /*
@@ -407,6 +411,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c
         * detect types
         * detect header
         */
+       char buf[8196+1];
        ssize_t l = mnstr_read(file, buf, 1, 8196);
        mnstr_close(file);
        mnstr_destroy(file);
@@ -424,7 +429,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c
 
        f->tname = tname;
 
-       const char *p = buf, *ep = strchr(p, '\n');;
+       const char *p = buf, *ep = strchr(p, '\n');
        list *typelist = sa_list(sql->sa);
        list *nameslist = sa_list(sql->sa);
        for(int col = 0; col < nr_fields; col++) {
@@ -447,12 +452,12 @@ csv_relation(mvc *sql, sql_subfunc *f, c
                                list_append(res_exps, ne);
                        } else {
                                GDKfree(types);
-                               throw(SQL, SQLSTATE(42000), "csv" "type %s not 
found\n", st);
+                               return sa_message(sql->sa, "csv" "type %s not 
found\n", st);
                        }
                } else {
                        /* shouldn't be possible, we fallback to strings */
                        GDKfree(types);
-                       throw(SQL, SQLSTATE(42000), "csv" "type unknown\n");
+                       return sa_message(sql->sa, "csv" "type unknown\n");
                }
        }
        GDKfree(types);
@@ -467,7 +472,7 @@ csv_relation(mvc *sql, sql_subfunc *f, c
        r->extra_tsep = extra_tsep;
        r->has_header = has_header;
        f->sname = (char*)r; /* pass schema++ */
-       return MAL_SUCCEED;
+       return NULL;
 }
 
 static void *
@@ -479,7 +484,6 @@ csv_load(void *BE, sql_subfunc *f, char 
        sql_table *t = NULL;
 
        if (mvc_create_table( &t, be->mvc, be->mvc->session->tr->tmp/* misuse 
tmp schema */, f->tname /*gettable name*/, tt_table, false, SQL_DECLARED_TABLE, 
0, 0, false) != LOG_OK)
-               //throw(SQL, SQLSTATE(42000), "csv" RUNTIME_FILE_NOT_FOUND);
                /* alloc error */
                return NULL;
 
@@ -490,7 +494,6 @@ csv_load(void *BE, sql_subfunc *f, char 
                sql_column *c = NULL;
 
                if (!tp || mvc_create_column(&c, be->mvc, t, name, tp) != 
LOG_OK) {
-                       //throw(SQL, SQLSTATE(42000), "csv" RUNTIME_LOAD_ERROR);
                        return NULL;
                }
        }
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
@@ -1702,14 +1702,12 @@ push_join_exp(mvc *sql, sql_rel *rel, sq
 static sql_rel *
 rel_select_push_filter_exp_down(mvc *sql, sql_rel *rel, sql_exp *e, list *l, 
list *r, int ff)
 {
-       sql_exp *ll, *rr;
+       sql_exp *ll;
        if (exps_card(r) <= CARD_ATOM && (exps_are_atoms(r) || 
exps_have_freevar(sql, r) || exps_have_freevar(sql, l))) {
                if (exps_card(l) == exps_card(r) || rel->processed)  /* bin 
compare op */
                        return rel_select(sql->sa, rel, e);
                if ((ll = exps_find_one_multi_exp(l)))
                        return push_select_exp(sql, rel, e, ll, ff);
-       } else if ((ll = exps_find_one_multi_exp(l)) && (rr = 
exps_find_one_multi_exp(r))) { /* join */
-               return push_join_exp(sql, rel, e, ll, rr, NULL, ff);
        }
        if (is_outerjoin(rel->op))
                return rel_select(sql->sa, rel, e);
diff --git a/sql/test/BugTracker-2009/Tests/mclient-lsql-D.stable.out 
b/sql/test/BugTracker-2009/Tests/mclient-lsql-D.stable.out
--- a/sql/test/BugTracker-2009/Tests/mclient-lsql-D.stable.out
+++ b/sql/test/BugTracker-2009/Tests/mclient-lsql-D.stable.out
@@ -1,33 +1,3 @@
-stdout of test 'mclient-lsql-D` in directory 'sql/test/BugTracker-2009` itself:
-
-
-# 21:51:00 >  
-# 21:51:00 >   mserver5 
"--config=/ufs/niels/scratch/rc/Linux-x86_64/etc/monetdb5.conf" --debug=10 
--set gdk_nr_threads=0 --set 
"monet_mod_path=/ufs/niels/scratch/rc/Linux-x86_64/lib/MonetDB5:/ufs/niels/scratch/rc/Linux-x86_64/lib/MonetDB5/lib:/ufs/niels/scratch/rc/Linux-x86_64/lib/MonetDB5/bin"
 --set "gdk_dbfarm=/ufs/niels/scratch/rc/Linux-x86_64/var/MonetDB5/dbfarm"    
--set mapi_open=true --set xrpc_open=true --set mapi_port=38418 --set 
xrpc_port=47399 --set monet_prompt= --trace  
"--dbname=mTests_src_test_BugTracker-2009" --set mal_listing=0 "--dbinit= 
include sql;" ; echo ; echo Over..
-# 21:51:00 >  
-
-# MonetDB server v5.12.0, based on kernel v1.30.0
-# Serving database 'mTests_src_test_BugTracker-2009', using 4 threads
-# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
-# Copyright (c) 1993-July 2008 CWI.
-# Copyright (c) August 2008-2009 MonetDB B.V., all rights reserved
-# Visit http://monetdb.cwi.nl/ for further information
-# Listening for connection requests on mapi:monetdb://alf.ins.cwi.nl:38418/
-# MonetDB/SQL module v2.30.1 loaded
-
-#function user.main():void;
-#    clients.quit();
-#end main;
-
-
-# 21:51:00 >  
-# 21:51:00 >  ./mclient-lsql-D.SQL.sh mclient-lsql-D 
-# 21:51:00 >  
-
-
-# 21:51:00 >  
-# 21:51:00 >  Mtimeout -timeout 60 mclient -lsql -umonetdb -Pmonetdb 
--host=alf --port=38418  -D < /dev/null
-# 21:51:00 >  
-
 START TRANSACTION;
 SET SCHEMA "sys";
 CREATE TABLE "sys"."table_a" (
@@ -58,8 +28,3 @@ ALTER TABLE "sys"."table_c" ADD CONSTRAI
 ALTER TABLE "sys"."table_c" ADD CONSTRAINT "fk_table_c_table_d_id" FOREIGN KEY 
("table_d_id") REFERENCES "sys"."table_b" ("table_b_id");
 ALTER TABLE "sys"."table_d" ADD CONSTRAINT "fk_table_d_table_a_id" FOREIGN KEY 
("table_a_id") REFERENCES "sys"."table_a" ("table_a_id");
 COMMIT;
-
-# 21:51:00 >  
-# 21:51:00 >  Done.
-# 21:51:00 >  
-
diff --git 
a/sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.stable.out 
b/sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.stable.out
--- a/sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.stable.out
+++ b/sql/test/BugTracker-2019/Tests/msqldump-mapi-cache.Bug-6777.stable.out
@@ -1,523 +1,3 @@
-stdout of test 'msqldump-mapi-cache.Bug-6777` in directory 
'sql/test/BugTracker-2019` itself:
-
-
-# 10:39:12 >  
-# 10:39:12 >  "/usr/bin/python3" "msqldump-mapi-cache.Bug-6777.py" 
"msqldump-mapi-cache.Bug-6777"
-# 10:39:12 >  
-
-#start transaction;
-#create table dbgen_version
-#(
-# dv_version varchar(16),
-# dv_create_date date,
-# dv_create_time time,
-# dv_cmdline_args varchar(200)
-#);
-#create table customer_address
-#(
-# ca_address_sk integer not null,
-# ca_address_id char(16) not null,
-# ca_street_number char(10),
-# ca_street_name varchar(60),
-# ca_street_type char(15),
-# ca_suite_number char(10),
-# ca_city varchar(60),
-# ca_county varchar(30),
-# ca_state char(2),
-# ca_zip char(10),
-# ca_country varchar(20),
-# ca_gmt_offset decimal(5,2),
-# ca_location_type char(20),
-# primary key (ca_address_sk)
-#);
-#create table customer_demographics
-#(
-# cd_demo_sk integer not null,
-# cd_gender char(1),
-# cd_marital_status char(1),
-# cd_education_status char(20),
-# cd_purchase_estimate integer,
-# cd_credit_rating char(10),
-# cd_dep_count integer,
-# cd_dep_employed_count integer,
-# cd_dep_college_count integer,
-# primary key (cd_demo_sk)
-#);
-#create table date_dim
-#(
-# d_date_sk integer not null,
-# d_date_id char(16) not null,
-# d_date date,
-# d_month_seq integer,
-# d_week_seq integer,
-# d_quarter_seq integer,
-# d_year integer,
-# d_dow integer,
-# d_moy integer,
-# d_dom integer,
-# d_qoy integer,
-# d_fy_year integer,
-# d_fy_quarter_seq integer,
-# d_fy_week_seq integer,
-# d_day_name char(9),
-# d_quarter_name char(6),
-# d_holiday char(1),
-# d_weekend char(1),
-# d_following_holiday char(1),
-# d_first_dom integer,
-# d_last_dom integer,
-# d_same_day_ly integer,
-# d_same_day_lq integer,
-#create table warehouse
-#(
-# w_warehouse_sk integer not null,
-# w_warehouse_id char(16) not null,
-# w_warehouse_name varchar(20),
-# w_warehouse_sq_ft integer,
-# w_street_number char(10),
-# w_street_name varchar(60),
-# w_street_type char(15),
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to