mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-25 19:20:52 +00:00
Small fixes
This commit is contained in:
parent
400cad4d8b
commit
b6061e132a
@ -70,7 +70,7 @@ public:
|
||||
void insertFrom(const IColumn & src_, size_t n) override;
|
||||
void insertDefault() override;
|
||||
void popBack(size_t n) override;
|
||||
ColumnPtr filter(const Filter & filt, ssize_t result_size_hint, bool revers) const override;
|
||||
ColumnPtr filter(const Filter & filt, ssize_t result_size_hint, bool reverse) const override;
|
||||
void expand(const Filter & mask, bool reverse) override;
|
||||
ColumnPtr permute(const Permutation & perm, size_t limit) const override;
|
||||
ColumnPtr index(const IColumn & indexes, size_t limit) const override;
|
||||
@ -174,12 +174,12 @@ private:
|
||||
|
||||
/// Specializations for the filter function.
|
||||
template <typename T>
|
||||
ColumnPtr filterNumber(const Filter & filt, ssize_t result_size_hint, bool reverse = false) const;
|
||||
ColumnPtr filterNumber(const Filter & filt, ssize_t result_size_hint, bool reverse) const;
|
||||
|
||||
ColumnPtr filterString(const Filter & filt, ssize_t result_size_hint, bool reverse = false) const;
|
||||
ColumnPtr filterTuple(const Filter & filt, ssize_t result_size_hint, bool reverse = false) const;
|
||||
ColumnPtr filterNullable(const Filter & filt, ssize_t result_size_hint, bool reverse = false) const;
|
||||
ColumnPtr filterGeneric(const Filter & filt, ssize_t result_size_hint, bool reverse = false) const;
|
||||
ColumnPtr filterString(const Filter & filt, ssize_t result_size_hint, bool reverse) const;
|
||||
ColumnPtr filterTuple(const Filter & filt, ssize_t result_size_hint, bool reverse) const;
|
||||
ColumnPtr filterNullable(const Filter & filt, ssize_t result_size_hint, bool reverse) const;
|
||||
ColumnPtr filterGeneric(const Filter & filt, ssize_t result_size_hint, bool reverse) const;
|
||||
|
||||
int compareAtImpl(size_t n, size_t m, const IColumn & rhs_, int nan_direction_hint, const Collator * collator=nullptr) const;
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include <IO/WriteHelpers.h>
|
||||
#include <Functions/IFunction.h>
|
||||
|
||||
#include <common/logger_useful.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
@ -158,7 +158,6 @@ private:
|
||||
size_t size_;
|
||||
FunctionBasePtr function;
|
||||
ColumnsWithTypeAndName captured_columns;
|
||||
bool is_short_circuit_argumentz;
|
||||
|
||||
void appendArgument(const ColumnWithTypeAndName & column);
|
||||
};
|
||||
|
@ -32,7 +32,7 @@ template <typename T>
|
||||
void filterArraysImpl(
|
||||
const PaddedPODArray<T> & src_elems, const IColumn::Offsets & src_offsets,
|
||||
PaddedPODArray<T> & res_elems, IColumn::Offsets & res_offsets,
|
||||
const IColumn::Filter & filt, ssize_t result_size_hint, bool reverse = false);
|
||||
const IColumn::Filter & filt, ssize_t result_size_hint, bool reverse);
|
||||
|
||||
/// Same as above, but not fills res_offsets.
|
||||
template <typename T>
|
||||
@ -41,11 +41,6 @@ void filterArraysImplOnlyData(
|
||||
PaddedPODArray<T> & res_elems,
|
||||
const IColumn::Filter & filt, ssize_t result_size_hint, bool reverse = false);
|
||||
|
||||
template <typename Container, typename T>
|
||||
void expandDataByMask(Container & data, const PaddedPODArray<UInt8> & mask, bool reverse, T default_value);
|
||||
|
||||
void expandOffsetsByMask(PaddedPODArray<UInt64> & offsets, const PaddedPODArray<UInt8> & mask, bool reverse);
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
@ -75,7 +70,6 @@ ColumnPtr selectIndexImpl(const Column & column, const IColumn & indexes, size_t
|
||||
ErrorCodes::LOGICAL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
#define INSTANTIATE_INDEX_IMPL(Column) \
|
||||
template ColumnPtr Column::indexImpl<UInt8>(const PaddedPODArray<UInt8> & indexes, size_t limit) const; \
|
||||
template ColumnPtr Column::indexImpl<UInt16>(const PaddedPODArray<UInt16> & indexes, size_t limit) const; \
|
||||
|
@ -21,10 +21,6 @@ void disjunctionMasks(PaddedPODArray<UInt8> & mask1, const PaddedPODArray<UInt8>
|
||||
|
||||
void maskedExecute(ColumnWithTypeAndName & column, const PaddedPODArray<UInt8> & mask, bool reverse = false, const UInt8 * default_value_for_expanding_mask = nullptr);
|
||||
|
||||
void expandColumnByMask(const ColumnPtr & column, const PaddedPODArray<UInt8>& mask, bool reverse);
|
||||
|
||||
void expandMaskColumnByMask(const ColumnPtr & column, const PaddedPODArray<UInt8>& mask, bool reverse, UInt8 default_value = 0);
|
||||
|
||||
void executeColumnIfNeeded(ColumnWithTypeAndName & column);
|
||||
|
||||
bool checkArgumentsForColumnFunction(const ColumnsWithTypeAndName & arguments);
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <Columns/ColumnConst.h>
|
||||
#include <Columns/ColumnNullable.h>
|
||||
#include <Common/FieldVisitorConvertToNumber.h>
|
||||
#include <Columns/MaskOperations.h>
|
||||
#include <Common/typeid_cast.h>
|
||||
#include <DataTypes/DataTypeNullable.h>
|
||||
#include <DataTypes/DataTypesNumber.h>
|
||||
@ -14,8 +15,6 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <Columns/MaskOperations.h>
|
||||
#include <common/logger_useful.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
@ -30,8 +30,8 @@
|
||||
*/
|
||||
|
||||
namespace DB
|
||||
|
||||
{
|
||||
|
||||
struct NameAnd { static constexpr auto name = "and"; };
|
||||
struct NameOr { static constexpr auto name = "or"; };
|
||||
struct NameXor { static constexpr auto name = "xor"; };
|
||||
|
@ -1,6 +1,5 @@
|
||||
#include <Interpreters/ActionsDAG.h>
|
||||
|
||||
#include <Columns/ColumnFunction.h>
|
||||
#include <DataTypes/DataTypeArray.h>
|
||||
#include <DataTypes/DataTypeString.h>
|
||||
#include <Functions/IFunction.h>
|
||||
@ -174,8 +173,7 @@ const ActionsDAG::Node & ActionsDAG::addArrayJoin(const Node & child, std::strin
|
||||
const ActionsDAG::Node & ActionsDAG::addFunction(
|
||||
const FunctionOverloadResolverPtr & function,
|
||||
NodeRawConstPtrs children,
|
||||
std::string result_name,
|
||||
bool use_short_circuit_function_evaluation)
|
||||
std::string result_name)
|
||||
{
|
||||
size_t num_arguments = children.size();
|
||||
|
||||
@ -250,36 +248,9 @@ const ActionsDAG::Node & ActionsDAG::addFunction(
|
||||
|
||||
node.result_name = std::move(result_name);
|
||||
|
||||
if (node.function_base->isShortCircuit() && use_short_circuit_function_evaluation)
|
||||
rewriteShortCircuitArguments(node.children, 1);
|
||||
|
||||
return addNode(std::move(node));
|
||||
}
|
||||
|
||||
void ActionsDAG::rewriteShortCircuitArguments(const NodeRawConstPtrs & children, size_t start)
|
||||
{
|
||||
for (size_t i = start; i < children.size(); ++i)
|
||||
{
|
||||
switch (children[i]->type)
|
||||
{
|
||||
case ActionType::FUNCTION:
|
||||
{
|
||||
Node * node = const_cast<Node *>(children[i]);
|
||||
node->type = ActionType::COLUMN_FUNCTION;
|
||||
rewriteShortCircuitArguments(node->children);
|
||||
break;
|
||||
}
|
||||
case ActionType::ALIAS:
|
||||
{
|
||||
rewriteShortCircuitArguments(children[i]->children);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const ActionsDAG::Node & ActionsDAG::findInIndex(const std::string & name) const
|
||||
{
|
||||
if (const auto * node = tryFindInIndex(name))
|
||||
@ -963,10 +934,6 @@ std::string ActionsDAG::dumpDAG() const
|
||||
case ActionsDAG::ActionType::INPUT:
|
||||
out << "INPUT ";
|
||||
break;
|
||||
|
||||
case ActionsDAG::ActionType::COLUMN_FUNCTION:
|
||||
out << "COLUMN FUNCTION";
|
||||
break;
|
||||
}
|
||||
|
||||
out << "(";
|
||||
@ -1578,9 +1545,6 @@ ActionsDAG::SplitResult ActionsDAG::splitActionsForFilter(const std::string & co
|
||||
"Index for ActionsDAG does not contain filter column name {}. DAG:\n{}",
|
||||
column_name, dumpDAG());
|
||||
|
||||
if (node->type == ActionType::COLUMN_FUNCTION)
|
||||
const_cast<Node *>(node)->type = ActionType::FUNCTION;
|
||||
|
||||
std::unordered_set<const Node *> split_nodes = {node};
|
||||
auto res = split(split_nodes);
|
||||
res.second->project_input = project_input;
|
||||
|
@ -59,7 +59,6 @@ public:
|
||||
/// Function arrayJoin. Specially separated because it changes the number of rows.
|
||||
ARRAY_JOIN,
|
||||
FUNCTION,
|
||||
COLUMN_FUNCTION,
|
||||
};
|
||||
|
||||
static const char * typeToString(ActionType type);
|
||||
@ -92,6 +91,8 @@ public:
|
||||
ColumnPtr column;
|
||||
|
||||
void toTree(JSONBuilder::JSONMap & map) const;
|
||||
|
||||
bool is_lazy_executed = false;
|
||||
};
|
||||
|
||||
/// NOTE: std::list is an implementation detail.
|
||||
@ -136,8 +137,7 @@ public:
|
||||
const Node & addFunction(
|
||||
const FunctionOverloadResolverPtr & function,
|
||||
NodeRawConstPtrs children,
|
||||
std::string result_name,
|
||||
bool use_short_circuit_function_evaluation = false);
|
||||
std::string result_name);
|
||||
|
||||
/// Index can contain any column returned from DAG.
|
||||
/// You may manually change it if needed.
|
||||
@ -277,8 +277,6 @@ private:
|
||||
|
||||
void removeUnusedActions(bool allow_remove_inputs = true);
|
||||
|
||||
void rewriteShortCircuitArguments(const NodeRawConstPtrs & children, size_t start = 0);
|
||||
|
||||
#if USE_EMBEDDED_COMPILER
|
||||
void compileFunctions(size_t min_count_to_compile_expression);
|
||||
#endif
|
||||
|
@ -566,8 +566,8 @@ void ScopeStack::addFunction(
|
||||
children.reserve(argument_names.size());
|
||||
for (const auto & argument : argument_names)
|
||||
children.push_back(&stack[level].index->getNode(argument));
|
||||
const auto & node = stack[level].actions_dag->addFunction(
|
||||
function, std::move(children), std::move(result_name), getContext()->getSettingsRef().use_short_circuit_function_evaluation);
|
||||
|
||||
const auto & node = stack[level].actions_dag->addFunction(function, std::move(children), std::move(result_name));
|
||||
stack[level].index->addNode(&node);
|
||||
|
||||
for (size_t j = level + 1; j < stack.size(); ++j)
|
||||
|
@ -388,7 +388,7 @@ namespace
|
||||
ColumnsWithTypeAndName & inputs;
|
||||
ColumnsWithTypeAndName columns = {};
|
||||
std::vector<ssize_t> inputs_pos = {};
|
||||
size_t num_rows;
|
||||
size_t num_rows = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ bool allowEarlyConstantFolding(const ActionsDAG & actions, const Settings & sett
|
||||
|
||||
for (const auto & node : actions.getNodes())
|
||||
{
|
||||
if ((node.type == ActionsDAG::ActionType::FUNCTION) && node.function_base)
|
||||
if (node.type == ActionsDAG::ActionType::FUNCTION && node.function_base)
|
||||
{
|
||||
if (!node.function_base->isSuitableForConstantFolding())
|
||||
return false;
|
||||
@ -1578,7 +1578,8 @@ ExpressionAnalysisResult::ExpressionAnalysisResult(
|
||||
|
||||
optimize_read_in_order =
|
||||
settings.optimize_read_in_order
|
||||
&& storage && query.orderBy()
|
||||
&& storage
|
||||
&& query.orderBy()
|
||||
&& !query_analyzer.hasAggregation()
|
||||
&& !query_analyzer.hasWindow()
|
||||
&& !query.final()
|
||||
|
Loading…
Reference in New Issue
Block a user