Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
3d4a4888
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3d4a4888
编写于
10月 30, 2021
作者:
G
Ganlin Zhao
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into enhance/TD-10700
上级
3daf712e
c0c053e5
变更
45
展开全部
隐藏空白更改
内联
并排
Showing
45 changed file
with
1153 addition
and
296 deletion
+1153
-296
CMakeLists.txt
CMakeLists.txt
+1
-0
Jenkinsfile
Jenkinsfile
+30
-30
cmake/define.inc
cmake/define.inc
+4
-0
documentation20/cn/08.connector/01.java/docs.md
documentation20/cn/08.connector/01.java/docs.md
+0
-1
packaging/tools/post.sh
packaging/tools/post.sh
+0
-3
src/client/inc/tscParseLine.h
src/client/inc/tscParseLine.h
+1
-1
src/client/src/dataxJniConnection.c
src/client/src/dataxJniConnection.c
+1
-30
src/client/src/tscParseOpenTSDB.c
src/client/src/tscParseOpenTSDB.c
+3
-3
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+12
-14
src/common/inc/tdataformat.h
src/common/inc/tdataformat.h
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
+25
-25
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+1
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
+25
-32
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+1
-2
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
.../test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
+1
-2
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
.../jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
+95
-0
src/dnode/CMakeLists.txt
src/dnode/CMakeLists.txt
+4
-0
src/dnode/src/dnodeMain.c
src/dnode/src/dnodeMain.c
+2
-0
src/inc/taosdef.h
src/inc/taosdef.h
+1
-1
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+19
-13
src/mnode/src/mnodeDb.c
src/mnode/src/mnodeDb.c
+4
-1
src/mnode/src/mnodeFunc.c
src/mnode/src/mnodeFunc.c
+2
-0
src/mnode/src/mnodeMain.c
src/mnode/src/mnodeMain.c
+1
-1
src/mnode/src/mnodeWrite.c
src/mnode/src/mnodeWrite.c
+3
-1
src/os/src/darwin/dwSysInfo.c
src/os/src/darwin/dwSysInfo.c
+2
-0
src/os/src/detail/osSysinfo.c
src/os/src/detail/osSysinfo.c
+2
-0
src/os/src/detail/osTime.c
src/os/src/detail/osTime.c
+14
-3
src/os/src/windows/wSysinfo.c
src/os/src/windows/wSysinfo.c
+11
-0
src/plugins/blm3
src/plugins/blm3
+1
-1
src/query/inc/qSqlparser.h
src/query/inc/qSqlparser.h
+1
-1
src/query/inc/sql.y
src/query/inc/sql.y
+18
-19
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+22
-9
src/query/src/qFilter.c
src/query/src/qFilter.c
+29
-3
src/query/src/qSqlParser.c
src/query/src/qSqlParser.c
+2
-1
src/query/src/sql.c
src/query/src/sql.c
+744
-81
src/tsdb/src/tsdbMemTable.c
src/tsdb/src/tsdbMemTable.c
+1
-1
src/util/src/tcompare.c
src/util/src/tcompare.c
+7
-1
src/vnode/src/vnodeRead.c
src/vnode/src/vnodeRead.c
+6
-0
src/vnode/src/vnodeWrite.c
src/vnode/src/vnodeWrite.c
+1
-1
tests/pytest/dbmgmt/nanoSecondCheck.py
tests/pytest/dbmgmt/nanoSecondCheck.py
+2
-1
tests/pytest/functions/function_derivative.py
tests/pytest/functions/function_derivative.py
+3
-0
tests/pytest/query/queryRegex.py
tests/pytest/query/queryRegex.py
+32
-7
tests/script/general/compute/csum.sim
tests/script/general/compute/csum.sim
+12
-0
tests/script/general/parser/alter.sim
tests/script/general/parser/alter.sim
+3
-2
tests/script/general/parser/alter__for_community_version.sim
tests/script/general/parser/alter__for_community_version.sim
+3
-2
未找到文件。
CMakeLists.txt
浏览文件 @
3d4a4888
...
@@ -18,6 +18,7 @@ ENDIF ()
...
@@ -18,6 +18,7 @@ ENDIF ()
SET
(
TD_ACCOUNT FALSE
)
SET
(
TD_ACCOUNT FALSE
)
SET
(
TD_ADMIN FALSE
)
SET
(
TD_ADMIN FALSE
)
SET
(
TD_GRANT FALSE
)
SET
(
TD_GRANT FALSE
)
SET
(
TD_USB_DONGLE FALSE
)
SET
(
TD_MQTT FALSE
)
SET
(
TD_MQTT FALSE
)
SET
(
TD_TSDB_PLUGINS FALSE
)
SET
(
TD_TSDB_PLUGINS FALSE
)
SET
(
TD_STORAGE FALSE
)
SET
(
TD_STORAGE FALSE
)
...
...
Jenkinsfile
浏览文件 @
3d4a4888
...
@@ -179,9 +179,9 @@ def pre_test_win(){
...
@@ -179,9 +179,9 @@ def pre_test_win(){
git clean -dfx
git clean -dfx
mkdir debug
mkdir debug
cd debug
cd debug
call "C:\\Program Files (x86)\\Microsoft Visual Studio
14.0\\VC
\\vcvarsall.bat" amd64
call "C:\\Program Files (x86)\\Microsoft Visual Studio
\\2017\\Community\\VC\\Auxiliary\\Build
\\vcvarsall.bat" amd64
cmake ../ -G "NMake Makefiles"
cmake ../ -G "NMake Makefiles"
nmake || exit 8
set CL=/MP nmake
nmake || exit 8
nmake install || exit 8
nmake install || exit 8
xcopy /e/y/i/f C:\\workspace\\TDinternal\\debug\\build\\lib\\taos.dll C:\\Windows\\System32 || exit 8
xcopy /e/y/i/f C:\\workspace\\TDinternal\\debug\\build\\lib\\taos.dll C:\\Windows\\System32 || exit 8
cd C:\\workspace\\TDinternal\\community\\src\\connector\\python
cd C:\\workspace\\TDinternal\\community\\src\\connector\\python
...
@@ -470,35 +470,35 @@ pipeline {
...
@@ -470,35 +470,35 @@ pipeline {
}
}
}
}
//
stage('build'){
stage
(
'build'
){
//
agent{label " wintest "}
agent
{
label
" wintest "
}
//
steps {
steps
{
//
pre_test()
pre_test
()
//
script{
script
{
//
while(win_stop == 0){
while
(
win_stop
==
0
){
//
sleep(1)
sleep
(
1
)
//
}
}
//
}
}
//
}
}
//
}
}
//
stage('test'){
stage
(
'test'
){
//
agent{label "win"}
agent
{
label
"win"
}
//
steps{
steps
{
//
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
catchError
(
buildResult:
'FAILURE'
,
stageResult:
'FAILURE'
)
{
//
pre_test_win()
pre_test_win
()
//
timeout(time: 20, unit: 'MINUTES'){
timeout
(
time:
20
,
unit:
'MINUTES'
){
//
bat'''
bat
'''
//
cd C:\\workspace\\TDinternal\\community\\tests\\pytest
cd C:\\workspace\\TDinternal\\community\\tests\\pytest
// .\\test-all.bat W
intest
.\\test-all.bat w
intest
//
'''
'''
//
}
}
//
}
}
//
script{
script
{
//
win_stop=1
win_stop
=
1
//
}
}
//
}
}
//
}
}
}
}
...
...
cmake/define.inc
浏览文件 @
3d4a4888
...
@@ -13,6 +13,10 @@ IF (TD_GRANT)
...
@@ -13,6 +13,10 @@ IF (TD_GRANT)
ADD_DEFINITIONS
(
-
D_GRANT
)
ADD_DEFINITIONS
(
-
D_GRANT
)
ENDIF
()
ENDIF
()
IF
(
TD_USB_DONGLE
)
ADD_DEFINITIONS
(
-
D_USB_DONGLE
)
ENDIF
()
IF
(
TD_MQTT
)
IF
(
TD_MQTT
)
ADD_DEFINITIONS
(
-
D_MQTT
)
ADD_DEFINITIONS
(
-
D_MQTT
)
ENDIF
()
ENDIF
()
...
...
documentation20/cn/08.connector/01.java/docs.md
浏览文件 @
3d4a4888
...
@@ -334,7 +334,6 @@ JDBC连接器可能报错的错误码包括3种:JDBC driver本身的报错(
...
@@ -334,7 +334,6 @@ JDBC连接器可能报错的错误码包括3种:JDBC driver本身的报错(
从 2.1.2.0 版本开始,TDengine 的
**JDBC-JNI**
实现大幅改进了参数绑定方式对数据写入(INSERT)场景的支持。采用这种方式写入数据时,能避免 SQL 语法解析的资源消耗,从而在很多情况下显著提升写入性能。(注意:
**JDBC-RESTful**
实现并不提供参数绑定这种使用方式。)
从 2.1.2.0 版本开始,TDengine 的
**JDBC-JNI**
实现大幅改进了参数绑定方式对数据写入(INSERT)场景的支持。采用这种方式写入数据时,能避免 SQL 语法解析的资源消耗,从而在很多情况下显著提升写入性能。(注意:
**JDBC-RESTful**
实现并不提供参数绑定这种使用方式。)
```
java
```
java
Statement
stmt
=
conn
.
createStatement
();
Random
r
=
new
Random
();
Random
r
=
new
Random
();
// INSERT 语句中,VALUES 部分允许指定具体的数据列;如果采取自动建表,则 TAGS 部分需要设定全部 TAGS 列的参数值:
// INSERT 语句中,VALUES 部分允许指定具体的数据列;如果采取自动建表,则 TAGS 部分需要设定全部 TAGS 列的参数值:
...
...
packaging/tools/post.sh
浏览文件 @
3d4a4888
...
@@ -280,9 +280,6 @@ function install_blm3_config() {
...
@@ -280,9 +280,6 @@ function install_blm3_config() {
${
csudo
}
chmod
644
${
cfg_install_dir
}
/blm.toml
${
csudo
}
chmod
644
${
cfg_install_dir
}
/blm.toml
fi
fi
# restore the backup standard input, and turn off 6
exec
0<&6 6<&-
[
-f
${
cfg_dir
}
/blm.toml
]
&&
[
-f
${
cfg_dir
}
/blm.toml
]
&&
${
csudo
}
mv
${
cfg_dir
}
/blm.toml
${
cfg_dir
}
/blm.toml.org
${
csudo
}
mv
${
cfg_dir
}
/blm.toml
${
cfg_dir
}
/blm.toml.org
...
...
src/client/inc/tscParseLine.h
浏览文件 @
3d4a4888
...
@@ -64,7 +64,7 @@ typedef struct {
...
@@ -64,7 +64,7 @@ typedef struct {
SMLTimeStampType
tsType
;
SMLTimeStampType
tsType
;
SHashObj
*
smlDataToSchema
;
SHashObj
*
smlDataToSchema
;
int
64
_t
affectedRows
;
int
32
_t
affectedRows
;
}
SSmlLinesInfo
;
}
SSmlLinesInfo
;
void
addEscapeCharToString
(
char
*
str
,
int32_t
len
);
void
addEscapeCharToString
(
char
*
str
,
int32_t
len
);
...
...
src/client/src/dataxJniConnection.c
浏览文件 @
3d4a4888
...
@@ -6,35 +6,6 @@
...
@@ -6,35 +6,6 @@
#include "com_alibaba_datax_plugin_writer_JniConnection.h"
#include "com_alibaba_datax_plugin_writer_JniConnection.h"
#include "jniCommon.h"
#include "jniCommon.h"
jclass
g_arrayListClass
;
jmethodID
g_arrayListConstructFp
;
jmethodID
g_arrayListAddFp
;
jclass
g_metadataClass
;
jmethodID
g_metadataConstructFp
;
jfieldID
g_metadataColtypeField
;
jfieldID
g_metadataColnameField
;
jfieldID
g_metadataColsizeField
;
jfieldID
g_metadataColindexField
;
jclass
g_rowdataClass
;
jmethodID
g_rowdataConstructor
;
jmethodID
g_rowdataClearFp
;
jmethodID
g_rowdataSetBooleanFp
;
jmethodID
g_rowdataSetByteFp
;
jmethodID
g_rowdataSetShortFp
;
jmethodID
g_rowdataSetIntFp
;
jmethodID
g_rowdataSetLongFp
;
jmethodID
g_rowdataSetFloatFp
;
jmethodID
g_rowdataSetDoubleFp
;
jmethodID
g_rowdataSetStringFp
;
jmethodID
g_rowdataSetTimestampFp
;
jmethodID
g_rowdataSetByteArrayFp
;
jmethodID
g_blockdataSetByteArrayFp
;
jmethodID
g_blockdataSetNumOfRowsFp
;
jmethodID
g_blockdataSetNumOfColsFp
;
JNIEXPORT
void
JNICALL
Java_com_alibaba_datax_plugin_writer_JniConnection_initImp
(
JNIEnv
*
env
,
jobject
jobj
,
JNIEXPORT
void
JNICALL
Java_com_alibaba_datax_plugin_writer_JniConnection_initImp
(
JNIEnv
*
env
,
jobject
jobj
,
jstring
jconfigDir
)
{
jstring
jconfigDir
)
{
if
(
jconfigDir
!=
NULL
)
{
if
(
jconfigDir
!=
NULL
)
{
...
@@ -229,4 +200,4 @@ JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_inser
...
@@ -229,4 +200,4 @@ JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_inser
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
json
,
payload
);
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
json
,
payload
);
return
(
jlong
)
result
;
return
(
jlong
)
result
;
}
}
\ No newline at end of file
src/client/src/tscParseOpenTSDB.c
浏览文件 @
3d4a4888
...
@@ -509,7 +509,7 @@ static int32_t parseMetricFromJSON(cJSON *root, TAOS_SML_DATA_POINT* pSml, SSmlL
...
@@ -509,7 +509,7 @@ static int32_t parseMetricFromJSON(cJSON *root, TAOS_SML_DATA_POINT* pSml, SSmlL
tstrncpy
(
pSml
->
stableName
,
metric
->
valuestring
,
stableLen
+
1
);
tstrncpy
(
pSml
->
stableName
,
metric
->
valuestring
,
stableLen
+
1
);
strntolower_s
(
pSml
->
stableName
,
pSml
->
stableName
,
(
int32_t
)
stableLen
);
strntolower_s
(
pSml
->
stableName
,
pSml
->
stableName
,
(
int32_t
)
stableLen
);
addEscapeCharToString
(
pSml
->
stableName
,
stableLen
);
addEscapeCharToString
(
pSml
->
stableName
,
(
int32_t
)
stableLen
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -903,7 +903,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
...
@@ -903,7 +903,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
*
childTableName
=
tcalloc
(
idLen
+
TS_ESCAPE_CHAR_SIZE
+
1
,
sizeof
(
char
));
*
childTableName
=
tcalloc
(
idLen
+
TS_ESCAPE_CHAR_SIZE
+
1
,
sizeof
(
char
));
memcpy
(
*
childTableName
,
id
->
valuestring
,
idLen
);
memcpy
(
*
childTableName
,
id
->
valuestring
,
idLen
);
strntolower_s
(
*
childTableName
,
*
childTableName
,
(
int32_t
)
idLen
);
strntolower_s
(
*
childTableName
,
*
childTableName
,
(
int32_t
)
idLen
);
addEscapeCharToString
(
*
childTableName
,
idLen
);
addEscapeCharToString
(
*
childTableName
,
(
int32_t
)
idLen
);
//check duplicate IDs
//check duplicate IDs
cJSON_DeleteItemFromObject
(
tags
,
"ID"
);
cJSON_DeleteItemFromObject
(
tags
,
"ID"
);
...
@@ -940,7 +940,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
...
@@ -940,7 +940,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
pkv
->
key
=
tcalloc
(
keyLen
+
TS_ESCAPE_CHAR_SIZE
+
1
,
sizeof
(
char
));
pkv
->
key
=
tcalloc
(
keyLen
+
TS_ESCAPE_CHAR_SIZE
+
1
,
sizeof
(
char
));
strncpy
(
pkv
->
key
,
tag
->
string
,
keyLen
);
strncpy
(
pkv
->
key
,
tag
->
string
,
keyLen
);
strntolower_s
(
pkv
->
key
,
pkv
->
key
,
(
int32_t
)
keyLen
);
strntolower_s
(
pkv
->
key
,
pkv
->
key
,
(
int32_t
)
keyLen
);
addEscapeCharToString
(
pkv
->
key
,
keyLen
);
addEscapeCharToString
(
pkv
->
key
,
(
int32_t
)
keyLen
);
//value
//value
ret
=
parseValueFromJSON
(
tag
,
pkv
,
info
);
ret
=
parseValueFromJSON
(
tag
,
pkv
,
info
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
...
...
src/client/src/tscSQLParser.c
浏览文件 @
3d4a4888
...
@@ -4523,10 +4523,8 @@ static int32_t validateLikeExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_t
...
@@ -4523,10 +4523,8 @@ static int32_t validateLikeExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_t
// check for match expression
// check for match expression
static
int32_t
validateMatchExpr
(
tSqlExpr
*
pExpr
,
STableMeta
*
pTableMeta
,
int32_t
index
,
char
*
msgBuf
)
{
static
int32_t
validateMatchExpr
(
tSqlExpr
*
pExpr
,
STableMeta
*
pTableMeta
,
int32_t
index
,
char
*
msgBuf
)
{
const
char
*
msg1
=
"regular expression string should be less than %d characters"
;
const
char
*
msg1
=
"regular expression string should be less than %d characters"
;
const
char
*
msg2
=
"illegal column type for match/nmatch"
;
const
char
*
msg3
=
"invalid regular expression"
;
const
char
*
msg3
=
"invalid regular expression"
;
tSqlExpr
*
pLeft
=
pExpr
->
pLeft
;
tSqlExpr
*
pRight
=
pExpr
->
pRight
;
tSqlExpr
*
pRight
=
pExpr
->
pRight
;
if
(
pExpr
->
tokenId
==
TK_MATCH
||
pExpr
->
tokenId
==
TK_NMATCH
)
{
if
(
pExpr
->
tokenId
==
TK_MATCH
||
pExpr
->
tokenId
==
TK_NMATCH
)
{
...
@@ -4536,11 +4534,6 @@ static int32_t validateMatchExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_
...
@@ -4536,11 +4534,6 @@ static int32_t validateMatchExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_
return
invalidOperationMsg
(
msgBuf
,
tmp
);
return
invalidOperationMsg
(
msgBuf
,
tmp
);
}
}
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
if
((
!
isTablenameToken
(
&
pLeft
->
columnName
))
&&
(
pSchema
[
index
].
type
!=
TSDB_DATA_TYPE_BINARY
))
{
return
invalidOperationMsg
(
msgBuf
,
msg2
);
}
if
(
!
(
pRight
->
type
==
SQL_NODE_VALUE
&&
pRight
->
value
.
nType
==
TSDB_DATA_TYPE_BINARY
))
{
if
(
!
(
pRight
->
type
==
SQL_NODE_VALUE
&&
pRight
->
value
.
nType
==
TSDB_DATA_TYPE_BINARY
))
{
return
invalidOperationMsg
(
msgBuf
,
msg3
);
return
invalidOperationMsg
(
msgBuf
,
msg3
);
}
}
...
@@ -5790,7 +5783,7 @@ int32_t validateOrderbyNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSq
...
@@ -5790,7 +5783,7 @@ int32_t validateOrderbyNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSq
bool
udf
=
false
;
bool
udf
=
false
;
if
(
pQueryInfo
->
pUdfInfo
&&
taosArrayGetSize
(
pQueryInfo
->
pUdfInfo
)
>
0
)
{
if
(
pQueryInfo
->
pUdfInfo
&&
taosArrayGetSize
(
pQueryInfo
->
pUdfInfo
)
>
0
)
{
int32_t
usize
=
taosArrayGetSize
(
pQueryInfo
->
pUdfInfo
);
int32_t
usize
=
(
int32_t
)
taosArrayGetSize
(
pQueryInfo
->
pUdfInfo
);
for
(
int32_t
i
=
0
;
i
<
usize
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
usize
;
++
i
)
{
SUdfInfo
*
pUdfInfo
=
taosArrayGet
(
pQueryInfo
->
pUdfInfo
,
i
);
SUdfInfo
*
pUdfInfo
=
taosArrayGet
(
pQueryInfo
->
pUdfInfo
,
i
);
...
@@ -6805,16 +6798,21 @@ static int32_t setKeepOption(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDbInfo* p
...
@@ -6805,16 +6798,21 @@ static int32_t setKeepOption(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDbInfo* p
tVariantListItem
*
p1
=
(
s
>
1
)
?
taosArrayGet
(
pKeep
,
1
)
:
p0
;
tVariantListItem
*
p1
=
(
s
>
1
)
?
taosArrayGet
(
pKeep
,
1
)
:
p0
;
tVariantListItem
*
p2
=
(
s
>
2
)
?
taosArrayGet
(
pKeep
,
2
)
:
p1
;
tVariantListItem
*
p2
=
(
s
>
2
)
?
taosArrayGet
(
pKeep
,
2
)
:
p1
;
if
((
int32_t
)
p0
->
pVar
.
i64
<=
0
||
(
int32_t
)
p1
->
pVar
.
i64
<=
0
||
(
int32_t
)
p2
->
pVar
.
i64
<=
0
)
{
int32_t
daysToKeep0
=
(
int32_t
)
p0
->
pVar
.
i64
;
int32_t
daysToKeep1
=
(
int32_t
)(
int32_t
)
p1
->
pVar
.
i64
;
int32_t
daysToKeep2
=
(
int32_t
)
p2
->
pVar
.
i64
;
if
(
daysToKeep0
<=
0
||
daysToKeep1
<=
0
||
daysToKeep2
<=
0
||
daysToKeep0
>
TSDB_MAX_KEEP
||
daysToKeep1
>
TSDB_MAX_KEEP
||
daysToKeep2
>
TSDB_MAX_KEEP
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
}
if
(
!
(((
int32_t
)
p0
->
pVar
.
i64
<=
(
int32_t
)
p1
->
pVar
.
i64
)
&&
((
int32_t
)
p1
->
pVar
.
i64
<=
(
int32_t
)
p2
->
pVar
.
i64
)))
{
if
(
!
((
daysToKeep0
<=
daysToKeep1
)
&&
(
daysToKeep1
<=
daysToKeep2
)))
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
pMsg
->
daysToKeep0
=
htonl
(
(
int32_t
)
p0
->
pVar
.
i64
);
pMsg
->
daysToKeep0
=
htonl
(
daysToKeep0
);
pMsg
->
daysToKeep1
=
htonl
(
(
int32_t
)
p1
->
pVar
.
i64
);
pMsg
->
daysToKeep1
=
htonl
(
daysToKeep1
);
pMsg
->
daysToKeep2
=
htonl
(
(
int32_t
)
p2
->
pVar
.
i64
);
pMsg
->
daysToKeep2
=
htonl
(
daysToKeep2
);
}
}
...
@@ -8650,7 +8648,7 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
...
@@ -8650,7 +8648,7 @@ int32_t loadAllTableMeta(SSqlObj* pSql, struct SSqlInfo* pInfo) {
for
(
int32_t
j
=
0
;
j
<
usize
;
++
j
)
{
for
(
int32_t
j
=
0
;
j
<
usize
;
++
j
)
{
SUdfInfo
*
pUdfInfo
=
taosArrayGet
(
pQueryInfo
->
pUdfInfo
,
j
);
SUdfInfo
*
pUdfInfo
=
taosArrayGet
(
pQueryInfo
->
pUdfInfo
,
j
);
int32_t
len
=
strlen
(
pUdfInfo
->
name
);
int32_t
len
=
(
int32_t
)
strlen
(
pUdfInfo
->
name
);
if
(
len
==
t
->
n
&&
strncasecmp
(
info
.
name
,
pUdfInfo
->
name
,
t
->
n
)
==
0
)
{
if
(
len
==
t
->
n
&&
strncasecmp
(
info
.
name
,
pUdfInfo
->
name
,
t
->
n
)
==
0
)
{
exist
=
1
;
exist
=
1
;
break
;
break
;
...
...
src/common/inc/tdataformat.h
浏览文件 @
3d4a4888
...
@@ -139,7 +139,7 @@ typedef uint64_t TKEY;
...
@@ -139,7 +139,7 @@ typedef uint64_t TKEY;
#define tdGetTKEY(key) (((TKEY)ABS(key)) | (TKEY_NEGATIVE_FLAG & (TKEY)(key)))
#define tdGetTKEY(key) (((TKEY)ABS(key)) | (TKEY_NEGATIVE_FLAG & (TKEY)(key)))
#define tdGetKey(tkey) (((TSKEY)((tkey)&TKEY_VALUE_FILTER)) * (TKEY_IS_NEGATIVE(tkey) ? -1 : 1))
#define tdGetKey(tkey) (((TSKEY)((tkey)&TKEY_VALUE_FILTER)) * (TKEY_IS_NEGATIVE(tkey) ? -1 : 1))
#define MIN_TS_KEY ((TSKEY)0x
8
000000000000001)
#define MIN_TS_KEY ((TSKEY)0x
c
000000000000001)
#define MAX_TS_KEY ((TSKEY)0x3fffffffffffffff)
#define MAX_TS_KEY ((TSKEY)0x3fffffffffffffff)
#define TD_TO_TKEY(key) tdGetTKEY(((key) < MIN_TS_KEY) ? MIN_TS_KEY : (((key) > MAX_TS_KEY) ? MAX_TS_KEY : key))
#define TD_TO_TKEY(key) tdGetTKEY(((key) < MIN_TS_KEY) ? MIN_TS_KEY : (((key) > MAX_TS_KEY) ? MAX_TS_KEY : key))
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
浏览文件 @
3d4a4888
...
@@ -19,6 +19,7 @@ import com.google.common.primitives.Longs;
...
@@ -19,6 +19,7 @@ import com.google.common.primitives.Longs;
import
com.google.common.primitives.Shorts
;
import
com.google.common.primitives.Shorts
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.nio.charset.StandardCharsets
;
import
java.sql.*
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Calendar
;
...
@@ -256,7 +257,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
...
@@ -256,7 +257,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
{
public
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
{
checkAvailability
(
columnIndex
,
this
.
columnMetaDataList
.
size
());
checkAvailability
(
columnIndex
,
this
.
columnMetaDataList
.
size
());
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getString
(
columnIndex
).
getBytes
();
Object
value
=
this
.
rowData
.
getObject
(
columnIndex
);
Object
value
=
this
.
rowData
.
getObject
(
columnIndex
);
this
.
lastWasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
...
@@ -331,25 +336,26 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
...
@@ -331,25 +336,26 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
return
new
BigDecimal
(
this
.
blockData
.
getLong
(
columnIndex
-
1
));
return
new
BigDecimal
(
this
.
blockData
.
getLong
(
columnIndex
-
1
));
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
BigDecimal
res
=
null
;
if
(
lastWasNull
)
if
(!
lastWasNull
)
{
return
null
;
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
nativeType
)
{
BigDecimal
res
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
switch
(
nativeType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
res
=
new
BigDecimal
(
Long
.
parseLong
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
res
=
new
BigDecimal
(
Long
.
parseLong
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
break
;
res
=
BigDecimal
.
valueOf
(
Double
.
parseDouble
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
res
=
BigDecimal
.
valueOf
(
Double
.
parseDouble
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
getObject
(
columnIndex
)).
getTime
());
break
;
default
:
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
res
=
new
BigDecimal
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
());
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
getObject
(
columnIndex
)).
getTime
());
}
default
:
res
=
new
BigDecimal
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
());
}
}
return
res
;
return
res
;
}
}
...
@@ -465,12 +471,6 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
...
@@ -465,12 +471,6 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
boolean
isClosed
()
throws
SQLException
{
public
boolean
isClosed
()
throws
SQLException
{
return
isClosed
;
return
isClosed
;
// if (isClosed)
// return true;
// if (jniConnector != null) {
// isClosed = jniConnector.isResultsetClosed();
// }
// return isClosed;
}
}
public
String
getNString
(
int
columnIndex
)
throws
SQLException
{
public
String
getNString
(
int
columnIndex
)
throws
SQLException
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
浏览文件 @
3d4a4888
...
@@ -84,8 +84,7 @@ public class TSDBStatement extends AbstractStatement {
...
@@ -84,8 +84,7 @@ public class TSDBStatement extends AbstractStatement {
long
pSql
=
this
.
connection
.
getConnector
().
executeQuery
(
sql
);
long
pSql
=
this
.
connection
.
getConnector
().
executeQuery
(
sql
);
// if pSql is create/insert/update/delete/alter SQL
// if pSql is create/insert/update/delete/alter SQL
if
(
this
.
connection
.
getConnector
().
isUpdateQuery
(
pSql
))
{
if
(
this
.
connection
.
getConnector
().
isUpdateQuery
(
pSql
))
{
int
rows
=
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
affectedRows
=
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
affectedRows
=
rows
==
0
?
-
1
:
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
connection
.
getConnector
().
freeResultSet
(
pSql
);
this
.
connection
.
getConnector
().
freeResultSet
(
pSql
);
return
false
;
return
false
;
}
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
浏览文件 @
3d4a4888
...
@@ -255,6 +255,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -255,6 +255,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
byte
[])
if
(
value
instanceof
byte
[])
...
@@ -267,11 +268,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -267,11 +268,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
false
;
return
false
;
}
wasNull
=
false
;
if
(
value
instanceof
Boolean
)
if
(
value
instanceof
Boolean
)
return
(
boolean
)
value
;
return
(
boolean
)
value
;
return
Boolean
.
parseBoolean
(
value
.
toString
());
return
Boolean
.
parseBoolean
(
value
.
toString
());
...
@@ -282,11 +281,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -282,11 +281,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
0
;
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Byte
.
MIN_VALUE
)
if
(
valueAsLong
==
Byte
.
MIN_VALUE
)
return
0
;
return
0
;
...
@@ -306,11 +303,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -306,11 +303,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
0
;
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Short
.
MIN_VALUE
)
if
(
valueAsLong
==
Short
.
MIN_VALUE
)
return
0
;
return
0
;
...
@@ -324,11 +319,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -324,11 +319,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
0
;
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Integer
.
MIN_VALUE
)
if
(
valueAsLong
==
Integer
.
MIN_VALUE
)
return
0
;
return
0
;
...
@@ -342,15 +335,11 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -342,15 +335,11 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
0
;
return
0
;
}
if
(
value
instanceof
Timestamp
)
wasNull
=
false
;
if
(
value
instanceof
Timestamp
)
{
return
((
Timestamp
)
value
).
getTime
();
return
((
Timestamp
)
value
).
getTime
();
}
long
valueAsLong
=
0
;
long
valueAsLong
=
0
;
try
{
try
{
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
...
@@ -367,11 +356,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -367,11 +356,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
value
==
null
;
wasNull
=
true
;
if
(
value
==
null
)
return
0
;
return
0
;
}
wasNull
=
false
;
if
(
value
instanceof
Float
)
if
(
value
instanceof
Float
)
return
(
float
)
value
;
return
(
float
)
value
;
if
(
value
instanceof
Double
)
if
(
value
instanceof
Double
)
...
@@ -384,11 +371,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -384,11 +371,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
{
if
(
value
==
null
)
{
wasNull
=
true
;
return
0
;
return
0
;
}
}
wasNull
=
false
;
if
(
value
instanceof
Double
||
value
instanceof
Float
)
if
(
value
instanceof
Double
||
value
instanceof
Float
)
return
(
double
)
value
;
return
(
double
)
value
;
return
Double
.
parseDouble
(
value
.
toString
());
return
Double
.
parseDouble
(
value
.
toString
());
...
@@ -399,6 +385,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -399,6 +385,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
byte
[])
if
(
value
instanceof
byte
[])
...
@@ -425,6 +412,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -425,6 +412,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
Timestamp
)
if
(
value
instanceof
Timestamp
)
...
@@ -437,6 +425,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -437,6 +425,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
Timestamp
)
if
(
value
instanceof
Timestamp
)
...
@@ -454,6 +443,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -454,6 +443,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
Timestamp
)
if
(
value
instanceof
Timestamp
)
...
@@ -470,6 +460,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -470,6 +460,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
ret
=
Utils
.
parseTimestamp
(
value
.
toString
());
ret
=
Utils
.
parseTimestamp
(
value
.
toString
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
ret
=
null
;
ret
=
null
;
wasNull
=
true
;
}
}
return
ret
;
return
ret
;
}
}
...
@@ -485,7 +476,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -485,7 +476,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
public
Object
getObject
(
int
columnIndex
)
throws
SQLException
{
public
Object
getObject
(
int
columnIndex
)
throws
SQLException
{
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
return
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
return
value
;
}
}
@Override
@Override
...
@@ -504,9 +497,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -504,9 +497,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
if
(
value
==
null
)
return
null
;
return
null
;
if
(
value
instanceof
Long
||
value
instanceof
Integer
||
value
instanceof
Short
||
value
instanceof
Byte
)
if
(
value
instanceof
Long
||
value
instanceof
Integer
||
value
instanceof
Short
||
value
instanceof
Byte
)
return
new
BigDecimal
(
Long
.
parseLong
(
value
.
toString
()));
return
new
BigDecimal
(
Long
.
parseLong
(
value
.
toString
()));
if
(
value
instanceof
Double
||
value
instanceof
Float
)
if
(
value
instanceof
Double
||
value
instanceof
Float
)
...
@@ -663,4 +656,4 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
...
@@ -663,4 +656,4 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
return
isClosed
;
return
isClosed
;
}
}
}
}
\ No newline at end of file
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
3d4a4888
...
@@ -140,8 +140,7 @@ public class RestfulStatement extends AbstractStatement {
...
@@ -140,8 +140,7 @@ public class RestfulStatement extends AbstractStatement {
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
JSONArray
data
=
jsonObject
.
getJSONArray
(
"data"
);
JSONArray
data
=
jsonObject
.
getJSONArray
(
"data"
);
if
(
data
!=
null
)
{
if
(
data
!=
null
)
{
int
rows
=
data
.
getJSONArray
(
0
).
getInteger
(
0
);
return
data
.
getJSONArray
(
0
).
getInteger
(
0
);
return
rows
==
0
?
-
1
:
data
.
getJSONArray
(
0
).
getInteger
(
0
);
}
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
浏览文件 @
3d4a4888
...
@@ -660,7 +660,6 @@ public class RestfulResultSetTest {
...
@@ -660,7 +660,6 @@ public class RestfulResultSetTest {
@BeforeClass
@BeforeClass
public
static
void
beforeClass
()
{
public
static
void
beforeClass
()
{
try
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.rs.RestfulDriver"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/restful_test?user=root&password=taosdata"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/restful_test?user=root&password=taosdata"
);
stmt
=
conn
.
createStatement
();
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"create database if not exists restful_test"
);
stmt
.
execute
(
"create database if not exists restful_test"
);
...
@@ -670,7 +669,7 @@ public class RestfulResultSetTest {
...
@@ -670,7 +669,7 @@ public class RestfulResultSetTest {
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')"
);
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')"
);
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
rs
.
next
();
rs
.
next
();
}
catch
(
ClassNotFoundException
|
SQLException
e
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
0 → 100644
浏览文件 @
3d4a4888
package
com.taosdata.jdbc.rs
;
import
org.junit.*
;
import
java.sql.*
;
public
class
WasNullTest
{
// private static final String host = "127.0.0.1";
private
static
final
String
host
=
"master"
;
private
Connection
conn
;
@Test
public
void
testGetTimestamp
()
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop table if exists weather"
);
stmt
.
execute
(
"create table if not exists weather(f1 timestamp, f2 timestamp, f3 int)"
);
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', NULL, 100)"
);
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
if
(
i
==
2
)
{
Object
value
=
rs
.
getTimestamp
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
Assert
.
assertNull
(
value
);
Assert
.
assertTrue
(
wasNull
);
}
else
{
Object
value
=
rs
.
getObject
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
Assert
.
assertNotNull
(
value
);
Assert
.
assertFalse
(
wasNull
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@Test
public
void
testGetObject
()
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop table if exists weather"
);
stmt
.
execute
(
"create table if not exists weather(f1 timestamp, f2 int, f3 bigint, f4 float, f5 double, f6 binary(64), f7 smallint, f8 tinyint, f9 bool, f10 nchar(64))"
);
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, NULL, 10, 10, true, '涛思数据')"
);
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
Object
value
=
rs
.
getObject
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
if
(
i
==
6
)
{
Assert
.
assertNull
(
value
);
Assert
.
assertTrue
(
wasNull
);
}
else
{
Assert
.
assertNotNull
(
value
);
Assert
.
assertFalse
(
wasNull
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@Before
public
void
before
()
{
try
{
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/restful_test?user=root&password=taosdata"
);
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop database if exists restful_test"
);
stmt
.
execute
(
"create database if not exists restful_test"
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@After
public
void
after
()
{
try
{
Statement
statement
=
conn
.
createStatement
();
statement
.
execute
(
"drop database if exists restful_test"
);
if
(
conn
!=
null
)
conn
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/dnode/CMakeLists.txt
浏览文件 @
3d4a4888
...
@@ -39,6 +39,10 @@ IF (TD_GRANT)
...
@@ -39,6 +39,10 @@ IF (TD_GRANT)
TARGET_LINK_LIBRARIES
(
taosd grant
)
TARGET_LINK_LIBRARIES
(
taosd grant
)
ENDIF
()
ENDIF
()
IF
(
TD_USB_DONGLE
)
TARGET_LINK_LIBRARIES
(
taosd usb_dongle
)
ENDIF
()
IF
(
TD_MQTT
)
IF
(
TD_MQTT
)
TARGET_LINK_LIBRARIES
(
taosd mqtt
)
TARGET_LINK_LIBRARIES
(
taosd mqtt
)
ENDIF
()
ENDIF
()
...
...
src/dnode/src/dnodeMain.c
浏览文件 @
3d4a4888
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include "twal.h"
#include "twal.h"
#include "tfs.h"
#include "tfs.h"
#include "tsync.h"
#include "tsync.h"
#include "tgrant.h"
#include "dnodeStep.h"
#include "dnodeStep.h"
#include "dnodePeer.h"
#include "dnodePeer.h"
#include "dnodeModule.h"
#include "dnodeModule.h"
...
@@ -88,6 +89,7 @@ static SStep tsDnodeSteps[] = {
...
@@ -88,6 +89,7 @@ static SStep tsDnodeSteps[] = {
{
"dnode-statustmr"
,
dnodeInitStatusTimer
,
dnodeCleanupStatusTimer
},
{
"dnode-statustmr"
,
dnodeInitStatusTimer
,
dnodeCleanupStatusTimer
},
{
"dnode-telemetry"
,
dnodeInitTelemetry
,
dnodeCleanupTelemetry
},
{
"dnode-telemetry"
,
dnodeInitTelemetry
,
dnodeCleanupTelemetry
},
{
"dnode-script"
,
scriptEnvPoolInit
,
scriptEnvPoolCleanup
},
{
"dnode-script"
,
scriptEnvPoolInit
,
scriptEnvPoolCleanup
},
{
"dnode-grant"
,
grantInit
,
grantCleanUp
},
};
};
static
SStep
tsDnodeCompactSteps
[]
=
{
static
SStep
tsDnodeCompactSteps
[]
=
{
...
...
src/inc/taosdef.h
浏览文件 @
3d4a4888
...
@@ -295,7 +295,7 @@ do { \
...
@@ -295,7 +295,7 @@ do { \
#define TSDB_DEFAULT_DAYS_PER_FILE 10
#define TSDB_DEFAULT_DAYS_PER_FILE 10
#define TSDB_MIN_KEEP 1 // data in db to be reserved.
#define TSDB_MIN_KEEP 1 // data in db to be reserved.
#define TSDB_MAX_KEEP 36500
0
// data in db to be reserved.
#define TSDB_MAX_KEEP 36500 // data in db to be reserved.
#define TSDB_DEFAULT_KEEP 3650 // ten years
#define TSDB_DEFAULT_KEEP 3650 // ten years
#define TSDB_DEFAULT_MIN_ROW_FBLOCK 100
#define TSDB_DEFAULT_MIN_ROW_FBLOCK 100
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
3d4a4888
...
@@ -3554,7 +3554,7 @@ static int postProceSql(char *host, uint16_t port,
...
@@ -3554,7 +3554,7 @@ static int postProceSql(char *host, uint16_t port,
do
{
do
{
#ifdef WINDOWS
#ifdef WINDOWS
bytes
=
recv
(
pThreadInfo
->
sockfd
s
,
response_buf
+
received
,
resp_len
-
received
,
0
);
bytes
=
recv
(
pThreadInfo
->
sockfd
,
response_buf
+
received
,
resp_len
-
received
,
0
);
#else
#else
bytes
=
read
(
pThreadInfo
->
sockfd
,
response_buf
+
received
,
resp_len
-
received
);
bytes
=
read
(
pThreadInfo
->
sockfd
,
response_buf
+
received
,
resp_len
-
received
);
#endif
#endif
...
@@ -9868,14 +9868,16 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
...
@@ -9868,14 +9868,16 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
batchPerTblTimes
=
1
;
batchPerTblTimes
=
1
;
}
}
char
*
smlHead
[
pThreadInfo
->
ntables
];
char
**
smlHeadList
=
calloc
(
pThreadInfo
->
ntables
,
sizeof
(
char
*
));
assert
(
smlHeadList
);
for
(
int
t
=
0
;
t
<
pThreadInfo
->
ntables
;
t
++
)
{
for
(
int
t
=
0
;
t
<
pThreadInfo
->
ntables
;
t
++
)
{
smlHead
[
t
]
=
(
char
*
)
calloc
(
HEAD_BUFF_LEN
,
1
);
char
*
smlHead
=
*
((
char
**
)
smlHeadList
+
t
*
sizeof
(
char
*
));
if
(
NULL
==
smlHead
[
t
])
{
smlHead
=
(
char
*
)
calloc
(
HEAD_BUFF_LEN
,
1
);
if
(
NULL
==
smlHead
)
{
errorPrint2
(
"calloc failed! size:%d
\n
"
,
HEAD_BUFF_LEN
);
errorPrint2
(
"calloc failed! size:%d
\n
"
,
HEAD_BUFF_LEN
);
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
generateSmlHead
(
smlHead
[
t
]
,
stbInfo
,
pThreadInfo
,
t
);
generateSmlHead
(
smlHead
,
stbInfo
,
pThreadInfo
,
t
);
}
}
...
@@ -9925,7 +9927,7 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
...
@@ -9925,7 +9927,7 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
errorPrint2
(
"Failed to alloc %d bytes, reason:%s
\n
"
,
errorPrint2
(
"Failed to alloc %d bytes, reason:%s
\n
"
,
BUFFER_SIZE
,
strerror
(
errno
));
BUFFER_SIZE
,
strerror
(
errno
));
}
}
generateSmlTail
(
pThreadInfo
->
lines
[
j
],
smlHead
[
i
]
,
stbInfo
,
pThreadInfo
,
timestamp
);
generateSmlTail
(
pThreadInfo
->
lines
[
j
],
*
((
char
**
)
smlHeadList
+
i
*
sizeof
(
char
*
))
,
stbInfo
,
pThreadInfo
,
timestamp
);
timestamp
+=
timeStampStep
;
timestamp
+=
timeStampStep
;
}
}
tableSeq
++
;
tableSeq
++
;
...
@@ -10044,8 +10046,9 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
...
@@ -10044,8 +10046,9 @@ static void* syncWriteInterlaceSml(threadInfo *pThreadInfo, uint32_t interlaceRo
free_of_interlace:
free_of_interlace:
tmfree
(
pThreadInfo
->
lines
);
tmfree
(
pThreadInfo
->
lines
);
for
(
int
index
=
0
;
index
<
pThreadInfo
->
ntables
;
index
++
)
{
for
(
int
index
=
0
;
index
<
pThreadInfo
->
ntables
;
index
++
)
{
free
(
smlHead
[
index
]
);
tmfree
(
*
(
smlHeadList
+
index
*
(
sizeof
(
char
*
)))
);
}
}
tmfree
(
smlHeadList
);
printStatPerThread
(
pThreadInfo
);
printStatPerThread
(
pThreadInfo
);
return
NULL
;
return
NULL
;
}
}
...
@@ -10469,14 +10472,16 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
...
@@ -10469,14 +10472,16 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
pThreadInfo
->
samplePos
=
0
;
pThreadInfo
->
samplePos
=
0
;
char
*
smlHead
[
pThreadInfo
->
ntables
];
char
*
smlHeadList
=
calloc
(
pThreadInfo
->
ntables
,
sizeof
(
char
*
));
assert
(
smlHeadList
);
for
(
int
t
=
0
;
t
<
pThreadInfo
->
ntables
;
t
++
)
{
for
(
int
t
=
0
;
t
<
pThreadInfo
->
ntables
;
t
++
)
{
smlHead
[
t
]
=
(
char
*
)
calloc
(
HEAD_BUFF_LEN
,
1
);
char
*
smlHead
=
*
((
char
**
)
smlHeadList
+
t
*
sizeof
(
char
*
));
if
(
NULL
==
smlHead
[
t
])
{
smlHead
=
(
char
*
)
calloc
(
HEAD_BUFF_LEN
,
1
);
if
(
NULL
==
smlHead
)
{
errorPrint2
(
"calloc failed! size:%d
\n
"
,
HEAD_BUFF_LEN
);
errorPrint2
(
"calloc failed! size:%d
\n
"
,
HEAD_BUFF_LEN
);
exit
(
EXIT_FAILURE
);
exit
(
EXIT_FAILURE
);
}
}
generateSmlHead
(
smlHead
[
t
]
,
stbInfo
,
pThreadInfo
,
t
);
generateSmlHead
(
smlHead
,
stbInfo
,
pThreadInfo
,
t
);
}
}
int
currentPercent
=
0
;
int
currentPercent
=
0
;
...
@@ -10503,7 +10508,7 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
...
@@ -10503,7 +10508,7 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
errorPrint2
(
"Failed to alloc %d bytes, reason:%s
\n
"
,
errorPrint2
(
"Failed to alloc %d bytes, reason:%s
\n
"
,
BUFFER_SIZE
,
strerror
(
errno
));
BUFFER_SIZE
,
strerror
(
errno
));
}
}
generateSmlTail
(
pThreadInfo
->
lines
[
k
],
smlHead
[
i
]
,
stbInfo
,
pThreadInfo
,
timestamp
);
generateSmlTail
(
pThreadInfo
->
lines
[
k
],
*
((
char
**
)
smlHeadList
+
i
*
sizeof
(
char
*
))
,
stbInfo
,
pThreadInfo
,
timestamp
);
timestamp
+=
timeStampStep
;
timestamp
+=
timeStampStep
;
j
++
;
j
++
;
if
(
j
==
insertRows
)
{
if
(
j
==
insertRows
)
{
...
@@ -10559,8 +10564,9 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
...
@@ -10559,8 +10564,9 @@ static void* syncWriteProgressiveSml(threadInfo *pThreadInfo) {
}
}
tmfree
(
pThreadInfo
->
lines
);
tmfree
(
pThreadInfo
->
lines
);
for
(
int
index
=
0
;
index
<
pThreadInfo
->
ntables
;
index
++
)
{
for
(
int
index
=
0
;
index
<
pThreadInfo
->
ntables
;
index
++
)
{
free
(
smlHead
[
index
]
);
free
(
*
((
char
**
)
smlHeadList
+
index
*
sizeof
(
char
*
))
);
}
}
tmfree
(
smlHeadList
);
return
NULL
;
return
NULL
;
}
}
...
...
src/mnode/src/mnodeDb.c
浏览文件 @
3d4a4888
...
@@ -927,9 +927,12 @@ static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg) {
...
@@ -927,9 +927,12 @@ static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg) {
pCreate
->
maxRowsPerFileBlock
=
htonl
(
pCreate
->
maxRowsPerFileBlock
);
pCreate
->
maxRowsPerFileBlock
=
htonl
(
pCreate
->
maxRowsPerFileBlock
);
int32_t
code
;
int32_t
code
;
#ifdef GRANT_CHECK_WRITE
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
code
=
TSDB_CODE_GRANT_EXPIRED
;
code
=
TSDB_CODE_GRANT_EXPIRED
;
}
else
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
}
// else
#endif
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
code
=
TSDB_CODE_MND_NO_RIGHTS
;
code
=
TSDB_CODE_MND_NO_RIGHTS
;
}
else
{
}
else
{
code
=
mnodeCreateDb
(
pMsg
->
pUser
->
pAcct
,
pCreate
,
pMsg
);
code
=
mnodeCreateDb
(
pMsg
->
pUser
->
pAcct
,
pCreate
,
pMsg
);
...
...
src/mnode/src/mnodeFunc.c
浏览文件 @
3d4a4888
...
@@ -191,9 +191,11 @@ static int32_t mnodeUpdateFunc(SFuncObj *pFunc, void *pMsg) {
...
@@ -191,9 +191,11 @@ static int32_t mnodeUpdateFunc(SFuncObj *pFunc, void *pMsg) {
}
}
*/
*/
int32_t
mnodeCreateFunc
(
SAcctObj
*
pAcct
,
char
*
name
,
int32_t
codeLen
,
char
*
codeScript
,
char
*
path
,
uint8_t
outputType
,
int16_t
outputLen
,
int32_t
funcType
,
int32_t
bufSize
,
SMnodeMsg
*
pMsg
)
{
int32_t
mnodeCreateFunc
(
SAcctObj
*
pAcct
,
char
*
name
,
int32_t
codeLen
,
char
*
codeScript
,
char
*
path
,
uint8_t
outputType
,
int16_t
outputLen
,
int32_t
funcType
,
int32_t
bufSize
,
SMnodeMsg
*
pMsg
)
{
#ifdef GRANT_CHECK_WRITE
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_GRANT_EXPIRED
;
return
TSDB_CODE_GRANT_EXPIRED
;
}
}
#endif
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
return
TSDB_CODE_MND_NO_RIGHTS
;
return
TSDB_CODE_MND_NO_RIGHTS
;
...
...
src/mnode/src/mnodeMain.c
浏览文件 @
3d4a4888
...
@@ -55,7 +55,7 @@ static SStep tsMnodeSteps[] = {
...
@@ -55,7 +55,7 @@ static SStep tsMnodeSteps[] = {
{
"mnodes"
,
mnodeInitMnodes
,
mnodeCleanupMnodes
},
{
"mnodes"
,
mnodeInitMnodes
,
mnodeCleanupMnodes
},
{
"sdb"
,
sdbInit
,
sdbCleanUp
},
{
"sdb"
,
sdbInit
,
sdbCleanUp
},
{
"balance"
,
bnInit
,
bnCleanUp
},
{
"balance"
,
bnInit
,
bnCleanUp
},
{
"grant"
,
grantInit
,
grantCleanUp
},
//
{"grant", grantInit, grantCleanUp},
{
"show"
,
mnodeInitShow
,
mnodeCleanUpShow
}
{
"show"
,
mnodeInitShow
,
mnodeCleanUpShow
}
};
};
...
...
src/mnode/src/mnodeWrite.c
浏览文件 @
3d4a4888
...
@@ -65,14 +65,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
...
@@ -65,14 +65,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_MSG_NOT_PROCESSED
;
return
TSDB_CODE_MND_MSG_NOT_PROCESSED
;
}
}
#ifdef GRANT_CHECK_WRITE
int32_t
code
=
grantCheck
(
TSDB_GRANT_TIME
);
int32_t
code
=
grantCheck
(
TSDB_GRANT_TIME
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
tstrerror
(
code
));
tstrerror
(
code
));
return
code
;
return
code
;
}
}
#endif
code
=
mnodeInitMsg
(
pMsg
);
int32_t
code
=
mnodeInitMsg
(
pMsg
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
tstrerror
(
code
));
tstrerror
(
code
));
...
...
src/os/src/darwin/dwSysInfo.c
浏览文件 @
3d4a4888
...
@@ -65,6 +65,8 @@ static void taosGetSystemTimezone() {
...
@@ -65,6 +65,8 @@ static void taosGetSystemTimezone() {
struct
tm
tm1
;
struct
tm
tm1
;
localtime_r
(
&
tx1
,
&
tm1
);
localtime_r
(
&
tx1
,
&
tm1
);
tsDaylight
=
daylight
;
/*
/*
* format example:
* format example:
*
*
...
...
src/os/src/detail/osSysinfo.c
浏览文件 @
3d4a4888
...
@@ -213,6 +213,8 @@ static void taosGetSystemTimezone() {
...
@@ -213,6 +213,8 @@ static void taosGetSystemTimezone() {
int32_t
tz
=
(
-
timezone
*
MILLISECOND_PER_SECOND
)
/
MILLISECOND_PER_HOUR
;
int32_t
tz
=
(
-
timezone
*
MILLISECOND_PER_SECOND
)
/
MILLISECOND_PER_HOUR
;
tz
+=
daylight
;
tz
+=
daylight
;
tsDaylight
=
daylight
;
/*
/*
* format example:
* format example:
*
*
...
...
src/os/src/detail/osTime.c
浏览文件 @
3d4a4888
...
@@ -380,15 +380,20 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
...
@@ -380,15 +380,20 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
assert
(
toPrecision
==
TSDB_TIME_PRECISION_MILLI
||
assert
(
toPrecision
==
TSDB_TIME_PRECISION_MILLI
||
toPrecision
==
TSDB_TIME_PRECISION_MICRO
||
toPrecision
==
TSDB_TIME_PRECISION_MICRO
||
toPrecision
==
TSDB_TIME_PRECISION_NANO
);
toPrecision
==
TSDB_TIME_PRECISION_NANO
);
double
tempResult
=
(
double
)
time
;
switch
(
fromPrecision
)
{
switch
(
fromPrecision
)
{
case
TSDB_TIME_PRECISION_MILLI
:
{
case
TSDB_TIME_PRECISION_MILLI
:
{
switch
(
toPrecision
)
{
switch
(
toPrecision
)
{
case
TSDB_TIME_PRECISION_MILLI
:
case
TSDB_TIME_PRECISION_MILLI
:
return
time
;
return
time
;
case
TSDB_TIME_PRECISION_MICRO
:
case
TSDB_TIME_PRECISION_MICRO
:
return
time
*
1000
;
tempResult
*=
1000
;
time
*=
1000
;
goto
end_
;
case
TSDB_TIME_PRECISION_NANO
:
case
TSDB_TIME_PRECISION_NANO
:
return
time
*
1000000
;
tempResult
*=
1000000
;
time
*=
1000000
;
goto
end_
;
}
}
}
// end from milli
}
// end from milli
case
TSDB_TIME_PRECISION_MICRO
:
{
case
TSDB_TIME_PRECISION_MICRO
:
{
...
@@ -398,7 +403,9 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
...
@@ -398,7 +403,9 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
case
TSDB_TIME_PRECISION_MICRO
:
case
TSDB_TIME_PRECISION_MICRO
:
return
time
;
return
time
;
case
TSDB_TIME_PRECISION_NANO
:
case
TSDB_TIME_PRECISION_NANO
:
return
time
*
1000
;
tempResult
*=
1000
;
time
*=
1000
;
goto
end_
;
}
}
}
//end from micro
}
//end from micro
case
TSDB_TIME_PRECISION_NANO
:
{
case
TSDB_TIME_PRECISION_NANO
:
{
...
@@ -416,6 +423,10 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
...
@@ -416,6 +423,10 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
return
time
;
// only to pass windows compilation
return
time
;
// only to pass windows compilation
}
}
}
//end switch fromPrecision
}
//end switch fromPrecision
end_:
if
(
tempResult
>
(
double
)
INT64_MAX
)
return
INT64_MAX
;
if
(
tempResult
<
(
double
)
INT64_MIN
)
return
INT64_MIN
+
1
;
// INT64_MIN means NULL
return
time
;
}
}
static
int32_t
getDuration
(
int64_t
val
,
char
unit
,
int64_t
*
result
,
int32_t
timePrecision
)
{
static
int32_t
getDuration
(
int64_t
val
,
char
unit
,
int64_t
*
result
,
int32_t
timePrecision
)
{
...
...
src/os/src/windows/wSysinfo.c
浏览文件 @
3d4a4888
...
@@ -91,6 +91,17 @@ static void taosGetSystemTimezone() {
...
@@ -91,6 +91,17 @@ static void taosGetSystemTimezone() {
strcpy
(
tsTimezone
,
tz
);
strcpy
(
tsTimezone
,
tz
);
}
}
cfg_timezone
->
cfgStatus
=
TAOS_CFG_CSTATUS_DEFAULT
;
cfg_timezone
->
cfgStatus
=
TAOS_CFG_CSTATUS_DEFAULT
;
#ifdef _MSC_VER
#if _MSC_VER >= 1900
int64_t
timezone
=
_timezone
;
int32_t
daylight
=
_daylight
;
char
**
tzname
=
_tzname
;
#endif
#endif
tsDaylight
=
daylight
;
uInfo
(
"timezone not configured, use default"
);
uInfo
(
"timezone not configured, use default"
);
}
}
}
}
...
...
blm3
@
ba539ce6
比较
f56aa0f4
...
ba539ce6
Subproject commit
f56aa0f485d7bb6aebbcefc2007eeecdccb767c8
Subproject commit
ba539ce69dc4fe53536e9b0517fe75917dce5c46
src/query/inc/qSqlparser.h
浏览文件 @
3d4a4888
...
@@ -281,7 +281,7 @@ void *destroyRelationInfo(SRelationInfo* pFromInfo);
...
@@ -281,7 +281,7 @@ void *destroyRelationInfo(SRelationInfo* pFromInfo);
SRelationInfo
*
addSubqueryElem
(
SRelationInfo
*
pRelationInfo
,
SArray
*
pSub
,
SStrToken
*
pAlias
);
SRelationInfo
*
addSubqueryElem
(
SRelationInfo
*
pRelationInfo
,
SArray
*
pSub
,
SStrToken
*
pAlias
);
// sql expr leaf node
// sql expr leaf node
tSqlExpr
*
tSqlExprCreateIdValue
(
SStrToken
*
pToken
,
int32_t
optrType
);
tSqlExpr
*
tSqlExprCreateIdValue
(
SS
qlInfo
*
pInfo
,
SS
trToken
*
pToken
,
int32_t
optrType
);
tSqlExpr
*
tSqlExprCreateFunction
(
SArray
*
pParam
,
SStrToken
*
pFuncToken
,
SStrToken
*
endToken
,
int32_t
optType
);
tSqlExpr
*
tSqlExprCreateFunction
(
SArray
*
pParam
,
SStrToken
*
pFuncToken
,
SStrToken
*
endToken
,
int32_t
optType
);
SArray
*
tStrTokenAppend
(
SArray
*
pList
,
SStrToken
*
pToken
);
SArray
*
tStrTokenAppend
(
SArray
*
pList
,
SStrToken
*
pToken
);
...
...
src/query/inc/sql.y
浏览文件 @
3d4a4888
...
@@ -90,7 +90,6 @@ dbPrefix(A) ::= ids(X) DOT. {A = X; }
...
@@ -90,7 +90,6 @@ dbPrefix(A) ::= ids(X) DOT. {A = X; }
%type cpxName {SStrToken}
%type cpxName {SStrToken}
cpxName(A) ::= . {A.n = 0; }
cpxName(A) ::= . {A.n = 0; }
cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
X.n += Y.n;
X.n += Y.n;
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
...
@@ -520,7 +519,7 @@ selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y). {
...
@@ -520,7 +519,7 @@ selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y). {
}
}
selcollist(A) ::= sclp(P) STAR. {
selcollist(A) ::= sclp(P) STAR. {
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
tSqlExpr *pNode = tSqlExprCreateIdValue(
pInfo,
NULL, TK_ALL);
A = tSqlExprListAppend(P, pNode, 0, 0);
A = tSqlExprListAppend(P, pNode, 0, 0);
}
}
...
@@ -701,23 +700,23 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
...
@@ -701,23 +700,23 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
expr(A) ::= LP(X) expr(Y) RP(Z). {A = Y; A->exprToken.z = X.z; A->exprToken.n = (Z.z - X.z + 1);}
expr(A) ::= LP(X) expr(Y) RP(Z). {A = Y; A->exprToken.z = X.z; A->exprToken.n = (Z.z - X.z + 1);}
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(&X, TK_ID);}
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ID);}
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ALL);}
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ALL);}
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(&X, TK_STRING);}
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_STRING);}
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(&X, TK_NOW); }
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_NOW); }
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(&X, TK_BOOL);}
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_BOOL);}
expr(A) ::= NULL(X). { A = tSqlExprCreateIdValue(&X, TK_NULL);}
expr(A) ::= NULL(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_NULL);}
// ordinary functions: min(x), max(x), top(k, 20)
// ordinary functions: min(x), max(x), top(k, 20)
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
...
...
src/query/src/qAggMain.c
浏览文件 @
3d4a4888
...
@@ -20,7 +20,6 @@
...
@@ -20,7 +20,6 @@
#include "tdigest.h"
#include "tdigest.h"
#include "ttype.h"
#include "ttype.h"
#include "tsdb.h"
#include "tsdb.h"
#include "tglobal.h"
#include "qAggMain.h"
#include "qAggMain.h"
#include "qFill.h"
#include "qFill.h"
...
@@ -172,7 +171,11 @@ typedef struct SDerivInfo {
...
@@ -172,7 +171,11 @@ typedef struct SDerivInfo {
}
SDerivInfo
;
}
SDerivInfo
;
typedef
struct
{
typedef
struct
{
double
cumSum
;
union
{
double
d64CumSum
;
int64_t
i64CumSum
;
uint64_t
u64CumSum
;
};
}
SCumSumInfo
;
}
SCumSumInfo
;
typedef
struct
{
typedef
struct
{
...
@@ -4709,7 +4712,7 @@ static bool csum_function_setup(SQLFunctionCtx *pCtx, SResultRowCellInfo* pResIn
...
@@ -4709,7 +4712,7 @@ static bool csum_function_setup(SQLFunctionCtx *pCtx, SResultRowCellInfo* pResIn
}
}
SCumSumInfo
*
pCumSumInfo
=
GET_ROWCELL_INTERBUF
(
pResInfo
);
SCumSumInfo
*
pCumSumInfo
=
GET_ROWCELL_INTERBUF
(
pResInfo
);
pCumSumInfo
->
c
umSum
=
0
;
pCumSumInfo
->
i64C
umSum
=
0
;
return
true
;
return
true
;
}
}
...
@@ -4733,20 +4736,30 @@ static void csum_function(SQLFunctionCtx *pCtx) {
...
@@ -4733,20 +4736,30 @@ static void csum_function(SQLFunctionCtx *pCtx) {
continue
;
continue
;
}
}
double
v
=
0
;
if
(
IS_SIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
GET_TYPED_DATA
(
v
,
double
,
pCtx
->
inputType
,
pData
);
int64_t
v
=
0
;
pCumSumInfo
->
cumSum
+=
v
;
GET_TYPED_DATA
(
v
,
int64_t
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
i64CumSum
+=
v
;
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
uint64_t
v
=
0
;
GET_TYPED_DATA
(
v
,
uint64_t
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
u64CumSum
+=
v
;
}
else
if
(
IS_FLOAT_TYPE
(
pCtx
->
inputType
))
{
double
v
=
0
;
GET_TYPED_DATA
(
v
,
double
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
d64CumSum
+=
v
;
}
*
pTimestamp
=
(
tsList
!=
NULL
)
?
tsList
[
i
]
:
0
;
*
pTimestamp
=
(
tsList
!=
NULL
)
?
tsList
[
i
]
:
0
;
if
(
IS_SIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
if
(
IS_SIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
int64_t
*
retVal
=
(
int64_t
*
)
pCtx
->
pOutput
;
int64_t
*
retVal
=
(
int64_t
*
)
pCtx
->
pOutput
;
*
retVal
=
(
int64_t
)(
pCumSumInfo
->
c
umSum
);
*
retVal
=
(
int64_t
)(
pCumSumInfo
->
i64C
umSum
);
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
uint64_t
*
retVal
=
(
uint64_t
*
)
pCtx
->
pOutput
;
uint64_t
*
retVal
=
(
uint64_t
*
)
pCtx
->
pOutput
;
*
retVal
=
(
uint64_t
)(
pCumSumInfo
->
c
umSum
);
*
retVal
=
(
uint64_t
)(
pCumSumInfo
->
u64C
umSum
);
}
else
if
(
IS_FLOAT_TYPE
(
pCtx
->
inputType
))
{
}
else
if
(
IS_FLOAT_TYPE
(
pCtx
->
inputType
))
{
double
*
retVal
=
(
double
*
)
pCtx
->
pOutput
;
double
*
retVal
=
(
double
*
)
pCtx
->
pOutput
;
SET_DOUBLE_VAL
(
retVal
,
pCumSumInfo
->
c
umSum
);
SET_DOUBLE_VAL
(
retVal
,
pCumSumInfo
->
d64C
umSum
);
}
}
++
notNullElems
;
++
notNullElems
;
...
...
src/query/src/qFilter.c
浏览文件 @
3d4a4888
...
@@ -1841,6 +1841,15 @@ int32_t filterInitValFieldData(SFilterInfo *info) {
...
@@ -1841,6 +1841,15 @@ int32_t filterInitValFieldData(SFilterInfo *info) {
qError
(
"dump value to type[%d] failed"
,
type
);
qError
(
"dump value to type[%d] failed"
,
type
);
return
TSDB_CODE_TSC_INVALID_OPERATION
;
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
}
// match/nmatch for nchar type need convert from ucs4 to mbs
if
(
type
==
TSDB_DATA_TYPE_NCHAR
&&
(
unit
->
compare
.
optr
==
TSDB_RELATION_MATCH
||
unit
->
compare
.
optr
==
TSDB_RELATION_NMATCH
)){
char
newValData
[
TSDB_REGEX_STRING_DEFAULT_LEN
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
]
=
{
0
};
int32_t
len
=
taosUcs4ToMbs
(
varDataVal
(
fi
->
data
),
varDataLen
(
fi
->
data
),
varDataVal
(
newValData
));
varDataSetLen
(
newValData
,
len
);
varDataCopy
(
fi
->
data
,
newValData
);
}
}
}
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
...
@@ -2960,9 +2969,18 @@ bool filterExecuteImplMisc(void *pinfo, int32_t numOfRows, int8_t** p, SDataStat
...
@@ -2960,9 +2969,18 @@ bool filterExecuteImplMisc(void *pinfo, int32_t numOfRows, int8_t** p, SDataStat
all
=
false
;
all
=
false
;
continue
;
continue
;
}
}
// match/nmatch for nchar type need convert from ucs4 to mbs
if
(
info
->
cunits
[
uidx
].
dataType
==
TSDB_DATA_TYPE_NCHAR
&&
(
info
->
cunits
[
uidx
].
optr
==
TSDB_RELATION_MATCH
||
info
->
cunits
[
uidx
].
optr
==
TSDB_RELATION_NMATCH
)){
char
*
newColData
=
calloc
(
info
->
cunits
[
uidx
].
dataSize
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
,
1
);
int
len
=
taosUcs4ToMbs
(
varDataVal
(
colData
),
varDataLen
(
colData
),
varDataVal
(
newColData
));
varDataSetLen
(
newColData
,
len
);
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
newColData
,
info
->
cunits
[
uidx
].
valData
);
tfree
(
newColData
);
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
colData
,
info
->
cunits
[
uidx
].
valData
);
}
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
colData
,
info
->
cunits
[
uidx
].
valData
);
if
((
*
p
)[
i
]
==
0
)
{
if
((
*
p
)[
i
]
==
0
)
{
all
=
false
;
all
=
false
;
}
}
...
@@ -3009,7 +3027,15 @@ bool filterExecuteImpl(void *pinfo, int32_t numOfRows, int8_t** p, SDataStatis *
...
@@ -3009,7 +3027,15 @@ bool filterExecuteImpl(void *pinfo, int32_t numOfRows, int8_t** p, SDataStatis *
}
else
if
(
cunit
->
rfunc
>=
0
)
{
}
else
if
(
cunit
->
rfunc
>=
0
)
{
(
*
p
)[
i
]
=
(
*
gRangeCompare
[
cunit
->
rfunc
])(
colData
,
colData
,
cunit
->
valData
,
cunit
->
valData2
,
gDataCompare
[
cunit
->
func
]);
(
*
p
)[
i
]
=
(
*
gRangeCompare
[
cunit
->
rfunc
])(
colData
,
colData
,
cunit
->
valData
,
cunit
->
valData2
,
gDataCompare
[
cunit
->
func
]);
}
else
{
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
colData
,
cunit
->
valData
);
if
(
cunit
->
dataType
==
TSDB_DATA_TYPE_NCHAR
&&
(
cunit
->
optr
==
TSDB_RELATION_MATCH
||
cunit
->
optr
==
TSDB_RELATION_NMATCH
)){
char
*
newColData
=
calloc
(
cunit
->
dataSize
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
,
1
);
int
len
=
taosUcs4ToMbs
(
varDataVal
(
colData
),
varDataLen
(
colData
),
varDataVal
(
newColData
));
varDataSetLen
(
newColData
,
len
);
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
newColData
,
cunit
->
valData
);
tfree
(
newColData
);
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
colData
,
cunit
->
valData
);
}
}
}
//FILTER_UNIT_SET_R(info, uidx, p[i]);
//FILTER_UNIT_SET_R(info, uidx, p[i]);
...
...
src/query/src/qSqlParser.c
浏览文件 @
3d4a4888
...
@@ -133,7 +133,7 @@ SArray *tStrTokenAppend(SArray *pList, SStrToken *pToken) {
...
@@ -133,7 +133,7 @@ SArray *tStrTokenAppend(SArray *pList, SStrToken *pToken) {
return
pList
;
return
pList
;
}
}
tSqlExpr
*
tSqlExprCreateIdValue
(
SStrToken
*
pToken
,
int32_t
optrType
)
{
tSqlExpr
*
tSqlExprCreateIdValue
(
SS
qlInfo
*
pInfo
,
SS
trToken
*
pToken
,
int32_t
optrType
)
{
tSqlExpr
*
pSqlExpr
=
calloc
(
1
,
sizeof
(
tSqlExpr
));
tSqlExpr
*
pSqlExpr
=
calloc
(
1
,
sizeof
(
tSqlExpr
));
if
(
pToken
!=
NULL
)
{
if
(
pToken
!=
NULL
)
{
...
@@ -168,6 +168,7 @@ tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType) {
...
@@ -168,6 +168,7 @@ tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType) {
char
unit
=
0
;
char
unit
=
0
;
int32_t
ret
=
parseAbsoluteDuration
(
pToken
->
z
,
pToken
->
n
,
&
pSqlExpr
->
value
.
i64
,
&
unit
,
TSDB_TIME_PRECISION_NANO
);
int32_t
ret
=
parseAbsoluteDuration
(
pToken
->
z
,
pToken
->
n
,
&
pSqlExpr
->
value
.
i64
,
&
unit
,
TSDB_TIME_PRECISION_NANO
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
snprintf
(
pInfo
->
msg
,
tListLen
(
pInfo
->
msg
),
"%s"
,
pToken
->
z
);
terrno
=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
;
terrno
=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
;
}
}
}
}
...
...
src/query/src/sql.c
浏览文件 @
3d4a4888
此差异已折叠。
点击以展开。
src/tsdb/src/tsdbMemTable.c
浏览文件 @
3d4a4888
...
@@ -647,7 +647,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdbRepo *pRepo, SSubmitMsg *pMsg) {
...
@@ -647,7 +647,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdbRepo *pRepo, SSubmitMsg *pMsg) {
TSKEY
now
=
taosGetTimestamp
(
pRepo
->
config
.
precision
);
TSKEY
now
=
taosGetTimestamp
(
pRepo
->
config
.
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
keep
;
TSKEY
minKey
=
now
-
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
keep
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
daysPerFile
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
daysPerFile
;
terrno
=
TSDB_CODE_SUCCESS
;
terrno
=
TSDB_CODE_SUCCESS
;
pMsg
->
length
=
htonl
(
pMsg
->
length
);
pMsg
->
length
=
htonl
(
pMsg
->
length
);
pMsg
->
numOfBlocks
=
htonl
(
pMsg
->
numOfBlocks
);
pMsg
->
numOfBlocks
=
htonl
(
pMsg
->
numOfBlocks
);
...
...
src/util/src/tcompare.c
浏览文件 @
3d4a4888
...
@@ -417,14 +417,20 @@ int32_t compareFindItemInSet(const void *pLeft, const void* pRight) {
...
@@ -417,14 +417,20 @@ int32_t compareFindItemInSet(const void *pLeft, const void* pRight) {
int32_t
compareWStrPatternComp
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
int32_t
compareWStrPatternComp
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
SPatternCompareInfo
pInfo
=
{
'%'
,
'_'
};
SPatternCompareInfo
pInfo
=
{
'%'
,
'_'
};
size_t
size
=
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
;
assert
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
*
TSDB_NCHAR_SIZE
);
assert
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
*
TSDB_NCHAR_SIZE
);
wchar_t
*
pattern
=
calloc
(
varDataLen
(
pRight
)
+
1
,
sizeof
(
wchar_t
));
wchar_t
*
pattern
=
calloc
(
varDataLen
(
pRight
)
+
1
,
sizeof
(
wchar_t
));
wchar_t
*
str
=
calloc
(
size
+
1
,
sizeof
(
wchar_t
));
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
memcpy
(
str
,
varDataVal
(
pLeft
),
size
*
sizeof
(
wchar_t
));
int32_t
ret
=
WCSPatternMatch
(
pattern
,
str
,
size
,
&
pInfo
);
int32_t
ret
=
WCSPatternMatch
(
pattern
,
varDataVal
(
pLeft
),
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
,
&
pInfo
);
free
(
pattern
);
free
(
pattern
);
free
(
str
);
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
}
}
...
...
src/vnode/src/vnodeRead.c
浏览文件 @
3d4a4888
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include "tglobal.h"
#include "tglobal.h"
#include "query.h"
#include "query.h"
#include "vnodeStatus.h"
#include "vnodeStatus.h"
#include "tgrant.h"
int32_t
vNumOfExistedQHandle
;
// current initialized and existed query handle in current dnode
int32_t
vNumOfExistedQHandle
;
// current initialized and existed query handle in current dnode
...
@@ -55,6 +56,11 @@ int32_t vnodeProcessRead(void *vparam, SVReadMsg *pRead) {
...
@@ -55,6 +56,11 @@ int32_t vnodeProcessRead(void *vparam, SVReadMsg *pRead) {
}
}
static
int32_t
vnodeCheckRead
(
SVnodeObj
*
pVnode
)
{
static
int32_t
vnodeCheckRead
(
SVnodeObj
*
pVnode
)
{
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
vDebug
(
"vgId:%d, grant expired, refCount:%d pVnode:%p"
,
pVnode
->
vgId
,
pVnode
->
refCount
,
pVnode
);
return
TSDB_CODE_GRANT_EXPIRED
;
}
if
(
!
vnodeInReadyStatus
(
pVnode
))
{
if
(
!
vnodeInReadyStatus
(
pVnode
))
{
vDebug
(
"vgId:%d, vnode status is %s, refCount:%d pVnode:%p"
,
pVnode
->
vgId
,
vnodeStatus
[
pVnode
->
status
],
vDebug
(
"vgId:%d, vnode status is %s, refCount:%d pVnode:%p"
,
pVnode
->
vgId
,
vnodeStatus
[
pVnode
->
status
],
pVnode
->
refCount
,
pVnode
);
pVnode
->
refCount
,
pVnode
);
...
...
src/vnode/src/vnodeWrite.c
浏览文件 @
3d4a4888
...
@@ -170,7 +170,7 @@ static int32_t vnodeProcessSubmitMsg(SVnodeObj *pVnode, void *pCont, SRspRet *pR
...
@@ -170,7 +170,7 @@ static int32_t vnodeProcessSubmitMsg(SVnodeObj *pVnode, void *pCont, SRspRet *pR
static
int32_t
vnodeCheckWal
(
SVnodeObj
*
pVnode
)
{
static
int32_t
vnodeCheckWal
(
SVnodeObj
*
pVnode
)
{
if
(
pVnode
->
isCommiting
==
0
)
{
if
(
pVnode
->
isCommiting
==
0
)
{
return
tsdbCheckWal
(
pVnode
->
tsdb
,
walGetFSize
(
pVnode
->
wal
)
>>
20
);
return
tsdbCheckWal
(
pVnode
->
tsdb
,
(
uint32_t
)(
walGetFSize
(
pVnode
->
wal
)
>>
20
)
);
}
}
return
0
;
return
0
;
}
}
...
...
tests/pytest/dbmgmt/nanoSecondCheck.py
浏览文件 @
3d4a4888
...
@@ -31,6 +31,7 @@ class TDTestCase:
...
@@ -31,6 +31,7 @@ class TDTestCase:
tdSql
.
prepare
()
tdSql
.
prepare
()
tdSql
.
execute
(
'reset query cache'
)
tdSql
.
execute
(
'reset query cache'
)
tdSql
.
execute
(
'drop database if exists db'
)
tdSql
.
execute
(
'drop database if exists db'
)
tdSql
.
error
(
'create database db keep 365000'
);
tdSql
.
execute
(
'create database db precision "ns";'
)
tdSql
.
execute
(
'create database db precision "ns";'
)
tdSql
.
query
(
'show databases;'
)
tdSql
.
query
(
'show databases;'
)
tdSql
.
checkData
(
0
,
16
,
'ns'
)
tdSql
.
checkData
(
0
,
16
,
'ns'
)
...
@@ -216,4 +217,4 @@ class TDTestCase:
...
@@ -216,4 +217,4 @@ class TDTestCase:
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tests/pytest/functions/function_derivative.py
浏览文件 @
3d4a4888
...
@@ -147,6 +147,9 @@ class TDTestCase:
...
@@ -147,6 +147,9 @@ class TDTestCase:
tdSql
.
error
(
"select derivative(col, 10s, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 10s, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 999ms, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 999ms, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 10s, 2) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 10s, 2) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, -106752999999999922222d, 0) from stb group by tbname"
);
#overflow error
tdSql
.
error
(
"select derivative(col, 10y, 0) from stb group by tbname"
)
#TD-10399, DB error: syntax error near '10y, 0) from stb group by tbname;'
tdSql
.
error
(
"select derivative(col, -106752d, 0) from stb group by tbname"
)
#TD-10398 overflow tips
def
run
(
self
):
def
run
(
self
):
tdSql
.
prepare
()
tdSql
.
prepare
()
...
...
tests/pytest/query/queryRegex.py
浏览文件 @
3d4a4888
...
@@ -29,18 +29,18 @@ class TDTestCase:
...
@@ -29,18 +29,18 @@ class TDTestCase:
print
(
"==============step1"
)
print
(
"==============step1"
)
##2021-09-17 For jira: https://jira.taosdata.com:18080/browse/TD-6585
##2021-09-17 For jira: https://jira.taosdata.com:18080/browse/TD-6585
tdSql
.
execute
(
tdSql
.
execute
(
"create stable if not exists stb_test(ts timestamp,c0 binary(32),c1 int
) tags(t0 binary(32
))"
"create stable if not exists stb_test(ts timestamp,c0 binary(32),c1 int
,c2 nchar(50)) tags(t0 binary(32),t1 nchar(50
))"
)
)
tdSql
.
execute
(
tdSql
.
execute
(
'create table if not exists stb_1 using stb_test tags("abcdefgasdfg12346")'
'create table if not exists stb_1 using stb_test tags("abcdefgasdfg12346"
,"涛思数据"
)'
)
)
tdLog
.
info
(
'insert into stb_1 values("2021-09-13 10:00:00.001","abcefdasdqwerxasdazx12345",15'
)
tdLog
.
info
(
'insert into stb_1 values("2021-09-13 10:00:00.001","abcefdasdqwerxasdazx12345",15
,"引擎一组"
'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.002","abcefdasdqwerxasdazx12345",15)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.002","abcefdasdqwerxasdazx12345",15
,"引擎一组一号"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.003","aaaaafffwwqqxzz",16)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.003","aaaaafffwwqqxzz",16
,"引擎一组二号"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.004","fffwwqqxzz",17)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.004","fffwwqqxzz",17
,"涛涛思思"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2020-10-13 10:00:00.001","abcd
\\
\efgh",100)'
)
tdSql
.
execute
(
'insert into stb_1 values("2020-10-13 10:00:00.001","abcd
\\
\efgh",100
,"思涛思"
)'
)
tdSql
.
query
(
'select * from stb_test where tbname match "asd"'
)
tdSql
.
query
(
'select * from stb_test where tbname match "asd"'
)
tdSql
.
checkRows
(
0
)
tdSql
.
checkRows
(
0
)
...
@@ -98,6 +98,31 @@ class TDTestCase:
...
@@ -98,6 +98,31 @@ class TDTestCase:
tdSql
.
query
(
"select * from stb_1 where c0 nmatch '
\\\\
'"
)
tdSql
.
query
(
"select * from stb_1 where c0 nmatch '
\\\\
'"
)
tdSql
.
checkRows
(
3
)
tdSql
.
checkRows
(
3
)
#2021-10-20 for https://jira.taosdata.com:18080/browse/TD-10708
tdSql
.
query
(
'select * from stb_1 where c2 match "^涛"'
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "^涛"'
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
'select * from stb_1 where c2 match "号$"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "号$"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 match "涛+思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "涛+思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 match "涛*思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "涛*思"'
)
tdSql
.
checkRows
(
2
)
...
...
tests/script/general/compute/csum.sim
浏览文件 @
3d4a4888
...
@@ -88,6 +88,18 @@ sql select csum(tbcol) as b from $tb where ts <= $ms interval(1m) -x step6
...
@@ -88,6 +88,18 @@ sql select csum(tbcol) as b from $tb where ts <= $ms interval(1m) -x step6
return -1
return -1
step6:
step6:
print =============== csum result overflow follow sum behavior
sql create table overflow(ts timestamp, c1 bigint)
sql insert into overflow values(now-1s, NULL)(now, 9223372036854775807)(now+1s, 9223372036854775807)
sql select csum(c1) from overflow
print $data00 , $data01, $data10, $data11
if $data01 != 9223372036854775807 then
return -1
endi
if $data11 != -2 then
return -1
endi
print =============== clear
print =============== clear
sql drop database $db
sql drop database $db
sql show databases
sql show databases
...
...
tests/script/general/parser/alter.sim
浏览文件 @
3d4a4888
...
@@ -86,12 +86,13 @@ endi
...
@@ -86,12 +86,13 @@ endi
if $data07 != 11,12,13 then
if $data07 != 11,12,13 then
return -1
return -1
endi
endi
sql alter database $db keep 365000,365000,365000
sql_error alter database $db keep 365000,365000,365000
sql alter database $db keep 36500,36500,36500
sql show databases
sql show databases
if $rows != 1 then
if $rows != 1 then
return -1
return -1
endi
endi
if $data07 != 36500
0,365000,3650
00 then
if $data07 != 36500
,36500,365
00 then
return -1
return -1
endi
endi
...
...
tests/script/general/parser/alter__for_community_version.sim
浏览文件 @
3d4a4888
...
@@ -79,15 +79,16 @@ endi
...
@@ -79,15 +79,16 @@ endi
if $data07 != 13 then
if $data07 != 13 then
return -1
return -1
endi
endi
sql alter database $db keep 36500
0
sql alter database $db keep 36500
sql show databases
sql show databases
if $rows != 1 then
if $rows != 1 then
return -1
return -1
endi
endi
if $data07 != 36500
0
then
if $data07 != 36500 then
return -1
return -1
endi
endi
sql_error alter database $db keep 365000
##### alter table test, simeplest case
##### alter table test, simeplest case
sql create table tb (ts timestamp, c1 int, c2 int, c3 int)
sql create table tb (ts timestamp, c1 int, c2 int, c3 int)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录