diff --git a/Jenkinsfile b/Jenkinsfile index d606479006c50afc976361208175762899c87e5e..491e70742825fb9d655ca76321085a133c4aea63 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -456,23 +456,42 @@ pipeline { nohup taosd >/dev/null & sleep 10 ''' + sh ''' - cd ${WKC}/tests/examples/nodejs - npm install td2.0-connector > /dev/null 2>&1 - node nodejsChecker.js host=localhost - node test1970.js - cd ${WKC}/tests/connectorTest/nodejsTest/nanosupport - npm install td2.0-connector > /dev/null 2>&1 - node nanosecondTest.js + cd ${WKC}/src/connector/python + export PYTHONPATH=$PWD/ + export LD_LIBRARY_PATH=${WKC}/debug/build/lib + pip3 install pytest + pytest tests/ + python3 examples/bind-multi.py + python3 examples/bind-row.py + python3 examples/demo.py + python3 examples/insert-lines.py + python3 examples/pep-249.py + python3 examples/query-async.py + python3 examples/query-objectively.py + python3 examples/subscribe-sync.py + python3 examples/subscribe-async.py + ''' + + sh ''' + cd ${WKC}/tests/examples/nodejs + npm install td2.0-connector > /dev/null 2>&1 + node nodejsChecker.js host=localhost + node test1970.js + cd ${WKC}/tests/connectorTest/nodejsTest/nanosupport + npm install td2.0-connector > /dev/null 2>&1 + node nanosecondTest.js ''' catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { sh ''' cd ${WKC}/tests/examples/C#/taosdemo - mcs -out:taosdemo *.cs > /dev/null 2>&1 - echo '' |./taosdemo -c /etc/taos + dotnet build -c Release + tree | true + ./bin/Release/net5.0/taosdemo -c /etc/taos -y ''' - } + } sh ''' cd ${WKC}/tests/gotest bash batchtest.sh diff --git a/packaging/cfg/taosd.service b/packaging/cfg/taosd.service index fff4b74e62a6da8f2bda9a6306a79132d7585e42..452488b4e951e36c043c823e17cca5ab7dbfd21b 100644 --- a/packaging/cfg/taosd.service +++ b/packaging/cfg/taosd.service @@ -1,7 +1,7 @@ [Unit] Description=TDengine server service -After=network-online.target -Wants=network-online.target +After=network-online.target taosadapter.service +Wants=network-online.target taosadapter.service [Service] Type=simple diff --git a/src/client/src/tscParseLineProtocol.c b/src/client/src/tscParseLineProtocol.c index de3b7a4b3da6971b2c84bcaaaee2478787fc15cc..98d6ff8e4d6fe3cc4c08691ab027622b7410e32d 100644 --- a/src/client/src/tscParseLineProtocol.c +++ b/src/client/src/tscParseLineProtocol.c @@ -886,7 +886,7 @@ static int32_t applyChildTableDataPointsWithInsertSQL(TAOS* taos, char* cTableNa TAOS_RES* res = taos_query(taos, sql); free(sql); code = taos_errno(res); - info->affectedRows = taos_affected_rows(res); + info->affectedRows += taos_affected_rows(res); taos_free_result(res); return code; } @@ -1302,14 +1302,6 @@ clean_up: return code; } -int tsc_sml_insert(TAOS* taos, TAOS_SML_DATA_POINT* points, int numPoint) { - SSmlLinesInfo* info = calloc(1, sizeof(SSmlLinesInfo)); - info->id = genLinesSmlId(); - int code = tscSmlInsert(taos, points, numPoint, info); - free(info); - return code; -} - //========================================================================= /* Field Escape charaters diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index b661f8918dd2a9ca6b3ac7abbd2b481953c08438..ad1bc6491bfe930dab9ae2a3aee00e1f7396e678 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -2806,7 +2806,11 @@ static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaIn tscAddQueryInfo(&pNew->cmd); SQueryInfo *pNewQueryInfo = tscGetQueryInfoS(&pNew->cmd); - if (TSDB_CODE_SUCCESS != tscAllocPayload(&pNew->cmd, TSDB_DEFAULT_PAYLOAD_SIZE + pSql->cmd.payloadLen)) { + int payLoadLen = TSDB_DEFAULT_PAYLOAD_SIZE + pSql->cmd.payloadLen; + if (autocreate && pSql->cmd.insertParam.tagData.dataLen != 0) { + payLoadLen += pSql->cmd.insertParam.tagData.dataLen; + } + if (TSDB_CODE_SUCCESS != tscAllocPayload(&pNew->cmd, payLoadLen)) { tscError("0x%"PRIx64" malloc failed for payload to get table meta", pSql->self); tscFreeSqlObj(pNew); diff --git a/src/connector/python/examples/subscribe-async.py b/src/connector/python/examples/subscribe-async.py index 3782ce5505152e78838406e313094eb911bea4a2..49156de7edfb4322d7888727c28b76868cf6a16a 100644 --- a/src/connector/python/examples/subscribe-async.py +++ b/src/connector/python/examples/subscribe-async.py @@ -7,7 +7,7 @@ import time def subscribe_callback(p_sub, p_result, p_param, errno): # type: (c_void_p, c_void_p, c_void_p, c_int) -> None print("# fetch in callback") - result = TaosResult(p_result) + result = TaosResult(c_void_p(p_result)) result.check_error(errno) for row in result.rows_iter(): ts, n = row() @@ -18,18 +18,21 @@ def test_subscribe_callback(conn): # type: (TaosConnection) -> None dbname = "pytest_taos_subscribe_callback" try: + print("drop if exists") conn.execute("drop database if exists %s" % dbname) + print("create database") conn.execute("create database if not exists %s" % dbname) - conn.select_db(dbname) - conn.execute("create table if not exists log(ts timestamp, n int)") + print("create table") + # conn.execute("use %s" % dbname) + conn.execute("create table if not exists %s.log(ts timestamp, n int)" % dbname) print("# subscribe with callback") - sub = conn.subscribe(False, "test", "select * from log", 1000, subscribe_callback) + sub = conn.subscribe(False, "test", "select * from %s.log" % dbname, 1000, subscribe_callback) for i in range(10): - conn.execute("insert into log values(now, %d)" % i) + conn.execute("insert into %s.log values(now, %d)" % (dbname, i)) time.sleep(0.7) - # sub.close() + sub.close() conn.execute("drop database if exists %s" % dbname) # conn.close() diff --git a/src/connector/python/taos/cinterface.py b/src/connector/python/taos/cinterface.py index 37bc90d4c63fe3f75b12d46bb1bf535441869938..740af5838235a6abc41ae27e7c6a462c30977616 100644 --- a/src/connector/python/taos/cinterface.py +++ b/src/connector/python/taos/cinterface.py @@ -110,7 +110,7 @@ _libtaos.taos_get_client_info.restype = c_char_p def taos_get_client_info(): # type: () -> str """Get client version info.""" - return _libtaos.taos_get_client_info().decode() + return _libtaos.taos_get_client_info().decode("utf-8") _libtaos.taos_get_server_info.restype = c_char_p @@ -120,7 +120,7 @@ _libtaos.taos_get_server_info.argtypes = (c_void_p,) def taos_get_server_info(connection): # type: (c_void_p) -> str """Get server version as string.""" - return _libtaos.taos_get_server_info(connection).decode() + return _libtaos.taos_get_server_info(connection).decode("utf-8") _libtaos.taos_close.restype = None @@ -308,16 +308,14 @@ def taos_subscribe(connection, restart, topic, sql, interval, callback=None, par """ if callback != None: callback = subscribe_callback_type(callback) - if param != None: - param = c_void_p(param) return c_void_p( _libtaos.taos_subscribe( connection, 1 if restart else 0, c_char_p(topic.encode("utf-8")), c_char_p(sql.encode("utf-8")), - callback or None, - param, + callback, + c_void_p(param), interval, ) ) diff --git a/src/connector/python/taos/field.py b/src/connector/python/taos/field.py index 9d1799d367185e28b69f3cd1fe0bc0d0d14aa7fd..a6d64422e238b46b096a5ae62c42566666f226ad 100644 --- a/src/connector/python/taos/field.py +++ b/src/connector/python/taos/field.py @@ -144,7 +144,7 @@ def _crow_nchar_to_python(data, num_of_rows, nbytes=None, precision=FieldType.C_ try: if num_of_rows >= 0: tmpstr = ctypes.c_char_p(data) - res.append(tmpstr.value.decode()) + res.append(tmpstr.value.decode("utf-8")) else: res.append( ( @@ -172,7 +172,7 @@ def _crow_binary_to_python_block(data, num_of_rows, nbytes=None, precision=Field if rbyte == 1 and buffer[0] == b'\xff': res.append(None) else: - res.append(cast(buffer, c_char_p).value.decode()) + res.append(cast(buffer, c_char_p).value.decode("utf-8")) return res @@ -188,7 +188,7 @@ def _crow_nchar_to_python_block(data, num_of_rows, nbytes=None, precision=FieldT if rbyte == 4 and buffer[:4] == b'\xff'*4: res.append(None) else: - res.append(cast(buffer, c_char_p).value.decode()) + res.append(cast(buffer, c_char_p).value.decode("utf-8")) return res diff --git a/src/connector/python/taos/result.py b/src/connector/python/taos/result.py index c9feb4d6502515cc6e3e2d4be688f2e7fcd895b2..8b8a0cf108cf7c941d0a6476d8a9c1e2c5a41b84 100644 --- a/src/connector/python/taos/result.py +++ b/src/connector/python/taos/result.py @@ -3,6 +3,8 @@ from .cinterface import * # from .connection import TaosConnection from .error import * +from ctypes import c_void_p + class TaosResult(object): """TDengine result interface""" @@ -12,7 +14,11 @@ class TaosResult(object): # to make the __del__ order right self._conn = conn self._close_after = close_after - self._result = result + if isinstance(result, c_void_p): + self._result = result + else: + self._result = c_void_p(result) + self._fields = None self._field_count = None self._precision = None diff --git a/src/connector/python/tests/test_stream.py b/src/connector/python/tests/test_stream.py index de6e20928b176e51bc6d350fb01268459f4e7f95..32ec4c5999c975be907cf69a42a04b5f4dd5d54c 100644 --- a/src/connector/python/tests/test_stream.py +++ b/src/connector/python/tests/test_stream.py @@ -20,7 +20,8 @@ def stream_callback(p_param, p_result, p_row): result = TaosResult(p_result) row = TaosRow(result, p_row) try: - ts, count = row() + ts, count = row.as_tuple() + print(ts, count) p = cast(p_param, POINTER(Counter)) p.contents.count += count print("[%s] inserted %d in 5s, total count: %d" % (ts.strftime("%Y-%m-%d %H:%M:%S"), count, p.contents.count)) diff --git a/src/connector/python/tests/test_subscribe.py b/src/connector/python/tests/test_subscribe.py index 99fe5b263625c63200f416ec98fcb561773becd8..d8acd60e4f3b32bb87a9663b3f7dc43a73f2877b 100644 --- a/src/connector/python/tests/test_subscribe.py +++ b/src/connector/python/tests/test_subscribe.py @@ -63,7 +63,7 @@ def test_subscribe(conn): def subscribe_callback(p_sub, p_result, p_param, errno): # type: (c_void_p, c_void_p, c_void_p, c_int) -> None print("callback") - result = TaosResult(p_result) + result = TaosResult(c_void_p(p_result)) result.check_error(errno) for row in result.rows_iter(): ts, n = row() @@ -76,7 +76,7 @@ def test_subscribe_callback(conn): try: conn.execute("drop database if exists %s" % dbname) conn.execute("create database if not exists %s" % dbname) - conn.select_db(dbname) + conn.execute("use %s" % dbname) conn.execute("create table if not exists log(ts timestamp, n int)") print("# subscribe with callback")