Skip to content

Commit

Permalink
chore: Update vendored sources to duckdb/duckdb@8a34c96
Browse files Browse the repository at this point in the history
Merge pull request duckdb/duckdb#12238 from hawkfish/asof-pushdown
Merge pull request duckdb/duckdb#12236 from carlopi/macosmin12
Merge pull request duckdb/duckdb#12229 from carlopi/cleanup_workflows
Merge pull request duckdb/duckdb#12224 from Tishj/python_disable_replacement_scan
Merge pull request duckdb/duckdb#12106 from Tishj/generic_new_micro_benchmark_check
Merge pull request duckdb/duckdb#12208 from Tishj/python_fix_replacement_scan_hiding
  • Loading branch information
krlmlr committed Jun 5, 2024
1 parent 9dccd81 commit 2a1218c
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 26 deletions.
6 changes: 3 additions & 3 deletions src/duckdb/src/function/table/version/pragma_version.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef DUCKDB_PATCH_VERSION
#define DUCKDB_PATCH_VERSION "4-dev20"
#define DUCKDB_PATCH_VERSION "4-dev39"
#endif
#ifndef DUCKDB_MINOR_VERSION
#define DUCKDB_MINOR_VERSION 10
Expand All @@ -8,10 +8,10 @@
#define DUCKDB_MAJOR_VERSION 0
#endif
#ifndef DUCKDB_VERSION
#define DUCKDB_VERSION "v0.10.4-dev20"
#define DUCKDB_VERSION "v0.10.4-dev39"
#endif
#ifndef DUCKDB_SOURCE_ID
#define DUCKDB_SOURCE_ID "caef2cd0c7"
#define DUCKDB_SOURCE_ID "8a34c96138"
#endif
#include "duckdb/function/table/system_functions.hpp"
#include "duckdb/main/database.hpp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,16 @@ class LogicalComparisonJoin : public LogicalJoin {
vector<JoinCondition> conditions,
vector<unique_ptr<Expression>> arbitrary_expressions);

static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child, unique_ptr<Expression> condition,
vector<JoinCondition> &conditions,
static void ExtractJoinConditions(ClientContext &context, JoinType type, JoinRefType ref_type,
unique_ptr<LogicalOperator> &left_child, unique_ptr<LogicalOperator> &right_child,
unique_ptr<Expression> condition, vector<JoinCondition> &conditions,
vector<unique_ptr<Expression>> &arbitrary_expressions);
static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child,
static void ExtractJoinConditions(ClientContext &context, JoinType type, JoinRefType ref_type,
unique_ptr<LogicalOperator> &left_child, unique_ptr<LogicalOperator> &right_child,
vector<unique_ptr<Expression>> &expressions, vector<JoinCondition> &conditions,
vector<unique_ptr<Expression>> &arbitrary_expressions);
static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child,
static void ExtractJoinConditions(ClientContext &context, JoinType type, JoinRefType ref_type,
unique_ptr<LogicalOperator> &left_child, unique_ptr<LogicalOperator> &right_child,
const unordered_set<idx_t> &left_bindings,
const unordered_set<idx_t> &right_bindings,
vector<unique_ptr<Expression>> &expressions, vector<JoinCondition> &conditions,
Expand Down
6 changes: 3 additions & 3 deletions src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ unique_ptr<LogicalOperator> FilterPushdown::PushdownCrossProduct(unique_ptr<Logi
vector<JoinCondition> conditions;
vector<unique_ptr<Expression>> arbitrary_expressions;
const auto join_type = JoinType::INNER;
LogicalComparisonJoin::ExtractJoinConditions(GetContext(), join_type, op->children[0], op->children[1],
left_bindings, right_bindings, join_expressions, conditions,
arbitrary_expressions);
LogicalComparisonJoin::ExtractJoinConditions(GetContext(), join_type, join_ref_type, op->children[0],
op->children[1], left_bindings, right_bindings, join_expressions,
conditions, arbitrary_expressions);
// create the join from the join conditions
return LogicalComparisonJoin::CreateJoin(GetContext(), join_type, join_ref_type, std::move(op->children[0]),
std::move(op->children[1]), std::move(conditions),
Expand Down
4 changes: 2 additions & 2 deletions src/duckdb/src/planner/binder/query_node/plan_subquery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -417,8 +417,8 @@ unique_ptr<LogicalOperator> Binder::PlanLateralJoin(unique_ptr<LogicalOperator>
vector<unique_ptr<Expression>> arbitrary_expressions;
if (condition) {
// extract join conditions, if there are any
LogicalComparisonJoin::ExtractJoinConditions(context, join_type, left, right, std::move(condition), conditions,
arbitrary_expressions);
LogicalComparisonJoin::ExtractJoinConditions(context, join_type, JoinRefType::REGULAR, left, right,
std::move(condition), conditions, arbitrary_expressions);
}

auto perform_delim = PerformDuplicateElimination(*this, correlated);
Expand Down
40 changes: 29 additions & 11 deletions src/duckdb/src/planner/binder/tableref/plan_joinref.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,26 @@

namespace duckdb {

//! Only use conditions that are valid for the join ref type
static bool IsJoinTypeCondition(const JoinRefType ref_type, const ExpressionType expr_type) {
switch (ref_type) {
case JoinRefType::ASOF:
switch (expr_type) {
case ExpressionType::COMPARE_EQUAL:
case ExpressionType::COMPARE_NOT_DISTINCT_FROM:
case ExpressionType::COMPARE_GREATERTHANOREQUALTO:
case ExpressionType::COMPARE_GREATERTHAN:
case ExpressionType::COMPARE_LESSTHANOREQUALTO:
case ExpressionType::COMPARE_LESSTHAN:
return true;
default:
return false;
}
default:
return true;
}
}

//! Create a JoinCondition from a comparison
static bool CreateJoinCondition(Expression &expr, const unordered_set<idx_t> &left_bindings,
const unordered_set<idx_t> &right_bindings, vector<JoinCondition> &conditions) {
Expand Down Expand Up @@ -47,7 +67,7 @@ static bool CreateJoinCondition(Expression &expr, const unordered_set<idx_t> &le
}

void LogicalComparisonJoin::ExtractJoinConditions(
ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
ClientContext &context, JoinType type, JoinRefType ref_type, unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child, const unordered_set<idx_t> &left_bindings,
const unordered_set<idx_t> &right_bindings, vector<unique_ptr<Expression>> &expressions,
vector<JoinCondition> &conditions, vector<unique_ptr<Expression>> &arbitrary_expressions) {
Expand Down Expand Up @@ -90,7 +110,8 @@ void LogicalComparisonJoin::ExtractJoinConditions(

{
// comparison, check if we can create a comparison JoinCondition
if (CreateJoinCondition(*expr, left_bindings, right_bindings, conditions)) {
if (IsJoinTypeCondition(ref_type, expr->type) &&
CreateJoinCondition(*expr, left_bindings, right_bindings, conditions)) {
// successfully created the join condition
continue;
}
Expand All @@ -99,7 +120,7 @@ void LogicalComparisonJoin::ExtractJoinConditions(
}
}

void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinType type,
void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinType type, JoinRefType ref_type,
unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child,
vector<unique_ptr<Expression>> &expressions,
Expand All @@ -108,11 +129,11 @@ void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinTy
unordered_set<idx_t> left_bindings, right_bindings;
LogicalJoin::GetTableReferences(*left_child, left_bindings);
LogicalJoin::GetTableReferences(*right_child, right_bindings);
return ExtractJoinConditions(context, type, left_child, right_child, left_bindings, right_bindings, expressions,
conditions, arbitrary_expressions);
return ExtractJoinConditions(context, type, ref_type, left_child, right_child, left_bindings, right_bindings,
expressions, conditions, arbitrary_expressions);
}

void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinType type,
void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinType type, JoinRefType ref_type,
unique_ptr<LogicalOperator> &left_child,
unique_ptr<LogicalOperator> &right_child,
unique_ptr<Expression> condition, vector<JoinCondition> &conditions,
Expand All @@ -121,7 +142,7 @@ void LogicalComparisonJoin::ExtractJoinConditions(ClientContext &context, JoinTy
vector<unique_ptr<Expression>> expressions;
expressions.push_back(std::move(condition));
LogicalFilter::SplitPredicates(expressions);
return ExtractJoinConditions(context, type, left_child, right_child, expressions, conditions,
return ExtractJoinConditions(context, type, ref_type, left_child, right_child, expressions, conditions,
arbitrary_expressions);
}

Expand All @@ -135,9 +156,6 @@ unique_ptr<LogicalOperator> LogicalComparisonJoin::CreateJoin(ClientContext &con
bool need_to_consider_arbitrary_expressions = true;
switch (reftype) {
case JoinRefType::ASOF: {
if (!arbitrary_expressions.empty()) {
throw BinderException("Invalid ASOF JOIN condition");
}
need_to_consider_arbitrary_expressions = false;
auto asof_idx = conditions.size();
for (size_t c = 0; c < conditions.size(); ++c) {
Expand Down Expand Up @@ -249,7 +267,7 @@ unique_ptr<LogicalOperator> LogicalComparisonJoin::CreateJoin(ClientContext &con
unique_ptr<Expression> condition) {
vector<JoinCondition> conditions;
vector<unique_ptr<Expression>> arbitrary_expressions;
LogicalComparisonJoin::ExtractJoinConditions(context, type, left_child, right_child, std::move(condition),
LogicalComparisonJoin::ExtractJoinConditions(context, type, reftype, left_child, right_child, std::move(condition),
conditions, arbitrary_expressions);
return LogicalComparisonJoin::CreateJoin(context, type, reftype, std::move(left_child), std::move(right_child),
std::move(conditions), std::move(arbitrary_expressions));
Expand Down

0 comments on commit 2a1218c

Please sign in to comment.