mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-17 20:02:05 +00:00
add Set support for ann_index_params setting
This commit is contained in:
parent
a800e0fdf9
commit
3c601e5785
@ -5,6 +5,8 @@
|
|||||||
#include <Parsers/ASTSelectQuery.h>
|
#include <Parsers/ASTSelectQuery.h>
|
||||||
#include <Parsers/ASTSetQuery.h>
|
#include <Parsers/ASTSetQuery.h>
|
||||||
|
|
||||||
|
#include <Interpreters/Context.h>
|
||||||
|
|
||||||
#include <Storages/MergeTree/CommonANNIndexes.h>
|
#include <Storages/MergeTree/CommonANNIndexes.h>
|
||||||
|
|
||||||
namespace DB
|
namespace DB
|
||||||
@ -29,6 +31,8 @@ ANNCondition::ANNCondition(const SelectQueryInfo & query_info,
|
|||||||
buildRPN(query_info);
|
buildRPN(query_info);
|
||||||
// Match rpns with supported types
|
// Match rpns with supported types
|
||||||
index_is_useful = matchAllRPNS();
|
index_is_useful = matchAllRPNS();
|
||||||
|
// Get from settings ANNIndex parameters
|
||||||
|
ann_index_params = context->getSettings().get("ann_index_params").get<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ANNCondition::alwaysUnknownOrTrue(String metric_name) const
|
bool ANNCondition::alwaysUnknownOrTrue(String metric_name) const
|
||||||
@ -114,11 +118,6 @@ void ANNCondition::buildRPN(const SelectQueryInfo & query)
|
|||||||
traverseAST(select.limitLength(), rpn_limit_clause);
|
traverseAST(select.limitLength(), rpn_limit_clause);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (select.settings()) // If query has SETTINGS section
|
|
||||||
{
|
|
||||||
parseSettings(select.settings());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (select.orderBy()) // If query has ORDERBY section
|
if (select.orderBy()) // If query has ORDERBY section
|
||||||
{
|
{
|
||||||
traverseOrderByAST(select.orderBy(), rpn_order_by_clause);
|
traverseOrderByAST(select.orderBy(), rpn_order_by_clause);
|
||||||
@ -200,7 +199,7 @@ bool ANNCondition::traverseAtomAST(const ASTPtr & node, RPNElement & out)
|
|||||||
|
|
||||||
// Check if we have constants behind the node
|
// Check if we have constants behind the node
|
||||||
return tryCastToConstType(node, out);
|
return tryCastToConstType(node, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ANNCondition::tryCastToConstType(const ASTPtr & node, RPNElement & out)
|
bool ANNCondition::tryCastToConstType(const ASTPtr & node, RPNElement & out)
|
||||||
{
|
{
|
||||||
@ -310,21 +309,6 @@ bool ANNCondition::matchRPNLimit(RPN & rpn, LimitExpression & expr)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ANNCondition::parseSettings(const ASTPtr & node)
|
|
||||||
{
|
|
||||||
if (const auto * set = node->as<ASTSetQuery>())
|
|
||||||
{
|
|
||||||
for (const auto & change : set->changes)
|
|
||||||
{
|
|
||||||
if (change.name == "ann_index_params")
|
|
||||||
{
|
|
||||||
ann_index_params = change.value.get<String>();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ANNCondition::matchRPNOrderBy(RPN & rpn, ANNExpression & expr)
|
bool ANNCondition::matchRPNOrderBy(RPN & rpn, ANNExpression & expr)
|
||||||
{
|
{
|
||||||
// ORDERBY section must have at least 3 expressions
|
// ORDERBY section must have at least 3 expressions
|
||||||
|
@ -165,7 +165,6 @@ private:
|
|||||||
// Traverses the AST of ORDERBY section
|
// Traverses the AST of ORDERBY section
|
||||||
void traverseOrderByAST(const ASTPtr & node, RPN & rpn);
|
void traverseOrderByAST(const ASTPtr & node, RPN & rpn);
|
||||||
|
|
||||||
|
|
||||||
// Checks that at least one rpn is matching for index
|
// Checks that at least one rpn is matching for index
|
||||||
// New RPNs for other query types can be added here
|
// New RPNs for other query types can be added here
|
||||||
bool matchAllRPNS();
|
bool matchAllRPNS();
|
||||||
@ -179,10 +178,6 @@ private:
|
|||||||
// Returns true and stores Length if we have valid LIMIT clause in query
|
// Returns true and stores Length if we have valid LIMIT clause in query
|
||||||
static bool matchRPNLimit(RPN & rpn, LimitExpression & expr);
|
static bool matchRPNLimit(RPN & rpn, LimitExpression & expr);
|
||||||
|
|
||||||
// Parses SETTINGS section, stores the new value for 'ann_index_params'
|
|
||||||
void parseSettings(const ASTPtr & node);
|
|
||||||
|
|
||||||
|
|
||||||
/* Matches dist function, target vector, column name */
|
/* Matches dist function, target vector, column name */
|
||||||
static bool matchMainParts(RPN::iterator & iter, RPN::iterator & end, ANNExpression & expr, bool & identifier_found);
|
static bool matchMainParts(RPN::iterator & iter, RPN::iterator & end, ANNExpression & expr, bool & identifier_found);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user