This commit is contained in:
Evgeniy Gatov 2014-05-15 19:59:14 +04:00
commit 6c28fdc418
5 changed files with 28 additions and 5 deletions

View File

@ -38,6 +38,7 @@ public:
transfer_overflow_mode(limits.transfer_overflow_mode),
bytes_in_external_table(0),
rows_in_external_table(0),
only_external(false),
log(&Logger::get("Set")),
max_rows(limits.max_rows_in_set),
max_bytes(limits.max_bytes_in_set),

View File

@ -217,8 +217,21 @@ private:
if (right - left + 1 > MAX_ADDRESSES)
throw Exception("Storage Distributed, first argument generates too many result addresses",
ErrorCodes::BAD_ARGUMENTS);
bool add_leading_zeroes = false;
size_t len = last_dot - 1 - (i + 1);
/// Если у левой и правой границы поровну цифр, значит необходимо дополнять лидирующими нулями.
if (last_dot - 1 - (i + 1) == m - (last_dot + 1))
add_leading_zeroes = true;
for (size_t id = left; id <= right; ++id)
buffer.push_back(toString<uint64>(id));
{
String cur = toString<uint64>(id);
if (add_leading_zeroes)
{
while (cur.size() < len)
cur = "0" + cur;
}
buffer.push_back(cur);
}
} else if (have_splitter) /// Если внутри есть текущий разделитель, то сгенерировать множество получаемых строк
buffer = parseDescription(description, i + 1, m, splitter);
else /// Иначе просто скопировать, порождение произойдет при вызове с правильным разделителем

View File

@ -958,12 +958,21 @@ public:
size_t cnt = positions.size();
if (cnt == 2 && newargc > 1)
{
Exception e("Unknown option " + to_pass_further[0] + ". Maybe missed --external flag in front of it.", ErrorCodes::BAD_ARGUMENTS);
std::string text = e.displayText();
std::cerr << "Code: " << e.code() << ". " << text << std::endl;
exit(e.code());
}
size_t stdin_count = 0;
for (size_t i = 1; i + 1 < cnt; ++i)
{
/// Парсим основные опции командной строки
boost::program_options::parsed_options parsed = boost::program_options::command_line_parser(positions[i + 1] - positions[i], &new_argv[positions[i]]).options(external_description).run();
boost::program_options::variables_map external_options;
boost::program_options::store(boost::program_options::parse_command_line(
positions[i + 1] - positions[i], &new_argv[positions[i]], external_description), external_options);
boost::program_options::store(parsed, external_options);
try
{

View File

@ -661,7 +661,7 @@ void ExpressionAnalyzer::addExternalStorage(ASTFunction * node)
ast_set->set = new Set(settings.limits);
ast_set->set->setSource(external_data[external_table_name]);
ast_set->set->setExternalOutput(external_tables[external_table_name]);
ast_set->set->setOnlyExternal();
ast_set->set->setOnlyExternal(true);
sets_with_subqueries[ast_set->getColumnName()] = ast_set->set;
}
else

View File

@ -9,7 +9,7 @@ if (git rev-parse --is-inside-work-tree &> /dev/null)
then
# GIT
git fetch --tags;
( git describe --tags || echo 1 ) | cut -d "-" -f 1 >> ${CMAKE_CURRENT_BINARY_DIR}/src/revision.h;
( git tag || echo 1 ) | tail -1 >> ${CMAKE_CURRENT_BINARY_DIR}/src/revision.h;
else
#SVN
echo && (LC_ALL=C svn info ${PROJECT_SOURCE_DIR}/ 2>/dev/null || echo Revision 1) | grep Revision | cut -d " " -f 2 >> ${CMAKE_CURRENT_BINARY_DIR}/src/revision.h;