Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b93e2afa
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
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看板
提交
b93e2afa
编写于
11月 24, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' into fix/TD-20629
上级
73d51870
93dc21d3
变更
14
隐藏空白更改
内联
并排
Showing
14 changed file
with
318 addition
and
59 deletion
+318
-59
source/client/test/clientTests.cpp
source/client/test/clientTests.cpp
+6
-8
source/libs/executor/src/dataDispatcher.c
source/libs/executor/src/dataDispatcher.c
+3
-1
source/libs/executor/src/exchangeoperator.c
source/libs/executor/src/exchangeoperator.c
+14
-9
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+1
-1
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+7
-8
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+6
-4
tests/script/tsim/stream/state0.sim
tests/script/tsim/stream/state0.sim
+60
-0
tests/system-test/1-insert/alter_database.py
tests/system-test/1-insert/alter_database.py
+2
-2
tests/system-test/1-insert/alter_table.py
tests/system-test/1-insert/alter_table.py
+6
-1
tests/system-test/1-insert/drop.py
tests/system-test/1-insert/drop.py
+161
-0
tests/system-test/2-query/smaTest.py
tests/system-test/2-query/smaTest.py
+14
-11
tools/shell/inc/shellAuto.h
tools/shell/inc/shellAuto.h
+3
-0
tools/shell/src/shellAuto.c
tools/shell/src/shellAuto.c
+29
-14
tools/shell/src/shellEngine.c
tools/shell/src/shellEngine.c
+6
-0
未找到文件。
source/client/test/clientTests.cpp
浏览文件 @
b93e2afa
...
...
@@ -692,7 +692,6 @@ TEST(testCase, insert_test) {
taos_free_result(pRes);
taos_close(pConn);
}
#endif
TEST(testCase, projection_query_tables) {
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
...
...
@@ -752,9 +751,6 @@ TEST(testCase, projection_query_tables) {
taos_close(pConn);
}
#if 0
TEST(testCase, tsbs_perf_test) {
TdThread qid[20] = {0};
...
...
@@ -764,15 +760,16 @@ TEST(testCase, tsbs_perf_test) {
getchar();
}
#endif
TEST
(
testCase
,
projection_query_stables
)
{
TAOS
*
pConn
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
ASSERT_NE
(
pConn
,
nullptr
);
TAOS_RES* pRes = taos_query(pConn, "use
abc1
");
TAOS_RES
*
pRes
=
taos_query
(
pConn
,
"use
test
"
);
taos_free_result
(
pRes
);
pRes = taos_query(pConn, "select
ts from st1
");
pRes
=
taos_query
(
pConn
,
"select
* from meters limit 50000000
"
);
if
(
taos_errno
(
pRes
)
!=
0
)
{
printf
(
"failed to select from table, reason:%s
\n
"
,
taos_errstr
(
pRes
));
taos_free_result
(
pRes
);
...
...
@@ -785,14 +782,15 @@ TEST(testCase, projection_query_stables) {
char
str
[
512
]
=
{
0
};
while
((
pRow
=
taos_fetch_row
(
pRes
))
!=
NULL
)
{
int32_t code = taos_print_row(str, pRow, pFields, numOfFields);
printf("%s\n", str);
//
int32_t code = taos_print_row(str, pRow, pFields, numOfFields);
//
printf("%s\n", str);
}
taos_free_result
(
pRes
);
taos_close
(
pConn
);
}
#if 0
TEST(testCase, agg_query_tables) {
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
ASSERT_NE(pConn, nullptr);
...
...
source/libs/executor/src/dataDispatcher.c
浏览文件 @
b93e2afa
...
...
@@ -138,7 +138,9 @@ static int32_t putDataBlock(SDataSinkHandle* pHandle, const SInputData* pInput,
toDataCacheEntry
(
pDispatcher
,
pInput
,
pBuf
);
taosWriteQitem
(
pDispatcher
->
pDataBlocks
,
pBuf
);
*
pContinue
=
(
DS_BUF_LOW
==
updateStatus
(
pDispatcher
)
?
true
:
false
);
int32_t
status
=
updateStatus
(
pDispatcher
);
*
pContinue
=
(
status
==
DS_BUF_LOW
||
status
==
DS_BUF_EMPTY
);
return
TSDB_CODE_SUCCESS
;
}
...
...
source/libs/executor/src/exchangeoperator.c
浏览文件 @
b93e2afa
...
...
@@ -75,7 +75,9 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn
}
while
(
1
)
{
qDebug
(
"prepare wait for ready, %p, %s"
,
pExchangeInfo
,
GET_TASKID
(
pTaskInfo
));
tsem_wait
(
&
pExchangeInfo
->
ready
);
if
(
isTaskKilled
(
pTaskInfo
))
{
longjmp
(
pTaskInfo
->
env
,
TSDB_CODE_TSC_QUERY_CANCELLED
);
}
...
...
@@ -360,7 +362,7 @@ int32_t loadRemoteDataCallback(void* param, SDataBuf* pMsg, int32_t code) {
SExchangeInfo
*
pExchangeInfo
=
taosAcquireRef
(
exchangeObjRefPool
,
pWrapper
->
exchangeId
);
if
(
pExchangeInfo
==
NULL
)
{
qWarn
(
"failed to acquire exchange operator, since it may have been released
"
);
qWarn
(
"failed to acquire exchange operator, since it may have been released
, %p"
,
pExchangeInfo
);
taosMemoryFree
(
pMsg
->
pData
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -379,20 +381,23 @@ int32_t loadRemoteDataCallback(void* param, SDataBuf* pMsg, int32_t code) {
pRsp
->
numOfBlocks
=
htonl
(
pRsp
->
numOfBlocks
);
ASSERT
(
pRsp
!=
NULL
);
qDebug
(
"%s fetch rsp received, index:%d, blocks:%d, rows:%d"
,
pSourceDataInfo
->
taskId
,
index
,
pRsp
->
numOfBlocks
,
pRsp
->
numOfRows
);
qDebug
(
"%s fetch rsp received, index:%d, blocks:%d, rows:%d
, %p
"
,
pSourceDataInfo
->
taskId
,
index
,
pRsp
->
numOfBlocks
,
pRsp
->
numOfRows
,
pExchangeInfo
);
}
else
{
taosMemoryFree
(
pMsg
->
pData
);
pSourceDataInfo
->
code
=
code
;
qDebug
(
"%s fetch rsp received, index:%d, error:%s
"
,
pSourceDataInfo
->
taskId
,
index
,
tstrerror
(
code
)
);
qDebug
(
"%s fetch rsp received, index:%d, error:%s
, %p"
,
pSourceDataInfo
->
taskId
,
index
,
tstrerror
(
code
),
pExchangeInfo
);
}
pSourceDataInfo
->
status
=
EX_SOURCE_DATA_READY
;
code
=
tsem_post
(
&
pExchangeInfo
->
ready
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
code
=
TAOS_SYSTEM_ERROR
(
code
);
qError
(
"failed to invoke post when fetch rsp is ready, code:%s, %p"
,
tstrerror
(
code
),
pExchangeInfo
);
}
tsem_post
(
&
pExchangeInfo
->
ready
);
taosReleaseRef
(
exchangeObjRefPool
,
pWrapper
->
exchangeId
);
return
TSDB_CODE_SUCCESS
;
return
code
;
}
int32_t
doSendFetchDataRequest
(
SExchangeInfo
*
pExchangeInfo
,
SExecTaskInfo
*
pTaskInfo
,
int32_t
sourceIndex
)
{
...
...
@@ -444,9 +449,9 @@ int32_t doSendFetchDataRequest(SExchangeInfo* pExchangeInfo, SExecTaskInfo* pTas
return
pTaskInfo
->
code
;
}
qDebug
(
"%s build fetch msg and send to vgId:%d, ep:%s, taskId:0x%"
PRIx64
", execId:%d, %d/%"
PRIzu
,
qDebug
(
"%s build fetch msg and send to vgId:%d, ep:%s, taskId:0x%"
PRIx64
", execId:%d, %
p, %
d/%"
PRIzu
,
GET_TASKID
(
pTaskInfo
),
pSource
->
addr
.
nodeId
,
pSource
->
addr
.
epSet
.
eps
[
0
].
fqdn
,
pSource
->
taskId
,
pSource
->
execId
,
sourceIndex
,
totalSources
);
pSource
->
execId
,
pExchangeInfo
,
sourceIndex
,
totalSources
);
// send the fetch remote task result reques
SMsgSendInfo
*
pMsgSendInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
SMsgSendInfo
));
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
b93e2afa
...
...
@@ -1849,12 +1849,12 @@ FETCH_NEXT_BLOCK:
prepareRangeScan
(
pInfo
,
pInfo
->
pUpdateRes
,
&
pInfo
->
updateResIndex
);
copyDataBlock
(
pInfo
->
pDeleteDataRes
,
pInfo
->
pUpdateRes
);
pInfo
->
pDeleteDataRes
->
info
.
type
=
STREAM_DELETE_DATA
;
pInfo
->
scanMode
=
STREAM_SCAN_FROM_DATAREADER_RANGE
;
printDataBlock
(
pDelBlock
,
"stream scan delete data"
);
if
(
pInfo
->
tqReader
)
{
blockDataDestroy
(
pDelBlock
);
}
if
(
pInfo
->
pDeleteDataRes
->
info
.
rows
>
0
)
{
pInfo
->
scanMode
=
STREAM_SCAN_FROM_DATAREADER_RANGE
;
return
pInfo
->
pDeleteDataRes
;
}
else
{
goto
FETCH_NEXT_BLOCK
;
...
...
source/libs/executor/src/timewindowoperator.c
浏览文件 @
b93e2afa
...
...
@@ -3364,22 +3364,23 @@ void initDummyFunction(SqlFunctionCtx* pDummy, SqlFunctionCtx* pCtx, int32_t num
}
}
void
initDownStream
(
SOperatorInfo
*
downstream
,
SStreamAggSupporter
*
pAggSup
,
int64_t
waterMark
,
uint16_t
type
,
int32_t
tsColIndex
)
{
void
initDownStream
(
SOperatorInfo
*
downstream
,
SStreamAggSupporter
*
pAggSup
,
uint16_t
type
,
int32_t
tsColIndex
,
STimeWindowAggSupp
*
pTwSup
)
{
if
(
downstream
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION
)
{
SStreamPartitionOperatorInfo
*
pScanInfo
=
downstream
->
info
;
pScanInfo
->
tsColIndex
=
tsColIndex
;
}
if
(
downstream
->
operatorType
!=
QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN
)
{
initDownStream
(
downstream
->
pDownstream
[
0
],
pAggSup
,
waterMark
,
type
,
tsColIndex
);
initDownStream
(
downstream
->
pDownstream
[
0
],
pAggSup
,
type
,
tsColIndex
,
pTwSup
);
return
;
}
SStreamScanInfo
*
pScanInfo
=
downstream
->
info
;
pScanInfo
->
windowSup
=
(
SWindowSupporter
){.
pStreamAggSup
=
pAggSup
,
.
gap
=
pAggSup
->
gap
,
.
parentType
=
type
};
if
(
!
pScanInfo
->
pUpdateInfo
)
{
pScanInfo
->
pUpdateInfo
=
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
waterMark
);
pScanInfo
->
pUpdateInfo
=
updateInfoInit
(
60000
,
TSDB_TIME_PRECISION_MILLI
,
pTwSup
->
waterMark
);
}
pScanInfo
->
twAggSup
=
*
pTwSup
;
}
int32_t
initStreamAggSupporter
(
SStreamAggSupporter
*
pSup
,
SqlFunctionCtx
*
pCtx
,
int32_t
numOfOutput
,
int64_t
gap
,
...
...
@@ -4102,8 +4103,7 @@ SOperatorInfo* createStreamSessionAggOperatorInfo(SOperatorInfo* downstream, SPh
createOperatorFpSet
(
operatorDummyOpenFn
,
doStreamSessionAgg
,
NULL
,
destroyStreamSessionAggOperatorInfo
,
NULL
);
if
(
downstream
)
{
initDownStream
(
downstream
,
&
pInfo
->
streamAggSup
,
pInfo
->
twAggSup
.
waterMark
,
pOperator
->
operatorType
,
pInfo
->
primaryTsIndex
);
initDownStream
(
downstream
,
&
pInfo
->
streamAggSup
,
pOperator
->
operatorType
,
pInfo
->
primaryTsIndex
,
&
pInfo
->
twAggSup
);
code
=
appendDownstream
(
pOperator
,
&
downstream
,
1
);
}
return
pOperator
;
...
...
@@ -4606,8 +4606,7 @@ SOperatorInfo* createStreamStateAggOperatorInfo(SOperatorInfo* downstream, SPhys
pInfo
,
pTaskInfo
);
pOperator
->
fpSet
=
createOperatorFpSet
(
operatorDummyOpenFn
,
doStreamStateAgg
,
NULL
,
destroyStreamStateOperatorInfo
,
NULL
);
initDownStream
(
downstream
,
&
pInfo
->
streamAggSup
,
pInfo
->
twAggSup
.
waterMark
,
pOperator
->
operatorType
,
pInfo
->
primaryTsIndex
);
initDownStream
(
downstream
,
&
pInfo
->
streamAggSup
,
pOperator
->
operatorType
,
pInfo
->
primaryTsIndex
,
&
pInfo
->
twAggSup
);
code
=
appendDownstream
(
pOperator
,
&
downstream
,
1
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
_error
;
...
...
tests/parallel_test/cases.task
浏览文件 @
b93e2afa
...
...
@@ -417,14 +417,14 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_control.py
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py
,,n,system-test,python3 ./test.py -f 0-others/compatibility.py
#
,,,system-test,python3 ./test.py -f 1-insert/alter_database.py
,,,system-test,python3 ./test.py -f 1-insert/alter_database.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/influxdb_line_taosc_insert.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/opentsdb_telnet_line_taosc_insert.py
,,,system-test,python3 ./test.py -f 1-insert/opentsdb_json_taosc_insert.py
,,,system-test,python3 ./test.py -f 1-insert/test_stmt_muti_insert_query.py
,,,system-test,python3 ./test.py -f 1-insert/test_stmt_set_tbname_tag.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_stable.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_table.py
#
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/alter_table.py
,,n,system-test,python3 ./test.py -f 1-insert/boundary.py
,,n,system-test,python3 ./test.py -f 1-insert/insertWithMoreVgroup.py
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/table_comment.py
...
...
@@ -561,8 +561,8 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sample.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sin.py -R
,,
,system-test,
python3 ./test.py -f 2-query/smaTest.py
,,
,system-test,
python3 ./test.py -f 2-query/smaTest.py -R
,,
y,system-test,./pytest.sh
python3 ./test.py -f 2-query/smaTest.py
,,
y,system-test,./pytest.sh
python3 ./test.py -f 2-query/smaTest.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py
...
...
@@ -617,6 +617,8 @@
,,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
,,,system-test,python3 ./test.py -f 1-insert/drop.py
,,,system-test,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
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/union1.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/concat2.py
...
...
tests/script/tsim/stream/state0.sim
浏览文件 @
b93e2afa
...
...
@@ -731,5 +731,65 @@ if $data32 != 1 then
goto loop9
endi
sql drop stream if exists streams5;
sql drop database if exists test5;
sql create database test5;
sql use test5;
sql create table tb (ts timestamp, a int);
sql insert into tb values (now + 1m , 1 );
sql create table b (c timestamp, d int, e int , f int, g double);
sql create stream streams0 trigger at_once into streamt as select _wstart c1, count(*) c2, max(a) c3 from tb state_window(a);
sql insert into b values(1648791213000,NULL,NULL,NULL,NULL);
sql select * from streamt order by c1, c2, c3;
print data00:$data00
print data01:$data01
sql insert into b values(1648791213000,NULL,NULL,NULL,NULL);
sql select * from streamt order by c1, c2, c3;
print data00:$data00
print data01:$data01
sql insert into b values(1648791213001,1,2,2,2.0);
sql insert into b values(1648791213002,1,3,3,3.0);
sql insert into tb values(1648791213003,1);
sql select * from streamt;
print data00:$data00
print data01:$data01
sql delete from b where c >= 1648791213001 and c <= 1648791213002;
sql insert into b values(1648791223003,2,2,3,1.0); insert into b values(1648791223002,2,3,3,3.0);
sql insert into tb values (now + 1m , 1 );
sql select * from streamt;
print data00:$data00
print data01:$data01
sql insert into b(c,d) values (now + 6m , 6 );
sql delete from b where c >= 1648791213001 and c <= 1648791233005;;
$loop_count = 0
loop10:
sleep 200
sql select c2 from streamt;
$loop_count = $loop_count + 1
if $loop_count == 20 then
return -1
endi
if $rows != 1 then
print =====rows=$rows
goto loop10
endi
if $data00 != 2 then
print =====data00=$data00
goto loop10
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/system-test/1-insert/alter_database.py
浏览文件 @
b93e2afa
...
...
@@ -18,7 +18,7 @@ class TDTestCase:
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
buffer_boundary
=
[
3
,
4097
,
8193
,
12289
,
16384
]
self
.
buffer_error
=
[
self
.
buffer_boundary
[
0
]
-
1
,
self
.
buffer_boundary
[
-
1
]
+
1
,
12289
,
256
]
1
,
self
.
buffer_boundary
[
-
1
]
+
1
,
256
]
# pages_boundary >= 64
self
.
pages_boundary
=
[
64
,
128
,
512
]
self
.
pages_error
=
[
self
.
pages_boundary
[
0
]
-
1
]
...
...
@@ -53,7 +53,7 @@ class TDTestCase:
tdSql
.
execute
(
'drop database db'
)
def
run
(
self
):
tdSql
.
error
(
'create database db1 vgroups 10 buffer 12289'
)
self
.
alter_buffer
()
self
.
alter_pages
()
...
...
tests/system-test/1-insert/alter_table.py
浏览文件 @
b93e2afa
...
...
@@ -87,7 +87,6 @@ class TDTestCase:
}
def
alter_check_ntb
(
self
):
tdSql
.
prepare
()
tdSql
.
execute
(
self
.
setsql
.
set_create_normaltable_sql
(
self
.
ntbname
,
self
.
column_dict
))
for
i
in
self
.
values_list
:
...
...
@@ -107,6 +106,7 @@ class TDTestCase:
v
=
f
'binary(
{
self
.
binary_length
+
1
}
)'
v_error
=
f
'binary(
{
self
.
binary_length
-
1
}
)'
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
modify column
{
key
}
{
v_error
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
set tag
{
key
}
= "abcd1"'
)
tdSql
.
execute
(
f
'alter table
{
self
.
ntbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
query
(
f
'describe
{
self
.
ntbname
}
'
)
result
=
tdCom
.
getOneRow
(
1
,
'VARCHAR'
)
...
...
@@ -115,6 +115,7 @@ class TDTestCase:
v
=
f
'nchar(
{
self
.
binary_length
+
1
}
)'
v_error
=
f
'nchar(
{
self
.
binary_length
-
1
}
)'
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
modify column
{
key
}
{
v_error
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
set tag
{
key
}
= "abcd1"'
)
tdSql
.
execute
(
f
'alter table
{
self
.
ntbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
query
(
f
'describe
{
self
.
ntbname
}
'
)
result
=
tdCom
.
getOneRow
(
1
,
'NCHAR'
)
...
...
@@ -122,6 +123,7 @@ class TDTestCase:
else
:
for
v
in
self
.
column_dict
.
values
():
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
ntbname
}
set tag
{
key
}
= "abcd1"'
)
for
key
,
values
in
self
.
column_dict
.
items
():
rename_str
=
f
'
{
tdCom
.
getLongName
(
constant
.
COL_NAME_LENGTH_MAX
,
"letters"
)
}
'
tdSql
.
execute
(
f
'alter table
{
self
.
ntbname
}
rename column
{
key
}
{
rename_str
}
'
)
...
...
@@ -285,6 +287,7 @@ class TDTestCase:
v
=
f
'binary(
{
self
.
binary_length
+
1
}
)'
v_error
=
f
'binary(
{
self
.
binary_length
-
1
}
)'
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
modify column
{
key
}
{
v_error
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
set tag
{
key
}
= "abcd1"'
)
tdSql
.
execute
(
f
'alter table
{
self
.
stbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
query
(
f
'describe
{
self
.
stbname
}
'
)
result
=
tdCom
.
getOneRow
(
1
,
'VARCHAR'
)
...
...
@@ -297,6 +300,7 @@ class TDTestCase:
v
=
f
'nchar(
{
self
.
binary_length
+
1
}
)'
v_error
=
f
'nchar(
{
self
.
binary_length
-
1
}
)'
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
modify column
{
key
}
{
v_error
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
set tag
{
key
}
= "abcd1"'
)
tdSql
.
execute
(
f
'alter table
{
self
.
stbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
query
(
f
'describe
{
self
.
stbname
}
'
)
result
=
tdCom
.
getOneRow
(
1
,
'NCHAR'
)
...
...
@@ -308,6 +312,7 @@ class TDTestCase:
else
:
for
v
in
self
.
column_dict
.
values
():
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
modify column
{
key
}
{
v
}
'
)
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
set tag
{
key
}
= "abcd1"'
)
for
key
,
values
in
self
.
column_dict
.
items
():
rename_str
=
f
'
{
tdCom
.
getLongName
(
constant
.
COL_NAME_LENGTH_MAX
,
"letters"
)
}
'
tdSql
.
error
(
f
'alter table
{
self
.
stbname
}
rename column
{
key
}
{
rename_str
}
'
)
...
...
tests/system-test/1-insert/drop.py
0 → 100644
浏览文件 @
b93e2afa
###################################################################
# Copyright (c) 2016 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
math
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.common
import
*
from
util.sqlset
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
self
.
replicaVar
=
int
(
replicaVar
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
self
.
setsql
=
TDSetSql
()
self
.
dbname
=
'db'
self
.
ntbname
=
f
"
{
self
.
dbname
}
.ntb"
self
.
rowNum
=
10
self
.
tbnum
=
20
self
.
ts
=
1537146000000
self
.
binary_str
=
'taosdata'
self
.
nchar_str
=
'涛思数据'
self
.
column_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'tinyint'
,
'col2'
:
'smallint'
,
'col3'
:
'int'
,
'col4'
:
'bigint'
,
'col5'
:
'tinyint unsigned'
,
'col6'
:
'smallint unsigned'
,
'col7'
:
'int unsigned'
,
'col8'
:
'bigint unsigned'
,
'col9'
:
'float'
,
'col10'
:
'double'
,
'col11'
:
'bool'
,
'col12'
:
'binary(20)'
,
'col13'
:
'nchar(20)'
}
def
insert_data
(
self
,
column_dict
,
tbname
,
row_num
):
insert_sql
=
self
.
setsql
.
set_insertsql
(
column_dict
,
tbname
,
self
.
binary_str
,
self
.
nchar_str
)
for
i
in
range
(
row_num
):
insert_list
=
[]
self
.
setsql
.
insert_values
(
column_dict
,
i
,
insert_sql
,
insert_list
,
self
.
ts
)
def
drop_ntb_check
(
self
):
tdSql
.
execute
(
f
'create database if not exists
{
self
.
dbname
}
replica
{
self
.
replicaVar
}
'
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
tdSql
.
execute
(
self
.
setsql
.
set_create_normaltable_sql
(
self
.
ntbname
,
self
.
column_dict
))
self
.
insert_data
(
self
.
column_dict
,
self
.
ntbname
,
self
.
rowNum
)
for
k
,
v
in
self
.
column_dict
.
items
():
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
self
.
ntbname
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
1
)
tdSql
.
execute
(
f
'drop table
{
self
.
ntbname
}
'
)
tdSql
.
execute
(
f
'flush database
{
self
.
dbname
}
'
)
tdSql
.
execute
(
self
.
setsql
.
set_create_normaltable_sql
(
self
.
ntbname
,
self
.
column_dict
))
self
.
insert_data
(
self
.
column_dict
,
self
.
ntbname
,
self
.
rowNum
)
for
k
,
v
in
self
.
column_dict
.
items
():
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
self
.
ntbname
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
1
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
drop_stb_ctb_check
(
self
):
stbname
=
f
'
{
self
.
dbname
}
.
{
tdCom
.
getLongName
(
5
,
"letters"
)
}
'
tag_dict
=
{
't0'
:
'int'
}
tag_values
=
[
f
'1'
]
tdSql
.
execute
(
f
"create database if not exists
{
self
.
dbname
}
replica
{
self
.
replicaVar
}
"
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
tdSql
.
execute
(
self
.
setsql
.
set_create_stable_sql
(
stbname
,
self
.
column_dict
,
tag_dict
))
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
"create table
{
stbname
}
_
{
i
}
using
{
stbname
}
tags(
{
tag_values
[
0
]
}
)"
)
self
.
insert_data
(
self
.
column_dict
,
f
'
{
stbname
}
_
{
i
}
'
,
self
.
rowNum
)
for
k
,
v
in
self
.
column_dict
.
items
():
for
i
in
range
(
self
.
tbnum
):
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
stbname
}
_
{
i
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
1
)
tdSql
.
execute
(
f
'drop table
{
stbname
}
_
{
i
}
'
)
tdSql
.
execute
(
f
'flush database
{
self
.
dbname
}
'
)
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
"create table
{
stbname
}
_
{
i
}
using
{
stbname
}
tags(
{
tag_values
[
0
]
}
)"
)
self
.
insert_data
(
self
.
column_dict
,
f
'
{
stbname
}
_
{
i
}
'
,
self
.
rowNum
)
for
k
,
v
in
self
.
column_dict
.
items
():
for
i
in
range
(
self
.
tbnum
):
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
stbname
}
_
{
i
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
1
)
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
stbname
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
self
.
tbnum
)
tdSql
.
execute
(
f
'drop table
{
stbname
}
'
)
tdSql
.
execute
(
f
'flush database
{
self
.
dbname
}
'
)
tdSql
.
execute
(
self
.
setsql
.
set_create_stable_sql
(
stbname
,
self
.
column_dict
,
tag_dict
))
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
"create table
{
stbname
}
_
{
i
}
using
{
stbname
}
tags(
{
tag_values
[
0
]
}
)"
)
self
.
insert_data
(
self
.
column_dict
,
f
'
{
stbname
}
_
{
i
}
'
,
self
.
rowNum
)
for
k
,
v
in
self
.
column_dict
.
items
():
if
v
.
lower
()
==
"timestamp"
:
tdSql
.
query
(
f
'select * from
{
stbname
}
where
{
k
}
=
{
self
.
ts
}
'
)
tdSql
.
checkRows
(
self
.
tbnum
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
drop_topic_check
(
self
):
tdSql
.
execute
(
f
'create database
{
self
.
dbname
}
replica
{
self
.
replicaVar
}
'
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
stbname
=
tdCom
.
getLongName
(
5
,
"letters"
)
topic_name
=
tdCom
.
getLongName
(
5
,
"letters"
)
tdSql
.
execute
(
f
'create table
{
stbname
}
(ts timestamp,c0 int) tags(t0 int)'
)
tdSql
.
execute
(
f
'create topic
{
topic_name
}
as select * from
{
self
.
dbname
}
.
{
stbname
}
'
)
tdSql
.
query
(
f
'select * from information_schema.ins_topics where topic_name = "
{
topic_name
}
"'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
3
],
f
'create topic
{
topic_name
}
as select * from
{
self
.
dbname
}
.
{
stbname
}
'
)
tdSql
.
execute
(
f
'drop topic
{
topic_name
}
'
)
tdSql
.
execute
(
f
'create topic
{
topic_name
}
as select c0 from
{
self
.
dbname
}
.
{
stbname
}
'
)
tdSql
.
query
(
f
'select * from information_schema.ins_topics where topic_name = "
{
topic_name
}
"'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
3
],
f
'create topic
{
topic_name
}
as select c0 from
{
self
.
dbname
}
.
{
stbname
}
'
)
tdSql
.
execute
(
f
'drop topic
{
topic_name
}
'
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
drop_stream_check
(
self
):
tdSql
.
execute
(
f
'create database
{
self
.
dbname
}
replica
{
self
.
replicaVar
}
'
)
tdSql
.
execute
(
f
'use
{
self
.
dbname
}
'
)
stbname
=
tdCom
.
getLongName
(
5
,
"letters"
)
stream_name
=
tdCom
.
getLongName
(
5
,
"letters"
)
tdSql
.
execute
(
f
'create table
{
stbname
}
(ts timestamp,c0 int) tags(t0 int)'
)
tdSql
.
execute
(
f
'create table tb using
{
stbname
}
tags(1)'
)
tdSql
.
execute
(
f
'create stream
{
stream_name
}
into stb as select * from
{
self
.
dbname
}
.
{
stbname
}
partition by tbname'
)
tdSql
.
query
(
f
'select * from information_schema.ins_streams where stream_name = "
{
stream_name
}
"'
)
print
(
tdSql
.
queryResult
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
2
],
f
'create stream
{
stream_name
}
into stb as select * from
{
self
.
dbname
}
.
{
stbname
}
partition by tbname'
)
tdSql
.
execute
(
f
'drop stream
{
stream_name
}
'
)
tdSql
.
execute
(
f
'create stream
{
stream_name
}
into stb1 as select * from tb'
)
tdSql
.
query
(
f
'select * from information_schema.ins_streams where stream_name = "
{
stream_name
}
"'
)
tdSql
.
checkEqual
(
tdSql
.
queryResult
[
0
][
2
],
f
'create stream
{
stream_name
}
into stb1 as select * from tb'
)
tdSql
.
execute
(
f
'drop database
{
self
.
dbname
}
'
)
def
run
(
self
):
self
.
drop_ntb_check
()
self
.
drop_stb_ctb_check
()
self
.
drop_topic_check
()
self
.
drop_stream_check
()
pass
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/2-query/smaTest.py
浏览文件 @
b93e2afa
...
...
@@ -44,8 +44,8 @@ class TDTestCase:
def
run
(
self
):
# insert data
dbname
=
"db"
self
.
insert_data1
(
f
"
{
dbname
}
.t1"
,
self
.
ts
,
10
00
*
10000
)
self
.
insert_data1
(
f
"
{
dbname
}
.t4"
,
self
.
ts
,
10
00
*
10000
)
self
.
insert_data1
(
f
"
{
dbname
}
.t1"
,
self
.
ts
,
10
*
10000
)
self
.
insert_data1
(
f
"
{
dbname
}
.t4"
,
self
.
ts
,
10
*
10000
)
# test base case
# self.test_case1()
tdLog
.
debug
(
" LIMIT test_case1 ............ [OK]"
)
...
...
@@ -53,7 +53,6 @@ class TDTestCase:
# self.test_case2()
tdLog
.
debug
(
" LIMIT test_case2 ............ [OK]"
)
# stop
def
stop
(
self
):
tdSql
.
close
()
...
...
@@ -77,15 +76,17 @@ class TDTestCase:
# insert data1
def
insert_data
(
self
,
tbname
,
ts_start
,
count
):
pre_insert
=
"insert into %s values"
%
tbname
pre_insert
=
"insert into %s values"
%
tbname
sql
=
pre_insert
tdLog
.
debug
(
"insert table %s rows=%d ..."
%
(
tbname
,
count
))
tdLog
.
debug
(
"insert table %s rows=%d ..."
%
(
tbname
,
count
))
for
i
in
range
(
count
):
sql
+=
" (%d,%d)"
%
(
ts_start
+
i
*
1000
,
i
)
if
i
>
0
and
i
%
30000
==
0
:
sql
+=
" (%d,%d)"
%
(
ts_start
+
i
*
1000
,
i
)
if
i
>
0
and
i
%
20000
==
0
:
tdLog
.
info
(
"%d rows inserted"
%
i
)
tdSql
.
execute
(
sql
)
sql
=
pre_insert
# end sql
tdLog
.
info
(
"insert_data end"
)
if
sql
!=
pre_insert
:
tdSql
.
execute
(
sql
)
...
...
@@ -93,15 +94,17 @@ class TDTestCase:
return
def
insert_data1
(
self
,
tbname
,
ts_start
,
count
):
pre_insert
=
"insert into %s values"
%
tbname
pre_insert
=
"insert into %s values"
%
tbname
sql
=
pre_insert
tdLog
.
debug
(
"insert table %s rows=%d ..."
%
(
tbname
,
count
))
tdLog
.
debug
(
"insert table %s rows=%d ..."
%
(
tbname
,
count
))
for
i
in
range
(
count
):
sql
+=
" (%d,%d,%d)"
%
(
ts_start
+
i
*
1000
,
i
,
i
+
1
)
if
i
>
0
and
i
%
30000
==
0
:
sql
+=
" (%d,%d,%d)"
%
(
ts_start
+
i
*
1000
,
i
,
i
+
1
)
if
i
>
0
and
i
%
20000
==
0
:
tdLog
.
info
(
"%d rows inserted"
%
i
)
tdSql
.
execute
(
sql
)
sql
=
pre_insert
# end sql
tdLog
.
info
(
"insert_data1 end"
)
if
sql
!=
pre_insert
:
tdSql
.
execute
(
sql
)
...
...
tools/shell/inc/shellAuto.h
浏览文件 @
b93e2afa
...
...
@@ -39,4 +39,7 @@ void callbackAutoTab(char* sqlstr, TAOS* pSql, bool usedb);
// introduction
void
printfIntroduction
();
// show all commands help
void
showHelp
();
#endif
tools/shell/src/shellAuto.c
浏览文件 @
b93e2afa
...
...
@@ -108,6 +108,7 @@ SWords shellCommands[] = {
{
"drop topic <topic_name> ;"
,
0
,
0
,
NULL
},
{
"drop stream <stream_name> ;"
,
0
,
0
,
NULL
},
{
"explain select"
,
0
,
0
,
NULL
},
// 44 append sub sql
{
"help;"
,
0
,
0
,
NULL
},
{
"grant all on <anyword> to <user_name> ;"
,
0
,
0
,
NULL
},
{
"grant read on <anyword> to <user_name> ;"
,
0
,
0
,
NULL
},
{
"grant write on <anyword> to <user_name> ;"
,
0
,
0
,
NULL
},
...
...
@@ -386,6 +387,8 @@ void showHelp() {
drop stream <stream_name> ;
\n
\
----- E -----
\n
\
explain select clause ...
\n
\
----- H -----
\n
\
help;
\n
\
----- I -----
\n
\
insert into <tb_name> values(...) ;
\n
\
insert into <tb_name> using <stb_name> tags(...) values(...) ;
\n
\
...
...
@@ -1478,24 +1481,36 @@ bool matchSelectQuery(TAOS* con, SShellCmd* cmd) {
// if is input create fields or tags area, return true
bool
isCreateFieldsArea
(
char
*
p
)
{
char
*
left
=
strrchr
(
p
,
'('
);
if
(
left
==
NULL
)
{
// like 'create table st'
return
false
;
}
// put to while, support like create table st(ts timestamp, bin1 binary(16), bin2 + blank + TAB
char
*
p1
=
strdup
(
p
);
bool
ret
=
false
;
while
(
1
)
{
char
*
left
=
strrchr
(
p1
,
'('
);
if
(
left
==
NULL
)
{
// like 'create table st'
ret
=
false
;
break
;
}
char
*
right
=
strrchr
(
p
,
')'
);
if
(
right
==
NULL
)
{
// like 'create table st( '
return
true
;
}
char
*
right
=
strrchr
(
p1
,
')'
);
if
(
right
==
NULL
)
{
// like 'create table st( '
ret
=
true
;
break
;
}
if
(
left
>
right
)
{
// like 'create table st( ts timestamp, age int) tags(area '
return
true
;
if
(
left
>
right
)
{
// like 'create table st( ts timestamp, age int) tags(area '
ret
=
true
;
break
;
}
// set string end by small for next strrchr search
*
left
=
0
;
}
taosMemoryFree
(
p1
);
return
false
;
return
ret
;
}
bool
matchCreateTable
(
TAOS
*
con
,
SShellCmd
*
cmd
)
{
...
...
tools/shell/src/shellEngine.c
浏览文件 @
b93e2afa
...
...
@@ -134,6 +134,12 @@ int32_t shellRunCommand(char *command, bool recordHistory) {
return
0
;
}
// add help or help;
if
(
strcmp
(
command
,
"help"
)
==
0
||
strcmp
(
command
,
"help;"
)
==
0
)
{
showHelp
();
return
0
;
}
if
(
recordHistory
)
shellRecordCommandToHistory
(
command
);
char
quote
=
0
,
*
cmd
=
command
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录