duckdb 0.6.2-dev1025.0 → 0.6.2-dev1030.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +29 -0
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +5 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#ifndef DUCKDB_VERSION
|
|
2
|
-
#define DUCKDB_VERSION "0.6.2-
|
|
2
|
+
#define DUCKDB_VERSION "0.6.2-dev1030"
|
|
3
3
|
#endif
|
|
4
4
|
#ifndef DUCKDB_SOURCE_ID
|
|
5
|
-
#define DUCKDB_SOURCE_ID "
|
|
5
|
+
#define DUCKDB_SOURCE_ID "27846005c0"
|
|
6
6
|
#endif
|
|
7
7
|
#include "duckdb/function/table/system_functions.hpp"
|
|
8
8
|
#include "duckdb/main/database.hpp"
|
|
@@ -47,7 +47,7 @@ public:
|
|
|
47
47
|
// note: original_arguments are optional (can be list of size 0)
|
|
48
48
|
auto original_arguments = reader.ReadRequiredSerializableList<LogicalType, LogicalType>();
|
|
49
49
|
|
|
50
|
-
auto func_catalog = Catalog::GetEntry(context, type,
|
|
50
|
+
auto func_catalog = Catalog::GetEntry(context, type, SYSTEM_CATALOG, DEFAULT_SCHEMA, name);
|
|
51
51
|
if (!func_catalog || func_catalog->type != type) {
|
|
52
52
|
throw InternalException("Cant find catalog entry for function %s", name);
|
|
53
53
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include "duckdb/main/client_context.hpp"
|
|
6
6
|
#include "duckdb/main/database.hpp"
|
|
7
7
|
#include "duckdb/parser/expression/constant_expression.hpp"
|
|
8
|
+
#include "duckdb/parser/expression/function_expression.hpp"
|
|
8
9
|
#include "duckdb/parser/expression/subquery_expression.hpp"
|
|
9
10
|
#include "duckdb/parser/parsed_data/create_index_info.hpp"
|
|
10
11
|
#include "duckdb/parser/parsed_data/create_macro_info.hpp"
|
|
@@ -128,6 +129,33 @@ void Binder::BindCreateViewInfo(CreateViewInfo &base) {
|
|
|
128
129
|
base.types = query_node.types;
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
static void QualifyFunctionNames(ClientContext &context, unique_ptr<ParsedExpression> &expr) {
|
|
133
|
+
switch (expr->GetExpressionClass()) {
|
|
134
|
+
case ExpressionClass::FUNCTION: {
|
|
135
|
+
auto &func = (FunctionExpression &)*expr;
|
|
136
|
+
auto function = (StandardEntry *)Catalog::GetEntry(context, CatalogType::SCALAR_FUNCTION_ENTRY, func.catalog,
|
|
137
|
+
func.schema, func.function_name, true);
|
|
138
|
+
if (function) {
|
|
139
|
+
func.catalog = function->catalog->GetName();
|
|
140
|
+
func.schema = function->schema->name;
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case ExpressionClass::SUBQUERY: {
|
|
145
|
+
// replacing parameters within a subquery is slightly different
|
|
146
|
+
auto &sq = ((SubqueryExpression &)*expr).subquery;
|
|
147
|
+
ParsedExpressionIterator::EnumerateQueryNodeChildren(
|
|
148
|
+
*sq->node, [&](unique_ptr<ParsedExpression> &child) { QualifyFunctionNames(context, child); });
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
default: // fall through
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
// unfold child expressions
|
|
155
|
+
ParsedExpressionIterator::EnumerateChildren(
|
|
156
|
+
*expr, [&](unique_ptr<ParsedExpression> &child) { QualifyFunctionNames(context, child); });
|
|
157
|
+
}
|
|
158
|
+
|
|
131
159
|
SchemaCatalogEntry *Binder::BindCreateFunctionInfo(CreateInfo &info) {
|
|
132
160
|
auto &base = (CreateMacroInfo &)info;
|
|
133
161
|
auto &scalar_function = (ScalarMacroFunction &)*base.function;
|
|
@@ -157,6 +185,7 @@ SchemaCatalogEntry *Binder::BindCreateFunctionInfo(CreateInfo &info) {
|
|
|
157
185
|
auto this_macro_binding = make_unique<DummyBinding>(dummy_types, dummy_names, base.name);
|
|
158
186
|
macro_binding = this_macro_binding.get();
|
|
159
187
|
ExpressionBinder::QualifyColumnNames(*this, scalar_function.expression);
|
|
188
|
+
QualifyFunctionNames(context, scalar_function.expression);
|
|
160
189
|
|
|
161
190
|
// create a copy of the expression because we do not want to alter the original
|
|
162
191
|
auto expression = scalar_function.expression->Copy();
|
|
@@ -92,6 +92,11 @@ BindResult SelectBinder::BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, i
|
|
|
92
92
|
"effects. This is not yet supported.",
|
|
93
93
|
colref.column_names[0]);
|
|
94
94
|
}
|
|
95
|
+
if (node.select_list[index]->HasSubquery()) {
|
|
96
|
+
throw BinderException("Alias \"%s\" referenced in a SELECT clause - but the expression has a subquery."
|
|
97
|
+
" This is not yet supported.",
|
|
98
|
+
colref.column_names[0]);
|
|
99
|
+
}
|
|
95
100
|
auto result = BindResult(node.select_list[index]->Copy());
|
|
96
101
|
if (result.expression->type == ExpressionType::BOUND_COLUMN_REF) {
|
|
97
102
|
auto &result_expr = (BoundColumnRefExpression &)*result.expression;
|