Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
148b9034
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
148b9034
编写于
11月 10, 2021
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-10932]fix double to int64 issue
上级
6265dd45
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
52 addition
and
10 deletion
+52
-10
src/inc/ttype.h
src/inc/ttype.h
+41
-0
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+7
-4
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+4
-6
未找到文件。
src/inc/ttype.h
浏览文件 @
148b9034
...
...
@@ -50,6 +50,47 @@ typedef struct {
#define TSDB_DATA_TYPE_POINTER_ARRAY (1000)
#define TSDB_DATA_TYPE_VALUE_ARRAY (1001)
#define COPY_DATA(dst, src) *((int64_t *)(dst)) = *((int64_t *)(src))
#define COPY_TYPED_DATA(_v, _type, _data) \
do { \
switch (_type) { \
case TSDB_DATA_TYPE_BOOL: \
case TSDB_DATA_TYPE_TINYINT: \
(*(int8_t *)_v) = GET_INT8_VAL(_data); \
break; \
case TSDB_DATA_TYPE_UTINYINT: \
(*(uint8_t *)_v) = GET_UINT8_VAL(_data); \
break; \
case TSDB_DATA_TYPE_SMALLINT: \
(*(int16_t *)_v) = GET_INT16_VAL(_data); \
break; \
case TSDB_DATA_TYPE_USMALLINT: \
(*(uint16_t *)_v) = GET_UINT16_VAL(_data); \
break; \
case TSDB_DATA_TYPE_TIMESTAMP: \
case TSDB_DATA_TYPE_BIGINT: \
(*(int64_t *)_v) = (GET_INT64_VAL(_data)); \
break; \
case TSDB_DATA_TYPE_UBIGINT: \
(*(uint64_t *)_v) = (GET_UINT64_VAL(_data)); \
break; \
case TSDB_DATA_TYPE_FLOAT: \
(*(float *)_v) = GET_FLOAT_VAL(_data); \
break; \
case TSDB_DATA_TYPE_DOUBLE: \
(*(double *)_v) = GET_DOUBLE_VAL(_data); \
break; \
case TSDB_DATA_TYPE_UINT: \
(*(uint32_t *)_v) = GET_UINT32_VAL(_data); \
break; \
default: \
(*(int32_t *)_v) = GET_INT32_VAL(_data); \
break; \
} \
} while (0)
#define GET_TYPED_DATA(_v, _finalType, _type, _data) \
do { \
switch (_type) { \
...
...
src/query/src/qAggMain.c
浏览文件 @
148b9034
...
...
@@ -3913,11 +3913,11 @@ static void interp_function(SQLFunctionCtx *pCtx) {
if
(
pCtx
->
start
.
key
==
pCtx
->
startTs
)
{
assert
(
pCtx
->
start
.
key
!=
INT64_MIN
);
SET_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
*
(
double
*
)
&
pCtx
->
start
.
val
);
COPY_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
&
pCtx
->
start
.
val
);
goto
interp_success_exit
;
}
else
if
(
pCtx
->
end
.
key
==
pCtx
->
startTs
&&
pCtx
->
end
.
key
!=
INT64_MIN
&&
fillType
==
TSDB_FILL_NEXT
)
{
SET_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
*
(
double
*
)
&
pCtx
->
end
.
val
);
COPY_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
&
pCtx
->
end
.
val
);
goto
interp_success_exit
;
}
...
...
@@ -3937,6 +3937,9 @@ static void interp_function(SQLFunctionCtx *pCtx) {
goto
interp_exit
;
}
GET_TYPED_DATA
(
pCtx
->
start
.
val
,
double
,
pCtx
->
inputType
,
&
pCtx
->
start
.
val
);
GET_TYPED_DATA
(
pCtx
->
end
.
val
,
double
,
pCtx
->
inputType
,
&
pCtx
->
end
.
val
);
SPoint
point1
=
{.
key
=
pCtx
->
start
.
key
,
.
val
=
&
pCtx
->
start
.
val
};
SPoint
point2
=
{.
key
=
pCtx
->
end
.
key
,
.
val
=
&
pCtx
->
end
.
val
};
SPoint
point
=
{.
key
=
pCtx
->
startTs
,
.
val
=
pCtx
->
pOutput
};
...
...
@@ -3954,7 +3957,7 @@ static void interp_function(SQLFunctionCtx *pCtx) {
goto
interp_exit
;
}
SET_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
*
(
double
*
)
&
pCtx
->
start
.
val
);
COPY_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
&
pCtx
->
start
.
val
);
break
;
case
TSDB_FILL_NEXT
:
...
...
@@ -3962,7 +3965,7 @@ static void interp_function(SQLFunctionCtx *pCtx) {
goto
interp_exit
;
}
SET_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
*
(
double
*
)
&
pCtx
->
end
.
val
);
COPY_TYPED_DATA
(
pCtx
->
pOutput
,
pCtx
->
inputType
,
&
pCtx
->
end
.
val
);
break
;
case
TSDB_FILL_NONE
:
...
...
src/query/src/qExecutor.c
浏览文件 @
148b9034
...
...
@@ -1260,13 +1260,12 @@ void doTimeWindowInterpolation(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo,
if
(
functionId
==
TSDB_FUNC_INTERP
)
{
if
(
type
==
RESULT_ROW_START_INTERP
)
{
if
(
prevRowIndex
==
-
1
)
{
GET_TYPED_DATA
(
v1
,
double
,
pColInfo
->
info
.
type
,
(
char
*
)
pRuntimeEnv
->
prevRow
[
index
]);
COPY_DATA
(
&
pCtx
[
k
].
start
.
val
,
(
char
*
)
pRuntimeEnv
->
prevRow
[
index
]);
}
else
{
GET_TYPED_DATA
(
v1
,
double
,
pColInfo
->
info
.
type
,
(
char
*
)
pColInfo
->
pData
+
prevRowIndex
*
pColInfo
->
info
.
bytes
);
COPY_DATA
(
&
pCtx
[
k
].
start
.
val
,
(
char
*
)
pColInfo
->
pData
+
prevRowIndex
*
pColInfo
->
info
.
bytes
);
}
pCtx
[
k
].
start
.
key
=
prevTs
;
pCtx
[
k
].
start
.
val
=
v1
;
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
prevRowIndex
==
-
1
)
{
...
...
@@ -1278,13 +1277,12 @@ void doTimeWindowInterpolation(SOperatorInfo* pOperator, SOptrBasicInfo* pInfo,
}
else
{
if
(
curRowIndex
==
-
1
)
{
GET_TYPED_DATA
(
v2
,
double
,
pColInfo
->
info
.
type
,
(
char
*
)
pRuntimeEnv
->
prevRow
[
index
]);
COPY_DATA
(
&
pCtx
[
k
].
end
.
val
,
pRuntimeEnv
->
prevRow
[
index
]);
}
else
{
GET_TYPED_DATA
(
v2
,
double
,
pColInfo
->
info
.
type
,
(
char
*
)
pColInfo
->
pData
+
curRowIndex
*
pColInfo
->
info
.
bytes
);
COPY_DATA
(
&
pCtx
[
k
].
end
.
val
,
(
char
*
)
pColInfo
->
pData
+
curRowIndex
*
pColInfo
->
info
.
bytes
);
}
pCtx
[
k
].
end
.
key
=
curTs
;
pCtx
[
k
].
end
.
val
=
v2
;
if
(
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_BINARY
||
pColInfo
->
info
.
type
==
TSDB_DATA_TYPE_NCHAR
)
{
pCtx
[
k
].
end
.
ptr
=
(
char
*
)
pColInfo
->
pData
+
curRowIndex
*
pColInfo
->
info
.
bytes
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录