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