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;
|
||||
case '%':
|
||||
if (pos + 1 != end)
|
||||
res += ".*";
|
||||
res += "(?:.|\n)*";
|
||||
else
|
||||
return res;
|
||||
break;
|
||||
|
@ -66,7 +66,7 @@ struct MergeTreeSettings
|
||||
size_t replicated_logs_to_keep = 100;
|
||||
|
||||
/// Настройки минимального количества битых данных, при котором отказываться автоматически их удалять.
|
||||
size_t max_suspicious_broken_parts = 5;
|
||||
size_t max_suspicious_broken_parts = 10;
|
||||
|
||||
/// Максимальное количество ошибок при загрузке кусков, при котором ReplicatedMergeTree соглашается запускаться.
|
||||
size_t replicated_max_unexpected_parts = 3;
|
||||
|
@ -886,8 +886,45 @@ static SharedPtr<InterpreterSelectQuery> interpretSubquery(
|
||||
select_query->children.emplace_back(select_query->table);
|
||||
}
|
||||
else
|
||||
{
|
||||
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())
|
||||
return new InterpreterSelectQuery(query, subquery_context, QueryProcessingStage::Complete, subquery_depth + 1);
|
||||
else
|
||||
|
@ -259,7 +259,7 @@ void ITableDeclaration::check(const Block & block, bool need_all) const
|
||||
const ColumnWithTypeAndName & column = block.getByPosition(i);
|
||||
|
||||
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);
|
||||
|
||||
names_in_block.insert(column.name);
|
||||
|
@ -275,7 +275,14 @@ void StorageBuffer::shutdown()
|
||||
if (flush_thread.joinable())
|
||||
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