Changeset: 0277aaccdedb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0277aaccdedb
Added Files:
        sql/server/sqlparse.c
Modified Files:
        gdk/gdk.h
        monetdb5/mal/mal_errors.h
        sql/backends/monet5/rel_predicates.c
        sql/backends/monet5/vaults/csv/csv.c
        sql/common/sql_backend.c
        sql/common/sql_types.h
        sql/include/sql_catalog.h
        sql/server/CMakeLists.txt
        sql/server/rel_basetable.c
        sql/server/rel_optimizer.c
        sql/server/rel_partition.c
        sql/server/rel_planner.c
        sql/server/rel_psm.c
        sql/server/rel_rel.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_sequence.c
        sql/server/rel_sequence.h
        sql/server/rel_statistics.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.h
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_semantic.c
        sql/server/sql_semantic.h
        sql/server/sql_tokens.h
        sql/storage/sql_storage.h
        sql/storage/store_dependency.h
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.test
        sql/test/BugTracker-2020/Tests/txtsim-parallel.Bug-7016.test
        sql/test/BugTracker-2023/Tests/misc-crashes-7390.test
        sql/test/SQLancer/Tests/sqlancer09.test
        sql/test/SQLancer/Tests/sqlancer17.test
        sql/test/SQLancer/Tests/sqlancer22.test
        sql/test/Users/Tests/userCallFunction.test
        sql/test/miscellaneous/Tests/select_groupby.sql
        sql/test/miscellaneous/Tests/select_groupby.stable.err
        sql/test/miscellaneous/Tests/simple_plans.test
        sql/test/miscellaneous/Tests/simple_selects.test
        sql/test/out2in/Tests/out2in.test
        sql/test/pg_regress/Tests/int8.test
        sql/test/subquery/Tests/subquery4.test
Branch: clean_parser
Log Message:

add simple binary just reading a sql file and parsing it (only AST level)

cleanup some more ie BINOP's are gone from the parser


diffs (truncated from 1825 to 300 lines):

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(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/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/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
@@ -24,6 +24,7 @@
 #include "mal_backend.h"
 #include "sql_types.h"
 #include "rel_bin.h"
+#include "sql_storage.h"
 
 #include <unistd.h>
 
diff --git a/sql/common/sql_backend.c b/sql/common/sql_backend.c
--- a/sql/common/sql_backend.c
+++ b/sql/common/sql_backend.c
@@ -108,7 +108,7 @@ backend_resolve_function(ptr M, sql_func
 {
        if (be_funcs.fresolve_function != NULL)
                return be_funcs.fresolve_function(M, f, fimp, side_effect);
-       return 0;
+       return 1;
 }
 
 int
@@ -116,7 +116,7 @@ backend_has_module(ptr M, char *name)
 {
        if (be_funcs.fhas_module_function != NULL)
                return be_funcs.fhas_module_function(M, name);
-       return 0;
+       return 1;
 }
 
 int
diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h
--- a/sql/common/sql_types.h
+++ b/sql/common/sql_types.h
@@ -17,7 +17,6 @@
 #include "sql_list.h"
 #include "sql_string.h"
 #include "sql_catalog.h"
-#include "sql_storage.h"
 #include "sql_backend.h"
 #include "stream.h"
 
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -876,6 +876,19 @@ extract_schema_and_sequence_name(allocat
        }
 }
 
+#define isTempTable(x)   ((x)->persistence!=SQL_PERSIST)
+#define isGlobal(x)      ((x)->persistence!=SQL_LOCAL_TEMP && 
(x)->persistence!=SQL_DECLARED_TABLE)
+#define isGlobalTemp(x)  ((x)->persistence==SQL_GLOBAL_TEMP)
+#define isLocalTemp(x)   ((x)->persistence==SQL_LOCAL_TEMP)
+#define isTempSchema(x)  (strcmp((x)->base.name, "tmp") == 0)
+#define isDeclaredTable(x)  ((x)->persistence==SQL_DECLARED_TABLE)
+
+typedef enum store_type {
+       store_bat,      /* delta bats, ie multi user read/write */
+       store_tst,
+       store_mem
+} store_type;
+
 extern void arg_destroy(sql_store store, sql_arg *a);
 extern void part_value_destroy(sql_store store, sql_part_value *pv);
 
diff --git a/sql/server/CMakeLists.txt b/sql/server/CMakeLists.txt
--- a/sql/server/CMakeLists.txt
+++ b/sql/server/CMakeLists.txt
@@ -127,3 +127,61 @@ set_target_properties(sqlserver
   PROPERTIES
   POSITION_INDEPENDENT_CODE ON
   PUBLIC_HEADER "${sqlserver_public_headers}")
+
+add_executable(sqlparse)
+
+target_sources(sqlparse
+  PRIVATE
+  sql_atom.h
+  sql_atom.c
+  sql_decimal.h
+  sql_decimal.c
+  sql_scan.h
+  sql_scan.c
+  sql_symbol.h
+  sql_symbol.c
+  sql_datetime.c
+  sql_datetime.h
+
+  sql_semantic.h
+  sql_mvc.h
+  rel_sequence.h
+  ${BISON_sqlparser_OUTPUT_HEADER}
+  ${BISON_sqlparser_OUTPUT_SOURCE}
+  sqlparse.c)
+
+target_include_directories(sqlparse
+  PRIVATE
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+  PUBLIC
+  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+  $<INSTALL_INTERFACE:${INCLUDEDIR}/monetdb>)
+
+target_link_libraries(sqlparse
+  PRIVATE
+  monetdb_config_header
+  stream
+  bat
+  sqlinclude
+  sqlcommon
+  $<$<NOT:$<PLATFORM_ID:Windows>>:m>
+  $<$<PLATFORM_ID:Windows>:${GETOPT_LIB}>
+  $<$<BOOL:${MALLOC_FOUND}>:Malloc::Malloc>
+  Threads::Threads)
+
+set_target_properties(sqlparse
+  PROPERTIES
+  VERSION ${MONETDB_VERSION})
+
+install(TARGETS
+  sqlparse
+  RUNTIME
+  DESTINATION ${CMAKE_INSTALL_BINDIR}
+  COMPONENT server
+  LIBRARY
+  DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  ARCHIVE
+  DESTINATION ${CMAKE_INSTALL_LIBDIR}
+  PUBLIC_HEADER
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/monetdb
+  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -19,6 +19,7 @@
 #include "rel_statistics.h"
 #include "rel_rewriter.h"
 #include "sql_privileges.h"
+#include "sql_storage.h"
 
 #define USED_LEN(nr) ((nr+31)/32)
 #define rel_base_set_used(b,nr) b->used[(nr)/32] |= (1U<<((nr)%32))
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -19,6 +19,7 @@
 #include "rel_propagate.h"
 #include "rel_statistics.h"
 #include "sql_privileges.h"
+#include "sql_storage.h"
 
 static sql_rel *
 rel_properties(visitor *v, sql_rel *rel)
diff --git a/sql/server/rel_partition.c b/sql/server/rel_partition.c
--- a/sql/server/rel_partition.c
+++ b/sql/server/rel_partition.c
@@ -17,6 +17,7 @@
 #include "rel_prop.h"
 #include "rel_dump.h"
 #include "rel_select.h"
+#include "sql_storage.h"
 
 static lng
 rel_getcount(mvc *sql, sql_rel *rel)
diff --git a/sql/server/rel_planner.c b/sql/server/rel_planner.c
--- a/sql/server/rel_planner.c
+++ b/sql/server/rel_planner.c
@@ -16,6 +16,7 @@
 #include "rel_exp.h"
 #include "rel_prop.h"
 #include "rel_rewriter.h"
+#include "sql_storage.h"
 
 typedef struct memoitem {
        const char *name;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -20,6 +20,7 @@
 #include "rel_exp.h"
 #include "rel_updates.h"
 #include "sql_privileges.h"
+#include "sql_storage.h"
 
 #define psm_zero_or_one(exp) \
        do { \
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -19,6 +19,7 @@
 #include "sql_semantic.h"
 #include "sql_mvc.h"
 #include "rel_rewriter.h"
+#include "sql_storage.h"
 
 void
 rel_set_exps(sql_rel *rel, list *exps)
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -26,6 +26,7 @@
 #include "sql_parser.h"
 #include "sql_privileges.h"
 #include "sql_partition.h"
+#include "sql_storage.h"
 
 #include "mal_authorize.h"
 #include "mal_exception.h"
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
@@ -722,7 +722,7 @@ rel_file_loader(mvc *sql, list *exps, li
 
        if ((f = bind_func_(sql, NULL, "file_loader", tl, F_UNION, true, 
&found, false))) {
                list *nexps = exps;
-               if (list_empty(tl) || f->func->vararg || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1, false))) {
+               if (list_empty(tl) || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1, false))) {
                        list *res_exps = sa_list(sql->sa);
                        if (list_length(exps) == 1 && f && f->func->varres && 
strlen(f->func->mod) == 0 && strlen(f->func->imp) == 0) {
                                char *err = 
file_loader_add_table_column_types(sql, f, nexps, res_exps, tname);
@@ -748,7 +748,7 @@ find_table_function(mvc *sql, char *snam
        assert(type == F_UNION || type == F_LOADER);
        if ((f = bind_func_(sql, sname, fname, tl, type, false, &found, 
false))) {
                list *nexps = exps;
-               if (list_empty(tl) || f->func->vararg || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1, false)))
+               if (list_empty(tl) || (nexps = 
check_arguments_and_find_largest_any_type(sql, NULL, exps, f, 1, false)))
                        return exp_op(sql->sa, nexps, f);
                found = false;
        }
@@ -2177,7 +2177,6 @@ rel_in_value_exp(sql_query *query, sql_r
        if (dl->h->type == type_symbol && dl->h->data.sym->token == SQL_VALUES) 
{
                lo = dl->h->data.sym;
                dn = lo->data.lval->h->data.lval->h;
-               //dn = dl->h->data.lval->h;
                lo = dn->data.sym;
                dn = dn->next;
        } else {
@@ -2239,6 +2238,8 @@ rel_in_value_exp(sql_query *query, sql_r
                                if (r->nrcols != ek.type)
                                        return sql_error(sql, 02, 
SQLSTATE(42000) "Subquery has too %s columns", (r->nrcols < ek.type) ? "few" : 
"many");
                                re = exp_rel_label(sql, re);
+                               if (r && r->l && n->next) /* not a value list */
+                                       return sql_error(sql, 02, 
SQLSTATE(42000) "subquery must return only one column");
                        } else if (exp_is_rel(re)) {
                                sql_rel *r = exp_rel_get_rel(sql->sa, re);
                                add_select = 1;
@@ -3141,7 +3142,7 @@ rel_unop_(mvc *sql, sql_rel *rel, sql_ex
                   ((card == card_relation)?F_UNION:F_FUNC));
 
        sql_subfunc *f = bind_func(sql, sname, fname, t, NULL, 1, type, false, 
&found, false);
-       if (f && !f->func->vararg) {
+       if (f) {
                sql_arg *a = f->func->ops->h->data;
                t = &a->type;
        }
@@ -3158,8 +3159,7 @@ rel_unop_(mvc *sql, sql_rel *rel, sql_ex
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to