mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 08:02:02 +00:00
efa638ef3c
Since ClickHouse does not support unquoted utf-8 strings but MySQL does. Instead of fixing Lexer to recognize utf-8 chars as TokenType::BareWord, suggesting to quote all unrecognized tokens before applying any DDL. Actual parsing and validating the syntax will be done by particular Parser. If there is any TokenType::Error, the query is unable to be parsed anyway. Quoting such tokens can provide the support of utf-8 names. See `tryQuoteUnrecognizedTokens` and `QuoteUnrecognizedTokensTest`. mysql> CREATE TABLE 道.渠(... is converted to CREATE TABLE `道`.`渠`(... Also fixed the bug with missing * while doing SELECT in full sync because db or table name are back quoted when not needed.
31 lines
698 B
C++
31 lines
698 B
C++
#pragma once
|
|
|
|
#include <base/types.h>
|
|
#include <base/StringRef.h>
|
|
#include <concepts>
|
|
|
|
|
|
namespace DB
|
|
{
|
|
[[nodiscard]] String quoteString(std::string_view x);
|
|
|
|
// Prefer string_view over StringRef for implicit conversions
|
|
[[nodiscard]] inline String quoteString(std::same_as<StringRef> auto x)
|
|
{
|
|
return quoteString(std::string_view{x.data, x.size});
|
|
}
|
|
|
|
/// Double quote the string.
|
|
String doubleQuoteString(StringRef x);
|
|
|
|
/// Quote the identifier with backquotes.
|
|
String backQuote(StringRef x);
|
|
|
|
/// Quote the identifier with backquotes, if required.
|
|
String backQuoteIfNeed(StringRef x);
|
|
|
|
/// Quote the identifier with backquotes, for use in MySQL queries.
|
|
String backQuoteMySQL(StringRef x);
|
|
|
|
}
|