Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
43cb4ad5
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
43cb4ad5
编写于
8月 17, 2022
作者:
“
“happyguoxy”
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of github.com:taosdata/TDengine into szhou/fixbugs
上级
2d60150c
0e0e8cfa
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
89 addition
and
397 deletion
+89
-397
docs/zh/07-develop/07-tmq.mdx
docs/zh/07-develop/07-tmq.mdx
+3
-309
docs/zh/07-develop/_sub_c.mdx
docs/zh/07-develop/_sub_c.mdx
+2
-2
docs/zh/07-develop/_sub_python.mdx
docs/zh/07-develop/_sub_python.mdx
+2
-2
tests/system-test/2-query/irate.py
tests/system-test/2-query/irate.py
+1
-1
tests/system-test/2-query/mavg.py
tests/system-test/2-query/mavg.py
+76
-78
tests/system-test/2-query/sample.py
tests/system-test/2-query/sample.py
+1
-1
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+4
-4
未找到文件。
docs/zh/07-develop/07-tmq.mdx
浏览文件 @
43cb4ad5
...
@@ -807,300 +807,9 @@ SHOW SUBSCRIPTIONS;
...
@@ -807,300 +807,9 @@ SHOW SUBSCRIPTIONS;
以下是各语言的完整示例代码。
以下是各语言的完整示例代码。
<Tabs defaultValue="java" groupId="lang">
<Tabs defaultValue="java" groupId="lang">
<TabItem label="C" value="c">
```c
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "taos.h"
static int running = 1;
static char dbName[64] = "tmqdb";
static char stbName[64] = "stb";
static char topicName[64] = "topicname";
static int32_t msg_process(TAOS_RES* msg) {
char buf[1024];
int32_t rows = 0;
const char* topicName = tmq_get_topic_name(msg);
const char* dbName = tmq_get_db_name(msg);
int32_t vgroupId = tmq_get_vgroup_id(msg);
printf("topic: %s\n", topicName);
printf("db: %s\n", dbName);
printf("vgroup id: %d\n", vgroupId);
while (1) {
TAOS_ROW row = taos_fetch_row(msg);
if (row == NULL) break;
TAOS_FIELD* fields = taos_fetch_fields(msg);
int32_t numOfFields = taos_field_count(msg);
int32_t* length = taos_fetch_lengths(msg);
int32_t precision = taos_result_precision(msg);
const char* tbName = tmq_get_table_name(msg);
rows++;
taos_print_row(buf, row, fields, numOfFields);
printf("row content from %s: %s\n", (tbName != NULL ? tbName : "table null"), buf);
}
return rows;
}
static int32_t init_env() {
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
if (pConn == NULL) {
return -1;
}
TAOS_RES* pRes;
// drop database if exists
printf("create database\n");
pRes = taos_query(pConn, "drop database if exists tmqdb");
if (taos_errno(pRes) != 0) {
printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
// create database
pRes = taos_query(pConn, "create database tmqdb");
if (taos_errno(pRes) != 0) {
printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
// create super table
printf("create super table\n");
pRes = taos_query(
pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))");
if (taos_errno(pRes) != 0) {
printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
// create sub tables
printf("create sub tables\n");
pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
// insert data
printf("insert data into sub tables\n");
pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
taos_close(pConn);
return 0;
}
int32_t create_topic() {
printf("create topic\n");
TAOS_RES* pRes;
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
if (pConn == NULL) {
return -1;
}
pRes = taos_query(pConn, "use tmqdb");
if (taos_errno(pRes) != 0) {
printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3 from tmqdb.stb where c1 > 1");
if (taos_errno(pRes) != 0) {
printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
taos_close(pConn);
return 0;
}
void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) {
printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param);
}
tmq_t* build_consumer() {
tmq_conf_res_t code;
tmq_conf_t* conf = tmq_conf_new();
code = tmq_conf_set(conf, "enable.auto.commit", "true");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "auto.commit.interval.ms", "1000");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "group.id", "cgrpName");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "client.id", "user defined name");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "td.connect.user", "root");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "td.connect.pass", "taosdata");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "auto.offset.reset", "earliest");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "experimental.snapshot.enable", "true");
if (TMQ_CONF_OK != code) return NULL;
code = tmq_conf_set(conf, "msg.with.table.name", "true");
if (TMQ_CONF_OK != code) return NULL;
tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL);
tmq_t* tmq = tmq_consumer_new(conf, NULL, 0);
tmq_conf_destroy(conf);
return tmq;
}
tmq_list_t* build_topic_list() {
<TabItem label="C" value="c">
tmq_list_t* topicList = tmq_list_new();
<CDemo>
int32_t code = tmq_list_append(topicList, "topicname");
if (code) {
return NULL;
}
return topicList;
}
void basic_consume_loop(tmq_t* tmq, tmq_list_t* topicList) {
int32_t code;
if ((code = tmq_subscribe(tmq, topicList))) {
fprintf(stderr, "%% Failed to tmq_subscribe(): %s\n", tmq_err2str(code));
return;
}
int32_t totalRows = 0;
int32_t msgCnt = 0;
int32_t timeout = 5000;
while (running) {
TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout);
if (tmqmsg) {
msgCnt++;
totalRows += msg_process(tmqmsg);
taos_free_result(tmqmsg);
/*} else {*/
/*break;*/
}
}
fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows);
}
int main(int argc, char* argv[]) {
int32_t code;
if (init_env() < 0) {
return -1;
}
if (create_topic() < 0) {
return -1;
}
tmq_t* tmq = build_consumer();
if (NULL == tmq) {
fprintf(stderr, "%% build_consumer() fail!\n");
return -1;
}
tmq_list_t* topic_list = build_topic_list();
if (NULL == topic_list) {
return -1;
}
basic_consume_loop(tmq, topic_list);
code = tmq_unsubscribe(tmq);
if (code) {
fprintf(stderr, "%% Failed to unsubscribe: %s\n", tmq_err2str(code));
} else {
fprintf(stderr, "%% unsubscribe\n");
}
code = tmq_consumer_close(tmq);
if (code) {
fprintf(stderr, "%% Failed to close consumer: %s\n", tmq_err2str(code));
} else {
fprintf(stderr, "%% Consumer closed\n");
}
return 0;
}
```
[查看源码](https://github.com/taosdata/TDengine/blob/develop/examples/c/tmq.c)
</TabItem>
</TabItem>
<TabItem label="Java" value="java">
<TabItem label="Java" value="java">
...
@@ -1116,22 +825,7 @@ int main(int argc, char* argv[]) {
...
@@ -1116,22 +825,7 @@ int main(int argc, char* argv[]) {
</TabItem>
</TabItem>
<TabItem label="Python" value="Python">
<TabItem label="Python" value="Python">
<Python />
```python
import taos
from taos.tmq import TaosConsumer
import taos
from taos.tmq import *
consumer = TaosConsumer('topic_ctb_column', group_id='vg2')
for msg in consumer:
for row in msg:
print(row)
```
[查看源码](https://github.com/taosdata/TDengine/blob/develop/docs/examples/python/tmq_example.py)
</TabItem>
</TabItem>
<TabItem label="Node.JS" value="Node.JS">
<TabItem label="Node.JS" value="Node.JS">
...
...
docs/zh/07-develop/_sub_c.mdx
浏览文件 @
43cb4ad5
```c
```c
{{#include docs/examples/c/subscribe_demo.c}}
{{#include docs/examples/c/tmq-example.c}}
```
```
\ No newline at end of file
docs/zh/07-develop/_sub_python.mdx
浏览文件 @
43cb4ad5
```py
```py
{{#include docs/examples/python/subscribe_demo.py}}
{{#include docs/examples/python/tmq_example.py}}
```
```
\ No newline at end of file
tests/system-test/2-query/irate.py
浏览文件 @
43cb4ad5
...
@@ -69,7 +69,7 @@ class TDTestCase:
...
@@ -69,7 +69,7 @@ class TDTestCase:
comput_irate_value
=
origin_result
[
1
][
0
]
*
1000
/
(
origin_result
[
1
][
-
1
]
-
origin_result
[
0
][
-
1
])
comput_irate_value
=
origin_result
[
1
][
0
]
*
1000
/
(
origin_result
[
1
][
-
1
]
-
origin_result
[
0
][
-
1
])
else
:
else
:
comput_irate_value
=
(
origin_result
[
1
][
0
]
-
origin_result
[
0
][
0
])
*
1000
/
(
origin_result
[
1
][
-
1
]
-
origin_result
[
0
][
-
1
])
comput_irate_value
=
(
origin_result
[
1
][
0
]
-
origin_result
[
0
][
0
])
*
1000
/
(
origin_result
[
1
][
-
1
]
-
origin_result
[
0
][
-
1
])
if
abs
(
comput_irate_value
-
irate_value
)
<=
0.00
00001
:
if
abs
(
comput_irate_value
-
irate_value
)
<=
0.00
1
:
# set as 0.001 avoid floating point precision calculation errors
tdLog
.
info
(
" irate work as expected , sql is %s "
%
irate_sql
)
tdLog
.
info
(
" irate work as expected , sql is %s "
%
irate_sql
)
else
:
else
:
tdLog
.
exit
(
" irate work not as expected , sql is %s "
%
irate_sql
)
tdLog
.
exit
(
" irate work not as expected , sql is %s "
%
irate_sql
)
...
...
tests/system-test/2-query/mavg.py
浏览文件 @
43cb4ad5
...
@@ -25,13 +25,13 @@ from util.cases import *
...
@@ -25,13 +25,13 @@ from util.cases import *
from
util.sql
import
*
from
util.sql
import
*
from
util.dnodes
import
*
from
util.dnodes
import
*
dbname
=
'db'
class
TDTestCase
:
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
())
tdSql
.
init
(
conn
.
cursor
())
def
mavg_query_form
(
self
,
sel
=
"select"
,
func
=
"mavg("
,
col
=
"c1"
,
m_comm
=
","
,
k
=
1
,
r_comm
=
")"
,
alias
=
""
,
fr
=
"from"
,
table_expr
=
"
t1"
,
condition
=
""
):
def
mavg_query_form
(
self
,
sel
=
"select"
,
func
=
"mavg("
,
col
=
"c1"
,
m_comm
=
","
,
k
=
1
,
r_comm
=
")"
,
alias
=
""
,
fr
=
"from"
,
table_expr
=
f
"
{
dbname
}
.
t1"
,
condition
=
""
):
'''
'''
mavg function:
mavg function:
...
@@ -50,7 +50,7 @@ class TDTestCase:
...
@@ -50,7 +50,7 @@ class TDTestCase:
return
f
"
{
sel
}
{
func
}
{
col
}
{
m_comm
}
{
k
}
{
r_comm
}
{
alias
}
{
fr
}
{
table_expr
}
{
condition
}
"
return
f
"
{
sel
}
{
func
}
{
col
}
{
m_comm
}
{
k
}
{
r_comm
}
{
alias
}
{
fr
}
{
table_expr
}
{
condition
}
"
def
checkmavg
(
self
,
sel
=
"select"
,
func
=
"mavg("
,
col
=
"c1"
,
m_comm
=
","
,
k
=
1
,
r_comm
=
")"
,
alias
=
""
,
fr
=
"from"
,
table_expr
=
"
t1"
,
condition
=
""
):
def
checkmavg
(
self
,
sel
=
"select"
,
func
=
"mavg("
,
col
=
"c1"
,
m_comm
=
","
,
k
=
1
,
r_comm
=
")"
,
alias
=
""
,
fr
=
"from"
,
table_expr
=
f
"
{
dbname
}
.
t1"
,
condition
=
""
):
# print(self.mavg_query_form(sel=sel, func=func, col=col, m_comm=m_comm, k=k, r_comm=r_comm, alias=alias, fr=fr,
# print(self.mavg_query_form(sel=sel, func=func, col=col, m_comm=m_comm, k=k, r_comm=r_comm, alias=alias, fr=fr,
# table_expr=table_expr, condition=condition))
# table_expr=table_expr, condition=condition))
line
=
sys
.
_getframe
().
f_back
.
f_lineno
line
=
sys
.
_getframe
().
f_back
.
f_lineno
...
@@ -62,7 +62,7 @@ class TDTestCase:
...
@@ -62,7 +62,7 @@ class TDTestCase:
table_expr
=
table_expr
,
condition
=
condition
table_expr
=
table_expr
,
condition
=
condition
))
))
sql
=
"select * from
t1"
sql
=
f
"select * from
{
dbname
}
.
t1"
collist
=
tdSql
.
getColNameList
(
sql
)
collist
=
tdSql
.
getColNameList
(
sql
)
if
not
isinstance
(
col
,
str
):
if
not
isinstance
(
col
,
str
):
...
@@ -326,9 +326,9 @@ class TDTestCase:
...
@@ -326,9 +326,9 @@ class TDTestCase:
self
.
checkmavg
(
**
case6
)
self
.
checkmavg
(
**
case6
)
# # case7~8: nested query
# # case7~8: nested query
# case7 = {"table_expr":
"(select c1 from
stb1)"}
# case7 = {"table_expr":
f"(select c1 from {dbname}.
stb1)"}
# self.checkmavg(**case7)
# self.checkmavg(**case7)
# case8 = {"table_expr":
"(select mavg(c1, 1) c1 from
stb1 group by tbname)"}
# case8 = {"table_expr":
f"(select mavg(c1, 1) c1 from {dbname}.
stb1 group by tbname)"}
# self.checkmavg(**case8)
# self.checkmavg(**case8)
# case9~10: mix with tbname/ts/tag/col
# case9~10: mix with tbname/ts/tag/col
...
@@ -362,7 +362,7 @@ class TDTestCase:
...
@@ -362,7 +362,7 @@ class TDTestCase:
self
.
checkmavg
(
**
case17
)
self
.
checkmavg
(
**
case17
)
# # case18~19: with group by
# # case18~19: with group by
# case19 = {
# case19 = {
# "table_expr":
"
stb1",
# "table_expr":
f"{dbname}.
stb1",
# "condition": "partition by tbname"
# "condition": "partition by tbname"
# }
# }
# self.checkmavg(**case19)
# self.checkmavg(**case19)
...
@@ -371,14 +371,14 @@ class TDTestCase:
...
@@ -371,14 +371,14 @@ class TDTestCase:
# case20 = {"condition": "order by ts"}
# case20 = {"condition": "order by ts"}
# self.checkmavg(**case20)
# self.checkmavg(**case20)
#case21 = {
#case21 = {
# "table_expr":
"
stb1",
# "table_expr":
f"{dbname}.
stb1",
# "condition": "group by tbname order by tbname"
# "condition": "group by tbname order by tbname"
#}
#}
#self.checkmavg(**case21)
#self.checkmavg(**case21)
# # case22: with union
# # case22: with union
# case22 = {
# case22 = {
# "condition":
"union all select mavg( c1 , 1 ) from
t2"
# "condition":
f"union all select mavg( c1 , 1 ) from {dbname}.
t2"
# }
# }
# self.checkmavg(**case22)
# self.checkmavg(**case22)
...
@@ -486,32 +486,33 @@ class TDTestCase:
...
@@ -486,32 +486,33 @@ class TDTestCase:
#tdSql.query(" select mavg( c1 , 1 ) + 2 from t1 ")
#tdSql.query(" select mavg( c1 , 1 ) + 2 from t1 ")
err41
=
{
"alias"
:
"+ avg(c1)"
}
err41
=
{
"alias"
:
"+ avg(c1)"
}
self
.
checkmavg
(
**
err41
)
# mix with arithmetic 2
self
.
checkmavg
(
**
err41
)
# mix with arithmetic 2
err42
=
{
"alias"
:
", c1"
}
#
err42 = {"alias": ", c1"}
self
.
checkmavg
(
**
err42
)
# mix with other col
#
self.checkmavg(**err42) # mix with other col
# err43 = {"table_expr":
"
stb1"}
# err43 = {"table_expr":
f"{dbname}.
stb1"}
# self.checkmavg(**err43) # select stb directly
# self.checkmavg(**err43) # select stb directly
err44
=
{
# err44 = {
"col"
:
"stb1.c1"
,
# "col": "stb1.c1",
"table_expr"
:
"stb1, stb2"
,
# "table_expr": "stb1, stb2",
"condition"
:
"where stb1.ts=stb2.ts and stb1.st1=stb2.st2 order by stb1.ts"
# "condition": "where stb1.ts=stb2.ts and stb1.st1=stb2.st2 order by stb1.ts"
}
# }
self
.
checkmavg
(
**
err44
)
# stb join
# self.checkmavg(**err44) # stb join
tdSql
.
query
(
"select mavg( stb1.c1 , 1 ) from stb1, stb2 where stb1.ts=stb2.ts and stb1.st1=stb2.st2 order by stb1.ts;"
)
err45
=
{
err45
=
{
"condition"
:
"where ts>0 and ts < now interval(1h) fill(next)"
"condition"
:
"where ts>0 and ts < now interval(1h) fill(next)"
}
}
self
.
checkmavg
(
**
err45
)
# interval
self
.
checkmavg
(
**
err45
)
# interval
err46
=
{
err46
=
{
"table_expr"
:
"
t1"
,
"table_expr"
:
f
"
{
dbname
}
.
t1"
,
"condition"
:
"group by c6"
"condition"
:
"group by c6"
}
}
self
.
checkmavg
(
**
err46
)
# group by normal col
self
.
checkmavg
(
**
err46
)
# group by normal col
err47
=
{
err47
=
{
"table_expr"
:
"
stb1"
,
"table_expr"
:
f
"
{
dbname
}
.
stb1"
,
"condition"
:
"group by tbname slimit 1 "
"condition"
:
"group by tbname slimit 1 "
}
}
# self.checkmavg(**err47) # with slimit
# self.checkmavg(**err47) # with slimit
err48
=
{
err48
=
{
"table_expr"
:
"
stb1"
,
"table_expr"
:
f
"
{
dbname
}
.
stb1"
,
"condition"
:
"group by tbname slimit 1 soffset 1"
"condition"
:
"group by tbname slimit 1 soffset 1"
}
}
# self.checkmavg(**err48) # with soffset
# self.checkmavg(**err48) # with soffset
...
@@ -554,8 +555,8 @@ class TDTestCase:
...
@@ -554,8 +555,8 @@ class TDTestCase:
err67
=
{
"k"
:
0.999999
}
err67
=
{
"k"
:
0.999999
}
self
.
checkmavg
(
**
err67
)
# k: left out of [1, 1000]
self
.
checkmavg
(
**
err67
)
# k: left out of [1, 1000]
err68
=
{
err68
=
{
"table_expr"
:
"
stb1"
,
"table_expr"
:
f
"
{
dbname
}
.
stb1"
,
"condition"
:
"group by tbname order by tbname"
# order by tbname not supported
"condition"
:
f
"group by tbname order by tbname"
# order by tbname not supported
}
}
self
.
checkmavg
(
**
err68
)
self
.
checkmavg
(
**
err68
)
...
@@ -565,42 +566,42 @@ class TDTestCase:
...
@@ -565,42 +566,42 @@ class TDTestCase:
for
i
in
range
(
tbnum
):
for
i
in
range
(
tbnum
):
for
j
in
range
(
data_row
):
for
j
in
range
(
data_row
):
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into t
{
i
}
values ("
f
"insert into
{
dbname
}
.
t
{
i
}
values ("
f
"
{
basetime
+
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
-
200
,
-
1
)
}
,
{
random
.
uniform
(
200
,
-
1
)
}
,
{
basetime
+
random
.
randint
(
-
200
,
-
1
)
}
, "
f
"
{
basetime
+
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
-
200
,
-
1
)
}
,
{
random
.
uniform
(
200
,
-
1
)
}
,
{
basetime
+
random
.
randint
(
-
200
,
-
1
)
}
, "
f
"'binary_
{
j
}
',
{
random
.
uniform
(
-
200
,
-
1
)
}
,
{
random
.
choice
([
0
,
1
])
}
,
{
random
.
randint
(
-
200
,
-
1
)
}
, "
f
"'binary_
{
j
}
',
{
random
.
uniform
(
-
200
,
-
1
)
}
,
{
random
.
choice
([
0
,
1
])
}
,
{
random
.
randint
(
-
200
,
-
1
)
}
, "
f
"
{
random
.
randint
(
-
200
,
-
1
)
}
,
{
random
.
randint
(
-
127
,
-
1
)
}
, 'nchar_
{
j
}
' )"
f
"
{
random
.
randint
(
-
200
,
-
1
)
}
,
{
random
.
randint
(
-
127
,
-
1
)
}
, 'nchar_
{
j
}
' )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into t
{
i
}
values ("
f
"insert into
{
dbname
}
.
t
{
i
}
values ("
f
"
{
basetime
-
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
1
,
200
)
}
,
{
random
.
uniform
(
1
,
200
)
}
,
{
basetime
-
random
.
randint
(
1
,
200
)
}
, "
f
"
{
basetime
-
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
1
,
200
)
}
,
{
random
.
uniform
(
1
,
200
)
}
,
{
basetime
-
random
.
randint
(
1
,
200
)
}
, "
f
"'binary_
{
j
}
_1',
{
random
.
uniform
(
1
,
200
)
}
,
{
random
.
choice
([
0
,
1
])
}
,
{
random
.
randint
(
1
,
200
)
}
, "
f
"'binary_
{
j
}
_1',
{
random
.
uniform
(
1
,
200
)
}
,
{
random
.
choice
([
0
,
1
])
}
,
{
random
.
randint
(
1
,
200
)
}
, "
f
"
{
random
.
randint
(
1
,
200
)
}
,
{
random
.
randint
(
1
,
127
)
}
, 'nchar_
{
j
}
_1' )"
f
"
{
random
.
randint
(
1
,
200
)
}
,
{
random
.
randint
(
1
,
127
)
}
, 'nchar_
{
j
}
_1' )"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
f
"insert into tt
{
i
}
values (
{
basetime
-
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
1
,
200
)
}
)"
f
"insert into
{
dbname
}
.
tt
{
i
}
values (
{
basetime
-
(
j
+
1
)
*
10
}
,
{
random
.
randint
(
1
,
200
)
}
)"
)
)
pass
pass
def
mavg_test_table
(
self
,
tbnum
:
int
)
->
None
:
def
mavg_test_table
(
self
,
tbnum
:
int
)
->
None
:
tdSql
.
execute
(
"drop database if exists db
"
)
tdSql
.
execute
(
f
"drop database if exists
{
dbname
}
"
)
tdSql
.
execute
(
"create database if not exists db
keep 3650"
)
tdSql
.
execute
(
f
"create database if not exists
{
dbname
}
keep 3650"
)
tdSql
.
execute
(
"use db
"
)
tdSql
.
execute
(
f
"use
{
dbname
}
"
)
tdSql
.
execute
(
tdSql
.
execute
(
"create stable db
.stb1 (
\
f
"create stable
{
dbname
}
.stb1 (
\
ts timestamp, c1 int, c2 float, c3 timestamp, c4 binary(16), c5 double, c6 bool,
\
ts timestamp, c1 int, c2 float, c3 timestamp, c4 binary(16), c5 double, c6 bool,
\
c7 bigint, c8 smallint, c9 tinyint, c10 nchar(16)
\
c7 bigint, c8 smallint, c9 tinyint, c10 nchar(16)
\
)
\
)
\
tags(st1 int)"
tags(st1 int)"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
"create stable db
.stb2 (ts timestamp, c1 int) tags(st2 int)"
f
"create stable
{
dbname
}
.stb2 (ts timestamp, c1 int) tags(st2 int)"
)
)
for
i
in
range
(
tbnum
):
for
i
in
range
(
tbnum
):
tdSql
.
execute
(
f
"create table
t
{
i
}
using
stb1 tags(
{
i
}
)"
)
tdSql
.
execute
(
f
"create table
{
dbname
}
.t
{
i
}
using
{
dbname
}
.
stb1 tags(
{
i
}
)"
)
tdSql
.
execute
(
f
"create table
tt
{
i
}
using
stb2 tags(
{
i
}
)"
)
tdSql
.
execute
(
f
"create table
{
dbname
}
.tt
{
i
}
using
{
dbname
}
.
stb2 tags(
{
i
}
)"
)
pass
pass
...
@@ -617,25 +618,25 @@ class TDTestCase:
...
@@ -617,25 +618,25 @@ class TDTestCase:
tdLog
.
printNoPrefix
(
"######## insert only NULL test:"
)
tdLog
.
printNoPrefix
(
"######## insert only NULL test:"
)
for
i
in
range
(
tbnum
):
for
i
in
range
(
tbnum
):
tdSql
.
execute
(
f
"insert into t
{
i
}
(ts) values (
{
nowtime
-
5
}
)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
t
{
i
}
(ts) values (
{
nowtime
-
5
}
)"
)
tdSql
.
execute
(
f
"insert into t
{
i
}
(ts) values (
{
nowtime
+
5
}
)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
t
{
i
}
(ts) values (
{
nowtime
+
5
}
)"
)
self
.
mavg_current_query
()
self
.
mavg_current_query
()
self
.
mavg_error_query
()
self
.
mavg_error_query
()
tdLog
.
printNoPrefix
(
"######## insert data in the range near the max(bigint/double):"
)
tdLog
.
printNoPrefix
(
"######## insert data in the range near the max(bigint/double):"
)
# self.mavg_test_table(tbnum)
# self.mavg_test_table(tbnum)
# tdSql.execute(f"insert into t1(ts, c1,c2,c5,c7) values "
# tdSql.execute(f"insert into
{dbname}.
t1(ts, c1,c2,c5,c7) values "
# f"({nowtime - (per_table_rows + 1) * 10}, {2**31-1}, {3.4*10**38}, {1.7*10**308}, {2**63-1})")
# f"({nowtime - (per_table_rows + 1) * 10}, {2**31-1}, {3.4*10**38}, {1.7*10**308}, {2**63-1})")
# tdSql.execute(f"insert into t1(ts, c1,c2,c5,c7) values "
# tdSql.execute(f"insert into
{dbname}.
t1(ts, c1,c2,c5,c7) values "
# f"({nowtime - (per_table_rows + 2) * 10}, {2**31-1}, {3.4*10**38}, {1.7*10**308}, {2**63-1})")
# f"({nowtime - (per_table_rows + 2) * 10}, {2**31-1}, {3.4*10**38}, {1.7*10**308}, {2**63-1})")
# self.mavg_current_query()
# self.mavg_current_query()
# self.mavg_error_query()
# self.mavg_error_query()
tdLog
.
printNoPrefix
(
"######## insert data in the range near the min(bigint/double):"
)
tdLog
.
printNoPrefix
(
"######## insert data in the range near the min(bigint/double):"
)
# self.mavg_test_table(tbnum)
# self.mavg_test_table(tbnum)
# tdSql.execute(f"insert into t1(ts, c1,c2,c5,c7) values "
# tdSql.execute(f"insert into
{dbname}.
t1(ts, c1,c2,c5,c7) values "
# f"({nowtime - (per_table_rows + 1) * 10}, {1-2**31}, {-3.4*10**38}, {-1.7*10**308}, {1-2**63})")
# f"({nowtime - (per_table_rows + 1) * 10}, {1-2**31}, {-3.4*10**38}, {-1.7*10**308}, {1-2**63})")
# tdSql.execute(f"insert into t1(ts, c1,c2,c5,c7) values "
# tdSql.execute(f"insert into
{dbname}.
t1(ts, c1,c2,c5,c7) values "
# f"({nowtime - (per_table_rows + 2) * 10}, {1-2**31}, {-3.4*10**38}, {-1.7*10**308}, {512-2**63})")
# f"({nowtime - (per_table_rows + 2) * 10}, {1-2**31}, {-3.4*10**38}, {-1.7*10**308}, {512-2**63})")
# self.mavg_current_query()
# self.mavg_current_query()
# self.mavg_error_query()
# self.mavg_error_query()
...
@@ -649,9 +650,9 @@ class TDTestCase:
...
@@ -649,9 +650,9 @@ class TDTestCase:
tdLog
.
printNoPrefix
(
"######## insert data mix with NULL test:"
)
tdLog
.
printNoPrefix
(
"######## insert data mix with NULL test:"
)
for
i
in
range
(
tbnum
):
for
i
in
range
(
tbnum
):
tdSql
.
execute
(
f
"insert into t
{
i
}
(ts) values (
{
nowtime
}
)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
t
{
i
}
(ts) values (
{
nowtime
}
)"
)
tdSql
.
execute
(
f
"insert into t
{
i
}
(ts) values (
{
nowtime
-
(
per_table_rows
+
3
)
*
10
}
)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
t
{
i
}
(ts) values (
{
nowtime
-
(
per_table_rows
+
3
)
*
10
}
)"
)
tdSql
.
execute
(
f
"insert into t
{
i
}
(ts) values (
{
nowtime
+
(
per_table_rows
+
3
)
*
10
}
)"
)
tdSql
.
execute
(
f
"insert into
{
dbname
}
.
t
{
i
}
(ts) values (
{
nowtime
+
(
per_table_rows
+
3
)
*
10
}
)"
)
self
.
mavg_current_query
()
self
.
mavg_current_query
()
self
.
mavg_error_query
()
self
.
mavg_error_query
()
...
@@ -664,67 +665,64 @@ class TDTestCase:
...
@@ -664,67 +665,64 @@ class TDTestCase:
tdDnodes
.
start
(
index
)
tdDnodes
.
start
(
index
)
self
.
mavg_current_query
()
self
.
mavg_current_query
()
self
.
mavg_error_query
()
self
.
mavg_error_query
()
tdSql
.
query
(
"select mavg(1,1) from
t1"
)
tdSql
.
query
(
f
"select mavg(1,1) from
{
dbname
}
.
t1"
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkRows
(
7
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
checkData
(
1
,
0
,
1.000000000
)
tdSql
.
checkData
(
1
,
0
,
1.000000000
)
tdSql
.
checkData
(
5
,
0
,
1.000000000
)
tdSql
.
checkData
(
5
,
0
,
1.000000000
)
tdSql
.
query
(
"select mavg(abs(c1),1) from
t1"
)
tdSql
.
query
(
f
"select mavg(abs(c1),1) from
{
dbname
}
.
t1"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkRows
(
4
)
def
mavg_support_stable
(
self
):
def
mavg_support_stable
(
self
):
tdSql
.
query
(
" select mavg(1,3) from
stb1 "
)
tdSql
.
query
(
f
" select mavg(1,3) from
{
dbname
}
.
stb1 "
)
tdSql
.
checkRows
(
68
)
tdSql
.
checkRows
(
68
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
checkData
(
0
,
0
,
1.000000000
)
tdSql
.
query
(
"select mavg(c1,3) from
stb1 partition by tbname "
)
tdSql
.
query
(
f
"select mavg(c1,3) from
{
dbname
}
.
stb1 partition by tbname "
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
# tdSql.query("select mavg(st1,3) from
stb1 partition by tbname")
tdSql
.
query
(
f
"select mavg(st1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
# tdSql.checkRows(38
)
tdSql
.
checkRows
(
50
)
tdSql
.
query
(
"select mavg(st1+c1,3) from
stb1 partition by tbname"
)
tdSql
.
query
(
f
"select mavg(st1+c1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select mavg(st1+c1,3) from
stb1 partition by tbname"
)
tdSql
.
query
(
f
"select mavg(st1+c1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
tdSql
.
query
(
"select mavg(st1+c1,3) from
stb1 partition by tbname"
)
tdSql
.
query
(
f
"select mavg(st1+c1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
# # bug need fix
# tdSql.query("select mavg(st1+c1,3) from stb1 partition by tbname slimit 1 ")
# tdSql.checkRows(2)
# tdSql.error("select mavg(st1+c1,3) from stb1 partition by tbname limit 1 ")
# bug need fix
# bug need fix
tdSql
.
query
(
"select mavg(st1+c1,3) from
stb1 partition by tbname"
)
tdSql
.
query
(
f
"select mavg(st1+c1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
tdSql
.
checkRows
(
20
)
tdSql
.
checkRows
(
20
)
# bug need fix
# bug need fix
# tdSql.query("select tbname , mavg(c1,3) from
stb1 partition by tbname")
tdSql
.
query
(
f
"select tbname , mavg(c1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
# tdSql.checkRows(38
)
tdSql
.
checkRows
(
20
)
# tdSql.query("select tbname , mavg(st1,3) from
stb1 partition by tbname")
tdSql
.
query
(
f
"select tbname , mavg(st1,3) from
{
dbname
}
.
stb1 partition by tbname"
)
# tdSql.checkRows(38
)
tdSql
.
checkRows
(
50
)
# tdSql.query("select tbname , mavg(st1,3) from
stb1 partition by tbname slimit 1")
tdSql
.
query
(
f
"select tbname , mavg(st1,3) from
{
dbname
}
.
stb1 partition by tbname slimit 1"
)
# tdSql.checkRows(2
)
tdSql
.
checkRows
(
5
)
# partition by tags
# partition by tags
# tdSql.query("select st1 , mavg(c1,3) from
stb1 partition by st1")
tdSql
.
query
(
f
"select st1 , mavg(c1,3) from
{
dbname
}
.
stb1 partition by st1"
)
# tdSql.checkRows(38
)
tdSql
.
checkRows
(
20
)
# tdSql.query("select mavg(c1,3) from
stb1 partition by st1")
tdSql
.
query
(
f
"select mavg(c1,3) from
{
dbname
}
.
stb1 partition by st1"
)
# tdSql.checkRows(38
)
tdSql
.
checkRows
(
20
)
# tdSql.query("select st1 , mavg(c1,3) from
stb1 partition by st1 slimit 1")
tdSql
.
query
(
f
"select st1 , mavg(c1,3) from
{
dbname
}
.
stb1 partition by st1 slimit 1"
)
#
tdSql.checkRows(2)
tdSql
.
checkRows
(
2
)
# tdSql.query("select mavg(c1,3) from
stb1 partition by st1 slimit 1")
tdSql
.
query
(
f
"select mavg(c1,3) from
{
dbname
}
.
stb1 partition by st1 slimit 1"
)
#
tdSql.checkRows(2)
tdSql
.
checkRows
(
2
)
# partition by col
# partition by col
# tdSql.query("select c1 , mavg(c1,3) from stb1 partition by c1")
tdSql
.
query
(
f
"select c1 , mavg(c1,3) from
{
dbname
}
.stb1 partition by c1"
)
# tdSql.checkRows(38)
tdSql
.
checkRows
(
0
)
# tdSql.query("select mavg(c1 ,3) from stb1 partition by c1")
tdSql
.
query
(
f
"select c1 , mavg(c1,1) from
{
dbname
}
.stb1 partition by c1"
)
# tdSql.checkRows(38)
tdSql
.
checkRows
(
40
)
# tdSql.query("select c1 , mavg(c1,3) from stb1 partition by st1 slimit 1")
tdSql
.
query
(
f
"select c1, c2, c3, c4, mavg(c1,3) from
{
dbname
}
.stb1 partition by tbname "
)
# tdSql.checkRows(2)
tdSql
.
checkRows
(
20
)
# tdSql.query("select diff(c1) from stb1 partition by st1 slimit 1")
tdSql
.
query
(
f
"select c1, c2, c3, c4, mavg(123,3) from
{
dbname
}
.stb1 partition by tbname "
)
# tdSql.checkRows(2)
tdSql
.
checkRows
(
50
)
def
run
(
self
):
def
run
(
self
):
import
traceback
import
traceback
...
...
tests/system-test/2-query/sample.py
浏览文件 @
43cb4ad5
...
@@ -873,7 +873,7 @@ class TDTestCase:
...
@@ -873,7 +873,7 @@ class TDTestCase:
# bug need fix
# bug need fix
tdSql
.
query
(
"select c1 ,t1, sample(c1,2) from db.stb1 partition by c1 "
)
tdSql
.
query
(
"select c1 ,t1, sample(c1,2) from db.stb1 partition by c1 "
)
tdSql
.
query
(
"select sample(c1,2) from db.stb1 partition by c1 "
)
tdSql
.
query
(
"select sample(c1,2) from db.stb1 partition by c1 "
)
#
tdSql.query("select c1 ,ind, sample(c1,2) from sample_db.st partition by c1 ")
tdSql
.
query
(
"select c1 ,ind, sample(c1,2) from sample_db.st partition by c1 "
)
def
run
(
self
):
def
run
(
self
):
import
traceback
import
traceback
...
...
tests/system-test/fulltest.sh
浏览文件 @
43cb4ad5
...
@@ -113,7 +113,7 @@ python3 ./test.py -f 2-query/hyperloglog.py -R
...
@@ -113,7 +113,7 @@ python3 ./test.py -f 2-query/hyperloglog.py -R
python3 ./test.py
-f
2-query/interp.py
python3 ./test.py
-f
2-query/interp.py
python3 ./test.py
-f
2-query/interp.py
-R
python3 ./test.py
-f
2-query/interp.py
-R
python3 ./test.py
-f
2-query/irate.py
python3 ./test.py
-f
2-query/irate.py
#
python3 ./test.py -f 2-query/irate.py -R
python3 ./test.py
-f
2-query/irate.py
-R
python3 ./test.py
-f
2-query/join.py
python3 ./test.py
-f
2-query/join.py
python3 ./test.py
-f
2-query/join.py
-R
python3 ./test.py
-f
2-query/join.py
-R
python3 ./test.py
-f
2-query/last_row.py
python3 ./test.py
-f
2-query/last_row.py
...
@@ -169,7 +169,7 @@ python3 ./test.py -f 2-query/query_cols_tags_and_or.py
...
@@ -169,7 +169,7 @@ python3 ./test.py -f 2-query/query_cols_tags_and_or.py
python3 ./test.py
-f
2-query/elapsed.py
python3 ./test.py
-f
2-query/elapsed.py
python3 ./test.py
-f
2-query/csum.py
python3 ./test.py
-f
2-query/csum.py
#
python3 ./test.py -f 2-query/mavg.py
python3 ./test.py
-f
2-query/mavg.py
python3 ./test.py
-f
2-query/sample.py
python3 ./test.py
-f
2-query/sample.py
python3 ./test.py
-f
2-query/function_diff.py
python3 ./test.py
-f
2-query/function_diff.py
python3 ./test.py
-f
2-query/unique.py
python3 ./test.py
-f
2-query/unique.py
...
@@ -358,7 +358,7 @@ python3 ./test.py -f 2-query/interp.py -Q 2
...
@@ -358,7 +358,7 @@ python3 ./test.py -f 2-query/interp.py -Q 2
python3 ./test.py
-f
2-query/avg.py
-Q
2
python3 ./test.py
-f
2-query/avg.py
-Q
2
# python3 ./test.py -f 2-query/elapsed.py -Q 2
# python3 ./test.py -f 2-query/elapsed.py -Q 2
python3 ./test.py
-f
2-query/csum.py
-Q
2
python3 ./test.py
-f
2-query/csum.py
-Q
2
#
python3 ./test.py -f 2-query/mavg.py -Q 2
python3 ./test.py
-f
2-query/mavg.py
-Q
2
python3 ./test.py
-f
2-query/sample.py
-Q
2
python3 ./test.py
-f
2-query/sample.py
-Q
2
python3 ./test.py
-f
2-query/function_diff.py
-Q
2
python3 ./test.py
-f
2-query/function_diff.py
-Q
2
python3 ./test.py
-f
2-query/unique.py
-Q
2
python3 ./test.py
-f
2-query/unique.py
-Q
2
...
@@ -445,7 +445,7 @@ python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 3
...
@@ -445,7 +445,7 @@ python3 ./test.py -f 2-query/query_cols_tags_and_or.py -Q 3
# python3 ./test.py -f 2-query/avg.py -Q 3
# python3 ./test.py -f 2-query/avg.py -Q 3
# python3 ./test.py -f 2-query/elapsed.py -Q 3
# python3 ./test.py -f 2-query/elapsed.py -Q 3
python3 ./test.py
-f
2-query/csum.py
-Q
3
python3 ./test.py
-f
2-query/csum.py
-Q
3
#
python3 ./test.py -f 2-query/mavg.py -Q 3
python3 ./test.py
-f
2-query/mavg.py
-Q
3
python3 ./test.py
-f
2-query/sample.py
-Q
3
python3 ./test.py
-f
2-query/sample.py
-Q
3
python3 ./test.py
-f
2-query/function_diff.py
-Q
3
python3 ./test.py
-f
2-query/function_diff.py
-Q
3
python3 ./test.py
-f
2-query/unique.py
-Q
3
python3 ./test.py
-f
2-query/unique.py
-Q
3
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录