Changeset: 095c48c01cfa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/095c48c01cfa
Branch: default
Log Message:

Merge clean_parser branch into default.


diffs (truncated from 9285 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -923,6 +923,7 @@ sed -i 's/1\.2/1.1/' misc/selinux/monetd
         -DWITH_PCRE=ON \
         -DWITH_PROJ=OFF \
         -DWITH_READLINE=ON \
+        -DWITH_SQLPARSE=OFF \
         -DWITH_VALGRIND=OFF \
         -DWITH_XML2=ON \
         -DWITH_ZLIB=ON
diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -43710,12 +43710,12 @@ str_2dec_lng;
 cast to dec(lng) and check for overflow
 calc
 max
-pattern calc.max(X_0:any_1, X_1:any_1):any_1
+pattern calc.max(X_0:any_1, X_1:any_1...):any_1
 CALCmax;
 Return max of V1 and V2
 calc
 max_no_nil
-pattern calc.max_no_nil(X_0:any_1, X_1:any_1):any_1
+pattern calc.max_no_nil(X_0:any_1, X_1:any_1...):any_1
 CALCmax_no_nil;
 Return max of V1 and V2, ignoring nil values
 calc
@@ -43730,12 +43730,12 @@ mbrFromString;
 (empty)
 calc
 min
-pattern calc.min(X_0:any_1, X_1:any_1):any_1
+pattern calc.min(X_0:any_1, X_1:any_1...):any_1
 CALCmin;
 Return min of V1 and V2
 calc
 min_no_nil
-pattern calc.min_no_nil(X_0:any_1, X_1:any_1):any_1
+pattern calc.min_no_nil(X_0:any_1, X_1:any_1...):any_1
 CALCmin_no_nil;
 Return min of V1 and V2, ignoring nil values
 calc
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -32325,12 +32325,12 @@ str_2dec_lng;
 cast to dec(lng) and check for overflow
 calc
 max
-pattern calc.max(X_0:any_1, X_1:any_1):any_1
+pattern calc.max(X_0:any_1, X_1:any_1...):any_1
 CALCmax;
 Return max of V1 and V2
 calc
 max_no_nil
-pattern calc.max_no_nil(X_0:any_1, X_1:any_1):any_1
+pattern calc.max_no_nil(X_0:any_1, X_1:any_1...):any_1
 CALCmax_no_nil;
 Return max of V1 and V2, ignoring nil values
 calc
@@ -32345,12 +32345,12 @@ mbrFromString;
 (empty)
 calc
 min
-pattern calc.min(X_0:any_1, X_1:any_1):any_1
+pattern calc.min(X_0:any_1, X_1:any_1...):any_1
 CALCmin;
 Return min of V1 and V2
 calc
 min_no_nil
-pattern calc.min_no_nil(X_0:any_1, X_1:any_1):any_1
+pattern calc.min_no_nil(X_0:any_1, X_1:any_1...):any_1
 CALCmin_no_nil;
 Return min of V1 and V2, ignoring nil values
 calc
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
@@ -1633,6 +1633,7 @@ sql_table *mvc_bind_table(mvc *c, sql_sc
 str mvc_commit(mvc *c, int chain, const char *name, bool enabling_auto_commit);
 int mvc_create_column(sql_column **col, mvc *m, sql_table *t, const char 
*name, sql_subtype *tpe);
 int mvc_create_table(sql_table **t, mvc *m, sql_schema *s, const char *name, 
int tt, bit system, int persistence, int commit_action, int sz, bit properties);
+void mvc_query_processed(mvc *m);
 int mvc_result_column(backend *be, const char *tn, const char *name, const 
char *typename, int digits, int scale, BAT *b);
 int mvc_result_table(backend *be, oid query_id, int nr_cols, mapi_query_t 
type);
 str mvc_rollback(mvc *c, int chain, const char *name, bool 
disabling_auto_commit);
@@ -1646,7 +1647,6 @@ sql_rel *rel_project(allocator *sa, sql_
 void res_tables_destroy(res_table *results);
 list *sa_list(allocator *sa);
 char *sa_message(allocator *sa, _In_z_ _Printf_format_string_ const char 
*format, ...) __attribute__((__format__(__printf__, 2, 3)));
-void scanner_query_processed(struct scanner *s);
 str sht_dec2_bte(bte *res, const int *s1, const sht *v);
 str sht_dec2_dbl(dbl *res, const int *s1, const sht *v);
 str sht_dec2_flt(flt *res, const int *s1, const sht *v);
diff --git a/clients/odbc/driver/SQLStatistics.c 
b/clients/odbc/driver/SQLStatistics.c
--- a/clients/odbc/driver/SQLStatistics.c
+++ b/clients/odbc/driver/SQLStatistics.c
@@ -213,7 +213,7 @@ MNDBStatistics(ODBCStmt *stmt,
                "join sys.objects kc on i.id = kc.id "
                "join sys._columns c on (t.id = c.table_id and kc.name = 
c.name) "
                "%sjoin sys.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1, 3)) "
-               "join sys.storage() st on (st.schema = s.name and st.table = 
t.name and st.column = c.name) "
+               "join sys.storage() st on (st.schema = s.name and st.\"table\" 
= t.name and st.\"column\" = c.name) "
                "where 1=1",
                SQL_INDEX_HASHED, SQL_INDEX_OTHER,
                (Unique == SQL_INDEX_UNIQUE) ? "" : "left outer ");
@@ -262,7 +262,7 @@ MNDBStatistics(ODBCStmt *stmt,
                        "join tmp.objects kc on i.id = kc.id "
                        "join tmp._columns c on (t.id = c.table_id and kc.name 
= c.name) "
                        "%sjoin tmp.keys k on (k.name = i.name and i.table_id = 
k.table_id and k.type in (0, 1, 3))"
-                       "left outer join sys.storage() st on (st.schema = 
s.name and st.table = t.name and st.column = c.name) "
+                       "left outer join sys.storage() st on (st.schema = 
s.name and st.\"table\" = t.name and st.\"column\" = c.name) "
                        "where 1=1",
                        SQL_INDEX_HASHED, SQL_INDEX_OTHER,
                        (Unique == SQL_INDEX_UNIQUE) ? "" : "left outer ");
diff --git a/cmake/monetdb-options.cmake b/cmake/monetdb-options.cmake
--- a/cmake/monetdb-options.cmake
+++ b/cmake/monetdb-options.cmake
@@ -31,6 +31,10 @@ cmake_dependent_option(CINTEGRATION
   "NOT WIN32"
   OFF)
 
+option(WITH_SQLPARSE
+  "Compile and install the sqlparse utility (default=ON)"
+  ON)
+
 option(WITH_RTREE
   "Enable support for rtrees (librtree; default=ON)"
   ON)
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -41,6 +41,7 @@ override_dh_auto_configure:
        -DWITH_PCRE=ON \
        -DWITH_PROJ=OFF \
        -DWITH_READLINE=ON \
+       -DWITH_SQLPARSE=OFF \
        -DWITH_VALGRIND=OFF \
        -DWITH_XML2=ON \
        -DWITH_ZLIB=ON
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2548,6 +2548,9 @@ gdk_export gdk_return gdk_add_callback(c
 gdk_export gdk_return gdk_remove_callback(const char *, gdk_callback_func *f);
 
 
+#define SQLSTATE(sqlstate)     #sqlstate "!"
+#define MAL_MALLOC_FAIL        "Could not allocate space"
+
 #include <setjmp.h>
 
 typedef struct exception_buffer {
diff --git a/monetdb5/mal/mal_errors.h b/monetdb5/mal/mal_errors.h
--- a/monetdb5/mal/mal_errors.h
+++ b/monetdb5/mal/mal_errors.h
@@ -44,8 +44,6 @@
 #ifndef MAL_ERRORS
 #define MAL_ERRORS
 
-#define SQLSTATE(sqlstate)     #sqlstate "!"
-
 #define MANUAL_HELP "See documentation for details"
 
 #define PROGRAM_GENERAL "Program contains errors."
@@ -66,7 +64,6 @@
 #define INTERNAL_OBJ_CREATE "Can not create object"
 #define INTERNAL_AUTHORIZATION "authorization BATs not empty"
 
-#define MAL_MALLOC_FAIL        "Could not allocate space"
 #define MAL_STACK_FAIL "Running out of stack space."
 #define MAL_CALLDEPTH_FAIL     "Recursive call limit reached."
 
diff --git a/monetdb5/modules/mal/calc.c b/monetdb5/modules/mal/calc.c
--- a/monetdb5/modules/mal/calc.c
+++ b/monetdb5/modules/mal/calc.c
@@ -604,6 +604,18 @@ CALCmin_no_nil(Client cntxt, MalBlkPtr m
        if (ATOMcmp(t, p1, nil) == 0 ||
                (ATOMcmp(t, p2, nil) != 0 && ATOMcmp(t, p1, p2) > 0))
                p1 = p2;
+       if (pci->argc > 3) {
+               for(int i = 3; i < pci->argc; i++) {
+                       if (t != getArgType(mb, pci, i))
+                               return mythrow(MAL, "calc.min", 
SEMANTIC_TYPE_MISMATCH);
+                       ptr p2 = getArgReference(stk, pci, i);
+                       if (t >= TYPE_str && ATOMstorage(t) >= TYPE_str)
+                               p2 = *(ptr *) p2;
+                       if (ATOMcmp(t, p1, nil) == 0 ||
+                               (ATOMcmp(t, p2, nil) != 0 && ATOMcmp(t, p1, p2) 
> 0))
+                               p1 = p2;
+               }
+       }
        if (VALinit(&stk->stk[getArg(pci, 0)], t, p1) == NULL)
                return mythrow(MAL, "calc.min", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
@@ -655,6 +667,18 @@ CALCmax_no_nil(Client cntxt, MalBlkPtr m
        if (ATOMcmp(t, p1, nil) == 0 ||
                (ATOMcmp(t, p2, nil) != 0 && ATOMcmp(t, p1, p2) < 0))
                p1 = p2;
+       if (pci->argc > 3) {
+               for(int i = 3; i < pci->argc; i++) {
+                       if (t != getArgType(mb, pci, i))
+                               return mythrow(MAL, "calc.max", 
SEMANTIC_TYPE_MISMATCH);
+                       ptr p2 = getArgReference(stk, pci, i);
+                       if (t >= TYPE_str && ATOMstorage(t) >= TYPE_str)
+                               p2 = *(ptr *) p2;
+                       if (ATOMcmp(t, p1, nil) == 0 ||
+                               (ATOMcmp(t, p2, nil) != 0 && ATOMcmp(t, p1, p2) 
< 0))
+                               p1 = p2;
+               }
+       }
        if (VALinit(&stk->stk[getArg(pci, 0)], t, p1) == NULL)
                return mythrow(MAL, "calc.max", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
        return MAL_SUCCEED;
@@ -2583,10 +2607,10 @@ mel_func calc_init_funcs[] = {
  pattern("calc", "oid", CMDvarCONVERT, false, "Cast VALUE to oid", args(1,2, 
arg("",oid),arg("v",oid))),
  pattern("calc", "oid", CMDvarCONVERT, false, "Cast VALUE to oid", args(1,2, 
arg("",oid),arg("v",str))),
  pattern("calc", "str", CMDvarCONVERT, false, "Cast VALUE to str", args(1,2, 
arg("",str),argany("v",0))),
- pattern("calc", "min", CALCmin, false, "Return min of V1 and V2", args(1,3, 
argany("",1),argany("v1",1),argany("v2",1))),
- pattern("calc", "min_no_nil", CALCmin_no_nil, false, "Return min of V1 and 
V2, ignoring nil values", args(1,3, 
argany("",1),argany("v1",1),argany("v2",1))),
- pattern("calc", "max", CALCmax, false, "Return max of V1 and V2", args(1,3, 
argany("",1),argany("v1",1),argany("v2",1))),
- pattern("calc", "max_no_nil", CALCmax_no_nil, false, "Return max of V1 and 
V2, ignoring nil values", args(1,3, 
argany("",1),argany("v1",1),argany("v2",1))),
+ pattern("calc", "min", CALCmin, false, "Return min of V1 and V2", args(1,3, 
argany("",1),argany("v1",1),varargany("v2",1))),
+ pattern("calc", "min_no_nil", CALCmin_no_nil, false, "Return min of V1 and 
V2, ignoring nil values", args(1,3, 
argany("",1),argany("v1",1),varargany("v2",1))),
+ pattern("calc", "max", CALCmax, false, "Return max of V1 and V2", args(1,3, 
argany("",1),argany("v1",1),varargany("v2",1))),
+ pattern("calc", "max_no_nil", CALCmax_no_nil, false, "Return max of V1 and 
V2, ignoring nil values", args(1,3, 
argany("",1),argany("v1",1),varargany("v2",1))),
  command("calc", "ptr", CMDvarCONVERTptr, false, "Cast VALUE to ptr", 
args(1,2, arg("",ptr),arg("v",ptr))),
  pattern("calc", "ifthenelse", CALCswitchbit, false, "If VALUE is true return 
MIDDLE else RIGHT", args(1,4, 
argany("",1),arg("b",bit),argany("t",1),argany("f",1))),
  command("calc", "length", CMDstrlength, false, "Length of STRING", args(1,2, 
arg("",int),arg("s",str))),
diff --git a/sql/backends/monet5/Tests/persist_unlogged.SQL.py 
b/sql/backends/monet5/Tests/persist_unlogged.SQL.py
--- a/sql/backends/monet5/Tests/persist_unlogged.SQL.py
+++ b/sql/backends/monet5/Tests/persist_unlogged.SQL.py
@@ -18,13 +18,13 @@ with tempfile.TemporaryDirectory() as fa
             tc.execute("ALTER TABLE foo SET INSERT ONLY").assertSucceeded()
             tc.execute("INSERT INTO foo SELECT * FROM generate_series(0,500)")
             tc.execute("SELECT count(*) FROM 
foo").assertSucceeded().assertDataResultMatch([(500,)])
-            tc.execute("SELECT table, rowcount FROM persist_unlogged(\'put\', 
\'foo\')").assertSucceeded().assertDataResultMatch([('foo', 0)])
+            tc.execute("SELECT \"table\", rowcount FROM 
persist_unlogged(\'put\', 
\'foo\')").assertSucceeded().assertDataResultMatch([('foo', 0)])
 
             # Simulate some work in order to trigger WAL flush(note that 
Mtests runs with --forcemito)
             tc.execute("CREATE TABLE bar (x INT)").assertSucceeded()
             tc.execute("INSERT INTO bar SELECT * FROM 
generate_series(0,100000)").assertSucceeded()
 
-            tc.execute("SELECT table, rowcount FROM persist_unlogged(\'put\', 
\'foo\')").assertSucceeded().assertDataResultMatch([('foo', 500)])
+            tc.execute("SELECT \"table\", rowcount FROM 
persist_unlogged(\'put\', 
\'foo\')").assertSucceeded().assertDataResultMatch([('foo', 500)])
         s.communicate()
 
     with process.server(mapiport='0', dbname='db1', 
dbfarm=os.path.join(farm_dir, 'db1'), stdin=process.PIPE, stdout=process.PIPE, 
stderr=process.PIPE) as s:
diff --git a/sql/backends/monet5/rel_predicates.c 
b/sql/backends/monet5/rel_predicates.c
--- a/sql/backends/monet5/rel_predicates.c
+++ b/sql/backends/monet5/rel_predicates.c
@@ -16,6 +16,7 @@
 #include "rel_rel.h"
 #include "rel_exp.h"
 #include "mal_backend.h"
+#include "sql_storage.h"
 
 static sql_column *
 bt_find_column( sql_rel *rel, char *tname, char *name)
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
@@ -192,7 +192,7 @@ sqlcleanup(backend *be, int err)
        be->mvc->label = 0;
        be->mvc->nid = 1;
        be->no_mitosis = 0;
-       scanner_query_processed(&(be->mvc->scanner));
+       mvc_query_processed(be->mvc);
        return err;
 }
 
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -494,7 +494,7 @@ SQLstatementIntern(Client c, const char 
                r = sql_symbol2relation(sql, m->sym);
 
                assert(m->emode != m_prepare);
-               scanner_query_processed(&(m->scanner));
+               mvc_query_processed(m);
                if ((err = mvc_status(m)) ) {
                        if (strlen(m->errstr) > 6 && m->errstr[5] == '!')
                                msg = createException(PARSE, "SQLparser", "%s", 
m->errstr);
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1413,7 +1413,7 @@ SQLparser_body(Client c, backend *be)
                }
 
                m->type = Q_SCHEMA; /* TODO DEALLOCATE statements don't fit for 
Q_SCHEMA */
-               scanner_query_processed(&(m->scanner));
+               mvc_query_processed(m);
 
                /* For deallocate statements just export a simple output */
                if (!GDKembedded() && (err = mvc_export_operation(be, c->fdout, 
"", c->qryctx.starttime, c->curprg->def->optimize)) < 0)
@@ -1439,7 +1439,7 @@ SQLparser_body(Client c, backend *be)
                be->vtop = oldvtop;
                (void)runtimeProfileSetTag(c); /* generate and set the tag in 
the mal block of the clients current program. */
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to