dbms: development [#CONV-2944].

This commit is contained in:
Alexey Milovidov 2012-03-09 03:56:12 +00:00
parent d9a68ccf2a
commit c255980539
6 changed files with 35 additions and 7 deletions

View File

@ -40,10 +40,11 @@ struct Context
StorageFactoryPtr storage_factory; /// Движки таблиц. StorageFactoryPtr storage_factory; /// Движки таблиц.
NamesAndTypesList columns; /// Столбцы текущей обрабатываемой таблицы. NamesAndTypesList columns; /// Столбцы текущей обрабатываемой таблицы.
Settings settings; /// Настройки выполнения запроса. Settings settings; /// Настройки выполнения запроса.
Logger * log; /// Логгер.
mutable SharedPtr<Poco::FastMutex> mutex; /// Для доступа и модификации разделяемых объектов. mutable SharedPtr<Poco::FastMutex> mutex; /// Для доступа и модификации разделяемых объектов.
Context() : databases(new Databases), functions(new Functions), mutex(new Poco::FastMutex) {} Context() : databases(new Databases), functions(new Functions), log(&Logger::get("Context")), mutex(new Poco::FastMutex) {}
/** В сервере есть глобальный контекст. /** В сервере есть глобальный контекст.
* При соединении, он копируется в контекст сессии. * При соединении, он копируется в контекст сессии.
@ -63,6 +64,7 @@ struct Context
storage_factory = rhs.storage_factory; storage_factory = rhs.storage_factory;
columns = rhs.columns; columns = rhs.columns;
settings = rhs.settings; settings = rhs.settings;
log = rhs.log;
mutex = rhs.mutex; mutex = rhs.mutex;
} }
}; };

View File

@ -18,8 +18,7 @@
#include <DB/DataTypes/DataTypesNumberFixed.h> #include <DB/DataTypes/DataTypesNumberFixed.h>
#include <DB/Functions/FunctionsArithmetic.h> #include <DB/Functions/FunctionsLibrary.h>
#include <DB/Functions/FunctionsComparison.h>
#include <DB/Parsers/ParserSelectQuery.h> #include <DB/Parsers/ParserSelectQuery.h>
#include <DB/Parsers/formatAST.h> #include <DB/Parsers/formatAST.h>
@ -56,9 +55,7 @@ int main(int argc, char ** argv)
DB::Context context; DB::Context context;
context.columns.push_back(DB::NameAndTypePair("number", new DB::DataTypeUInt64)); context.columns.push_back(DB::NameAndTypePair("number", new DB::DataTypeUInt64));
(*context.functions)["modulo"] = new DB::FunctionModulo; context.functions = DB::FunctionsLibrary::get();
(*context.functions)["equals"] = new DB::FunctionEquals;
(*context.functions)["notEquals"] = new DB::FunctionNotEquals;
Poco::SharedPtr<DB::Expression> expression = new DB::Expression(ast, context); Poco::SharedPtr<DB::Expression> expression = new DB::Expression(ast, context);

View File

@ -52,11 +52,18 @@ void loadMetadata(Context & context)
if (!it->isDirectory()) if (!it->isDirectory())
continue; continue;
/// Для директории .svn
if (it.name().at(0) == '.')
continue;
executeCreateQuery("ATTACH DATABASE " + it.name(), context, it.name(), it->path()); executeCreateQuery("ATTACH DATABASE " + it.name(), context, it.name(), it->path());
/// Цикл по таблицам /// Цикл по таблицам
for (Poco::DirectoryIterator jt(it->path()); jt != dir_end; ++jt) for (Poco::DirectoryIterator jt(it->path()); jt != dir_end; ++jt)
{ {
if (jt->isDirectory())
continue;
/// Файлы имеют имена вида table_name.sql /// Файлы имеют имена вида table_name.sql
if (jt.name().compare(jt.name().size() - 4, 4, ".sql")) if (jt.name().compare(jt.name().size() - 4, 4, ".sql"))
throw Exception("Incorrect file extension: " + jt.name() + " in metadata directory " + it->path(), ErrorCodes::INCORRECT_FILE_NAME); throw Exception("Incorrect file extension: " + jt.name() + " in metadata directory " + it->path(), ErrorCodes::INCORRECT_FILE_NAME);

View File

@ -5,7 +5,10 @@
#include <DB/IO/WriteBufferFromOStream.h> #include <DB/IO/WriteBufferFromOStream.h>
#include <DB/Columns/ColumnString.h>
#include <DB/DataTypes/DataTypesNumberFixed.h> #include <DB/DataTypes/DataTypesNumberFixed.h>
#include <DB/DataTypes/DataTypeString.h>
#include <DB/Functions/FunctionsLibrary.h> #include <DB/Functions/FunctionsLibrary.h>

View File

@ -1,4 +1,5 @@
#include <Poco/URI.h> #include <Poco/URI.h>
#include <Poco/NumberParser.h>
#include <DB/Core/ErrorCodes.h> #include <DB/Core/ErrorCodes.h>
@ -34,6 +35,16 @@ void HTTPRequestHandler::processQuery(Poco::Net::NameValueCollection & params, s
WriteBufferFromOStream out(ostr); WriteBufferFromOStream out(ostr);
Context context = server.global_context; Context context = server.global_context;
/// Некоторые настройки могут быть переопределены в запросе.
if (params.has("asynchronous"))
context.settings.asynchronous = 0 != Poco::NumberParser::parseUnsigned(params.get("asynchronous"));
if (params.has("max_block_size"))
context.settings.max_block_size = Poco::NumberParser::parseUnsigned(params.get("max_block_size"));
if (params.has("max_query_size"))
context.settings.max_query_size = Poco::NumberParser::parseUnsigned(params.get("max_query_size"));
if (params.has("max_threads"))
context.settings.max_threads = Poco::NumberParser::parseUnsigned(params.get("max_threads"));
executeQuery(in, out, context, query_plan); executeQuery(in, out, context, query_plan);
if (query_plan) if (query_plan)

View File

@ -51,7 +51,10 @@ int Server::main(const std::vector<std::string> & args)
{ {
/// Заранее инициализируем DateLUT, чтобы первая инициализация потом не влияла на измеряемую скорость выполнения. /// Заранее инициализируем DateLUT, чтобы первая инициализация потом не влияла на измеряемую скорость выполнения.
Yandex::DateLUTSingleton::instance(); Yandex::DateLUTSingleton::instance();
/** Контекст содержит всё, что влияет на обработку запроса:
* настройки, набор функций, типов данных, агрегатных функций, баз данных...
*/
global_context.path = config.getString("path"); global_context.path = config.getString("path");
global_context.functions = FunctionsLibrary::get(); global_context.functions = FunctionsLibrary::get();
global_context.aggregate_function_factory = new AggregateFunctionFactory; global_context.aggregate_function_factory = new AggregateFunctionFactory;
@ -64,6 +67,11 @@ int Server::main(const std::vector<std::string> & args)
(*global_context.databases)["system"]["numbers"] = new StorageSystemNumbers("numbers"); (*global_context.databases)["system"]["numbers"] = new StorageSystemNumbers("numbers");
global_context.current_database = config.getString("default_database", "default"); global_context.current_database = config.getString("default_database", "default");
global_context.settings.asynchronous = config.getBool("asynchronous", global_context.settings.asynchronous);
global_context.settings.max_block_size = config.getInt("max_block_size", global_context.settings.max_block_size);
global_context.settings.max_query_size = config.getInt("max_query_size", global_context.settings.max_query_size);
global_context.settings.max_threads = config.getInt("max_threads", global_context.settings.max_threads);
Poco::Net::ServerSocket socket(Poco::Net::SocketAddress("[::]:" + config.getString("http_port"))); Poco::Net::ServerSocket socket(Poco::Net::SocketAddress("[::]:" + config.getString("http_port")));