Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
48c73b38
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看板
提交
48c73b38
编写于
3月 01, 2020
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix invalid free bug.
上级
56b7a132
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
182 addition
and
220 deletion
+182
-220
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+0
-1
src/client/src/tscFunctionImpl.c
src/client/src/tscFunctionImpl.c
+5
-5
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+153
-155
src/client/src/tscSql.c
src/client/src/tscSql.c
+6
-18
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+10
-33
src/inc/taosmsg.h
src/inc/taosmsg.h
+1
-1
src/system/detail/src/vnodeRead.c
src/system/detail/src/vnodeRead.c
+1
-1
src/system/detail/src/vnodeUtil.c
src/system/detail/src/vnodeUtil.c
+6
-6
未找到文件。
src/client/inc/tscUtil.h
浏览文件 @
48c73b38
...
...
@@ -132,7 +132,6 @@ void tscFieldInfoSetExpr(SFieldInfo* pFieldInfo, int32_t index, SSqlExpr* pExpr)
void
tscFieldInfoSetBinExpr
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
,
SSqlFunctionExpr
*
pExpr
);
void
tscFieldInfoCalOffset
(
SQueryInfo
*
pQueryInfo
);
void
tscFieldInfoUpdateOffsetForInterResult
(
SQueryInfo
*
pQueryInfo
);
void
tscFieldInfoCopy
(
SFieldInfo
*
src
,
SFieldInfo
*
dst
,
const
int32_t
*
indexList
,
int32_t
size
);
void
tscFieldInfoCopyAll
(
SFieldInfo
*
dst
,
SFieldInfo
*
src
);
...
...
src/client/src/tscFunctionImpl.c
浏览文件 @
48c73b38
...
...
@@ -3304,9 +3304,9 @@ char *arithmetic_callback_function(void *param, char *name, int32_t colId) {
SSqlFunctionExpr
*
pExpr
=
pSupport
->
pExpr
;
int32_t
colIndexInBuf
=
-
1
;
for
(
int32_t
i
=
0
;
i
<
pExpr
->
pB
inExprInfo
.
numOfCols
;
++
i
)
{
if
(
colId
==
pExpr
->
pB
inExprInfo
.
pReqColumns
[
i
].
colId
)
{
colIndexInBuf
=
pExpr
->
pB
inExprInfo
.
pReqColumns
[
i
].
colIdxInBuf
;
for
(
int32_t
i
=
0
;
i
<
pExpr
->
b
inExprInfo
.
numOfCols
;
++
i
)
{
if
(
colId
==
pExpr
->
b
inExprInfo
.
pReqColumns
[
i
].
colId
)
{
colIndexInBuf
=
pExpr
->
b
inExprInfo
.
pReqColumns
[
i
].
colIdxInBuf
;
break
;
}
}
...
...
@@ -3319,7 +3319,7 @@ static void arithmetic_function(SQLFunctionCtx *pCtx) {
GET_RES_INFO
(
pCtx
)
->
numOfRes
+=
pCtx
->
size
;
SArithmeticSupport
*
sas
=
(
SArithmeticSupport
*
)
pCtx
->
param
[
1
].
pz
;
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
pB
inExprInfo
.
pBinExpr
,
pCtx
->
size
,
pCtx
->
aOutputBuf
,
sas
,
pCtx
->
order
,
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
b
inExprInfo
.
pBinExpr
,
pCtx
->
size
,
pCtx
->
aOutputBuf
,
sas
,
pCtx
->
order
,
arithmetic_callback_function
);
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
*
pCtx
->
size
;
...
...
@@ -3331,7 +3331,7 @@ static void arithmetic_function_f(SQLFunctionCtx *pCtx, int32_t index) {
SArithmeticSupport
*
sas
=
(
SArithmeticSupport
*
)
pCtx
->
param
[
1
].
pz
;
sas
->
offset
=
index
;
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
pB
inExprInfo
.
pBinExpr
,
1
,
pCtx
->
aOutputBuf
,
sas
,
pCtx
->
order
,
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
b
inExprInfo
.
pBinExpr
,
1
,
pCtx
->
aOutputBuf
,
sas
,
pCtx
->
order
,
arithmetic_callback_function
);
pCtx
->
aOutputBuf
+=
pCtx
->
outputBytes
/* * GET_FORWARD_DIRECTION_FACTOR(pCtx->order)*/
;
...
...
src/client/src/tscSQLParser.c
浏览文件 @
48c73b38
...
...
@@ -19,10 +19,10 @@
#include "os.h"
#include "taos.h"
#include "taosmsg.h"
#include "tast.h"
#include "tstoken.h"
#include "tstrbuild.h"
#include "ttime.h"
#include "tast.h"
#include "tscSQLParser.h"
#include "tscUtil.h"
...
...
@@ -68,10 +68,8 @@ static int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprLis
static
bool
validateIpAddress
(
const
char
*
ip
,
size_t
size
);
static
bool
hasUnsupportFunctionsForSTableQuery
(
SQueryInfo
*
pQueryInfo
);
static
bool
functionCompatibleCheck
(
SQueryInfo
*
pQueryInfo
);
static
void
setColumnOffsetValueInResultset
(
SQueryInfo
*
pQueryInfo
);
static
int32_t
parseGroupbyClause
(
SQueryInfo
*
pQueryInfo
,
tVariantList
*
pList
,
SSqlCmd
*
pCmd
);
static
int32_t
parseIntervalClause
(
SQueryInfo
*
pQueryInfo
,
SQuerySQL
*
pQuerySql
);
static
int32_t
parseSlidingClause
(
SQueryInfo
*
pQueryInfo
,
SQuerySQL
*
pQuerySql
);
...
...
@@ -115,7 +113,7 @@ static int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo);
static
int32_t
doCheckForStream
(
SSqlObj
*
pSql
,
SSqlInfo
*
pInfo
);
static
int32_t
doCheckForQuery
(
SSqlObj
*
pSql
,
SQuerySQL
*
pQuerySql
,
int32_t
index
);
static
int32_t
tSQLBinaryExprCreateFromSqlExpr
(
tSQLSyntaxNode
**
pExpr
,
tSQLExpr
*
pAst
,
int32_t
*
num
,
static
int32_t
tSQLBinaryExprCreateFromSqlExpr
(
tSQLSyntaxNode
**
pExpr
,
tSQLExpr
*
pAst
,
int32_t
*
num
,
SColIndexEx
**
pColIndex
,
SSqlExprInfo
*
pExprInfo
);
/*
...
...
@@ -660,12 +658,13 @@ int32_t parseIntervalClause(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql) {
}
SColumnIndex
index
=
{
tableIndex
,
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS
,
&
index
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS
,
&
index
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
strcpy
(
pExpr
->
aliasName
,
aAggs
[
TSDB_FUNC_TS
].
aName
);
SColumnList
ids
=
getColumnList
(
1
,
0
,
PRIMARYKEY_TIMESTAMP_COL_INDEX
);
int32_t
ret
=
insertResultField
(
pQueryInfo
,
0
,
&
ids
,
TSDB_KEYSIZE
,
TSDB_DATA_TYPE_TIMESTAMP
,
aAggs
[
TSDB_FUNC_TS
].
aName
,
pExpr
);
int32_t
ret
=
insertResultField
(
pQueryInfo
,
0
,
&
ids
,
TSDB_KEYSIZE
,
TSDB_DATA_TYPE_TIMESTAMP
,
pExpr
->
aliasName
,
pExpr
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
return
ret
;
}
...
...
@@ -1104,6 +1103,33 @@ static void extractColumnNameFromString(tSQLExprItem* pItem) {
}
}
static
void
doUpdateArithmeticColumnIndex
(
SQueryInfo
*
pQueryInfo
,
SSqlBinaryExprInfo
*
pBinExprInfo
)
{
for
(
int32_t
k
=
0
;
k
<
pBinExprInfo
->
numOfCols
;
++
k
)
{
SColIndexEx
*
pCol
=
&
pBinExprInfo
->
pReqColumns
[
k
];
for
(
int32_t
f
=
0
;
f
<
pQueryInfo
->
exprsInfo
.
numOfExprs
;
++
f
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
f
);
if
(
strcmp
(
pExpr
->
aliasName
,
pCol
->
name
)
==
0
)
{
pCol
->
colIdxInBuf
=
f
;
break
;
}
}
assert
(
pCol
->
colIdxInBuf
>=
0
&&
pCol
->
colIdxInBuf
<
pQueryInfo
->
exprsInfo
.
numOfExprs
);
}
}
static
void
updateArithmeticColIndex
(
SQueryInfo
*
pQueryInfo
)
{
int32_t
output
=
tscNumOfFields
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
output
;
++
i
)
{
SSqlFunctionExpr
*
pBinExprInfo
=
pQueryInfo
->
fieldsInfo
.
pExpr
[
i
];
if
(
pBinExprInfo
==
NULL
)
{
continue
;
}
doUpdateArithmeticColumnIndex
(
pQueryInfo
,
&
pBinExprInfo
->
binExprInfo
);
}
}
int32_t
parseSelectClause
(
SSqlCmd
*
pCmd
,
int32_t
clauseIndex
,
tSQLExprList
*
pSelection
,
bool
isSTable
)
{
assert
(
pSelection
!=
NULL
&&
pCmd
!=
NULL
);
...
...
@@ -1149,40 +1175,39 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
return
invalidSqlErrMsg
(
pQueryInfo
->
msg
,
msg1
);
}
int32_t
tableIndex
=
columnList
.
ids
[
0
].
tableIndex
;
char
arithmeticExprStr
[
1024
]
=
{
0
};
char
*
p
=
arithmeticExprStr
;
if
(
arithmeticType
==
NORMAL_ARITHMETIC
)
{
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
// all columns in arithmetic expression must belong to the same table
int32_t
tableIndex
=
columnList
.
ids
[
0
].
tableIndex
;
for
(
int32_t
f
=
1
;
f
<
columnList
.
num
;
++
f
)
{
if
(
columnList
.
ids
[
f
].
tableIndex
!=
tableIndex
)
{
return
invalidSqlErrMsg
(
pQueryInfo
->
msg
,
msg4
);
}
}
char
exprStr
[
1024
]
=
{
0
};
char
*
p
=
exprStr
;
if
(
buildArithmeticExprString
(
pItem
->
pNode
,
&
p
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_INVALID_SQL
;
}
if
(
arithmeticType
==
NORMAL_ARITHMETIC
)
{
pQueryInfo
->
type
|=
TSDB_QUERY_TYPE_PROJECTION_QUERY
;
// expr string is set as the parameter of function
SColumnIndex
index
=
{.
tableIndex
=
tableIndex
};
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
outputIndex
,
TSDB_FUNC_ARITHM
,
&
index
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
sizeof
(
double
));
addExprParams
(
pExpr
,
arithmeticExprStr
,
TSDB_DATA_TYPE_BINARY
,
strlen
(
arithmeticE
xprStr
),
index
.
tableIndex
);
addExprParams
(
pExpr
,
exprStr
,
TSDB_DATA_TYPE_BINARY
,
strlen
(
e
xprStr
),
index
.
tableIndex
);
/* todo alias name should use the original sql string */
char
*
name
=
(
pItem
->
aliasName
!=
NULL
)
?
pItem
->
aliasName
:
arithmeticE
xprStr
;
char
*
name
=
(
pItem
->
aliasName
!=
NULL
)
?
pItem
->
aliasName
:
e
xprStr
;
strncpy
(
pExpr
->
aliasName
,
name
,
TSDB_COL_NAME_LEN
);
insertResultField
(
pQueryInfo
,
i
,
&
columnList
,
sizeof
(
double
),
TSDB_DATA_TYPE_DOUBLE
,
pExpr
->
aliasName
,
pExpr
);
}
else
{
columnList
.
num
=
0
;
columnList
.
ids
[
0
]
=
(
SColumnIndex
)
{
0
,
0
};
columnList
.
ids
[
0
]
=
(
SColumnIndex
){
0
,
0
};
insertResultField
(
pQueryInfo
,
i
,
&
columnList
,
sizeof
(
double
),
TSDB_DATA_TYPE_DOUBLE
,
"abc"
,
NULL
);
insertResultField
(
pQueryInfo
,
i
,
&
columnList
,
sizeof
(
double
),
TSDB_DATA_TYPE_DOUBLE
,
exprStr
,
NULL
);
int32_t
slot
=
tscNumOfFields
(
pQueryInfo
)
-
1
;
...
...
@@ -1195,40 +1220,24 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
pFuncExpr
->
interResBytes
=
sizeof
(
double
);
pFuncExpr
->
resType
=
TSDB_DATA_TYPE_DOUBLE
;
SSqlBinaryExprInfo
*
pBinExprInfo
=
&
pFuncExpr
->
pBinExprInfo
;
SSqlBinaryExprInfo
*
pBinExprInfo
=
&
pFuncExpr
->
binExprInfo
;
tSQLSyntaxNode
*
pNode
=
NULL
;
SColIndexEx
*
pColIndex
=
NULL
;
int32_t
ret
=
tSQLBinaryExprCreateFromSqlExpr
(
&
pNode
,
pItem
->
pNode
,
&
pBinExprInfo
->
numOfCols
,
&
pColIndex
,
&
pQueryInfo
->
exprsInfo
);
int32_t
ret
=
tSQLBinaryExprCreateFromSqlExpr
(
&
pNode
,
pItem
->
pNode
,
&
pBinExprInfo
->
numOfCols
,
&
pBinExprInfo
->
pReqColumns
,
&
pQueryInfo
->
exprsInfo
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tSQLBinaryExprDestroy
(
&
pNode
->
pExpr
,
NULL
);
return
invalidSqlErrMsg
(
pQueryInfo
->
msg
,
"invalid expression in select clause"
);
}
pBinExprInfo
->
pBinExpr
=
pNode
->
pExpr
;
pBinExprInfo
->
pReqColumns
=
pColIndex
;
for
(
int32_t
k
=
0
;
k
<
pBinExprInfo
->
numOfCols
;
++
k
)
{
SColIndexEx
*
pCol
=
&
pBinExprInfo
->
pReqColumns
[
k
];
for
(
int32_t
f
=
0
;
f
<
pQueryInfo
->
exprsInfo
.
numOfExprs
;
++
f
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
f
);
if
(
strcmp
(
pExpr
->
aliasName
,
pCol
->
name
)
==
0
)
{
pCol
->
colIdxInBuf
=
f
;
break
;
}
}
doUpdateArithmeticColumnIndex
(
pQueryInfo
,
pBinExprInfo
);
assert
(
pCol
->
colIdxInBuf
>=
0
&&
pCol
->
colIdxInBuf
<
pQueryInfo
->
exprsInfo
.
numOfExprs
);
tfree
(
pNode
);
}
}
}
}
else
{
/*
* not support such expression
* e.g., select 12+5 from table_name
*/
// not support such expression e.g., select 12+5 from table_name
return
invalidSqlErrMsg
(
pQueryInfo
->
msg
,
msg3
);
}
...
...
@@ -1264,8 +1273,8 @@ int32_t parseSelectClause(SSqlCmd* pCmd, int32_t clauseIndex, tSQLExprList* pSel
return
TSDB_CODE_SUCCESS
;
}
int32_t
insertResultField
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pIdList
,
int16_t
bytes
,
int8_t
type
,
char
*
fieldName
,
SSqlExpr
*
pSqlExpr
)
{
int32_t
insertResultField
(
SQueryInfo
*
pQueryInfo
,
int32_t
outputIndex
,
SColumnList
*
pIdList
,
int16_t
bytes
,
int8_t
type
,
char
*
fieldName
,
SSqlExpr
*
pSqlExpr
)
{
for
(
int32_t
i
=
0
;
i
<
pIdList
->
num
;
++
i
)
{
tscColumnBaseInfoInsert
(
pQueryInfo
,
&
(
pIdList
->
ids
[
i
]));
}
...
...
@@ -1566,7 +1575,8 @@ int32_t addExprAndResultField(SQueryInfo* pQueryInfo, int32_t colIdx, tSQLExprIt
SColumnList
ids
=
getColumnList
(
1
,
index
.
tableIndex
,
index
.
columnIndex
);
if
(
finalResult
)
{
int32_t
numOfOutput
=
tscNumOfFields
(
pQueryInfo
);
insertResultField
(
pQueryInfo
,
numOfOutput
,
&
ids
,
sizeof
(
int64_t
),
TSDB_DATA_TYPE_BIGINT
,
pExpr
->
aliasName
,
pExpr
);
insertResultField
(
pQueryInfo
,
numOfOutput
,
&
ids
,
sizeof
(
int64_t
),
TSDB_DATA_TYPE_BIGINT
,
pExpr
->
aliasName
,
pExpr
);
}
else
{
for
(
int32_t
i
=
0
;
i
<
ids
.
num
;
++
i
)
{
tscColumnBaseInfoInsert
(
pQueryInfo
,
&
(
ids
.
ids
[
i
]));
...
...
@@ -1634,11 +1644,12 @@ int32_t addExprAndResultField(SQueryInfo* pQueryInfo, int32_t colIdx, tSQLExprIt
if
(
optr
==
TK_DIFF
)
{
colIdx
+=
1
;
SColumnIndex
indexTS
=
{.
tableIndex
=
index
.
tableIndex
,
.
columnIndex
=
0
};
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS_DUMMY
,
&
indexTS
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS_DUMMY
,
&
indexTS
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
SColumnList
ids
=
getColumnList
(
1
,
0
,
0
);
insertResultField
(
pQueryInfo
,
0
,
&
ids
,
TSDB_KEYSIZE
,
TSDB_DATA_TYPE_TIMESTAMP
,
aAggs
[
TSDB_FUNC_TS_DUMMY
].
aName
,
pExpr
);
insertResultField
(
pQueryInfo
,
0
,
&
ids
,
TSDB_KEYSIZE
,
TSDB_DATA_TYPE_TIMESTAMP
,
aAggs
[
TSDB_FUNC_TS_DUMMY
].
aName
,
pExpr
);
}
// functions can not be applied to tags
...
...
@@ -1852,7 +1863,8 @@ int32_t addExprAndResultField(SQueryInfo* pQueryInfo, int32_t colIdx, tSQLExprIt
// set the first column ts for top/bottom query
SColumnIndex
index1
=
{
0
,
PRIMARYKEY_TIMESTAMP_COL_INDEX
};
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS
,
&
index1
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
0
,
TSDB_FUNC_TS
,
&
index1
,
TSDB_DATA_TYPE_TIMESTAMP
,
TSDB_KEYSIZE
,
TSDB_KEYSIZE
);
const
int32_t
TS_COLUMN_INDEX
=
0
;
SColumnList
ids
=
getColumnList
(
1
,
0
,
TS_COLUMN_INDEX
);
...
...
@@ -2273,7 +2285,7 @@ int32_t tscTansformSQLFunctionForSTableQuery(SQueryInfo* pQueryInfo) {
}
}
tscFieldInfo
UpdateOffsetForInterResul
t
(
pQueryInfo
);
tscFieldInfo
CalOffse
t
(
pQueryInfo
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2288,12 +2300,9 @@ void tscRestoreSQLFunctionForMetricQuery(SQueryInfo* pQueryInfo) {
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
i
);
SSchema
*
pSchema
=
tsGetColumnSchema
(
pMeterMetaInfo
->
pMeterMeta
,
pExpr
->
colInfo
.
colIdx
);
// if (/*(pExpr->functionId >= TSDB_FUNC_FIRST_DST && pExpr->functionId <= TSDB_FUNC_LAST_DST) ||
// (pExpr->functionId >= TSDB_FUNC_SUM && pExpr->functionId <= TSDB_FUNC_MAX) ||
// pExpr->functionId == TSDB_FUNC_LAST_ROW*/) {
// the final result size and type in the same as query on single table.
// so here, set the flag to be false
;
int16_t
inter
=
0
;
// so here, set the flag to be FALSE
;
int16_t
size
=
0
;
int32_t
functionId
=
pExpr
->
functionId
;
if
(
functionId
>=
TSDB_FUNC_TS
&&
functionId
<=
TSDB_FUNC_DIFF
)
{
...
...
@@ -2306,9 +2315,7 @@ void tscRestoreSQLFunctionForMetricQuery(SQueryInfo* pQueryInfo) {
functionId
=
TSDB_FUNC_LAST
;
}
getResultDataInfo
(
pSchema
->
type
,
pSchema
->
bytes
,
functionId
,
0
,
&
pExpr
->
resType
,
&
pExpr
->
resBytes
,
&
inter
,
0
,
false
);
// }
getResultDataInfo
(
pSchema
->
type
,
pSchema
->
bytes
,
functionId
,
0
,
&
pExpr
->
resType
,
&
pExpr
->
resBytes
,
&
size
,
0
,
false
);
}
}
...
...
@@ -2534,14 +2541,6 @@ int32_t parseGroupbyClause(SQueryInfo* pQueryInfo, tVariantList* pList, SSqlCmd*
return
TSDB_CODE_SUCCESS
;
}
void
setColumnOffsetValueInResultset
(
SQueryInfo
*
pQueryInfo
)
{
if
(
QUERY_IS_STABLE_QUERY
(
pQueryInfo
->
type
))
{
tscFieldInfoUpdateOffsetForInterResult
(
pQueryInfo
);
}
else
{
tscFieldInfoCalOffset
(
pQueryInfo
);
}
}
static
SColumnFilterInfo
*
addColumnFilterInfo
(
SColumnBase
*
pColumn
)
{
if
(
pColumn
==
NULL
)
{
return
NULL
;
...
...
@@ -3979,9 +3978,8 @@ int32_t parseFillClause(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySQL) {
numOfFillVal
=
pQueryInfo
->
exprsInfo
.
numOfExprs
;
}
}
else
{
numOfFillVal
=
(
pFillToken
->
nExpr
>
pQueryInfo
->
exprsInfo
.
numOfExprs
)
?
pQueryInfo
->
exprsInfo
.
numOfExprs
:
pFillToken
->
nExpr
;
numOfFillVal
=
(
pFillToken
->
nExpr
>
pQueryInfo
->
exprsInfo
.
numOfExprs
)
?
pQueryInfo
->
exprsInfo
.
numOfExprs
:
pFillToken
->
nExpr
;
}
int32_t
j
=
1
;
...
...
@@ -4821,8 +4819,7 @@ void addGroupInfoForSubquery(SSqlObj* pParentObj, SSqlObj* pSql, int32_t subClau
int16_t
bytes
=
pSchema
[
index
.
columnIndex
].
bytes
;
char
*
name
=
pSchema
[
index
.
columnIndex
].
name
;
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
,
TSDB_FUNC_TAG
,
&
index
,
type
,
bytes
,
bytes
);
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
,
TSDB_FUNC_TAG
,
&
index
,
type
,
bytes
,
bytes
);
pExpr
->
colInfo
.
flag
=
TSDB_COL_TAG
;
// NOTE: tag column does not add to source column list
...
...
@@ -5086,14 +5083,14 @@ static int32_t doAddGroupbyColumnsOnDemand(SQueryInfo* pQueryInfo) {
if
(
TSDB_COL_IS_TAG
(
pColIndex
->
flag
))
{
SColumnIndex
index
=
{.
tableIndex
=
pQueryInfo
->
groupbyExpr
.
tableIndex
,
.
columnIndex
=
colIndex
};
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
,
TSDB_FUNC_TAG
,
&
index
,
type
,
bytes
,
bytes
);
SSqlExpr
*
pExpr
=
tscSqlExprInsert
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
,
TSDB_FUNC_TAG
,
&
index
,
type
,
bytes
,
bytes
);
pExpr
->
colInfo
.
flag
=
TSDB_COL_TAG
;
// NOTE: tag column does not add to source column list
SColumnList
ids
=
{
0
};
insertResultField
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
-
1
,
&
ids
,
bytes
,
type
,
name
,
pExpr
);
insertResultField
(
pQueryInfo
,
pQueryInfo
->
exprsInfo
.
numOfExprs
-
1
,
&
ids
,
bytes
,
type
,
name
,
pExpr
);
}
else
{
// if this query is "group by" normal column, interval is not allowed
if
(
pQueryInfo
->
intervalTime
>
0
)
{
...
...
@@ -5232,7 +5229,7 @@ int32_t doLocalQueryProcess(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql) {
}
SSqlExpr
*
pExpr1
=
tscSqlExprInsertEmpty
(
pQueryInfo
,
0
,
TSDB_FUNC_TAG_DUMMY
);
const
char
*
name
=
(
pExprList
->
a
[
0
].
aliasName
!=
NULL
)
?
pExprList
->
a
[
0
].
aliasName
:
functionsInfo
[
index
].
name
;
const
char
*
name
=
(
pExprList
->
a
[
0
].
aliasName
!=
NULL
)
?
pExprList
->
a
[
0
].
aliasName
:
functionsInfo
[
index
].
name
;
strncpy
(
pExpr1
->
aliasName
,
name
,
tListLen
(
pExpr1
->
aliasName
));
switch
(
index
)
{
...
...
@@ -5747,7 +5744,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
return
code
;
}
setColumnOffsetValueInResultset
(
pQueryInfo
);
tscFieldInfoCalOffset
(
pQueryInfo
);
updateArithmeticColIndex
(
pQueryInfo
);
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
updateTagColumnIndex
(
pQueryInfo
,
i
);
...
...
@@ -5779,10 +5777,10 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
return
TSDB_CODE_SUCCESS
;
// Does not build query message here
}
static
int32_t
tSQLBinaryExprCreateFromSqlExpr
(
tSQLSyntaxNode
**
pExpr
,
tSQLExpr
*
pAst
,
int32_t
*
num
,
static
int32_t
tSQLBinaryExprCreateFromSqlExpr
(
tSQLSyntaxNode
**
pExpr
,
tSQLExpr
*
pAst
,
int32_t
*
num
,
SColIndexEx
**
pColIndex
,
SSqlExprInfo
*
pExprInfo
)
{
tSQLSyntaxNode
*
pLeft
=
NULL
;
tSQLSyntaxNode
*
pRight
=
NULL
;
tSQLSyntaxNode
*
pRight
=
NULL
;
if
(
pAst
->
pLeft
!=
NULL
)
{
int32_t
ret
=
tSQLBinaryExprCreateFromSqlExpr
(
&
pLeft
,
pAst
->
pLeft
,
num
,
pColIndex
,
pExprInfo
);
...
...
@@ -5802,7 +5800,7 @@ static int32_t tSQLBinaryExprCreateFromSqlExpr(tSQLSyntaxNode **pExpr, tSQLExpr*
if
(
pAst
->
nSQLOptr
>=
TK_TINYINT
&&
pAst
->
nSQLOptr
<=
TK_DOUBLE
)
{
*
pExpr
=
calloc
(
1
,
sizeof
(
tSQLSyntaxNode
)
+
sizeof
(
tVariant
));
(
*
pExpr
)
->
nodeType
=
TSQL_NODE_VALUE
;
(
*
pExpr
)
->
pVal
=
(
tVariant
*
)
((
char
*
)(
*
pExpr
)
+
sizeof
(
tSQLSyntaxNode
));
(
*
pExpr
)
->
pVal
=
(
tVariant
*
)((
char
*
)(
*
pExpr
)
+
sizeof
(
tSQLSyntaxNode
));
tVariantAssign
((
*
pExpr
)
->
pVal
,
&
pAst
->
val
);
}
else
if
(
pAst
->
nSQLOptr
>=
TK_COUNT
&&
pAst
->
nSQLOptr
<=
TK_AVG_IRATE
)
{
*
pExpr
=
calloc
(
1
,
sizeof
(
tSQLSyntaxNode
)
+
sizeof
(
SSchemaEx
));
...
...
@@ -5818,7 +5816,7 @@ static int32_t tSQLBinaryExprCreateFromSqlExpr(tSQLSyntaxNode **pExpr, tSQLExpr*
break
;
}
}
}
else
{
//
todo return error
}
else
{
//
todo return error
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -5829,7 +5827,7 @@ static int32_t tSQLBinaryExprCreateFromSqlExpr(tSQLSyntaxNode **pExpr, tSQLExpr*
strncpy
((
*
pColIndex
)[(
*
num
)
-
1
].
name
,
pAst
->
operand
.
z
,
pAst
->
operand
.
n
);
}
else
{
tSQLBinaryExpr
*
pBinExpr
=
(
tSQLBinaryExpr
*
)
calloc
(
1
,
sizeof
(
tSQLBinaryExpr
));
tSQLBinaryExpr
*
pBinExpr
=
(
tSQLBinaryExpr
*
)
calloc
(
1
,
sizeof
(
tSQLBinaryExpr
));
pBinExpr
->
filterOnPrimaryKey
=
false
;
pBinExpr
->
pLeft
=
pLeft
;
pBinExpr
->
pRight
=
pRight
;
...
...
src/client/src/tscSql.c
浏览文件 @
48c73b38
...
...
@@ -404,14 +404,14 @@ static char *getArithemicInputSrc(void *param, char *name, int32_t colId) {
SSqlFunctionExpr
*
pExpr
=
pSupport
->
pExpr
;
int32_t
index
=
-
1
;
for
(
int32_t
i
=
0
;
i
<
pExpr
->
pB
inExprInfo
.
numOfCols
;
++
i
)
{
if
(
strcmp
(
name
,
pExpr
->
pB
inExprInfo
.
pReqColumns
[
i
].
name
)
==
0
)
{
for
(
int32_t
i
=
0
;
i
<
pExpr
->
b
inExprInfo
.
numOfCols
;
++
i
)
{
if
(
strcmp
(
name
,
pExpr
->
b
inExprInfo
.
pReqColumns
[
i
].
name
)
==
0
)
{
index
=
i
;
break
;
}
}
assert
(
index
>=
0
&&
index
<
pExpr
->
pB
inExprInfo
.
numOfCols
);
assert
(
index
>=
0
&&
index
<
pExpr
->
b
inExprInfo
.
numOfCols
);
return
pSupport
->
data
[
index
]
+
pSupport
->
offset
*
pSupport
->
elemSize
[
index
];
}
...
...
@@ -428,23 +428,11 @@ static void **doSetResultRowData(SSqlObj *pSql) {
SQueryInfo
*
pQueryInfo
=
tscGetQueryInfoDetail
(
pCmd
,
pCmd
->
clauseIndex
);
//todo refactor move away
for
(
int32_t
k
=
0
;
k
<
pQueryInfo
->
exprsInfo
.
numOfExprs
;
++
k
)
{
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
k
);
if
(
k
>
0
)
{
SSqlExpr
*
pPrev
=
tscSqlExprGet
(
pQueryInfo
,
k
-
1
);
pExpr
->
offset
=
pPrev
->
offset
+
pPrev
->
resBytes
;
}
}
int32_t
num
=
0
;
for
(
int
i
=
0
;
i
<
tscNumOfFields
(
pQueryInfo
);
++
i
)
{
if
(
pQueryInfo
->
fieldsInfo
.
pSqlExpr
[
i
]
!=
NULL
)
{
SSqlExpr
*
pExpr
=
pQueryInfo
->
fieldsInfo
.
pSqlExpr
[
i
];
pRes
->
tsrow
[
i
]
=
TSC_GET_RESPTR_BASE
(
pRes
,
pQueryInfo
,
i
)
+
pExpr
->
resBytes
*
pRes
->
row
;
}
else
{
assert
(
0
);
}
// primary key column cannot be null in interval query, no need to check
...
...
@@ -461,21 +449,21 @@ static void **doSetResultRowData(SSqlObj *pSql) {
sas
->
offset
=
0
;
sas
->
pExpr
=
pQueryInfo
->
fieldsInfo
.
pExpr
[
i
];
sas
->
numOfCols
=
sas
->
pExpr
->
pB
inExprInfo
.
numOfCols
;
sas
->
numOfCols
=
sas
->
pExpr
->
b
inExprInfo
.
numOfCols
;
if
(
pRes
->
buffer
[
i
]
==
NULL
)
{
pRes
->
buffer
[
i
]
=
malloc
(
tscFieldInfoGetField
(
pQueryInfo
,
i
)
->
bytes
);
}
for
(
int32_t
k
=
0
;
k
<
sas
->
numOfCols
;
++
k
)
{
int32_t
columnIndex
=
sas
->
pExpr
->
pB
inExprInfo
.
pReqColumns
[
k
].
colIdxInBuf
;
int32_t
columnIndex
=
sas
->
pExpr
->
b
inExprInfo
.
pReqColumns
[
k
].
colIdxInBuf
;
SSqlExpr
*
pExpr
=
tscSqlExprGet
(
pQueryInfo
,
columnIndex
);
sas
->
elemSize
[
k
]
=
pExpr
->
resBytes
;
sas
->
data
[
k
]
=
(
pRes
->
data
+
pRes
->
numOfRows
*
pExpr
->
offset
)
+
pRes
->
row
*
pExpr
->
resBytes
;
}
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
pB
inExprInfo
.
pBinExpr
,
1
,
pRes
->
buffer
[
i
],
sas
,
TSQL_SO_ASC
,
getArithemicInputSrc
);
tSQLBinaryExprCalcTraverse
(
sas
->
pExpr
->
b
inExprInfo
.
pBinExpr
,
1
,
pRes
->
buffer
[
i
],
sas
,
TSQL_SO_ASC
,
getArithemicInputSrc
);
pRes
->
tsrow
[
i
]
=
pRes
->
buffer
[
i
];
free
(
sas
);
//todo optimization
...
...
src/client/src/tscUtil.c
浏览文件 @
48c73b38
...
...
@@ -908,6 +908,9 @@ void tscFieldInfoSetValue(SFieldInfo* pFieldInfo, int32_t index, int8_t type, co
pFieldInfo
->
pVisibleCols
[
index
]
=
true
;
pFieldInfo
->
numOfOutputCols
++
;
pFieldInfo
->
pExpr
[
index
]
=
NULL
;
pFieldInfo
->
pSqlExpr
[
index
]
=
NULL
;
}
void
tscFieldInfoSetExpr
(
SFieldInfo
*
pFieldInfo
,
int32_t
index
,
SSqlExpr
*
pExpr
)
{
...
...
@@ -929,33 +932,6 @@ void tscFieldInfoCalOffset(SQueryInfo* pQueryInfo) {
}
}
void
tscFieldInfoUpdateOffsetForInterResult
(
SQueryInfo
*
pQueryInfo
)
{
// SFieldInfo* pFieldInfo = &pQueryInfo->fieldsInfo;
// if (pFieldInfo->numOfOutputCols == 0) {
// return;
// }
//
// pFieldInfo->pOffset[0] = 0;
//
// /*
// * the retTypeLen is used to store the intermediate result length
// * for potential secondary merge exists
// */
// for (int32_t i = 1; i < pFieldInfo->numOfOutputCols; ++i) {
// pFieldInfo->pOffset[i] = pFieldInfo->pOffset[i - 1] + tscSqlExprGet(pQueryInfo, i - 1)->resBytes;
// }
SSqlExprInfo
*
pExprInfo
=
&
pQueryInfo
->
exprsInfo
;
if
(
pExprInfo
->
numOfExprs
==
0
)
{
return
;
}
pExprInfo
->
pExprs
[
0
]
->
offset
=
0
;
for
(
int32_t
i
=
1
;
i
<
pExprInfo
->
numOfExprs
;
++
i
)
{
pExprInfo
->
pExprs
[
i
]
->
offset
=
pExprInfo
->
pExprs
[
i
-
1
]
->
offset
+
pExprInfo
->
pExprs
[
i
-
1
]
->
resBytes
;
}
}
void
tscFieldInfoCopy
(
SFieldInfo
*
src
,
SFieldInfo
*
dst
,
const
int32_t
*
indexList
,
int32_t
size
)
{
if
(
src
==
NULL
)
{
return
;
...
...
@@ -1049,10 +1025,11 @@ void tscClearFieldInfo(SFieldInfo* pFieldInfo) {
tfree
(
pFieldInfo
->
pSqlExpr
);
for
(
int32_t
i
=
0
;
i
<
pFieldInfo
->
numOfOutputCols
;
++
i
)
{
if
(
pFieldInfo
->
pExpr
[
i
]
!=
NULL
)
{
tSQLBinaryExprDestroy
(
&
pFieldInfo
->
pExpr
[
i
]
->
pBinExprInfo
.
pBinExpr
,
NULL
);
tfree
(
pFieldInfo
->
pExpr
[
i
]
->
pBinExprInfo
.
pReqColumns
);
tfree
(
pFieldInfo
->
pExpr
[
i
]);
SSqlFunctionExpr
*
pExpr
=
pFieldInfo
->
pExpr
[
i
];
if
(
pExpr
!=
NULL
)
{
tSQLBinaryExprDestroy
(
&
pExpr
->
binExprInfo
.
pBinExpr
,
NULL
);
tfree
(
pExpr
->
binExprInfo
.
pReqColumns
);
tfree
(
pExpr
);
}
}
...
...
@@ -2043,7 +2020,7 @@ SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void
}
}
tscFieldInfo
UpdateOffsetForInterResul
t
(
pNewQueryInfo
);
tscFieldInfo
CalOffse
t
(
pNewQueryInfo
);
}
pNew
->
fp
=
fp
;
...
...
src/inc/taosmsg.h
浏览文件 @
48c73b38
...
...
@@ -446,7 +446,7 @@ typedef struct SSqlBinaryExprInfo {
typedef
struct
SSqlFunctionExpr
{
SSqlFuncExprMsg
pBase
;
SSqlBinaryExprInfo
pB
inExprInfo
;
SSqlBinaryExprInfo
b
inExprInfo
;
int16_t
resBytes
;
int16_t
resType
;
int16_t
interResBytes
;
...
...
src/system/detail/src/vnodeRead.c
浏览文件 @
48c73b38
...
...
@@ -453,7 +453,7 @@ void vnodeFreeQInfo(void *param, bool decQueryRef) {
if
(
pQuery
->
pSelectExpr
!=
NULL
)
{
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
SSqlBinaryExprInfo
*
pBinExprInfo
=
&
pQuery
->
pSelectExpr
[
i
].
pB
inExprInfo
;
SSqlBinaryExprInfo
*
pBinExprInfo
=
&
pQuery
->
pSelectExpr
[
i
].
b
inExprInfo
;
if
(
pBinExprInfo
->
numOfCols
>
0
)
{
tfree
(
pBinExprInfo
->
pReqColumns
);
...
...
src/system/detail/src/vnodeUtil.c
浏览文件 @
48c73b38
...
...
@@ -157,7 +157,7 @@ static int32_t id_compar(const void* left, const void* right) {
}
static
int32_t
vnodeBuildExprFromArithmeticStr
(
SSqlFunctionExpr
*
pExpr
,
SQueryMeterMsg
*
pQueryMsg
)
{
SSqlBinaryExprInfo
*
pBinaryExprInfo
=
&
pExpr
->
pB
inExprInfo
;
SSqlBinaryExprInfo
*
pBinaryExprInfo
=
&
pExpr
->
b
inExprInfo
;
SColumnInfo
*
pColMsg
=
pQueryMsg
->
colList
;
tSQLBinaryExpr
*
pBinExpr
=
NULL
;
...
...
@@ -377,15 +377,15 @@ void vnodeUpdateFilterColumnIndex(SQuery* pQuery) {
}
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfOutputCols
;
++
i
)
{
SSqlBinaryExprInfo
*
pBinExprInfo
=
&
pQuery
->
pSelectExpr
[
i
].
pB
inExprInfo
;
if
(
pB
inExprInfo
->
pBinExpr
==
NULL
)
{
SSqlBinaryExprInfo
*
binExprInfo
=
&
pQuery
->
pSelectExpr
[
i
].
b
inExprInfo
;
if
(
b
inExprInfo
->
pBinExpr
==
NULL
)
{
continue
;
}
for
(
int16_t
j
=
0
;
j
<
pB
inExprInfo
->
numOfCols
;
++
j
)
{
for
(
int16_t
j
=
0
;
j
<
b
inExprInfo
->
numOfCols
;
++
j
)
{
for
(
int32_t
k
=
0
;
k
<
pQuery
->
numOfCols
;
++
k
)
{
if
(
pB
inExprInfo
->
pReqColumns
[
j
].
colId
==
pQuery
->
colList
[
k
].
data
.
colId
)
{
pB
inExprInfo
->
pReqColumns
[
j
].
colIdxInBuf
=
pQuery
->
colList
[
k
].
colIdxInBuf
;
if
(
b
inExprInfo
->
pReqColumns
[
j
].
colId
==
pQuery
->
colList
[
k
].
data
.
colId
)
{
b
inExprInfo
->
pReqColumns
[
j
].
colIdxInBuf
=
pQuery
->
colList
[
k
].
colIdxInBuf
;
assert
(
pQuery
->
colList
[
k
].
colIdxInBuf
==
k
);
break
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录