Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cf0e26d

Browse files
authored
feat: add connect property setting function to native connector (#328)
* feat: add connect property setting function to native connector * feat: add options connection case * feat: add options connection case * feat: modify options connection case for ci test * feat: adjust options connection case param for ci test * feat: modify options connection case check * fix: delete libtaos.so version * feat: modify mac yml for ci test * test: modify mac.yml print lib dir * feat: delete libtaos ln * feat: add ci test command * feat: add ci test env info print * feat: modify mac.yml for print test * feat: modify libtaos path for test * feat: Delete incorrect soft connections * feat: modify adapter soft connections * feat: clear libtaos * feat: modify spell error * feat: add local lib dir print * feat: modify soft link shell * feat: modify taosc soft link for taosadapter * feat: delete test code * feat: restore connector parameters * feat: put the options/mode settings to connect() parameters * feat: rename TSDB_OPTION_CONNECTION
1 parent c1cad85 commit cf0e26d

File tree

8 files changed

+156
-14
lines changed

8 files changed

+156
-14
lines changed

.github/workflows/mac.yml

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,23 +138,24 @@ jobs:
138138
cp ./TDengine/debug/build/bin/taos ./release/
139139
cp ./TDengine/debug/build/bin/taosd ./release/
140140
cp ./TDengine/debug/build/bin/taosadapter ./release/
141-
cp ./TDengine/debug/build/lib/libtaos.3.9.9.9.dylib ./release/
142-
cp ./TDengine/debug/build/lib/libtaosnative.3.9.9.9.dylib ./release/
141+
cp ./TDengine/debug/build/lib/libtaos.dylib ./release/
142+
cp ./TDengine/debug/build/lib/libtaosnative.dylib ./release/
143143
cp ./TDengine/include/client/taos.h ./release/
144144
cat >./release/install.sh<<EOF
145+
echo "-------------"
146+
ls -l /usr/local/lib/
145147
chmod +x ./taos
146148
chmod +x ./taosd
147149
chmod +x ./taosadapter
148150
cp ./taos /usr/local/bin
149151
cp ./taosd /usr/local/bin
150152
cp ./taosadapter /usr/local/bin
151-
cp ./libtaos.3.9.9.9.dylib /usr/local/lib
152-
ln -sfv /usr/local/lib/libtaos.3.9.9.9.dylib /usr/local/lib/libtaos.1.dylib
153-
ln -sfv /usr/local/lib/libtaos.1.dylib /usr/local/lib/libtaos.dylib
154-
cp ./libtaosnative.3.9.9.9.dylib /usr/local/lib
155-
ln -sfv /usr/local/lib/libtaosnative.3.9.9.9.dylib /usr/local/lib/libtaosnative.1.dylib
156-
ln -sfv /usr/local/lib/libtaosnative.1.dylib /usr/local/lib/libtaosnative.dylib
153+
sudo rm -rf /usr/local/lib/libtaos*
154+
cp ./libtaos.dylib /usr/local/lib
155+
cp ./libtaosnative.dylib /usr/local/lib
157156
cp ./taos.h /usr/local/include
157+
ls -l /usr/local/lib/
158+
echo "!-------------!"
158159
EOF
159160
tar -zcvf server.tar.gz ./release
160161
@@ -358,8 +359,8 @@ jobs:
358359
run: |
359360
pwd
360361
mkdir -p TDengine/debug/build/lib
361-
ln -sfv /usr/local/lib/libtaos.1.dylib TDengine/debug/build/lib/libtaos.1.dylib
362-
ln -sfv /usr/local/lib/libtaosnative.1.dylib TDengine/debug/build/lib/libtaosnative.1.dylib
362+
ln -sfv /usr/local/lib/libtaos.dylib TDengine/debug/build/lib/libtaos.dylib
363+
ln -sfv /usr/local/lib/libtaosnative.dylib TDengine/debug/build/lib/libtaosnative.dylib
363364
ls -l TDengine/debug/build/lib/
364365
sudo taosadapter &
365366
@@ -372,7 +373,10 @@ jobs:
372373
run: |
373374
source $VENV
374375
export TDENGINE_URL=localhost:6041
376+
echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH"
377+
ls -l /usr/local/lib
375378
ps aux | grep taos
379+
python -c "import ctypes; print(ctypes.CDLL('/usr/local/lib/libtaos.dylib'))"
376380
poetry run pip install psutil pandas "numpy<2.0.0" shapely
377381
poetry run pytest tests
378382

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## v2.8.1 - 2025-05-22
11+
12+
### Features:
13+
14+
- add connect property setting function to native connector
15+
16+
### Bug Fixes:
17+
18+
- all workflows cmake config
19+
- delete token auth
20+
- modify version to 2.8.0
21+
- optimize null value checks (#317)
22+
- password supports special characters
23+
- remove superset driver TDengine.py
24+
- test auth base64
25+
- uniform python name
26+
- workflows cmake config
27+
- **(ws)**: update Cargo.lock
28+
29+
### Documents:
30+
31+
- add changelog for v2.7.22/v2.7.23
32+
- python to Python
33+
1034
## v2.7.23 - 2025-03-24
1135
- support DECIMAL data type
1236

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "taospy"
3-
version = "2.8.0"
3+
version = "2.8.1"
44
description = "The official TDengine Python connector"
55
authors = ["Taosdata Inc. <[email protected]>"]
66
license = "MIT"

taos/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '2.8.0'
1+
__version__ = '2.8.1'

taos/cinterface.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ def taos_options(option, value):
156156
_value = c_char_p(value.encode("utf-8"))
157157
_libtaos.taos_options(option, _value)
158158

159+
def taos_options_connection(connection, option, value):
160+
_value = c_char_p(value.encode("utf-8"))
161+
res = _libtaos.taos_options_connection(connection, option, _value)
162+
if res != 0:
163+
raise DatabaseError("taos_options_connection error", res)
164+
165+
def taos_set_conn_mode(connection, mode, value):
166+
res = _libtaos.taos_set_conn_mode(connection, mode, value)
167+
if res != 0:
168+
raise DatabaseError("taos_set_conn_mode error", res)
159169

160170
def taos_init():
161171
# type: () -> None

taos/connection.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import Optional, List
33

44
from taos.cinterface import *
5+
from taos.constants import TSDB_CONNECTIONS_MODE, TSDB_OPTION_CONNECTION
56
from taos.result import TaosResult
67
from taos.cursor import TaosCursor
78
from taos.subscription import TaosSubscription
@@ -22,9 +23,33 @@ def __init__(self, *args, **kwargs):
2223
self._config = None
2324
self._tz = None
2425
self.decode_binary = True
26+
self._charset = None
27+
self._user_app = None
28+
self._user_ip = None
29+
self._bi_mode = None
30+
2531
self._init_config(**kwargs)
2632
self._chandle = CTaosInterface(self._config, self._tz)
2733
self._conn = self._chandle.connect(self._host, self._user, self._password, self._database, self._port)
34+
35+
if self._charset is not None:
36+
self.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_CHARSET.value, self._charset)
37+
38+
if self._tz is not None:
39+
self.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_TIMEZONE.value, self._tz)
40+
41+
if self._user_app is not None:
42+
self.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_USER_APP.value, self._user_app)
43+
44+
if self._user_ip is not None:
45+
self.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_USER_IP.value, self._user_ip)
46+
47+
if self._bi_mode is not None:
48+
if self._bi_mode:
49+
self.set_mode(TSDB_CONNECTIONS_MODE.TSDB_CONNECTIONS_MODE_BI.value, 1)
50+
else:
51+
self.set_mode(TSDB_CONNECTIONS_MODE.TSDB_CONNECTIONS_MODE_BI.value, 0)
52+
2853

2954
def _init_config(self, **kwargs):
3055
# host
@@ -58,6 +83,18 @@ def _init_config(self, **kwargs):
5883
if "decode_binary" in kwargs:
5984
self.decode_binary = kwargs["decode_binary"]
6085

86+
if "charset" in kwargs:
87+
self._charset = kwargs["charset"]
88+
89+
if "user_app" in kwargs:
90+
self._user_app = kwargs["user_app"]
91+
92+
if "user_ip" in kwargs:
93+
self._user_ip = kwargs["user_ip"]
94+
95+
if "bi_mode" in kwargs:
96+
self._bi_mode = kwargs["bi_mode"]
97+
6198
def close(self):
6299
"""Close current connection."""
63100
if self._conn:
@@ -74,6 +111,12 @@ def server_info(self):
74111
# type: () -> str
75112
return taos_get_server_info(self._conn)
76113

114+
def set_option(self, option, value):
115+
taos_options_connection(self._conn, option, value)
116+
117+
def set_mode(self, mode, value):
118+
taos_set_conn_mode(self._conn, mode, value)
119+
77120
def select_db(self, database):
78121
# type: (str) -> None
79122
taos_select_db(self._conn, database)

taos/constants.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""
55

66
import ctypes, struct
7-
7+
from enum import Enum
88

99
class FieldType(object):
1010
"""TDengine Field Types"""
@@ -50,3 +50,14 @@ class FieldType(object):
5050
C_TIMESTAMP_MICRO = 1
5151
C_TIMESTAMP_NANO = 2
5252
C_TIMESTAMP_UNKNOWN = 3
53+
54+
class TSDB_OPTION_CONNECTION(Enum):
55+
TSDB_OPTION_CONNECTION_CLEAR = -1 # means clear all option in this connection
56+
TSDB_OPTION_CONNECTION_CHARSET = 0 # charset, Same as the scope supported by the system
57+
TSDB_OPTION_CONNECTION_TIMEZONE = 1 # timezone, Same as the scope supported by the system
58+
TSDB_OPTION_CONNECTION_USER_IP = 2 # user ip
59+
TSDB_OPTION_CONNECTION_USER_APP = 3 # user app, max lengthe is 23, truncated if longer than 23
60+
TSDB_MAX_OPTIONS_CONNECTION = 4
61+
62+
class TSDB_CONNECTIONS_MODE(Enum):
63+
TSDB_CONNECTIONS_MODE_BI = 0

tests/test_connect_args.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from taos import *
2+
import time
23

4+
from taos.constants import TSDB_CONNECTIONS_MODE, TSDB_OPTION_CONNECTION
35

46
def test_connect_args():
57
"""
@@ -8,7 +10,55 @@ def test_connect_args():
810
Useless args, prevent mistakenly deleted args in connect init.
911
Because some case in CI of earlier version may use it.
1012
"""
13+
1114
host = "localhost:6030"
12-
conn = connect(host)
15+
conn = connect(host=host, charset="utf8", timezone="UTC", user_app="python client 1", user_ip="127.2.2.2", bi_mode=True)
16+
17+
time.sleep(30)
18+
bClient = False
19+
bHost = False
20+
result = conn.query("show connections")
21+
assert result is not None
22+
for row in result:
23+
print(row)
24+
if row[7] == "python client 1":
25+
bClient = True
26+
if row[8] == "127.2.2.2":
27+
bHost = True
28+
29+
assert bClient and bHost
30+
31+
result = conn.query("select timezone()")
32+
assert result is not None
33+
for row in result:
34+
print(row)
35+
assert row[0] == "UTC (UTC, +0000)"
36+
37+
conn.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_CHARSET.value, "utf8")
38+
conn.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_TIMEZONE.value, "UTC")
39+
conn.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_USER_IP.value, "127.0.0.2")
40+
conn.set_option(TSDB_OPTION_CONNECTION.TSDB_OPTION_CONNECTION_USER_APP.value, "python client")
41+
conn.set_mode(TSDB_CONNECTIONS_MODE.TSDB_CONNECTIONS_MODE_BI.value, 1)
42+
43+
time.sleep(30)
44+
bClient = False
45+
bHost = False
46+
result = conn.query("show connections")
47+
assert result is not None
48+
for row in result:
49+
print(row)
50+
if row[7] == "python client":
51+
bClient = True
52+
if row[8] == "127.0.0.2":
53+
bHost = True
54+
55+
assert bClient and bHost
56+
57+
result = conn.query("select timezone()")
58+
assert result is not None
59+
for row in result:
60+
print(row)
61+
assert row[0] == "UTC (UTC, +0000)"
62+
1363
assert conn is not None
1464
conn.close()

0 commit comments

Comments
 (0)