mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
dbms: development [#CONV-2944].
This commit is contained in:
parent
46b8a85e83
commit
2d90179a99
@ -111,6 +111,8 @@ namespace ErrorCodes
|
|||||||
UNEXPECTED_PACKET_FROM_SERVER,
|
UNEXPECTED_PACKET_FROM_SERVER,
|
||||||
RECEIVED_DATA_FOR_WRONG_QUERY_ID,
|
RECEIVED_DATA_FOR_WRONG_QUERY_ID,
|
||||||
TOO_SMALL_BUFFER_SIZE,
|
TOO_SMALL_BUFFER_SIZE,
|
||||||
|
CANNOT_READ_HISTORY,
|
||||||
|
CANNOT_APPEND_HISTORY,
|
||||||
|
|
||||||
POCO_EXCEPTION = 1000,
|
POCO_EXCEPTION = 1000,
|
||||||
STD_EXCEPTION,
|
STD_EXCEPTION,
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
#include <tr1/unordered_set>
|
#include <tr1/unordered_set>
|
||||||
|
|
||||||
@ -16,6 +19,8 @@
|
|||||||
|
|
||||||
#include <Yandex/Revision.h>
|
#include <Yandex/Revision.h>
|
||||||
|
|
||||||
|
#include <statdaemons/Stopwatch.h>
|
||||||
|
|
||||||
#include <DB/Core/Exception.h>
|
#include <DB/Core/Exception.h>
|
||||||
#include <DB/Core/Types.h>
|
#include <DB/Core/Types.h>
|
||||||
#include <DB/Core/Protocol.h>
|
#include <DB/Core/Protocol.h>
|
||||||
@ -80,6 +85,11 @@ private:
|
|||||||
/// Вывод в консоль
|
/// Вывод в консоль
|
||||||
WriteBufferFromFileDescriptor std_out;
|
WriteBufferFromFileDescriptor std_out;
|
||||||
BlockOutputStreamPtr block_std_out;
|
BlockOutputStreamPtr block_std_out;
|
||||||
|
|
||||||
|
String home_path;
|
||||||
|
|
||||||
|
/// Путь к файлу истории команд.
|
||||||
|
String history_file;
|
||||||
|
|
||||||
|
|
||||||
void initialize(Poco::Util::Application & self)
|
void initialize(Poco::Util::Application & self)
|
||||||
@ -93,19 +103,66 @@ private:
|
|||||||
("учше;")("йгше;")("дщпщге;")
|
("учше;")("йгше;")("дщпщге;")
|
||||||
("q")("й");
|
("q")("й");
|
||||||
|
|
||||||
|
const char * home_path_cstr = getenv("HOME");
|
||||||
|
if (!home_path_cstr)
|
||||||
|
throw DB::Exception("Cannot get HOME environment variable");
|
||||||
|
else
|
||||||
|
home_path = home_path_cstr;
|
||||||
|
|
||||||
if (config().has("config-file"))
|
if (config().has("config-file"))
|
||||||
loadConfiguration(config().getString("config-file"));
|
loadConfiguration(config().getString("config-file"));
|
||||||
else if (Poco::File("./clickhouse-client.xml").exists())
|
else if (Poco::File("./clickhouse-client.xml").exists())
|
||||||
loadConfiguration("./clickhouse-client.xml");
|
loadConfiguration("./clickhouse-client.xml");
|
||||||
else if (Poco::File("~/.clickhouse-client/config.xml").exists())
|
else if (Poco::File(home_path + "/.clickhouse-client/config.xml").exists())
|
||||||
loadConfiguration("~/.clickhouse-client/config.xml");
|
loadConfiguration(home_path + "/.clickhouse-client/config.xml");
|
||||||
else if (Poco::File("/etc/clickhouse-client/config.xml").exists())
|
else if (Poco::File("/etc/clickhouse-client/config.xml").exists())
|
||||||
loadConfiguration("/etc/clickhouse-client/config.xml");
|
loadConfiguration("/etc/clickhouse-client/config.xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void throwFromErrno(const std::string & s, int code)
|
||||||
|
{
|
||||||
|
char buf[128];
|
||||||
|
throw Exception(s + ", errno: " + Poco::NumberFormatter::format(errno) + ", strerror: " + std::string(strerror_r(errno, buf, sizeof(buf))), code);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(const std::vector<std::string> & args)
|
int main(const std::vector<std::string> & args)
|
||||||
{
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return mainImpl(args);
|
||||||
|
}
|
||||||
|
catch (const DB::Exception & e)
|
||||||
|
{
|
||||||
|
std::cerr << "Code: " << e.code() << ". " << e.displayText() << std::endl
|
||||||
|
<< std::endl
|
||||||
|
<< "Stack trace:" << std::endl
|
||||||
|
<< e.getStackTrace().toString();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
catch (const Poco::Exception & e)
|
||||||
|
{
|
||||||
|
std::cerr << "Poco::Exception: " << e.displayText() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
catch (const std::exception & e)
|
||||||
|
{
|
||||||
|
std::cerr << "std::exception: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
std::cerr << "Unknown exception" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int mainImpl(const std::vector<std::string> & args)
|
||||||
|
{
|
||||||
|
std::cout << std::fixed << std::setprecision(3) << std::endl;
|
||||||
|
|
||||||
std::cout << "ClickHouse client version " << DBMS_VERSION_MAJOR
|
std::cout << "ClickHouse client version " << DBMS_VERSION_MAJOR
|
||||||
<< "." << DBMS_VERSION_MINOR
|
<< "." << DBMS_VERSION_MINOR
|
||||||
<< "." << Revision::get()
|
<< "." << Revision::get()
|
||||||
@ -148,6 +205,20 @@ private:
|
|||||||
|
|
||||||
context.format_factory = new FormatFactory();
|
context.format_factory = new FormatFactory();
|
||||||
context.data_type_factory = new DataTypeFactory();
|
context.data_type_factory = new DataTypeFactory();
|
||||||
|
|
||||||
|
/// Отключаем tab completion.
|
||||||
|
rl_bind_key('\t', rl_insert);
|
||||||
|
|
||||||
|
/// Загружаем историю команд, если есть.
|
||||||
|
history_file = config().getString("history_file", home_path + "/.clickhouse-client-history");
|
||||||
|
if (Poco::File(history_file).exists())
|
||||||
|
{
|
||||||
|
int res = read_history(history_file.c_str());
|
||||||
|
if (res)
|
||||||
|
throwFromErrno("Cannot read history from file " + history_file, ErrorCodes::CANNOT_READ_HISTORY);
|
||||||
|
}
|
||||||
|
else /// Создаём файл с историей.
|
||||||
|
Poco::File(history_file).createFile();
|
||||||
|
|
||||||
loop();
|
loop();
|
||||||
|
|
||||||
@ -166,6 +237,10 @@ private:
|
|||||||
if (!process(line))
|
if (!process(line))
|
||||||
break;
|
break;
|
||||||
add_history(line.c_str());
|
add_history(line.c_str());
|
||||||
|
|
||||||
|
int res = append_history(1, history_file.c_str());
|
||||||
|
if (res)
|
||||||
|
throwFromErrno("Cannot append history to file " + history_file, ErrorCodes::CANNOT_APPEND_HISTORY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,10 +253,14 @@ private:
|
|||||||
if (exit_strings.end() != exit_strings.find(line))
|
if (exit_strings.end() != exit_strings.find(line))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Stopwatch watch;
|
||||||
|
|
||||||
query = line;
|
query = line;
|
||||||
sendQuery();
|
sendQuery();
|
||||||
receiveResult();
|
receiveResult();
|
||||||
|
|
||||||
|
std::cout << "Total elapsed: " << watch.elapsedSeconds() << " sec." << std::endl << std::endl;
|
||||||
|
|
||||||
block_in = NULL;
|
block_in = NULL;
|
||||||
maybe_compressed_in = NULL;
|
maybe_compressed_in = NULL;
|
||||||
chunked_in = NULL;
|
chunked_in = NULL;
|
||||||
@ -297,35 +376,7 @@ private:
|
|||||||
|
|
||||||
int main(int argc, char ** argv)
|
int main(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
try
|
DB::Client client;
|
||||||
{
|
client.init(argc, argv);
|
||||||
DB::Client client;
|
return client.run();
|
||||||
client.init(argc, argv);
|
|
||||||
client.run();
|
|
||||||
}
|
|
||||||
catch (const DB::Exception & e)
|
|
||||||
{
|
|
||||||
std::cerr << "DB::Exception: " << e.what() << ", " << e.message() << std::endl
|
|
||||||
<< std::endl
|
|
||||||
<< "Stack trace:" << std::endl
|
|
||||||
<< e.getStackTrace().toString();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
catch (const Poco::Exception & e)
|
|
||||||
{
|
|
||||||
std::cerr << "Poco::Exception: " << e.displayText() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
catch (const std::exception & e)
|
|
||||||
{
|
|
||||||
std::cerr << "std::exception: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
std::cerr << "Unknown exception" << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user