Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
358279cb
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1185
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,发现更多精彩内容 >>
提交
358279cb
编写于
10月 28, 2020
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-1826]
上级
1ab1702b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
12 deletion
+44
-12
src/client/src/tscServer.c
src/client/src/tscServer.c
+6
-2
src/client/src/tscSubquery.c
src/client/src/tscSubquery.c
+38
-10
未找到文件。
src/client/src/tscServer.c
浏览文件 @
358279cb
...
@@ -553,8 +553,12 @@ static int32_t tscEstimateQueryMsgSize(SSqlCmd *pCmd, int32_t clauseIndex) {
...
@@ -553,8 +553,12 @@ static int32_t tscEstimateQueryMsgSize(SSqlCmd *pCmd, int32_t clauseIndex) {
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
size_t
numOfExprs
=
tscSqlExprNumOfExprs
(
pQueryInfo
);
int32_t
exprSize
=
(
int32_t
)(
sizeof
(
SSqlFuncMsg
)
*
numOfExprs
);
int32_t
exprSize
=
(
int32_t
)(
sizeof
(
SSqlFuncMsg
)
*
numOfExprs
);
return
MIN_QUERY_MSG_PKT_SIZE
+
minMsgSize
()
+
sizeof
(
SQueryTableMsg
)
+
srcColListSize
+
exprSize
+
4096
;
int32_t
tsBufSize
=
(
pQueryInfo
->
tsBuf
!=
NULL
)
?
pQueryInfo
->
tsBuf
->
fileSize
:
0
;
// todo calculate the size of required space for multi-table
// int32_t numOfTables = pQueryInfo->pTableMetaInfo[0]->pVgroupTables->pData;
return
MIN_QUERY_MSG_PKT_SIZE
+
minMsgSize
()
+
sizeof
(
SQueryTableMsg
)
+
srcColListSize
+
exprSize
+
tsBufSize
+
4096
;
}
}
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
)
{
static
char
*
doSerializeTableInfo
(
SQueryTableMsg
*
pQueryMsg
,
SSqlObj
*
pSql
,
char
*
pMsg
)
{
...
...
src/client/src/tscSubquery.c
浏览文件 @
358279cb
...
@@ -460,18 +460,36 @@ static void updateQueryTimeRange(SQueryInfo* pQueryInfo, STimeWindow* win) {
...
@@ -460,18 +460,36 @@ static void updateQueryTimeRange(SQueryInfo* pQueryInfo, STimeWindow* win) {
}
}
int32_t
t
scCompareTidTags
(
const
void
*
p1
,
const
void
*
p2
)
{
int32_t
t
idTagsCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
const
STidTags
*
t1
=
(
const
STidTags
*
)
varDataVal
(
p1
);
const
STidTags
*
t1
=
(
const
STidTags
*
)
(
p1
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
varDataVal
(
p2
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
(
p2
);
if
(
t1
->
vgId
!=
t2
->
vgId
)
{
if
(
t1
->
vgId
!=
t2
->
vgId
)
{
return
(
t1
->
vgId
>
t2
->
vgId
)
?
1
:
-
1
;
return
(
t1
->
vgId
>
t2
->
vgId
)
?
1
:
-
1
;
}
}
if
(
t1
->
tid
!=
t2
->
tid
)
{
tstr
*
tag1
=
(
tstr
*
)
t1
->
tag
;
return
(
t1
->
tid
>
t2
->
tid
)
?
1
:
-
1
;
tstr
*
tag2
=
(
tstr
*
)
t2
->
tag
;
if
(
tag1
->
len
!=
tag2
->
len
)
{
return
(
tag1
->
len
>
tag2
->
len
)
?
1
:
-
1
;
}
return
strncmp
(
tag1
->
data
,
tag2
->
data
,
tag1
->
len
);
}
int32_t
tagValCompar
(
const
void
*
p1
,
const
void
*
p2
)
{
const
STidTags
*
t1
=
(
const
STidTags
*
)
varDataVal
(
p1
);
const
STidTags
*
t2
=
(
const
STidTags
*
)
varDataVal
(
p2
);
tstr
*
tag1
=
(
tstr
*
)
t1
->
tag
;
tstr
*
tag2
=
(
tstr
*
)
t2
->
tag
;
if
(
tag1
->
len
!=
tag2
->
len
)
{
return
(
tag1
->
len
>
tag2
->
len
)
?
1
:
-
1
;
}
}
return
0
;
return
strncmp
(
tag1
->
data
,
tag2
->
data
,
tag1
->
len
);
}
}
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
)
{
void
tscBuildVgroupTableInfo
(
SSqlObj
*
pSql
,
STableMetaInfo
*
pTableMetaInfo
,
SArray
*
tables
)
{
...
@@ -587,8 +605,9 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
...
@@ -587,8 +605,9 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
SJoinSupporter
*
p1
=
pParentSql
->
pSubs
[
0
]
->
param
;
SJoinSupporter
*
p1
=
pParentSql
->
pSubs
[
0
]
->
param
;
SJoinSupporter
*
p2
=
pParentSql
->
pSubs
[
1
]
->
param
;
SJoinSupporter
*
p2
=
pParentSql
->
pSubs
[
1
]
->
param
;
qsort
(
p1
->
pIdTagList
,
p1
->
num
,
p1
->
tagSize
,
tscCompareTidTags
);
// sort according to the tag value
qsort
(
p2
->
pIdTagList
,
p2
->
num
,
p2
->
tagSize
,
tscCompareTidTags
);
qsort
(
p1
->
pIdTagList
,
p1
->
num
,
p1
->
tagSize
,
tagValCompar
);
qsort
(
p2
->
pIdTagList
,
p2
->
num
,
p2
->
tagSize
,
tagValCompar
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
STableMetaInfo
*
pTableMetaInfo
=
tscGetMetaInfo
(
pQueryInfo
,
0
);
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pQueryInfo
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
int16_t
tagColId
=
tscGetJoinTagColIdByUid
(
&
pQueryInfo
->
tagCond
,
pTableMetaInfo
->
pTableMeta
->
id
.
uid
);
...
@@ -596,8 +615,9 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
...
@@ -596,8 +615,9 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
SSchema
*
pColSchema
=
tscGetTableColumnSchemaById
(
pTableMetaInfo
->
pTableMeta
,
tagColId
);
SSchema
*
pColSchema
=
tscGetTableColumnSchemaById
(
pTableMetaInfo
->
pTableMeta
,
tagColId
);
// int16_t for padding
// int16_t for padding
*
s1
=
taosArrayInit
(
p1
->
num
,
p1
->
tagSize
-
sizeof
(
int16_t
));
int32_t
size
=
p1
->
tagSize
-
sizeof
(
int16_t
);
*
s2
=
taosArrayInit
(
p2
->
num
,
p2
->
tagSize
-
sizeof
(
int16_t
));
*
s1
=
taosArrayInit
(
p1
->
num
,
size
);
*
s2
=
taosArrayInit
(
p2
->
num
,
size
);
if
(
!
(
checkForDuplicateTagVal
(
pColSchema
,
p1
,
pParentSql
)
&&
checkForDuplicateTagVal
(
pColSchema
,
p2
,
pParentSql
)))
{
if
(
!
(
checkForDuplicateTagVal
(
pColSchema
,
p1
,
pParentSql
)
&&
checkForDuplicateTagVal
(
pColSchema
,
p2
,
pParentSql
)))
{
return
TSDB_CODE_QRY_DUP_JOIN_KEY
;
return
TSDB_CODE_QRY_DUP_JOIN_KEY
;
...
@@ -625,6 +645,14 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
...
@@ -625,6 +645,14 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
}
}
}
}
// reorganize the tid-tag value according to both the vgroup id and tag values
// sort according to the tag value
size_t
t1
=
taosArrayGetSize
(
*
s1
);
size_t
t2
=
taosArrayGetSize
(
*
s2
);
qsort
((
*
s1
)
->
pData
,
t1
,
size
,
tidTagsCompar
);
qsort
((
*
s2
)
->
pData
,
t2
,
size
,
tidTagsCompar
);
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录