diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
index 07b43d1227a55538026e3c7d8d35d1e6f5c9a416..0a71c77d1d9dc718cc029c6a0b11ed63cd3034c1 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
@@ -10,8 +10,6 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
-import static org.junit.Assert.assertTrue;
-
public class SubscribeTest extends BaseTest {
Connection connection = null;
Statement statement = null;
diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c
index bb0f00ef53b252679b42c88610325034943cad6e..357093bd9e125567ef3d3629c00877f54778b500 100644
--- a/src/tsdb/src/tsdbRWHelper.c
+++ b/src/tsdb/src/tsdbRWHelper.c
@@ -1348,7 +1348,7 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa
int dcol = 0; // loop iter for SDataCols object
while (dcol < pDataCols->numOfCols) {
SDataCol *pDataCol = &(pDataCols->cols[dcol]);
- if (ccol >= pCompData->numOfCols) {
+ if (dcol != 0 && ccol >= pCompData->numOfCols) {
// Set current column as NULL and forward
dataColSetNEleNull(pDataCol, pCompBlock->numOfRows, pDataCols->maxPoints);
dcol++;
diff --git a/tests/examples/JDBC/JDBCDemo/pom.xml b/tests/examples/JDBC/JDBCDemo/pom.xml
index f0234f2bd762bd56fa0668af0d2b345d25320fea..92d757edfdea304084b5971613da231db2b9daef 100644
--- a/tests/examples/JDBC/JDBCDemo/pom.xml
+++ b/tests/examples/JDBC/JDBCDemo/pom.xml
@@ -9,21 +9,20 @@
1.0-SNAPSHOT
jar
-
-
-
- org.apache.maven.plugins
- maven-plugins
- 30
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 3.0.0
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-plugins
+ 30
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.0.0
+
+
org.apache.maven.plugins
maven-assembly-plugin
@@ -48,6 +47,7 @@
+
org.apache.maven.plugins
maven-compiler-plugin
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCConnectorChecker.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCConnectorChecker.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e801bc65894ef437ee41d692f9ef725b4f639ef
--- /dev/null
+++ b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JDBCConnectorChecker.java
@@ -0,0 +1,174 @@
+package com.taosdata.example;
+
+import com.taosdata.jdbc.TSDBDriver;
+
+import java.sql.*;
+import java.util.Properties;
+
+public class JDBCConnectorChecker {
+ private static String host;
+ private static String dbName = "test";
+ private static String tbName = "weather";
+ private Connection connection;
+
+
+ /**
+ * get connection
+ **/
+ private void init() {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ System.out.println("get connection starting...");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+ if (connection != null)
+ System.out.println("[ OK ] Connection established.");
+ } catch (ClassNotFoundException | SQLException e) {
+ throw new RuntimeException("connection failed: " + host);
+ }
+ }
+
+ /**
+ * create database
+ */
+ private void createDatabase() {
+ String sql = "create database if not exists " + dbName;
+ exuete(sql);
+ }
+
+ /**
+ * use database
+ */
+ private void useDatabase() {
+ String sql = "use " + dbName;
+ exuete(sql);
+ }
+
+ /**
+ * select
+ */
+ private void checkSelect() {
+ final String sql = "select * from test.weather";
+ executeQuery(sql);
+ }
+
+ private void executeQuery(String sql) {
+ try (Statement statement = connection.createStatement()) {
+ long start = System.currentTimeMillis();
+ ResultSet resultSet = statement.executeQuery(sql);
+ long end = System.currentTimeMillis();
+ printSql(sql, true, (end - start));
+ printResult(resultSet);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void printResult(ResultSet resultSet) throws SQLException {
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ for (int i = 1; i <= metaData.getColumnCount(); i++) {
+ String columnLabel = metaData.getColumnLabel(i);
+ String value = resultSet.getString(i);
+ System.out.printf("%s: %s\t", columnLabel, value);
+ }
+ System.out.println();
+ }
+ }
+
+ private String formatString(String str) {
+ StringBuilder sb = new StringBuilder();
+ int blankCnt = (26 - str.length()) / 2;
+ for (int j = 0; j < blankCnt; j++)
+ sb.append(" ");
+ sb.append(str);
+ for (int j = 0; j < blankCnt; j++)
+ sb.append(" ");
+ sb.append("|");
+ return sb.toString();
+ }
+
+
+ /**
+ * insert
+ */
+ private void checkInsert() {
+ final String sql = "insert into test.weather (ts, temperature, humidity) values(now, 20.5, 34)";
+ exuete(sql);
+ }
+
+ /**
+ * create table
+ */
+ private void createTable() {
+ final String sql = "create table if not exists " + dbName + "." + tbName + " (ts timestamp, temperature float, humidity int)";
+ exuete(sql);
+ }
+
+ private final void printSql(String sql, boolean succeed, long cost) {
+ System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
+ }
+
+ private final void exuete(String sql) {
+ try (Statement statement = connection.createStatement()) {
+ long start = System.currentTimeMillis();
+ boolean execute = statement.execute(sql);
+ long end = System.currentTimeMillis();
+ printSql(sql, execute, (end - start));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void close() {
+ try {
+ if (connection != null) {
+ this.connection.close();
+ System.out.println("connection closed.");
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void checkDropTable() {
+ final String sql = "drop table if exists " + dbName + "." + tbName + "";
+ exuete(sql);
+ }
+
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if ("-host".equalsIgnoreCase(args[i]) && i < args.length - 1) {
+ host = args[++i];
+ }
+ if ("-db".equalsIgnoreCase(args[i]) && i < args.length - 1) {
+ dbName = args[++i];
+ }
+ if ("-t".equalsIgnoreCase(args[i]) && i < args.length - 1) {
+ tbName = args[++i];
+ }
+ }
+
+ if (host == null) {
+ System.out.println("Usage: java -jar JDBCConnectorChecker.jar -host ");
+ return;
+ }
+
+ JDBCConnectorChecker checker = new JDBCConnectorChecker();
+ checker.init();
+ checker.createDatabase();
+ checker.useDatabase();
+ checker.checkDropTable();
+ checker.createTable();
+ checker.checkInsert();
+ checker.checkSelect();
+ checker.checkDropTable();
+ checker.close();
+ }
+
+
+}
diff --git a/tests/pytest/crash_gen.py b/tests/pytest/crash_gen.py
index c0a8fd1f00ade2642b1f23f6f1ef3cc60dfe615b..1ea19dfac35678bc632357db8368fc61b359dd65 100755
--- a/tests/pytest/crash_gen.py
+++ b/tests/pytest/crash_gen.py
@@ -1763,9 +1763,9 @@ class TaskCreateDb(StateTransitionTask):
return state.canCreateDb()
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
+ # self.execWtSql(wt, "create database db replica {}".format(Dice.throw(3)+1))
self.execWtSql(wt, "create database db")
-
class TaskDropDb(StateTransitionTask):
@classmethod
def getEndState(cls):
@@ -1832,7 +1832,7 @@ class TdSuperTable:
return dbc.query("SELECT * FROM db.{}".format(self._stName)) > 0
def ensureTable(self, dbc: DbConn, regTableName: str):
- sql = "select tbname from {} where tbname in ('{}')".format(self._stName, regTableName)
+ sql = "select tbname from db.{} where tbname in ('{}')".format(self._stName, regTableName)
if dbc.query(sql) >= 1 : # reg table exists already
return
sql = "CREATE TABLE {} USING {} tags ({})".format(
@@ -1916,9 +1916,9 @@ class TaskReadData(StateTransitionTask):
'max(speed)',
'first(speed)',
'last(speed)',
- # 'top(speed)', # TODO: not supported?
- # 'bottom(speed)', # TODO: not supported?
- # 'percentile(speed, 10)', # TODO: TD-1316
+ 'top(speed, 50)', # TODO: not supported?
+ 'bottom(speed, 50)', # TODO: not supported?
+ 'apercentile(speed, 10)', # TODO: TD-1316
'last_row(speed)',
# Transformation Functions
# 'diff(speed)', # TODO: no supported?!
@@ -1928,7 +1928,9 @@ class TaskReadData(StateTransitionTask):
None
])
try:
+ # Run the query against the regular table first
dbc.execute("select {} from db.{}".format(aggExpr, rTbName))
+ # Then run it against the super table
if aggExpr not in ['stddev(speed)']: #TODO: STDDEV not valid for super tables?!
dbc.execute("select {} from db.{}".format(aggExpr, sTable.getName()))
except taos.error.ProgrammingError as err:
@@ -2022,7 +2024,7 @@ class TaskRestartService(StateTransitionTask):
return state.canDropFixedSuperTable() # Basicallly when we have the super table
return False # don't run this otherwise
- CHANCE_TO_RESTART_SERVICE = 100
+ CHANCE_TO_RESTART_SERVICE = 200
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
if not gConfig.auto_start_service: # only execute when we are in -a mode
print("_a", end="", flush=True)
diff --git a/tests/pytest/fulltest.sh b/tests/pytest/fulltest.sh
index d600a003b08ab296245c06c0193552e628b2710d..f6c68378eaac754bf8fe748f4a65737cadc66e57 100755
--- a/tests/pytest/fulltest.sh
+++ b/tests/pytest/fulltest.sh
@@ -185,6 +185,7 @@ python3 ./test.py -f functions/function_stddev.py
python3 ./test.py -f functions/function_sum.py
python3 ./test.py -f functions/function_top.py
#python3 ./test.py -f functions/function_twa.py
+python3 queryCount.py
# tools
python3 test.py -f tools/taosdemo.py
diff --git a/tests/pytest/query/queryNormal.py b/tests/pytest/query/queryNormal.py
index 1ab285bbaded7c728bae167184fb36e3deb52978..208ac54ecd5192aec7880c49637794c1fa8e17b8 100644
--- a/tests/pytest/query/queryNormal.py
+++ b/tests/pytest/query/queryNormal.py
@@ -42,6 +42,8 @@ class TDTestCase:
# join 3 tables -- bug exists
tdSql.error("select stb_t.ts, stb_t.dscrption, stb_t.temperature, stb_p.id, stb_p.dscrption, stb_p.pressure,stb_v.velocity from stb_p, stb_t, stb_v where stb_p.ts=stb_t.ts and stb_p.ts=stb_v.ts and stb_p.id = stb_t.id")
+ tdSql.error("select * from stb1 whern c1 > 'test' limit 100")
+
# query show stable
tdSql.query("show stables")
tdSql.checkRows(1)
diff --git a/tests/pytest/query/queryNullValueTest.py b/tests/pytest/query/queryNullValueTest.py
index f521f2e5e96db9ea23c42f201e3db3099d93adf3..bc0b11827e18b0b436edac1cee2f04bafb05fab3 100644
--- a/tests/pytest/query/queryNullValueTest.py
+++ b/tests/pytest/query/queryNullValueTest.py
@@ -42,6 +42,9 @@ class TDTestCase:
tdSql.prepare()
for i in range(len(self.types)):
+ tdSql.execute("drop table if exists t0")
+ tdSql.execute("drop table if exists t1")
+
print("======== checking type %s ==========" % self.types[i])
tdSql.execute("create table t0 (ts timestamp, col %s)" % self.types[i])
tdSql.execute("insert into t0 values (%d, NULL)" % (self.ts))
diff --git a/tests/pytest/queryCount.py b/tests/pytest/queryCount.py
new file mode 100644
index 0000000000000000000000000000000000000000..7cc8f61f4dd4790cfc8c2229675eab87b440fadf
--- /dev/null
+++ b/tests/pytest/queryCount.py
@@ -0,0 +1,91 @@
+###################################################################
+# 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 sys
+import taos
+import threading
+from util.log import *
+from util.cases import *
+from util.sql import *
+from util.dnodes import *
+
+
+class QueryCountMultiThread:
+ def initConnection(self):
+ self.records = 10000000
+ self.numOfTherads = 50
+ self.ts = 1537146000000
+ self.host = "127.0.0.1"
+ self.user = "root"
+ self.password = "taosdata"
+ self.config = "/home/xp/git/TDengine/sim/dnode1/cfg"
+ self.conn = taos.connect(
+ self.host,
+ self.user,
+ self.password,
+ self.config)
+
+ def insertData(self, threadID):
+ cursor = self.conn.cursor()
+ print("Thread %d: starting" % threadID)
+ base = 200000 * threadID
+ for i in range(200):
+ query = "insert into tb values"
+ for j in range(1000):
+ query += "(%d, %d, 'test')" % (self.ts + base + i * 1000 + j, base + i * 1000 + j)
+ cursor.execute(query)
+ cursor.close()
+ print("Thread %d: finishing" % threadID)
+
+ def run(self):
+ tdDnodes.init("")
+ tdDnodes.setTestCluster(False)
+ tdDnodes.setValgrind(False)
+
+ tdDnodes.stopAll()
+ tdDnodes.deploy(1)
+ tdDnodes.start(1)
+
+ cursor = self.conn.cursor()
+ cursor.execute("drop database if exists db")
+ cursor.execute("create database db")
+ cursor.execute("use db")
+ cursor.execute("create table tb (ts timestamp, id int, name nchar(30))")
+ cursor.close()
+
+ threads = []
+ for i in range(50):
+ thread = threading.Thread(target=self.insertData, args=(i,))
+ threads.append(thread)
+ thread.start()
+
+ for i in range(50):
+ threads[i].join()
+
+ cursor = self.conn.cursor()
+ cursor.execute("use db")
+ sql = "select count(*) from tb"
+ cursor.execute(sql)
+ data = cursor.fetchall()
+
+ if(data[0][0] == 10000000):
+ tdLog.info("sql:%s, row:%d col:%d data:%d == expect:%d" % (sql, 0, 0, data[0][0], 10000000))
+ else:
+ tdLog.exit("queryCount.py failed: sql:%s failed, row:%d col:%d data:%d != expect:%d" % (sql, 0, 0, data[0][0], 10000000))
+
+ cursor.close()
+ self.conn.close()
+
+q = QueryCountMultiThread()
+q.initConnection()
+q.run()
\ No newline at end of file