Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
715aa50f
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22017
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
715aa50f
编写于
5月 18, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:precision problems in time conversion
上级
408a800e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
15 addition
and
35 deletion
+15
-35
source/common/src/ttime.c
source/common/src/ttime.c
+14
-12
tests/script/tsim/query/interval-offset.sim
tests/script/tsim/query/interval-offset.sim
+1
-23
未找到文件。
source/common/src/ttime.c
浏览文件 @
715aa50f
...
...
@@ -439,6 +439,8 @@ end_:
// ((double)time * factors[fromPrecision][toPrecision]);
//}
// !!!!notice: double lose precison if time is too large, for example: 1626006833631000000*1.0 = double = 1626006833631000064
int64_t
convertTimeFromPrecisionToUnit
(
int64_t
time
,
int32_t
fromPrecision
,
char
toUnit
)
{
assert
(
fromPrecision
==
TSDB_TIME_PRECISION_MILLI
||
fromPrecision
==
TSDB_TIME_PRECISION_MICRO
||
fromPrecision
==
TSDB_TIME_PRECISION_NANO
);
...
...
@@ -446,29 +448,29 @@ int64_t convertTimeFromPrecisionToUnit(int64_t time, int32_t fromPrecision, char
double
tmp
=
time
;
switch
(
toUnit
)
{
case
's'
:{
tmp
*
=
(
NANOSECOND_PER_SEC
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_SEC
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_SEC
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_SEC
/
factors
[
fromPrecision
]);
break
;
}
case
'm'
:
tmp
*
=
(
NANOSECOND_PER_MINUTE
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_MINUTE
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_MINUTE
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_MINUTE
/
factors
[
fromPrecision
]);
break
;
case
'h'
:
tmp
*
=
(
NANOSECOND_PER_HOUR
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_HOUR
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_HOUR
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_HOUR
/
factors
[
fromPrecision
]);
break
;
case
'd'
:
tmp
*
=
(
NANOSECOND_PER_DAY
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_DAY
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_DAY
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_DAY
/
factors
[
fromPrecision
]);
break
;
case
'w'
:
tmp
*
=
(
NANOSECOND_PER_WEEK
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_WEEK
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_WEEK
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_WEEK
/
factors
[
fromPrecision
]);
break
;
case
'a'
:
tmp
*
=
(
NANOSECOND_PER_MSEC
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
*
=
(
NANOSECOND_PER_MSEC
/
factors
[
fromPrecision
]);
tmp
/
=
(
NANOSECOND_PER_MSEC
/
factors
[
fromPrecision
]);
// the result of division is an integer
time
/
=
(
NANOSECOND_PER_MSEC
/
factors
[
fromPrecision
]);
break
;
case
'u'
:
// the result of (NANOSECOND_PER_USEC/(double)factors[fromPrecision]) maybe a double
...
...
tests/script/tsim/query/interval-offset.sim
浏览文件 @
715aa50f
...
...
@@ -177,29 +177,7 @@ if $data70 != 1 then
return -1
endi
sql select _wstartts, count(tbcol), _wduration, _wstartts, count(*) from ct3 interval(1n, 1w)
print ===> select count(tbcol), sum(tbcol), max(tbcol), min(tbcol), count(*) from ct3 interval(1n, 1w)
print ===> rows: $rows
print ===> rows0: $data00 $data01 $data02 $data03 $data04
print ===> rows1: $data10 $data11 $data12 $data13 $data14
print ===> rows2: $data20 $data21 $data22 $data23 $data24
print ===> rows3: $data30 $data31 $data32 $data33 $data34
if $rows != 4 then
return -1
endi
if $data00 != @21-12-08 00:00:00.000@ then
return -1
endi
if $data31 != 1 then
return -1
endi
if $data34 != $data31 then
return -1
endi
if $data02 != 2678400000 then
return -1
endi
sql_error select _wstartts, count(tbcol), _wduration, _wstartts, count(*) from ct3 interval(1n, 1w)
sql_error select _wstartts, count(tbcol), _wduration, _wstartts, count(*) from ct3 interval(1n, 1w) sliding(2w)
sql_error select _wstartts, count(tbcol), _wduration, _wstartts, count(*) from ct3 interval(1n, 1w) sliding(4w)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录