mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 18:20:50 +00:00
Merge
This commit is contained in:
commit
cb5387405b
@ -180,7 +180,7 @@ inline String likePatternToRegexp(const String & pattern)
|
|||||||
break;
|
break;
|
||||||
case '%':
|
case '%':
|
||||||
if (pos + 1 != end)
|
if (pos + 1 != end)
|
||||||
res += ".*";
|
res += "(?:.|\n)*";
|
||||||
else
|
else
|
||||||
return res;
|
return res;
|
||||||
break;
|
break;
|
||||||
|
@ -66,7 +66,7 @@ struct MergeTreeSettings
|
|||||||
size_t replicated_logs_to_keep = 100;
|
size_t replicated_logs_to_keep = 100;
|
||||||
|
|
||||||
/// Настройки минимального количества битых данных, при котором отказываться автоматически их удалять.
|
/// Настройки минимального количества битых данных, при котором отказываться автоматически их удалять.
|
||||||
size_t max_suspicious_broken_parts = 5;
|
size_t max_suspicious_broken_parts = 10;
|
||||||
|
|
||||||
/// Максимальное количество ошибок при загрузке кусков, при котором ReplicatedMergeTree соглашается запускаться.
|
/// Максимальное количество ошибок при загрузке кусков, при котором ReplicatedMergeTree соглашается запускаться.
|
||||||
size_t replicated_max_unexpected_parts = 3;
|
size_t replicated_max_unexpected_parts = 3;
|
||||||
|
@ -886,8 +886,45 @@ static SharedPtr<InterpreterSelectQuery> interpretSubquery(
|
|||||||
select_query->children.emplace_back(select_query->table);
|
select_query->children.emplace_back(select_query->table);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
query = subquery->children.at(0);
|
query = subquery->children.at(0);
|
||||||
|
|
||||||
|
/** В подзапросе могут быть указаны столбцы с одинаковыми именами. Например, SELECT x, x FROM t
|
||||||
|
* Это плохо, потому что результат такого запроса нельзя сохранить в таблицу, потому что в таблице не может быть одноимённых столбцов.
|
||||||
|
* Сохранение в таблицу требуется для GLOBAL-подзапросов.
|
||||||
|
*
|
||||||
|
* Чтобы избежать такой ситуации, будем переименовывать одинаковые столбцы.
|
||||||
|
*/
|
||||||
|
|
||||||
|
std::set<std::string> all_column_names;
|
||||||
|
std::set<std::string> assigned_column_names;
|
||||||
|
|
||||||
|
if (ASTSelectQuery * select = typeid_cast<ASTSelectQuery *>(query.get()))
|
||||||
|
{
|
||||||
|
for (auto & expr : select->select_expression_list->children)
|
||||||
|
all_column_names.insert(expr->getAliasOrColumnName());
|
||||||
|
|
||||||
|
for (auto & expr : select->select_expression_list->children)
|
||||||
|
{
|
||||||
|
auto name = expr->getAliasOrColumnName();
|
||||||
|
|
||||||
|
if (!assigned_column_names.insert(name).second)
|
||||||
|
{
|
||||||
|
size_t i = 1;
|
||||||
|
while (all_column_names.end() != all_column_names.find(name + "_" + toString(i)))
|
||||||
|
++i;
|
||||||
|
|
||||||
|
name = name + "_" + toString(i);
|
||||||
|
expr = expr->clone(); /// Отменяет склейку одинаковых выражений в дереве.
|
||||||
|
expr->setAlias(name);
|
||||||
|
|
||||||
|
all_column_names.insert(name);
|
||||||
|
assigned_column_names.insert(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (required_columns.empty())
|
if (required_columns.empty())
|
||||||
return new InterpreterSelectQuery(query, subquery_context, QueryProcessingStage::Complete, subquery_depth + 1);
|
return new InterpreterSelectQuery(query, subquery_context, QueryProcessingStage::Complete, subquery_depth + 1);
|
||||||
else
|
else
|
||||||
|
@ -259,7 +259,7 @@ void ITableDeclaration::check(const Block & block, bool need_all) const
|
|||||||
const ColumnWithTypeAndName & column = block.getByPosition(i);
|
const ColumnWithTypeAndName & column = block.getByPosition(i);
|
||||||
|
|
||||||
if (names_in_block.count(column.name))
|
if (names_in_block.count(column.name))
|
||||||
throw Exception("Duplicate column " + column.name + " in block",
|
throw Exception("Duplicate column " + column.name + " in block",
|
||||||
ErrorCodes::DUPLICATE_COLUMN);
|
ErrorCodes::DUPLICATE_COLUMN);
|
||||||
|
|
||||||
names_in_block.insert(column.name);
|
names_in_block.insert(column.name);
|
||||||
|
@ -275,7 +275,14 @@ void StorageBuffer::shutdown()
|
|||||||
if (flush_thread.joinable())
|
if (flush_thread.joinable())
|
||||||
flush_thread.join();
|
flush_thread.join();
|
||||||
|
|
||||||
optimize(context.getSettings());
|
try
|
||||||
|
{
|
||||||
|
optimize(context.getSettings());
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
tryLogCurrentException(__PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
42 1
|
||||||
|
1
|
@ -0,0 +1,2 @@
|
|||||||
|
SELECT k, a FROM (SELECT 42 AS k FROM remote('127.0.0.1', system.one)) GLOBAL ALL FULL OUTER JOIN (SELECT 42 AS k, 1 AS a, a) USING k;
|
||||||
|
SELECT 1 FROM remote('127.0.0.1', system.one) WHERE (1, 1) GLOBAL IN (SELECT 1 AS a, a);
|
@ -0,0 +1,11 @@
|
|||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
0
|
11
dbms/tests/queries/0_stateless/00218_like_regexp_newline.sql
Normal file
11
dbms/tests/queries/0_stateless/00218_like_regexp_newline.sql
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
SELECT 'abcdef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abctdef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\ntdef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abct\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\n\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\n\ntdef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\nt\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abct\n\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'ab\ndef' LIKE '%abc%def%';
|
||||||
|
SELECT 'abc\nef' LIKE '%abc%def%';
|
Loading…
Reference in New Issue
Block a user