clickhouse: slightly fixed extractURLParameters [#CONV-6788].

This commit is contained in:
Michael Kolupaev 2013-03-06 09:00:58 +00:00
parent a1707b1e6c
commit 07ba56e85c

View File

@ -358,6 +358,78 @@ public:
first = true;
}
/// Получить следующий токен, если есть, или вернуть false.
bool get(Pos & token_begin, Pos & token_end)
{
if (pos == NULL)
return false;
if (first)
{
first = false;
pos = strchr(pos, '?');
if (pos == NULL)
return false;
++pos;
}
token_begin = pos;
pos = strchr(pos, '=');
if (pos == NULL)
return false;
++pos;
pos = strpbrk(pos, "&;#");
if (pos == NULL)
{
token_end = end;
}
else
{
token_end = pos;
if (*pos == '#')
pos = NULL;
else
++pos;
}
return true;
}
};
class URLHierarchyImpl
{
private:
Pos pos;
Pos end;
bool first;
public:
static String getName() { return "extractURLParameters"; }
static void checkArguments(const DataTypes & arguments)
{
if (arguments.size() != 1)
throw Exception("Number of arguments for function " + getName() + " doesn't match: passed "
+ Poco::NumberFormatter::format(arguments.size()) + ", should be 1.",
ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
if (!dynamic_cast<const DataTypeString *>(&*arguments[0]))
throw Exception("Illegal type " + arguments[0]->getName() + " of first argument of function " + getName() + ". Must be String.",
ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
}
void init(Block & block, const ColumnNumbers & arguments) {}
/// Вызывается для каждой следующей строки.
void set(Pos pos_, Pos end_)
{
pos = pos_;
end = end_;
first = true;
}
/// Получить следующий токен, если есть, или вернуть false.
bool get(Pos & token_begin, Pos & token_end)
{