Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
70385e12
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
70385e12
编写于
1月 21, 2013
作者:
A
Alexey Milovidov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reverted experimental modification [#CONV-2944].
上级
c3c69f44
变更
30
隐藏空白更改
内联
并排
Showing
30 changed file
with
335 addition
and
665 deletion
+335
-665
dbms/include/DB/Columns/ColumnAggregateFunction.h
dbms/include/DB/Columns/ColumnAggregateFunction.h
+4
-3
dbms/include/DB/Columns/ColumnArray.h
dbms/include/DB/Columns/ColumnArray.h
+4
-4
dbms/include/DB/Columns/ColumnConst.h
dbms/include/DB/Columns/ColumnConst.h
+3
-2
dbms/include/DB/Columns/ColumnFixedArray.h
dbms/include/DB/Columns/ColumnFixedArray.h
+4
-4
dbms/include/DB/Columns/ColumnFixedString.h
dbms/include/DB/Columns/ColumnFixedString.h
+3
-2
dbms/include/DB/Columns/ColumnSet.h
dbms/include/DB/Columns/ColumnSet.h
+3
-2
dbms/include/DB/Columns/ColumnString.h
dbms/include/DB/Columns/ColumnString.h
+3
-2
dbms/include/DB/Columns/ColumnTuple.h
dbms/include/DB/Columns/ColumnTuple.h
+5
-4
dbms/include/DB/Columns/ColumnVector.h
dbms/include/DB/Columns/ColumnVector.h
+13
-12
dbms/include/DB/Columns/IColumn.h
dbms/include/DB/Columns/IColumn.h
+4
-6
dbms/include/DB/Common/PODArray.h
dbms/include/DB/Common/PODArray.h
+0
-182
dbms/include/DB/Functions/FunctionsArithmetic.h
dbms/include/DB/Functions/FunctionsArithmetic.h
+4
-4
dbms/include/DB/Functions/FunctionsArray.h
dbms/include/DB/Functions/FunctionsArray.h
+8
-8
dbms/include/DB/Functions/FunctionsComparison.h
dbms/include/DB/Functions/FunctionsComparison.h
+138
-138
dbms/include/DB/Functions/FunctionsConditional.h
dbms/include/DB/Functions/FunctionsConditional.h
+24
-24
dbms/include/DB/Functions/FunctionsConversion.h
dbms/include/DB/Functions/FunctionsConversion.h
+1
-1
dbms/include/DB/Functions/FunctionsDateTime.h
dbms/include/DB/Functions/FunctionsDateTime.h
+6
-6
dbms/include/DB/Functions/FunctionsFormatting.h
dbms/include/DB/Functions/FunctionsFormatting.h
+1
-1
dbms/include/DB/Functions/FunctionsLogical.h
dbms/include/DB/Functions/FunctionsLogical.h
+10
-10
dbms/include/DB/Functions/FunctionsMiscellaneous.h
dbms/include/DB/Functions/FunctionsMiscellaneous.h
+6
-6
dbms/include/DB/Functions/FunctionsRandom.h
dbms/include/DB/Functions/FunctionsRandom.h
+2
-2
dbms/include/DB/Functions/FunctionsString.h
dbms/include/DB/Functions/FunctionsString.h
+68
-68
dbms/include/DB/Functions/FunctionsStringSearch.h
dbms/include/DB/Functions/FunctionsStringSearch.h
+6
-6
dbms/include/DB/Functions/FunctionsURL.h
dbms/include/DB/Functions/FunctionsURL.h
+8
-8
dbms/include/DB/IO/WriteBufferFromVector.h
dbms/include/DB/IO/WriteBufferFromVector.h
+2
-1
dbms/src/Common/tests/pod_array.cpp
dbms/src/Common/tests/pod_array.cpp
+0
-153
dbms/src/DataStreams/tests/aggregating_stream.cpp
dbms/src/DataStreams/tests/aggregating_stream.cpp
+1
-1
dbms/src/Interpreters/sortBlock.cpp
dbms/src/Interpreters/sortBlock.cpp
+2
-3
dbms/src/Interpreters/tests/aggregate.cpp
dbms/src/Interpreters/tests/aggregate.cpp
+1
-1
dbms/src/Interpreters/tests/expression.cpp
dbms/src/Interpreters/tests/expression.cpp
+1
-1
未找到文件。
dbms/include/DB/Columns/ColumnAggregateFunction.h
浏览文件 @
70385e12
...
@@ -10,7 +10,7 @@ namespace DB
...
@@ -10,7 +10,7 @@ namespace DB
/** Столбец, хранящий состояния агрегатных функций.
/** Столбец, хранящий состояния агрегатных функций.
*/
*/
class
ColumnAggregateFunction
:
public
ColumnVector
<
AggregateFunctionPtr
,
std
::
vector
<
AggregateFunctionPtr
>
>
class
ColumnAggregateFunction
:
public
ColumnVector
<
AggregateFunctionPtr
>
{
{
public:
public:
std
::
string
getName
()
const
{
return
"ColumnAggregateFunction"
;
}
std
::
string
getName
()
const
{
return
"ColumnAggregateFunction"
;
}
...
@@ -62,12 +62,13 @@ public:
...
@@ -62,12 +62,13 @@ public:
return
0
;
return
0
;
}
}
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
size_t
s
=
data
.
size
();
size_t
s
=
data
.
size
();
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
return
res
;
}
}
};
};
...
...
dbms/include/DB/Columns/ColumnArray.h
浏览文件 @
70385e12
...
@@ -241,16 +241,16 @@ public:
...
@@ -241,16 +241,16 @@ public:
}
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
Permutation
nested_perm
;
Permutation
nested_perm
=
data
->
getPermutation
();
data
->
getPermutation
(
nested_perm
);
size_t
s
=
size
();
size_t
s
=
size
();
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
,
nested_perm
));
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
,
nested_perm
));
return
res
;
}
}
size_t
byteSize
()
const
size_t
byteSize
()
const
...
...
dbms/include/DB/Columns/ColumnConst.h
浏览文件 @
70385e12
...
@@ -88,11 +88,12 @@ public:
...
@@ -88,11 +88,12 @@ public:
:
1
);
:
1
);
}
}
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
return
res
;
}
}
StringRef
getDataAt
(
size_t
n
)
const
;
StringRef
getDataAt
(
size_t
n
)
const
;
...
...
dbms/include/DB/Columns/ColumnFixedArray.h
浏览文件 @
70385e12
...
@@ -173,16 +173,16 @@ public:
...
@@ -173,16 +173,16 @@ public:
}
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
Permutation
nested_perm
;
Permutation
nested_perm
=
data
->
getPermutation
();
data
->
getPermutation
(
nested_perm
);
size_t
s
=
data
->
size
()
/
n
;
size_t
s
=
data
->
size
()
/
n
;
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
,
nested_perm
));
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
,
nested_perm
));
return
res
;
}
}
size_t
byteSize
()
const
size_t
byteSize
()
const
...
...
dbms/include/DB/Columns/ColumnFixedString.h
浏览文件 @
70385e12
...
@@ -93,14 +93,15 @@ public:
...
@@ -93,14 +93,15 @@ public:
}
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
size_t
s
=
size
();
size_t
s
=
size
();
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
return
res
;
}
}
void
replicate
(
const
Offsets_t
&
offsets
)
void
replicate
(
const
Offsets_t
&
offsets
)
...
...
dbms/include/DB/Columns/ColumnSet.h
浏览文件 @
70385e12
...
@@ -44,11 +44,12 @@ public:
...
@@ -44,11 +44,12 @@ public:
throw
Exception
(
"Size of permutation doesn't match size of column."
,
ErrorCodes
::
SIZES_OF_COLUMNS_DOESNT_MATCH
);
throw
Exception
(
"Size of permutation doesn't match size of column."
,
ErrorCodes
::
SIZES_OF_COLUMNS_DOESNT_MATCH
);
}
}
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
return
res
;
}
}
void
replicate
(
const
Offsets_t
&
offsets
)
void
replicate
(
const
Offsets_t
&
offsets
)
...
...
dbms/include/DB/Columns/ColumnString.h
浏览文件 @
70385e12
...
@@ -166,14 +166,15 @@ public:
...
@@ -166,14 +166,15 @@ public:
}
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
size_t
s
=
getOffsets
().
size
();
size_t
s
=
getOffsets
().
size
();
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
return
res
;
}
}
void
replicate
(
const
Offsets_t
&
replicate_offsets
)
void
replicate
(
const
Offsets_t
&
replicate_offsets
)
...
...
dbms/include/DB/Columns/ColumnTuple.h
浏览文件 @
70385e12
...
@@ -137,15 +137,16 @@ public:
...
@@ -137,15 +137,16 @@ public:
}
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
size_t
rows
=
size
();
size_t
rows
=
size
();
res
.
resize
(
rows
);
Permutation
perm
(
rows
);
for
(
size_t
i
=
0
;
i
<
rows
;
++
i
)
for
(
size_t
i
=
0
;
i
<
rows
;
++
i
)
res
[
i
]
=
i
;
perm
[
i
]
=
i
;
Less
less
(
columns
);
Less
less
(
columns
);
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
);
std
::
sort
(
perm
.
begin
(),
perm
.
end
(),
less
);
return
perm
;
}
}
void
clear
()
void
clear
()
...
...
dbms/include/DB/Columns/ColumnVector.h
浏览文件 @
70385e12
...
@@ -57,15 +57,14 @@ public:
...
@@ -57,15 +57,14 @@ public:
};
};
/** Шаблон столбцов, которые используют для хранения
непрерывный кусок памяти
.
/** Шаблон столбцов, которые используют для хранения
std::vector
.
*/
*/
template
<
typename
T
,
typename
Container
=
PODArray
<
T
>
>
template
<
typename
T
>
class
ColumnVector
:
public
IColumn
class
ColumnVector
:
public
IColumn
{
{
public:
public:
typedef
T
value_type
;
typedef
T
value_type
;
typedef
Container
Container_t
;
typedef
std
::
vector
<
value_type
>
Container_t
;
typedef
ColumnVector
<
T
,
Container
>
Self
;
ColumnVector
()
{}
ColumnVector
()
{}
ColumnVector
(
size_t
n
)
:
data
(
n
)
{}
ColumnVector
(
size_t
n
)
:
data
(
n
)
{}
...
@@ -78,7 +77,7 @@ public:
...
@@ -78,7 +77,7 @@ public:
ColumnPtr
cloneEmpty
()
const
ColumnPtr
cloneEmpty
()
const
{
{
return
new
Self
;
return
new
ColumnVector
<
T
>
;
}
}
size_t
size
()
const
size_t
size
()
const
...
@@ -106,7 +105,7 @@ public:
...
@@ -106,7 +105,7 @@ public:
if
(
start
+
length
>
data
.
size
())
if
(
start
+
length
>
data
.
size
())
throw
Exception
(
"Parameters start = "
throw
Exception
(
"Parameters start = "
+
Poco
::
NumberFormatter
::
format
(
start
)
+
", length = "
+
Poco
::
NumberFormatter
::
format
(
start
)
+
", length = "
+
Poco
::
NumberFormatter
::
format
(
length
)
+
" are out of bound in
ColumnVector<
>::cut() method"
+
Poco
::
NumberFormatter
::
format
(
length
)
+
" are out of bound in
IColumnVector<T
>::cut() method"
" (data.size() = "
+
Poco
::
NumberFormatter
::
format
(
data
.
size
())
+
")."
,
" (data.size() = "
+
Poco
::
NumberFormatter
::
format
(
data
.
size
())
+
")."
,
ErrorCodes
::
PARAMETER_OUT_OF_BOUND
);
ErrorCodes
::
PARAMETER_OUT_OF_BOUND
);
...
@@ -127,7 +126,7 @@ public:
...
@@ -127,7 +126,7 @@ public:
void
insertFrom
(
const
IColumn
&
src
,
size_t
n
)
void
insertFrom
(
const
IColumn
&
src
,
size_t
n
)
{
{
data
.
push_back
(
static_cast
<
const
Self
&>
(
src
).
getData
()[
n
]);
data
.
push_back
(
static_cast
<
const
ColumnVector
<
T
>
&>
(
src
).
getData
()[
n
]);
}
}
void
insertDefault
()
void
insertDefault
()
...
@@ -175,7 +174,7 @@ public:
...
@@ -175,7 +174,7 @@ public:
int
compareAt
(
size_t
n
,
size_t
m
,
const
IColumn
&
rhs_
)
const
int
compareAt
(
size_t
n
,
size_t
m
,
const
IColumn
&
rhs_
)
const
{
{
const
Self
&
rhs
=
static_cast
<
const
Self
&>
(
rhs_
);
const
ColumnVector
<
T
>
&
rhs
=
static_cast
<
const
ColumnVector
<
T
>
&>
(
rhs_
);
return
data
[
n
]
<
rhs
.
data
[
m
]
return
data
[
n
]
<
rhs
.
data
[
m
]
?
-
1
?
-
1
:
(
data
[
n
]
==
rhs
.
data
[
m
]
:
(
data
[
n
]
==
rhs
.
data
[
m
]
...
@@ -185,19 +184,21 @@ public:
...
@@ -185,19 +184,21 @@ public:
struct
less
struct
less
{
{
const
Self
&
parent
;
const
ColumnVector
<
T
>
&
parent
;
less
(
const
Self
&
parent_
)
:
parent
(
parent_
)
{}
less
(
const
ColumnVector
<
T
>
&
parent_
)
:
parent
(
parent_
)
{}
bool
operator
()(
size_t
lhs
,
size_t
rhs
)
const
{
return
parent
.
data
[
lhs
]
<
parent
.
data
[
rhs
];
}
bool
operator
()(
size_t
lhs
,
size_t
rhs
)
const
{
return
parent
.
data
[
lhs
]
<
parent
.
data
[
rhs
];
}
};
};
void
getPermutation
(
Permutation
&
res
)
const
Permutation
getPermutation
(
)
const
{
{
size_t
s
=
data
.
size
();
size_t
s
=
data
.
size
();
res
.
resize
(
s
);
Permutation
res
(
s
);
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
for
(
size_t
i
=
0
;
i
<
s
;
++
i
)
res
[
i
]
=
i
;
res
[
i
]
=
i
;
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
std
::
sort
(
res
.
begin
(),
res
.
end
(),
less
(
*
this
));
return
res
;
}
}
void
replicate
(
const
Offsets_t
&
offsets
)
void
replicate
(
const
Offsets_t
&
offsets
)
...
...
dbms/include/DB/Columns/IColumn.h
浏览文件 @
70385e12
...
@@ -7,8 +7,6 @@
...
@@ -7,8 +7,6 @@
#include <DB/Core/ErrorCodes.h>
#include <DB/Core/ErrorCodes.h>
#include <DB/Core/StringRef.h>
#include <DB/Core/StringRef.h>
#include <DB/Common/PODArray.h>
namespace
DB
namespace
DB
{
{
...
@@ -96,13 +94,13 @@ public:
...
@@ -96,13 +94,13 @@ public:
/** Оставить только значения, соответствующие фильтру.
/** Оставить только значения, соответствующие фильтру.
* Используется для операции WHERE / HAVING.
* Используется для операции WHERE / HAVING.
*/
*/
typedef
PODArray
<
UInt8
>
Filter
;
typedef
std
::
vector
<
UInt8
>
Filter
;
virtual
void
filter
(
const
Filter
&
filt
)
=
0
;
virtual
void
filter
(
const
Filter
&
filt
)
=
0
;
/** Переставить значения местами, используя указанную перестановку.
/** Переставить значения местами, используя указанную перестановку.
* Используется при сортировке.
* Используется при сортировке.
*/
*/
typedef
PODArray
<
size_t
>
Permutation
;
typedef
std
::
vector
<
size_t
>
Permutation
;
virtual
void
permute
(
const
Permutation
&
perm
)
=
0
;
virtual
void
permute
(
const
Permutation
&
perm
)
=
0
;
/** Сравнить (*this)[n] и rhs[m].
/** Сравнить (*this)[n] и rhs[m].
...
@@ -114,13 +112,13 @@ public:
...
@@ -114,13 +112,13 @@ public:
/** Получить перестановку чисел, такую, что их порядок соответствует порядку значений в столбце.
/** Получить перестановку чисел, такую, что их порядок соответствует порядку значений в столбце.
* Используется при сортировке.
* Используется при сортировке.
*/
*/
virtual
void
getPermutation
(
Permutation
&
res
)
const
=
0
;
virtual
Permutation
getPermutation
(
)
const
=
0
;
/** Размножить все значения столько раз, сколько прописано в offsets.
/** Размножить все значения столько раз, сколько прописано в offsets.
* (i-е значение размножается в offsets[i] - offsets[i - 1] значений.)
* (i-е значение размножается в offsets[i] - offsets[i - 1] значений.)
*/
*/
typedef
UInt64
Offset_t
;
typedef
UInt64
Offset_t
;
typedef
PODArray
<
Offset_t
>
Offsets_t
;
typedef
std
::
vector
<
Offset_t
>
Offsets_t
;
virtual
void
replicate
(
const
Offsets_t
&
offsets
)
=
0
;
virtual
void
replicate
(
const
Offsets_t
&
offsets
)
=
0
;
/** Очистить */
/** Очистить */
...
...
dbms/include/DB/Common/PODArray.h
已删除
100644 → 0
浏览文件 @
c3c69f44
#pragma once
#include <string.h>
#include <cstddef>
#include <sys/mman.h>
#include <algorithm>
#include <boost/noncopyable.hpp>
#include <Yandex/optimization.h>
#include <DB/Core/Exception.h>
namespace
DB
{
/** Динамический массив для POD-типов.
* Предназначен для небольшого количества больших массивов (а не большого количества маленьких).
* А точнее - для использования в ColumnVector.
* Отличается от std::vector тем, что использует mremap для ресайза, а также не инициализирует элементы.
* (впрочем, mmap даёт память, инициализированную нулями, так что можно считать, что элементы инициализируются)
* Сделано noncopyable, чтобы не было случайных копий. Скопировать данные можно с помощью метода assign.
* Поддерживается только часть интерфейса std::vector.
*
* Если вставлять элементы push_back-ом, не делая reserve, то PODArray примерно в 2.5 раза быстрее std::vector.
*/
template
<
typename
T
>
class
PODArray
:
private
boost
::
noncopyable
{
private:
static
const
size_t
initial_size
=
4096
;
char
*
c_start
;
char
*
c_end
;
char
*
c_end_of_storage
;
T
*
t_start
()
{
return
reinterpret_cast
<
T
*>
(
c_start
);
}
T
*
t_end
()
{
return
reinterpret_cast
<
T
*>
(
c_end
);
}
T
*
t_end_of_storage
()
{
return
reinterpret_cast
<
T
*>
(
c_end_of_storage
);
}
const
T
*
t_start
()
const
{
return
reinterpret_cast
<
const
T
*>
(
c_start
);
}
const
T
*
t_end
()
const
{
return
reinterpret_cast
<
const
T
*>
(
c_end
);
}
const
T
*
t_end_of_storage
()
const
{
return
reinterpret_cast
<
const
T
*>
(
c_end_of_storage
);
}
size_t
storage_size
()
const
{
return
c_end_of_storage
-
c_start
;
}
static
size_t
byte_size
(
size_t
n
)
{
return
n
*
sizeof
(
T
);
}
static
size_t
round_up_to_power_of_two
(
size_t
n
)
{
return
n
==
0
?
0
:
(
0x8000000000000000ULL
>>
(
__builtin_clzl
(
n
-
1
)
-
1
));
}
static
size_t
to_size
(
size_t
n
)
{
return
byte_size
(
std
::
max
(
initial_size
,
round_up_to_power_of_two
(
n
)));
}
void
alloc
(
size_t
n
)
{
size_t
bytes_to_alloc
=
to_size
(
n
);
c_start
=
c_end
=
reinterpret_cast
<
char
*>
(
mmap
(
NULL
,
bytes_to_alloc
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_ANONYMOUS
,
-
1
,
0
));
c_end_of_storage
=
c_start
+
bytes_to_alloc
;
if
(
MAP_FAILED
==
c_start
)
throwFromErrno
(
"PODArray: Cannot mmap."
);
}
void
dealloc
()
{
if
(
0
!=
munmap
(
c_start
,
storage_size
()))
throwFromErrno
(
"PODArray: Cannot munmap."
);
}
void
realloc
(
size_t
n
)
{
ptrdiff_t
end_diff
=
c_end
-
c_start
;
size_t
bytes_to_alloc
=
to_size
(
n
);
c_start
=
reinterpret_cast
<
char
*>
(
mremap
(
c_start
,
storage_size
(),
bytes_to_alloc
,
MREMAP_MAYMOVE
));
c_end
=
c_start
+
end_diff
;
c_end_of_storage
=
c_start
+
bytes_to_alloc
;
if
(
MAP_FAILED
==
c_start
)
throwFromErrno
(
"PODArray: Cannot mremap."
);
}
public:
typedef
T
value_type
;
typedef
T
*
iterator
;
typedef
const
T
*
const_iterator
;
PODArray
()
{
alloc
(
initial_size
);
}
PODArray
(
size_t
n
)
{
alloc
(
n
);
c_end
+=
byte_size
(
n
);
}
PODArray
(
size_t
n
,
const
T
&
x
)
{
alloc
(
n
);
assign
(
n
,
x
);
}
PODArray
(
const_iterator
from_begin
,
const_iterator
from_end
)
{
alloc
(
from_end
-
from_begin
);
insert
(
from_end
-
from_begin
);
}
~
PODArray
()
{
dealloc
();
}
size_t
size
()
const
{
return
t_end
()
-
t_start
();
}
bool
empty
()
const
{
return
t_end
()
==
t_start
();
}
size_t
capacity
()
const
{
return
t_end_of_storage
()
-
t_start
();
}
T
&
operator
[]
(
size_t
n
)
{
return
t_start
()[
n
];
}
const
T
&
operator
[]
(
size_t
n
)
const
{
return
t_start
()[
n
];
}
T
&
front
()
{
return
t_start
()[
0
];
}
T
&
back
()
{
return
t_end
()[
-
1
];
}
const
T
&
front
()
const
{
return
t_start
()[
0
];
}
const
T
&
back
()
const
{
return
t_end
()[
-
1
];
}
iterator
begin
()
{
return
t_start
();
}
iterator
end
()
{
return
t_end
();
}
const_iterator
begin
()
const
{
return
t_start
();
}
const_iterator
end
()
const
{
return
t_end
();
}
void
reserve
(
size_t
n
)
{
if
(
n
>
capacity
())
realloc
(
n
);
}
void
reserve
()
{
realloc
(
size
()
*
2
);
}
void
resize
(
size_t
n
)
{
reserve
(
n
);
c_end
=
c_start
+
byte_size
(
n
);
}
void
clear
()
{
c_end
=
c_start
;
}
void
push_back
(
const
T
&
x
)
{
if
(
unlikely
(
c_end
==
c_end_of_storage
))
reserve
();
*
t_end
()
=
x
;
c_end
+=
byte_size
(
1
);
}
/// Не вставляйте в массив кусок самого себя. Потому что при ресайзе, итераторы на самого себя могут инвалидироваться.
void
insert
(
const_iterator
from_begin
,
const_iterator
from_end
)
{
size_t
required_capacity
=
size
()
+
from_end
-
from_begin
;
if
(
required_capacity
>
capacity
())
reserve
(
round_up_to_power_of_two
(
required_capacity
));
size_t
bytes_to_copy
=
byte_size
(
from_end
-
from_begin
);
memcpy
(
c_end
,
reinterpret_cast
<
const
void
*>
(
from_begin
),
bytes_to_copy
);
c_end
+=
bytes_to_copy
;
}
void
swap
(
PODArray
<
T
>
&
rhs
)
{
std
::
swap
(
c_start
,
rhs
.
c_start
);
std
::
swap
(
c_end
,
rhs
.
c_end
);
std
::
swap
(
c_end_of_storage
,
rhs
.
c_end_of_storage
);
}
void
assign
(
size_t
n
,
const
T
&
x
)
{
resize
(
n
);
std
::
fill
(
begin
(),
end
(),
x
);
}
void
assign
(
const_iterator
from_begin
,
const_iterator
from_end
)
{
size_t
required_capacity
=
from_end
-
from_begin
;
if
(
required_capacity
>
capacity
())
reserve
(
round_up_to_power_of_two
(
required_capacity
));
size_t
bytes_to_copy
=
byte_size
(
required_capacity
);
memcpy
(
c_start
,
reinterpret_cast
<
const
void
*>
(
from_begin
),
bytes_to_copy
);
c_end
=
c_start
+
bytes_to_copy
;
}
void
assign
(
const
PODArray
<
T
>
&
from
)
{
assign
(
from
.
begin
(),
from
.
end
());
}
};
}
dbms/include/DB/Functions/FunctionsArithmetic.h
浏览文件 @
70385e12
...
@@ -20,21 +20,21 @@ struct BinaryOperationImpl
...
@@ -20,21 +20,21 @@ struct BinaryOperationImpl
{
{
typedef
typename
Op
::
ResultType
ResultType
;
typedef
typename
Op
::
ResultType
ResultType
;
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
ResultType
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
ResultType
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
Op
::
apply
(
a
[
i
],
b
[
i
]);
c
[
i
]
=
Op
::
apply
(
a
[
i
],
b
[
i
]);
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
ResultType
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
ResultType
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
Op
::
apply
(
a
[
i
],
b
);
c
[
i
]
=
Op
::
apply
(
a
[
i
],
b
);
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
ResultType
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
ResultType
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -52,7 +52,7 @@ struct UnaryOperationImpl
...
@@ -52,7 +52,7 @@ struct UnaryOperationImpl
{
{
typedef
typename
Op
::
ResultType
ResultType
;
typedef
typename
Op
::
ResultType
ResultType
;
static
void
vector
(
const
PODArray
<
A
>
&
a
,
PODArray
<
ResultType
>
&
c
)
static
void
vector
(
const
std
::
vector
<
A
>
&
a
,
std
::
vector
<
ResultType
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
...
dbms/include/DB/Functions/FunctionsArray.h
浏览文件 @
70385e12
...
@@ -63,9 +63,9 @@ template <typename T>
...
@@ -63,9 +63,9 @@ template <typename T>
struct
ArrayElementNumImpl
struct
ArrayElementNumImpl
{
{
static
void
vector
(
static
void
vector
(
const
PODArray
<
T
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
std
::
vector
<
T
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
ColumnArray
::
Offset_t
index
,
/// Передаётся индекс начиная с нуля, а не с единицы.
const
ColumnArray
::
Offset_t
index
,
/// Передаётся индекс начиная с нуля, а не с единицы.
PODArray
<
T
>
&
result
)
std
::
vector
<
T
>
&
result
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
result
.
resize
(
size
);
result
.
resize
(
size
);
...
@@ -87,9 +87,9 @@ struct ArrayElementNumImpl
...
@@ -87,9 +87,9 @@ struct ArrayElementNumImpl
struct
ArrayElementStringImpl
struct
ArrayElementStringImpl
{
{
static
void
vector
(
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
ColumnString
::
Offsets_t
&
string_offsets
,
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
ColumnString
::
Offsets_t
&
string_offsets
,
const
ColumnArray
::
Offset_t
index
,
/// Передаётся индекс начиная с нуля, а не с единицы.
const
ColumnArray
::
Offset_t
index
,
/// Передаётся индекс начиная с нуля, а не с единицы.
PODArray
<
UInt8
>
&
result_data
,
ColumnArray
::
Offsets_t
&
result_offsets
)
std
::
vector
<
UInt8
>
&
result_data
,
ColumnArray
::
Offsets_t
&
result_offsets
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
result_offsets
.
resize
(
size
);
result_offsets
.
resize
(
size
);
...
@@ -277,9 +277,9 @@ template <typename T, typename IndexConv>
...
@@ -277,9 +277,9 @@ template <typename T, typename IndexConv>
struct
ArrayIndexNumImpl
struct
ArrayIndexNumImpl
{
{
static
void
vector
(
static
void
vector
(
const
PODArray
<
T
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
std
::
vector
<
T
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
T
value
,
const
T
value
,
PODArray
<
typename
IndexConv
::
ResultType
>
&
result
)
std
::
vector
<
typename
IndexConv
::
ResultType
>
&
result
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
result
.
resize
(
size
);
result
.
resize
(
size
);
...
@@ -309,9 +309,9 @@ template <typename IndexConv>
...
@@ -309,9 +309,9 @@ template <typename IndexConv>
struct
ArrayIndexStringImpl
struct
ArrayIndexStringImpl
{
{
static
void
vector
(
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
ColumnString
::
Offsets_t
&
string_offsets
,
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
ColumnString
::
Offsets_t
&
string_offsets
,
const
String
&
value
,
const
String
&
value
,
PODArray
<
typename
IndexConv
::
ResultType
>
&
result
)
std
::
vector
<
typename
IndexConv
::
ResultType
>
&
result
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
size_t
value_size
=
value
.
size
();
size_t
value_size
=
value
.
size
();
...
...
dbms/include/DB/Functions/FunctionsComparison.h
浏览文件 @
70385e12
...
@@ -39,21 +39,21 @@ namespace DB
...
@@ -39,21 +39,21 @@ namespace DB
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
EqualsNumImpl
struct
EqualsNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
==
b
[
i
];
c
[
i
]
=
a
[
i
]
==
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
==
b
;
c
[
i
]
=
a
[
i
]
==
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -69,9 +69,9 @@ struct EqualsNumImpl
...
@@ -69,9 +69,9 @@ struct EqualsNumImpl
struct
EqualsStringImpl
struct
EqualsStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -82,9 +82,9 @@ struct EqualsStringImpl
...
@@ -82,9 +82,9 @@ struct EqualsStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -95,9 +95,9 @@ struct EqualsStringImpl
...
@@ -95,9 +95,9 @@ struct EqualsStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -110,9 +110,9 @@ struct EqualsStringImpl
...
@@ -110,9 +110,9 @@ struct EqualsStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -123,9 +123,9 @@ struct EqualsStringImpl
...
@@ -123,9 +123,9 @@ struct EqualsStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -133,9 +133,9 @@ struct EqualsStringImpl
...
@@ -133,9 +133,9 @@ struct EqualsStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -146,8 +146,8 @@ struct EqualsStringImpl
...
@@ -146,8 +146,8 @@ struct EqualsStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -161,8 +161,8 @@ struct EqualsStringImpl
...
@@ -161,8 +161,8 @@ struct EqualsStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
@@ -183,21 +183,21 @@ struct EqualsStringImpl
...
@@ -183,21 +183,21 @@ struct EqualsStringImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
NotEqualsNumImpl
struct
NotEqualsNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
!=
b
[
i
];
c
[
i
]
=
a
[
i
]
!=
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
!=
b
;
c
[
i
]
=
a
[
i
]
!=
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -213,9 +213,9 @@ struct NotEqualsNumImpl
...
@@ -213,9 +213,9 @@ struct NotEqualsNumImpl
struct
NotEqualsStringImpl
struct
NotEqualsStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -226,9 +226,9 @@ struct NotEqualsStringImpl
...
@@ -226,9 +226,9 @@ struct NotEqualsStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -239,9 +239,9 @@ struct NotEqualsStringImpl
...
@@ -239,9 +239,9 @@ struct NotEqualsStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -254,9 +254,9 @@ struct NotEqualsStringImpl
...
@@ -254,9 +254,9 @@ struct NotEqualsStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -267,9 +267,9 @@ struct NotEqualsStringImpl
...
@@ -267,9 +267,9 @@ struct NotEqualsStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -277,9 +277,9 @@ struct NotEqualsStringImpl
...
@@ -277,9 +277,9 @@ struct NotEqualsStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -290,8 +290,8 @@ struct NotEqualsStringImpl
...
@@ -290,8 +290,8 @@ struct NotEqualsStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -305,8 +305,8 @@ struct NotEqualsStringImpl
...
@@ -305,8 +305,8 @@ struct NotEqualsStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
@@ -327,21 +327,21 @@ struct NotEqualsStringImpl
...
@@ -327,21 +327,21 @@ struct NotEqualsStringImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
LessNumImpl
struct
LessNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
<
b
[
i
];
c
[
i
]
=
a
[
i
]
<
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
<
b
;
c
[
i
]
=
a
[
i
]
<
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -357,9 +357,9 @@ struct LessNumImpl
...
@@ -357,9 +357,9 @@ struct LessNumImpl
struct
LessStringImpl
struct
LessStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -379,9 +379,9 @@ struct LessStringImpl
...
@@ -379,9 +379,9 @@ struct LessStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -401,9 +401,9 @@ struct LessStringImpl
...
@@ -401,9 +401,9 @@ struct LessStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -425,9 +425,9 @@ struct LessStringImpl
...
@@ -425,9 +425,9 @@ struct LessStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -447,9 +447,9 @@ struct LessStringImpl
...
@@ -447,9 +447,9 @@ struct LessStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -460,9 +460,9 @@ struct LessStringImpl
...
@@ -460,9 +460,9 @@ struct LessStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -476,8 +476,8 @@ struct LessStringImpl
...
@@ -476,8 +476,8 @@ struct LessStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -500,8 +500,8 @@ struct LessStringImpl
...
@@ -500,8 +500,8 @@ struct LessStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
@@ -525,21 +525,21 @@ struct LessStringImpl
...
@@ -525,21 +525,21 @@ struct LessStringImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
GreaterNumImpl
struct
GreaterNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
>
b
[
i
];
c
[
i
]
=
a
[
i
]
>
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
>
b
;
c
[
i
]
=
a
[
i
]
>
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -555,9 +555,9 @@ struct GreaterNumImpl
...
@@ -555,9 +555,9 @@ struct GreaterNumImpl
struct
GreaterStringImpl
struct
GreaterStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -577,9 +577,9 @@ struct GreaterStringImpl
...
@@ -577,9 +577,9 @@ struct GreaterStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -599,9 +599,9 @@ struct GreaterStringImpl
...
@@ -599,9 +599,9 @@ struct GreaterStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -623,9 +623,9 @@ struct GreaterStringImpl
...
@@ -623,9 +623,9 @@ struct GreaterStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -645,9 +645,9 @@ struct GreaterStringImpl
...
@@ -645,9 +645,9 @@ struct GreaterStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -658,9 +658,9 @@ struct GreaterStringImpl
...
@@ -658,9 +658,9 @@ struct GreaterStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -674,8 +674,8 @@ struct GreaterStringImpl
...
@@ -674,8 +674,8 @@ struct GreaterStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -698,8 +698,8 @@ struct GreaterStringImpl
...
@@ -698,8 +698,8 @@ struct GreaterStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
@@ -723,21 +723,21 @@ struct GreaterStringImpl
...
@@ -723,21 +723,21 @@ struct GreaterStringImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
LessOrEqualsNumImpl
struct
LessOrEqualsNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
<=
b
[
i
];
c
[
i
]
=
a
[
i
]
<=
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
<=
b
;
c
[
i
]
=
a
[
i
]
<=
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -753,9 +753,9 @@ struct LessOrEqualsNumImpl
...
@@ -753,9 +753,9 @@ struct LessOrEqualsNumImpl
struct
LessOrEqualsStringImpl
struct
LessOrEqualsStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -775,9 +775,9 @@ struct LessOrEqualsStringImpl
...
@@ -775,9 +775,9 @@ struct LessOrEqualsStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -797,9 +797,9 @@ struct LessOrEqualsStringImpl
...
@@ -797,9 +797,9 @@ struct LessOrEqualsStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -821,9 +821,9 @@ struct LessOrEqualsStringImpl
...
@@ -821,9 +821,9 @@ struct LessOrEqualsStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -843,9 +843,9 @@ struct LessOrEqualsStringImpl
...
@@ -843,9 +843,9 @@ struct LessOrEqualsStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -856,9 +856,9 @@ struct LessOrEqualsStringImpl
...
@@ -856,9 +856,9 @@ struct LessOrEqualsStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -872,8 +872,8 @@ struct LessOrEqualsStringImpl
...
@@ -872,8 +872,8 @@ struct LessOrEqualsStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -896,8 +896,8 @@ struct LessOrEqualsStringImpl
...
@@ -896,8 +896,8 @@ struct LessOrEqualsStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
@@ -921,21 +921,21 @@ struct LessOrEqualsStringImpl
...
@@ -921,21 +921,21 @@ struct LessOrEqualsStringImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
GreaterOrEqualsNumImpl
struct
GreaterOrEqualsNumImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
>=
b
[
i
];
c
[
i
]
=
a
[
i
]
>=
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
>=
b
;
c
[
i
]
=
a
[
i
]
>=
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -951,9 +951,9 @@ struct GreaterOrEqualsNumImpl
...
@@ -951,9 +951,9 @@ struct GreaterOrEqualsNumImpl
struct
GreaterOrEqualsStringImpl
struct
GreaterOrEqualsStringImpl
{
{
static
void
string_vector_string_vector
(
static
void
string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -973,9 +973,9 @@ struct GreaterOrEqualsStringImpl
...
@@ -973,9 +973,9 @@ struct GreaterOrEqualsStringImpl
}
}
static
void
string_vector_fixed_string_vector
(
static
void
string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -995,9 +995,9 @@ struct GreaterOrEqualsStringImpl
...
@@ -995,9 +995,9 @@ struct GreaterOrEqualsStringImpl
}
}
static
void
string_vector_constant
(
static
void
string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -1019,9 +1019,9 @@ struct GreaterOrEqualsStringImpl
...
@@ -1019,9 +1019,9 @@ struct GreaterOrEqualsStringImpl
}
}
static
void
fixed_string_vector_string_vector
(
static
void
fixed_string_vector_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -1041,9 +1041,9 @@ struct GreaterOrEqualsStringImpl
...
@@ -1041,9 +1041,9 @@ struct GreaterOrEqualsStringImpl
}
}
static
void
fixed_string_vector_fixed_string_vector
(
static
void
fixed_string_vector_fixed_string_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
for
(
size_t
i
=
0
,
j
=
0
;
i
<
size
;
i
+=
a_n
,
++
j
)
...
@@ -1054,9 +1054,9 @@ struct GreaterOrEqualsStringImpl
...
@@ -1054,9 +1054,9 @@ struct GreaterOrEqualsStringImpl
}
}
static
void
fixed_string_vector_constant
(
static
void
fixed_string_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a_data
.
size
();
size_t
size
=
a_data
.
size
();
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
const
UInt8
*
b_data
=
reinterpret_cast
<
const
UInt8
*>
(
b
.
data
());
...
@@ -1070,8 +1070,8 @@ struct GreaterOrEqualsStringImpl
...
@@ -1070,8 +1070,8 @@ struct GreaterOrEqualsStringImpl
static
void
constant_string_vector
(
static
void
constant_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -1094,8 +1094,8 @@ struct GreaterOrEqualsStringImpl
...
@@ -1094,8 +1094,8 @@ struct GreaterOrEqualsStringImpl
static
void
constant_fixed_string_vector
(
static
void
constant_fixed_string_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c
)
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b_data
.
size
();
size_t
size
=
b_data
.
size
();
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
const
UInt8
*
a_data
=
reinterpret_cast
<
const
UInt8
*>
(
a
.
data
());
...
...
dbms/include/DB/Functions/FunctionsConditional.h
浏览文件 @
70385e12
...
@@ -21,9 +21,9 @@ template <typename T>
...
@@ -21,9 +21,9 @@ template <typename T>
struct
NumIfImpl
struct
NumIfImpl
{
{
static
void
vector_vector
(
static
void
vector_vector
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
PODArray
<
T
>
&
a
,
const
PODArray
<
T
>
&
b
,
const
std
::
vector
<
T
>
&
a
,
const
std
::
vector
<
T
>
&
b
,
PODArray
<
T
>
&
res
)
std
::
vector
<
T
>
&
res
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -31,9 +31,9 @@ struct NumIfImpl
...
@@ -31,9 +31,9 @@ struct NumIfImpl
}
}
static
void
vector_constant
(
static
void
vector_constant
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
PODArray
<
T
>
&
a
,
T
b
,
const
std
::
vector
<
T
>
&
a
,
T
b
,
PODArray
<
T
>
&
res
)
std
::
vector
<
T
>
&
res
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -41,9 +41,9 @@ struct NumIfImpl
...
@@ -41,9 +41,9 @@ struct NumIfImpl
}
}
static
void
constant_vector
(
static
void
constant_vector
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
T
a
,
const
PODArray
<
T
>
&
b
,
T
a
,
const
std
::
vector
<
T
>
&
b
,
PODArray
<
T
>
&
res
)
std
::
vector
<
T
>
&
res
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -51,9 +51,9 @@ struct NumIfImpl
...
@@ -51,9 +51,9 @@ struct NumIfImpl
}
}
static
void
constant_constant
(
static
void
constant_constant
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
T
a
,
T
b
,
T
a
,
T
b
,
PODArray
<
T
>
&
res
)
std
::
vector
<
T
>
&
res
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -65,10 +65,10 @@ struct NumIfImpl
...
@@ -65,10 +65,10 @@ struct NumIfImpl
struct
StringIfImpl
struct
StringIfImpl
{
{
static
void
vector_vector
(
static
void
vector_vector
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
c_offsets
.
resize
(
size
);
c_offsets
.
resize
(
size
);
...
@@ -103,10 +103,10 @@ struct StringIfImpl
...
@@ -103,10 +103,10 @@ struct StringIfImpl
}
}
static
void
vector_constant
(
static
void
vector_constant
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
String
&
b
,
const
String
&
b
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
c_offsets
.
resize
(
size
);
c_offsets
.
resize
(
size
);
...
@@ -139,10 +139,10 @@ struct StringIfImpl
...
@@ -139,10 +139,10 @@ struct StringIfImpl
}
}
static
void
constant_vector
(
static
void
constant_vector
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
String
&
a
,
const
String
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
c_offsets
.
resize
(
size
);
c_offsets
.
resize
(
size
);
...
@@ -175,9 +175,9 @@ struct StringIfImpl
...
@@ -175,9 +175,9 @@ struct StringIfImpl
}
}
static
void
constant_constant
(
static
void
constant_constant
(
const
PODArray
<
UInt8
>
&
cond
,
const
std
::
vector
<
UInt8
>
&
cond
,
const
String
&
a
,
const
String
&
b
,
const
String
&
a
,
const
String
&
b
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
cond
.
size
();
size_t
size
=
cond
.
size
();
c_offsets
.
resize
(
size
);
c_offsets
.
resize
(
size
);
...
@@ -249,7 +249,7 @@ private:
...
@@ -249,7 +249,7 @@ private:
ColumnString
*
col_res
=
new
ColumnString
;
ColumnString
*
col_res
=
new
ColumnString
;
block
.
getByPosition
(
result
).
column
=
col_res
;
block
.
getByPosition
(
result
).
column
=
col_res
;
PODArray
<
UInt8
>
&
res_vec
=
dynamic_cast
<
ColumnUInt8
&>
(
col_res
->
getData
()).
getData
();
std
::
vector
<
UInt8
>
&
res_vec
=
dynamic_cast
<
ColumnUInt8
&>
(
col_res
->
getData
()).
getData
();
ColumnArray
::
Offsets_t
&
res_offsets
=
col_res
->
getOffsets
();
ColumnArray
::
Offsets_t
&
res_offsets
=
col_res
->
getOffsets
();
if
(
col_then
&&
col_else
)
if
(
col_then
&&
col_else
)
...
...
dbms/include/DB/Functions/FunctionsConversion.h
浏览文件 @
70385e12
...
@@ -162,7 +162,7 @@ struct ConvertImpl<FromDataType, DataTypeString, Name>
...
@@ -162,7 +162,7 @@ struct ConvertImpl<FromDataType, DataTypeString, Name>
data_to
.
resize
(
size
*
2
);
data_to
.
resize
(
size
*
2
);
offsets_to
.
resize
(
size
);
offsets_to
.
resize
(
size
);
WriteBufferFromVector
<
UInt8
,
PODArray
<
UInt8
>
>
write_buffer
(
data_to
);
WriteBufferFromVector
<
UInt8
>
write_buffer
(
data_to
);
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
{
{
...
...
dbms/include/DB/Functions/FunctionsDateTime.h
浏览文件 @
70385e12
...
@@ -302,8 +302,8 @@ template <typename DurationType>
...
@@ -302,8 +302,8 @@ template <typename DurationType>
struct
TimeSlotsImpl
struct
TimeSlotsImpl
{
{
static
void
vector_vector
(
static
void
vector_vector
(
const
PODArray
<
UInt32
>
&
starts
,
const
PODArray
<
DurationType
>
&
durations
,
const
std
::
vector
<
UInt32
>
&
starts
,
const
std
::
vector
<
DurationType
>
&
durations
,
PODArray
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
std
::
vector
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
{
{
size_t
size
=
starts
.
size
();
size_t
size
=
starts
.
size
();
...
@@ -324,8 +324,8 @@ struct TimeSlotsImpl
...
@@ -324,8 +324,8 @@ struct TimeSlotsImpl
}
}
static
void
vector_constant
(
static
void
vector_constant
(
const
PODArray
<
UInt32
>
&
starts
,
DurationType
duration
,
const
std
::
vector
<
UInt32
>
&
starts
,
DurationType
duration
,
PODArray
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
std
::
vector
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
{
{
size_t
size
=
starts
.
size
();
size_t
size
=
starts
.
size
();
...
@@ -346,8 +346,8 @@ struct TimeSlotsImpl
...
@@ -346,8 +346,8 @@ struct TimeSlotsImpl
}
}
static
void
constant_vector
(
static
void
constant_vector
(
UInt32
start
,
const
PODArray
<
DurationType
>
&
durations
,
UInt32
start
,
const
std
::
vector
<
DurationType
>
&
durations
,
PODArray
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
std
::
vector
<
UInt32
>
&
result_values
,
ColumnArray
::
Offsets_t
&
result_offsets
)
{
{
size_t
size
=
durations
.
size
();
size_t
size
=
durations
.
size
();
...
...
dbms/include/DB/Functions/FunctionsFormatting.h
浏览文件 @
70385e12
...
@@ -74,7 +74,7 @@ public:
...
@@ -74,7 +74,7 @@ public:
data_to
.
resize
(
size
*
2
);
data_to
.
resize
(
size
*
2
);
offsets_to
.
resize
(
size
);
offsets_to
.
resize
(
size
);
WriteBufferFromVector
<
UInt8
,
PODArray
<
UInt8
>
>
buf_to
(
data_to
);
WriteBufferFromVector
<
UInt8
>
buf_to
(
data_to
);
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
{
{
...
...
dbms/include/DB/Functions/FunctionsLogical.h
浏览文件 @
70385e12
...
@@ -16,21 +16,21 @@ namespace DB
...
@@ -16,21 +16,21 @@ namespace DB
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
AndImpl
struct
AndImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
&&
b
[
i
];
c
[
i
]
=
a
[
i
]
&&
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
&&
b
;
c
[
i
]
=
a
[
i
]
&&
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -46,21 +46,21 @@ struct AndImpl
...
@@ -46,21 +46,21 @@ struct AndImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
OrImpl
struct
OrImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
||
b
[
i
];
c
[
i
]
=
a
[
i
]
||
b
[
i
];
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
a
[
i
]
||
b
;
c
[
i
]
=
a
[
i
]
||
b
;
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -76,21 +76,21 @@ struct OrImpl
...
@@ -76,21 +76,21 @@ struct OrImpl
template
<
typename
A
,
typename
B
>
template
<
typename
A
,
typename
B
>
struct
XorImpl
struct
XorImpl
{
{
static
void
vector_vector
(
const
PODArray
<
A
>
&
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_vector
(
const
std
::
vector
<
A
>
&
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
(
a
[
i
]
&&
!
b
[
i
])
||
(
!
a
[
i
]
&&
b
[
i
]);
c
[
i
]
=
(
a
[
i
]
&&
!
b
[
i
])
||
(
!
a
[
i
]
&&
b
[
i
]);
}
}
static
void
vector_constant
(
const
PODArray
<
A
>
&
a
,
B
b
,
PODArray
<
UInt8
>
&
c
)
static
void
vector_constant
(
const
std
::
vector
<
A
>
&
a
,
B
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c
[
i
]
=
(
a
[
i
]
&&
!
b
)
||
(
!
a
[
i
]
&&
b
);
c
[
i
]
=
(
a
[
i
]
&&
!
b
)
||
(
!
a
[
i
]
&&
b
);
}
}
static
void
constant_vector
(
A
a
,
const
PODArray
<
B
>
&
b
,
PODArray
<
UInt8
>
&
c
)
static
void
constant_vector
(
A
a
,
const
std
::
vector
<
B
>
&
b
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
b
.
size
();
size_t
size
=
b
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -106,7 +106,7 @@ struct XorImpl
...
@@ -106,7 +106,7 @@ struct XorImpl
template
<
typename
A
>
template
<
typename
A
>
struct
NotImpl
struct
NotImpl
{
{
static
void
vector
(
const
PODArray
<
A
>
&
a
,
PODArray
<
UInt8
>
&
c
)
static
void
vector
(
const
std
::
vector
<
A
>
&
a
,
std
::
vector
<
UInt8
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
...
dbms/include/DB/Functions/FunctionsMiscellaneous.h
浏览文件 @
70385e12
...
@@ -44,7 +44,7 @@ namespace DB
...
@@ -44,7 +44,7 @@ namespace DB
template
<
typename
T
>
template
<
typename
T
>
static
void
numWidthVector
(
const
PODArray
<
T
>
&
a
,
PODArray
<
UInt64
>
&
c
)
static
void
numWidthVector
(
const
std
::
vector
<
T
>
&
a
,
std
::
vector
<
UInt64
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -81,7 +81,7 @@ inline UInt64 floatWidth(double x)
...
@@ -81,7 +81,7 @@ inline UInt64 floatWidth(double x)
}
}
template
<
typename
T
>
template
<
typename
T
>
static
void
floatWidthVector
(
const
PODArray
<
T
>
&
a
,
PODArray
<
UInt64
>
&
c
)
static
void
floatWidthVector
(
const
std
::
vector
<
T
>
&
a
,
std
::
vector
<
UInt64
>
&
c
)
{
{
size_t
size
=
a
.
size
();
size_t
size
=
a
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -94,8 +94,8 @@ static void floatWidthConstant(T a, UInt64 & c)
...
@@ -94,8 +94,8 @@ static void floatWidthConstant(T a, UInt64 & c)
c
=
floatWidth
(
a
);
c
=
floatWidth
(
a
);
}
}
template
<
>
inline
void
numWidthVector
<
Float64
>
(
const
PODArray
<
Float64
>
&
a
,
PODArray
<
UInt64
>
&
c
)
{
floatWidthVector
(
a
,
c
);
}
template
<
>
inline
void
numWidthVector
<
Float64
>
(
const
std
::
vector
<
Float64
>
&
a
,
std
::
vector
<
UInt64
>
&
c
)
{
floatWidthVector
(
a
,
c
);
}
template
<
>
inline
void
numWidthVector
<
Float32
>
(
const
PODArray
<
Float32
>
&
a
,
PODArray
<
UInt64
>
&
c
)
{
floatWidthVector
(
a
,
c
);
}
template
<
>
inline
void
numWidthVector
<
Float32
>
(
const
std
::
vector
<
Float32
>
&
a
,
std
::
vector
<
UInt64
>
&
c
)
{
floatWidthVector
(
a
,
c
);
}
template
<
>
inline
void
numWidthConstant
<
Float64
>
(
Float64
a
,
UInt64
&
c
)
{
floatWidthConstant
(
a
,
c
);
}
template
<
>
inline
void
numWidthConstant
<
Float64
>
(
Float64
a
,
UInt64
&
c
)
{
floatWidthConstant
(
a
,
c
);
}
template
<
>
inline
void
numWidthConstant
<
Float32
>
(
Float32
a
,
UInt64
&
c
)
{
floatWidthConstant
(
a
,
c
);
}
template
<
>
inline
void
numWidthConstant
<
Float32
>
(
Float32
a
,
UInt64
&
c
)
{
floatWidthConstant
(
a
,
c
);
}
...
@@ -112,7 +112,7 @@ static inline UInt64 stringWidth(const UInt8 * pos, const UInt8 * end)
...
@@ -112,7 +112,7 @@ static inline UInt64 stringWidth(const UInt8 * pos, const UInt8 * end)
return
res
;
return
res
;
}
}
static
inline
void
stringWidthVector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt64
>
&
res
)
static
inline
void
stringWidthVector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -124,7 +124,7 @@ static inline void stringWidthVector(const PODArray<UInt8> & data, const ColumnA
...
@@ -124,7 +124,7 @@ static inline void stringWidthVector(const PODArray<UInt8> & data, const ColumnA
}
}
}
}
static
inline
void
stringWidthFixedVector
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt64
>
&
res
)
static
inline
void
stringWidthFixedVector
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
data
.
size
()
/
n
;
size_t
size
=
data
.
size
()
/
n
;
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
...
dbms/include/DB/Functions/FunctionsRandom.h
浏览文件 @
70385e12
...
@@ -43,7 +43,7 @@ struct RandImpl
...
@@ -43,7 +43,7 @@ struct RandImpl
{
{
typedef
UInt32
ReturnType
;
typedef
UInt32
ReturnType
;
static
void
execute
(
PODArray
<
ReturnType
>
&
res
)
static
void
execute
(
std
::
vector
<
ReturnType
>
&
res
)
{
{
drand48_data
rand_state
;
drand48_data
rand_state
;
detail
::
seed
(
rand_state
);
detail
::
seed
(
rand_state
);
...
@@ -62,7 +62,7 @@ struct Rand64Impl
...
@@ -62,7 +62,7 @@ struct Rand64Impl
{
{
typedef
UInt64
ReturnType
;
typedef
UInt64
ReturnType
;
static
void
execute
(
PODArray
<
ReturnType
>
&
res
)
static
void
execute
(
std
::
vector
<
ReturnType
>
&
res
)
{
{
drand48_data
rand_state
;
drand48_data
rand_state
;
detail
::
seed
(
rand_state
);
detail
::
seed
(
rand_state
);
...
...
dbms/include/DB/Functions/FunctionsString.h
浏览文件 @
70385e12
...
@@ -45,8 +45,8 @@ namespace DB
...
@@ -45,8 +45,8 @@ namespace DB
template
<
bool
negative
=
false
>
template
<
bool
negative
=
false
>
struct
EmptyImpl
struct
EmptyImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res
)
std
::
vector
<
UInt8
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
ColumnArray
::
Offset_t
prev_offset
=
1
;
ColumnArray
::
Offset_t
prev_offset
=
1
;
...
@@ -57,14 +57,14 @@ struct EmptyImpl
...
@@ -57,14 +57,14 @@ struct EmptyImpl
}
}
}
}
static
void
vector_fixed_to_constant
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_constant
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
UInt8
&
res
)
UInt8
&
res
)
{
{
res
=
negative
^
(
n
==
0
);
res
=
negative
^
(
n
==
0
);
}
}
static
void
vector_fixed_to_vector
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_vector
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res
)
std
::
vector
<
UInt8
>
&
res
)
{
{
}
}
...
@@ -73,7 +73,7 @@ struct EmptyImpl
...
@@ -73,7 +73,7 @@ struct EmptyImpl
res
=
negative
^
(
data
.
empty
());
res
=
negative
^
(
data
.
empty
());
}
}
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res
)
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
std
::
vector
<
UInt8
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
ColumnArray
::
Offset_t
prev_offset
=
0
;
ColumnArray
::
Offset_t
prev_offset
=
0
;
...
@@ -95,8 +95,8 @@ struct EmptyImpl
...
@@ -95,8 +95,8 @@ struct EmptyImpl
*/
*/
struct
LengthImpl
struct
LengthImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -105,14 +105,14 @@ struct LengthImpl
...
@@ -105,14 +105,14 @@ struct LengthImpl
:
(
offsets
[
i
]
-
1
-
offsets
[
i
-
1
]);
:
(
offsets
[
i
]
-
1
-
offsets
[
i
-
1
]);
}
}
static
void
vector_fixed_to_constant
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_constant
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
UInt64
&
res
)
UInt64
&
res
)
{
{
res
=
n
;
res
=
n
;
}
}
static
void
vector_fixed_to_vector
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_vector
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
}
}
...
@@ -121,7 +121,7 @@ struct LengthImpl
...
@@ -121,7 +121,7 @@ struct LengthImpl
res
=
data
.
size
();
res
=
data
.
size
();
}
}
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt64
>
&
res
)
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
...
@@ -143,8 +143,8 @@ struct LengthImpl
...
@@ -143,8 +143,8 @@ struct LengthImpl
*/
*/
struct
LengthUTF8Impl
struct
LengthUTF8Impl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -159,13 +159,13 @@ struct LengthUTF8Impl
...
@@ -159,13 +159,13 @@ struct LengthUTF8Impl
}
}
}
}
static
void
vector_fixed_to_constant
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_constant
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
UInt64
&
res
)
UInt64
&
res
)
{
{
}
}
static
void
vector_fixed_to_vector
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed_to_vector
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
size_t
size
=
data
.
size
()
/
n
;
size_t
size
=
data
.
size
()
/
n
;
...
@@ -186,7 +186,7 @@ struct LengthUTF8Impl
...
@@ -186,7 +186,7 @@ struct LengthUTF8Impl
++
res
;
++
res
;
}
}
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt64
>
&
res
)
static
void
array
(
const
ColumnArray
::
Offsets_t
&
offsets
,
std
::
vector
<
UInt64
>
&
res
)
{
{
throw
Exception
(
"Cannot apply function lengthUTF8 to Array argument"
,
ErrorCodes
::
ILLEGAL_TYPE_OF_ARGUMENT
);
throw
Exception
(
"Cannot apply function lengthUTF8 to Array argument"
,
ErrorCodes
::
ILLEGAL_TYPE_OF_ARGUMENT
);
}
}
...
@@ -203,16 +203,16 @@ struct LengthUTF8Impl
...
@@ -203,16 +203,16 @@ struct LengthUTF8Impl
template
<
int
F
(
int
)>
template
<
int
F
(
int
)>
struct
LowerUpperImpl
struct
LowerUpperImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
res_offsets
.
assign
(
offsets
)
;
res_offsets
=
offsets
;
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
...
@@ -242,16 +242,16 @@ private:
...
@@ -242,16 +242,16 @@ private:
template
<
int
F
(
int
)>
template
<
int
F
(
int
)>
struct
LowerUpperUTF8Impl
struct
LowerUpperUTF8Impl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
res_offsets
.
assign
(
offsets
)
;
res_offsets
=
offsets
;
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
array
(
&*
data
.
begin
(),
&*
data
.
end
(),
&*
res_data
.
begin
());
...
@@ -291,11 +291,11 @@ private:
...
@@ -291,11 +291,11 @@ private:
*/
*/
struct
ReverseImpl
struct
ReverseImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
res_offsets
.
assign
(
offsets
)
;
res_offsets
=
offsets
;
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
ColumnArray
::
Offset_t
prev_offset
=
0
;
ColumnArray
::
Offset_t
prev_offset
=
0
;
...
@@ -308,8 +308,8 @@ struct ReverseImpl
...
@@ -308,8 +308,8 @@ struct ReverseImpl
}
}
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
size_t
size
=
data
.
size
()
/
n
;
size_t
size
=
data
.
size
()
/
n
;
...
@@ -334,11 +334,11 @@ struct ReverseImpl
...
@@ -334,11 +334,11 @@ struct ReverseImpl
*/
*/
struct
ReverseUTF8Impl
struct
ReverseUTF8Impl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
resize
(
data
.
size
());
res_data
.
resize
(
data
.
size
());
res_offsets
.
assign
(
offsets
)
;
res_offsets
=
offsets
;
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
ColumnArray
::
Offset_t
prev_offset
=
0
;
ColumnArray
::
Offset_t
prev_offset
=
0
;
...
@@ -374,8 +374,8 @@ struct ReverseUTF8Impl
...
@@ -374,8 +374,8 @@ struct ReverseUTF8Impl
}
}
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
throw
Exception
(
"Cannot apply function reverseUTF8 to fixed string."
,
ErrorCodes
::
ILLEGAL_COLUMN
);
throw
Exception
(
"Cannot apply function reverseUTF8 to fixed string."
,
ErrorCodes
::
ILLEGAL_COLUMN
);
}
}
...
@@ -417,9 +417,9 @@ struct ReverseUTF8Impl
...
@@ -417,9 +417,9 @@ struct ReverseUTF8Impl
struct
ConcatImpl
struct
ConcatImpl
{
{
static
void
vector_vector
(
static
void
vector_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
()
-
size
);
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
()
-
size
);
...
@@ -443,9 +443,9 @@ struct ConcatImpl
...
@@ -443,9 +443,9 @@ struct ConcatImpl
}
}
static
void
vector_fixed_vector
(
static
void
vector_fixed_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
...
@@ -471,13 +471,13 @@ struct ConcatImpl
...
@@ -471,13 +471,13 @@ struct ConcatImpl
}
}
static
void
vector_constant
(
static
void
vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
vector
<
UInt8
>
&
a_data
,
const
ColumnArray
::
Offsets_t
&
a_offsets
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
a_offsets
.
size
();
size_t
size
=
a_offsets
.
size
();
c_data
.
resize
(
a_data
.
size
()
+
b
.
size
()
*
size
);
c_data
.
resize
(
a_data
.
size
()
+
b
.
size
()
*
size
);
c_offsets
.
assign
(
a_offsets
)
;
c_offsets
=
a_offsets
;
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c_offsets
[
i
]
+=
b
.
size
()
*
(
i
+
1
);
c_offsets
[
i
]
+=
b
.
size
()
*
(
i
+
1
);
...
@@ -496,9 +496,9 @@ struct ConcatImpl
...
@@ -496,9 +496,9 @@ struct ConcatImpl
}
}
static
void
fixed_vector_vector
(
static
void
fixed_vector_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
...
@@ -522,9 +522,9 @@ struct ConcatImpl
...
@@ -522,9 +522,9 @@ struct ConcatImpl
}
}
static
void
fixed_vector_fixed_vector
(
static
void
fixed_vector_fixed_vector
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c_data
)
std
::
vector
<
UInt8
>
&
c_data
)
{
{
size_t
size
=
a_data
.
size
()
/
a_n
;
size_t
size
=
a_data
.
size
()
/
a_n
;
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
c_data
.
resize
(
a_data
.
size
()
+
b_data
.
size
());
...
@@ -538,9 +538,9 @@ struct ConcatImpl
...
@@ -538,9 +538,9 @@ struct ConcatImpl
}
}
static
void
fixed_vector_constant
(
static
void
fixed_vector_constant
(
const
PODArray
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
vector
<
UInt8
>
&
a_data
,
ColumnArray
::
Offset_t
a_n
,
const
std
::
string
&
b
,
const
std
::
string
&
b
,
PODArray
<
UInt8
>
&
c_data
)
std
::
vector
<
UInt8
>
&
c_data
)
{
{
size_t
size
=
a_data
.
size
()
/
a_n
;
size_t
size
=
a_data
.
size
()
/
a_n
;
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
ColumnArray
::
Offset_t
b_n
=
b
.
size
();
...
@@ -556,12 +556,12 @@ struct ConcatImpl
...
@@ -556,12 +556,12 @@ struct ConcatImpl
static
void
constant_vector
(
static
void
constant_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
const
std
::
vector
<
UInt8
>
&
b_data
,
const
ColumnArray
::
Offsets_t
&
b_offsets
,
PODArray
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
std
::
vector
<
UInt8
>
&
c_data
,
ColumnArray
::
Offsets_t
&
c_offsets
)
{
{
size_t
size
=
b_offsets
.
size
();
size_t
size
=
b_offsets
.
size
();
c_data
.
resize
(
b_data
.
size
()
+
a
.
size
()
*
size
);
c_data
.
resize
(
b_data
.
size
()
+
a
.
size
()
*
size
);
c_offsets
.
assign
(
b_offsets
)
;
c_offsets
=
b_offsets
;
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
for
(
size_t
i
=
0
;
i
<
size
;
++
i
)
c_offsets
[
i
]
+=
a
.
size
()
*
(
i
+
1
);
c_offsets
[
i
]
+=
a
.
size
()
*
(
i
+
1
);
...
@@ -581,8 +581,8 @@ struct ConcatImpl
...
@@ -581,8 +581,8 @@ struct ConcatImpl
static
void
constant_fixed_vector
(
static
void
constant_fixed_vector
(
const
std
::
string
&
a
,
const
std
::
string
&
a
,
const
PODArray
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
const
std
::
vector
<
UInt8
>
&
b_data
,
ColumnArray
::
Offset_t
b_n
,
PODArray
<
UInt8
>
&
c_data
)
std
::
vector
<
UInt8
>
&
c_data
)
{
{
size_t
size
=
b_data
.
size
()
/
b_n
;
size_t
size
=
b_data
.
size
()
/
b_n
;
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
ColumnArray
::
Offset_t
a_n
=
a
.
size
();
...
@@ -610,9 +610,9 @@ struct ConcatImpl
...
@@ -610,9 +610,9 @@ struct ConcatImpl
*/
*/
struct
SubstringImpl
struct
SubstringImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
size_t
start
,
size_t
length
,
size_t
start
,
size_t
length
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
reserve
(
data
.
size
());
res_data
.
reserve
(
data
.
size
());
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -641,9 +641,9 @@ struct SubstringImpl
...
@@ -641,9 +641,9 @@ struct SubstringImpl
}
}
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
size_t
start
,
size_t
length
,
size_t
start
,
size_t
length
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
if
(
length
==
0
||
start
+
length
>
n
+
1
)
if
(
length
==
0
||
start
+
length
>
n
+
1
)
throw
Exception
(
"Index out of bound for function substring of fixed size value"
,
ErrorCodes
::
ARGUMENT_OUT_OF_BOUND
);
throw
Exception
(
"Index out of bound for function substring of fixed size value"
,
ErrorCodes
::
ARGUMENT_OUT_OF_BOUND
);
...
@@ -672,9 +672,9 @@ struct SubstringImpl
...
@@ -672,9 +672,9 @@ struct SubstringImpl
*/
*/
struct
SubstringUTF8Impl
struct
SubstringUTF8Impl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
size_t
start
,
size_t
length
,
size_t
start
,
size_t
length
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
reserve
(
data
.
size
());
res_data
.
reserve
(
data
.
size
());
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -729,9 +729,9 @@ struct SubstringUTF8Impl
...
@@ -729,9 +729,9 @@ struct SubstringUTF8Impl
}
}
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
ColumnArray
::
Offset_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
ColumnArray
::
Offset_t
n
,
size_t
start
,
size_t
length
,
size_t
start
,
size_t
length
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
throw
Exception
(
"Cannot apply function substringUTF8 to fixed string."
,
ErrorCodes
::
ILLEGAL_COLUMN
);
throw
Exception
(
"Cannot apply function substringUTF8 to fixed string."
,
ErrorCodes
::
ILLEGAL_COLUMN
);
}
}
...
...
dbms/include/DB/Functions/FunctionsStringSearch.h
浏览文件 @
70385e12
...
@@ -41,9 +41,9 @@ struct PositionImpl
...
@@ -41,9 +41,9 @@ struct PositionImpl
typedef
UInt64
ResultType
;
typedef
UInt64
ResultType
;
/// Предполагается, что res нужного размера и инициализирован нулями.
/// Предполагается, что res нужного размера и инициализирован нулями.
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
std
::
string
&
needle
,
const
std
::
string
&
needle
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
const
UInt8
*
begin
=
&
data
[
0
];
const
UInt8
*
begin
=
&
data
[
0
];
const
UInt8
*
pos
=
begin
;
const
UInt8
*
pos
=
begin
;
...
@@ -83,9 +83,9 @@ struct PositionUTF8Impl
...
@@ -83,9 +83,9 @@ struct PositionUTF8Impl
{
{
typedef
UInt64
ResultType
;
typedef
UInt64
ResultType
;
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
std
::
string
&
needle
,
const
std
::
string
&
needle
,
PODArray
<
UInt64
>
&
res
)
std
::
vector
<
UInt64
>
&
res
)
{
{
const
UInt8
*
begin
=
&
data
[
0
];
const
UInt8
*
begin
=
&
data
[
0
];
const
UInt8
*
pos
=
begin
;
const
UInt8
*
pos
=
begin
;
...
@@ -260,9 +260,9 @@ struct MatchImpl
...
@@ -260,9 +260,9 @@ struct MatchImpl
{
{
typedef
UInt8
ResultType
;
typedef
UInt8
ResultType
;
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
const
std
::
string
&
pattern
,
const
std
::
string
&
pattern
,
PODArray
<
UInt8
>
&
res
)
std
::
vector
<
UInt8
>
&
res
)
{
{
String
strstr_pattern
;
String
strstr_pattern
;
/// Простой случай, когда выражение LIKE сводится к поиску подстроки в строке
/// Простой случай, когда выражение LIKE сводится к поиску подстроки в строке
...
...
dbms/include/DB/Functions/FunctionsURL.h
浏览文件 @
70385e12
...
@@ -261,8 +261,8 @@ struct ExtractWWW
...
@@ -261,8 +261,8 @@ struct ExtractWWW
template
<
typename
Extractor
>
template
<
typename
Extractor
>
struct
ExtractSubstringImpl
struct
ExtractSubstringImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
reserve
(
data
.
size
()
*
Extractor
::
getReserveLengthForElement
());
res_data
.
reserve
(
data
.
size
()
*
Extractor
::
getReserveLengthForElement
());
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -298,8 +298,8 @@ struct ExtractSubstringImpl
...
@@ -298,8 +298,8 @@ struct ExtractSubstringImpl
res_data
.
assign
(
start
,
length
);
res_data
.
assign
(
start
,
length
);
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
throw
Exception
(
"Column of type FixedString is not supported by URL functions"
,
ErrorCodes
::
ILLEGAL_COLUMN
);
throw
Exception
(
"Column of type FixedString is not supported by URL functions"
,
ErrorCodes
::
ILLEGAL_COLUMN
);
}
}
...
@@ -311,8 +311,8 @@ struct ExtractSubstringImpl
...
@@ -311,8 +311,8 @@ struct ExtractSubstringImpl
template
<
typename
Extractor
>
template
<
typename
Extractor
>
struct
CutSubstringImpl
struct
CutSubstringImpl
{
{
static
void
vector
(
const
PODArray
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
static
void
vector
(
const
std
::
vector
<
UInt8
>
&
data
,
const
ColumnArray
::
Offsets_t
&
offsets
,
PODArray
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
std
::
vector
<
UInt8
>
&
res_data
,
ColumnArray
::
Offsets_t
&
res_offsets
)
{
{
res_data
.
reserve
(
data
.
size
());
res_data
.
reserve
(
data
.
size
());
size_t
size
=
offsets
.
size
();
size_t
size
=
offsets
.
size
();
...
@@ -350,8 +350,8 @@ struct CutSubstringImpl
...
@@ -350,8 +350,8 @@ struct CutSubstringImpl
res_data
.
erase
(
start
-
data
.
data
(),
length
);
res_data
.
erase
(
start
-
data
.
data
(),
length
);
}
}
static
void
vector_fixed
(
const
PODArray
<
UInt8
>
&
data
,
size_t
n
,
static
void
vector_fixed
(
const
std
::
vector
<
UInt8
>
&
data
,
size_t
n
,
PODArray
<
UInt8
>
&
res_data
)
std
::
vector
<
UInt8
>
&
res_data
)
{
{
throw
Exception
(
"Column of type FixedString is not supported by URL functions"
,
ErrorCodes
::
ILLEGAL_COLUMN
);
throw
Exception
(
"Column of type FixedString is not supported by URL functions"
,
ErrorCodes
::
ILLEGAL_COLUMN
);
}
}
...
...
dbms/include/DB/IO/WriteBufferFromVector.h
浏览文件 @
70385e12
...
@@ -14,10 +14,11 @@ namespace DB
...
@@ -14,10 +14,11 @@ namespace DB
/** Инициализируется вектором. Пишет данные в него. Когда вектор закончится - увеличивает его размер в два раза.
/** Инициализируется вектором. Пишет данные в него. Когда вектор закончится - увеличивает его размер в два раза.
* CharType - char или unsigned char.
* CharType - char или unsigned char.
*/
*/
template
<
typename
CharType
,
typename
VectorType
=
std
::
vector
<
CharType
>
>
template
<
typename
CharType
>
class
WriteBufferFromVector
:
public
WriteBuffer
class
WriteBufferFromVector
:
public
WriteBuffer
{
{
private:
private:
typedef
std
::
vector
<
CharType
>
VectorType
;
VectorType
&
vector
;
VectorType
&
vector
;
void
nextImpl
()
void
nextImpl
()
...
...
dbms/src/Common/tests/pod_array.cpp
已删除
100644 → 0
浏览文件 @
c3c69f44
#include <iostream>
#include <iomanip>
#include <vector>
#include <cassert>
#include <Poco/NumberFormatter.h>
#include <DB/Core/Types.h>
#include <DB/Common/PODArray.h>
#include <statdaemons/Stopwatch.h>
int
main
(
int
argc
,
char
**
argv
)
{
try
{
typedef
UInt16
Value
;
typedef
DB
::
PODArray
<
Value
>
Arr
;
std
::
cerr
<<
std
::
fixed
<<
std
::
setprecision
(
3
)
<<
std
::
endl
;
{
Arr
arr
;
assert
(
arr
.
size
()
==
0
);
arr
.
push_back
(
1
);
assert
(
arr
.
size
()
==
1
);
arr
.
clear
();
assert
(
arr
.
size
()
==
0
);
arr
.
reserve
(
1000000
);
assert
(
arr
.
capacity
()
>=
1000000
);
arr
.
resize
(
10
);
assert
(
arr
.
size
()
==
10
);
assert
(
arr
.
capacity
()
>=
1000000
);
arr
.
front
()
=
12
;
arr
.
back
()
=
34
;
arr
[
5
]
=
56
;
Arr
arr2
(
10
);
arr2
.
front
()
=
12
;
arr2
.
back
()
=
34
;
arr2
[
5
]
=
56
;
arr
.
insert
(
arr2
.
begin
(),
arr2
.
end
());
assert
(
arr
.
size
()
==
20
);
assert
(
arr
.
capacity
()
>=
1000000
);
assert
(
arr
[
0
]
==
12
);
assert
(
arr
[
9
]
==
34
);
assert
(
arr
[
5
]
==
56
);
assert
(
arr
[
10
]
==
12
);
assert
(
arr
[
19
]
==
34
);
assert
(
arr
[
15
]
==
56
);
Arr
().
swap
(
arr
);
assert
(
arr
.
size
()
==
0
);
assert
(
arr
.
capacity
()
<
1000000
);
arr
.
resize
(
4090
);
arr
.
insert
(
arr2
.
begin
(),
arr2
.
end
());
assert
(
arr
.
size
()
==
4100
);
assert
(
arr
.
capacity
()
==
8192
);
assert
(
arr
[
4090
]
==
12
);
assert
(
arr
[
4099
]
==
34
);
assert
(
arr
[
4095
]
==
56
);
}
{
Arr
arr
(
4096
);
arr
.
push_back
(
123
);
std
::
cerr
<<
"size: "
<<
arr
.
size
()
<<
", capacity: "
<<
arr
.
capacity
()
<<
std
::
endl
;
for
(
Arr
::
const_iterator
it
=
arr
.
begin
();
it
!=
arr
.
end
();
++
it
)
std
::
cerr
<<
(
it
!=
arr
.
begin
()
?
", "
:
""
)
<<
*
it
;
std
::
cerr
<<
std
::
endl
;
}
{
Arr
arr
;
for
(
size_t
i
=
0
;
i
<
10000
;
++
i
)
arr
.
push_back
(
i
);
std
::
cerr
<<
"size: "
<<
arr
.
size
()
<<
", capacity: "
<<
arr
.
capacity
()
<<
std
::
endl
;
for
(
Arr
::
const_iterator
it
=
arr
.
begin
();
it
!=
arr
.
end
();
++
it
)
std
::
cerr
<<
(
it
!=
arr
.
begin
()
?
", "
:
""
)
<<
*
it
;
std
::
cerr
<<
std
::
endl
;
}
{
Arr
arr
;
arr
.
resize
(
10000
);
for
(
size_t
i
=
0
;
i
<
10000
;
++
i
)
arr
[
i
]
=
i
;
std
::
cerr
<<
"size: "
<<
arr
.
size
()
<<
", capacity: "
<<
arr
.
capacity
()
<<
std
::
endl
;
for
(
Arr
::
const_iterator
it
=
arr
.
begin
();
it
!=
arr
.
end
();
++
it
)
std
::
cerr
<<
(
it
!=
arr
.
begin
()
?
", "
:
""
)
<<
*
it
;
std
::
cerr
<<
std
::
endl
;
}
{
Arr
arr
;
size_t
n
=
100000000
;
Stopwatch
watch
;
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
arr
.
push_back
(
i
);
watch
.
stop
();
std
::
cerr
<<
"size: "
<<
arr
.
size
()
<<
", capacity: "
<<
arr
.
capacity
()
<<
std
::
endl
;
std
::
cerr
<<
"PODArray: "
<<
watch
.
elapsedSeconds
()
<<
" sec., "
<<
n
/
watch
.
elapsedSeconds
()
<<
" elems/sec., "
<<
n
*
sizeof
(
Value
)
/
watch
.
elapsedSeconds
()
/
1000000
<<
" MB/sec."
<<
std
::
endl
;
}
{
std
::
vector
<
Value
>
arr
;
size_t
n
=
100000000
;
Stopwatch
watch
;
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
arr
.
push_back
(
i
);
watch
.
stop
();
std
::
cerr
<<
"size: "
<<
arr
.
size
()
<<
", capacity: "
<<
arr
.
capacity
()
<<
std
::
endl
;
std
::
cerr
<<
"std::vector: "
<<
watch
.
elapsedSeconds
()
<<
" sec., "
<<
n
/
watch
.
elapsedSeconds
()
<<
" elems/sec., "
<<
n
*
sizeof
(
Value
)
/
watch
.
elapsedSeconds
()
/
1000000
<<
" MB/sec."
<<
std
::
endl
;
}
}
catch
(
const
DB
::
Exception
&
e
)
{
std
::
cerr
<<
e
.
displayText
()
<<
std
::
endl
;
return
1
;
}
return
0
;
}
dbms/src/DataStreams/tests/aggregating_stream.cpp
浏览文件 @
70385e12
...
@@ -60,7 +60,7 @@ int main(int argc, char ** argv)
...
@@ -60,7 +60,7 @@ int main(int argc, char ** argv)
column_x
.
type
=
new
DB
::
DataTypeInt16
;
column_x
.
type
=
new
DB
::
DataTypeInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
column_x
.
column
=
x
;
column_x
.
column
=
x
;
DB
::
PODArray
<
Int16
>
&
vec_x
=
x
->
getData
();
std
::
vector
<
Int16
>
&
vec_x
=
x
->
getData
();
vec_x
.
resize
(
n
);
vec_x
.
resize
(
n
);
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
...
...
dbms/src/Interpreters/sortBlock.cpp
浏览文件 @
70385e12
...
@@ -42,10 +42,9 @@ void sortBlock(Block & block, const SortDescription & description)
...
@@ -42,10 +42,9 @@ void sortBlock(Block & block, const SortDescription & description)
/// Если столбец сортировки один
/// Если столбец сортировки один
if
(
description
.
size
()
==
1
)
if
(
description
.
size
()
==
1
)
{
{
IColumn
::
Permutation
perm
;
IColumn
::
Permutation
perm
=
(
!
description
[
0
].
column_name
.
empty
()
(
!
description
[
0
].
column_name
.
empty
()
?
block
.
getByName
(
description
[
0
].
column_name
).
column
?
block
.
getByName
(
description
[
0
].
column_name
).
column
:
block
.
getByPosition
(
description
[
0
].
column_number
).
column
)
->
getPermutation
(
perm
);
:
block
.
getByPosition
(
description
[
0
].
column_number
).
column
)
->
getPermutation
();
if
(
description
[
0
].
direction
==
-
1
)
if
(
description
[
0
].
direction
==
-
1
)
for
(
size_t
i
=
0
,
size
=
perm
.
size
();
i
<
size
/
2
;
++
i
)
for
(
size_t
i
=
0
,
size
=
perm
.
size
();
i
<
size
/
2
;
++
i
)
...
...
dbms/src/Interpreters/tests/aggregate.cpp
浏览文件 @
70385e12
...
@@ -54,7 +54,7 @@ int main(int argc, char ** argv)
...
@@ -54,7 +54,7 @@ int main(int argc, char ** argv)
column_x
.
type
=
new
DB
::
DataTypeInt16
;
column_x
.
type
=
new
DB
::
DataTypeInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
column_x
.
column
=
x
;
column_x
.
column
=
x
;
DB
::
PODArray
<
Int16
>
&
vec_x
=
x
->
getData
();
std
::
vector
<
Int16
>
&
vec_x
=
x
->
getData
();
vec_x
.
resize
(
n
);
vec_x
.
resize
(
n
);
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
...
...
dbms/src/Interpreters/tests/expression.cpp
浏览文件 @
70385e12
...
@@ -124,7 +124,7 @@ int main(int argc, char ** argv)
...
@@ -124,7 +124,7 @@ int main(int argc, char ** argv)
column_x
.
type
=
new
DB
::
DataTypeInt16
;
column_x
.
type
=
new
DB
::
DataTypeInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
DB
::
ColumnInt16
*
x
=
new
DB
::
ColumnInt16
;
column_x
.
column
=
x
;
column_x
.
column
=
x
;
DB
::
PODArray
<
Int16
>
&
vec_x
=
x
->
getData
();
std
::
vector
<
Int16
>
&
vec_x
=
x
->
getData
();
vec_x
.
resize
(
n
);
vec_x
.
resize
(
n
);
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录