mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Some fixups
This commit is contained in:
parent
20cfe91ff9
commit
f21dd37d18
@ -429,7 +429,7 @@ SELECT format('{} {}', 'Hello', 'World')
|
||||
|
||||
## concat
|
||||
|
||||
Concatenates the strings listed in the arguments without separator.
|
||||
Concatenates the given arguments.
|
||||
|
||||
**Syntax**
|
||||
|
||||
@ -439,7 +439,9 @@ concat(s1, s2, ...)
|
||||
|
||||
**Arguments**
|
||||
|
||||
Values of arbitrary types. If an argument is not a String or FixedString, it is converted to the String type using the default serialization.
|
||||
At least two values of arbitrary type.
|
||||
|
||||
Arguments which are not of types [String](../../sql-reference/data-types/string.md) or [FixedString](../../sql-reference/data-types/fixedstring.md) are converted to strings using their default serialization. As this decreases performance, it is not recommended to use non-String/FixedString arguments.
|
||||
|
||||
**Returned values**
|
||||
|
||||
@ -449,6 +451,8 @@ If any of arguments is `NULL`, the function returns `NULL`.
|
||||
|
||||
**Example**
|
||||
|
||||
Query:
|
||||
|
||||
``` sql
|
||||
SELECT concat('Hello, ', 'World!');
|
||||
```
|
||||
@ -461,7 +465,7 @@ Result:
|
||||
└─────────────────────────────┘
|
||||
```
|
||||
|
||||
**Example**
|
||||
Query:
|
||||
|
||||
```sql
|
||||
SELECT concat(42, 144);
|
||||
@ -540,6 +544,8 @@ Concatenates the given strings with a given separator.
|
||||
concatWithSeparator(sep, expr1, expr2, expr3...)
|
||||
```
|
||||
|
||||
Alias: `concat_ws`
|
||||
|
||||
**Arguments**
|
||||
|
||||
- sep — separator. Const [String](../../sql-reference/data-types/string.md) or [FixedString](../../sql-reference/data-types/fixedstring.md).
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
return buffer;
|
||||
}
|
||||
|
||||
inline void rowWritten()
|
||||
void rowWritten()
|
||||
{
|
||||
if constexpr (std::is_same_v<ColumnType, ColumnFixedString>)
|
||||
{
|
||||
|
@ -91,7 +91,6 @@ private:
|
||||
else
|
||||
{
|
||||
/// Fallback: use generic implementation for not very important cases.
|
||||
/// Concat of arbitrary types also goes here.
|
||||
return executeFormatImpl(arguments, input_rows_count);
|
||||
}
|
||||
|
||||
@ -108,7 +107,7 @@ private:
|
||||
std::vector<const ColumnString::Offsets *> offsets(num_arguments);
|
||||
std::vector<size_t> fixed_string_sizes(num_arguments);
|
||||
std::vector<std::optional<String>> constant_strings(num_arguments);
|
||||
std::vector<ColumnPtr> converted_col_ptrs(num_arguments);
|
||||
std::vector<ColumnString::MutablePtr> converted_col_ptrs(num_arguments);
|
||||
bool has_column_string = false;
|
||||
bool has_column_fixed_string = false;
|
||||
for (size_t i = 0; i < num_arguments; ++i)
|
||||
@ -132,14 +131,13 @@ private:
|
||||
}
|
||||
else
|
||||
{
|
||||
// An arbitrary type argument: converting it to a StringColumn first
|
||||
/// A non-String/non-FixedString-type argument: use the default serialization to convert it to String
|
||||
const auto full_column = column->convertToFullIfNeeded();
|
||||
const auto serialization = arguments[i].type->getDefaultSerialization();
|
||||
ColumnString::MutablePtr converted_col_str = ColumnString::create();
|
||||
static FormatSettings format_settings;
|
||||
|
||||
auto converted_col_str = ColumnString::create();
|
||||
ColumnStringHelpers::WriteHelper write_helper(*converted_col_str, column->size());
|
||||
auto & write_buffer = write_helper.getWriteBuffer();
|
||||
FormatSettings format_settings;
|
||||
for (size_t j = 0; j < column->size(); ++j)
|
||||
{
|
||||
serialization->serializeText(*full_column, j, write_buffer, format_settings);
|
||||
@ -147,12 +145,12 @@ private:
|
||||
}
|
||||
write_helper.finalize();
|
||||
|
||||
// Same as the normal `ColumnString` branch
|
||||
/// Same as the normal `ColumnString` branch
|
||||
has_column_string = true;
|
||||
data[i] = &converted_col_str->getChars();
|
||||
offsets[i] = &converted_col_str->getOffsets();
|
||||
|
||||
// keep the refcounted-pointer around (to be able to use data/offsets later)
|
||||
/// Keep the refcounted-pointer alive
|
||||
converted_col_ptrs[i] = std::move(converted_col_str);
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include <Columns/ColumnString.h>
|
||||
#include <Common/format.h>
|
||||
#include <Common/memcpySmall.h>
|
||||
#include <base/types.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <Columns/ColumnString.h>
|
||||
#include <base/types.h>
|
||||
#include <Common/format.h>
|
||||
#include <Common/memcpySmall.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
@ -5,7 +5,7 @@
|
||||
-- Tests the output of SHOW COLUMNS when called through the ClickHouse protocol.
|
||||
|
||||
-- -----------------------------------------------------------------------------------
|
||||
-- Please keep this test in-sync with 02775_show_columns_called_from_mysql.expect
|
||||
-- Please keep this test in-sync with 02775_show_columns_called_from_clickhouse.expect
|
||||
-- -----------------------------------------------------------------------------------
|
||||
|
||||
DROP TABLE IF EXISTS tab;
|
||||
|
@ -6,7 +6,7 @@
|
||||
# Tests the output of SHOW COLUMNS when called through the MySQL protocol.
|
||||
|
||||
# -----------------------------------------------------------------------------------
|
||||
# Please keep this test in-sync with 02775_show_columns_called_through_clickhouse.sql
|
||||
# Please keep this test in-sync with 02775_show_columns_called_from_clickhouse.sql
|
||||
# -----------------------------------------------------------------------------------
|
||||
|
||||
set basedir [file dirname $argv0]
|
||||
|
Loading…
Reference in New Issue
Block a user