Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
adf42cad
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看板
未验证
提交
adf42cad
编写于
3月 18, 2022
作者:
S
shenglian-zhou
提交者:
GitHub
3月 18, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #10818 from taosdata/feature/TD-13970-2.4
[TD-13970]<feature>: timestamp format shortcut
上级
00fc39e8
ca52c9e8
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
122 addition
and
42 deletion
+122
-42
src/os/src/detail/osTime.c
src/os/src/detail/osTime.c
+27
-42
tests/develop-test/2-query/ts_shortcut.py
tests/develop-test/2-query/ts_shortcut.py
+94
-0
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+1
-0
未找到文件。
src/os/src/detail/osTime.c
浏览文件 @
adf42cad
...
@@ -83,26 +83,26 @@ void deltaToUtcInitOnce() {
...
@@ -83,26 +83,26 @@ void deltaToUtcInitOnce() {
static
int64_t
parseFraction
(
char
*
str
,
char
**
end
,
int32_t
timePrec
);
static
int64_t
parseFraction
(
char
*
str
,
char
**
end
,
int32_t
timePrec
);
static
int32_t
parseTimeWithTz
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
);
static
int32_t
parseTimeWithTz
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
);
static
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
,
bool
withDST
);
static
int32_t
parseLocaltimeWithDst
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
);
static
char
*
forwardToTimeStringEnd
(
char
*
str
);
static
char
*
forwardToTimeStringEnd
(
char
*
str
);
static
bool
checkTzPresent
(
char
*
str
,
int32_t
len
);
static
bool
checkTzPresent
(
char
*
str
,
int32_t
len
);
static
int32_t
(
*
parseLocaltimeFp
[])
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
)
=
{
parseLocaltime
,
parseLocaltimeWithDst
};
int32_t
taosGetTimestampSec
()
{
return
(
int32_t
)
time
(
NULL
);
}
int32_t
taosGetTimestampSec
()
{
return
(
int32_t
)
time
(
NULL
);
}
int32_t
taosParseTime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
day_light
)
{
int32_t
taosParseTime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
len
,
int32_t
timePrec
,
int8_t
day_light
)
{
/* parse datatime string in with tz */
/* parse datatime string in with tz */
if
(
strnchr
(
timestr
,
'T'
,
len
,
false
)
!=
NULL
)
{
if
(
strnchr
(
timestr
,
'T'
,
len
,
false
)
!=
NULL
)
{
if
(
checkTzPresent
(
timestr
,
len
))
{
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
'T'
);
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
'T'
);
}
else
if
(
checkTzPresent
(
timestr
,
len
))
{
}
else
{
return
parseLocaltime
(
timestr
,
time
,
timePrec
,
'T'
,
day_light
);
}
}
else
{
if
(
checkTzPresent
(
timestr
,
len
))
{
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
0
);
return
parseTimeWithTz
(
timestr
,
time
,
timePrec
,
0
);
}
else
{
}
else
{
return
(
*
parseLocaltimeFp
[
day_light
])(
timestr
,
time
,
timePrec
);
return
parseLocaltime
(
timestr
,
time
,
timePrec
,
0
,
day_light
);
}
}
}
}
}
...
@@ -316,14 +316,21 @@ int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char del
...
@@ -316,14 +316,21 @@ int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char del
return
0
;
return
0
;
}
}
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
)
{
int32_t
parseLocaltime
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
,
char
delim
,
bool
withDST
)
{
*
time
=
0
;
*
time
=
0
;
struct
tm
tm
=
{
0
};
struct
tm
tm
=
{
0
};
if
(
withDST
)
{
tm
.
tm_isdst
=
-
1
;
}
char
*
str
=
strptime
(
timestr
,
"%Y-%m-%d %H:%M:%S"
,
&
tm
);
char
*
str
=
strptime
(
timestr
,
"%Y-%m-%d %H:%M:%S"
,
&
tm
);
if
(
str
==
NULL
)
{
//if parse failed, try "%Y-%m-%d" format
str
=
strptime
(
timestr
,
"%Y-%m-%d"
,
&
tm
);
if
(
str
==
NULL
)
{
if
(
str
==
NULL
)
{
return
-
1
;
return
-
1
;
}
}
}
#ifdef _MSC_VER
#ifdef _MSC_VER
#if _MSC_VER >= 1900
#if _MSC_VER >= 1900
...
@@ -331,36 +338,13 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) {
...
@@ -331,36 +338,13 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) {
#endif
#endif
#endif
#endif
int64_t
seconds
=
user_mktime64
(
tm
.
tm_year
+
1900
,
tm
.
tm_mon
+
1
,
tm
.
tm_mday
,
tm
.
tm_hour
,
tm
.
tm_min
,
tm
.
tm_sec
,
timezone
);
int64_t
seconds
;
if
(
!
withDST
)
{
int64_t
fraction
=
0
;
seconds
=
user_mktime64
(
tm
.
tm_year
+
1900
,
tm
.
tm_mon
+
1
,
tm
.
tm_mday
,
tm
.
tm_hour
,
tm
.
tm_min
,
tm
.
tm_sec
,
timezone
);
}
else
{
if
(
*
str
==
'.'
)
{
/* parse the second fraction part */
if
((
fraction
=
parseFraction
(
str
+
1
,
&
str
,
timePrec
))
<
0
)
{
return
-
1
;
}
}
int64_t
factor
=
(
timePrec
==
TSDB_TIME_PRECISION_MILLI
)
?
1000
:
(
timePrec
==
TSDB_TIME_PRECISION_MICRO
?
1000000
:
1000000000
);
*
time
=
factor
*
seconds
+
fraction
;
return
0
;
}
int32_t
parseLocaltimeWithDst
(
char
*
timestr
,
int64_t
*
time
,
int32_t
timePrec
)
{
*
time
=
0
;
struct
tm
tm
=
{
0
};
tm
.
tm_isdst
=
-
1
;
char
*
str
=
strptime
(
timestr
,
"%Y-%m-%d %H:%M:%S"
,
&
tm
);
if
(
str
==
NULL
)
{
return
-
1
;
}
/* mktime will be affected by TZ, set by using taos_options */
/* mktime will be affected by TZ, set by using taos_options */
int64_t
seconds
=
mktime
(
&
tm
);
seconds
=
mktime
(
&
tm
);
}
int64_t
fraction
=
0
;
int64_t
fraction
=
0
;
...
@@ -374,6 +358,7 @@ int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec) {
...
@@ -374,6 +358,7 @@ int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec) {
int64_t
factor
=
(
timePrec
==
TSDB_TIME_PRECISION_MILLI
)
?
1000
:
int64_t
factor
=
(
timePrec
==
TSDB_TIME_PRECISION_MILLI
)
?
1000
:
(
timePrec
==
TSDB_TIME_PRECISION_MICRO
?
1000000
:
1000000000
);
(
timePrec
==
TSDB_TIME_PRECISION_MICRO
?
1000000
:
1000000000
);
*
time
=
factor
*
seconds
+
fraction
;
*
time
=
factor
*
seconds
+
fraction
;
return
0
;
return
0
;
}
}
...
...
tests/develop-test/2-query/ts_shortcut.py
0 → 100644
浏览文件 @
adf42cad
###################################################################
# Copyright (c) 2021 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
class
TDTestCase
:
def
caseDescription
(
self
):
'''
case1<ganlin zhao>: [TD-13970] timestamp format shortcut
'''
return
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
_conn
=
conn
def
run
(
self
):
print
(
"running {}"
.
format
(
__file__
))
tdSql
.
execute
(
"drop database if exists db"
)
tdSql
.
execute
(
"create database if not exists db"
)
tdSql
.
execute
(
'use db'
)
tdSql
.
execute
(
'create table tb(ts timestamp, c0 int)'
)
tdSql
.
execute
(
'create stable stb(ts timestamp , c0 int) tags (t0 timestamp)'
)
#INSERT
tdSql
.
execute
(
'insert into tb values ("2020-02-02", 1);'
)
tdSql
.
query
(
'select ts from tb'
);
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
tdSql
.
execute
(
'insert into ctb using stb tags("2020-02-02") values ("2020-02-02", 1)'
)
tdSql
.
query
(
'select ts,t0 from ctb'
);
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
res
=
tdSql
.
getData
(
0
,
1
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
tdSql
.
query
(
'select ts,t0 from stb'
);
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
res
=
tdSql
.
getData
(
0
,
1
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
#SELECT WHERE
tdSql
.
query
(
'select ts from tb where ts = "2020-02-02"'
)
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
tdSql
.
query
(
'select ts from ctb where ts <= "2020-02-02"'
)
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
tdSql
.
query
(
'select ts from stb where ts >= "2020-02-02"'
)
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
#CREATE TAG
tdSql
.
execute
(
'create table ctb1 using stb tags("2020-02-02")'
)
tdSql
.
query
(
'select t0 from ctb1'
);
tdSql
.
checkRows
(
1
)
res
=
tdSql
.
getData
(
0
,
0
)
tdSql
.
checkEqual
(
str
(
res
),
"2020-02-02 00:00:00"
)
tdSql
.
execute
(
'drop database db'
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/parallel_test/cases.task
浏览文件 @
adf42cad
...
@@ -744,5 +744,6 @@
...
@@ -744,5 +744,6 @@
3,,pytest,python3 ./test.py -f query/queryNcharNull.py
3,,pytest,python3 ./test.py -f query/queryNcharNull.py
3,,develop-test,python3 ./test.py -f 2-query/ts_hidden_column.py
3,,develop-test,python3 ./test.py -f 2-query/ts_hidden_column.py
3,,develop-test,python3 ./test.py -f 1-insert/uppercase_in_stmt.py
3,,develop-test,python3 ./test.py -f 1-insert/uppercase_in_stmt.py
3,,develop-test,python3 ./test.py -f 2-query/ts_shortcut.py
8,,pytest,python3 test.py -f update/update2.py
8,,pytest,python3 test.py -f update/update2.py
4,,pytest,python3 test.py -f insert/line_insert.py
4,,pytest,python3 test.py -f insert/line_insert.py
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录