Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f2553b87
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
f2553b87
编写于
7月 26, 2023
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:add configuration to control if change dot to underline in schemaless
上级
d3970c11
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
156 addition
and
14 deletion
+156
-14
include/common/tglobal.h
include/common/tglobal.h
+2
-0
source/client/inc/clientSml.h
source/client/inc/clientSml.h
+2
-2
source/client/src/clientSml.c
source/client/src/clientSml.c
+4
-0
source/client/src/clientSmlJson.c
source/client/src/clientSmlJson.c
+4
-4
source/client/src/clientSmlLine.c
source/client/src/clientSmlLine.c
+2
-2
source/client/src/clientSmlTelnet.c
source/client/src/clientSmlTelnet.c
+2
-2
source/common/src/tglobal.c
source/common/src/tglobal.c
+10
-0
tests/parallel_test/cases.task
tests/parallel_test/cases.task
+1
-0
tests/system-test/2-query/sml.py
tests/system-test/2-query/sml.py
+4
-4
tests/system-test/2-query/sml_TS-3724.py
tests/system-test/2-query/sml_TS-3724.py
+125
-0
未找到文件。
include/common/tglobal.h
浏览文件 @
f2553b87
...
...
@@ -161,6 +161,8 @@ extern char tsUdfdLdLibPath[];
// schemaless
extern
char
tsSmlChildTableName
[];
extern
char
tsSmlTagName
[];
extern
bool
tsSmlDot2Underline
;
extern
char
tsSmlTsDefaultName
[];
// extern bool tsSmlDataFormat;
// extern int32_t tsSmlBatchSize;
...
...
source/client/inc/clientSml.h
浏览文件 @
f2553b87
...
...
@@ -64,8 +64,8 @@ extern "C" {
#define IS_INVALID_COL_LEN(len) ((len) <= 0 || (len) >= TSDB_COL_NAME_LEN)
#define IS_INVALID_TABLE_LEN(len) ((len) <= 0 || (len) >= TSDB_TABLE_NAME_LEN)
#define TS "_ts"
#define TS_LEN 3
//
#define TS "_ts"
//
#define TS_LEN 3
#define VALUE "_value"
#define VALUE_LEN 6
...
...
source/client/src/clientSml.c
浏览文件 @
f2553b87
...
...
@@ -115,6 +115,7 @@ inline bool smlDoubleToInt64OverFlow(double num) {
}
void
smlStrReplace
(
char
*
src
,
int32_t
len
){
if
(
!
tsSmlDot2Underline
)
return
;
for
(
int
i
=
0
;
i
<
len
;
i
++
){
if
(
src
[
i
]
==
'.'
){
src
[
i
]
=
'_'
;
...
...
@@ -201,6 +202,9 @@ static int32_t smlParseTableName(SArray *tags, char *childTableName) {
if
(
childTableNameLen
==
tag
->
keyLen
&&
strncmp
(
tag
->
key
,
tsSmlChildTableName
,
tag
->
keyLen
)
==
0
)
{
memset
(
childTableName
,
0
,
TSDB_TABLE_NAME_LEN
);
strncpy
(
childTableName
,
tag
->
value
,
(
tag
->
length
<
TSDB_TABLE_NAME_LEN
?
tag
->
length
:
TSDB_TABLE_NAME_LEN
));
if
(
tsSmlDot2Underline
){
smlStrReplace
(
childTableName
,
strlen
(
childTableName
));
}
taosArrayRemove
(
tags
,
i
);
break
;
}
...
...
source/client/src/clientSmlJson.c
浏览文件 @
f2553b87
...
...
@@ -996,8 +996,8 @@ static int32_t smlParseJSONStringExt(SSmlHandle *info, cJSON *root, SSmlLineInfo
uError
(
"OTD:0x%"
PRIx64
" Unable to parse timestamp from JSON payload"
,
info
->
id
);
return
TSDB_CODE_INVALID_TIMESTAMP
;
}
SSmlKv
kvTs
=
{.
key
=
TS
,
.
keyLen
=
TS_LEN
,
SSmlKv
kvTs
=
{.
key
=
tsSmlTsDefaultName
,
.
keyLen
=
strlen
(
tsSmlTsDefaultName
)
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
i
=
ts
,
.
length
=
(
size_t
)
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
};
...
...
@@ -1200,8 +1200,8 @@ static int32_t smlParseJSONString(SSmlHandle *info, char **start, SSmlLineInfo *
return
TSDB_CODE_INVALID_TIMESTAMP
;
}
}
SSmlKv
kvTs
=
{.
key
=
TS
,
.
keyLen
=
TS_LEN
,
SSmlKv
kvTs
=
{.
key
=
tsSmlTsDefaultName
,
.
keyLen
=
strlen
(
tsSmlTsDefaultName
)
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
i
=
ts
,
.
length
=
(
size_t
)
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
};
...
...
source/client/src/clientSmlLine.c
浏览文件 @
f2553b87
...
...
@@ -653,8 +653,8 @@ int32_t smlParseInfluxString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLine
return
TSDB_CODE_INVALID_TIMESTAMP
;
}
// add ts to
SSmlKv
kv
=
{.
key
=
TS
,
.
keyLen
=
TS_LEN
,
SSmlKv
kv
=
{.
key
=
tsSmlTsDefaultName
,
.
keyLen
=
strlen
(
tsSmlTsDefaultName
)
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
i
=
ts
,
.
length
=
(
size_t
)
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
,
...
...
source/client/src/clientSmlTelnet.c
浏览文件 @
f2553b87
...
...
@@ -260,8 +260,8 @@ int32_t smlParseTelnetString(SSmlHandle *info, char *sql, char *sqlEnd, SSmlLine
smlBuildInvalidDataMsg
(
&
info
->
msgBuf
,
"invalid timestamp"
,
sql
);
return
TSDB_CODE_INVALID_TIMESTAMP
;
}
SSmlKv
kvTs
=
{.
key
=
TS
,
.
keyLen
=
TS_LEN
,
SSmlKv
kvTs
=
{.
key
=
tsSmlTsDefaultName
,
.
keyLen
=
strlen
(
tsSmlTsDefaultName
)
,
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
,
.
i
=
ts
,
.
length
=
(
size_t
)
tDataTypes
[
TSDB_DATA_TYPE_TIMESTAMP
].
bytes
};
...
...
source/common/src/tglobal.c
浏览文件 @
f2553b87
...
...
@@ -98,6 +98,8 @@ char *tsClientCrashReportUri = "/ccrashreport";
char
*
tsSvrCrashReportUri
=
"/dcrashreport"
;
// schemaless
bool
tsSmlDot2Underline
=
true
;
char
tsSmlTsDefaultName
[
TSDB_COL_NAME_LEN
]
=
"_ts"
;
char
tsSmlTagName
[
TSDB_COL_NAME_LEN
]
=
"_tag_null"
;
char
tsSmlChildTableName
[
TSDB_TABLE_NAME_LEN
]
=
""
;
// user defined child table name can be specified in tag value.
// If set to empty system will generate table name using MD5 hash.
...
...
@@ -351,6 +353,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
if
(
cfgAddBool
(
pCfg
,
"keepColumnName"
,
tsKeepColumnName
,
true
)
!=
0
)
return
-
1
;
if
(
cfgAddString
(
pCfg
,
"smlChildTableName"
,
""
,
1
)
!=
0
)
return
-
1
;
if
(
cfgAddString
(
pCfg
,
"smlTagName"
,
tsSmlTagName
,
1
)
!=
0
)
return
-
1
;
if
(
cfgAddString
(
pCfg
,
"smlTsDefaultName"
,
tsSmlTsDefaultName
,
1
)
!=
0
)
return
-
1
;
if
(
cfgAddBool
(
pCfg
,
"smlDot2Underline"
,
tsSmlDot2Underline
,
true
)
!=
0
)
return
-
1
;
// if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
// if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, true) != 0) return -1;
if
(
cfgAddInt32
(
pCfg
,
"maxInsertBatchRows"
,
tsMaxInsertBatchRows
,
1
,
INT32_MAX
,
true
)
!=
0
)
return
-
1
;
...
...
@@ -785,6 +789,8 @@ static int32_t taosSetClientCfg(SConfig *pCfg) {
tstrncpy
(
tsSmlChildTableName
,
cfgGetItem
(
pCfg
,
"smlChildTableName"
)
->
str
,
TSDB_TABLE_NAME_LEN
);
tstrncpy
(
tsSmlTagName
,
cfgGetItem
(
pCfg
,
"smlTagName"
)
->
str
,
TSDB_COL_NAME_LEN
);
tstrncpy
(
tsSmlTsDefaultName
,
cfgGetItem
(
pCfg
,
"smlTsDefaultName"
)
->
str
,
TSDB_COL_NAME_LEN
);
tsSmlDot2Underline
=
cfgGetItem
(
pCfg
,
"smlDot2Underline"
)
->
bval
;
// tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
// tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
...
...
@@ -1219,6 +1225,10 @@ int32_t taosApplyLocalCfg(SConfig *pCfg, char *name) {
// tsSmlDataFormat = cfgGetItem(pCfg, "smlDataFormat")->bval;
// } else if (strcasecmp("smlBatchSize", name) == 0) {
// tsSmlBatchSize = cfgGetItem(pCfg, "smlBatchSize")->i32;
}
else
if
(
strcasecmp
(
"smlTsDefaultName"
,
name
)
==
0
)
{
tstrncpy
(
tsSmlTsDefaultName
,
cfgGetItem
(
pCfg
,
"smlTsDefaultName"
)
->
str
,
TSDB_COL_NAME_LEN
);
}
else
if
(
strcasecmp
(
"smlDot2Underline"
,
name
)
==
0
)
{
tsSmlDot2Underline
=
cfgGetItem
(
pCfg
,
"smlDot2Underline"
)
->
bval
;
}
else
if
(
strcasecmp
(
"shellActivityTimer"
,
name
)
==
0
)
{
tsShellActivityTimer
=
cfgGetItem
(
pCfg
,
"shellActivityTimer"
)
->
i32
;
}
else
if
(
strcasecmp
(
"supportVnodes"
,
name
)
==
0
)
{
...
...
tests/parallel_test/cases.task
浏览文件 @
f2553b87
...
...
@@ -344,6 +344,7 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/smaTest.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/sma_index.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml_TS-3724.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/sml.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/spread.py
...
...
tests/system-test/2-query/sml.py
浏览文件 @
f2553b87
...
...
@@ -15,7 +15,7 @@ sys.path.append("./7-tmq")
from
tmqCommon
import
*
class
TDTestCase
:
updatecfgDict
=
{
'clientCfg'
:
{
'smlChildTableName'
:
'dataModelName'
,
'fqdn'
:
'localhost'
},
'fqdn'
:
'localhost'
}
updatecfgDict
=
{
'clientCfg'
:
{
'smlChildTableName'
:
'dataModelName'
,
'fqdn'
:
'localhost'
,
'smlDot2Underline'
:
0
},
'fqdn'
:
'localhost'
}
print
(
"===================: "
,
updatecfgDict
)
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
...
...
@@ -102,13 +102,13 @@ class TDTestCase:
tdSql
.
query
(
f
"desc
{
dbname
}
.macylr"
)
tdSql
.
checkRows
(
25
)
tdSql
.
query
(
f
"select * from ts3724.
_stb_2
"
)
tdSql
.
query
(
f
"select * from ts3724.
`.stb2`
"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from ts3724.
stb_2
"
)
tdSql
.
query
(
f
"select * from ts3724.
`stb.2`
"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from ts3724.
stb2_
"
)
tdSql
.
query
(
f
"select * from ts3724.
`stb2.`
"
)
tdSql
.
checkRows
(
1
)
return
...
...
tests/system-test/2-query/sml_TS-3724.py
0 → 100644
浏览文件 @
f2553b87
import
taos
import
sys
import
time
import
socket
import
os
import
threading
from
util.log
import
*
from
util.sql
import
*
from
util.cases
import
*
from
util.dnodes
import
*
from
util.common
import
*
sys
.
path
.
append
(
"./7-tmq"
)
from
tmqCommon
import
*
class
TDTestCase
:
updatecfgDict
=
{
'clientCfg'
:
{
'smlChildTableName'
:
'dataModelName'
,
'fqdn'
:
'localhost'
,
'smlTsDefaultName'
:
"times"
},
'fqdn'
:
'localhost'
}
print
(
"===================: "
,
updatecfgDict
)
def
init
(
self
,
conn
,
logSql
,
replicaVar
=
1
):
self
.
replicaVar
=
int
(
replicaVar
)
tdLog
.
debug
(
f
"start to excute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
(),
True
)
#tdSql.init(conn.cursor(), logSql) # output sql.txt file
def
checkContent
(
self
,
dbname
=
"sml_db"
):
simClientCfg
=
"%s/taos.cfg"
%
tdDnodes
.
getSimCfgPath
()
buildPath
=
tdCom
.
getBuildPath
()
cmdStr
=
'%s/build/bin/sml_test %s'
%
(
buildPath
,
simClientCfg
)
print
(
"cmdStr:"
,
cmdStr
)
tdLog
.
info
(
cmdStr
)
ret
=
os
.
system
(
cmdStr
)
if
ret
!=
0
:
tdLog
.
info
(
"sml_test ret != 0"
)
tdSql
.
query
(
f
"select * from ts3303.stb2"
)
tdSql
.
query
(
f
"select * from ts3303.meters"
)
# tdSql.execute('use sml_db')
tdSql
.
query
(
f
"select * from
{
dbname
}
.t_b7d815c9222ca64cdf2614c61de8f211"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
'2016-01-01 08:00:07.000'
)
tdSql
.
checkData
(
0
,
1
,
2000
)
tdSql
.
checkData
(
0
,
2
,
200
)
tdSql
.
checkData
(
0
,
3
,
15
)
tdSql
.
checkData
(
0
,
4
,
24.5208
)
tdSql
.
checkData
(
0
,
5
,
28.09377
)
tdSql
.
checkData
(
0
,
6
,
428
)
tdSql
.
checkData
(
0
,
7
,
0
)
tdSql
.
checkData
(
0
,
8
,
304
)
tdSql
.
checkData
(
0
,
9
,
0
)
tdSql
.
checkData
(
0
,
10
,
25
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.readings"
)
tdSql
.
checkRows
(
9
)
tdSql
.
query
(
f
"select distinct tbname from
{
dbname
}
.readings"
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.t_0799064f5487946e5d22164a822acfc8 order by times"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
3
,
"kk"
)
tdSql
.
checkData
(
1
,
3
,
""
)
tdSql
.
query
(
f
"select distinct tbname from
{
dbname
}
.`sys_if_bytes_out`"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.t_fc70dec6677d4277c5d9799c4da806da order by times"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
1
,
1.300000000
)
tdSql
.
checkData
(
1
,
1
,
13.000000000
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.`sys_procs_running`"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
1
,
42.000000000
)
tdSql
.
checkData
(
0
,
2
,
"web01"
)
tdSql
.
query
(
f
"select distinct tbname from
{
dbname
}
.`sys_cpu_nice`"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.`sys_cpu_nice` order by times"
)
tdSql
.
checkRows
(
4
)
tdSql
.
checkData
(
0
,
1
,
13.000000000
)
tdSql
.
checkData
(
0
,
2
,
"web01"
)
tdSql
.
checkData
(
0
,
3
,
None
)
tdSql
.
checkData
(
0
,
4
,
"lga"
)
tdSql
.
checkData
(
1
,
1
,
9.000000000
)
tdSql
.
checkData
(
1
,
2
,
"web02"
)
tdSql
.
checkData
(
3
,
3
,
"t1"
)
tdSql
.
checkData
(
0
,
4
,
"lga"
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.macylr"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
f
"select * from
{
dbname
}
.qelhxo"
)
tdSql
.
checkRows
(
5
)
tdSql
.
query
(
f
"desc
{
dbname
}
.macylr"
)
tdSql
.
checkRows
(
25
)
tdSql
.
query
(
f
"select * from ts3724._stb2"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from ts3724.stb_2"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from ts3724.stb2_"
)
tdSql
.
checkRows
(
1
)
return
def
run
(
self
):
tdSql
.
prepare
()
self
.
checkContent
()
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录