From 9facd5bc56d6414569bd8c25c23c0f24358061c6 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 5 Oct 2015 10:04:42 +0300 Subject: [PATCH] Removed link-time dependency [#METR-17973]. --- .../DB/Dictionaries/MySQLDictionarySource.h | 25 +++++++++++++++++-- dbms/include/DB/Interpreters/Dictionaries.h | 2 +- dbms/src/Server/OLAPAttributesMetadata.h | 16 ++++++++++-- libs/libmysqlxx/include/mysqlxx/Pool.h | 14 +++-------- 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/dbms/include/DB/Dictionaries/MySQLDictionarySource.h b/dbms/include/DB/Dictionaries/MySQLDictionarySource.h index 8168be068e2..b8f2e5e8d25 100644 --- a/dbms/include/DB/Dictionaries/MySQLDictionarySource.h +++ b/dbms/include/DB/Dictionaries/MySQLDictionarySource.h @@ -5,7 +5,6 @@ #include #include #include -#include #include "writeParenthesisedString.h" @@ -79,6 +78,28 @@ public: private: Logger * log = &Logger::get("MySQLDictionarySource"); + + static std::string quoteForLike(const std::string s) + { + std::string tmp; + tmp.reserve(s.size()); + + for (auto c : s) + { + if (c == '%' || c == '_' || c == '\\') + tmp.push_back('\\'); + tmp.push_back(c); + } + + std::string res; + { + WriteBufferFromString out(res); + writeQuoted(tmp, out); + } + return res; + } + + mysqlxx::DateTime getLastModification() const { mysqlxx::DateTime update_time{std::time(nullptr)}; @@ -89,7 +110,7 @@ private: try { auto connection = pool.Get(); - auto query = connection->query("SHOW TABLE STATUS LIKE '" + strconvert::escaped_for_like(table) + "'"); + auto query = connection->query("SHOW TABLE STATUS LIKE " + quoteForLike(table)); LOG_TRACE(log, query.str()); diff --git a/dbms/include/DB/Interpreters/Dictionaries.h b/dbms/include/DB/Interpreters/Dictionaries.h index 5cef75de12c..c37f6a6dd70 100644 --- a/dbms/include/DB/Interpreters/Dictionaries.h +++ b/dbms/include/DB/Interpreters/Dictionaries.h @@ -146,7 +146,7 @@ public: Dictionaries(const bool throw_on_error) : Dictionaries(throw_on_error, - Application::instance().config() + Poco::Util::Application::instance().config() .getInt("builtin_dictionaries_reload_interval", 3600)) {} diff --git a/dbms/src/Server/OLAPAttributesMetadata.h b/dbms/src/Server/OLAPAttributesMetadata.h index 17463589dfa..d5ac92a7a15 100644 --- a/dbms/src/Server/OLAPAttributesMetadata.h +++ b/dbms/src/Server/OLAPAttributesMetadata.h @@ -1,16 +1,17 @@ #pragma once #include // log2() +#include #include #include #include +#include #include #include -#include #include #include #include @@ -187,7 +188,18 @@ struct AttributeHashBase : public IAttributeMetadata { BinaryData parse(const std::string & s) const { - return strconvert::hash64(s); + union + { + unsigned char char_data[16]; + Poco::UInt64 uint64_data; + } buf; + + MD5_CTX ctx; + MD5_Init(&ctx); + MD5_Update(&ctx, reinterpret_cast(s.data()), s.size()); + MD5_Final(buf.char_data, &ctx); + + return Poco::ByteOrder::flipBytes(buf.uint64_data); } }; diff --git a/libs/libmysqlxx/include/mysqlxx/Pool.h b/libs/libmysqlxx/include/mysqlxx/Pool.h index 073aa48accc..d401485c276 100644 --- a/libs/libmysqlxx/include/mysqlxx/Pool.h +++ b/libs/libmysqlxx/include/mysqlxx/Pool.h @@ -12,8 +12,6 @@ #include #include -#include - #include @@ -151,7 +149,7 @@ public: if (first) first = false; else - Daemon::instance().sleep(MYSQLXX_POOL_SLEEP_ON_CONNECT_FAIL); + ::sleep(MYSQLXX_POOL_SLEEP_ON_CONNECT_FAIL); app.logger().information("MYSQL: Reconnecting to " + pool->description); data->conn.connect( @@ -242,7 +240,7 @@ public: cfg.getInt("mysql_rw_timeout", MYSQLXX_DEFAULT_RW_TIMEOUT)); } - + /** * @param db_ Имя БД * @param server_ Хост для подключения @@ -306,7 +304,7 @@ public: } lock.unlock(); - Daemon::instance().sleep(MYSQLXX_POOL_SLEEP_ON_CONNECT_FAIL); + ::sleep(MYSQLXX_POOL_SLEEP_ON_CONNECT_FAIL); lock.lock(); } } @@ -367,7 +365,7 @@ private: Poco::FastMutex lock; /** Описание соединения. */ std::string description; - + /** Параметры подключения. **/ std::string db; std::string server; @@ -428,10 +426,6 @@ private: { app.logger().error(e.what()); delete conn; - - if (Daemon::instance().isCancelled()) - throw Poco::Exception("Daemon is cancelled while trying to connect to MySQL server."); - return nullptr; } }