From 3afffaf30338e458e80b3cce569a1cd2730a3ed9 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Thu, 25 Jun 2020 23:39:33 +0800 Subject: [PATCH] ISSUES-4006 rename sign and version column --- src/Databases/MySQL/queryConvert.cpp | 4 +-- src/Parsers/MySQL/tryParseMySQLQuery.cpp | 37 ++++++++++++++++++++++++ src/Parsers/MySQL/tryParseMySQLQuery.h | 24 +++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/Parsers/MySQL/tryParseMySQLQuery.cpp create mode 100644 src/Parsers/MySQL/tryParseMySQLQuery.h diff --git a/src/Databases/MySQL/queryConvert.cpp b/src/Databases/MySQL/queryConvert.cpp index cc157f47111..7e062413523 100644 --- a/src/Databases/MySQL/queryConvert.cpp +++ b/src/Databases/MySQL/queryConvert.cpp @@ -142,8 +142,8 @@ String toCreateQuery(const MySQLTableStruct & table_struct, const Context & cont + " cannot be materialized, because there is no primary keys.", ErrorCodes::NOT_IMPLEMENTED); WriteBufferFromOwnString out; - String sign = getUniqueColumnName(table_struct.columns_name_and_type, "__sign"); - String version = getUniqueColumnName(table_struct.columns_name_and_type, "__version"); + String sign = getUniqueColumnName(table_struct.columns_name_and_type, "_sign"); + String version = getUniqueColumnName(table_struct.columns_name_and_type, "_version"); out << "CREATE TABLE " << (table_struct.if_not_exists ? "IF NOT EXISTS" : "") << backQuoteIfNeed(table_struct.database_name) + "." << backQuoteIfNeed(table_struct.table_name) << "(" << queryToString(InterpreterCreateQuery::formatColumns(table_struct.columns_name_and_type)) diff --git a/src/Parsers/MySQL/tryParseMySQLQuery.cpp b/src/Parsers/MySQL/tryParseMySQLQuery.cpp new file mode 100644 index 00000000000..27aeefdbb1e --- /dev/null +++ b/src/Parsers/MySQL/tryParseMySQLQuery.cpp @@ -0,0 +1,37 @@ +#include + +#include +#include +#include + +#include + +namespace DB +{ + +namespace MySQLParser +{ + +bool ParserQuery::parseImpl(IParser::Pos & pos, ASTPtr & node, Expected & expected) +{ + ParserDropQuery p_drop_query; + ParserRenameQuery p_rename_query; + ParserCreateQuery p_create_query; + /// TODO: alter table + + return p_create_query.parse(pos, node, expected) || p_drop_query.parse(pos, node, expected) + || p_rename_query.parse(pos, node, expected); +} + +} + +ASTPtr tryParseMySQLQuery(const std::string & query, size_t max_query_size, size_t max_parser_depth) +{ + std::string error_message; + const char * pos = query.data(); + MySQLParser::ParserQuery p_query; + return tryParseQuery(p_query, pos, query.data() + query.size(), error_message, false, "", false, max_query_size, max_parser_depth); +} + +} + diff --git a/src/Parsers/MySQL/tryParseMySQLQuery.h b/src/Parsers/MySQL/tryParseMySQLQuery.h new file mode 100644 index 00000000000..217a30553ff --- /dev/null +++ b/src/Parsers/MySQL/tryParseMySQLQuery.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include + +namespace DB +{ + +namespace MySQLParser +{ + +class ParserQuery : public IParserBase +{ +protected: + const char * getName() const override { return "MySQL Query"; } + + bool parseImpl(Pos & pos, ASTPtr & node, Expected & expected) override; +}; + +} + +ASTPtr tryParseMySQLQuery(const std::string & query, size_t max_query_size, size_t max_parser_depth); + +}