Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
eede5a77
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
eede5a77
编写于
12月 04, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/develop' into feature/wal
上级
94756ccd
8fdcba9f
变更
33
隐藏空白更改
内联
并排
Showing
33 changed file
with
173 addition
and
82 deletion
+173
-82
documentation20/webdocs/markdowndocs/faq-ch.md
documentation20/webdocs/markdowndocs/faq-ch.md
+14
-1
packaging/cfg/taos.cfg
packaging/cfg/taos.cfg
+4
-1
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+4
-4
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+17
-4
src/client/src/tscProfile.c
src/client/src/tscProfile.c
+2
-0
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+4
-0
src/client/src/tscSystem.c
src/client/src/tscSystem.c
+1
-1
src/common/inc/tglobal.h
src/common/inc/tglobal.h
+1
-0
src/common/src/tglobal.c
src/common/src/tglobal.c
+14
-1
src/connector/python/linux/python2/setup.py
src/connector/python/linux/python2/setup.py
+1
-1
src/connector/python/linux/python2/taos/__init__.py
src/connector/python/linux/python2/taos/__init__.py
+1
-1
src/connector/python/linux/python2/taos/cinterface.py
src/connector/python/linux/python2/taos/cinterface.py
+2
-0
src/connector/python/linux/python2/taos/cursor.py
src/connector/python/linux/python2/taos/cursor.py
+2
-2
src/connector/python/linux/python3/setup.py
src/connector/python/linux/python3/setup.py
+1
-1
src/connector/python/linux/python3/taos/__init__.py
src/connector/python/linux/python3/taos/__init__.py
+2
-2
src/connector/python/linux/python3/taos/cinterface.py
src/connector/python/linux/python3/taos/cinterface.py
+2
-0
src/connector/python/linux/python3/taos/cursor.py
src/connector/python/linux/python3/taos/cursor.py
+2
-2
src/connector/python/windows/python2/setup.py
src/connector/python/windows/python2/setup.py
+1
-1
src/connector/python/windows/python2/taos/__init__.py
src/connector/python/windows/python2/taos/__init__.py
+1
-1
src/connector/python/windows/python2/taos/cinterface.py
src/connector/python/windows/python2/taos/cinterface.py
+2
-0
src/connector/python/windows/python2/taos/cursor.py
src/connector/python/windows/python2/taos/cursor.py
+2
-2
src/connector/python/windows/python3/setup.py
src/connector/python/windows/python3/setup.py
+1
-1
src/connector/python/windows/python3/taos/__init__.py
src/connector/python/windows/python3/taos/__init__.py
+1
-1
src/connector/python/windows/python3/taos/cinterface.py
src/connector/python/windows/python3/taos/cinterface.py
+2
-0
src/connector/python/windows/python3/taos/cursor.py
src/connector/python/windows/python3/taos/cursor.py
+2
-2
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+6
-2
src/query/src/qParserImpl.c
src/query/src/qParserImpl.c
+17
-2
src/tsdb/src/tsdbMemTable.c
src/tsdb/src/tsdbMemTable.c
+2
-2
src/util/src/tconfig.c
src/util/src/tconfig.c
+0
-2
src/util/src/tref.c
src/util/src/tref.c
+10
-9
src/vnode/src/vnodeRead.c
src/vnode/src/vnodeRead.c
+36
-35
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+2
-1
tests/pytest/query/queryInterval.py
tests/pytest/query/queryInterval.py
+14
-0
未找到文件。
documentation20/webdocs/markdowndocs/faq-ch.md
浏览文件 @
eede5a77
...
...
@@ -101,7 +101,20 @@ Connection = DriverManager.getConnection(url, properties);
<version>2.0.4</version>
</dependency>
```
## 14. 怎么报告问题?
## 14. taos connect failed, reason: invalid timestamp
常见原因是服务器和客户端时间没有校准,可以通过和时间服务器同步的方式(Linux 下使用 ntpdate 命令,Windows 在系统时间设置中选择自动同步)校准。
## 15. 表名显示不全
由于 taos shell 在终端中显示宽度有限,有可能比较长的表名显示不全,如果按照显示的不全的表名进行相关操作会发生 Table does not exist 错误。解决方法可以是通过修改 taos.cfg 文件中的设置项 maxBinaryDisplayWidth, 或者直接输入命令 set max_binary_display_width 100。或者在命令结尾使用
\G
参数来调整结果的显示方式。
## 16. 怎么报告问题?
如果 FAQ 中的信息不能够帮到您,需要 TDengine 技术团队的技术支持与协助,请将以下两个目录中内容打包:
1.
/var/log/taos
2.
/etc/taos
...
...
packaging/cfg/taos.cfg
浏览文件 @
eede5a77
...
...
@@ -251,7 +251,7 @@
# cqDebugFlag 131
# enable/disable recording the SQL in taos client
#
tscE
nableRecordSql 0
#
e
nableRecordSql 0
# generate core file when service crash
# enableCoreFile 1
...
...
@@ -264,3 +264,6 @@
# enable/disable stream (continuous query)
# stream 1
# only 50% CPU resources will be used in query processing
# halfCoresForQuery 0
src/client/src/tscFunctionImpl.c
浏览文件 @
eede5a77
...
...
@@ -4540,11 +4540,11 @@ static void sumrate_finalizer(SQLFunctionCtx *pCtx) {
*
*/
int32_t
functionCompatList
[]
=
{
// count,
sum, avg, min, max, stddev, percentile,
apercentile, first, last
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// last_row,
top, bottom, spread, twa, leastsqr, ts,
ts_dummy, tag_dummy, ts_z
// count,
sum, avg, min, max, stddev, percentile,
apercentile, first, last
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
// last_row,
top, bottom, spread, twa, leastsqr, ts,
ts_dummy, tag_dummy, ts_z
4
,
-
1
,
-
1
,
1
,
1
,
1
,
1
,
1
,
1
,
-
1
,
// tag,
colprj, tagprj, arithmetic, diff, first_dist, last_dist, interp rate
irate
// tag,
colprj, tagprj, arithmetic, diff, first_dist, last_dist, interp rate
irate
1
,
1
,
1
,
1
,
-
1
,
1
,
1
,
5
,
1
,
1
,
// sum_rate, sum_irate, avg_rate, avg_irate
1
,
1
,
1
,
1
,
...
...
src/client/src/tscParseInsert.c
浏览文件 @
eede5a77
...
...
@@ -630,11 +630,17 @@ int32_t tscAllocateMemIfNeed(STableDataBlocks *pDataBlock, int32_t rowSize, int3
return
TSDB_CODE_SUCCESS
;
}
static
void
tsSetBlockInfo
(
SSubmitBlk
*
pBlocks
,
const
STableMeta
*
pTableMeta
,
int32_t
numOfRows
)
{
static
int32_t
tsSetBlockInfo
(
SSubmitBlk
*
pBlocks
,
const
STableMeta
*
pTableMeta
,
int32_t
numOfRows
)
{
pBlocks
->
tid
=
pTableMeta
->
id
.
tid
;
pBlocks
->
uid
=
pTableMeta
->
id
.
uid
;
pBlocks
->
sversion
=
pTableMeta
->
sversion
;
pBlocks
->
numOfRows
+=
numOfRows
;
if
(
pBlocks
->
numOfRows
+
numOfRows
>=
INT16_MAX
)
{
return
TSDB_CODE_TSC_INVALID_SQL
;
}
else
{
pBlocks
->
numOfRows
+=
numOfRows
;
return
TSDB_CODE_SUCCESS
;
}
}
// data block is disordered, sort it in ascending order
...
...
@@ -722,7 +728,11 @@ static int32_t doParseInsertStatement(SSqlObj *pSql, void *pTableList, char **st
}
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)(
dataBuf
->
pData
);
tsSetBlockInfo
(
pBlocks
,
pTableMeta
,
numOfRows
);
code
=
tsSetBlockInfo
(
pBlocks
,
pTableMeta
,
numOfRows
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tscInvalidSQLErrMsg
(
pCmd
->
payload
,
"too many rows in sql, total number of rows should be less than 32767"
,
*
str
);
return
code
;
}
dataBuf
->
vgId
=
pTableMeta
->
vgroupInfo
.
vgId
;
dataBuf
->
numOfTables
=
1
;
...
...
@@ -1384,7 +1394,10 @@ static int doPackSendDataBlock(SSqlObj *pSql, int32_t numOfRows, STableDataBlock
STableMeta
*
pTableMeta
=
tscGetTableMetaInfoFromCmd
(
pCmd
,
pCmd
->
clauseIndex
,
0
)
->
pTableMeta
;
SSubmitBlk
*
pBlocks
=
(
SSubmitBlk
*
)(
pTableDataBlocks
->
pData
);
tsSetBlockInfo
(
pBlocks
,
pTableMeta
,
numOfRows
);
code
=
tsSetBlockInfo
(
pBlocks
,
pTableMeta
,
numOfRows
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
tscInvalidSQLErrMsg
(
pCmd
->
payload
,
"too many rows in sql, total number of rows should be less than 32767"
,
NULL
);
}
if
((
code
=
tscMergeTableDataBlocks
(
pSql
,
pCmd
->
pDataBlocks
))
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
...
...
src/client/src/tscProfile.c
浏览文件 @
eede5a77
...
...
@@ -39,6 +39,7 @@ void tscInitConnCb(void *param, TAOS_RES *result, int code) {
tscSlowQueryConnInitialized
=
true
;
tscSaveSlowQueryFp
(
sql
,
NULL
);
}
taos_free_result
(
result
);
}
void
tscAddIntoSqlList
(
SSqlObj
*
pSql
)
{
...
...
@@ -69,6 +70,7 @@ void tscSaveSlowQueryFpCb(void *param, TAOS_RES *result, int code) {
}
else
{
tscDebug
(
"success to save slow query, code:%d"
,
code
);
}
taos_free_result
(
result
);
}
void
tscSaveSlowQueryFp
(
void
*
handle
,
void
*
tmrId
)
{
...
...
src/client/src/tscSQLParser.c
浏览文件 @
eede5a77
...
...
@@ -2835,6 +2835,10 @@ static bool functionCompatibleCheck(SQueryInfo* pQueryInfo, bool joinQuery) {
if
(
functionCompatList
[
functionId
]
!=
factor
)
{
return
false
;
}
else
{
if
(
factor
==
-
1
)
{
// two functions with the same -1 flag
return
false
;
}
}
if
(
functionId
==
TSDB_FUNC_LAST_ROW
&&
joinQuery
)
{
...
...
src/client/src/tscSystem.c
浏览文件 @
eede5a77
...
...
@@ -144,7 +144,7 @@ void taos_init_imp(void) {
int64_t
refreshTime
=
10
;
// 10 seconds by default
if
(
tscMetaCache
==
NULL
)
{
tscMetaCache
=
taosCacheInit
(
TSDB_DATA_TYPE_BINARY
,
refreshTime
,
false
,
tscFreeTableMetaHelper
,
"tableMeta"
);
tscObjRef
=
taosOpenRef
(
4096
,
tscFreeRegisteredSqlObj
);
tscObjRef
=
taosOpenRef
(
4096
0
,
tscFreeRegisteredSqlObj
);
}
tscRefId
=
taosOpenRef
(
200
,
tscCloseTscObj
);
...
...
src/common/inc/tglobal.h
浏览文件 @
eede5a77
...
...
@@ -56,6 +56,7 @@ extern char tsTempDir[];
//query buffer management
extern
int32_t
tsQueryBufferSize
;
// maximum allowed usage buffer for each data node during query processing
extern
int32_t
tsHalfCoresForQuery
;
// only 50% will be used in query processing
// client
extern
int32_t
tsTableMetaKeepTimer
;
...
...
src/common/src/tglobal.c
浏览文件 @
eede5a77
...
...
@@ -107,6 +107,9 @@ int64_t tsMaxRetentWindow = 24 * 3600L; // maximum time window tolerance
// positive value (in MB)
int32_t
tsQueryBufferSize
=
-
1
;
// only 50% cpu will be used in query processing in dnode
int32_t
tsHalfCoresForQuery
=
0
;
// db parameters
int32_t
tsCacheBlockSize
=
TSDB_DEFAULT_CACHE_BLOCK_SIZE
;
int32_t
tsBlocksPerVnode
=
TSDB_DEFAULT_TOTAL_BLOCKS
;
...
...
@@ -884,6 +887,16 @@ static void doInitGlobalConfig(void) {
cfg
.
unitType
=
TAOS_CFG_UTYPE_BYTE
;
taosInitConfigOption
(
cfg
);
cfg
.
option
=
"halfCoresForQuery"
;
cfg
.
ptr
=
&
tsHalfCoresForQuery
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
|
TSDB_CFG_CTYPE_B_SHOW
;
cfg
.
minValue
=
0
;
cfg
.
maxValue
=
1
;
cfg
.
ptrLength
=
1
;
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
taosInitConfigOption
(
cfg
);
// locale & charset
cfg
.
option
=
"timezone"
;
cfg
.
ptr
=
tsTimezone
;
...
...
@@ -1290,7 +1303,7 @@ static void doInitGlobalConfig(void) {
cfg
.
unitType
=
TAOS_CFG_UTYPE_NONE
;
taosInitConfigOption
(
cfg
);
cfg
.
option
=
"
tscE
nableRecordSql"
;
cfg
.
option
=
"
e
nableRecordSql"
;
cfg
.
ptr
=
&
tsTscEnableRecordSql
;
cfg
.
valType
=
TAOS_CFG_VTYPE_INT32
;
cfg
.
cfgType
=
TSDB_CFG_CTYPE_B_CONFIG
;
...
...
src/connector/python/linux/python2/setup.py
浏览文件 @
eede5a77
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
2
"
,
version
=
"2.0.
3
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/linux/python2/taos/__init__.py
浏览文件 @
eede5a77
...
...
@@ -3,7 +3,7 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0'
apilevel
=
'2.0
.3
'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
src/connector/python/linux/python2/taos/cinterface.py
浏览文件 @
eede5a77
...
...
@@ -81,6 +81,7 @@ def _crow_double_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
...
...
@@ -106,6 +107,7 @@ def _crow_nchar_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
...
...
src/connector/python/linux/python2/taos/cursor.py
浏览文件 @
eede5a77
...
...
@@ -26,7 +26,7 @@ class TDengineCursor(object):
"""
def
__init__
(
self
,
connection
=
None
):
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
self
.
_connection
=
None
self
.
_result
=
None
...
...
@@ -234,7 +234,7 @@ class TDengineCursor(object):
def
_reset_result
(
self
):
"""Reset the result to unused version.
"""
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
if
self
.
_result
is
not
None
:
CTaosInterface
.
freeResult
(
self
.
_result
)
...
...
src/connector/python/linux/python3/setup.py
浏览文件 @
eede5a77
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
2
"
,
version
=
"2.0.
3
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/linux/python3/taos/__init__.py
浏览文件 @
eede5a77
...
...
@@ -3,7 +3,7 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0'
apilevel
=
'2.0
.3
'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
@@ -21,4 +21,4 @@ def connect(*args, **kwargs):
@rtype: TDengineConnector
"""
return
TDengineConnection
(
*
args
,
**
kwargs
)
\ No newline at end of file
return
TDengineConnection
(
*
args
,
**
kwargs
)
src/connector/python/linux/python3/taos/cinterface.py
浏览文件 @
eede5a77
...
...
@@ -81,6 +81,7 @@ def _crow_double_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
...
...
@@ -106,6 +107,7 @@ def _crow_nchar_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
...
...
src/connector/python/linux/python3/taos/cursor.py
浏览文件 @
eede5a77
...
...
@@ -27,7 +27,7 @@ class TDengineCursor(object):
"""
def
__init__
(
self
,
connection
=
None
):
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
self
.
_connection
=
None
self
.
_result
=
None
...
...
@@ -242,7 +242,7 @@ class TDengineCursor(object):
def
_reset_result
(
self
):
"""Reset the result to unused version.
"""
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
if
self
.
_result
is
not
None
:
CTaosInterface
.
freeResult
(
self
.
_result
)
...
...
src/connector/python/windows/python2/setup.py
浏览文件 @
eede5a77
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
2
"
,
version
=
"2.0.
3
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/windows/python2/taos/__init__.py
浏览文件 @
eede5a77
...
...
@@ -3,7 +3,7 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0'
apilevel
=
'2.0
.3
'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
src/connector/python/windows/python2/taos/cinterface.py
浏览文件 @
eede5a77
...
...
@@ -81,6 +81,7 @@ def _crow_double_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
...
...
@@ -106,6 +107,7 @@ def _crow_nchar_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
...
...
src/connector/python/windows/python2/taos/cursor.py
浏览文件 @
eede5a77
...
...
@@ -27,7 +27,7 @@ class TDengineCursor(object):
"""
def
__init__
(
self
,
connection
=
None
):
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
self
.
_connection
=
None
self
.
_result
=
None
...
...
@@ -193,7 +193,7 @@ class TDengineCursor(object):
def
_reset_result
(
self
):
"""Reset the result to unused version.
"""
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
if
self
.
_result
is
not
None
:
CTaosInterface
.
freeResult
(
self
.
_result
)
...
...
src/connector/python/windows/python3/setup.py
浏览文件 @
eede5a77
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
2
"
,
version
=
"2.0.
3
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/windows/python3/taos/__init__.py
浏览文件 @
eede5a77
...
...
@@ -3,7 +3,7 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0'
apilevel
=
'2.0
.3
'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
src/connector/python/windows/python3/taos/cinterface.py
浏览文件 @
eede5a77
...
...
@@ -81,6 +81,7 @@ def _crow_double_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
...
...
@@ -108,6 +109,7 @@ def _crow_nchar_to_python(data, num_of_rows, nbytes=None, micro=False):
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
...
...
src/connector/python/windows/python3/taos/cursor.py
浏览文件 @
eede5a77
...
...
@@ -28,7 +28,7 @@ class TDengineCursor(object):
"""
def
__init__
(
self
,
connection
=
None
):
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
self
.
_connection
=
None
self
.
_result
=
None
...
...
@@ -194,7 +194,7 @@ class TDengineCursor(object):
def
_reset_result
(
self
):
"""Reset the result to unused version.
"""
self
.
_description
=
None
self
.
_description
=
[]
self
.
_rowcount
=
-
1
if
self
.
_result
is
not
None
:
CTaosInterface
.
freeResult
(
self
.
_result
)
...
...
src/query/src/qExecutor.c
浏览文件 @
eede5a77
...
...
@@ -1372,8 +1372,12 @@ static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, char *pDat
}
if
(
type
==
TSDB_DATA_TYPE_BINARY
||
type
==
TSDB_DATA_TYPE_NCHAR
)
{
pResultRow
->
key
=
malloc
(
varDataTLen
(
pData
));
varDataCopy
(
pResultRow
->
key
,
pData
);
if
(
pResultRow
->
key
==
NULL
)
{
pResultRow
->
key
=
malloc
(
varDataTLen
(
pData
));
varDataCopy
(
pResultRow
->
key
,
pData
);
}
else
{
assert
(
memcmp
(
pResultRow
->
key
,
pData
,
varDataTLen
(
pData
))
==
0
);
}
}
else
{
pResultRow
->
win
.
skey
=
v
;
pResultRow
->
win
.
ekey
=
v
;
...
...
src/query/src/qParserImpl.c
浏览文件 @
eede5a77
...
...
@@ -405,14 +405,29 @@ void tSQLSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
if
(
type
->
type
==
0
)
{
pField
->
bytes
=
0
;
}
else
{
pField
->
bytes
=
(
int16_t
)(
-
(
int32_t
)
type
->
type
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
);
int32_t
bytes
=
-
(
int32_t
)(
type
->
type
);
if
(
bytes
>
(
TSDB_MAX_NCHAR_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
// we have to postpone reporting the error because it cannot be done here
// as pField->bytes is int16_t, use 'TSDB_MAX_NCHAR_LEN + 1' to avoid overflow
bytes
=
TSDB_MAX_NCHAR_LEN
+
1
;
}
else
{
bytes
=
bytes
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
;
}
pField
->
bytes
=
(
int16_t
)
bytes
;
}
}
else
if
(
i
==
TSDB_DATA_TYPE_BINARY
)
{
/* for binary, the TOKENTYPE is the length of binary */
if
(
type
->
type
==
0
)
{
pField
->
bytes
=
0
;
}
else
{
pField
->
bytes
=
(
int16_t
)
(
-
(
int32_t
)
type
->
type
+
VARSTR_HEADER_SIZE
);
int32_t
bytes
=
-
(
int32_t
)(
type
->
type
);
if
(
bytes
>
TSDB_MAX_BINARY_LEN
-
VARSTR_HEADER_SIZE
)
{
// refer comment for NCHAR above
bytes
=
TSDB_MAX_BINARY_LEN
+
1
;
}
else
{
bytes
+=
VARSTR_HEADER_SIZE
;
}
pField
->
bytes
=
(
int16_t
)
bytes
;
}
}
break
;
...
...
src/tsdb/src/tsdbMemTable.c
浏览文件 @
eede5a77
...
...
@@ -786,9 +786,9 @@ static int tsdbCheckTableSchema(STsdbRepo *pRepo, SSubmitBlk *pBlock, STable *pT
if
(
tsdbGetTableSchemaImpl
(
pTable
,
false
,
false
,
pBlock
->
sversion
)
==
NULL
)
{
tsdbError
(
"vgId:%d invalid submit schema version %d to table %s tid %d from client"
,
REPO_ID
(
pRepo
),
pBlock
->
sversion
,
TABLE_CHAR_NAME
(
pTable
),
TABLE_TID
(
pTable
));
terrno
=
TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION
;
return
-
1
;
}
terrno
=
TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION
;
return
-
1
;
}
return
0
;
...
...
src/util/src/tconfig.c
浏览文件 @
eede5a77
...
...
@@ -19,9 +19,7 @@
#include "taoserror.h"
#include "tconfig.h"
#include "tglobal.h"
#include "tkey.h"
#include "tulog.h"
#include "tsocket.h"
#include "tsystem.h"
#include "tutil.h"
...
...
src/util/src/tref.c
浏览文件 @
eede5a77
...
...
@@ -329,7 +329,7 @@ void *taosIterateRef(int rsetId, int64_t rid) {
pNode
->
count
++
;
// acquire it
newP
=
pNode
->
p
;
taosUnlockList
(
pSet
->
lockedBy
+
hash
);
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is returned"
,
rsetId
,
newP
,
rid
);
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is returned"
,
rsetId
,
newP
,
rid
);
}
else
{
uTrace
(
"rsetId:%d the list is over"
,
rsetId
);
}
...
...
@@ -423,24 +423,25 @@ static int taosDecRefCount(int rsetId, int64_t rid, int remove) {
if
(
pNode
->
next
)
{
pNode
->
next
->
prev
=
pNode
->
prev
;
}
(
*
pSet
->
fp
)(
pNode
->
p
);
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is removed, count:%d, free mem: %p"
,
rsetId
,
pNode
->
p
,
rid
,
pSet
->
count
,
pNode
);
free
(
pNode
);
released
=
1
;
}
else
{
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is released, count:%d"
,
rsetId
,
pNode
->
p
,
rid
,
pNode
->
count
);
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is released"
,
rsetId
,
pNode
->
p
,
rid
);
}
}
else
{
uTrace
(
"rsetId:%d rid:%"
PRId64
" is not there, failed to release/remove"
,
rsetId
,
rid
);
uTrace
(
"rsetId:%d rid:%"
PRId64
" is not there, failed to release/remove"
,
rsetId
,
rid
);
terrno
=
TSDB_CODE_REF_NOT_EXIST
;
code
=
-
1
;
}
taosUnlockList
(
pSet
->
lockedBy
+
hash
);
if
(
released
)
taosDecRsetCount
(
pSet
);
if
(
released
)
{
uTrace
(
"rsetId:%d p:%p rid:%"
PRId64
" is removed, count:%d, free mem: %p"
,
rsetId
,
pNode
->
p
,
rid
,
pSet
->
count
,
pNode
);
(
*
pSet
->
fp
)(
pNode
->
p
);
free
(
pNode
);
taosDecRsetCount
(
pSet
);
}
return
code
;
}
...
...
src/vnode/src/vnodeRead.c
浏览文件 @
eede5a77
...
...
@@ -275,41 +275,40 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SVReadMsg *pRead) {
vDebug
(
"vgId:%d, QInfo:%p, dnode continues to exec query"
,
pVnode
->
vgId
,
*
qhandle
);
// In the retrieve blocking model, only 50% CPU will be used in query processing
if
(
tsHalfCoresForQuery
)
{
qTableQuery
(
*
qhandle
);
// do execute query
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
qhandle
,
false
);
}
else
{
bool
freehandle
=
false
;
bool
buildRes
=
qTableQuery
(
*
qhandle
);
// do execute query
#if _NON_BLOCKING_RETRIEVE
bool
freehandle
=
false
;
bool
buildRes
=
qTableQuery
(
*
qhandle
);
// do execute query
// build query rsp, the retrieve request has reached here already
if
(
buildRes
)
{
// update the connection info according to the retrieve connection
pRead
->
rpcHandle
=
qGetResultRetrieveMsg
(
*
qhandle
);
assert
(
pRead
->
rpcHandle
!=
NULL
);
vDebug
(
"vgId:%d, QInfo:%p, start to build retrieval rsp after query paused, %p"
,
pVnode
->
vgId
,
*
qhandle
,
pRead
->
rpcHandle
);
// build query rsp, the retrieve request has reached here already
if
(
buildRes
)
{
// update the connection info according to the retrieve connection
pRead
->
rpcHandle
=
qGetResultRetrieveMsg
(
*
qhandle
);
assert
(
pRead
->
rpcHandle
!=
NULL
);
// set the real rsp error code
pRead
->
code
=
vnodeDumpQueryResult
(
&
pRead
->
rspRet
,
pVnode
,
qhandle
,
&
freehandle
,
pRead
->
rpcHandle
);
vDebug
(
"vgId:%d, QInfo:%p, start to build retrieval rsp after query paused, %p"
,
pVnode
->
vgId
,
*
qhandle
,
pRead
->
rpcHandle
);
// NOTE: set return code to be TSDB_CODE_QRY_HAS_RSP to notify dnode to return msg to client
code
=
TSDB_CODE_QRY_HAS_RSP
;
}
else
{
void
*
h1
=
qGetResultRetrieveMsg
(
*
qhandle
);
assert
(
h1
==
NULL
);
// set the real rsp error code
pRead
->
code
=
vnodeDumpQueryResult
(
&
pRead
->
rspRet
,
pVnode
,
qhandle
,
&
freehandle
,
pRead
->
rpcHandle
);
freehandle
=
qQueryCompleted
(
*
qhandle
);
}
// NOTE: set return code to be TSDB_CODE_QRY_HAS_RSP to notify dnode to return msg to client
code
=
TSDB_CODE_QRY_HAS_RSP
;
}
else
{
void
*
h1
=
qGetResultRetrieveMsg
(
*
qhandle
);
assert
(
h1
==
NULL
);
freehandle
=
qQueryCompleted
(
*
qhandle
);
}
// NOTE: if the qhandle is not put into vread queue or query is completed, free the qhandle.
// If the building of result is not required, simply free it. Otherwise, mandatorily free the qhandle
if
(
freehandle
||
(
!
buildRes
))
{
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
qhandle
,
freehandle
);
// NOTE: if the qhandle is not put into vread queue or query is completed, free the qhandle.
// If the building of result is not required, simply free it. Otherwise, mandatorily free the qhandle
if
(
freehandle
||
(
!
buildRes
))
{
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
qhandle
,
freehandle
);
}
}
#else
qTableQuery
(
*
qhandle
);
// do execute query
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
qhandle
,
false
);
#endif
}
return
code
;
...
...
@@ -375,14 +374,16 @@ static int32_t vnodeProcessFetchMsg(SVnodeObj *pVnode, SVReadMsg *pRead) {
freeHandle
=
true
;
}
else
{
// result is not ready, return immediately
assert
(
buildRes
==
true
);
#if _NON_BLOCKING_RETRIEVE
if
(
!
buildRes
)
{
assert
(
pRead
->
rpcHandle
!=
NULL
);
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
handle
,
false
);
return
TSDB_CODE_QRY_NOT_READY
;
// Only effects in the non-blocking model
if
(
!
tsHalfCoresForQuery
)
{
if
(
!
buildRes
)
{
assert
(
pRead
->
rpcHandle
!=
NULL
);
qReleaseQInfo
(
pVnode
->
qMgmt
,
(
void
**
)
&
handle
,
false
);
return
TSDB_CODE_QRY_NOT_READY
;
}
}
#endif
// ahandle is the sqlObj pointer
code
=
vnodeDumpQueryResult
(
pRet
,
pVnode
,
handle
,
&
freeHandle
,
pRead
->
rpcHandle
);
...
...
tests/pytest/fulltest.sh
浏览文件 @
eede5a77
...
...
@@ -159,7 +159,8 @@ python3 ./test.py -f query/bug1471.py
python3 ./test.py
-f
query/bug1874.py
python3 ./test.py
-f
query/bug1875.py
python3 ./test.py
-f
query/bug1876.py
python3 ./test.py
-f
query/bug2218.py
python3 ./test.py
-f
query/bug2218.py
python3 ./test.py
-f
query/sliding.py
#stream
python3 ./test.py
-f
stream/metric_1.py
...
...
tests/pytest/query/queryInterval.py
浏览文件 @
eede5a77
...
...
@@ -16,6 +16,7 @@ import taos
from
util.log
import
tdLog
from
util.cases
import
tdCases
from
util.sql
import
tdSql
from
util.dnodes
import
tdDnodes
class
TDTestCase
:
...
...
@@ -72,6 +73,19 @@ class TDTestCase:
tdSql
.
checkData
(
6
,
0
,
"2020-09-16 00:00:00"
)
tdSql
.
checkData
(
6
,
1
,
222.0
)
# test case for https://jira.taosdata.com:18080/browse/TD-2298
tdSql
.
execute
(
"create database test keep 36500"
)
tdSql
.
execute
(
"use test"
)
tdSql
.
execute
(
"create table t (ts timestamp, voltage int)"
)
for
i
in
range
(
10000
):
tdSql
.
execute
(
"insert into t values(%d, 0)"
%
(
1000000
+
i
*
6000
))
tdDnodes
.
stop
(
1
)
tdDnodes
.
start
(
1
)
tdSql
.
query
(
"select last(*) from t interval(1s)"
)
tdSql
.
checkRows
(
10000
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录