Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
7465d0c7
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7465d0c7
编写于
1月 11, 2021
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/develop' into feature/sync
上级
cf87f800
4bbef7c9
变更
136
展开全部
显示空白变更内容
内联
并排
Showing
136 changed file
with
6245 addition
and
3439 deletion
+6245
-3439
packaging/tools/install.sh
packaging/tools/install.sh
+2
-2
packaging/tools/install_power.sh
packaging/tools/install_power.sh
+2
-2
packaging/tools/post.sh
packaging/tools/post.sh
+2
-2
src/client/inc/tschemautil.h
src/client/inc/tschemautil.h
+2
-2
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+1
-1
src/client/src/tscAsync.c
src/client/src/tscAsync.c
+1
-2
src/client/src/tscLocal.c
src/client/src/tscLocal.c
+1
-1
src/client/src/tscLocalMerge.c
src/client/src/tscLocalMerge.c
+4
-4
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+122
-112
src/client/src/tscPrepare.c
src/client/src/tscPrepare.c
+10
-10
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+21
-20
src/client/src/tscSchemaUtil.c
src/client/src/tscSchemaUtil.c
+33
-15
src/client/src/tscServer.c
src/client/src/tscServer.c
+5
-7
src/client/src/tscSql.c
src/client/src/tscSql.c
+16
-0
src/client/src/tscStream.c
src/client/src/tscStream.c
+23
-7
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+4
-3
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+2
-1
src/common/inc/tglobal.h
src/common/inc/tglobal.h
+1
-1
src/common/inc/tvariant.h
src/common/inc/tvariant.h
+4
-3
src/common/src/tglobal.c
src/common/src/tglobal.c
+1
-1
src/common/src/ttypes.c
src/common/src/ttypes.c
+271
-154
src/common/src/tvariant.c
src/common/src/tvariant.c
+231
-276
src/cq/src/cqMain.c
src/cq/src/cqMain.c
+7
-2
src/dnode/src/dnodeSystem.c
src/dnode/src/dnodeSystem.c
+1
-1
src/inc/taos.h
src/inc/taos.h
+4
-0
src/inc/taosdef.h
src/inc/taosdef.h
+32
-17
src/inc/taoserror.h
src/inc/taoserror.h
+1
-0
src/inc/ttokendef.h
src/inc/ttokendef.h
+108
-106
src/inc/ttype.h
src/inc/ttype.h
+50
-21
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+16
-0
src/kit/taosdemox/insert.json
src/kit/taosdemox/insert.json
+2
-1
src/kit/taosdemox/taosdemox.c
src/kit/taosdemox/taosdemox.c
+76
-23
src/mnode/src/mnodeTable.c
src/mnode/src/mnodeTable.c
+27
-7
src/os/inc/osString.h
src/os/inc/osString.h
+1
-1
src/os/inc/osSysinfo.h
src/os/inc/osSysinfo.h
+1
-0
src/os/src/detail/osString.c
src/os/src/detail/osString.c
+3
-3
src/os/src/linux/linuxEnv.c
src/os/src/linux/linuxEnv.c
+19
-1
src/query/inc/qArithmeticOperator.h
src/query/inc/qArithmeticOperator.h
+5
-5
src/query/inc/qExecutor.h
src/query/inc/qExecutor.h
+1
-1
src/query/inc/qUtil.h
src/query/inc/qUtil.h
+3
-4
src/query/inc/queryLog.h
src/query/inc/queryLog.h
+1
-2
src/query/inc/sql.y
src/query/inc/sql.y
+7
-0
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+262
-182
src/query/src/qArithmeticOperator.c
src/query/src/qArithmeticOperator.c
+2735
-300
src/query/src/qAst.c
src/query/src/qAst.c
+24
-24
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+36
-69
src/query/src/qFilterfunc.c
src/query/src/qFilterfunc.c
+347
-510
src/query/src/qHistogram.c
src/query/src/qHistogram.c
+3
-3
src/query/src/qParserImpl.c
src/query/src/qParserImpl.c
+60
-50
src/query/src/qTokenizer.c
src/query/src/qTokenizer.c
+1
-0
src/query/src/qTsbuf.c
src/query/src/qTsbuf.c
+3
-3
src/query/src/sql.c
src/query/src/sql.c
+1158
-1146
src/query/tests/astTest.cpp
src/query/tests/astTest.cpp
+2
-2
src/query/tests/tsBufTest.cpp
src/query/tests/tsBufTest.cpp
+21
-21
src/query/tests/unitTest.cpp
src/query/tests/unitTest.cpp
+34
-34
src/tsdb/src/tsdbRWHelper.c
src/tsdb/src/tsdbRWHelper.c
+2
-2
src/util/inc/tstoken.h
src/util/inc/tstoken.h
+1
-2
src/util/src/tcompare.c
src/util/src/tcompare.c
+32
-2
tests/script/general/parser/alter.sim
tests/script/general/parser/alter.sim
+4
-4
tests/script/general/parser/alter1.sim
tests/script/general/parser/alter1.sim
+2
-2
tests/script/general/parser/alter_stable.sim
tests/script/general/parser/alter_stable.sim
+1
-1
tests/script/general/parser/auto_create_tb.sim
tests/script/general/parser/auto_create_tb.sim
+2
-2
tests/script/general/parser/auto_create_tb_drop_tb.sim
tests/script/general/parser/auto_create_tb_drop_tb.sim
+2
-2
tests/script/general/parser/binary_escapeCharacter.sim
tests/script/general/parser/binary_escapeCharacter.sim
+1
-1
tests/script/general/parser/col_arithmetic_operation.sim
tests/script/general/parser/col_arithmetic_operation.sim
+1
-1
tests/script/general/parser/columnValue.sim
tests/script/general/parser/columnValue.sim
+2
-1
tests/script/general/parser/columnValue_bigint.sim
tests/script/general/parser/columnValue_bigint.sim
+3
-3
tests/script/general/parser/columnValue_bool.sim
tests/script/general/parser/columnValue_bool.sim
+1
-1
tests/script/general/parser/columnValue_double.sim
tests/script/general/parser/columnValue_double.sim
+1
-1
tests/script/general/parser/columnValue_float.sim
tests/script/general/parser/columnValue_float.sim
+109
-96
tests/script/general/parser/columnValue_int.sim
tests/script/general/parser/columnValue_int.sim
+1
-1
tests/script/general/parser/columnValue_smallint.sim
tests/script/general/parser/columnValue_smallint.sim
+1
-1
tests/script/general/parser/columnValue_tinyint.sim
tests/script/general/parser/columnValue_tinyint.sim
+1
-1
tests/script/general/parser/columnValue_unsign.sim
tests/script/general/parser/columnValue_unsign.sim
+109
-0
tests/script/general/parser/commit.sim
tests/script/general/parser/commit.sim
+3
-3
tests/script/general/parser/create_db.sim
tests/script/general/parser/create_db.sim
+1
-1
tests/script/general/parser/create_mt.sim
tests/script/general/parser/create_mt.sim
+1
-1
tests/script/general/parser/create_tb.sim
tests/script/general/parser/create_tb.sim
+1
-1
tests/script/general/parser/dbtbnameValidate.sim
tests/script/general/parser/dbtbnameValidate.sim
+1
-1
tests/script/general/parser/fill.sim
tests/script/general/parser/fill.sim
+1
-1
tests/script/general/parser/fill_stb.sim
tests/script/general/parser/fill_stb.sim
+1
-1
tests/script/general/parser/fill_us.sim
tests/script/general/parser/fill_us.sim
+1
-1
tests/script/general/parser/first_last.sim
tests/script/general/parser/first_last.sim
+3
-3
tests/script/general/parser/first_last_query.sim
tests/script/general/parser/first_last_query.sim
+1
-1
tests/script/general/parser/function.sim
tests/script/general/parser/function.sim
+2
-2
tests/script/general/parser/groupby.sim
tests/script/general/parser/groupby.sim
+1
-1
tests/script/general/parser/import.sim
tests/script/general/parser/import.sim
+2
-2
tests/script/general/parser/import_commit1.sim
tests/script/general/parser/import_commit1.sim
+1
-1
tests/script/general/parser/import_commit2.sim
tests/script/general/parser/import_commit2.sim
+1
-1
tests/script/general/parser/import_commit3.sim
tests/script/general/parser/import_commit3.sim
+1
-1
tests/script/general/parser/insert_multiTbl.sim
tests/script/general/parser/insert_multiTbl.sim
+1
-1
tests/script/general/parser/insert_tb.sim
tests/script/general/parser/insert_tb.sim
+3
-3
tests/script/general/parser/interp.sim
tests/script/general/parser/interp.sim
+1
-1
tests/script/general/parser/interp_test.sim
tests/script/general/parser/interp_test.sim
+1
-1
tests/script/general/parser/join.sim
tests/script/general/parser/join.sim
+1
-1
tests/script/general/parser/join_multivnode.sim
tests/script/general/parser/join_multivnode.sim
+1
-1
tests/script/general/parser/lastrow.sim
tests/script/general/parser/lastrow.sim
+2
-2
tests/script/general/parser/lastrow_query.sim
tests/script/general/parser/lastrow_query.sim
+1
-1
tests/script/general/parser/limit.sim
tests/script/general/parser/limit.sim
+2
-2
tests/script/general/parser/limit1.sim
tests/script/general/parser/limit1.sim
+1
-1
tests/script/general/parser/limit1_stb.sim
tests/script/general/parser/limit1_stb.sim
+1
-1
tests/script/general/parser/limit1_tb.sim
tests/script/general/parser/limit1_tb.sim
+1
-1
tests/script/general/parser/limit1_tblocks100.sim
tests/script/general/parser/limit1_tblocks100.sim
+1
-1
tests/script/general/parser/limit2.sim
tests/script/general/parser/limit2.sim
+1
-1
tests/script/general/parser/limit2_query.sim
tests/script/general/parser/limit2_query.sim
+1
-1
tests/script/general/parser/limit2_tblocks100.sim
tests/script/general/parser/limit2_tblocks100.sim
+2
-2
tests/script/general/parser/limit_stb.sim
tests/script/general/parser/limit_stb.sim
+1
-1
tests/script/general/parser/limit_tb.sim
tests/script/general/parser/limit_tb.sim
+1
-1
tests/script/general/parser/mixed_blocks.sim
tests/script/general/parser/mixed_blocks.sim
+1
-1
tests/script/general/parser/nchar.sim
tests/script/general/parser/nchar.sim
+1
-1
tests/script/general/parser/null_char.sim
tests/script/general/parser/null_char.sim
+4
-7
tests/script/general/parser/projection_limit_offset.sim
tests/script/general/parser/projection_limit_offset.sim
+1
-1
tests/script/general/parser/selectResNum.sim
tests/script/general/parser/selectResNum.sim
+3
-3
tests/script/general/parser/select_across_vnodes.sim
tests/script/general/parser/select_across_vnodes.sim
+1
-1
tests/script/general/parser/select_from_cache_disk.sim
tests/script/general/parser/select_from_cache_disk.sim
+2
-2
tests/script/general/parser/select_with_tags.sim
tests/script/general/parser/select_with_tags.sim
+1
-1
tests/script/general/parser/set_tag_vals.sim
tests/script/general/parser/set_tag_vals.sim
+1
-1
tests/script/general/parser/single_row_in_tb.sim
tests/script/general/parser/single_row_in_tb.sim
+1
-1
tests/script/general/parser/single_row_in_tb_query.sim
tests/script/general/parser/single_row_in_tb_query.sim
+1
-1
tests/script/general/parser/sliding.sim
tests/script/general/parser/sliding.sim
+1
-1
tests/script/general/parser/slimit.sim
tests/script/general/parser/slimit.sim
+2
-2
tests/script/general/parser/slimit1.sim
tests/script/general/parser/slimit1.sim
+2
-2
tests/script/general/parser/slimit1_query.sim
tests/script/general/parser/slimit1_query.sim
+1
-1
tests/script/general/parser/slimit_alter_tags.sim
tests/script/general/parser/slimit_alter_tags.sim
+2
-2
tests/script/general/parser/slimit_query.sim
tests/script/general/parser/slimit_query.sim
+1
-1
tests/script/general/parser/tags_dynamically_specifiy.sim
tests/script/general/parser/tags_dynamically_specifiy.sim
+2
-2
tests/script/general/parser/tags_filter.sim
tests/script/general/parser/tags_filter.sim
+1
-1
tests/script/general/parser/tbnameIn.sim
tests/script/general/parser/tbnameIn.sim
+1
-1
tests/script/general/parser/tbnameIn_query.sim
tests/script/general/parser/tbnameIn_query.sim
+1
-1
tests/script/general/parser/testSuite.sim
tests/script/general/parser/testSuite.sim
+60
-60
tests/script/general/parser/timestamp.sim
tests/script/general/parser/timestamp.sim
+3
-3
tests/script/general/parser/timestamp_query.sim
tests/script/general/parser/timestamp_query.sim
+1
-1
tests/script/general/parser/topbot.sim
tests/script/general/parser/topbot.sim
+4
-4
tests/script/general/parser/union.sim
tests/script/general/parser/union.sim
+2
-2
tests/script/general/parser/where.sim
tests/script/general/parser/where.sim
+1
-1
tests/tsim/src/simExe.c
tests/tsim/src/simExe.c
+12
-0
未找到文件。
packaging/tools/install.sh
浏览文件 @
7465d0c7
...
@@ -348,7 +348,7 @@ function set_ipAsFqdn() {
...
@@ -348,7 +348,7 @@ function set_ipAsFqdn() {
}
}
function
local_fqdn_check
()
{
function
local_fqdn_check
()
{
#serverFqdn=$(hostname
-f
)
#serverFqdn=$(hostname)
echo
echo
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
echo
...
@@ -911,7 +911,7 @@ function install_TDengine() {
...
@@ -911,7 +911,7 @@ function install_TDengine() {
## ==============================Main program starts from here============================
## ==============================Main program starts from here============================
serverFqdn
=
$(
hostname
-f
)
serverFqdn
=
$(
hostname
)
if
[
"
$verType
"
==
"server"
]
;
then
if
[
"
$verType
"
==
"server"
]
;
then
# Install server and client
# Install server and client
if
[
-x
${
bin_dir
}
/taosd
]
;
then
if
[
-x
${
bin_dir
}
/taosd
]
;
then
...
...
packaging/tools/install_power.sh
浏览文件 @
7465d0c7
...
@@ -345,7 +345,7 @@ function set_ipAsFqdn() {
...
@@ -345,7 +345,7 @@ function set_ipAsFqdn() {
}
}
function
local_fqdn_check
()
{
function
local_fqdn_check
()
{
#serverFqdn=$(hostname
-f
)
#serverFqdn=$(hostname)
echo
echo
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
echo
...
@@ -881,7 +881,7 @@ function install_PowerDB() {
...
@@ -881,7 +881,7 @@ function install_PowerDB() {
## ==============================Main program starts from here============================
## ==============================Main program starts from here============================
serverFqdn
=
$(
hostname
-f
)
serverFqdn
=
$(
hostname
)
if
[
"
$verType
"
==
"server"
]
;
then
if
[
"
$verType
"
==
"server"
]
;
then
# Install server and client
# Install server and client
if
[
-x
${
bin_dir
}
/powerd
]
;
then
if
[
-x
${
bin_dir
}
/powerd
]
;
then
...
...
packaging/tools/post.sh
浏览文件 @
7465d0c7
...
@@ -228,7 +228,7 @@ function set_ipAsFqdn() {
...
@@ -228,7 +228,7 @@ function set_ipAsFqdn() {
}
}
function
local_fqdn_check
()
{
function
local_fqdn_check
()
{
#serverFqdn=$(hostname
-f
)
#serverFqdn=$(hostname)
echo
echo
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
-e
-n
"System hostname is:
${
GREEN
}
$serverFqdn
${
NC
}
"
echo
echo
...
@@ -492,5 +492,5 @@ function install_TDengine() {
...
@@ -492,5 +492,5 @@ function install_TDengine() {
## ==============================Main program starts from here============================
## ==============================Main program starts from here============================
serverFqdn
=
$(
hostname
-f
)
serverFqdn
=
$(
hostname
)
install_TDengine
install_TDengine
src/client/inc/tschemautil.h
浏览文件 @
7465d0c7
...
@@ -26,7 +26,7 @@ extern "C" {
...
@@ -26,7 +26,7 @@ extern "C" {
#define VALIDNUMOFCOLS(x) ((x) >= TSDB_MIN_COLUMNS && (x) <= TSDB_MAX_COLUMNS)
#define VALIDNUMOFCOLS(x) ((x) >= TSDB_MIN_COLUMNS && (x) <= TSDB_MAX_COLUMNS)
//struct SSchema;
#define VALIDNUMOFTAGS(x) ((x) >= 0 && (x) <= TSDB_MAX_TAGS)
/**
/**
* get the number of tags of this table
* get the number of tags of this table
...
@@ -91,7 +91,7 @@ SSchema* tscGetColumnSchemaById(STableMeta* pTableMeta, int16_t colId);
...
@@ -91,7 +91,7 @@ SSchema* tscGetColumnSchemaById(STableMeta* pTableMeta, int16_t colId);
* @param numOfCols
* @param numOfCols
* @return
* @return
*/
*/
bool
isValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCol
s
);
bool
isValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCols
,
int32_t
numOfTag
s
);
/**
/**
* get the schema for the "tbname" column. it is a built column
* get the schema for the "tbname" column. it is a built column
...
...
src/client/inc/tsclient.h
浏览文件 @
7465d0c7
...
@@ -460,7 +460,7 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
...
@@ -460,7 +460,7 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
}
else
{
}
else
{
assert
(
bytes
==
tDataTypeDesc
[
type
].
nSize
);
assert
(
bytes
==
tDataTypeDesc
[
type
].
nSize
);
pRes
->
tsrow
[
columnIndex
]
=
isNull
(
pData
,
type
)
?
NULL
:
(
unsigned
char
*
)
&
pInfo
->
pSqlExpr
->
param
[
1
].
i64
Key
;
pRes
->
tsrow
[
columnIndex
]
=
isNull
(
pData
,
type
)
?
NULL
:
(
unsigned
char
*
)
&
pInfo
->
pSqlExpr
->
param
[
1
].
i64
;
pRes
->
length
[
columnIndex
]
=
bytes
;
pRes
->
length
[
columnIndex
]
=
bytes
;
}
}
}
else
{
}
else
{
...
...
src/client/src/tscAsync.c
浏览文件 @
7465d0c7
...
@@ -388,7 +388,7 @@ void tscAsyncResultOnError(SSqlObj *pSql) {
...
@@ -388,7 +388,7 @@ void tscAsyncResultOnError(SSqlObj *pSql) {
}
}
assert
(
pSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
);
assert
(
pSql
->
res
.
code
!=
TSDB_CODE_SUCCESS
);
tscError
(
"%p
add into queued async res
, code:%s"
,
pSql
,
tstrerror
(
pSql
->
res
.
code
));
tscError
(
"%p
invoke user specified function due to error occured
, code:%s"
,
pSql
,
tstrerror
(
pSql
->
res
.
code
));
SSqlRes
*
pRes
=
&
pSql
->
res
;
SSqlRes
*
pRes
=
&
pSql
->
res
;
if
(
pSql
->
fp
==
NULL
||
pSql
->
fetchFp
==
NULL
){
if
(
pSql
->
fp
==
NULL
||
pSql
->
fetchFp
==
NULL
){
...
@@ -521,7 +521,6 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
...
@@ -521,7 +521,6 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) {
}
}
(
*
pSql
->
fp
)(
pSql
->
param
,
pSql
,
code
);
(
*
pSql
->
fp
)(
pSql
->
param
,
pSql
,
code
);
return
;
return
;
}
}
...
...
src/client/src/tscLocal.c
浏览文件 @
7465d0c7
...
@@ -204,7 +204,7 @@ static int32_t tscProcessDescribeTable(SSqlObj *pSql) {
...
@@ -204,7 +204,7 @@ static int32_t tscProcessDescribeTable(SSqlObj *pSql) {
assert
(
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
!=
NULL
);
assert
(
tscGetMetaInfo
(
pQueryInfo
,
0
)
->
pTableMeta
!=
NULL
);
const
int32_t
NUM_OF_DESC_TABLE_COLUMNS
=
4
;
const
int32_t
NUM_OF_DESC_TABLE_COLUMNS
=
4
;
const
int32_t
TYPE_COLUMN_LENGTH
=
16
;
const
int32_t
TYPE_COLUMN_LENGTH
=
20
;
const
int32_t
NOTE_COLUMN_MIN_LENGTH
=
8
;
const
int32_t
NOTE_COLUMN_MIN_LENGTH
=
8
;
int32_t
noteFieldLen
=
NOTE_COLUMN_MIN_LENGTH
;
int32_t
noteFieldLen
=
NOTE_COLUMN_MIN_LENGTH
;
...
...
src/client/src/tscLocalMerge.c
浏览文件 @
7465d0c7
...
@@ -95,11 +95,11 @@ static void tscInitSqlContext(SSqlCmd *pCmd, SLocalReducer *pReducer, tOrderDesc
...
@@ -95,11 +95,11 @@ static void tscInitSqlContext(SSqlCmd *pCmd, SLocalReducer *pReducer, tOrderDesc
int32_t
functionId
=
pExpr
->
functionId
;
int32_t
functionId
=
pExpr
->
functionId
;
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
||
functionId
==
TSDB_FUNC_DIFF
)
{
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
||
functionId
==
TSDB_FUNC_DIFF
)
{
pCtx
->
ptsOutputBuf
=
pReducer
->
pCtx
[
0
].
aOutputBuf
;
pCtx
->
ptsOutputBuf
=
pReducer
->
pCtx
[
0
].
aOutputBuf
;
pCtx
->
param
[
2
].
i64
Key
=
pQueryInfo
->
order
.
order
;
pCtx
->
param
[
2
].
i64
=
pQueryInfo
->
order
.
order
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
1
].
i64
Key
=
pQueryInfo
->
order
.
orderColId
;
pCtx
->
param
[
1
].
i64
=
pQueryInfo
->
order
.
orderColId
;
}
else
if
(
functionId
==
TSDB_FUNC_APERCT
)
{
}
else
if
(
functionId
==
TSDB_FUNC_APERCT
)
{
pCtx
->
param
[
0
].
i64
Key
=
pExpr
->
param
[
0
].
i64Key
;
pCtx
->
param
[
0
].
i64
=
pExpr
->
param
[
0
].
i64
;
pCtx
->
param
[
0
].
nType
=
pExpr
->
param
[
0
].
nType
;
pCtx
->
param
[
0
].
nType
=
pExpr
->
param
[
0
].
nType
;
}
}
...
@@ -1064,7 +1064,7 @@ static void doExecuteSecondaryMerge(SSqlCmd *pCmd, SLocalReducer *pLocalReducer,
...
@@ -1064,7 +1064,7 @@ static void doExecuteSecondaryMerge(SSqlCmd *pCmd, SLocalReducer *pLocalReducer,
}
}
}
else
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
)
{
}
else
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
j
);
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
j
);
pCtx
->
param
[
0
].
i64
Key
=
pExpr
->
param
[
0
].
i64Key
;
pCtx
->
param
[
0
].
i64
=
pExpr
->
param
[
0
].
i64
;
}
}
pCtx
->
currentStage
=
MERGE_STAGE
;
pCtx
->
currentStage
=
MERGE_STAGE
;
...
...
src/client/src/tscParseInsert.c
浏览文件 @
7465d0c7
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include "os.h"
#include "os.h"
#include "ttype.h"
#include "hash.h"
#include "hash.h"
#include "tscUtil.h"
#include "tscUtil.h"
#include "tschemautil.h"
#include "tschemautil.h"
...
@@ -40,46 +41,9 @@ enum {
...
@@ -40,46 +41,9 @@ enum {
static
int32_t
tscAllocateMemIfNeed
(
STableDataBlocks
*
pDataBlock
,
int32_t
rowSize
,
int32_t
*
numOfRows
);
static
int32_t
tscAllocateMemIfNeed
(
STableDataBlocks
*
pDataBlock
,
int32_t
rowSize
,
int32_t
*
numOfRows
);
static
int32_t
tscToInteger
(
SStrToken
*
pToken
,
int64_t
*
value
,
char
**
endPtr
)
{
if
(
pToken
->
n
==
0
)
{
return
TK_ILLEGAL
;
}
int32_t
radix
=
10
;
if
(
pToken
->
type
==
TK_HEX
)
{
radix
=
16
;
}
else
if
(
pToken
->
type
==
TK_BIN
)
{
radix
=
2
;
}
errno
=
0
;
*
value
=
strtoll
(
pToken
->
z
,
endPtr
,
radix
);
if
(
**
endPtr
==
'e'
||
**
endPtr
==
'E'
||
**
endPtr
==
'.'
)
{
errno
=
0
;
double
v
=
round
(
strtod
(
pToken
->
z
,
endPtr
));
if
(
v
>
INT64_MAX
||
v
<=
INT64_MIN
)
{
errno
=
ERANGE
;
}
else
{
*
value
=
(
int64_t
)
v
;
}
}
// not a valid integer number, return error
if
(
*
endPtr
-
pToken
->
z
!=
pToken
->
n
)
{
return
TK_ILLEGAL
;
}
return
pToken
->
type
;
}
static
int32_t
tscToDouble
(
SStrToken
*
pToken
,
double
*
value
,
char
**
endPtr
)
{
static
int32_t
tscToDouble
(
SStrToken
*
pToken
,
double
*
value
,
char
**
endPtr
)
{
if
(
pToken
->
n
==
0
)
{
return
TK_ILLEGAL
;
}
errno
=
0
;
errno
=
0
;
*
value
=
strtod
(
pToken
->
z
,
endPtr
);
*
value
=
strto
l
d
(
pToken
->
z
,
endPtr
);
// not a valid integer number, return error
// not a valid integer number, return error
if
((
*
endPtr
-
pToken
->
z
)
!=
pToken
->
n
)
{
if
((
*
endPtr
-
pToken
->
z
)
!=
pToken
->
n
)
{
...
@@ -163,22 +127,31 @@ int tsParseTime(SStrToken *pToken, int64_t *time, char **next, char *error, int1
...
@@ -163,22 +127,31 @@ int tsParseTime(SStrToken *pToken, int64_t *time, char **next, char *error, int1
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
// todo extract the null value check
static
bool
isNullStr
(
SStrToken
*
pToken
)
{
return
(
pToken
->
type
==
TK_NULL
)
||
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
));
}
int32_t
tsParseOneColumnData
(
SSchema
*
pSchema
,
SStrToken
*
pToken
,
char
*
payload
,
char
*
msg
,
char
**
str
,
bool
primaryKey
,
int32_t
tsParseOneColumnData
(
SSchema
*
pSchema
,
SStrToken
*
pToken
,
char
*
payload
,
char
*
msg
,
char
**
str
,
bool
primaryKey
,
int16_t
timePrec
)
{
int16_t
timePrec
)
{
int64_t
iv
;
int64_t
iv
;
int32_t
numType
;
int32_t
ret
;
char
*
endptr
=
NULL
;
char
*
endptr
=
NULL
;
errno
=
0
;
// clear the previous existed error information
if
(
IS_NUMERIC_TYPE
(
pSchema
->
type
)
&&
pToken
->
n
==
0
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid numeric data"
,
pToken
->
z
);
}
switch
(
pSchema
->
type
)
{
switch
(
pSchema
->
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
{
// bool
case
TSDB_DATA_TYPE_BOOL
:
{
// bool
if
(
isNullStr
(
pToken
))
{
*
((
uint8_t
*
)
payload
)
=
TSDB_DATA_BOOL_NULL
;
}
else
{
if
((
pToken
->
type
==
TK_BOOL
||
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
))
{
if
((
pToken
->
type
==
TK_BOOL
||
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
))
{
if
(
strncmp
(
pToken
->
z
,
"true"
,
pToken
->
n
)
==
0
)
{
if
(
strncmp
(
pToken
->
z
,
"true"
,
pToken
->
n
)
==
0
)
{
*
(
uint8_t
*
)
payload
=
TSDB_TRUE
;
*
(
uint8_t
*
)
payload
=
TSDB_TRUE
;
}
else
if
(
strncmp
(
pToken
->
z
,
"false"
,
pToken
->
n
)
==
0
)
{
}
else
if
(
strncmp
(
pToken
->
z
,
"false"
,
pToken
->
n
)
==
0
)
{
*
(
uint8_t
*
)
payload
=
TSDB_FALSE
;
*
(
uint8_t
*
)
payload
=
TSDB_FALSE
;
}
else
if
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
)
{
*
(
uint8_t
*
)
payload
=
TSDB_DATA_BOOL_NULL
;
}
else
{
}
else
{
return
tscSQLSyntaxErrMsg
(
msg
,
"invalid bool data"
,
pToken
->
z
);
return
tscSQLSyntaxErrMsg
(
msg
,
"invalid bool data"
,
pToken
->
z
);
}
}
...
@@ -188,61 +161,85 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -188,61 +161,85 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
}
else
if
(
pToken
->
type
==
TK_FLOAT
)
{
}
else
if
(
pToken
->
type
==
TK_FLOAT
)
{
double
dv
=
strtod
(
pToken
->
z
,
NULL
);
double
dv
=
strtod
(
pToken
->
z
,
NULL
);
*
(
uint8_t
*
)
payload
=
(
int8_t
)((
dv
==
0
)
?
TSDB_FALSE
:
TSDB_TRUE
);
*
(
uint8_t
*
)
payload
=
(
int8_t
)((
dv
==
0
)
?
TSDB_FALSE
:
TSDB_TRUE
);
}
else
if
(
pToken
->
type
==
TK_NULL
)
{
*
(
uint8_t
*
)
payload
=
TSDB_DATA_BOOL_NULL
;
}
else
{
}
else
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid bool data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"invalid bool data"
,
pToken
->
z
);
}
}
}
break
;
break
;
}
}
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_TINYINT
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int8_t
*
)
payload
)
=
TSDB_DATA_TINYINT_NULL
;
*
((
uint8_t
*
)
payload
)
=
TSDB_DATA_TINYINT_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int8_t
*
)
payload
)
=
TSDB_DATA_TINYINT_NULL
;
}
else
{
}
else
{
numType
=
tscToInteger
(
pToken
,
&
iv
,
&
endptr
);
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
true
);
if
(
TK_ILLEGAL
==
numType
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid tinyint data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"invalid tinyint data"
,
pToken
->
z
);
}
else
if
(
errno
==
ERANGE
||
iv
>
INT8_MAX
||
iv
<=
INT8_MIN
)
{
}
else
if
(
!
IS_VALID_TINYINT
(
iv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"tinyint data overflow"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"data overflow"
,
pToken
->
z
);
}
*
((
uint8_t
*
)
payload
)
=
(
uint8_t
)
iv
;
}
break
;
case
TSDB_DATA_TYPE_UTINYINT
:
if
(
isNullStr
(
pToken
))
{
*
((
uint8_t
*
)
payload
)
=
TSDB_DATA_UTINYINT_NULL
;
}
else
{
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
false
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid unsigned tinyint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UTINYINT
(
iv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"unsigned tinyint data overflow"
,
pToken
->
z
);
}
}
*
((
int8_t
*
)
payload
)
=
(
int8_t
)
iv
;
*
((
uint8_t
*
)
payload
)
=
(
u
int8_t
)
iv
;
}
}
break
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int16_t
*
)
payload
)
=
TSDB_DATA_SMALLINT_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int16_t
*
)
payload
)
=
TSDB_DATA_SMALLINT_NULL
;
*
((
int16_t
*
)
payload
)
=
TSDB_DATA_SMALLINT_NULL
;
}
else
{
}
else
{
numType
=
tscToInteger
(
pToken
,
&
iv
,
&
endptr
);
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
true
);
if
(
TK_ILLEGAL
==
numType
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid smallint data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"invalid smallint data"
,
pToken
->
z
);
}
else
if
(
errno
==
ERANGE
||
iv
>
INT16_MAX
||
iv
<=
INT16_MIN
)
{
}
else
if
(
!
IS_VALID_SMALLINT
(
iv
)
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"smallint data overflow"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"smallint data overflow"
,
pToken
->
z
);
}
}
*
((
int16_t
*
)
payload
)
=
(
int16_t
)
iv
;
*
((
int16_t
*
)
payload
)
=
(
int16_t
)
iv
;
}
}
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
if
(
isNullStr
(
pToken
))
{
*
((
uint16_t
*
)
payload
)
=
TSDB_DATA_USMALLINT_NULL
;
}
else
{
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
false
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid unsigned smallint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_USMALLINT
(
iv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"unsigned smallint data overflow"
,
pToken
->
z
);
}
*
((
uint16_t
*
)
payload
)
=
(
uint16_t
)
iv
;
}
break
;
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_INT_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_INT_NULL
;
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_INT_NULL
;
}
else
{
}
else
{
numType
=
tscToInteger
(
pToken
,
&
iv
,
&
endptr
);
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
true
);
if
(
TK_ILLEGAL
==
numType
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid int data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"invalid int data"
,
pToken
->
z
);
}
else
if
(
errno
==
ERANGE
||
iv
>
INT32_MAX
||
iv
<=
INT32_MIN
)
{
}
else
if
(
!
IS_VALID_INT
(
iv
)
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"int data overflow"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"int data overflow"
,
pToken
->
z
);
}
}
...
@@ -251,17 +248,30 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -251,17 +248,30 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
break
;
break
;
case
TSDB_DATA_TYPE_UINT
:
if
(
isNullStr
(
pToken
))
{
*
((
uint32_t
*
)
payload
)
=
TSDB_DATA_UINT_NULL
;
}
else
{
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
false
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid unsigned int data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UINT
(
iv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"unsigned int data overflow"
,
pToken
->
z
);
}
*
((
uint32_t
*
)
payload
)
=
(
uint32_t
)
iv
;
}
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_BIGINT_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_BIGINT_NULL
;
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_BIGINT_NULL
;
}
else
{
}
else
{
numType
=
tscToInteger
(
pToken
,
&
iv
,
&
endptr
);
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
true
);
if
(
TK_ILLEGAL
==
numType
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid bigint data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"invalid bigint data"
,
pToken
->
z
);
}
else
if
(
errno
==
ERANGE
||
iv
==
INT64_MIN
)
{
}
else
if
(
!
IS_VALID_BIGINT
(
iv
)
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"bigint data overflow"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"bigint data overflow"
,
pToken
->
z
);
}
}
...
@@ -269,11 +279,23 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -269,11 +279,23 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
}
}
break
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
if
(
isNullStr
(
pToken
))
{
*
((
uint64_t
*
)
payload
)
=
TSDB_DATA_UBIGINT_NULL
;
}
else
{
ret
=
tStrToInteger
(
pToken
->
z
,
pToken
->
type
,
pToken
->
n
,
&
iv
,
false
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
msg
,
"invalid unsigned bigint data"
,
pToken
->
z
);
}
else
if
(
!
IS_VALID_UBIGINT
((
uint64_t
)
iv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"unsigned bigint data overflow"
,
pToken
->
z
);
}
*
((
uint64_t
*
)
payload
)
=
iv
;
}
break
;
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_FLOAT
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_FLOAT_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_FLOAT_NULL
;
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_FLOAT_NULL
;
}
else
{
}
else
{
double
dv
;
double
dv
;
...
@@ -281,24 +303,16 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -281,24 +303,16 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
return
tscInvalidSQLErrMsg
(
msg
,
"illegal float data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"illegal float data"
,
pToken
->
z
);
}
}
float
fv
=
(
float
)
dv
;
if
(((
dv
==
HUGE_VAL
||
dv
==
-
HUGE_VAL
)
&&
errno
==
ERANGE
)
||
dv
>
FLT_MAX
||
dv
<
-
FLT_MAX
||
isinf
(
dv
)
||
isnan
(
dv
))
{
if
(((
dv
==
HUGE_VAL
||
dv
==
-
HUGE_VAL
)
&&
errno
==
ERANGE
)
||
(
fv
>
FLT_MAX
||
fv
<
-
FLT_MAX
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"illegal float data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"illegal float data"
,
pToken
->
z
);
}
}
if
(
isinf
(
fv
)
||
isnan
(
fv
))
{
*
((
float
*
)
payload
)
=
(
float
)
dv
;
*
((
int32_t
*
)
payload
)
=
TSDB_DATA_FLOAT_NULL
;
}
*
((
float
*
)
payload
)
=
fv
;
}
}
break
;
break
;
case
TSDB_DATA_TYPE_DOUBLE
:
case
TSDB_DATA_TYPE_DOUBLE
:
if
(
pToken
->
type
==
TK_NULL
)
{
if
(
isNullStr
(
pToken
))
{
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_DOUBLE_NULL
;
}
else
if
((
pToken
->
type
==
TK_STRING
)
&&
(
pToken
->
n
!=
0
)
&&
(
strncasecmp
(
TSDB_DATA_NULL_STR_L
,
pToken
->
z
,
pToken
->
n
)
==
0
))
{
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_DOUBLE_NULL
;
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_DOUBLE_NULL
;
}
else
{
}
else
{
double
dv
;
double
dv
;
...
@@ -306,16 +320,12 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -306,16 +320,12 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
return
tscInvalidSQLErrMsg
(
msg
,
"illegal double data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"illegal double data"
,
pToken
->
z
);
}
}
if
(((
dv
==
HUGE_VAL
||
dv
==
-
HUGE_VAL
)
&&
errno
==
ERANGE
)
||
(
dv
>
DBL_MAX
||
dv
<
-
DBL_MAX
))
{
if
(((
dv
==
HUGE_VAL
||
dv
==
-
HUGE_VAL
)
&&
errno
==
ERANGE
)
||
isinf
(
dv
)
||
isnan
(
dv
))
{
return
tscInvalidSQLErrMsg
(
msg
,
"illegal double data"
,
pToken
->
z
);
return
tscInvalidSQLErrMsg
(
msg
,
"illegal double data"
,
pToken
->
z
);
}
}
if
(
isinf
(
dv
)
||
isnan
(
dv
))
{
*
((
int64_t
*
)
payload
)
=
TSDB_DATA_DOUBLE_NULL
;
}
else
{
*
((
double
*
)
payload
)
=
dv
;
*
((
double
*
)
payload
)
=
dv
;
}
}
}
break
;
break
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_BINARY
:
...
@@ -337,7 +347,7 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
...
@@ -337,7 +347,7 @@ int32_t tsParseOneColumnData(SSchema *pSchema, SStrToken *pToken, char *payload,
setVardataNull
(
payload
,
TSDB_DATA_TYPE_NCHAR
);
setVardataNull
(
payload
,
TSDB_DATA_TYPE_NCHAR
);
}
else
{
}
else
{
// if the converted output len is over than pColumnModel->bytes, return error: 'Argument list too long'
// if the converted output len is over than pColumnModel->bytes, return error: 'Argument list too long'
size
_t
output
=
0
;
int32
_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
pToken
->
z
,
pToken
->
n
,
varDataVal
(
payload
),
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
if
(
!
taosMbsToUcs4
(
pToken
->
z
,
pToken
->
n
,
varDataVal
(
payload
),
pSchema
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
char
buf
[
512
]
=
{
0
};
char
buf
[
512
]
=
{
0
};
snprintf
(
buf
,
tListLen
(
buf
),
"%s"
,
strerror
(
errno
));
snprintf
(
buf
,
tListLen
(
buf
),
"%s"
,
strerror
(
errno
));
...
...
src/client/src/tscPrepare.c
浏览文件 @
7465d0c7
...
@@ -84,35 +84,35 @@ static int normalStmtBindParam(STscStmt* stmt, TAOS_BIND* bind) {
...
@@ -84,35 +84,35 @@ static int normalStmtBindParam(STscStmt* stmt, TAOS_BIND* bind) {
var
->
nLen
=
0
;
var
->
nLen
=
0
;
if
(
tb
->
is_null
!=
NULL
&&
*
(
tb
->
is_null
))
{
if
(
tb
->
is_null
!=
NULL
&&
*
(
tb
->
is_null
))
{
var
->
nType
=
TSDB_DATA_TYPE_NULL
;
var
->
nType
=
TSDB_DATA_TYPE_NULL
;
var
->
i64
Key
=
0
;
var
->
i64
=
0
;
continue
;
continue
;
}
}
var
->
nType
=
tb
->
buffer_type
;
var
->
nType
=
tb
->
buffer_type
;
switch
(
tb
->
buffer_type
)
{
switch
(
tb
->
buffer_type
)
{
case
TSDB_DATA_TYPE_NULL
:
case
TSDB_DATA_TYPE_NULL
:
var
->
i64
Key
=
0
;
var
->
i64
=
0
;
break
;
break
;
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_BOOL
:
var
->
i64
Key
=
(
*
(
int8_t
*
)
tb
->
buffer
)
?
1
:
0
;
var
->
i64
=
(
*
(
int8_t
*
)
tb
->
buffer
)
?
1
:
0
;
break
;
break
;
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_TINYINT
:
var
->
i64
Key
=
*
(
int8_t
*
)
tb
->
buffer
;
var
->
i64
=
*
(
int8_t
*
)
tb
->
buffer
;
break
;
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
var
->
i64
Key
=
*
(
int16_t
*
)
tb
->
buffer
;
var
->
i64
=
*
(
int16_t
*
)
tb
->
buffer
;
break
;
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
var
->
i64
Key
=
*
(
int32_t
*
)
tb
->
buffer
;
var
->
i64
=
*
(
int32_t
*
)
tb
->
buffer
;
break
;
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDB_DATA_TYPE_TIMESTAMP
:
var
->
i64
Key
=
*
(
int64_t
*
)
tb
->
buffer
;
var
->
i64
=
*
(
int64_t
*
)
tb
->
buffer
;
break
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_FLOAT
:
...
@@ -219,7 +219,7 @@ static char* normalStmtBuildSql(STscStmt* stmt) {
...
@@ -219,7 +219,7 @@ static char* normalStmtBuildSql(STscStmt* stmt) {
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
taosStringBuilderAppendInteger
(
&
sb
,
var
->
i64
Key
);
taosStringBuilderAppendInteger
(
&
sb
,
var
->
i64
);
break
;
break
;
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_FLOAT
:
...
@@ -616,7 +616,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
...
@@ -616,7 +616,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
case
TSDB_DATA_TYPE_NCHAR
:
{
case
TSDB_DATA_TYPE_NCHAR
:
{
switch
(
bind
->
buffer_type
)
{
switch
(
bind
->
buffer_type
)
{
case
TSDB_DATA_TYPE_NCHAR
:
{
case
TSDB_DATA_TYPE_NCHAR
:
{
size
_t
output
=
0
;
int32
_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
bind
->
buffer
,
*
bind
->
length
,
varDataVal
(
data
+
param
->
offset
),
param
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
if
(
!
taosMbsToUcs4
(
bind
->
buffer
,
*
bind
->
length
,
varDataVal
(
data
+
param
->
offset
),
param
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
return
TSDB_CODE_TSC_INVALID_VALUE
;
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
}
...
@@ -678,7 +678,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
...
@@ -678,7 +678,7 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
case
TSDB_DATA_TYPE_NCHAR
:
{
case
TSDB_DATA_TYPE_NCHAR
:
{
size
_t
output
=
0
;
int32
_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
bind
->
buffer
,
*
bind
->
length
,
varDataVal
(
data
+
param
->
offset
),
param
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
if
(
!
taosMbsToUcs4
(
bind
->
buffer
,
*
bind
->
length
,
varDataVal
(
data
+
param
->
offset
),
param
->
bytes
-
VARSTR_HEADER_SIZE
,
&
output
))
{
return
TSDB_CODE_TSC_INVALID_VALUE
;
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
}
...
...
src/client/src/tscSQLParser.c
浏览文件 @
7465d0c7
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#define _GNU_SOURCE
#define _GNU_SOURCE
#include "os.h"
#include "os.h"
#include "ttype.h"
#include "qAst.h"
#include "qAst.h"
#include "taos.h"
#include "taos.h"
#include "taosmsg.h"
#include "taosmsg.h"
...
@@ -484,10 +485,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -484,10 +485,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
case
TSDB_SQL_CREATE_USER
:
case
TSDB_SQL_CREATE_USER
:
case
TSDB_SQL_ALTER_USER
:
{
case
TSDB_SQL_ALTER_USER
:
{
const
char
*
msg5
=
"invalid user rights"
;
const
char
*
msg7
=
"not support options"
;
const
char
*
msg2
=
"invalid user/account name"
;
const
char
*
msg2
=
"invalid user/account name"
;
const
char
*
msg3
=
"name too long"
;
const
char
*
msg3
=
"name too long"
;
const
char
*
msg5
=
"invalid user rights"
;
const
char
*
msg7
=
"not support options"
;
pCmd
->
command
=
pInfo
->
type
;
pCmd
->
command
=
pInfo
->
type
;
...
@@ -950,7 +951,7 @@ static bool validateTableColumnInfo(SArray* pFieldList, SSqlCmd* pCmd) {
...
@@ -950,7 +951,7 @@ static bool validateTableColumnInfo(SArray* pFieldList, SSqlCmd* pCmd) {
return
false
;
return
false
;
}
}
if
(
pField
->
type
<
TSDB_DATA_TYPE_BOOL
||
pField
->
type
>
TSDB_DATA_TYPE_NCHAR
)
{
if
(
!
isValidDataType
(
pField
->
type
)
)
{
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
return
false
;
return
false
;
}
}
...
@@ -1011,7 +1012,7 @@ static bool validateTagParams(SArray* pTagsList, SArray* pFieldList, SSqlCmd* pC
...
@@ -1011,7 +1012,7 @@ static bool validateTagParams(SArray* pTagsList, SArray* pFieldList, SSqlCmd* pC
return
false
;
return
false
;
}
}
if
(
p
->
type
<
TSDB_DATA_TYPE_BOOL
||
p
->
type
>
TSDB_DATA_TYPE_NCHAR
)
{
if
(
!
isValidDataType
(
p
->
type
)
)
{
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
return
false
;
return
false
;
}
}
...
@@ -1754,7 +1755,7 @@ static int32_t setExprInfoForFunctions(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SS
...
@@ -1754,7 +1755,7 @@ static int32_t setExprInfoForFunctions(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SS
// set reverse order scan data blocks for last query
// set reverse order scan data blocks for last query
if
(
functionID
==
TSDB_FUNC_LAST
)
{
if
(
functionID
==
TSDB_FUNC_LAST
)
{
pExpr
->
numOfParams
=
1
;
pExpr
->
numOfParams
=
1
;
pExpr
->
param
[
0
].
i64
Key
=
TSDB_ORDER_DESC
;
pExpr
->
param
[
0
].
i64
=
TSDB_ORDER_DESC
;
pExpr
->
param
[
0
].
nType
=
TSDB_DATA_TYPE_INT
;
pExpr
->
param
[
0
].
nType
=
TSDB_DATA_TYPE_INT
;
}
}
...
@@ -1945,7 +1946,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -1945,7 +1946,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
SSchema
*
pSchema
=
tscGetTableColumnSchema
(
pTableMetaInfo
->
pTableMeta
,
index
.
columnIndex
);
SSchema
*
pSchema
=
tscGetTableColumnSchema
(
pTableMetaInfo
->
pTableMeta
,
index
.
columnIndex
);
int16_t
colType
=
pSchema
->
type
;
int16_t
colType
=
pSchema
->
type
;
if
(
colType
<=
TSDB_DATA_TYPE_BOOL
||
colType
>=
TSDB_DATA_TYPE_BINARY
)
{
if
(
!
IS_NUMERIC_TYPE
(
colType
)
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
}
...
@@ -2105,7 +2106,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -2105,7 +2106,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
if
(
!
TSDB_COL_IS_TAG
(
pIndex
->
flag
)
&&
pIndex
->
colIndex
<
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
))
{
// group by normal columns
if
(
!
TSDB_COL_IS_TAG
(
pIndex
->
flag
)
&&
pIndex
->
colIndex
<
tscGetNumOfColumns
(
pTableMetaInfo
->
pTableMeta
))
{
// group by normal columns
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
colIndex
+
i
);
SSqlExpr
*
pExpr
=
taosArrayGetP
(
pQueryInfo
->
exprList
,
colIndex
+
i
);
pExpr
->
numOfParams
=
1
;
pExpr
->
numOfParams
=
1
;
pExpr
->
param
->
i64
Key
=
TSDB_ORDER_ASC
;
pExpr
->
param
->
i64
=
TSDB_ORDER_ASC
;
break
;
break
;
}
}
...
@@ -2182,7 +2183,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
...
@@ -2182,7 +2183,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
// 2. valid the column type
// 2. valid the column type
int16_t
colType
=
pSchema
[
index
.
columnIndex
].
type
;
int16_t
colType
=
pSchema
[
index
.
columnIndex
].
type
;
if
(
colType
==
TSDB_DATA_TYPE_BOOL
||
colType
>=
TSDB_DATA_TYPE_BINARY
)
{
if
(
!
IS_NUMERIC_TYPE
(
colType
)
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
}
...
@@ -2727,7 +2728,7 @@ int32_t tscTansformSQLFuncForSTableQuery(SQueryInfo* pQueryInfo) {
...
@@ -2727,7 +2728,7 @@ int32_t tscTansformSQLFuncForSTableQuery(SQueryInfo* pQueryInfo) {
if
((
functionId
>=
TSDB_FUNC_SUM
&&
functionId
<=
TSDB_FUNC_TWA
)
||
if
((
functionId
>=
TSDB_FUNC_SUM
&&
functionId
<=
TSDB_FUNC_TWA
)
||
(
functionId
>=
TSDB_FUNC_FIRST_DST
&&
functionId
<=
TSDB_FUNC_LAST_DST
)
||
(
functionId
>=
TSDB_FUNC_FIRST_DST
&&
functionId
<=
TSDB_FUNC_LAST_DST
)
||
(
functionId
>=
TSDB_FUNC_RATE
&&
functionId
<=
TSDB_FUNC_AVG_IRATE
))
{
(
functionId
>=
TSDB_FUNC_RATE
&&
functionId
<=
TSDB_FUNC_AVG_IRATE
))
{
if
(
getResultDataInfo
(
pSrcSchema
->
type
,
pSrcSchema
->
bytes
,
functionId
,
(
int32_t
)
pExpr
->
param
[
0
].
i64
Key
,
&
type
,
&
bytes
,
if
(
getResultDataInfo
(
pSrcSchema
->
type
,
pSrcSchema
->
bytes
,
functionId
,
(
int32_t
)
pExpr
->
param
[
0
].
i64
,
&
type
,
&
bytes
,
&
interBytes
,
0
,
true
)
!=
TSDB_CODE_SUCCESS
)
{
&
interBytes
,
0
,
true
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
}
...
@@ -4396,8 +4397,8 @@ int32_t getTimeRange(STimeWindow* win, tSQLExpr* pRight, int32_t optr, int16_t t
...
@@ -4396,8 +4397,8 @@ int32_t getTimeRange(STimeWindow* win, tSQLExpr* pRight, int32_t optr, int16_t t
*
*
* Additional check to avoid data overflow
* Additional check to avoid data overflow
*/
*/
if
(
pRight
->
val
.
i64
Key
<=
INT64_MAX
/
1000
)
{
if
(
pRight
->
val
.
i64
<=
INT64_MAX
/
1000
)
{
pRight
->
val
.
i64
Key
*=
1000
;
pRight
->
val
.
i64
*=
1000
;
}
}
}
else
if
(
pRight
->
nSQLOptr
==
TK_FLOAT
&&
timePrecision
==
TSDB_TIME_PRECISION_MILLI
)
{
}
else
if
(
pRight
->
nSQLOptr
==
TK_FLOAT
&&
timePrecision
==
TSDB_TIME_PRECISION_MILLI
)
{
pRight
->
val
.
dKey
*=
1000
;
pRight
->
val
.
dKey
*=
1000
;
...
@@ -5380,22 +5381,22 @@ static int32_t setKeepOption(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDBInfo* p
...
@@ -5380,22 +5381,22 @@ static int32_t setKeepOption(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDBInfo* p
tVariantListItem
*
p0
=
taosArrayGet
(
pKeep
,
0
);
tVariantListItem
*
p0
=
taosArrayGet
(
pKeep
,
0
);
switch
(
s
)
{
switch
(
s
)
{
case
1
:
{
case
1
:
{
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
);
}
}
break
;
break
;
case
2
:
{
case
2
:
{
tVariantListItem
*
p1
=
taosArrayGet
(
pKeep
,
1
);
tVariantListItem
*
p1
=
taosArrayGet
(
pKeep
,
1
);
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
);
pMsg
->
daysToKeep1
=
htonl
((
int32_t
)
p1
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep1
=
htonl
((
int32_t
)
p1
->
pVar
.
i64
);
break
;
break
;
}
}
case
3
:
{
case
3
:
{
tVariantListItem
*
p1
=
taosArrayGet
(
pKeep
,
1
);
tVariantListItem
*
p1
=
taosArrayGet
(
pKeep
,
1
);
tVariantListItem
*
p2
=
taosArrayGet
(
pKeep
,
2
);
tVariantListItem
*
p2
=
taosArrayGet
(
pKeep
,
2
);
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep
=
htonl
((
int32_t
)
p0
->
pVar
.
i64
);
pMsg
->
daysToKeep1
=
htonl
((
int32_t
)
p1
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep1
=
htonl
((
int32_t
)
p1
->
pVar
.
i64
);
pMsg
->
daysToKeep2
=
htonl
((
int32_t
)
p2
->
pVar
.
i64
Key
);
pMsg
->
daysToKeep2
=
htonl
((
int32_t
)
p2
->
pVar
.
i64
);
break
;
break
;
}
}
default:
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
}
default:
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg
);
}
...
@@ -5561,7 +5562,7 @@ static void doUpdateSqlFunctionForTagPrj(SQueryInfo* pQueryInfo) {
...
@@ -5561,7 +5562,7 @@ static void doUpdateSqlFunctionForTagPrj(SQueryInfo* pQueryInfo) {
if
((
pExpr
->
functionId
!=
TSDB_FUNC_TAG_DUMMY
&&
pExpr
->
functionId
!=
TSDB_FUNC_TS_DUMMY
)
&&
if
((
pExpr
->
functionId
!=
TSDB_FUNC_TAG_DUMMY
&&
pExpr
->
functionId
!=
TSDB_FUNC_TS_DUMMY
)
&&
!
(
pExpr
->
functionId
==
TSDB_FUNC_PRJ
&&
TSDB_COL_IS_UD_COL
(
pExpr
->
colInfo
.
flag
)))
{
!
(
pExpr
->
functionId
==
TSDB_FUNC_PRJ
&&
TSDB_COL_IS_UD_COL
(
pExpr
->
colInfo
.
flag
)))
{
SSchema
*
pColSchema
=
&
pSchema
[
pExpr
->
colInfo
.
colIndex
];
SSchema
*
pColSchema
=
&
pSchema
[
pExpr
->
colInfo
.
colIndex
];
getResultDataInfo
(
pColSchema
->
type
,
pColSchema
->
bytes
,
pExpr
->
functionId
,
(
int32_t
)
pExpr
->
param
[
0
].
i64
Key
,
&
pExpr
->
resType
,
getResultDataInfo
(
pColSchema
->
type
,
pColSchema
->
bytes
,
pExpr
->
functionId
,
(
int32_t
)
pExpr
->
param
[
0
].
i64
,
&
pExpr
->
resType
,
&
pExpr
->
resBytes
,
&
pExpr
->
interBytes
,
tagLength
,
isSTable
);
&
pExpr
->
resBytes
,
&
pExpr
->
interBytes
,
tagLength
,
isSTable
);
}
}
}
}
...
@@ -6760,7 +6761,7 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSQLExpr* pS
...
@@ -6760,7 +6761,7 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSQLExpr* pS
// check for dividing by 0
// check for dividing by 0
if
((
*
pExpr
)
->
_node
.
optr
==
TSDB_BINARY_OP_DIVIDE
)
{
if
((
*
pExpr
)
->
_node
.
optr
==
TSDB_BINARY_OP_DIVIDE
)
{
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
if
(
pRight
->
pVal
->
nType
==
TSDB_DATA_TYPE_INT
&&
pRight
->
pVal
->
i64
Key
==
0
)
{
if
(
pRight
->
pVal
->
nType
==
TSDB_DATA_TYPE_INT
&&
pRight
->
pVal
->
i64
==
0
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
else
if
(
pRight
->
pVal
->
nType
==
TSDB_DATA_TYPE_FLOAT
&&
pRight
->
pVal
->
dKey
==
0
)
{
}
else
if
(
pRight
->
pVal
->
nType
==
TSDB_DATA_TYPE_FLOAT
&&
pRight
->
pVal
->
dKey
==
0
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
...
...
src/client/src/tscSchemaUtil.c
浏览文件 @
7465d0c7
...
@@ -66,30 +66,24 @@ STableComInfo tscGetTableInfo(const STableMeta* pTableMeta) {
...
@@ -66,30 +66,24 @@ STableComInfo tscGetTableInfo(const STableMeta* pTableMeta) {
return
pTableMeta
->
tableInfo
;
return
pTableMeta
->
tableInfo
;
}
}
bool
isValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCols
)
{
static
bool
doValidateSchema
(
SSchema
*
pSchema
,
int32_t
numOfCols
,
int32_t
maxLen
)
{
if
(
!
VALIDNUMOFCOLS
(
numOfCols
))
{
return
false
;
}
/* first column must be the timestamp, which is a primary key */
if
(
pSchema
[
0
].
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
return
false
;
}
/* type is valid, length is valid */
int32_t
rowLen
=
0
;
int32_t
rowLen
=
0
;
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
// 1. valid types
// 1. valid types
if
(
pSchema
[
i
].
type
>
TSDB_DATA_TYPE_TIMESTAMP
||
pSchema
[
i
].
type
<
TSDB_DATA_TYPE_BOOL
)
{
if
(
!
isValidDataType
(
pSchema
[
i
].
type
)
)
{
return
false
;
return
false
;
}
}
// 2. valid length for each type
// 2. valid length for each type
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_
TIMESTAMP
)
{
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_
BINARY
)
{
if
(
pSchema
[
i
].
bytes
>
TSDB_MAX_BINARY_LEN
)
{
if
(
pSchema
[
i
].
bytes
>
TSDB_MAX_BINARY_LEN
)
{
return
false
;
return
false
;
}
}
}
else
if
(
pSchema
[
i
].
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pSchema
[
i
].
bytes
>
TSDB_MAX_NCHAR_LEN
)
{
return
false
;
}
}
else
{
}
else
{
if
(
pSchema
[
i
].
bytes
!=
tDataTypeDesc
[
pSchema
[
i
].
type
].
nSize
)
{
if
(
pSchema
[
i
].
bytes
!=
tDataTypeDesc
[
pSchema
[
i
].
type
].
nSize
)
{
return
false
;
return
false
;
...
@@ -106,8 +100,32 @@ bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols) {
...
@@ -106,8 +100,32 @@ bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols) {
rowLen
+=
pSchema
[
i
].
bytes
;
rowLen
+=
pSchema
[
i
].
bytes
;
}
}
// valid total length
return
rowLen
<=
maxLen
;
return
(
rowLen
<=
TSDB_MAX_BYTES_PER_ROW
);
}
bool
isValidSchema
(
struct
SSchema
*
pSchema
,
int32_t
numOfCols
,
int32_t
numOfTags
)
{
if
(
!
VALIDNUMOFCOLS
(
numOfCols
))
{
return
false
;
}
if
(
!
VALIDNUMOFTAGS
(
numOfTags
))
{
return
false
;
}
/* first column must be the timestamp, which is a primary key */
if
(
pSchema
[
0
].
type
!=
TSDB_DATA_TYPE_TIMESTAMP
)
{
return
false
;
}
if
(
!
doValidateSchema
(
pSchema
,
numOfCols
,
TSDB_MAX_BYTES_PER_ROW
))
{
return
false
;
}
if
(
!
doValidateSchema
(
&
pSchema
[
numOfCols
],
numOfTags
,
TSDB_MAX_TAGS_LEN
))
{
return
false
;
}
return
true
;
}
}
SSchema
*
tscGetTableColumnSchema
(
const
STableMeta
*
pTableMeta
,
int32_t
colIndex
)
{
SSchema
*
tscGetTableColumnSchema
(
const
STableMeta
*
pTableMeta
,
int32_t
colIndex
)
{
...
...
src/client/src/tscServer.c
浏览文件 @
7465d0c7
...
@@ -755,12 +755,10 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -755,12 +755,10 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SColumn
*
pCol
=
taosArrayGetP
(
pQueryInfo
->
colList
,
i
);
SColumn
*
pCol
=
taosArrayGetP
(
pQueryInfo
->
colList
,
i
);
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
if
(
pCol
->
colIndex
.
columnIndex
>=
tscGetNumOfColumns
(
pTableMeta
)
||
pColSchema
->
type
<
TSDB_DATA_TYPE_BOOL
||
if
(
pCol
->
colIndex
.
columnIndex
>=
tscGetNumOfColumns
(
pTableMeta
)
||
!
isValidDataType
(
pColSchema
->
type
))
{
pColSchema
->
type
>
TSDB_DATA_TYPE_NCHAR
)
{
tscError
(
"%p tid:%d uid:%"
PRIu64
" id:%s, column index out of range, numOfColumns:%d, index:%d, column name:%s"
,
tscError
(
"%p tid:%d uid:%"
PRIu64
" id:%s, column index out of range, numOfColumns:%d, index:%d, column name:%s"
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
pTableMetaInfo
->
name
,
tscGetNumOfColumns
(
pTableMeta
),
pCol
->
colIndex
.
columnIndex
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
pTableMetaInfo
->
name
,
tscGetNumOfColumns
(
pTableMeta
),
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
pColSchema
->
name
);
return
TSDB_CODE_TSC_INVALID_SQL
;
return
TSDB_CODE_TSC_INVALID_SQL
;
}
}
...
@@ -826,7 +824,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -826,7 +824,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
memcpy
(
pMsg
,
pExpr
->
param
[
j
].
pz
,
pExpr
->
param
[
j
].
nLen
);
memcpy
(
pMsg
,
pExpr
->
param
[
j
].
pz
,
pExpr
->
param
[
j
].
nLen
);
pMsg
+=
pExpr
->
param
[
j
].
nLen
;
pMsg
+=
pExpr
->
param
[
j
].
nLen
;
}
else
{
}
else
{
pSqlFuncExpr
->
arg
[
j
].
argValue
.
i64
=
htobe64
(
pExpr
->
param
[
j
].
i64
Key
);
pSqlFuncExpr
->
arg
[
j
].
argValue
.
i64
=
htobe64
(
pExpr
->
param
[
j
].
i64
);
}
}
}
}
...
@@ -866,7 +864,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -866,7 +864,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
memcpy
(
pMsg
,
pExpr
->
param
[
j
].
pz
,
pExpr
->
param
[
j
].
nLen
);
memcpy
(
pMsg
,
pExpr
->
param
[
j
].
pz
,
pExpr
->
param
[
j
].
nLen
);
pMsg
+=
pExpr
->
param
[
j
].
nLen
;
pMsg
+=
pExpr
->
param
[
j
].
nLen
;
}
else
{
}
else
{
pSqlFuncExpr1
->
arg
[
j
].
argValue
.
i64
=
htobe64
(
pExpr
->
param
[
j
].
i64
Key
);
pSqlFuncExpr1
->
arg
[
j
].
argValue
.
i64
=
htobe64
(
pExpr
->
param
[
j
].
i64
);
}
}
}
}
...
@@ -944,7 +942,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
...
@@ -944,7 +942,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
SSchema
*
pColSchema
=
&
pSchema
[
pCol
->
colIndex
.
columnIndex
];
if
((
pCol
->
colIndex
.
columnIndex
>=
numOfTagColumns
||
pCol
->
colIndex
.
columnIndex
<
-
1
)
||
if
((
pCol
->
colIndex
.
columnIndex
>=
numOfTagColumns
||
pCol
->
colIndex
.
columnIndex
<
-
1
)
||
(
pColSchema
->
type
<
TSDB_DATA_TYPE_BOOL
||
pColSchema
->
type
>
TSDB_DATA_TYPE_NCHAR
))
{
(
!
isValidDataType
(
pColSchema
->
type
)
))
{
tscError
(
"%p tid:%d uid:%"
PRIu64
" id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s"
,
tscError
(
"%p tid:%d uid:%"
PRIu64
" id:%s, tag index out of range, totalCols:%d, numOfTags:%d, index:%d, column name:%s"
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
pTableMetaInfo
->
name
,
total
,
numOfTagColumns
,
pSql
,
pTableMeta
->
id
.
tid
,
pTableMeta
->
id
.
uid
,
pTableMetaInfo
->
name
,
total
,
numOfTagColumns
,
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
pCol
->
colIndex
.
columnIndex
,
pColSchema
->
name
);
...
@@ -1830,7 +1828,7 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
...
@@ -1830,7 +1828,7 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
assert
(
i
==
0
);
assert
(
i
==
0
);
}
}
assert
(
pSchema
->
type
>=
TSDB_DATA_TYPE_BOOL
&&
pSchema
->
type
<=
TSDB_DATA_TYPE_NCHAR
);
assert
(
isValidDataType
(
pSchema
->
type
)
);
pSchema
++
;
pSchema
++
;
}
}
...
...
src/client/src/tscSql.c
浏览文件 @
7465d0c7
...
@@ -788,18 +788,34 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
...
@@ -788,18 +788,34 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int8_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int8_t
*
)
row
[
i
]));
break
;
break
;
case
TSDB_DATA_TYPE_UTINYINT
:
len
+=
sprintf
(
str
+
len
,
"%u"
,
*
((
uint8_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int16_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int16_t
*
)
row
[
i
]));
break
;
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
len
+=
sprintf
(
str
+
len
,
"%u"
,
*
((
uint16_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int32_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%d"
,
*
((
int32_t
*
)
row
[
i
]));
break
;
break
;
case
TSDB_DATA_TYPE_UINT
:
len
+=
sprintf
(
str
+
len
,
"%u"
,
*
((
uint32_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
len
+=
sprintf
(
str
+
len
,
"%"
PRId64
,
*
((
int64_t
*
)
row
[
i
]));
len
+=
sprintf
(
str
+
len
,
"%"
PRId64
,
*
((
int64_t
*
)
row
[
i
]));
break
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
len
+=
sprintf
(
str
+
len
,
"%"
PRIu64
,
*
((
uint64_t
*
)
row
[
i
]));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
{
case
TSDB_DATA_TYPE_FLOAT
:
{
float
fv
=
0
;
float
fv
=
0
;
fv
=
GET_FLOAT_VAL
(
row
[
i
]);
fv
=
GET_FLOAT_VAL
(
row
[
i
]);
...
...
src/client/src/tscStream.c
浏览文件 @
7465d0c7
...
@@ -65,15 +65,30 @@ static int64_t tscGetRetryDelayTime(SSqlStream* pStream, int64_t slidingTime, in
...
@@ -65,15 +65,30 @@ static int64_t tscGetRetryDelayTime(SSqlStream* pStream, int64_t slidingTime, in
return
retryDelta
;
return
retryDelta
;
}
}
static
void
setRetryInfo
(
SSqlStream
*
pStream
,
int32_t
code
)
{
SSqlObj
*
pSql
=
pStream
->
pSql
;
pSql
->
res
.
code
=
code
;
int64_t
retryDelayTime
=
tscGetRetryDelayTime
(
pStream
,
pStream
->
interval
.
sliding
,
pStream
->
precision
);
tscDebug
(
"%p stream:%p, get table Meta failed, retry in %"
PRId64
"ms"
,
pSql
,
pStream
,
retryDelayTime
);
tscSetRetryTimer
(
pStream
,
pSql
,
retryDelayTime
);
}
static
void
doLaunchQuery
(
void
*
param
,
TAOS_RES
*
tres
,
int32_t
code
)
{
static
void
doLaunchQuery
(
void
*
param
,
TAOS_RES
*
tres
,
int32_t
code
)
{
SSqlStream
*
pStream
=
(
SSqlStream
*
)
param
;
SSqlStream
*
pStream
=
(
SSqlStream
*
)
param
;
assert
(
pStream
->
pSql
==
tres
&&
code
==
TSDB_CODE_SUCCESS
);
assert
(
pStream
->
pSql
==
tres
);
SSqlObj
*
pSql
=
(
SSqlObj
*
)
tres
;
SSqlObj
*
pSql
=
(
SSqlObj
*
)
tres
;
pSql
->
fp
=
doLaunchQuery
;
pSql
->
fp
=
doLaunchQuery
;
pSql
->
fetchFp
=
doLaunchQuery
;
pSql
->
fetchFp
=
doLaunchQuery
;
pSql
->
res
.
completed
=
false
;
pSql
->
res
.
completed
=
false
;
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
setRetryInfo
(
pStream
,
code
);
return
;
}
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
&
pSql
->
cmd
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
...
@@ -82,6 +97,10 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
...
@@ -82,6 +97,10 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
code
=
tscGetSTableVgroupInfo
(
pSql
,
0
);
code
=
tscGetSTableVgroupInfo
(
pSql
,
0
);
}
}
if
(
code
==
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
return
;
}
// failed to get table Meta or vgroup list, retry in 10sec.
// failed to get table Meta or vgroup list, retry in 10sec.
if
(
code
==
TSDB_CODE_SUCCESS
)
{
if
(
code
==
TSDB_CODE_SUCCESS
)
{
tscTansformSQLFuncForSTableQuery
(
pQueryInfo
);
tscTansformSQLFuncForSTableQuery
(
pQueryInfo
);
...
@@ -91,11 +110,8 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
...
@@ -91,11 +110,8 @@ static void doLaunchQuery(void* param, TAOS_RES* tres, int32_t code) {
pSql
->
fetchFp
=
tscProcessStreamQueryCallback
;
pSql
->
fetchFp
=
tscProcessStreamQueryCallback
;
tscDoQuery
(
pSql
);
tscDoQuery
(
pSql
);
tscIncStreamExecutionCount
(
pStream
);
tscIncStreamExecutionCount
(
pStream
);
}
else
if
(
code
!=
TSDB_CODE_TSC_ACTION_IN_PROGRESS
)
{
}
else
{
pSql
->
res
.
code
=
code
;
setRetryInfo
(
pStream
,
code
);
int64_t
retryDelayTime
=
tscGetRetryDelayTime
(
pStream
,
pStream
->
interval
.
sliding
,
pStream
->
precision
);
tscDebug
(
"%p stream:%p, get table Meta failed, retry in %"
PRId64
"ms"
,
pSql
,
pStream
,
retryDelayTime
);
tscSetRetryTimer
(
pStream
,
pSql
,
retryDelayTime
);
}
}
}
}
...
...
src/client/src/tscSubquery.c
浏览文件 @
7465d0c7
...
@@ -465,7 +465,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
...
@@ -465,7 +465,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
int16_t
colId
=
tscGetJoinTagColIdByUid
(
&
pQueryInfo
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
int16_t
colId
=
tscGetJoinTagColIdByUid
(
&
pQueryInfo
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
// set the tag column id for executor to extract correct tag value
// set the tag column id for executor to extract correct tag value
pExpr
->
param
[
0
]
=
(
tVariant
)
{.
i64
Key
=
colId
,
.
nType
=
TSDB_DATA_TYPE_BIGINT
,
.
nLen
=
sizeof
(
int64_t
)};
pExpr
->
param
[
0
]
=
(
tVariant
)
{.
i64
=
colId
,
.
nType
=
TSDB_DATA_TYPE_BIGINT
,
.
nLen
=
sizeof
(
int64_t
)};
pExpr
->
numOfParams
=
1
;
pExpr
->
numOfParams
=
1
;
}
}
...
@@ -650,7 +650,7 @@ static void issueTSCompQuery(SSqlObj* pSql, SJoinSupporter* pSupporter, SSqlObj*
...
@@ -650,7 +650,7 @@ static void issueTSCompQuery(SSqlObj* pSql, SJoinSupporter* pSupporter, SSqlObj*
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
0
);
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
0
);
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pSupporter
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pSupporter
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
pExpr
->
param
->
i64
Key
=
tagColId
;
pExpr
->
param
->
i64
=
tagColId
;
pExpr
->
numOfParams
=
1
;
pExpr
->
numOfParams
=
1
;
}
}
...
@@ -1547,7 +1547,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
...
@@ -1547,7 +1547,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
if
(
UTIL_TABLE_IS_SUPER_TABLE
(
pTableMetaInfo
))
{
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pSupporter
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pSupporter
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
pExpr
->
param
->
i64
Key
=
tagColId
;
pExpr
->
param
->
i64
=
tagColId
;
pExpr
->
numOfParams
=
1
;
pExpr
->
numOfParams
=
1
;
}
}
...
@@ -2120,6 +2120,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
...
@@ -2120,6 +2120,7 @@ static SSqlObj *tscCreateSTableSubquery(SSqlObj *pSql, SRetrieveSupport *trsuppo
return
pNew
;
return
pNew
;
}
}
// todo there is are race condition in this function, while cancel is called by user.
void
tscRetrieveDataRes
(
void
*
param
,
TAOS_RES
*
tres
,
int
code
)
{
void
tscRetrieveDataRes
(
void
*
param
,
TAOS_RES
*
tres
,
int
code
)
{
// the param may be null, since it may be done by other query threads. and the asyncOnError may enter in this
// the param may be null, since it may be done by other query threads. and the asyncOnError may enter in this
// function while kill query by a user.
// function while kill query by a user.
...
...
src/client/src/tscUtil.c
浏览文件 @
7465d0c7
...
@@ -71,6 +71,7 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw) {
...
@@ -71,6 +71,7 @@ void tsSetSTableQueryCond(STagCond* pTagCond, uint64_t uid, SBufferWriter* bw) {
bool
tscQueryTags
(
SQueryInfo
*
pQueryInfo
)
{
bool
tscQueryTags
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
numOfCols
=
(
int32_t
)
tscSqlExprNumOfExprs
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
int32_t
functId
=
pExpr
->
functionId
;
int32_t
functId
=
pExpr
->
functionId
;
...
@@ -314,7 +315,7 @@ void tscSetResRawPtr(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
...
@@ -314,7 +315,7 @@ void tscSetResRawPtr(SSqlRes* pRes, SQueryInfo* pQueryInfo) {
}
else
{
}
else
{
for
(
int32_t
k
=
0
;
k
<
pRes
->
numOfRows
;
++
k
)
{
for
(
int32_t
k
=
0
;
k
<
pRes
->
numOfRows
;
++
k
)
{
char
*
p
=
((
char
**
)
pRes
->
urow
)[
i
]
+
k
*
pInfo
->
field
.
bytes
;
char
*
p
=
((
char
**
)
pRes
->
urow
)[
i
]
+
k
*
pInfo
->
field
.
bytes
;
memcpy
(
p
,
&
pInfo
->
pSqlExpr
->
param
[
1
].
i64
Key
,
pInfo
->
field
.
bytes
);
memcpy
(
p
,
&
pInfo
->
pSqlExpr
->
param
[
1
].
i64
,
pInfo
->
field
.
bytes
);
}
}
}
}
}
}
...
...
src/common/inc/tglobal.h
浏览文件 @
7465d0c7
...
@@ -191,7 +191,7 @@ extern int32_t monDebugFlag;
...
@@ -191,7 +191,7 @@ extern int32_t monDebugFlag;
extern
int32_t
uDebugFlag
;
extern
int32_t
uDebugFlag
;
extern
int32_t
rpcDebugFlag
;
extern
int32_t
rpcDebugFlag
;
extern
int32_t
odbcDebugFlag
;
extern
int32_t
odbcDebugFlag
;
extern
int32_t
qDebugFlag
;
extern
u
int32_t
qDebugFlag
;
extern
int32_t
wDebugFlag
;
extern
int32_t
wDebugFlag
;
extern
int32_t
cqDebugFlag
;
extern
int32_t
cqDebugFlag
;
extern
int32_t
debugFlag
;
extern
int32_t
debugFlag
;
...
...
src/common/inc/tvariant.h
浏览文件 @
7465d0c7
...
@@ -28,7 +28,8 @@ typedef struct tVariant {
...
@@ -28,7 +28,8 @@ typedef struct tVariant {
uint32_t
nType
;
uint32_t
nType
;
int32_t
nLen
;
// only used for string, for number, it is useless
int32_t
nLen
;
// only used for string, for number, it is useless
union
{
union
{
int64_t
i64Key
;
int64_t
i64
;
uint64_t
u64
;
double
dKey
;
double
dKey
;
char
*
pz
;
char
*
pz
;
wchar_t
*
wpz
;
wchar_t
*
wpz
;
...
@@ -36,9 +37,9 @@ typedef struct tVariant {
...
@@ -36,9 +37,9 @@ typedef struct tVariant {
};
};
}
tVariant
;
}
tVariant
;
void
tVariantCreate
(
tVariant
*
pVar
,
SStrToken
*
token
);
bool
tVariantIsValid
(
tVariant
*
pVar
);
void
tVariantCreate
FromString
(
tVariant
*
pVar
,
char
*
pz
,
uint32_t
len
,
uint32_t
type
);
void
tVariantCreate
(
tVariant
*
pVar
,
SStrToken
*
token
);
void
tVariantCreateFromBinary
(
tVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
void
tVariantCreateFromBinary
(
tVariant
*
pVar
,
const
char
*
pz
,
size_t
len
,
uint32_t
type
);
...
...
src/common/src/tglobal.c
浏览文件 @
7465d0c7
...
@@ -219,7 +219,7 @@ int32_t odbcDebugFlag = 131;
...
@@ -219,7 +219,7 @@ int32_t odbcDebugFlag = 131;
int32_t
httpDebugFlag
=
131
;
int32_t
httpDebugFlag
=
131
;
int32_t
mqttDebugFlag
=
131
;
int32_t
mqttDebugFlag
=
131
;
int32_t
monDebugFlag
=
131
;
int32_t
monDebugFlag
=
131
;
int32_t
qDebugFlag
=
131
;
u
int32_t
qDebugFlag
=
131
;
int32_t
rpcDebugFlag
=
131
;
int32_t
rpcDebugFlag
=
131
;
int32_t
uDebugFlag
=
131
;
int32_t
uDebugFlag
=
131
;
int32_t
debugFlag
=
0
;
int32_t
debugFlag
=
0
;
...
...
src/common/src/ttypes.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/common/src/tvariant.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/cq/src/cqMain.c
浏览文件 @
7465d0c7
...
@@ -295,6 +295,8 @@ static void cqCreateStream(SCqContext *pContext, SCqObj *pObj) {
...
@@ -295,6 +295,8 @@ static void cqCreateStream(SCqContext *pContext, SCqObj *pObj) {
if
(
pObj
->
pStream
==
NULL
)
{
if
(
pObj
->
pStream
==
NULL
)
{
pObj
->
pStream
=
taos_open_stream
(
pContext
->
dbConn
,
pObj
->
sqlStr
,
cqProcessStreamRes
,
0
,
pObj
,
NULL
);
pObj
->
pStream
=
taos_open_stream
(
pContext
->
dbConn
,
pObj
->
sqlStr
,
cqProcessStreamRes
,
0
,
pObj
,
NULL
);
// TODO the pObj->pStream may be released if error happens
if
(
pObj
->
pStream
)
{
if
(
pObj
->
pStream
)
{
tscSetStreamDestTable
(
pObj
->
pStream
,
pObj
->
dstTable
);
tscSetStreamDestTable
(
pObj
->
pStream
,
pObj
->
dstTable
);
pContext
->
num
++
;
pContext
->
num
++
;
...
@@ -308,9 +310,12 @@ static void cqCreateStream(SCqContext *pContext, SCqObj *pObj) {
...
@@ -308,9 +310,12 @@ static void cqCreateStream(SCqContext *pContext, SCqObj *pObj) {
static
void
cqProcessStreamRes
(
void
*
param
,
TAOS_RES
*
tres
,
TAOS_ROW
row
)
{
static
void
cqProcessStreamRes
(
void
*
param
,
TAOS_RES
*
tres
,
TAOS_ROW
row
)
{
SCqObj
*
pObj
=
(
SCqObj
*
)
param
;
SCqObj
*
pObj
=
(
SCqObj
*
)
param
;
if
(
tres
==
NULL
&&
row
==
NULL
)
{
if
(
tres
==
NULL
&&
row
==
NULL
)
{
taos_close_stream
(
pObj
->
pStream
);
pObj
->
pStream
=
NULL
;
pObj
->
pStream
=
NULL
;
return
;
return
;
}
}
SCqContext
*
pContext
=
pObj
->
pContext
;
SCqContext
*
pContext
=
pObj
->
pContext
;
STSchema
*
pSchema
=
pObj
->
pSchema
;
STSchema
*
pSchema
=
pObj
->
pSchema
;
if
(
pObj
->
pStream
==
NULL
)
return
;
if
(
pObj
->
pStream
==
NULL
)
return
;
...
@@ -336,7 +341,7 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
...
@@ -336,7 +341,7 @@ static void cqProcessStreamRes(void *param, TAOS_RES *tres, TAOS_ROW row) {
val
=
((
char
*
)
val
)
-
sizeof
(
VarDataLenT
);
val
=
((
char
*
)
val
)
-
sizeof
(
VarDataLenT
);
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
}
else
if
(
c
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
char
buf
[
TSDB_MAX_NCHAR_LEN
];
char
buf
[
TSDB_MAX_NCHAR_LEN
];
size
_t
len
=
taos_fetch_lengths
(
tres
)[
i
];
int32
_t
len
=
taos_fetch_lengths
(
tres
)[
i
];
taosMbsToUcs4
(
val
,
len
,
buf
,
sizeof
(
buf
),
&
len
);
taosMbsToUcs4
(
val
,
len
,
buf
,
sizeof
(
buf
),
&
len
);
memcpy
(
val
+
sizeof
(
VarDataLenT
),
buf
,
len
);
memcpy
(
val
+
sizeof
(
VarDataLenT
),
buf
,
len
);
varDataLen
(
val
)
=
len
;
varDataLen
(
val
)
=
len
;
...
...
src/dnode/src/dnodeSystem.c
浏览文件 @
7465d0c7
...
@@ -160,7 +160,7 @@ static void signal_handler(int32_t signum, siginfo_t *sigInfo, void *context) {
...
@@ -160,7 +160,7 @@ static void signal_handler(int32_t signum, siginfo_t *sigInfo, void *context) {
syslog
(
LOG_INFO
,
"Shut down signal is %d"
,
signum
);
syslog
(
LOG_INFO
,
"Shut down signal is %d"
,
signum
);
syslog
(
LOG_INFO
,
"Shutting down TDengine service..."
);
syslog
(
LOG_INFO
,
"Shutting down TDengine service..."
);
// clean the system.
// clean the system.
dInfo
(
"shut down signal is %d, sender PID:%d
"
,
signum
,
sigInfo
->
si_pid
);
dInfo
(
"shut down signal is %d, sender PID:%d
cmdline:%s"
,
signum
,
sigInfo
->
si_pid
,
taosGetCmdlineByPID
(
sigInfo
->
si_pid
)
);
// protect the application from receive another signal
// protect the application from receive another signal
struct
sigaction
act
=
{{
0
}};
struct
sigaction
act
=
{{
0
}};
...
...
src/inc/taos.h
浏览文件 @
7465d0c7
...
@@ -42,6 +42,10 @@ typedef void **TAOS_ROW;
...
@@ -42,6 +42,10 @@ typedef void **TAOS_ROW;
#define TSDB_DATA_TYPE_BINARY 8 // string
#define TSDB_DATA_TYPE_BINARY 8 // string
#define TSDB_DATA_TYPE_TIMESTAMP 9 // 8 bytes
#define TSDB_DATA_TYPE_TIMESTAMP 9 // 8 bytes
#define TSDB_DATA_TYPE_NCHAR 10 // unicode string
#define TSDB_DATA_TYPE_NCHAR 10 // unicode string
#define TSDB_DATA_TYPE_UTINYINT 11 // 1 byte
#define TSDB_DATA_TYPE_USMALLINT 12 // 2 bytes
#define TSDB_DATA_TYPE_UINT 13 // 4 bytes
#define TSDB_DATA_TYPE_UBIGINT 14 // 8 bytes
typedef
enum
{
typedef
enum
{
TSDB_OPTION_LOCALE
,
TSDB_OPTION_LOCALE
,
...
...
src/inc/taosdef.h
浏览文件 @
7465d0c7
...
@@ -60,7 +60,7 @@ typedef struct tstr {
...
@@ -60,7 +60,7 @@ typedef struct tstr {
// Bytes for each type.
// Bytes for each type.
extern
const
int32_t
TYPE_BYTES
[
1
1
];
extern
const
int32_t
TYPE_BYTES
[
1
5
];
// TODO: replace and remove code below
// TODO: replace and remove code below
#define CHAR_BYTES sizeof(char)
#define CHAR_BYTES sizeof(char)
...
@@ -92,6 +92,11 @@ extern const int32_t TYPE_BYTES[11];
...
@@ -92,6 +92,11 @@ extern const int32_t TYPE_BYTES[11];
#define TSDB_DATA_NCHAR_NULL 0xFFFFFFFF
#define TSDB_DATA_NCHAR_NULL 0xFFFFFFFF
#define TSDB_DATA_BINARY_NULL 0xFF
#define TSDB_DATA_BINARY_NULL 0xFF
#define TSDB_DATA_UTINYINT_NULL 0xFF
#define TSDB_DATA_USMALLINT_NULL 0xFFFF
#define TSDB_DATA_UINT_NULL 0xFFFFFFFF
#define TSDB_DATA_UBIGINT_NULL 0xFFFFFFFFFFFFFFFFL
#define TSDB_DATA_NULL_STR "NULL"
#define TSDB_DATA_NULL_STR "NULL"
#define TSDB_DATA_NULL_STR_L "null"
#define TSDB_DATA_NULL_STR_L "null"
...
@@ -135,15 +140,12 @@ do { \
...
@@ -135,15 +140,12 @@ do { \
#define GET_INT16_VAL(x) (*(int16_t *)(x))
#define GET_INT16_VAL(x) (*(int16_t *)(x))
#define GET_INT32_VAL(x) (*(int32_t *)(x))
#define GET_INT32_VAL(x) (*(int32_t *)(x))
#define GET_INT64_VAL(x) (*(int64_t *)(x))
#define GET_INT64_VAL(x) (*(int64_t *)(x))
#ifdef _TD_ARM_32
#define GET_UINT8_VAL(x) (*(uint8_t*) (x))
#define GET_UINT16_VAL(x) (*(uint16_t *)(x))
//#define __float_align_declear() float __underlyFloat = 0.0;
#define GET_UINT32_VAL(x) (*(uint32_t *)(x))
//#define __float_align_declear()
#define GET_UINT64_VAL(x) (*(uint64_t *)(x))
//#define GET_FLOAT_VAL_ALIGN(x) (*(int32_t*)&(__underlyFloat) = *(int32_t*)(x); __underlyFloat);
// notes: src must be float or double type variable !!!
//#define SET_FLOAT_VAL_ALIGN(dst, src) (*(int32_t*) dst = *(int32_t*)src);
//#define SET_DOUBLE_VAL_ALIGN(dst, src) (*(int64_t*) dst = *(int64_t*)src);
#ifdef _TD_ARM_32
float
taos_align_get_float
(
const
char
*
pBuf
);
float
taos_align_get_float
(
const
char
*
pBuf
);
double
taos_align_get_double
(
const
char
*
pBuf
);
double
taos_align_get_double
(
const
char
*
pBuf
);
...
@@ -171,14 +173,14 @@ typedef struct tDataTypeDescriptor {
...
@@ -171,14 +173,14 @@ typedef struct tDataTypeDescriptor {
char
algorithm
,
char
*
const
buffer
,
int
bufferSize
);
char
algorithm
,
char
*
const
buffer
,
int
bufferSize
);
int
(
*
decompFunc
)(
const
char
*
const
input
,
int
compressedSize
,
const
int
nelements
,
char
*
const
output
,
int
(
*
decompFunc
)(
const
char
*
const
input
,
int
compressedSize
,
const
int
nelements
,
char
*
const
output
,
int
outputSize
,
char
algorithm
,
char
*
const
buffer
,
int
bufferSize
);
int
outputSize
,
char
algorithm
,
char
*
const
buffer
,
int
bufferSize
);
void
(
*
getStatisFunc
)(
const
TSKEY
*
primaryKey
,
const
void
*
pData
,
int32_t
numofrow
,
int64_t
*
min
,
int64_t
*
max
,
void
(
*
getStatisFunc
)(
const
void
*
pData
,
int32_t
numofrow
,
int64_t
*
min
,
int64_t
*
max
,
int64_t
*
sum
,
int64_t
*
sum
,
int16_t
*
minindex
,
int16_t
*
maxindex
,
int16_t
*
numofnull
);
int16_t
*
minindex
,
int16_t
*
maxindex
,
int16_t
*
numofnull
);
}
tDataTypeDescriptor
;
}
tDataTypeDescriptor
;
extern
tDataTypeDescriptor
tDataTypeDesc
[
1
1
];
extern
tDataTypeDescriptor
tDataTypeDesc
[
1
5
];
bool
isValidDataType
(
int32_t
type
);
bool
isValidDataType
(
int32_t
type
);
//bool isNull(const char *val, int32_t type);
static
FORCE_INLINE
bool
isNull
(
const
char
*
val
,
int32_t
type
)
{
static
FORCE_INLINE
bool
isNull
(
const
char
*
val
,
int32_t
type
)
{
switch
(
type
)
{
switch
(
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
case
TSDB_DATA_TYPE_BOOL
:
...
@@ -200,6 +202,15 @@ static FORCE_INLINE bool isNull(const char *val, int32_t type) {
...
@@ -200,6 +202,15 @@ static FORCE_INLINE bool isNull(const char *val, int32_t type) {
return
varDataLen
(
val
)
==
sizeof
(
int32_t
)
&&
*
(
uint32_t
*
)
varDataVal
(
val
)
==
TSDB_DATA_NCHAR_NULL
;
return
varDataLen
(
val
)
==
sizeof
(
int32_t
)
&&
*
(
uint32_t
*
)
varDataVal
(
val
)
==
TSDB_DATA_NCHAR_NULL
;
case
TSDB_DATA_TYPE_BINARY
:
case
TSDB_DATA_TYPE_BINARY
:
return
varDataLen
(
val
)
==
sizeof
(
int8_t
)
&&
*
(
uint8_t
*
)
varDataVal
(
val
)
==
TSDB_DATA_BINARY_NULL
;
return
varDataLen
(
val
)
==
sizeof
(
int8_t
)
&&
*
(
uint8_t
*
)
varDataVal
(
val
)
==
TSDB_DATA_BINARY_NULL
;
case
TSDB_DATA_TYPE_UTINYINT
:
return
*
(
uint8_t
*
)
val
==
TSDB_DATA_UTINYINT_NULL
;
case
TSDB_DATA_TYPE_USMALLINT
:
return
*
(
uint16_t
*
)
val
==
TSDB_DATA_USMALLINT_NULL
;
case
TSDB_DATA_TYPE_UINT
:
return
*
(
uint32_t
*
)
val
==
TSDB_DATA_UINT_NULL
;
case
TSDB_DATA_TYPE_UBIGINT
:
return
*
(
uint64_t
*
)
val
==
TSDB_DATA_UBIGINT_NULL
;
default:
default:
return
false
;
return
false
;
};
};
...
@@ -213,6 +224,10 @@ void* getNullValue(int32_t type);
...
@@ -213,6 +224,10 @@ void* getNullValue(int32_t type);
void
assignVal
(
char
*
val
,
const
char
*
src
,
int32_t
len
,
int32_t
type
);
void
assignVal
(
char
*
val
,
const
char
*
src
,
int32_t
len
,
int32_t
type
);
void
tsDataSwap
(
void
*
pLeft
,
void
*
pRight
,
int32_t
type
,
int32_t
size
,
void
*
buf
);
void
tsDataSwap
(
void
*
pLeft
,
void
*
pRight
,
int32_t
type
,
int32_t
size
,
void
*
buf
);
int32_t
tStrToInteger
(
const
char
*
z
,
int16_t
type
,
int32_t
n
,
int64_t
*
value
,
bool
issigned
);
#define SET_DOUBLE_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_DOUBLE_NULL)
// TODO: check if below is necessary
// TODO: check if below is necessary
#define TSDB_RELATION_INVALID 0
#define TSDB_RELATION_INVALID 0
#define TSDB_RELATION_LESS 1
#define TSDB_RELATION_LESS 1
...
...
src/inc/taoserror.h
浏览文件 @
7465d0c7
...
@@ -180,6 +180,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_NOT_EXIST, 0, 0x036A, "Tag does n
...
@@ -180,6 +180,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_TAG_NOT_EXIST, 0, 0x036A, "Tag does n
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_ALREAY_EXIST
,
0
,
0x036B
,
"Field already exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_ALREAY_EXIST
,
0
,
0x036B
,
"Field already exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_NOT_EXIST
,
0
,
0x036C
,
"Field does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_FIELD_NOT_EXIST
,
0
,
0x036C
,
"Field does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_STABLE_NAME
,
0
,
0x036D
,
"Super table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_STABLE_NAME
,
0
,
0x036D
,
"Super table does not exist"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
,
0
,
0x036E
,
"Invalid create table message"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_DB_NOT_SELECTED
,
0
,
0x0380
,
"Database not specified or available"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_DB_NOT_SELECTED
,
0
,
0x0380
,
"Database not specified or available"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_DB_ALREADY_EXIST
,
0
,
0x0381
,
"Database already exists"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_DB_ALREADY_EXIST
,
0
,
0x0381
,
"Database already exists"
)
...
...
src/inc/ttokendef.h
浏览文件 @
7465d0c7
...
@@ -117,112 +117,114 @@
...
@@ -117,112 +117,114 @@
#define TK_CACHELAST 99
#define TK_CACHELAST 99
#define TK_LP 100
#define TK_LP 100
#define TK_RP 101
#define TK_RP 101
#define TK_TAGS 102
#define TK_UNSIGNED 102
#define TK_USING 103
#define TK_TAGS 103
#define TK_AS 104
#define TK_USING 104
#define TK_COMMA 105
#define TK_AS 105
#define TK_NULL 106
#define TK_COMMA 106
#define TK_SELECT 107
#define TK_NULL 107
#define TK_UNION 108
#define TK_SELECT 108
#define TK_ALL 109
#define TK_UNION 109
#define TK_FROM 110
#define TK_ALL 110
#define TK_VARIABLE 111
#define TK_FROM 111
#define TK_INTERVAL 112
#define TK_VARIABLE 112
#define TK_FILL 113
#define TK_INTERVAL 113
#define TK_SLIDING 114
#define TK_FILL 114
#define TK_ORDER 115
#define TK_SLIDING 115
#define TK_BY 116
#define TK_ORDER 116
#define TK_ASC 117
#define TK_BY 117
#define TK_DESC 118
#define TK_ASC 118
#define TK_GROUP 119
#define TK_DESC 119
#define TK_HAVING 120
#define TK_GROUP 120
#define TK_LIMIT 121
#define TK_HAVING 121
#define TK_OFFSET 122
#define TK_LIMIT 122
#define TK_SLIMIT 123
#define TK_OFFSET 123
#define TK_SOFFSET 124
#define TK_SLIMIT 124
#define TK_WHERE 125
#define TK_SOFFSET 125
#define TK_NOW 126
#define TK_WHERE 126
#define TK_RESET 127
#define TK_NOW 127
#define TK_QUERY 128
#define TK_RESET 128
#define TK_ADD 129
#define TK_QUERY 129
#define TK_COLUMN 130
#define TK_ADD 130
#define TK_TAG 131
#define TK_COLUMN 131
#define TK_CHANGE 132
#define TK_TAG 132
#define TK_SET 133
#define TK_CHANGE 133
#define TK_KILL 134
#define TK_SET 134
#define TK_CONNECTION 135
#define TK_KILL 135
#define TK_STREAM 136
#define TK_CONNECTION 136
#define TK_COLON 137
#define TK_STREAM 137
#define TK_ABORT 138
#define TK_COLON 138
#define TK_AFTER 139
#define TK_ABORT 139
#define TK_ATTACH 140
#define TK_AFTER 140
#define TK_BEFORE 141
#define TK_ATTACH 141
#define TK_BEGIN 142
#define TK_BEFORE 142
#define TK_CASCADE 143
#define TK_BEGIN 143
#define TK_CLUSTER 144
#define TK_CASCADE 144
#define TK_CONFLICT 145
#define TK_CLUSTER 145
#define TK_COPY 146
#define TK_CONFLICT 146
#define TK_DEFERRED 147
#define TK_COPY 147
#define TK_DELIMITERS 148
#define TK_DEFERRED 148
#define TK_DETACH 149
#define TK_DELIMITERS 149
#define TK_EACH 150
#define TK_DETACH 150
#define TK_END 151
#define TK_EACH 151
#define TK_EXPLAIN 152
#define TK_END 152
#define TK_FAIL 153
#define TK_EXPLAIN 153
#define TK_FOR 154
#define TK_FAIL 154
#define TK_IGNORE 155
#define TK_FOR 155
#define TK_IMMEDIATE 156
#define TK_IGNORE 156
#define TK_INITIALLY 157
#define TK_IMMEDIATE 157
#define TK_INSTEAD 158
#define TK_INITIALLY 158
#define TK_MATCH 159
#define TK_INSTEAD 159
#define TK_KEY 160
#define TK_MATCH 160
#define TK_OF 161
#define TK_KEY 161
#define TK_RAISE 162
#define TK_OF 162
#define TK_REPLACE 163
#define TK_RAISE 163
#define TK_RESTRICT 164
#define TK_REPLACE 164
#define TK_ROW 165
#define TK_RESTRICT 165
#define TK_STATEMENT 166
#define TK_ROW 166
#define TK_TRIGGER 167
#define TK_STATEMENT 167
#define TK_VIEW 168
#define TK_TRIGGER 168
#define TK_COUNT 169
#define TK_VIEW 169
#define TK_SUM 170
#define TK_COUNT 170
#define TK_AVG 171
#define TK_SUM 171
#define TK_MIN 172
#define TK_AVG 172
#define TK_MAX 173
#define TK_MIN 173
#define TK_FIRST 174
#define TK_MAX 174
#define TK_LAST 175
#define TK_FIRST 175
#define TK_TOP 176
#define TK_LAST 176
#define TK_BOTTOM 177
#define TK_TOP 177
#define TK_STDDEV 178
#define TK_BOTTOM 178
#define TK_PERCENTILE 179
#define TK_STDDEV 179
#define TK_APERCENTILE 180
#define TK_PERCENTILE 180
#define TK_LEASTSQUARES 181
#define TK_APERCENTILE 181
#define TK_HISTOGRAM 182
#define TK_LEASTSQUARES 182
#define TK_DIFF 183
#define TK_HISTOGRAM 183
#define TK_SPREAD 184
#define TK_DIFF 184
#define TK_TWA 185
#define TK_SPREAD 185
#define TK_INTERP 186
#define TK_TWA 186
#define TK_LAST_ROW 187
#define TK_INTERP 187
#define TK_RATE 188
#define TK_LAST_ROW 188
#define TK_IRATE 189
#define TK_RATE 189
#define TK_SUM_RATE 190
#define TK_IRATE 190
#define TK_SUM_IRATE 191
#define TK_SUM_RATE 191
#define TK_AVG_RATE 192
#define TK_SUM_IRATE 192
#define TK_AVG_IRATE 193
#define TK_AVG_RATE 193
#define TK_TBID 194
#define TK_AVG_IRATE 194
#define TK_SEMI 195
#define TK_TBID 195
#define TK_NONE 196
#define TK_SEMI 196
#define TK_PREV 197
#define TK_NONE 197
#define TK_LINEAR 198
#define TK_PREV 198
#define TK_IMPORT 199
#define TK_LINEAR 199
#define TK_METRIC 200
#define TK_IMPORT 200
#define TK_TBNAME 201
#define TK_METRIC 201
#define TK_JOIN 202
#define TK_TBNAME 202
#define TK_METRICS 203
#define TK_JOIN 203
#define TK_STABLE 204
#define TK_METRICS 204
#define TK_INSERT 205
#define TK_STABLE 205
#define TK_INTO 206
#define TK_INSERT 206
#define TK_VALUES 207
#define TK_INTO 207
#define TK_VALUES 208
#define TK_SPACE 300
#define TK_SPACE 300
...
...
src/inc/ttype.h
浏览文件 @
7465d0c7
...
@@ -8,27 +8,56 @@ extern "C" {
...
@@ -8,27 +8,56 @@ extern "C" {
#include "taosdef.h"
#include "taosdef.h"
#define GET_TYPED_DATA(_v, _finalType, _type, _data) \
#define GET_TYPED_DATA(_v, _finalType, _type, _data) \
do { \
switch (_type) { \
switch (_type) { \
case TSDB_DATA_TYPE_BOOL: \
case TSDB_DATA_TYPE_BOOL: \
case TSDB_DATA_TYPE_TINYINT: \
case TSDB_DATA_TYPE_TINYINT: \
(_v) = (_finalType)GET_INT8_VAL(_data); \
(_v) = (_finalType)GET_INT8_VAL(_data); \
break; \
break; \
case TSDB_DATA_TYPE_UTINYINT: \
(_v) = (_finalType)GET_UINT8_VAL(_data); \
break; \
case TSDB_DATA_TYPE_SMALLINT: \
case TSDB_DATA_TYPE_SMALLINT: \
(_v) = (_finalType)GET_INT16_VAL(_data); \
(_v) = (_finalType)GET_INT16_VAL(_data); \
break; \
break; \
case TSDB_DATA_TYPE_USMALLINT: \
(_v) = (_finalType)GET_UINT16_VAL(_data); \
break; \
case TSDB_DATA_TYPE_BIGINT: \
case TSDB_DATA_TYPE_BIGINT: \
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
(_v) = (_finalType)(GET_INT64_VAL(_data)); \
break; \
break; \
case TSDB_DATA_TYPE_UBIGINT: \
(_v) = (_finalType)(GET_UINT64_VAL(_data)); \
break; \
case TSDB_DATA_TYPE_FLOAT: \
case TSDB_DATA_TYPE_FLOAT: \
(_v) = (_finalType)GET_FLOAT_VAL(_data); \
(_v) = (_finalType)GET_FLOAT_VAL(_data); \
break; \
break; \
case TSDB_DATA_TYPE_DOUBLE: \
case TSDB_DATA_TYPE_DOUBLE: \
(_v) = (_finalType)GET_DOUBLE_VAL(_data); \
(_v) = (_finalType)GET_DOUBLE_VAL(_data); \
break; \
break; \
case TSDB_DATA_TYPE_UINT: \
(_v) = (_finalType)GET_UINT32_VAL(_data); \
break; \
default: \
default: \
(_v) = (_finalType)GET_INT32_VAL(_data); \
(_v) = (_finalType)GET_INT32_VAL(_data); \
break; \
break; \
}
} \
} while (0)
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
#define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t)))
#define IS_VALID_TINYINT(_t) ((_t) > INT8_MIN && (_t) <= INT8_MAX)
#define IS_VALID_SMALLINT(_t) ((_t) > INT16_MIN && (_t) <= INT16_MAX)
#define IS_VALID_INT(_t) ((_t) > INT32_MIN && (_t) <= INT32_MAX)
#define IS_VALID_BIGINT(_t) ((_t) > INT64_MIN && (_t) <= INT64_MAX)
#define IS_VALID_UTINYINT(_t) ((_t) >= 0 && (_t) < UINT8_MAX)
#define IS_VALID_USMALLINT(_t) ((_t) >= 0 && (_t) < UINT16_MAX)
#define IS_VALID_UINT(_t) ((_t) >= 0 && (_t) < UINT32_MAX)
#define IS_VALID_UBIGINT(_t) ((_t) >= 0 && (_t) < UINT64_MAX)
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/kit/shell/src/shellEngine.c
浏览文件 @
7465d0c7
...
@@ -603,15 +603,27 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le
...
@@ -603,15 +603,27 @@ static void printField(const char* val, TAOS_FIELD* field, int width, int32_t le
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_TINYINT
:
printf
(
"%*d"
,
width
,
*
((
int8_t
*
)
val
));
printf
(
"%*d"
,
width
,
*
((
int8_t
*
)
val
));
break
;
break
;
case
TSDB_DATA_TYPE_UTINYINT
:
printf
(
"%*u"
,
width
,
*
((
uint8_t
*
)
val
));
break
;
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
printf
(
"%*d"
,
width
,
*
((
int16_t
*
)
val
));
printf
(
"%*d"
,
width
,
*
((
int16_t
*
)
val
));
break
;
break
;
case
TSDB_DATA_TYPE_USMALLINT
:
printf
(
"%*u"
,
width
,
*
((
uint16_t
*
)
val
));
break
;
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
printf
(
"%*d"
,
width
,
*
((
int32_t
*
)
val
));
printf
(
"%*d"
,
width
,
*
((
int32_t
*
)
val
));
break
;
break
;
case
TSDB_DATA_TYPE_UINT
:
printf
(
"%*u"
,
width
,
*
((
uint32_t
*
)
val
));
break
;
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
printf
(
"%*"
PRId64
,
width
,
*
((
int64_t
*
)
val
));
printf
(
"%*"
PRId64
,
width
,
*
((
int64_t
*
)
val
));
break
;
break
;
case
TSDB_DATA_TYPE_UBIGINT
:
printf
(
"%*"
PRIu64
,
width
,
*
((
uint64_t
*
)
val
));
break
;
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_FLOAT
:
printf
(
"%*.5f"
,
width
,
GET_FLOAT_VAL
(
val
));
printf
(
"%*.5f"
,
width
,
GET_FLOAT_VAL
(
val
));
break
;
break
;
...
@@ -679,15 +691,19 @@ static int calcColWidth(TAOS_FIELD* field, int precision) {
...
@@ -679,15 +691,19 @@ static int calcColWidth(TAOS_FIELD* field, int precision) {
return
MAX
(
5
,
width
);
// 'false'
return
MAX
(
5
,
width
);
// 'false'
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_TINYINT
:
case
TSDB_DATA_TYPE_UTINYINT
:
return
MAX
(
4
,
width
);
// '-127'
return
MAX
(
4
,
width
);
// '-127'
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_SMALLINT
:
case
TSDB_DATA_TYPE_USMALLINT
:
return
MAX
(
6
,
width
);
// '-32767'
return
MAX
(
6
,
width
);
// '-32767'
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_INT
:
case
TSDB_DATA_TYPE_UINT
:
return
MAX
(
11
,
width
);
// '-2147483648'
return
MAX
(
11
,
width
);
// '-2147483648'
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_BIGINT
:
case
TSDB_DATA_TYPE_UBIGINT
:
return
MAX
(
21
,
width
);
// '-9223372036854775807'
return
MAX
(
21
,
width
);
// '-9223372036854775807'
case
TSDB_DATA_TYPE_FLOAT
:
case
TSDB_DATA_TYPE_FLOAT
:
...
...
src/kit/taosdemox/insert.json
浏览文件 @
7465d0c7
...
@@ -5,7 +5,8 @@
...
@@ -5,7 +5,8 @@
"port"
:
6030
,
"port"
:
6030
,
"user"
:
"root"
,
"user"
:
"root"
,
"password"
:
"taosdata"
,
"password"
:
"taosdata"
,
"thread_count"
:
2
,
"thread_count"
:
4
,
"thread_count_create_tbl"
:
1
,
"result_file"
:
"./insert_res.txt"
,
"result_file"
:
"./insert_res.txt"
,
"databases"
:
[{
"databases"
:
[{
"dbinfo"
:
{
"dbinfo"
:
{
...
...
src/kit/taosdemox/taosdemox.c
浏览文件 @
7465d0c7
...
@@ -93,9 +93,6 @@ extern char configDir[];
...
@@ -93,9 +93,6 @@ extern char configDir[];
#define MAX_QUERY_SQL_COUNT 10
#define MAX_QUERY_SQL_COUNT 10
#define MAX_QUERY_SQL_LENGTH 256
#define MAX_QUERY_SQL_LENGTH 256
#define MAX_LINE_COUNT_IN_MEM 10000
typedef
enum
CREATE_SUB_TALBE_MOD_EN
{
typedef
enum
CREATE_SUB_TALBE_MOD_EN
{
PRE_CREATE_SUBTBL
,
PRE_CREATE_SUBTBL
,
AUTO_CREATE_SUBTBL
,
AUTO_CREATE_SUBTBL
,
...
@@ -259,6 +256,7 @@ typedef struct SDbs_S {
...
@@ -259,6 +256,7 @@ typedef struct SDbs_S {
bool
queryMode
;
bool
queryMode
;
int
threadCount
;
int
threadCount
;
int
threadCountByCreateTbl
;
int
dbCount
;
int
dbCount
;
SDataBase
db
[
MAX_DB_COUNT
];
SDataBase
db
[
MAX_DB_COUNT
];
...
@@ -1418,7 +1416,6 @@ static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName
...
@@ -1418,7 +1416,6 @@ static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName
char
command
[
BUFFER_SIZE
]
=
"
\0
"
;
char
command
[
BUFFER_SIZE
]
=
"
\0
"
;
TAOS_RES
*
res
;
TAOS_RES
*
res
;
TAOS_ROW
row
=
NULL
;
TAOS_ROW
row
=
NULL
;
int
count
=
0
;
char
*
childTblName
=
*
childTblNameOfSuperTbl
;
char
*
childTblName
=
*
childTblNameOfSuperTbl
;
...
@@ -1434,11 +1431,12 @@ static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName
...
@@ -1434,11 +1431,12 @@ static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, char* sTblName
}
}
int
childTblCount
=
10000
;
int
childTblCount
=
10000
;
count
=
0
;
int
count
=
0
;
childTblName
=
(
char
*
)
calloc
(
1
,
childTblCount
*
TSDB_TABLE_NAME_LEN
);
childTblName
=
(
char
*
)
calloc
(
1
,
childTblCount
*
TSDB_TABLE_NAME_LEN
);
char
*
pTblName
=
childTblName
;
char
*
pTblName
=
childTblName
;
while
((
row
=
taos_fetch_row
(
res
))
!=
NULL
)
{
while
((
row
=
taos_fetch_row
(
res
))
!=
NULL
)
{
strncpy
(
pTblName
,
(
char
*
)
row
[
0
],
TSDB_TABLE_NAME_LEN
);
int32_t
*
len
=
taos_fetch_lengths
(
res
);
strncpy
(
pTblName
,
(
char
*
)
row
[
0
],
len
[
0
]);
//printf("==== sub table name: %s\n", pTblName);
//printf("==== sub table name: %s\n", pTblName);
count
++
;
count
++
;
if
(
count
>=
childTblCount
-
1
)
{
if
(
count
>=
childTblCount
-
1
)
{
...
@@ -1829,33 +1827,59 @@ static void createChildTables() {
...
@@ -1829,33 +1827,59 @@ static void createChildTables() {
if
((
AUTO_CREATE_SUBTBL
==
g_Dbs
.
db
[
i
].
superTbls
[
j
].
autoCreateTable
)
||
(
TBL_ALREADY_EXISTS
==
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblExists
))
{
if
((
AUTO_CREATE_SUBTBL
==
g_Dbs
.
db
[
i
].
superTbls
[
j
].
autoCreateTable
)
||
(
TBL_ALREADY_EXISTS
==
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblExists
))
{
continue
;
continue
;
}
}
startMultiThreadCreateChildTable
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
colsOfCreatChildTable
,
g_Dbs
.
threadCount
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
,
g_Dbs
.
db
[
i
].
dbName
,
&
(
g_Dbs
.
db
[
i
].
superTbls
[
j
]));
startMultiThreadCreateChildTable
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
colsOfCreatChildTable
,
g_Dbs
.
threadCount
ByCreateTbl
,
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
,
g_Dbs
.
db
[
i
].
dbName
,
&
(
g_Dbs
.
db
[
i
].
superTbls
[
j
]));
g_totalChildTables
+=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
;
g_totalChildTables
+=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblCount
;
}
}
}
}
}
}
/*
static int taosGetLineNum(const char *fileName)
{
int lineNum = 0;
char cmd[1024] = { 0 };
char buf[1024] = { 0 };
sprintf(cmd, "wc -l %s", fileName);
FILE *fp = popen(cmd, "r");
if (fp == NULL) {
fprintf(stderr, "ERROR: failed to execute:%s, error:%s\n", cmd, strerror(errno));
return lineNum;
}
if (fgets(buf, sizeof(buf), fp)) {
int index = strchr((const char*)buf, ' ') - buf;
buf[index] = '\0';
lineNum = atoi(buf);
}
pclose(fp);
return lineNum;
}
*/
/*
/*
Read 10000 lines at most. If more than 10000 lines, continue to read after using
Read 10000 lines at most. If more than 10000 lines, continue to read after using
*/
*/
int
readTagFromCsvFileToMem
(
SSuperTable
*
sup
t
erTblInfo
)
{
int
readTagFromCsvFileToMem
(
SSuperTable
*
superTblInfo
)
{
size_t
n
=
0
;
size_t
n
=
0
;
ssize_t
readLen
=
0
;
ssize_t
readLen
=
0
;
char
*
line
=
NULL
;
char
*
line
=
NULL
;
FILE
*
fp
=
fopen
(
sup
t
erTblInfo
->
tagsFile
,
"r"
);
FILE
*
fp
=
fopen
(
superTblInfo
->
tagsFile
,
"r"
);
if
(
fp
==
NULL
)
{
if
(
fp
==
NULL
)
{
printf
(
"Failed to open tags file: %s, reason:%s
\n
"
,
sup
t
erTblInfo
->
tagsFile
,
strerror
(
errno
));
printf
(
"Failed to open tags file: %s, reason:%s
\n
"
,
superTblInfo
->
tagsFile
,
strerror
(
errno
));
return
-
1
;
return
-
1
;
}
}
if
(
sup
t
erTblInfo
->
tagDataBuf
)
{
if
(
superTblInfo
->
tagDataBuf
)
{
free
(
sup
t
erTblInfo
->
tagDataBuf
);
free
(
superTblInfo
->
tagDataBuf
);
sup
t
erTblInfo
->
tagDataBuf
=
NULL
;
superTblInfo
->
tagDataBuf
=
NULL
;
}
}
supterTblInfo
->
tagDataBuf
=
calloc
(
supterTblInfo
->
lenOfTagOfOneRow
*
MAX_LINE_COUNT_IN_MEM
,
1
);
int
tagCount
=
10000
;
if
(
supterTblInfo
->
tagDataBuf
==
NULL
)
{
int
count
=
0
;
char
*
tagDataBuf
=
calloc
(
1
,
superTblInfo
->
lenOfTagOfOneRow
*
tagCount
);
if
(
tagDataBuf
==
NULL
)
{
printf
(
"Failed to calloc, reason:%s
\n
"
,
strerror
(
errno
));
printf
(
"Failed to calloc, reason:%s
\n
"
,
strerror
(
errno
));
fclose
(
fp
);
fclose
(
fp
);
return
-
1
;
return
-
1
;
...
@@ -1870,20 +1894,35 @@ int readTagFromCsvFileToMem(SSuperTable * supterTblInfo) {
...
@@ -1870,20 +1894,35 @@ int readTagFromCsvFileToMem(SSuperTable * supterTblInfo) {
continue
;
continue
;
}
}
memcpy
(
supterTblInfo
->
tagDataBuf
+
supterTblInfo
->
tagSampleCount
*
supt
erTblInfo
->
lenOfTagOfOneRow
,
line
,
readLen
);
memcpy
(
tagDataBuf
+
count
*
sup
erTblInfo
->
lenOfTagOfOneRow
,
line
,
readLen
);
supterTblInfo
->
tagSampleC
ount
++
;
c
ount
++
;
if
(
supterTblInfo
->
tagSampleCount
>=
MAX_LINE_COUNT_IN_MEM
)
{
if
(
count
>=
tagCount
-
1
)
{
break
;
char
*
tmp
=
realloc
(
tagDataBuf
,
(
size_t
)
tagCount
*
1
.
5
*
superTblInfo
->
lenOfTagOfOneRow
);
if
(
tmp
!=
NULL
)
{
tagDataBuf
=
tmp
;
tagCount
=
(
int
)(
tagCount
*
1
.
5
);
memset
(
tagDataBuf
+
count
*
superTblInfo
->
lenOfTagOfOneRow
,
0
,
(
size_t
)((
tagCount
-
count
)
*
superTblInfo
->
lenOfTagOfOneRow
));
}
else
{
// exit, if allocate more memory failed
printf
(
"realloc fail for save tag val from %s
\n
"
,
superTblInfo
->
tagsFile
);
tmfree
(
tagDataBuf
);
free
(
line
);
fclose
(
fp
);
return
-
1
;
}
}
}
}
}
superTblInfo
->
tagDataBuf
=
tagDataBuf
;
superTblInfo
->
tagSampleCount
=
count
;
free
(
line
);
free
(
line
);
fclose
(
fp
);
fclose
(
fp
);
return
0
;
return
0
;
}
}
int
readSampleFromJsonFileToMem
(
SSuperTable
*
sup
t
erTblInfo
)
{
int
readSampleFromJsonFileToMem
(
SSuperTable
*
superTblInfo
)
{
// TODO
// TODO
return
0
;
return
0
;
}
}
...
@@ -2139,6 +2178,16 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
...
@@ -2139,6 +2178,16 @@ static bool getMetaFromInsertJsonFile(cJSON* root) {
goto
PARSE_OVER
;
goto
PARSE_OVER
;
}
}
cJSON
*
threads2
=
cJSON_GetObjectItem
(
root
,
"thread_count_create_tbl"
);
if
(
threads2
&&
threads2
->
type
==
cJSON_Number
)
{
g_Dbs
.
threadCountByCreateTbl
=
threads2
->
valueint
;
}
else
if
(
!
threads2
)
{
g_Dbs
.
threadCountByCreateTbl
=
1
;
}
else
{
printf
(
"failed to read json, threads2 not found"
);
goto
PARSE_OVER
;
}
cJSON
*
dbs
=
cJSON_GetObjectItem
(
root
,
"databases"
);
cJSON
*
dbs
=
cJSON_GetObjectItem
(
root
,
"databases"
);
if
(
!
dbs
||
dbs
->
type
!=
cJSON_Array
)
{
if
(
!
dbs
||
dbs
->
type
!=
cJSON_Array
)
{
printf
(
"failed to read json, databases not found
\n
"
);
printf
(
"failed to read json, databases not found
\n
"
);
...
@@ -3008,6 +3057,10 @@ void postFreeResource() {
...
@@ -3008,6 +3057,10 @@ void postFreeResource() {
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
);
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
=
NULL
;
g_Dbs
.
db
[
i
].
superTbls
[
j
].
sampleDataBuf
=
NULL
;
}
}
if
(
0
!=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
)
{
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
tagDataBuf
=
NULL
;
}
if
(
0
!=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
)
{
if
(
0
!=
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
)
{
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
);
free
(
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
);
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
=
NULL
;
g_Dbs
.
db
[
i
].
superTbls
[
j
].
childTblName
=
NULL
;
...
...
src/mnode/src/mnodeTable.c
浏览文件 @
7465d0c7
...
@@ -35,12 +35,9 @@
...
@@ -35,12 +35,9 @@
#include "mnodeAcct.h"
#include "mnodeAcct.h"
#include "mnodeDb.h"
#include "mnodeDb.h"
#include "mnodeDnode.h"
#include "mnodeDnode.h"
#include "mnodeMnode.h"
#include "mnodeProfile.h"
#include "mnodeSdb.h"
#include "mnodeSdb.h"
#include "mnodeShow.h"
#include "mnodeShow.h"
#include "mnodeTable.h"
#include "mnodeTable.h"
#include "mnodeUser.h"
#include "mnodeVgroup.h"
#include "mnodeVgroup.h"
#include "mnodeWrite.h"
#include "mnodeWrite.h"
#include "mnodeRead.h"
#include "mnodeRead.h"
...
@@ -1003,7 +1000,7 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
...
@@ -1003,7 +1000,7 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
SCMCreateTableMsg
*
pCreate1
=
pMsg
->
rpcMsg
.
pCont
;
SCMCreateTableMsg
*
pCreate1
=
pMsg
->
rpcMsg
.
pCont
;
if
(
pCreate1
->
numOfTables
==
0
)
{
if
(
pCreate1
->
numOfTables
==
0
)
{
// todo return to error message
return
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
;
}
}
SCreateTableMsg
*
pCreate
=
(
SCreateTableMsg
*
)((
char
*
)
pCreate1
+
sizeof
(
SCMCreateTableMsg
));
SCreateTableMsg
*
pCreate
=
(
SCreateTableMsg
*
)((
char
*
)
pCreate1
+
sizeof
(
SCMCreateTableMsg
));
...
@@ -1032,16 +1029,39 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
...
@@ -1032,16 +1029,39 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
mError
(
"msg:%p, app:%p table:%s, failed to create, no schema input"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pCreate
->
tableId
);
mError
(
"msg:%p, app:%p table:%s, failed to create, no schema input"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pCreate
->
tableId
);
return
TSDB_CODE_MND_INVALID_TABLE_NAME
;
return
TSDB_CODE_MND_INVALID_TABLE_NAME
;
}
}
memcpy
(
pStable
->
schema
,
pCreate
->
schema
,
numOfCols
*
sizeof
(
SSchema
));
memcpy
(
pStable
->
schema
,
pCreate
->
schema
,
numOfCols
*
sizeof
(
SSchema
));
if
(
pStable
->
numOfColumns
>
TSDB_MAX_COLUMNS
||
pStable
->
numOfTags
>
TSDB_MAX_TAGS
)
{
mError
(
"msg:%p, app:%p table:%s, failed to create, too many columns"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pCreate
->
tableId
);
return
TSDB_CODE_MND_INVALID_TABLE_NAME
;
}
pStable
->
nextColId
=
0
;
pStable
->
nextColId
=
0
;
// TODO extract method to valid the schema
int32_t
schemaLen
=
0
;
int32_t
tagLen
=
0
;
for
(
int32_t
col
=
0
;
col
<
numOfCols
;
col
++
)
{
for
(
int32_t
col
=
0
;
col
<
numOfCols
;
col
++
)
{
SSchema
*
tschema
=
pStable
->
schema
;
SSchema
*
tschema
=
pStable
->
schema
;
tschema
[
col
].
colId
=
pStable
->
nextColId
++
;
tschema
[
col
].
colId
=
pStable
->
nextColId
++
;
tschema
[
col
].
bytes
=
htons
(
tschema
[
col
].
bytes
);
tschema
[
col
].
bytes
=
htons
(
tschema
[
col
].
bytes
);
// todo 1. check the length of each column; 2. check the total length of all columns
if
(
col
<
pStable
->
numOfTables
)
{
assert
(
tschema
[
col
].
type
>=
TSDB_DATA_TYPE_BOOL
&&
tschema
[
col
].
type
<=
TSDB_DATA_TYPE_NCHAR
);
schemaLen
+=
tschema
[
col
].
bytes
;
}
else
{
tagLen
+=
tschema
[
col
].
bytes
;
}
if
(
!
isValidDataType
(
tschema
[
col
].
type
))
{
mError
(
"msg:%p, app:%p table:%s, failed to create, invalid data type in schema"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pCreate
->
tableId
);
return
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
;
}
}
if
(
schemaLen
>
(
TSDB_MAX_BYTES_PER_ROW
||
tagLen
>
TSDB_MAX_TAGS_LEN
))
{
mError
(
"msg:%p, app:%p table:%s, failed to create, schema is too long"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
pCreate
->
tableId
);
return
TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG
;
}
}
pMsg
->
pTable
=
(
STableObj
*
)
pStable
;
pMsg
->
pTable
=
(
STableObj
*
)
pStable
;
...
...
src/os/inc/osString.h
浏览文件 @
7465d0c7
...
@@ -47,7 +47,7 @@ extern "C" {
...
@@ -47,7 +47,7 @@ extern "C" {
// USE_LIBICONV
// USE_LIBICONV
int32_t
taosUcs4ToMbs
(
void
*
ucs4
,
int32_t
ucs4_max_len
,
char
*
mbs
);
int32_t
taosUcs4ToMbs
(
void
*
ucs4
,
int32_t
ucs4_max_len
,
char
*
mbs
);
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbs_len
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
size_
t
*
len
);
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbs_len
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
in
t
*
len
);
int
tasoUcs4Compare
(
void
*
f1_ucs4
,
void
*
f2_ucs4
,
int
bytes
);
int
tasoUcs4Compare
(
void
*
f1_ucs4
,
void
*
f2_ucs4
,
int
bytes
);
bool
taosValidateEncodec
(
const
char
*
encodec
);
bool
taosValidateEncodec
(
const
char
*
encodec
);
char
*
taosCharsetReplace
(
char
*
charsetstr
);
char
*
taosCharsetReplace
(
char
*
charsetstr
);
...
...
src/os/inc/osSysinfo.h
浏览文件 @
7465d0c7
...
@@ -32,6 +32,7 @@ void taosPrintOsInfo();
...
@@ -32,6 +32,7 @@ void taosPrintOsInfo();
int
taosSystem
(
const
char
*
cmd
)
;
int
taosSystem
(
const
char
*
cmd
)
;
void
taosKillSystem
();
void
taosKillSystem
();
bool
taosGetSystemUid
(
char
*
uid
);
bool
taosGetSystemUid
(
char
*
uid
);
char
*
taosGetCmdlineByPID
(
int
pid
);
// TAOS_OS_FUNC_SYSINFO_CORE
// TAOS_OS_FUNC_SYSINFO_CORE
void
taosSetCoreDump
();
void
taosSetCoreDump
();
...
...
src/os/src/detail/osString.c
浏览文件 @
7465d0c7
...
@@ -46,7 +46,7 @@ int32_t taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs) {
...
@@ -46,7 +46,7 @@ int32_t taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs) {
return
(
int32_t
)(
ucs4_max_len
-
outLen
);
return
(
int32_t
)(
ucs4_max_len
-
outLen
);
}
}
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbsLength
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
size
_t
*
len
)
{
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbsLength
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
int32
_t
*
len
)
{
memset
(
ucs4
,
0
,
ucs4_max_len
);
memset
(
ucs4
,
0
,
ucs4_max_len
);
iconv_t
cd
=
iconv_open
(
DEFAULT_UNICODE_ENCODEC
,
tsCharset
);
iconv_t
cd
=
iconv_open
(
DEFAULT_UNICODE_ENCODEC
,
tsCharset
);
size_t
ucs4_input_len
=
mbsLength
;
size_t
ucs4_input_len
=
mbsLength
;
...
@@ -58,7 +58,7 @@ bool taosMbsToUcs4(char *mbs, size_t mbsLength, char *ucs4, int32_t ucs4_max_len
...
@@ -58,7 +58,7 @@ bool taosMbsToUcs4(char *mbs, size_t mbsLength, char *ucs4, int32_t ucs4_max_len
iconv_close
(
cd
);
iconv_close
(
cd
);
if
(
len
!=
NULL
)
{
if
(
len
!=
NULL
)
{
*
len
=
ucs4_max_len
-
outLeft
;
*
len
=
(
int32_t
)(
ucs4_max_len
-
outLeft
)
;
}
}
return
true
;
return
true
;
...
@@ -92,7 +92,7 @@ int32_t taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs) {
...
@@ -92,7 +92,7 @@ int32_t taosUcs4ToMbs(void *ucs4, int32_t ucs4_max_len, char *mbs) {
return
len
;
return
len
;
}
}
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbsLength
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
size
_t
*
len
)
{
bool
taosMbsToUcs4
(
char
*
mbs
,
size_t
mbsLength
,
char
*
ucs4
,
int32_t
ucs4_max_len
,
int32
_t
*
len
)
{
memset
(
ucs4
,
0
,
ucs4_max_len
);
memset
(
ucs4
,
0
,
ucs4_max_len
);
mbstate_t
state
=
{
0
};
mbstate_t
state
=
{
0
};
int32_t
retlen
=
mbsnrtowcs
((
wchar_t
*
)
ucs4
,
(
const
char
**
)
&
mbs
,
mbsLength
,
ucs4_max_len
/
4
,
&
state
);
int32_t
retlen
=
mbsnrtowcs
((
wchar_t
*
)
ucs4
,
(
const
char
**
)
&
mbs
,
mbsLength
,
ucs4_max_len
/
4
,
&
state
);
...
...
src/os/src/linux/linuxEnv.c
浏览文件 @
7465d0c7
...
@@ -40,3 +40,21 @@ void osInit() {
...
@@ -40,3 +40,21 @@ void osInit() {
strcpy
(
tsMnodeDir
,
""
);
strcpy
(
tsMnodeDir
,
""
);
strcpy
(
tsOsName
,
"Linux"
);
strcpy
(
tsOsName
,
"Linux"
);
}
}
char
cmdline
[
1024
];
char
*
taosGetCmdlineByPID
(
int
pid
)
{
sprintf
(
cmdline
,
"/proc/%d/cmdline"
,
pid
);
FILE
*
f
=
fopen
(
cmdline
,
"r"
);
if
(
f
){
size_t
size
;
size
=
fread
(
cmdline
,
sizeof
(
char
),
1024
,
f
);
if
(
size
>
0
){
if
(
'\n'
==
cmdline
[
size
-
1
])
cmdline
[
size
-
1
]
=
'\0'
;
}
fclose
(
f
);
}
return
cmdline
;
}
src/query/inc/qArithmeticOperator.h
浏览文件 @
7465d0c7
...
@@ -13,17 +13,17 @@
...
@@ -13,17 +13,17 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
*/
#ifndef TDENGINE_
TSYNTAXTREEFUNCTION
_H
#ifndef TDENGINE_
QARITHMETICOPERATOR
_H
#define TDENGINE_
TSYNTAXTREEFUNCTION
_H
#define TDENGINE_
QARITHMETICOPERATOR
_H
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
typedef
void
(
*
_
bi_consumer_fn_t
)(
void
*
left
,
void
*
right
,
int32_t
numOfLeft
,
int32_t
numOfRight
,
void
*
outpu
t
,
typedef
void
(
*
_
arithmetic_operator_fn_t
)(
void
*
left
,
int32_t
numLeft
,
int32_t
leftType
,
void
*
right
,
int32_t
numRigh
t
,
int32_t
order
);
int32_t
rightType
,
void
*
output
,
int32_t
order
);
_
bi_consumer_fn_t
getArithmeticOperatorFn
(
int32_t
leftType
,
int32_t
rightType
,
int32_t
o
ptr
);
_
arithmetic_operator_fn_t
getArithmeticOperatorFn
(
int32_t
arithmeticO
ptr
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
src/query/inc/qExecutor.h
浏览文件 @
7465d0c7
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
#include "tsqlfunction.h"
#include "tsqlfunction.h"
struct
SColumnFilterElem
;
struct
SColumnFilterElem
;
typedef
bool
(
*
__filter_func_t
)(
struct
SColumnFilterElem
*
pFilter
,
c
har
*
val1
,
char
*
val2
);
typedef
bool
(
*
__filter_func_t
)(
struct
SColumnFilterElem
*
pFilter
,
c
onst
char
*
val1
,
const
char
*
val2
,
int16_t
type
);
typedef
int32_t
(
*
__block_search_fn_t
)(
char
*
data
,
int32_t
num
,
int64_t
key
,
int32_t
order
);
typedef
int32_t
(
*
__block_search_fn_t
)(
char
*
data
,
int32_t
num
,
int64_t
key
,
int32_t
order
);
typedef
struct
SResultRowPool
{
typedef
struct
SResultRowPool
{
...
...
src/query/inc/qUtil.h
浏览文件 @
7465d0c7
...
@@ -60,11 +60,10 @@ static FORCE_INLINE char *getPosInResultPage(SQueryRuntimeEnv *pRuntimeEnv, int3
...
@@ -60,11 +60,10 @@ static FORCE_INLINE char *getPosInResultPage(SQueryRuntimeEnv *pRuntimeEnv, int3
pQuery
->
pExpr1
[
columnIndex
].
bytes
*
realRowId
;
pQuery
->
pExpr1
[
columnIndex
].
bytes
*
realRowId
;
}
}
bool
isNull
_filter
(
SColumnFilterElem
*
pFilter
,
char
*
minval
,
char
*
maxval
);
bool
isNull
Operator
(
SColumnFilterElem
*
pFilter
,
const
char
*
minval
,
const
char
*
maxval
,
int16_t
type
);
bool
notNull
_filter
(
SColumnFilterElem
*
pFilter
,
char
*
minval
,
char
*
maxval
);
bool
notNull
Operator
(
SColumnFilterElem
*
pFilter
,
const
char
*
minval
,
const
char
*
maxval
,
int16_t
type
);
__filter_func_t
*
getRangeFilterFuncArray
(
int32_t
type
);
__filter_func_t
getFilterOperator
(
int32_t
lowerOptr
,
int32_t
upperOptr
);
__filter_func_t
*
getValueFilterFuncArray
(
int32_t
type
);
SResultRowPool
*
initResultRowPool
(
size_t
size
);
SResultRowPool
*
initResultRowPool
(
size_t
size
);
SResultRow
*
getNewResultRow
(
SResultRowPool
*
p
);
SResultRow
*
getNewResultRow
(
SResultRowPool
*
p
);
...
...
src/query/inc/queryLog.h
浏览文件 @
7465d0c7
...
@@ -22,8 +22,7 @@ extern "C" {
...
@@ -22,8 +22,7 @@ extern "C" {
#include "tlog.h"
#include "tlog.h"
extern
int32_t
qDebugFlag
;
extern
uint32_t
qDebugFlag
;
extern
int8_t
tscEmbedded
;
#define qFatal(...) do { if (qDebugFlag & DEBUG_FATAL) { taosPrintLog("QRY FATAL ", 255, __VA_ARGS__); }} while(0)
#define qFatal(...) do { if (qDebugFlag & DEBUG_FATAL) { taosPrintLog("QRY FATAL ", 255, __VA_ARGS__); }} while(0)
#define qError(...) do { if (qDebugFlag & DEBUG_ERROR) { taosPrintLog("QRY ERROR ", 255, __VA_ARGS__); }} while(0)
#define qError(...) do { if (qDebugFlag & DEBUG_ERROR) { taosPrintLog("QRY ERROR ", 255, __VA_ARGS__); }} while(0)
...
...
src/query/inc/sql.y
浏览文件 @
7465d0c7
...
@@ -291,6 +291,13 @@ typename(A) ::= ids(X) LP signed(Y) RP. {
...
@@ -291,6 +291,13 @@ typename(A) ::= ids(X) LP signed(Y) RP. {
}
}
}
}
// define the unsigned number type
typename(A) ::= ids(X) UNSIGNED(Z). {
X.type = 0;
X.n = ((Z.z + Z.n) - X.z);
tSqlSetColumnType (&A, &X);
}
%type signed {int64_t}
%type signed {int64_t}
signed(A) ::= INTEGER(X). { A = strtol(X.z, NULL, 10); }
signed(A) ::= INTEGER(X). { A = strtol(X.z, NULL, 10); }
signed(A) ::= PLUS INTEGER(X). { A = strtol(X.z, NULL, 10); }
signed(A) ::= PLUS INTEGER(X). { A = strtol(X.z, NULL, 10); }
...
...
src/query/src/qAggMain.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/query/src/qArithmeticOperator.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/query/src/qAst.c
浏览文件 @
7465d0c7
...
@@ -197,76 +197,76 @@ void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput,
...
@@ -197,76 +197,76 @@ void arithmeticTreeTraverse(tExprNode *pExprs, int32_t numOfRows, char *pOutput,
* exprLeft + exprRight
* exprLeft + exprRight
* the type of returned value of one expression is always double float precious
* the type of returned value of one expression is always double float precious
*/
*/
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
TSDB_DATA_TYPE_DOUBLE
,
TSDB_DATA_TYPE_DOUBLE
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
fp
(
pLeftOutput
,
pRightOutput
,
numOfRows
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pRightOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// exprLeft + columnRight
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// exprLeft + columnRight
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
TSDB_DATA_TYPE_DOUBLE
,
pRight
->
pSchema
->
type
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
// set input buffer
// set input buffer
char
*
pInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
char
*
pInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
if
(
order
==
TSDB_ORDER_DESC
)
{
if
(
order
==
TSDB_ORDER_DESC
)
{
reverseCopy
(
pdata
,
pInputData
,
pRight
->
pSchema
->
type
,
numOfRows
);
reverseCopy
(
pdata
,
pInputData
,
pRight
->
pSchema
->
type
,
numOfRows
);
fp
(
pLeftOutput
,
pdata
,
numOfRows
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pdata
,
numOfRows
,
pRight
->
pSchema
->
type
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
{
}
else
{
fp
(
pLeftOutput
,
pInputData
,
numOfRows
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pInputData
,
numOfRows
,
pRight
->
pSchema
->
type
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// exprLeft + 12
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// exprLeft + 12
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
TSDB_DATA_TYPE_DOUBLE
,
pRight
->
pVal
->
nType
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
fp
(
pLeftOutput
,
&
pRight
->
pVal
->
i64Key
,
numOfRows
,
1
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
&
pRight
->
pVal
->
i64
,
1
,
pRight
->
pVal
->
nType
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
else
if
(
pLeft
->
nodeType
==
TSQL_NODE_COL
)
{
}
else
if
(
pLeft
->
nodeType
==
TSQL_NODE_COL
)
{
// column data specified on left-hand-side
// column data specified on left-hand-side
char
*
pLeftInputData
=
getSourceDataBlock
(
param
,
pLeft
->
pSchema
->
name
,
pLeft
->
pSchema
->
colId
);
char
*
pLeftInputData
=
getSourceDataBlock
(
param
,
pLeft
->
pSchema
->
name
,
pLeft
->
pSchema
->
colId
);
if
(
pRight
->
nodeType
==
TSQL_NODE_EXPR
)
{
// columnLeft + expr2
if
(
pRight
->
nodeType
==
TSQL_NODE_EXPR
)
{
// columnLeft + expr2
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pSchema
->
type
,
TSDB_DATA_TYPE_DOUBLE
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
if
(
order
==
TSDB_ORDER_DESC
)
{
if
(
order
==
TSDB_ORDER_DESC
)
{
reverseCopy
(
pdata
,
pLeftInputData
,
pLeft
->
pSchema
->
type
,
numOfRows
);
reverseCopy
(
pdata
,
pLeftInputData
,
pLeft
->
pSchema
->
type
,
numOfRows
);
fp
(
pdata
,
pRightOutput
,
numOfRows
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pdata
,
numOfRows
,
pLeft
->
pSchema
->
type
,
pRightOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
{
}
else
{
fp
(
pLeftInputData
,
pRightOutput
,
numOfRows
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftInputData
,
numOfRows
,
pLeft
->
pSchema
->
type
,
pRightOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// columnLeft + columnRight
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// columnLeft + columnRight
// column data specified on right-hand-side
// column data specified on right-hand-side
char
*
pRightInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
char
*
pRightInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pSchema
->
type
,
pRight
->
pSchema
->
type
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
// both columns are descending order, do not reverse the source data
// both columns are descending order, do not reverse the source data
fp
(
pLeftInputData
,
pRightInputData
,
numOfRows
,
numOfRows
,
pOutput
,
order
);
OperatorFn
(
pLeftInputData
,
numOfRows
,
pLeft
->
pSchema
->
type
,
pRightInputData
,
numOfRows
,
pRight
->
pSchema
->
type
,
pOutput
,
order
);
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// columnLeft + 12
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// columnLeft + 12
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pSchema
->
type
,
pRight
->
pVal
->
nType
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
if
(
order
==
TSDB_ORDER_DESC
)
{
if
(
order
==
TSDB_ORDER_DESC
)
{
reverseCopy
(
pdata
,
pLeftInputData
,
pLeft
->
pSchema
->
type
,
numOfRows
);
reverseCopy
(
pdata
,
pLeftInputData
,
pLeft
->
pSchema
->
type
,
numOfRows
);
fp
(
pdata
,
&
pRight
->
pVal
->
i64Key
,
numOfRows
,
1
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pdata
,
numOfRows
,
pLeft
->
pSchema
->
type
,
&
pRight
->
pVal
->
i64
,
1
,
pRight
->
pVal
->
nType
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
{
}
else
{
fp
(
pLeftInputData
,
&
pRight
->
pVal
->
i64Key
,
numOfRows
,
1
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
pLeftInputData
,
numOfRows
,
pLeft
->
pSchema
->
type
,
&
pRight
->
pVal
->
i64
,
1
,
pRight
->
pVal
->
nType
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
}
}
else
{
}
else
{
// column data specified on left-hand-side
// column data specified on left-hand-side
if
(
pRight
->
nodeType
==
TSQL_NODE_EXPR
)
{
// 12 + expr2
if
(
pRight
->
nodeType
==
TSQL_NODE_EXPR
)
{
// 12 + expr2
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pVal
->
nType
,
TSDB_DATA_TYPE_DOUBLE
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
fp
(
&
pLeft
->
pVal
->
i64Key
,
pRightOutput
,
1
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
&
pLeft
->
pVal
->
i64
,
1
,
pLeft
->
pVal
->
nType
,
pRightOutput
,
numOfRows
,
TSDB_DATA_TYPE_DOUBLE
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// 12 + columnRight
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_COL
)
{
// 12 + columnRight
// column data specified on right-hand-side
// column data specified on right-hand-side
char
*
pRightInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
char
*
pRightInputData
=
getSourceDataBlock
(
param
,
pRight
->
pSchema
->
name
,
pRight
->
pSchema
->
colId
);
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pVal
->
nType
,
pRight
->
pSchema
->
type
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
if
(
order
==
TSDB_ORDER_DESC
)
{
if
(
order
==
TSDB_ORDER_DESC
)
{
reverseCopy
(
pdata
,
pRightInputData
,
pRight
->
pSchema
->
type
,
numOfRows
);
reverseCopy
(
pdata
,
pRightInputData
,
pRight
->
pSchema
->
type
,
numOfRows
);
fp
(
&
pLeft
->
pVal
->
i64Key
,
pdata
,
numOfRows
,
1
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
&
pLeft
->
pVal
->
i64
,
1
,
pLeft
->
pVal
->
nType
,
pdata
,
numOfRows
,
pRight
->
pSchema
->
type
,
pOutput
,
TSDB_ORDER_ASC
);
}
else
{
}
else
{
fp
(
&
pLeft
->
pVal
->
i64Key
,
pRightInputData
,
1
,
numOfRows
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
&
pLeft
->
pVal
->
i64
,
1
,
pLeft
->
pVal
->
nType
,
pRightInputData
,
numOfRows
,
pRight
->
pSchema
->
type
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// 12 + 12
}
else
if
(
pRight
->
nodeType
==
TSQL_NODE_VALUE
)
{
// 12 + 12
_
bi_consumer_fn_t
fp
=
getArithmeticOperatorFn
(
pLeft
->
pVal
->
nType
,
pRight
->
pVal
->
nType
,
pExprs
->
_node
.
optr
);
_
arithmetic_operator_fn_t
OperatorFn
=
getArithmeticOperatorFn
(
pExprs
->
_node
.
optr
);
fp
(
&
pLeft
->
pVal
->
i64Key
,
&
pRight
->
pVal
->
i64Key
,
1
,
1
,
pOutput
,
TSDB_ORDER_ASC
);
OperatorFn
(
&
pLeft
->
pVal
->
i64
,
1
,
pLeft
->
pVal
->
nType
,
&
pRight
->
pVal
->
i64
,
1
,
pRight
->
pVal
->
nType
,
pOutput
,
TSDB_ORDER_ASC
);
}
}
}
}
...
@@ -285,7 +285,7 @@ static void exprTreeToBinaryImpl(SBufferWriter* bw, tExprNode* expr) {
...
@@ -285,7 +285,7 @@ static void exprTreeToBinaryImpl(SBufferWriter* bw, tExprNode* expr) {
tbufWriteInt32
(
bw
,
pVal
->
nLen
);
tbufWriteInt32
(
bw
,
pVal
->
nLen
);
tbufWrite
(
bw
,
pVal
->
pz
,
pVal
->
nLen
);
tbufWrite
(
bw
,
pVal
->
pz
,
pVal
->
nLen
);
}
else
{
}
else
{
tbufWriteInt64
(
bw
,
pVal
->
i64
Key
);
tbufWriteInt64
(
bw
,
pVal
->
i64
);
}
}
}
else
if
(
expr
->
nodeType
==
TSQL_NODE_COL
)
{
}
else
if
(
expr
->
nodeType
==
TSQL_NODE_COL
)
{
...
@@ -355,7 +355,7 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) {
...
@@ -355,7 +355,7 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) {
pVal
->
pz
=
calloc
(
1
,
pVal
->
nLen
+
1
);
pVal
->
pz
=
calloc
(
1
,
pVal
->
nLen
+
1
);
tbufReadToBuffer
(
br
,
pVal
->
pz
,
pVal
->
nLen
);
tbufReadToBuffer
(
br
,
pVal
->
pz
,
pVal
->
nLen
);
}
else
{
}
else
{
pVal
->
i64
Key
=
tbufReadInt64
(
br
);
pVal
->
i64
=
tbufReadInt64
(
br
);
}
}
}
else
if
(
pExpr
->
nodeType
==
TSQL_NODE_COL
)
{
}
else
if
(
pExpr
->
nodeType
==
TSQL_NODE_COL
)
{
...
...
src/query/src/qExecutor.c
浏览文件 @
7465d0c7
...
@@ -212,22 +212,22 @@ bool doFilterData(SQuery *pQuery, int32_t elemPos) {
...
@@ -212,22 +212,22 @@ bool doFilterData(SQuery *pQuery, int32_t elemPos) {
bool
isnull
=
isNull
(
pElem
,
pFilterInfo
->
info
.
type
);
bool
isnull
=
isNull
(
pElem
,
pFilterInfo
->
info
.
type
);
if
(
isnull
)
{
if
(
isnull
)
{
if
(
pFilterElem
->
fp
==
isNull
_filte
r
)
{
if
(
pFilterElem
->
fp
==
isNull
Operato
r
)
{
qualified
=
true
;
qualified
=
true
;
break
;
break
;
}
else
{
}
else
{
continue
;
continue
;
}
}
}
else
{
}
else
{
if
(
pFilterElem
->
fp
==
notNull
_filte
r
)
{
if
(
pFilterElem
->
fp
==
notNull
Operato
r
)
{
qualified
=
true
;
qualified
=
true
;
break
;
break
;
}
else
if
(
pFilterElem
->
fp
==
isNull
_filte
r
)
{
}
else
if
(
pFilterElem
->
fp
==
isNull
Operato
r
)
{
continue
;
continue
;
}
}
}
}
if
(
pFilterElem
->
fp
(
pFilterElem
,
pElem
,
pElem
))
{
if
(
pFilterElem
->
fp
(
pFilterElem
,
pElem
,
pElem
,
pFilterInfo
->
info
.
type
))
{
qualified
=
true
;
qualified
=
true
;
break
;
break
;
}
}
...
@@ -1372,7 +1372,7 @@ static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, int32_t offset) {
...
@@ -1372,7 +1372,7 @@ static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, int32_t offset) {
#if defined(_DEBUG_VIEW)
#if defined(_DEBUG_VIEW)
printf
(
"elem in comp ts file:%"
PRId64
", key:%"
PRId64
", tag:%"
PRIu64
", query order:%d, ts order:%d, traverse:%d, index:%d
\n
"
,
printf
(
"elem in comp ts file:%"
PRId64
", key:%"
PRId64
", tag:%"
PRIu64
", query order:%d, ts order:%d, traverse:%d, index:%d
\n
"
,
elem
.
ts
,
key
,
elem
.
tag
.
i64
Key
,
pQuery
->
order
.
order
,
pRuntimeEnv
->
pTsBuf
->
tsOrder
,
elem
.
ts
,
key
,
elem
.
tag
.
i64
,
pQuery
->
order
.
order
,
pRuntimeEnv
->
pTsBuf
->
tsOrder
,
pRuntimeEnv
->
pTsBuf
->
cur
.
order
,
pRuntimeEnv
->
pTsBuf
->
cur
.
tsIndex
);
pRuntimeEnv
->
pTsBuf
->
cur
.
order
,
pRuntimeEnv
->
pTsBuf
->
cur
.
tsIndex
);
#endif
#endif
...
@@ -1412,7 +1412,7 @@ static bool functionNeedToExecute(SQueryRuntimeEnv *pRuntimeEnv, SQLFunctionCtx
...
@@ -1412,7 +1412,7 @@ static bool functionNeedToExecute(SQueryRuntimeEnv *pRuntimeEnv, SQLFunctionCtx
// denote the order type
// denote the order type
if
((
functionId
==
TSDB_FUNC_LAST_DST
||
functionId
==
TSDB_FUNC_LAST
))
{
if
((
functionId
==
TSDB_FUNC_LAST_DST
||
functionId
==
TSDB_FUNC_LAST
))
{
return
pCtx
->
param
[
0
].
i64
Key
==
pQuery
->
order
.
order
;
return
pCtx
->
param
[
0
].
i64
==
pQuery
->
order
.
order
;
}
}
// in the supplementary scan, only the following functions need to be executed
// in the supplementary scan, only the following functions need to be executed
...
@@ -1781,9 +1781,9 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
...
@@ -1781,9 +1781,9 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
* top/bottom values emerge, so does diff function
* top/bottom values emerge, so does diff function
*/
*/
if
(
functionId
==
TSDB_FUNC_TWA
)
{
if
(
functionId
==
TSDB_FUNC_TWA
)
{
pCtx
->
param
[
1
].
i64
Key
=
pQuery
->
window
.
skey
;
pCtx
->
param
[
1
].
i64
=
pQuery
->
window
.
skey
;
pCtx
->
param
[
1
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
1
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
2
].
i64
Key
=
pQuery
->
window
.
ekey
;
pCtx
->
param
[
2
].
i64
=
pQuery
->
window
.
ekey
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
}
}
...
@@ -1813,7 +1813,7 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
...
@@ -1813,7 +1813,7 @@ void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, TSKEY
}
}
}
}
}
else
if
(
functionId
==
TSDB_FUNC_TS_COMP
)
{
}
else
if
(
functionId
==
TSDB_FUNC_TS_COMP
)
{
pCtx
->
param
[
0
].
i64
Key
=
vgId
;
pCtx
->
param
[
0
].
i64
=
vgId
;
pCtx
->
param
[
0
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
0
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
}
}
...
@@ -1952,12 +1952,12 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int16_t order
...
@@ -1952,12 +1952,12 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int16_t order
int32_t
f
=
pQuery
->
pExpr1
[
0
].
base
.
functionId
;
int32_t
f
=
pQuery
->
pExpr1
[
0
].
base
.
functionId
;
assert
(
f
==
TSDB_FUNC_TS
||
f
==
TSDB_FUNC_TS_DUMMY
);
assert
(
f
==
TSDB_FUNC_TS
||
f
==
TSDB_FUNC_TS_DUMMY
);
pCtx
->
param
[
2
].
i64
Key
=
order
;
pCtx
->
param
[
2
].
i64
=
order
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
2
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
3
].
i64
Key
=
functionId
;
pCtx
->
param
[
3
].
i64
=
functionId
;
pCtx
->
param
[
3
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
3
].
nType
=
TSDB_DATA_TYPE_BIGINT
;
pCtx
->
param
[
1
].
i64
Key
=
pQuery
->
order
.
orderColId
;
pCtx
->
param
[
1
].
i64
=
pQuery
->
order
.
orderColId
;
}
}
if
(
functionId
==
TSDB_FUNC_ARITHM
)
{
if
(
functionId
==
TSDB_FUNC_ARITHM
)
{
...
@@ -2478,7 +2478,7 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
...
@@ -2478,7 +2478,7 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
// if isNULL query exists, load the null data column
// if isNULL query exists, load the null data column
for
(
int32_t
j
=
0
;
j
<
pFilterInfo
->
numOfFilters
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
pFilterInfo
->
numOfFilters
;
++
j
)
{
SColumnFilterElem
*
pFilterElem
=
&
pFilterInfo
->
pFilters
[
j
];
SColumnFilterElem
*
pFilterElem
=
&
pFilterInfo
->
pFilters
[
j
];
if
(
pFilterElem
->
fp
==
isNull
_filte
r
)
{
if
(
pFilterElem
->
fp
==
isNull
Operato
r
)
{
return
true
;
return
true
;
}
}
}
}
...
@@ -2493,13 +2493,13 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
...
@@ -2493,13 +2493,13 @@ static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDat
float
maxval
=
(
float
)(
*
(
double
*
)(
&
pDataBlockst
->
max
));
float
maxval
=
(
float
)(
*
(
double
*
)(
&
pDataBlockst
->
max
));
for
(
int32_t
i
=
0
;
i
<
pFilterInfo
->
numOfFilters
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pFilterInfo
->
numOfFilters
;
++
i
)
{
if
(
pFilterInfo
->
pFilters
[
i
].
fp
(
&
pFilterInfo
->
pFilters
[
i
],
(
char
*
)
&
minval
,
(
char
*
)
&
maxval
))
{
if
(
pFilterInfo
->
pFilters
[
i
].
fp
(
&
pFilterInfo
->
pFilters
[
i
],
(
char
*
)
&
minval
,
(
char
*
)
&
maxval
,
TSDB_DATA_TYPE_FLOAT
))
{
return
true
;
return
true
;
}
}
}
}
}
else
{
}
else
{
for
(
int32_t
i
=
0
;
i
<
pFilterInfo
->
numOfFilters
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pFilterInfo
->
numOfFilters
;
++
i
)
{
if
(
pFilterInfo
->
pFilters
[
i
].
fp
(
&
pFilterInfo
->
pFilters
[
i
],
(
char
*
)
&
pDataBlockst
->
min
,
(
char
*
)
&
pDataBlockst
->
max
))
{
if
(
pFilterInfo
->
pFilters
[
i
].
fp
(
&
pFilterInfo
->
pFilters
[
i
],
(
char
*
)
&
pDataBlockst
->
min
,
(
char
*
)
&
pDataBlockst
->
max
,
pFilterInfo
->
info
.
type
))
{
return
true
;
return
true
;
}
}
}
}
...
@@ -2966,7 +2966,7 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable, void *tsdb) {
...
@@ -2966,7 +2966,7 @@ void setTagVal(SQueryRuntimeEnv *pRuntimeEnv, void *pTable, void *tsdb) {
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
pz
);
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
pz
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%"
PRId64
,
pQInfo
,
qDebug
(
"QInfo:%p set tag value for join comparison, colId:%"
PRId64
", val:%"
PRId64
,
pQInfo
,
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
i64
Key
);
pExprInfo
->
base
.
arg
->
argValue
.
i64
,
pRuntimeEnv
->
pCtx
[
0
].
tag
.
i64
);
}
}
}
}
}
}
...
@@ -3946,7 +3946,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
...
@@ -3946,7 +3946,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
}
else
{
}
else
{
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
Key
);
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
);
}
}
return
false
;
return
false
;
...
@@ -3957,7 +3957,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
...
@@ -3957,7 +3957,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
Key
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
}
}
}
else
{
}
else
{
...
@@ -3966,7 +3966,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
...
@@ -3966,7 +3966,7 @@ int32_t setAdditionalInfo(SQInfo *pQInfo, void* pTable, STableQueryInfo *pTableQ
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
Key
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
,
pTableQueryInfo
->
cur
.
blockIndex
,
pTableQueryInfo
->
cur
.
tsIndex
);
}
}
}
}
}
}
...
@@ -4930,7 +4930,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4930,7 +4930,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
}
else
{
}
else
{
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
Key
);
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
);
}
}
return
false
;
return
false
;
...
@@ -4941,7 +4941,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4941,7 +4941,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
cur
.
blockIndex
,
cur
.
tsIndex
);
cur
.
blockIndex
,
cur
.
tsIndex
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
Key
,
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
,
cur
.
blockIndex
,
cur
.
tsIndex
);
cur
.
blockIndex
,
cur
.
tsIndex
);
}
}
}
}
...
@@ -4955,7 +4955,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4955,7 +4955,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
qError
(
"QInfo:%p failed to find tag:%s in ts_comp"
,
pQInfo
,
pTag
->
pz
);
}
else
{
}
else
{
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
Key
);
qError
(
"QInfo:%p failed to find tag:%"
PRId64
" in ts_comp"
,
pQInfo
,
pTag
->
i64
);
}
}
return
false
;
return
false
;
...
@@ -4964,7 +4964,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4964,7 +4964,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
cur
.
blockIndex
,
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%s start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
cur
.
blockIndex
,
cur
.
tsIndex
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
Key
,
cur
.
blockIndex
,
cur
.
tsIndex
);
qDebug
(
"QInfo:%p find tag:%"
PRId64
" start pos in ts_comp, blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
,
cur
.
blockIndex
,
cur
.
tsIndex
);
}
}
}
}
...
@@ -4974,7 +4974,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
...
@@ -4974,7 +4974,7 @@ static bool multiTableMultioutputHelper(SQInfo *pQInfo, int32_t index) {
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pTag
->
nType
==
TSDB_DATA_TYPE_BINARY
||
pTag
->
nType
==
TSDB_DATA_TYPE_NCHAR
)
{
qDebug
(
"QInfo:%p continue scan ts_comp file, tag:%s blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
cur
.
blockIndex
,
cur
.
tsIndex
);
qDebug
(
"QInfo:%p continue scan ts_comp file, tag:%s blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
pz
,
cur
.
blockIndex
,
cur
.
tsIndex
);
}
else
{
}
else
{
qDebug
(
"QInfo:%p continue scan ts_comp file, tag:%"
PRId64
" blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
Key
,
cur
.
blockIndex
,
cur
.
tsIndex
);
qDebug
(
"QInfo:%p continue scan ts_comp file, tag:%"
PRId64
" blockIndex:%d, tsIndex:%d"
,
pQInfo
,
pTag
->
i64
,
cur
.
blockIndex
,
cur
.
tsIndex
);
}
}
}
}
}
}
...
@@ -6025,7 +6025,11 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
...
@@ -6025,7 +6025,11 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
pColInfo
->
bytes
=
htons
(
pColInfo
->
bytes
);
pColInfo
->
bytes
=
htons
(
pColInfo
->
bytes
);
pColInfo
->
numOfFilters
=
htons
(
pColInfo
->
numOfFilters
);
pColInfo
->
numOfFilters
=
htons
(
pColInfo
->
numOfFilters
);
assert
(
pColInfo
->
type
>=
TSDB_DATA_TYPE_BOOL
&&
pColInfo
->
type
<=
TSDB_DATA_TYPE_NCHAR
);
if
(
!
isValidDataType
(
pColInfo
->
type
))
{
qDebug
(
"qmsg:%p, invalid data type in source column, index:%d, type:%d"
,
pQueryMsg
,
col
,
pColInfo
->
type
);
code
=
TSDB_CODE_QRY_INVALID_MSG
;
goto
_cleanup
;
}
int32_t
numOfFilters
=
pColInfo
->
numOfFilters
;
int32_t
numOfFilters
=
pColInfo
->
numOfFilters
;
if
(
numOfFilters
>
0
)
{
if
(
numOfFilters
>
0
)
{
...
@@ -6445,55 +6449,18 @@ static int32_t createFilterInfo(void *pQInfo, SQuery *pQuery) {
...
@@ -6445,55 +6449,18 @@ static int32_t createFilterInfo(void *pQInfo, SQuery *pQuery) {
int32_t
lower
=
pSingleColFilter
->
filterInfo
.
lowerRelOptr
;
int32_t
lower
=
pSingleColFilter
->
filterInfo
.
lowerRelOptr
;
int32_t
upper
=
pSingleColFilter
->
filterInfo
.
upperRelOptr
;
int32_t
upper
=
pSingleColFilter
->
filterInfo
.
upperRelOptr
;
if
(
lower
==
TSDB_RELATION_INVALID
&&
upper
==
TSDB_RELATION_INVALID
)
{
if
(
lower
==
TSDB_RELATION_INVALID
&&
upper
==
TSDB_RELATION_INVALID
)
{
qError
(
"QInfo:%p invalid filter info"
,
pQInfo
);
qError
(
"QInfo:%p invalid filter info"
,
pQInfo
);
return
TSDB_CODE_QRY_INVALID_MSG
;
return
TSDB_CODE_QRY_INVALID_MSG
;
}
}
int16_t
type
=
pQuery
->
colList
[
i
].
type
;
pSingleColFilter
->
fp
=
getFilterOperator
(
lower
,
upper
);
int16_t
bytes
=
pQuery
->
colList
[
i
].
bytes
;
if
(
pSingleColFilter
->
fp
==
NULL
)
{
qError
(
"QInfo:%p invalid filter info"
,
pQInfo
);
// todo refactor
__filter_func_t
*
rangeFilterArray
=
getRangeFilterFuncArray
(
type
);
__filter_func_t
*
filterArray
=
getValueFilterFuncArray
(
type
);
if
(
rangeFilterArray
==
NULL
&&
filterArray
==
NULL
)
{
qError
(
"QInfo:%p failed to get filter function, invalid data type:%d"
,
pQInfo
,
type
);
return
TSDB_CODE_QRY_INVALID_MSG
;
return
TSDB_CODE_QRY_INVALID_MSG
;
}
}
if
((
lower
==
TSDB_RELATION_GREATER_EQUAL
||
lower
==
TSDB_RELATION_GREATER
)
&&
pSingleColFilter
->
bytes
=
pQuery
->
colList
[
i
].
bytes
;
(
upper
==
TSDB_RELATION_LESS_EQUAL
||
upper
==
TSDB_RELATION_LESS
))
{
assert
(
rangeFilterArray
!=
NULL
);
if
(
lower
==
TSDB_RELATION_GREATER_EQUAL
)
{
if
(
upper
==
TSDB_RELATION_LESS_EQUAL
)
{
pSingleColFilter
->
fp
=
rangeFilterArray
[
4
];
}
else
{
pSingleColFilter
->
fp
=
rangeFilterArray
[
2
];
}
}
else
{
if
(
upper
==
TSDB_RELATION_LESS_EQUAL
)
{
pSingleColFilter
->
fp
=
rangeFilterArray
[
3
];
}
else
{
pSingleColFilter
->
fp
=
rangeFilterArray
[
1
];
}
}
}
else
{
// set callback filter function
assert
(
filterArray
!=
NULL
);
if
(
lower
!=
TSDB_RELATION_INVALID
)
{
pSingleColFilter
->
fp
=
filterArray
[
lower
];
if
(
upper
!=
TSDB_RELATION_INVALID
)
{
qError
(
"pQInfo:%p failed to get filter function, invalid filter condition: %d"
,
pQInfo
,
type
);
return
TSDB_CODE_QRY_INVALID_MSG
;
}
}
else
{
pSingleColFilter
->
fp
=
filterArray
[
upper
];
}
}
assert
(
pSingleColFilter
->
fp
!=
NULL
);
pSingleColFilter
->
bytes
=
bytes
;
}
}
j
++
;
j
++
;
...
...
src/query/src/qFilterfunc.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/query/src/qHistogram.c
浏览文件 @
7465d0c7
...
@@ -174,11 +174,11 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
...
@@ -174,11 +174,11 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
if
((
*
pHisto
)
->
numOfElems
>=
1
&&
idx
<
(
*
pHisto
)
->
numOfEntries
)
{
if
((
*
pHisto
)
->
numOfElems
>=
1
&&
idx
<
(
*
pHisto
)
->
numOfEntries
)
{
if
(
idx
>
0
)
{
if
(
idx
>
0
)
{
assert
((
*
pHisto
)
->
elems
[
idx
-
1
].
val
<=
val
);
assert
((
*
pHisto
)
->
elems
[
idx
-
1
].
val
<=
val
);
}
}
else
{
assert
((
*
pHisto
)
->
elems
[
idx
].
val
>
val
);
assert
((
*
pHisto
)
->
elems
[
idx
].
val
>
val
);
}
}
else
if
((
*
pHisto
)
->
numOfElems
>
0
)
{
}
else
if
((
*
pHisto
)
->
numOfElems
>
0
)
{
assert
((
*
pHisto
)
->
elems
[(
*
pHisto
)
->
numOfEntries
].
val
<
val
);
assert
((
*
pHisto
)
->
elems
[(
*
pHisto
)
->
numOfEntries
].
val
<
=
val
);
}
}
histogramCreateBin
(
*
pHisto
,
idx
,
val
);
histogramCreateBin
(
*
pHisto
,
idx
,
val
);
...
...
src/query/src/qParserImpl.c
浏览文件 @
7465d0c7
...
@@ -129,11 +129,11 @@ tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
...
@@ -129,11 +129,11 @@ tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
pSqlExpr
->
nSQLOptr
=
optrType
;
pSqlExpr
->
nSQLOptr
=
optrType
;
}
else
if
(
optrType
==
TK_NOW
)
{
}
else
if
(
optrType
==
TK_NOW
)
{
// use microsecond by default
// use microsecond by default
pSqlExpr
->
val
.
i64
Key
=
taosGetTimestamp
(
TSDB_TIME_PRECISION_MICRO
);
pSqlExpr
->
val
.
i64
=
taosGetTimestamp
(
TSDB_TIME_PRECISION_MICRO
);
pSqlExpr
->
val
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
pSqlExpr
->
val
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
pSqlExpr
->
nSQLOptr
=
TK_TIMESTAMP
;
// TK_TIMESTAMP used to denote the time value is in microsecond
pSqlExpr
->
nSQLOptr
=
TK_TIMESTAMP
;
// TK_TIMESTAMP used to denote the time value is in microsecond
}
else
if
(
optrType
==
TK_VARIABLE
)
{
}
else
if
(
optrType
==
TK_VARIABLE
)
{
int32_t
ret
=
parseAbsoluteDuration
(
pToken
->
z
,
pToken
->
n
,
&
pSqlExpr
->
val
.
i64
Key
);
int32_t
ret
=
parseAbsoluteDuration
(
pToken
->
z
,
pToken
->
n
,
&
pSqlExpr
->
val
.
i64
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
terrno
=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
;
terrno
=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
;
}
}
...
@@ -200,25 +200,25 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
...
@@ -200,25 +200,25 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
switch
(
optrType
)
{
switch
(
optrType
)
{
case
TK_PLUS
:
{
case
TK_PLUS
:
{
pExpr
->
val
.
i64
Key
=
pLeft
->
val
.
i64Key
+
pRight
->
val
.
i64Key
;
pExpr
->
val
.
i64
=
pLeft
->
val
.
i64
+
pRight
->
val
.
i64
;
break
;
break
;
}
}
case
TK_MINUS
:
{
case
TK_MINUS
:
{
pExpr
->
val
.
i64
Key
=
pLeft
->
val
.
i64Key
-
pRight
->
val
.
i64Key
;
pExpr
->
val
.
i64
=
pLeft
->
val
.
i64
-
pRight
->
val
.
i64
;
break
;
break
;
}
}
case
TK_STAR
:
{
case
TK_STAR
:
{
pExpr
->
val
.
i64
Key
=
pLeft
->
val
.
i64Key
*
pRight
->
val
.
i64Key
;
pExpr
->
val
.
i64
=
pLeft
->
val
.
i64
*
pRight
->
val
.
i64
;
break
;
break
;
}
}
case
TK_DIVIDE
:
{
case
TK_DIVIDE
:
{
pExpr
->
nSQLOptr
=
TK_FLOAT
;
pExpr
->
nSQLOptr
=
TK_FLOAT
;
pExpr
->
val
.
nType
=
TSDB_DATA_TYPE_DOUBLE
;
pExpr
->
val
.
nType
=
TSDB_DATA_TYPE_DOUBLE
;
pExpr
->
val
.
dKey
=
(
double
)
pLeft
->
val
.
i64
Key
/
pRight
->
val
.
i64Key
;
pExpr
->
val
.
dKey
=
(
double
)
pLeft
->
val
.
i64
/
pRight
->
val
.
i64
;
break
;
break
;
}
}
case
TK_REM
:
{
case
TK_REM
:
{
pExpr
->
val
.
i64
Key
=
pLeft
->
val
.
i64Key
%
pRight
->
val
.
i64Key
;
pExpr
->
val
.
i64
=
pLeft
->
val
.
i64
%
pRight
->
val
.
i64
;
break
;
break
;
}
}
}
}
...
@@ -231,8 +231,8 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
...
@@ -231,8 +231,8 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
pExpr
->
val
.
nType
=
TSDB_DATA_TYPE_DOUBLE
;
pExpr
->
val
.
nType
=
TSDB_DATA_TYPE_DOUBLE
;
pExpr
->
nSQLOptr
=
TK_FLOAT
;
pExpr
->
nSQLOptr
=
TK_FLOAT
;
double
left
=
(
pLeft
->
val
.
nType
==
TSDB_DATA_TYPE_DOUBLE
)
?
pLeft
->
val
.
dKey
:
pLeft
->
val
.
i64
Key
;
double
left
=
(
pLeft
->
val
.
nType
==
TSDB_DATA_TYPE_DOUBLE
)
?
pLeft
->
val
.
dKey
:
pLeft
->
val
.
i64
;
double
right
=
(
pRight
->
val
.
nType
==
TSDB_DATA_TYPE_DOUBLE
)
?
pRight
->
val
.
dKey
:
pRight
->
val
.
i64
Key
;
double
right
=
(
pRight
->
val
.
nType
==
TSDB_DATA_TYPE_DOUBLE
)
?
pRight
->
val
.
dKey
:
pRight
->
val
.
i64
;
switch
(
optrType
)
{
switch
(
optrType
)
{
case
TK_PLUS
:
{
case
TK_PLUS
:
{
...
@@ -384,7 +384,7 @@ void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType)
...
@@ -384,7 +384,7 @@ void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType)
pField
->
name
[
pName
->
n
]
=
0
;
pField
->
name
[
pName
->
n
]
=
0
;
pField
->
type
=
pType
->
type
;
pField
->
type
=
pType
->
type
;
if
(
pField
->
type
<
TSDB_DATA_TYPE_BOOL
||
pField
->
type
>
TSDB_DATA_TYPE_NCHAR
){
if
(
!
isValidDataType
(
pField
->
type
)
){
pField
->
bytes
=
0
;
pField
->
bytes
=
0
;
}
else
{
}
else
{
pField
->
bytes
=
pType
->
bytes
;
pField
->
bytes
=
pType
->
bytes
;
...
@@ -393,19 +393,31 @@ void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType)
...
@@ -393,19 +393,31 @@ void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType)
}
}
void
tSqlSetColumnType
(
TAOS_FIELD
*
pField
,
SStrToken
*
type
)
{
void
tSqlSetColumnType
(
TAOS_FIELD
*
pField
,
SStrToken
*
type
)
{
// set the field type invalid
pField
->
type
=
-
1
;
pField
->
type
=
-
1
;
pField
->
name
[
0
]
=
0
;
int32_t
i
=
0
;
while
(
i
<
tListLen
(
tDataTypeDesc
))
{
if
((
type
->
n
==
tDataTypeDesc
[
i
].
nameLen
)
&&
(
strncasecmp
(
type
->
z
,
tDataTypeDesc
[
i
].
aName
,
tDataTypeDesc
[
i
].
nameLen
)
==
0
))
{
break
;
}
i
+=
1
;
}
if
(
i
==
tListLen
(
tDataTypeDesc
))
{
return
;
}
for
(
int32_t
i
=
0
;
i
<
tListLen
(
tDataTypeDesc
);
++
i
)
{
if
((
strncasecmp
(
type
->
z
,
tDataTypeDesc
[
i
].
aName
,
tDataTypeDesc
[
i
].
nameLen
)
==
0
)
&&
(
type
->
n
==
tDataTypeDesc
[
i
].
nameLen
))
{
pField
->
type
=
i
;
pField
->
type
=
i
;
pField
->
bytes
=
tDataTypeDesc
[
i
].
nSize
;
pField
->
bytes
=
tDataTypeDesc
[
i
].
nSize
;
if
(
i
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
i
==
TSDB_DATA_TYPE_NCHAR
)
{
/*
/*
* for nchar, the TOKENTYPE is the number of character, so the length is the
* for nchar, the TOKENTYPE is the number of character, so the length is the
* number of bytes in UCS-4 format, which is 4 times larger than the
* number of bytes in UCS-4 format, which is 4 times larger than the number of characters
* number of characters
*/
*/
if
(
type
->
type
==
0
)
{
if
(
type
->
type
==
0
)
{
pField
->
bytes
=
0
;
pField
->
bytes
=
0
;
...
@@ -432,12 +444,10 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
...
@@ -432,12 +444,10 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
}
else
{
}
else
{
bytes
+=
VARSTR_HEADER_SIZE
;
bytes
+=
VARSTR_HEADER_SIZE
;
}
}
pField
->
bytes
=
(
int16_t
)
bytes
;
pField
->
bytes
=
(
int16_t
)
bytes
;
}
}
}
}
break
;
}
}
}
}
/*
/*
...
...
src/query/src/qTokenizer.c
浏览文件 @
7465d0c7
...
@@ -129,6 +129,7 @@ static SKeyword keywordTable[] = {
...
@@ -129,6 +129,7 @@ static SKeyword keywordTable[] = {
{
"PRECISION"
,
TK_PRECISION
},
{
"PRECISION"
,
TK_PRECISION
},
{
"LP"
,
TK_LP
},
{
"LP"
,
TK_LP
},
{
"RP"
,
TK_RP
},
{
"RP"
,
TK_RP
},
{
"UNSIGNED"
,
TK_UNSIGNED
},
{
"TAGS"
,
TK_TAGS
},
{
"TAGS"
,
TK_TAGS
},
{
"USING"
,
TK_USING
},
{
"USING"
,
TK_USING
},
{
"AS"
,
TK_AS
},
{
"AS"
,
TK_AS
},
...
...
src/query/src/qTsbuf.c
浏览文件 @
7465d0c7
...
@@ -268,7 +268,7 @@ static void writeDataToDisk(STSBuf* pTSBuf) {
...
@@ -268,7 +268,7 @@ static void writeDataToDisk(STSBuf* pTSBuf) {
metaLen
+=
(
int32_t
)
fwrite
(
pBlock
->
tag
.
pz
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
pBlock
->
tag
.
pz
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
nLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
i64
Key
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
pBlock
->
tag
.
i64
,
1
,
(
size_t
)
pBlock
->
tag
.
nLen
,
pTSBuf
->
f
);
}
else
{
}
else
{
trueLen
=
0
;
trueLen
=
0
;
metaLen
+=
(
int32_t
)
fwrite
(
&
trueLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
metaLen
+=
(
int32_t
)
fwrite
(
&
trueLen
,
1
,
sizeof
(
pBlock
->
tag
.
nLen
),
pTSBuf
->
f
);
...
@@ -351,7 +351,7 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
...
@@ -351,7 +351,7 @@ STSBlock* readDataFromDisk(STSBuf* pTSBuf, int32_t order, bool decomp) {
sz
=
fread
(
pBlock
->
tag
.
pz
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
sz
=
fread
(
pBlock
->
tag
.
pz
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
UNUSED
(
sz
);
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
//TODO check the return value
}
else
if
(
pBlock
->
tag
.
nType
!=
TSDB_DATA_TYPE_NULL
)
{
//TODO check the return value
sz
=
fread
(
&
pBlock
->
tag
.
i64
Key
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
sz
=
fread
(
&
pBlock
->
tag
.
i64
,
(
size_t
)
pBlock
->
tag
.
nLen
,
1
,
pTSBuf
->
f
);
UNUSED
(
sz
);
UNUSED
(
sz
);
}
}
...
@@ -955,7 +955,7 @@ void tsBufDisplay(STSBuf* pTSBuf) {
...
@@ -955,7 +955,7 @@ void tsBufDisplay(STSBuf* pTSBuf) {
while
(
tsBufNextPos
(
pTSBuf
))
{
while
(
tsBufNextPos
(
pTSBuf
))
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
if
(
elem
.
tag
->
nType
==
TSDB_DATA_TYPE_BIGINT
)
{
if
(
elem
.
tag
->
nType
==
TSDB_DATA_TYPE_BIGINT
)
{
printf
(
"%d-%"
PRId64
"-%"
PRId64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
Key
,
elem
.
ts
);
printf
(
"%d-%"
PRId64
"-%"
PRId64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
,
elem
.
ts
);
}
}
}
}
...
...
src/query/src/sql.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/query/tests/astTest.cpp
浏览文件 @
7465d0c7
...
@@ -471,7 +471,7 @@ tExprNode *createExpr1() {
...
@@ -471,7 +471,7 @@ tExprNode *createExpr1() {
pRight->pVal = (tVariant*) calloc(1, sizeof(tVariant));
pRight->pVal = (tVariant*) calloc(1, sizeof(tVariant));
pRight->pVal->nType = TSDB_DATA_TYPE_INT;
pRight->pVal->nType = TSDB_DATA_TYPE_INT;
pRight->pVal->i64
Key
= 12;
pRight->pVal->i64 = 12;
auto *pRoot = (tExprNode*) calloc(1, sizeof(tExprNode));
auto *pRoot = (tExprNode*) calloc(1, sizeof(tExprNode));
pRoot->nodeType = TSQL_NODE_EXPR;
pRoot->nodeType = TSQL_NODE_EXPR;
...
@@ -574,7 +574,7 @@ void exprSerializeTest1() {
...
@@ -574,7 +574,7 @@ void exprSerializeTest1() {
tVariant* v2 = p2->_node.pRight->pVal;
tVariant* v2 = p2->_node.pRight->pVal;
ASSERT_EQ(v1->nType, v2->nType);
ASSERT_EQ(v1->nType, v2->nType);
ASSERT_EQ(v1->i64
Key, v2->i64Key
);
ASSERT_EQ(v1->i64
, v2->i64
);
ASSERT_EQ(p1->_node.hasPK, p2->_node.hasPK);
ASSERT_EQ(p1->_node.hasPK, p2->_node.hasPK);
tExprTreeDestroy(&p1, nullptr);
tExprTreeDestroy(&p1, nullptr);
...
...
src/query/tests/tsBufTest.cpp
浏览文件 @
7465d0c7
...
@@ -34,7 +34,7 @@ void simpleTest() {
...
@@ -34,7 +34,7 @@ void simpleTest() {
int32_t
num
=
10
;
int32_t
num
=
10
;
tVariant
t
=
{
0
};
tVariant
t
=
{
0
};
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
i64
Key
=
1
;
t
.
i64
=
1
;
int64_t
*
list
=
createTsList
(
10
,
10000000
,
30
);
int64_t
*
list
=
createTsList
(
10
,
10000000
,
30
);
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
...
@@ -61,7 +61,7 @@ void largeTSTest() {
...
@@ -61,7 +61,7 @@ void largeTSTest() {
int32_t
num
=
1000000
;
int32_t
num
=
1000000
;
tVariant
t
=
{
0
};
tVariant
t
=
{
0
};
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
i64
Key
=
1
;
t
.
i64
=
1
;
int64_t
*
list
=
createTsList
(
num
,
10000000
,
30
);
int64_t
*
list
=
createTsList
(
num
,
10000000
,
30
);
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
...
@@ -93,7 +93,7 @@ void multiTagsTest() {
...
@@ -93,7 +93,7 @@ void multiTagsTest() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
0
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
free
(
list
);
free
(
list
);
...
@@ -104,7 +104,7 @@ void multiTagsTest() {
...
@@ -104,7 +104,7 @@ void multiTagsTest() {
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
Key
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
numOfGroups
,
1
);
EXPECT_EQ
(
pTSBuf
->
numOfGroups
,
1
);
tsBufFlush
(
pTSBuf
);
tsBufFlush
(
pTSBuf
);
...
@@ -131,7 +131,7 @@ void multiVnodeTagsTest() {
...
@@ -131,7 +131,7 @@ void multiVnodeTagsTest() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
free
(
list
);
free
(
list
);
...
@@ -144,11 +144,11 @@ void multiVnodeTagsTest() {
...
@@ -144,11 +144,11 @@ void multiVnodeTagsTest() {
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
Key
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
Key
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
,
numOfTags
-
1
);
tsBufFlush
(
pTSBuf
);
tsBufFlush
(
pTSBuf
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
0
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
0
);
...
@@ -175,7 +175,7 @@ void loadDataTest() {
...
@@ -175,7 +175,7 @@ void loadDataTest() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
printf
(
"%d - %"
PRIu64
"
\n
"
,
i
,
list
[
0
]);
printf
(
"%d - %"
PRIu64
"
\n
"
,
i
,
list
[
0
]);
...
@@ -190,11 +190,11 @@ void loadDataTest() {
...
@@ -190,11 +190,11 @@ void loadDataTest() {
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsOrder
,
TSDB_ORDER_ASC
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
Key
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
num
*
sizeof
(
int64_t
));
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
Key
,
numOfTags
-
1
);
EXPECT_EQ
(
pTSBuf
->
block
.
tag
.
i64
,
numOfTags
-
1
);
tsBufFlush
(
pTSBuf
);
tsBufFlush
(
pTSBuf
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
0
);
EXPECT_EQ
(
pTSBuf
->
tsData
.
len
,
0
);
...
@@ -253,7 +253,7 @@ void TSTraverse() {
...
@@ -253,7 +253,7 @@ void TSTraverse() {
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf
,
j
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
printf
(
"%d - %d - %"
PRIu64
", %"
PRIu64
"
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
printf
(
"%d - %d - %"
PRIu64
", %"
PRIu64
"
\n
"
,
j
,
i
,
list
[
0
],
list
[
num
-
1
]);
...
@@ -297,14 +297,14 @@ void TSTraverse() {
...
@@ -297,14 +297,14 @@ void TSTraverse() {
tVariant
t
=
{
0
};
tVariant
t
=
{
0
};
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
nType
=
TSDB_DATA_TYPE_BIGINT
;
t
.
i64
Key
=
startTag
;
t
.
i64
=
startTag
;
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
int32_t
totalOutput
=
10
;
int32_t
totalOutput
=
10
;
while
(
1
)
{
while
(
1
)
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
Key
,
elem
.
ts
);
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
,
elem
.
ts
);
if
(
!
tsBufNextPos
(
pTSBuf
))
{
if
(
!
tsBufNextPos
(
pTSBuf
))
{
break
;
break
;
...
@@ -314,7 +314,7 @@ void TSTraverse() {
...
@@ -314,7 +314,7 @@ void TSTraverse() {
totalOutput
=
10
;
totalOutput
=
10
;
startTag
-=
1
;
startTag
-=
1
;
t
.
i64
Key
=
startTag
;
t
.
i64
=
startTag
;
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
if
(
startTag
==
0
)
{
if
(
startTag
==
0
)
{
...
@@ -345,14 +345,14 @@ void TSTraverse() {
...
@@ -345,14 +345,14 @@ void TSTraverse() {
startVnode
=
1
;
startVnode
=
1
;
startTag
=
2
;
startTag
=
2
;
t
.
i64
Key
=
startTag
;
t
.
i64
=
startTag
;
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
totalOutput
=
10
;
totalOutput
=
10
;
while
(
1
)
{
while
(
1
)
{
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
STSElem
elem
=
tsBufGetElem
(
pTSBuf
);
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
Key
,
elem
.
ts
);
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
,
elem
.
ts
);
if
(
!
tsBufNextPos
(
pTSBuf
))
{
if
(
!
tsBufNextPos
(
pTSBuf
))
{
break
;
break
;
...
@@ -362,7 +362,7 @@ void TSTraverse() {
...
@@ -362,7 +362,7 @@ void TSTraverse() {
totalOutput
=
10
;
totalOutput
=
10
;
startTag
-=
1
;
startTag
-=
1
;
t
.
i64
Key
=
startTag
;
t
.
i64
=
startTag
;
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
tsBufGetElemStartPos
(
pTSBuf
,
startVnode
,
&
t
);
if
(
startTag
<
0
)
{
if
(
startTag
<
0
)
{
...
@@ -414,7 +414,7 @@ void mergeDiffVnodeBufferTest() {
...
@@ -414,7 +414,7 @@ void mergeDiffVnodeBufferTest() {
int64_t
start
=
10000000
;
int64_t
start
=
10000000
;
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf1
,
1
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf1
,
1
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf2
,
9
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf2
,
9
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
...
@@ -451,7 +451,7 @@ void mergeIdenticalVnodeBufferTest() {
...
@@ -451,7 +451,7 @@ void mergeIdenticalVnodeBufferTest() {
int64_t
start
=
10000000
;
int64_t
start
=
10000000
;
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf1
,
12
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf1
,
12
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
free
(
list
);
free
(
list
);
...
@@ -462,7 +462,7 @@ void mergeIdenticalVnodeBufferTest() {
...
@@ -462,7 +462,7 @@ void mergeIdenticalVnodeBufferTest() {
for
(
int32_t
i
=
numOfTags
;
i
<
numOfTags
*
2
;
++
i
)
{
for
(
int32_t
i
=
numOfTags
;
i
<
numOfTags
*
2
;
++
i
)
{
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
int64_t
*
list
=
createTsList
(
num
,
start
,
step
);
t
.
i64
Key
=
i
;
t
.
i64
=
i
;
tsBufAppend
(
pTSBuf2
,
77
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
tsBufAppend
(
pTSBuf2
,
77
,
&
t
,
(
const
char
*
)
list
,
num
*
sizeof
(
int64_t
));
free
(
list
);
free
(
list
);
...
@@ -487,7 +487,7 @@ void mergeIdenticalVnodeBufferTest() {
...
@@ -487,7 +487,7 @@ void mergeIdenticalVnodeBufferTest() {
EXPECT_EQ
(
elem
.
id
,
77
);
EXPECT_EQ
(
elem
.
id
,
77
);
}
}
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
Key
,
elem
.
ts
);
printf
(
"%d-%"
PRIu64
"-%"
PRIu64
"
\n
"
,
elem
.
id
,
elem
.
tag
->
i64
,
elem
.
ts
);
}
}
tsBufDestroy
(
pTSBuf1
);
tsBufDestroy
(
pTSBuf1
);
...
...
src/query/tests/unitTest.cpp
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
src/tsdb/src/tsdbRWHelper.c
浏览文件 @
7465d0c7
...
@@ -753,8 +753,8 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa
...
@@ -753,8 +753,8 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa
pCompCol
->
type
=
pDataCol
->
type
;
pCompCol
->
type
=
pDataCol
->
type
;
if
(
tDataTypeDesc
[
pDataCol
->
type
].
getStatisFunc
)
{
if
(
tDataTypeDesc
[
pDataCol
->
type
].
getStatisFunc
)
{
(
*
tDataTypeDesc
[
pDataCol
->
type
].
getStatisFunc
)(
(
*
tDataTypeDesc
[
pDataCol
->
type
].
getStatisFunc
)(
(
TSKEY
*
)(
pDataCols
->
cols
[
0
].
pData
),
pDataCol
->
pData
,
rowsToWrite
,
&
(
pCompCol
->
min
),
&
(
pCompCol
->
ma
x
),
pDataCol
->
pData
,
rowsToWrite
,
&
(
pCompCol
->
min
),
&
(
pCompCol
->
max
),
&
(
pCompCol
->
sum
),
&
(
pCompCol
->
minInde
x
),
&
(
pCompCol
->
sum
),
&
(
pCompCol
->
minIndex
),
&
(
pCompCol
->
maxIndex
),
&
(
pCompCol
->
numOfNull
));
&
(
pCompCol
->
maxIndex
),
&
(
pCompCol
->
numOfNull
));
}
}
nColsNotAllNull
++
;
nColsNotAllNull
++
;
}
}
...
...
src/util/inc/tstoken.h
浏览文件 @
7465d0c7
...
@@ -76,7 +76,7 @@ bool isKeyWord(const char *z, int32_t len);
...
@@ -76,7 +76,7 @@ bool isKeyWord(const char *z, int32_t len);
* @param pToken
* @param pToken
* @return token type, if it is not a number, TK_ILLEGAL will return
* @return token type, if it is not a number, TK_ILLEGAL will return
*/
*/
static
FORCE_INLINE
int32_t
isValidNumber
(
const
SStrToken
*
pToken
)
{
static
FORCE_INLINE
int32_t
tGetNumericStringType
(
const
SStrToken
*
pToken
)
{
const
char
*
z
=
pToken
->
z
;
const
char
*
z
=
pToken
->
z
;
int32_t
type
=
TK_ILLEGAL
;
int32_t
type
=
TK_ILLEGAL
;
...
@@ -111,7 +111,6 @@ static FORCE_INLINE int32_t isValidNumber(const SStrToken* pToken) {
...
@@ -111,7 +111,6 @@ static FORCE_INLINE int32_t isValidNumber(const SStrToken* pToken) {
type
=
TK_FLOAT
;
type
=
TK_FLOAT
;
goto
_end
;
goto
_end
;
break
;
}
}
case
'0'
:
{
case
'0'
:
{
...
...
src/util/src/tcompare.c
浏览文件 @
7465d0c7
...
@@ -51,7 +51,22 @@ int32_t compareDoubleIntVal(const void *pLeft, const void *pRight) {
...
@@ -51,7 +51,22 @@ int32_t compareDoubleIntVal(const void *pLeft, const void *pRight) {
}
}
int32_t
compareFloatVal
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compareFloatVal
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
float
ret
=
GET_FLOAT_VAL
(
pLeft
)
-
GET_FLOAT_VAL
(
pRight
);
float
p1
=
GET_FLOAT_VAL
(
pLeft
);
float
p2
=
GET_FLOAT_VAL
(
pRight
);
if
(
isnan
(
p1
)
&&
isnan
(
p2
))
{
return
0
;
}
if
(
isnan
(
p1
))
{
return
-
1
;
}
if
(
isnan
(
p2
))
{
return
1
;
}
float
ret
=
p1
-
p2
;
if
(
fabs
(
ret
)
<
FLT_EPSILON
)
{
if
(
fabs
(
ret
)
<
FLT_EPSILON
)
{
return
0
;
return
0
;
}
else
{
}
else
{
...
@@ -60,7 +75,22 @@ int32_t compareFloatVal(const void *pLeft, const void *pRight) {
...
@@ -60,7 +75,22 @@ int32_t compareFloatVal(const void *pLeft, const void *pRight) {
}
}
int32_t
compareDoubleVal
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compareDoubleVal
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
double
ret
=
GET_DOUBLE_VAL
(
pLeft
)
-
GET_DOUBLE_VAL
(
pRight
);
double
p1
=
GET_DOUBLE_VAL
(
pLeft
);
double
p2
=
GET_DOUBLE_VAL
(
pRight
);
if
(
isnan
(
p1
)
&&
isnan
(
p2
))
{
return
0
;
}
if
(
isnan
(
p1
))
{
return
-
1
;
}
if
(
isnan
(
p2
))
{
return
1
;
}
double
ret
=
p1
-
p2
;
if
(
fabs
(
ret
)
<
FLT_EPSILON
)
{
if
(
fabs
(
ret
)
<
FLT_EPSILON
)
{
return
0
;
return
0
;
}
else
{
}
else
{
...
...
tests/script/general/parser/alter.sim
浏览文件 @
7465d0c7
...
@@ -4,7 +4,7 @@ system sh/deploy.sh -n dnode1 -i 1
...
@@ -4,7 +4,7 @@ system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 0
system sh/cfg.sh -n dnode1 -c walLevel -v 0
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 3
system sh/cfg.sh -n dnode1 -c tableMetaKeepTimer -v 3
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode1 -s start
sleep
5
00
sleep
1
00
sql connect
sql connect
$dbPrefix = m_alt_db
$dbPrefix = m_alt_db
...
@@ -114,7 +114,7 @@ endi
...
@@ -114,7 +114,7 @@ endi
sql drop table tb
sql drop table tb
sql drop table mt
sql drop table mt
sleep
5
00
sleep
1
00
### ALTER TABLE WHILE STREAMING [TBASE271]
### ALTER TABLE WHILE STREAMING [TBASE271]
#sql create table tb1 (ts timestamp, c1 int, c2 nchar(5), c3 int)
#sql create table tb1 (ts timestamp, c1 int, c2 nchar(5), c3 int)
#sql create table strm as select count(*), avg(c1), first(c2), sum(c3) from tb1 interval(2s)
#sql create table strm as select count(*), avg(c1), first(c2), sum(c3) from tb1 interval(2s)
...
@@ -147,7 +147,7 @@ sleep 500
...
@@ -147,7 +147,7 @@ sleep 500
#sql alter table tb1 add column c3 int
#sql alter table tb1 add column c3 int
#sleep 3000
#sleep 3000
#sql insert into tb1 values (now, 3, 'taos', 3);
#sql insert into tb1 values (now, 3, 'taos', 3);
#sleep
5
00
#sleep
1
00
#sql select * from strm
#sql select * from strm
#if $rows != 3 then
#if $rows != 3 then
# return -1
# return -1
...
@@ -186,7 +186,7 @@ sql create database $db
...
@@ -186,7 +186,7 @@ sql create database $db
sql use $db
sql use $db
sql create table mt (ts timestamp, c1 int, c2 nchar(7), c3 int) tags (t1 int)
sql create table mt (ts timestamp, c1 int, c2 nchar(7), c3 int) tags (t1 int)
sql create table tb using mt tags(1)
sql create table tb using mt tags(1)
sleep
5
00
sleep
1
00
sql insert into tb values ('2018-11-01 16:30:00.000', 1, 'insert', 1)
sql insert into tb values ('2018-11-01 16:30:00.000', 1, 'insert', 1)
sql alter table mt drop column c3
sql alter table mt drop column c3
...
...
tests/script/general/parser/alter1.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/alter_stable.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/auto_create_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/auto_create_tb_drop_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/binary_escapeCharacter.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/col_arithmetic_operation.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_bigint.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_bool.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_double.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_float.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_int.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_smallint.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_tinyint.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/columnValue_unsign.sim
0 → 100644
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/commit.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/create_db.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/create_mt.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/create_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/dbtbnameValidate.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/fill.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/fill_stb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/fill_us.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/first_last.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/first_last_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/function.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/groupby.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/import.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/import_commit1.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/import_commit2.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/import_commit3.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/insert_multiTbl.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/insert_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/interp.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/interp_test.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/join.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/join_multivnode.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/lastrow.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/lastrow_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit1.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit1_stb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit1_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit1_tblocks100.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit2.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit2_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit2_tblocks100.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit_stb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/limit_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/mixed_blocks.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/nchar.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/null_char.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/projection_limit_offset.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/selectResNum.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/select_across_vnodes.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/select_from_cache_disk.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/select_with_tags.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/set_tag_vals.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/single_row_in_tb.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/single_row_in_tb_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/sliding.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit1.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit1_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit_alter_tags.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/slimit_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/tags_dynamically_specifiy.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/tags_filter.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/tbnameIn.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/tbnameIn_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/testSuite.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/timestamp.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/timestamp_query.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/topbot.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/union.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/script/general/parser/where.sim
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
tests/tsim/src/simExe.c
浏览文件 @
7465d0c7
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录