Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
f89ce48e
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
You need to sign in or sign up before continuing.
提交
f89ce48e
编写于
5月 31, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:add new logic for new tag format
上级
816cea07
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
58 addition
and
58 deletion
+58
-58
source/libs/parser/src/parInsert.c
source/libs/parser/src/parInsert.c
+42
-26
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+3
-3
source/libs/scalar/src/sclvector.c
source/libs/scalar/src/sclvector.c
+1
-1
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+12
-28
未找到文件。
source/libs/parser/src/parInsert.c
浏览文件 @
f89ce48e
...
...
@@ -958,6 +958,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
SArray
*
pTagVals
=
taosArrayInit
(
pCxt
->
tags
.
numOfBound
,
sizeof
(
STagVal
));
SToken
sToken
;
bool
isParseBindParam
=
false
;
bool
isJson
=
false
;
for
(
int
i
=
0
;
i
<
pCxt
->
tags
.
numOfBound
;
++
i
)
{
NEXT_TOKEN_WITH_PREV
(
pCxt
->
pSql
,
sToken
);
...
...
@@ -994,6 +995,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
if
(
code
!=
TSDB_CODE_SUCCESS
){
goto
end
;
}
isJson
=
true
;
}
else
{
STagVal
val
=
{
0
};
code
=
parseTagToken
(
&
pCxt
->
pSql
,
&
sToken
,
pTagSchema
,
precision
,
tmpTokenBuf
,
&
val
,
&
pCxt
->
msg
);
...
...
@@ -1014,7 +1016,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
}
STag
*
pTag
=
NULL
;
code
=
tTagNew
(
pTagVals
,
1
,
false
,
&
pTag
);
code
=
tTagNew
(
pTagVals
,
1
,
isJson
,
&
pTag
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
goto
end
;
}
...
...
@@ -1404,7 +1406,6 @@ int32_t parseInsertSql(SParseContext* pContext, SQuery** pQuery) {
.
pSubTableHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_VARCHAR
),
true
,
HASH_NO_LOCK
),
.
pTableNameHashObj
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_VARCHAR
),
true
,
HASH_NO_LOCK
),
.
totalNum
=
0
,
.
pTagVals
=
NULL
,
.
pOutput
=
(
SVnodeModifOpStmt
*
)
nodesMakeNode
(
QUERY_NODE_VNODE_MODIF_STMT
),
.
pStmtCb
=
pContext
->
pStmtCb
};
...
...
@@ -1526,6 +1527,7 @@ int32_t qBindStmtTagsValue(void* pBlock, void* boundTags, int64_t suid, char* tN
int32_t
code
=
TSDB_CODE_SUCCESS
;
SSchema
*
pSchema
=
pDataBlock
->
pTableMeta
->
schema
;
bool
isJson
=
false
;
for
(
int
c
=
0
;
c
<
tags
->
numOfBound
;
++
c
)
{
if
(
bind
[
c
].
is_null
&&
bind
[
c
].
is_null
[
0
])
{
continue
;
...
...
@@ -1537,7 +1539,21 @@ int32_t qBindStmtTagsValue(void* pBlock, void* boundTags, int64_t suid, char* tN
if
(
IS_VAR_DATA_TYPE
(
pTagSchema
->
type
))
{
colLen
=
bind
[
c
].
length
[
0
];
}
if
(
pTagSchema
->
type
==
TSDB_DATA_TYPE_JSON
)
{
if
(
colLen
>
(
TSDB_MAX_JSON_TAG_LEN
-
VARSTR_HEADER_SIZE
)
/
TSDB_NCHAR_SIZE
)
{
code
=
buildSyntaxErrMsg
(
&
pBuf
,
"json string too long than 4095"
,
bind
[
c
].
buffer
);
goto
end
;
}
isJson
=
true
;
char
*
tmp
=
taosMemoryCalloc
(
1
,
colLen
+
1
);
memcpy
(
tmp
,
bind
[
c
].
buffer
,
colLen
);
code
=
parseJsontoTagData
(
tmp
,
pTagArray
,
&
pBuf
);
taosMemoryFree
(
tmp
);
if
(
code
!=
TSDB_CODE_SUCCESS
){
goto
end
;
}
}
else
{
STagVal
val
=
{
0
};
if
(
pTagSchema
->
type
==
TSDB_DATA_TYPE_BINARY
){
val
.
pData
=
(
uint8_t
*
)
bind
[
c
].
buffer
;
...
...
@@ -1568,11 +1584,11 @@ int32_t qBindStmtTagsValue(void* pBlock, void* boundTags, int64_t suid, char* tN
}
taosArrayPush
(
pTagArray
,
&
val
);
}
}
STag
*
pTag
=
NULL
;
// TODO: stmt support json
if
(
0
!=
tTagNew
(
pTagArray
,
1
,
false
,
&
pTag
))
{
if
(
0
!=
tTagNew
(
pTagArray
,
1
,
isJson
,
&
pTag
))
{
code
=
buildInvalidOperationMsg
(
&
pBuf
,
"out of memory"
);
goto
end
;
}
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
f89ce48e
...
...
@@ -4235,7 +4235,7 @@ static int32_t buildKVRowForBindTags(STranslateContext* pCxt, SCreateSubTableCla
}
}
code
=
tTagNew
(
pTagArray
,
1
,
false
,
ppTag
);
code
=
tTagNew
(
pTagArray
,
1
,
isJson
,
ppTag
);
end:
if
(
isJson
){
...
...
@@ -4302,7 +4302,7 @@ static int32_t buildKVRowForAllTags(STranslateContext* pCxt, SCreateSubTableClau
}
++
index
;
}
code
=
tTagNew
(
pTagArray
,
1
,
false
,
ppTag
);
code
=
tTagNew
(
pTagArray
,
1
,
isJson
,
ppTag
);
end:
if
(
isJson
){
...
...
@@ -4584,7 +4584,7 @@ static int32_t buildUpdateTagValReq(STranslateContext* pCxt, SAlterTableStmt* pS
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
break
;
}
code
=
tTagNew
(
pTagVals
,
1
,
fals
e
,
&
pTag
);
code
=
tTagNew
(
pTagVals
,
1
,
tru
e
,
&
pTag
);
}
while
(
0
);
for
(
int
i
=
0
;
i
<
taosArrayGetSize
(
pTagVals
);
++
i
)
{
STagVal
*
p
=
(
STagVal
*
)
taosArrayGet
(
pTagVals
,
i
);
...
...
source/libs/scalar/src/sclvector.c
浏览文件 @
f89ce48e
...
...
@@ -951,7 +951,7 @@ void vectorJsonArrow(SScalarParam* pLeft, SScalarParam* pRight, SScalarParam *pO
char
*
data
=
tTagValToData
(
value
,
true
);
colDataAppend
(
pOutputCol
,
i
,
data
,
data
==
NULL
);
if
(
value
&&
IS_VAR_DATA_TYPE
(
value
->
type
)
&&
data
){
taosMemoryFree
(
data
)
taosMemoryFree
(
data
)
;
}
}
}
...
...
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
f89ce48e
...
...
@@ -1105,24 +1105,16 @@ void makeCalculate(void *json, void *key, int32_t rightType, void *rightData, do
nodesDestroyNode
(
opNode
);
}
#if 0
TEST
(
columnTest
,
json_column_arith_op
)
{
scltInitLogFile
();
char
*
rightvTmp
=
"{
\"
k1
\"
:4,
\"
k2
\"
:
\"
hello
\"
,
\"
k3
\"
:null,
\"
k4
\"
:true,
\"
k5
\"
:5.44}"
;
char
rightv
[
256
]
=
{
0
};
memcpy
(
rightv
,
rightvTmp
,
strlen
(
rightvTmp
));
SKVRowBuilder kvRowBuilder;
tdInitKVRowBuilder(&kvRowBuilder);
parseJsontoTagData(rightv, &kvRowBuilder, NULL, 0);
SKVRow row = tdGetKVRowFromBuilder(&kvRowBuilder);
char *tmp = (char *)taosMemoryRealloc(row, kvRowLen(row)+1);
if(tmp == NULL){
ASSERT_TRUE(0);
}
memmove(tmp+1, tmp, kvRowLen(tmp));
*tmp = TSDB_DATA_TYPE_JSON;
row = tmp;
SArray
*
tags
=
taosArrayInit
(
1
,
sizeof
(
STagVal
));
parseJsontoTagData
(
rightv
,
tags
,
NULL
);
STag
*
row
=
NULL
;
tTagNew
(
tags
,
1
,
true
,
&
row
);
const
int32_t
len
=
8
;
EOperatorType
op
[
len
]
=
{
OP_TYPE_ADD
,
OP_TYPE_SUB
,
OP_TYPE_MULTI
,
OP_TYPE_DIV
,
...
...
@@ -1176,10 +1168,10 @@ TEST(columnTest, json_column_arith_op) {
makeCalculate
(
row
,
key
,
TSDB_DATA_TYPE_INT
,
&
input
[
i
],
eRes5
[
i
],
op
[
i
]);
}
t
dDestroyKVRowBuilder(&kvRowBuilder
);
t
aosArrayDestroy
(
tags
);
taosMemoryFree
(
row
);
}
#endif
void
*
prepareNchar
(
char
*
rightData
){
int32_t
len
=
0
;
int32_t
inputLen
=
strlen
(
rightData
);
...
...
@@ -1189,24 +1181,17 @@ void *prepareNchar(char* rightData){
varDataSetLen
(
t
,
len
);
return
t
;
}
#if 0
TEST
(
columnTest
,
json_column_logic_op
)
{
scltInitLogFile
();
char
*
rightvTmp
=
"{
\"
k1
\"
:4,
\"
k2
\"
:
\"
hello
\"
,
\"
k3
\"
:null,
\"
k4
\"
:true,
\"
k5
\"
:5.44,
\"
k6
\"
:
\"
6.6hello
\"
}"
;
char
rightv
[
256
]
=
{
0
};
memcpy
(
rightv
,
rightvTmp
,
strlen
(
rightvTmp
));
SKVRowBuilder kvRowBuilder;
tdInitKVRowBuilder(&kvRowBuilder);
parseJsontoTagData(rightv, &kvRowBuilder, NULL, 0);
SKVRow row = tdGetKVRowFromBuilder(&kvRowBuilder);
char *tmp = (char *)taosMemoryRealloc(row, kvRowLen(row)+1);
if(tmp == NULL){
ASSERT_TRUE(0);
}
memmove(tmp+1, tmp, kvRowLen(tmp));
*tmp = TSDB_DATA_TYPE_JSON;
row = tmp;
SArray
*
tags
=
taosArrayInit
(
1
,
sizeof
(
STagVal
));
parseJsontoTagData
(
rightv
,
tags
,
NULL
);
STag
*
row
=
NULL
;
tTagNew
(
tags
,
1
,
true
,
&
row
);
const
int32_t
len
=
9
;
const
int32_t
len1
=
4
;
...
...
@@ -1306,10 +1291,9 @@ TEST(columnTest, json_column_logic_op) {
taosMemoryFree
(
rightData
);
}
t
dDestroyKVRowBuilder(&kvRowBuilder
);
t
aosArrayDestroy
(
tags
);
taosMemoryFree
(
row
);
}
#endif
TEST
(
columnTest
,
smallint_value_add_int_column
)
{
scltInitLogFile
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录