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