Small fixes

This commit is contained in:
Pavel Kruglov 2021-04-27 16:12:57 +03:00
parent 400cad4d8b
commit b6061e132a
12 changed files with 21 additions and 71 deletions

View File

@ -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;

View File

@ -5,7 +5,6 @@
#include <IO/WriteHelpers.h>
#include <Functions/IFunction.h>
#include <common/logger_useful.h>
namespace DB
{

View File

@ -158,7 +158,6 @@ private:
size_t size_;
FunctionBasePtr function;
ColumnsWithTypeAndName captured_columns;
bool is_short_circuit_argumentz;
void appendArgument(const ColumnWithTypeAndName & column);
};

View File

@ -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>
@ -71,11 +66,10 @@ ColumnPtr selectIndexImpl(const Column & column, const IColumn & indexes, size_t
else if (auto * data_uint64 = detail::getIndexesData<UInt64>(indexes))
return column.template indexImpl<UInt64>(*data_uint64, limit);
else
throw Exception("Indexes column for IColumn::select must be ColumnUInt, got" + indexes.getName(),
throw Exception("Indexes column for IColumn::select must be ColumnUInt, got " + indexes.getName(),
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; \

View File

@ -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);

View File

@ -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
{
@ -475,7 +474,7 @@ static ColumnPtr basicExecuteImpl(ColumnRawPtrs arguments, size_t input_rows_cou
}
template <typename Impl, typename Name>
DataTypePtr FunctionAnyArityLogical<Impl, Name>::getReturnTypeImpl(const DataTypes & arguments) const
DataTypePtr FunctionAnyArityLogical<Impl, Name>::getReturnTypeImpl(const DataTypes & arguments) const
{
if (arguments.size() < 2)
throw Exception("Number of arguments for function \"" + getName() + "\" should be at least 2: passed "

View File

@ -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"; };

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -388,7 +388,7 @@ namespace
ColumnsWithTypeAndName & inputs;
ColumnsWithTypeAndName columns = {};
std::vector<ssize_t> inputs_pos = {};
size_t num_rows;
size_t num_rows = 0;
};
}

View File

@ -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()