Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2d4dd645
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2d4dd645
编写于
4月 24, 2023
作者:
K
kailixu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: more code
上级
b26842e3
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
267 addition
and
16 deletion
+267
-16
include/libs/nodes/cmdnodes.h
include/libs/nodes/cmdnodes.h
+1
-1
include/util/tdef.h
include/util/tdef.h
+7
-0
source/client/src/clientSml.c
source/client/src/clientSml.c
+5
-2
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+2
-0
source/client/src/clientSmlLine.c
source/client/src/clientSmlLine.c
+4
-1
source/client/src/clientSmlTelnet.c
source/client/src/clientSmlTelnet.c
+2
-1
source/libs/parser/src/parAstCreater.c
source/libs/parser/src/parAstCreater.c
+1
-1
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+7
-3
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+1
-0
tests/system-test/1-insert/influxdb_line_taosc_insert.py
tests/system-test/1-insert/influxdb_line_taosc_insert.py
+10
-7
tests/system-test/1-insert/stmt_error.py
tests/system-test/1-insert/stmt_error.py
+225
-0
tests/system-test/runAllOne.sh
tests/system-test/runAllOne.sh
+1
-0
tests/system-test/win-test-file
tests/system-test/win-test-file
+1
-0
未找到文件。
include/libs/nodes/cmdnodes.h
浏览文件 @
2d4dd645
...
...
@@ -30,7 +30,7 @@ extern "C" {
#define SHOW_CREATE_DB_RESULT_COLS 2
#define SHOW_CREATE_DB_RESULT_FIELD1_LEN (TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE)
#define SHOW_CREATE_DB_RESULT_FIELD2_LEN (TSDB_MAX_BINARY_LEN)
#define SHOW_CREATE_DB_RESULT_FIELD2_LEN (TSDB_MAX_BINARY_LEN
+ VARSTR_HEADER_SIZE
)
#define SHOW_CREATE_TB_RESULT_COLS 2
#define SHOW_CREATE_TB_RESULT_FIELD1_LEN (TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE)
...
...
include/util/tdef.h
浏览文件 @
2d4dd645
...
...
@@ -22,6 +22,13 @@
extern
"C"
{
#endif
#if 1
#define TASSERT assert(0);
#else
#define TASSERT
#endif
#define TSDB__packed
#define TSKEY int64_t
...
...
source/client/src/clientSml.c
浏览文件 @
2d4dd645
...
...
@@ -565,8 +565,8 @@ static int32_t smlFindNearestPowerOf2(int32_t length, uint8_t type) {
}
if
(
type
==
TSDB_DATA_TYPE_BINARY
&&
result
>
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
)
{
result
=
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
;
}
else
if
(
type
==
TSDB_DATA_TYPE_NCHAR
&&
result
>
(
TSDB_MAX_
BINARY
_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
result
=
(
TSDB_MAX_
BINARY
_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
else
if
(
type
==
TSDB_DATA_TYPE_NCHAR
&&
result
>
(
TSDB_MAX_
NCHAR
_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
result
=
(
TSDB_MAX_
NCHAR
_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
;
}
if
(
type
==
TSDB_DATA_TYPE_NCHAR
)
{
...
...
@@ -637,6 +637,9 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO
field
.
bytes
=
getBytes
(
kv
->
type
,
kv
->
length
);
memcpy
(
field
.
name
,
kv
->
key
,
kv
->
keyLen
);
taosArrayPush
(
results
,
&
field
);
if
(
numOfCols
==
0
)
{
}
}
else
if
(
action
==
SCHEMA_ACTION_CHANGE_COLUMN_SIZE
||
action
==
SCHEMA_ACTION_CHANGE_TAG_SIZE
)
{
uint16_t
*
index
=
(
uint16_t
*
)
taosHashGet
(
schemaHash
,
kv
->
key
,
kv
->
keyLen
);
if
(
index
==
NULL
)
{
...
...
source/client/src/clientSmlJson.c
浏览文件 @
2d4dd645
...
...
@@ -578,10 +578,12 @@ static int32_t smlConvertJSONString(SSmlKv *pVal, char *typeStr, cJSON *value) {
pVal
->
length
=
(
uint16_t
)
strlen
(
value
->
valuestring
);
if
(
pVal
->
type
==
TSDB_DATA_TYPE_BINARY
&&
pVal
->
length
>
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
)
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
if
(
pVal
->
type
==
TSDB_DATA_TYPE_NCHAR
&&
pVal
->
length
>
(
TSDB_MAX_NCHAR_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
...
...
source/client/src/clientSmlLine.c
浏览文件 @
2d4dd645
...
...
@@ -81,6 +81,7 @@ int32_t smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
pVal
->
type
=
TSDB_DATA_TYPE_BINARY
;
pVal
->
length
-=
BINARY_ADD_LEN
;
if
(
pVal
->
length
>
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
)
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
pVal
->
value
+=
(
BINARY_ADD_LEN
-
1
);
...
...
@@ -94,6 +95,7 @@ int32_t smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
pVal
->
type
=
TSDB_DATA_TYPE_NCHAR
;
pVal
->
length
-=
NCHAR_ADD_LEN
;
if
(
pVal
->
length
>
(
TSDB_MAX_NCHAR_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
pVal
->
value
+=
(
NCHAR_ADD_LEN
-
1
);
...
...
@@ -236,7 +238,8 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
PROCESS_SLASH
(
value
,
valueLen
)
}
if
(
unlikely
(
valueLen
>
(
TSDB_MAX_NCHAR_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
))
{
if
(
unlikely
(
valueLen
>
(
TSDB_MAX_TAGS_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
))
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
...
...
source/client/src/clientSmlTelnet.c
浏览文件 @
2d4dd645
...
...
@@ -158,7 +158,8 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
return
TSDB_CODE_TSC_INVALID_VALUE
;
}
if
(
unlikely
(
valueLen
>
(
TSDB_MAX_NCHAR_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
))
{
if
(
unlikely
(
valueLen
>
(
TSDB_MAX_TAGS_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
))
{
TASSERT
return
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
;
}
...
...
source/libs/parser/src/parAstCreater.c
浏览文件 @
2d4dd645
...
...
@@ -1208,7 +1208,7 @@ SDataType createDataType(uint8_t type) {
}
SDataType
createVarLenDataType
(
uint8_t
type
,
const
SToken
*
pLen
)
{
SDataType
dt
=
{.
type
=
type
,
.
precision
=
0
,
.
scale
=
0
,
.
bytes
=
taosStr2Int
16
(
pLen
->
z
,
NULL
,
10
)};
SDataType
dt
=
{.
type
=
type
,
.
precision
=
0
,
.
scale
=
0
,
.
bytes
=
taosStr2Int
32
(
pLen
->
z
,
NULL
,
10
)};
return
dt
;
}
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
2d4dd645
...
...
@@ -4498,8 +4498,9 @@ static int32_t checkTableTagsSchema(STranslateContext* pCxt, SHashObj* pHash, SN
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_ONLY_ONE_JSON_TAG
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pTag
->
dataType
.
type
&&
calcTypeBytes
(
pTag
->
dataType
)
>
TSDB_MAX_TAGS_LEN
))
{
TASSERT
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
}
...
...
@@ -4551,6 +4552,7 @@ static int32_t checkTableColsSchema(STranslateContext* pCxt, SHashObj* pHash, in
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pCol
->
dataType
.
type
&&
calcTypeBytes
(
pCol
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
TASSERT
code
=
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
}
...
...
@@ -5236,6 +5238,7 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
if
(
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
==
pStmt
->
alterType
)
{
if
(
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_FIELD_LEN
)
{
TASSERT
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
@@ -5245,7 +5248,8 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
}
if
(
TSDB_ALTER_TABLE_UPDATE_TAG_BYTES
==
pStmt
->
alterType
)
{
if
(
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_FIELD_LEN
)
{
if
(
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_TAGS_LEN
)
{
TASSERT
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
tests/parallel_test/cases.task
浏览文件 @
2d4dd645
...
...
@@ -338,6 +338,7 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stmt_error.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py
...
...
tests/system-test/1-insert/influxdb_line_taosc_insert.py
浏览文件 @
2d4dd645
...
...
@@ -673,11 +673,11 @@ class TDTestCase:
tdSql
.
checkNotEqual
(
err
.
errno
,
0
)
# # # binary
#
stb_name = tdCom.getLongName(7, "letters")
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374
, "letters")}" 1626006833639000000'
#
self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
stb_name
=
tdCom
.
getLongName
(
7
,
"letters"
)
input_sql
=
f
'
{
stb_name
}
,t0=t c0=f,c11=f,c2=f,c3=f,c4=f,c5=f,c6=f,c7=f,c8=f,c9=f,c10=f,c12=f,c1="
{
tdCom
.
getLongName
(
65519
,
"letters"
)
}
" 1626006833639000000'
self
.
_conn
.
schemaless_insert
([
input_sql
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(
16375
, "letters")}" 1626006833639000000'
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(
65514
, "letters")}" 1626006833639000000'
# try:
# self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
# except SchemalessError as err:
...
...
@@ -884,7 +884,7 @@ class TDTestCase:
tdSql
.
checkRows
(
2
)
tdSql
.
checkNotEqual
(
tb_name1
,
tb_name3
)
# * tag binary max is 16384, col+ts binary max
4915
1
# * tag binary max is 16384, col+ts binary max
6553
1
def
tagColBinaryMaxLengthCheckCase
(
self
):
"""
every binary and nchar must be length+2
...
...
@@ -911,7 +911,10 @@ class TDTestCase:
tdSql
.
checkRows
(
2
)
# # * check col,col+ts max in describe ---> 16143
input_sql
=
f
'
{
stb_name
}
,t0=t c0=f,c1="
{
tdCom
.
getLongName
(
16374
,
"letters"
)
}
",c2="
{
tdCom
.
getLongName
(
16374
,
"letters"
)
}
",c3="
{
tdCom
.
getLongName
(
16374
,
"letters"
)
}
",c4="
{
tdCom
.
getLongName
(
12
,
"letters"
)
}
" 1626006833639000000'
input_sql
=
f
'
{
stb_name
}
,t0=t c0=f,c1="
{
tdCom
.
getLongName
(
65517
,
"letters"
)
}
" 1626006833639000000'
self
.
_conn
.
schemaless_insert
([
input_sql
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
input_sql
=
f
'
{
stb_name
}
,t0=t c0=f,c1="
{
tdCom
.
getLongName
(
49133
,
"letters"
)
}
",c2="
{
tdCom
.
getLongName
(
16384
,
"letters"
)
}
" 1626006833639000000'
self
.
_conn
.
schemaless_insert
([
input_sql
],
TDSmlProtocolType
.
LINE
.
value
,
TDSmlTimestampType
.
NANO_SECOND
.
value
)
tdSql
.
query
(
f
"select * from
{
stb_name
}
"
)
...
...
@@ -1280,7 +1283,7 @@ class TDTestCase:
self
.
nowTsCheckCase
()
self
.
dateFormatTsCheckCase
()
self
.
illegalTsCheckCase
()
#
self.tagValueLengthCheckCase()
self
.
tagValueLengthCheckCase
()
self
.
colValueLengthCheckCase
()
self
.
tagColIllegalValueCheckCase
()
self
.
duplicateIdTagColInsertCheckCase
()
...
...
tests/system-test/1-insert/stmt_error.py
0 → 100644
浏览文件 @
2d4dd645
# encoding:UTF-8
from
taos
import
*
from
ctypes
import
*
from
datetime
import
datetime
import
taos
import
taos
import
time
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
__init__
(
self
):
self
.
err_case
=
0
self
.
curret_case
=
0
def
caseDescription
(
self
):
'''
case1 <wenzhouwww>: [TD-11899] : this is an test case for check stmt error use .
'''
return
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
self
.
replicaVar
=
int
(
replicaVar
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
conn
(
self
):
# type: () -> taos.TaosConnection
return
connect
()
def
test_stmt_insert
(
self
,
conn
):
# type: (TaosConnection) -> None
dbname
=
"pytest_taos_stmt"
try
:
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
execute
(
"create database if not exists %s"
%
dbname
)
conn
.
select_db
(
dbname
)
conn
.
execute
(
"create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,
\
bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned,
\
ff float, dd double, bb binary(65059), nn nchar(100), tt timestamp)"
,
)
conn
.
load_table_info
(
"log"
)
stmt
=
conn
.
statement
(
"insert into log values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
)
params
=
new_bind_params
(
16
)
params
[
0
].
timestamp
(
1626861392589
,
PrecisionEnum
.
Milliseconds
)
params
[
1
].
bool
(
True
)
params
[
2
].
tinyint
(
None
)
params
[
3
].
tinyint
(
2
)
params
[
4
].
smallint
(
3
)
params
[
5
].
int
(
4
)
params
[
6
].
bigint
(
5
)
params
[
7
].
tinyint_unsigned
(
6
)
params
[
8
].
smallint_unsigned
(
7
)
params
[
9
].
int_unsigned
(
8
)
params
[
10
].
bigint_unsigned
(
9
)
params
[
11
].
float
(
10.1
)
params
[
12
].
double
(
10.11
)
binaryStr
=
'123456789'
for
i
in
range
(
1301
):
binaryStr
+=
"1234567890abcdefghij1234567890abcdefghij12345hello"
params
[
13
].
binary
(
binaryStr
)
params
[
14
].
nchar
(
"stmt"
)
params
[
15
].
timestamp
(
1626861392589
,
PrecisionEnum
.
Milliseconds
)
stmt
.
bind_param
(
params
)
stmt
.
execute
()
assert
stmt
.
affected_rows
==
1
stmt
.
close
()
querystmt
=
conn
.
statement
(
"select ?, bo, nil, ti, si, ii,bi, tu, su, iu, bu, ff, dd, bb, nn, tt from log"
)
queryparam
=
new_bind_params
(
1
)
print
(
type
(
queryparam
))
queryparam
[
0
].
binary
(
"ts"
)
querystmt
.
bind_param
(
queryparam
)
querystmt
.
execute
()
result
=
querystmt
.
use_result
()
row
=
result
.
fetch_all
()
print
(
row
)
assert
row
[
0
][
1
]
==
True
assert
row
[
0
][
2
]
==
None
for
i
in
range
(
3
,
10
):
assert
row
[
0
][
i
]
==
i
-
1
#float == may not work as expected
# assert row[0][11] == c_float(10.1)
assert
row
[
0
][
12
]
==
10.11
assert
row
[
0
][
13
][
65054
:]
==
"hello"
assert
row
[
0
][
14
]
==
"stmt"
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
close
()
except
Exception
as
err
:
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
close
()
raise
err
def
test_stmt_insert_error
(
self
,
conn
):
# type: (TaosConnection) -> None
dbname
=
"pytest_taos_stmt_error"
try
:
conn
.
execute
(
"drop database if exists %s"
%
dbname
)
conn
.
execute
(
"create database if not exists %s"
%
dbname
)
conn
.
select_db
(
dbname
)
conn
.
execute
(
"create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,
\
bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned,
\
ff float, dd double, bb binary(100), nn nchar(100), tt timestamp , error_data int )"
,
)
conn
.
load_table_info
(
"log"
)
stmt
=
conn
.
statement
(
"insert into log values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,1000)"
)
params
=
new_bind_params
(
16
)
params
[
0
].
timestamp
(
1626861392589
,
PrecisionEnum
.
Milliseconds
)
params
[
1
].
bool
(
True
)
params
[
2
].
tinyint
(
None
)
params
[
3
].
tinyint
(
2
)
params
[
4
].
smallint
(
3
)
params
[
5
].
int
(
4
)
params
[
6
].
bigint
(
5
)
params
[
7
].
tinyint_unsigned
(
6
)
params
[
8
].
smallint_unsigned
(
7
)
params
[
9
].
int_unsigned
(
8
)
params
[
10
].
bigint_unsigned
(
9
)
params
[
11
].
float
(
10.1
)
params
[
12
].
double
(
10.11
)
params
[
13
].
binary
(
"hello"
)
params
[
14
].
nchar
(
"stmt"
)
params
[
15
].
timestamp
(
1626861392589
,
PrecisionEnum
.
Milliseconds
)
stmt
.
bind_param
(
params
)
stmt
.
execute
()
conn
.
close
()
except
Exception
as
err
:
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
):
self
.
test_stmt_insert
(
self
.
conn
())
try
:
self
.
test_stmt_insert_error
(
self
.
conn
())
except
Exception
as
error
:
if
str
(
error
)
==
'[0x0200]: no mix usage for ? and values'
:
tdLog
.
info
(
'=========stmt error occured for bind part column =============='
)
else
:
tdLog
.
exit
(
"expect error(%s) not occured"
%
str
(
error
))
try
:
self
.
test_stmt_insert_error_null_timestamp
(
self
.
conn
())
tdLog
.
exit
(
"expect error not occured - 1"
)
except
Exception
as
error
:
if
str
(
error
)
==
'[0x060b]: Timestamp data out of range'
:
tdLog
.
info
(
'=========stmt error occured for bind part column(NULL Timestamp) =============='
)
else
:
tdLog
.
exit
(
"expect error(%s) not occured - 2"
%
str
(
error
))
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/system-test/runAllOne.sh
浏览文件 @
2d4dd645
...
...
@@ -287,6 +287,7 @@ python3 ./test.py -f 1-insert/tb_100w_data_order.py -P
python3 ./test.py
-f
1-insert/delete_childtable.py
-P
python3 ./test.py
-f
1-insert/delete_normaltable.py
-P
python3 ./test.py
-f
1-insert/keep_expired.py
-P
python3 ./test.py
-f
1-insert/stmt_error.py
-P
python3 ./test.py
-f
1-insert/drop.py
-P
python3 ./test.py
-f
2-query/join2.py
-P
python3 ./test.py
-f
2-query/union1.py
-P
...
...
tests/system-test/win-test-file
浏览文件 @
2d4dd645
...
...
@@ -218,6 +218,7 @@ python3 ./test.py -f 1-insert/delete_stable.py
python3 ./test.py -f 1-insert/delete_childtable.py
python3 ./test.py -f 1-insert/delete_normaltable.py
python3 ./test.py -f 1-insert/keep_expired.py
python3 ./test.py -f 1-insert/stmt_error.py
python3 ./test.py -f 1-insert/drop.py
python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
python3 ./test.py -f 2-query/join2.py
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录