Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
454c62d9
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
454c62d9
编写于
5月 12, 2020
作者:
H
hjLiao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-288]support alias name in from clause
上级
2a5b6003
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
71 addition
and
16 deletion
+71
-16
src/client/src/sql.c
src/client/src/sql.c
+26
-4
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+16
-8
src/inc/sql.y
src/inc/sql.y
+29
-4
未找到文件。
src/client/src/sql.c
浏览文件 @
454c62d9
...
@@ -2404,19 +2404,41 @@ static void yy_reduce(
...
@@ -2404,19 +2404,41 @@ static void yy_reduce(
{
yymsp
[
-
1
].
minor
.
yy30
=
yymsp
[
0
].
minor
.
yy30
;}
{
yymsp
[
-
1
].
minor
.
yy30
=
yymsp
[
0
].
minor
.
yy30
;}
break
;
break
;
case
137
:
/* tablelist ::= ids cpxName */
case
137
:
/* tablelist ::= ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);}
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
yymsp
[
-
1
].
minor
.
yy30
=
yylhsminor
.
yy30
;
yymsp
[
-
1
].
minor
.
yy30
=
yylhsminor
.
yy30
;
break
;
break
;
case
138
:
/* tablelist ::= ids cpxName ids */
case
138
:
/* tablelist ::= ids cpxName ids */
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);}
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy30
=
yylhsminor
.
yy30
;
yymsp
[
-
2
].
minor
.
yy30
=
yylhsminor
.
yy30
;
break
;
break
;
case
139
:
/* tablelist ::= tablelist COMMA ids cpxName */
case
139
:
/* tablelist ::= tablelist COMMA ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yymsp
[
-
3
].
minor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yymsp
[
-
3
].
minor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
yymsp
[
-
3
].
minor
.
yy30
=
yylhsminor
.
yy30
;
yymsp
[
-
3
].
minor
.
yy30
=
yylhsminor
.
yy30
;
break
;
break
;
case
140
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
case
140
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yymsp
[
-
4
].
minor
.
yy30
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
}
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yymsp
[
-
4
].
minor
.
yy30
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
);
yylhsminor
.
yy30
=
tVariantListAppendToken
(
yylhsminor
.
yy30
,
&
yymsp
[
0
].
minor
.
yy0
,
-
1
);
}
yymsp
[
-
4
].
minor
.
yy30
=
yylhsminor
.
yy30
;
yymsp
[
-
4
].
minor
.
yy30
=
yylhsminor
.
yy30
;
break
;
break
;
case
141
:
/* tmvar ::= VARIABLE */
case
141
:
/* tmvar ::= VARIABLE */
...
...
src/client/src/tscSQLParser.c
浏览文件 @
454c62d9
...
@@ -2011,9 +2011,8 @@ int32_t getMeterIndex(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnInd
...
@@ -2011,9 +2011,8 @@ int32_t getMeterIndex(SSQLToken* pTableToken, SQueryInfo* pQueryInfo, SColumnInd
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQueryInfo
->
numOfTables
;
++
i
)
{
SMeterMetaInfo
*
pMeterMetaInfo
=
tscGetMeterMetaInfoFromQueryInfo
(
pQueryInfo
,
i
);
SMeterMetaInfo
*
pMeterMetaInfo
=
tscGetMeterMetaInfoFromQueryInfo
(
pQueryInfo
,
i
);
extractTableName
(
pMeterMetaInfo
->
name
,
tableName
);
if
(
strncasecmp
(
pMeterMetaInfo
->
aliasName
,
pTableToken
->
z
,
pTableToken
->
n
)
==
0
&&
strlen
(
pMeterMetaInfo
->
aliasName
)
==
pTableToken
->
n
)
{
if
(
strncasecmp
(
tableName
,
pTableToken
->
z
,
pTableToken
->
n
)
==
0
&&
strlen
(
tableName
)
==
pTableToken
->
n
)
{
pIndex
->
tableIndex
=
i
;
pIndex
->
tableIndex
=
i
;
break
;
break
;
}
}
...
@@ -5603,7 +5602,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5603,7 +5602,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
const
char
*
msg7
=
"illegal number of tables in from clause"
;
const
char
*
msg7
=
"illegal number of tables in from clause"
;
const
char
*
msg8
=
"too many columns in selection clause"
;
const
char
*
msg8
=
"too many columns in selection clause"
;
const
char
*
msg9
=
"TWA query requires both the start and end time"
;
const
char
*
msg9
=
"TWA query requires both the start and end time"
;
const
char
*
msg10
=
"alias name too long"
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
int32_t
code
=
TSDB_CODE_SUCCESS
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
SSqlCmd
*
pCmd
=
&
pSql
->
cmd
;
...
@@ -5632,8 +5632,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5632,8 +5632,8 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
return
doLocalQueryProcess
(
pQueryInfo
,
pQuerySql
);
return
doLocalQueryProcess
(
pQueryInfo
,
pQuerySql
);
}
}
if
(
pQuerySql
->
from
->
nExpr
>
1
)
{
if
(
pQuerySql
->
from
->
nExpr
>
2
)
{
if
(
pQuerySql
->
from
->
nExpr
>
2
)
{
// not support more than 2 tables join query
if
(
pQuerySql
->
from
->
nExpr
>
4
)
{
// not support more than 2 tables join query
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg7
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg7
);
}
}
...
@@ -5644,7 +5644,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5644,7 +5644,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
pQueryInfo
->
command
=
TSDB_SQL_SELECT
;
pQueryInfo
->
command
=
TSDB_SQL_SELECT
;
// set all query tables, which are maybe more than one.
// set all query tables, which are maybe more than one.
for
(
int32_t
i
=
0
;
i
<
pQuerySql
->
from
->
nExpr
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pQuerySql
->
from
->
nExpr
;
i
+=
2
)
{
tVariant
*
pTableItem
=
&
pQuerySql
->
from
->
a
[
i
].
pVar
;
tVariant
*
pTableItem
=
&
pQuerySql
->
from
->
a
[
i
].
pVar
;
if
(
pTableItem
->
nType
!=
TSDB_DATA_TYPE_BINARY
)
{
if
(
pTableItem
->
nType
!=
TSDB_DATA_TYPE_BINARY
)
{
...
@@ -5673,9 +5673,17 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
...
@@ -5673,9 +5673,17 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
return
code
;
}
}
//set the alias name
tVariant
*
aliasName
=
&
pQuerySql
->
from
->
a
[
i
+
1
].
pVar
;
if
(
aliasName
->
nLen
>
TSDB_METER_NAME_LEN
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg10
);
}
tVariantDump
(
aliasName
,
pMeterInfo1
->
aliasName
,
TSDB_DATA_TYPE_BINARY
);
}
}
assert
(
pQueryInfo
->
numOfTables
==
pQuerySql
->
from
->
nExpr
);
assert
(
pQueryInfo
->
numOfTables
==
pQuerySql
->
from
->
nExpr
/
2
);
// parse the group by clause in the first place
// parse the group by clause in the first place
if
(
parseGroupbyClause
(
pQueryInfo
,
pQuerySql
->
pGroupby
,
pCmd
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
parseGroupbyClause
(
pQueryInfo
,
pQuerySql
->
pGroupby
,
pCmd
)
!=
TSDB_CODE_SUCCESS
)
{
...
...
src/inc/sql.y
浏览文件 @
454c62d9
...
@@ -406,10 +406,35 @@ as(X) ::= . { X.n = 0; }
...
@@ -406,10 +406,35 @@ as(X) ::= . { X.n = 0; }
from(A) ::= FROM tablelist(X). {A = X;}
from(A) ::= FROM tablelist(X). {A = X;}
%type tablelist {tVariantList*}
%type tablelist {tVariantList*}
tablelist(A) ::= ids(X) cpxName(Y). { toTSDBType(X.type); X.n += Y.n; A = tVariantListAppendToken(NULL, &X, -1); A = tVariantListAppendToken(A, &X, -1);}
tablelist(A) ::= ids(X) cpxName(Y). {
tablelist(A) ::= ids(X) cpxName(Y) ids(Z). { toTSDBType(X.type); X.n += Y.n; A = tVariantListAppendToken(NULL, &X, -1); A = tVariantListAppendToken(A, &Z, -1);}
toTSDBType(X.type);
tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z). { toTSDBType(X.type); X.n += Z.n; A = tVariantListAppendToken(Y, &X, -1); A = tVariantListAppendToken(A, &X, -1); }
X.n += Y.n;
tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z) ids(F). { toTSDBType(X.type); X.n += Z.n; A = tVariantListAppendToken(Y, &X, -1); A = tVariantListAppendToken(A, &F, -1); }
A = tVariantListAppendToken(NULL, &X, -1);
A = tVariantListAppendToken(A, &X, -1);
}
tablelist(A) ::= ids(X) cpxName(Y) ids(Z). {
toTSDBType(X.type);
toTSDBType(Z.type);
X.n += Y.n;
A = tVariantListAppendToken(NULL, &X, -1);
A = tVariantListAppendToken(A, &Z, -1);
}
tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z). {
toTSDBType(X.type);
X.n += Z.n;
A = tVariantListAppendToken(Y, &X, -1);
A = tVariantListAppendToken(A, &X, -1);
}
tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z) ids(F). {
toTSDBType(X.type);
toTSDBType(F.type);
X.n += Z.n;
A = tVariantListAppendToken(Y, &X, -1);
A = tVariantListAppendToken(A, &F, -1);
}
// The value of interval should be the form of "number+[a,s,m,h,d,n,y]" or "now"
// The value of interval should be the form of "number+[a,s,m,h,d,n,y]" or "now"
%type tmvar {SSQLToken}
%type tmvar {SSQLToken}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录