Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
bdb78bb3
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看板
未验证
提交
bdb78bb3
编写于
1月 10, 2023
作者:
D
dapan1121
提交者:
GitHub
1月 10, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #19463 from taosdata/fix/TS-2405-2.6
fix: null check for timestamp
上级
159f0cb9
0a0e62a9
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
70 addition
and
4 deletion
+70
-4
src/client/inc/tsclient.h
src/client/inc/tsclient.h
+1
-1
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+8
-2
src/client/src/tscPrepare.c
src/client/src/tscPrepare.c
+6
-0
tests/script/general/insert/basic.sim
tests/script/general/insert/basic.sim
+3
-0
tests/system-test/1-insert/stmt_error.py
tests/system-test/1-insert/stmt_error.py
+52
-1
未找到文件。
src/client/inc/tsclient.h
浏览文件 @
bdb78bb3
...
...
@@ -907,7 +907,7 @@ static FORCE_INLINE int32_t tsParseOneColumnKV(SSchema *pSchema, SStrToken *pTok
}
else
{
int64_t
tmpVal
;
if
(
tsParseTime
(
pToken
,
&
tmpVal
,
str
,
msg
,
timePrec
)
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidOperationMsg
(
msg
,
"invalid timestamp"
,
pToken
->
z
)
;
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
tdAppendMemRowColVal
(
row
,
&
tmpVal
,
true
,
colId
,
pSchema
->
type
,
toffset
);
}
...
...
src/client/src/tscParseInsert.c
浏览文件 @
bdb78bb3
...
...
@@ -78,6 +78,9 @@ int tsParseTime(SStrToken *pToken, int64_t *pTime, char **next, char *err, int16
// do nothing
}
else
if
(
pToken
->
type
==
TK_INTEGER
)
{
useconds
=
taosStr2int64
(
pToken
->
z
);
if
(
errno
==
ERANGE
)
{
return
tscInvalidOperationMsg
(
err
,
"timestamp is out of range"
,
pToken
->
z
);
}
}
else
{
// strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
if
(
taosParseTime
(
pToken
->
z
,
pTime
,
pToken
->
n
,
timePrec
,
tsDaylight
)
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -118,7 +121,7 @@ int tsParseTime(SStrToken *pToken, int64_t *pTime, char **next, char *err, int16
char
unit
=
0
;
if
(
parseAbsoluteDuration
(
valueToken
.
z
,
valueToken
.
n
,
&
interval
,
&
unit
,
timePrec
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
return
tscInvalidOperationMsg
(
err
,
"invalid timestamp"
,
pToken
->
z
)
;
}
if
(
sToken
.
type
==
TK_PLUS
)
{
...
...
@@ -382,7 +385,7 @@ int32_t tsParseOneColumn(SSchema *pSchema, SStrToken *pToken, char *payload, cha
}
else
{
int64_t
temp
;
if
(
tsParseTime
(
pToken
,
&
temp
,
str
,
msg
,
timePrec
)
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidOperationMsg
(
msg
,
"invalid timestamp"
,
pToken
->
z
)
;
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
*
((
int64_t
*
)
payload
)
=
temp
;
...
...
@@ -400,6 +403,9 @@ int32_t tsParseOneColumn(SSchema *pSchema, SStrToken *pToken, char *payload, cha
* Do not employ sort operation is not involved if server time is used.
*/
int32_t
tsCheckTimestamp
(
STableDataBlocks
*
pDataBlocks
,
const
char
*
start
)
{
if
(
isNull
(
start
,
TSDB_DATA_TYPE_TIMESTAMP
))
{
return
TSDB_CODE_TSC_VALUE_OUT_OF_RANGE
;
}
// once the data block is disordered, we do NOT keep previous timestamp any more
if
(
!
pDataBlocks
->
ordered
)
{
return
TSDB_CODE_SUCCESS
;
...
...
src/client/src/tscPrepare.c
浏览文件 @
bdb78bb3
...
...
@@ -905,6 +905,12 @@ static int doBindBatchParam(STableDataBlocks* pBlock, SParamInfo* param, TAOS_MU
if
(
pBind
->
is_null
!=
NULL
&&
pBind
->
is_null
[
i
])
{
setNull
(
data
+
param
->
offset
,
param
->
type
,
param
->
bytes
);
if
(
param
->
offset
==
0
)
{
if
(
tsCheckTimestamp
(
pBlock
,
data
)
!=
TSDB_CODE_SUCCESS
)
{
tscError
(
"invalid timestamp"
);
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
}
continue
;
}
...
...
tests/script/general/insert/basic.sim
浏览文件 @
bdb78bb3
...
...
@@ -39,6 +39,9 @@ while $x < 5
$x = $x + 1
endw
print =============== step 3 (TS-2405 NULL timestamp)
sql_error insert into $tb values (9223372036854775808 , 100)
sql select * from $tb
print $rows points data are retrieved
...
...
tests/system-test/1-insert/stmt_error.py
浏览文件 @
bdb78bb3
...
...
@@ -164,6 +164,48 @@ class TDTestCase:
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
close
()
raise
err
def
test_stmt_insert_error_null_timestamp
(
self
,
conn
):
dbname
=
"pytest_taos_stmt_error_null_ts"
try
:
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
execute
(
"create database if not exists %s"
%
dbname
)
conn
.
execute
(
"alter database %s keep 36500"
%
dbname
)
conn
.
select_db
(
dbname
)
conn
.
execute
(
"create stable STB(ts timestamp, n int) tags(b int)"
)
stmt
=
conn
.
statement
(
"insert into ? using STB tags(?) values(?, ?)"
)
params
=
new_bind_params
(
1
)
params
[
0
].
int
(
4
);
stmt
.
set_tbname_tags
(
"ct"
,
params
);
multi_params
=
new_multi_binds
(
2
);
multi_params
[
0
].
timestamp
([
9223372036854775808
])
multi_params
[
1
].
int
([
123
])
stmt
.
bind_param_batch
(
multi_params
)
stmt
.
execute
()
result
=
stmt
.
use_result
()
result
.
close
()
stmt
.
close
()
stmt
=
conn
.
statement
(
"select * from STB"
)
stmt
.
execute
()
result
=
stmt
.
use_result
()
print
(
result
.
affected_rows
)
row
=
result
.
next
()
print
(
row
)
result
.
close
()
stmt
.
close
()
conn
.
close
()
except
Exception
as
err
:
conn
.
close
()
raise
err
def
run
(
self
):
...
...
@@ -173,9 +215,18 @@ class TDTestCase:
except
Exception
as
error
:
if
str
(
error
)
==
'[0x0200]: invalid operation: only ? allowed in values'
:
tdLog
.
info
(
'=========stmt error occured for bind part colum =============='
)
tdLog
.
info
(
'=========stmt error occured for bind part colum
n
=============='
)
else
:
tdLog
.
exit
(
"expect error not occured"
)
try
:
self
.
test_stmt_insert_error_null_timestamp
(
self
.
conn
())
tdLog
.
exit
(
"expect error not occured - 1"
)
except
Exception
as
error
:
if
str
(
error
)
==
'[0x0200]: invalid operation: bind column type mismatch or invalid'
:
tdLog
.
info
(
'=========stmt error occured for bind part column(NULL Timestamp) =============='
)
else
:
tdLog
.
exit
(
"expect error not occured - 2"
)
def
stop
(
self
):
tdSql
.
close
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录