add comments

This commit is contained in:
sundy-li 2020-12-13 19:30:53 +08:00
parent d2209a1460
commit 041f5c8843
3 changed files with 33 additions and 5 deletions

View File

@ -14,8 +14,35 @@ class ASTFunction;
class ASTIdentifier;
using DataTypePtr = std::shared_ptr<const IDataType>;
/// Visits AST node to rewrite alias columns in filter query
/// Currently works only in `KeyCondition` of select query and `required_columns` in `InterpreterSelectQuery.cpp`
/// Visits AST node to rewrite alias columns in query
/// Currently works only 3 kind ways below
/// For example:
// CREATE TABLE test_table
// (
// `timestamp` DateTime,
// `value` UInt64,
// `day` Date ALIAS toDate(timestamp),
// `day1` Date ALIAS day + 1,
// `day2` Date ALIAS day1 + 1,
// `time` DateTime ALIAS timestamp
// )ENGINE = MergeTree
// PARTITION BY toYYYYMMDD(timestamp)
// ORDER BY timestamp SETTINGS index_granularity = 1;
/// 1. Rewrite the filters in query when enable optimize_alias_column_prediction
/// this could help with `optimize_trivial_count`, Partition Prune in `KeyCondition` and secondary indexes.
/// eg: select max(value) from test_table where day2 = today(), filters will be: ((toDate(timestamp) + 1) + 1) = today() .
/// 2. Alias on alias for `required_columns` extracted in `InterpreterSelectQuery.cpp`, it could help get all dependent physical columns for query.
/// eg: select day2 from test_table. `required_columns` can got require columns from the tempory rewrited AST `((toDate(timestamp) + 1) + 1)`.
/// 3. Help with `optimize_aggregation_in_order` and `optimize_read_in_order` in `ReadInOrderOptimizer.cpp`:
/// For queries with alias columns in `orderBy` and `groupBy`, these ASTs will not change.
/// But we generate tempory asts and generate tempory Actions to get the `InputOrderInfo`
/// eg: select day1 from test_table order by day1;
class ColumnAliasesMatcher
{
public:

View File

@ -2,12 +2,12 @@
#include <common/types.h>
#include <Parsers/IAST_fwd.h>
#include <Interpreters/Context.h>
namespace DB
{
class Context;
class NamesAndTypesList;
/// It will produce an expression with CAST to get an AST with the required type.
ASTPtr addTypeConversionToAST(ASTPtr && ast, const String & type_name);

View File

@ -139,11 +139,12 @@ InputOrderInfoPtr ReadInOrderOptimizer::getInputOrder(const StorageMetadataPtr &
if (ok)
order_key_prefix_descr.push_back(required_sort_description[i]);
else
break;
}
if (order_key_prefix_descr.empty())
return {};
return std::make_shared<InputOrderInfo>(std::move(order_key_prefix_descr), read_direction);
}