Merge branch '3.0' of github.com:taosdata/TDengine into szhou/fixbugs
This commit is contained in:
commit
43cb4ad519
|
@ -807,300 +807,9 @@ SHOW SUBSCRIPTIONS;
|
||||||
以下是各语言的完整示例代码。
|
以下是各语言的完整示例代码。
|
||||||
|
|
||||||
<Tabs defaultValue="java" groupId="lang">
|
<Tabs defaultValue="java" groupId="lang">
|
||||||
|
|
||||||
<TabItem label="C" value="c">
|
<TabItem label="C" value="c">
|
||||||
|
<CDemo>
|
||||||
```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() {
|
|
||||||
tmq_list_t* topicList = tmq_list_new();
|
|
||||||
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[]) {
|
||||||
</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">
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
```c
|
```c
|
||||||
{{#include docs/examples/c/subscribe_demo.c}}
|
{{#include docs/examples/c/tmq-example.c}}
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
```py
|
```py
|
||||||
{{#include docs/examples/python/subscribe_demo.py}}
|
{{#include docs/examples/python/tmq_example.py}}
|
||||||
```
|
```
|
||||||
|
|
|
@ -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.0000001:
|
if abs(comput_irate_value - irate_value) <= 0.001: # 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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
# 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:
|
||||||
#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:
|
||||||
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:
|
||||||
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:
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
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:
|
||||||
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
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
|
||||||
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
|
||||||
# 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
|
||||||
|
|
Loading…
Reference in New Issue