Merge pull request #29410 from freemine/freemine.lemon.warning.as.error.with.jointest
Freemine.lemon.warning.as.error.with.jointest
This commit is contained in:
commit
3e1692d2c5
|
@ -7,7 +7,7 @@ ENDIF()
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c ${TD_SOURCE_DIR}/include/common/ttokenauto.h
|
OUTPUT ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c ${TD_SOURCE_DIR}/include/common/ttokenauto.h
|
||||||
COMMAND echo "Running lemon process in ${TD_SOURCE_DIR}/source/libs/parser/inc"
|
COMMAND echo "Running lemon process in ${TD_SOURCE_DIR}/source/libs/parser/inc"
|
||||||
COMMAND ${TD_CONTRIB_DIR}/lemon/lemon sql.y || true
|
COMMAND ${TD_CONTRIB_DIR}/lemon/lemon sql.y
|
||||||
COMMAND echo "copy sql.c from ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c to ${TD_SOURCE_DIR}/source/libs/parser/src/"
|
COMMAND echo "copy sql.c from ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c to ${TD_SOURCE_DIR}/source/libs/parser/src/"
|
||||||
COMMAND mv ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c
|
COMMAND mv ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c
|
||||||
COMMAND mv ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.h ${TD_SOURCE_DIR}/include/common/ttokenauto.h
|
COMMAND mv ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.h ${TD_SOURCE_DIR}/include/common/ttokenauto.h
|
||||||
|
|
|
@ -24,6 +24,14 @@
|
||||||
#include "parAst.h"
|
#include "parAst.h"
|
||||||
|
|
||||||
#define YYSTACKDEPTH 0
|
#define YYSTACKDEPTH 0
|
||||||
|
|
||||||
|
#define JOINED_TABLE_MK(jt, st, A, B, E, F, G, H) \
|
||||||
|
{ \
|
||||||
|
A = createJoinTableNode(pCxt, jt, st, B, E, F); \
|
||||||
|
A = addWindowOffsetClause(pCxt, A, G); \
|
||||||
|
A = addJLimitClause(pCxt, A, H); \
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%syntax_error {
|
%syntax_error {
|
||||||
|
@ -46,6 +54,8 @@
|
||||||
%left NK_STAR NK_SLASH NK_REM.
|
%left NK_STAR NK_SLASH NK_REM.
|
||||||
%left NK_CONCAT.
|
%left NK_CONCAT.
|
||||||
|
|
||||||
|
%right INNER LEFT RIGHT FULL OUTER SEMI ANTI ASOF WINDOW JOIN ON WINDOW_OFFSET JLIMIT.
|
||||||
|
|
||||||
/************************************************ create/alter account *****************************************/
|
/************************************************ create/alter account *****************************************/
|
||||||
cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
|
cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
|
||||||
cmd ::= ALTER ACCOUNT NK_ID alter_account_options. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
|
cmd ::= ALTER ACCOUNT NK_ID alter_account_options. { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
|
||||||
|
@ -1442,36 +1452,77 @@ parenthesized_joined_table(A) ::= NK_LP joined_table(B) NK_RP.
|
||||||
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP. { A = B; }
|
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP. { A = B; }
|
||||||
|
|
||||||
/************************************************ joined_table ********************************************************/
|
/************************************************ joined_table ********************************************************/
|
||||||
joined_table(A) ::=
|
joined_table(A) ::= inner_joined(B). { A = B; }
|
||||||
table_reference(B) join_type(C) join_subtype(D) JOIN table_reference(E) join_on_clause_opt(F)
|
joined_table(A) ::= outer_joined(B). { A = B; }
|
||||||
window_offset_clause_opt(G) jlimit_clause_opt(H). {
|
joined_table(A) ::= semi_joined(B). { A = B; }
|
||||||
A = createJoinTableNode(pCxt, C, D, B, E, F);
|
joined_table(A) ::= anti_joined(B). { A = B; }
|
||||||
A = addWindowOffsetClause(pCxt, A, G);
|
joined_table(A) ::= asof_joined(B). { A = B; }
|
||||||
A = addJLimitClause(pCxt, A, H);
|
joined_table(A) ::= win_joined(B). { A = B; }
|
||||||
}
|
|
||||||
|
|
||||||
%type join_type { EJoinType }
|
/************************************************ inner join **********************************************************/
|
||||||
%destructor join_type { }
|
inner_joined(A) ::=
|
||||||
join_type(A) ::= . { A = JOIN_TYPE_INNER; }
|
table_reference(B) JOIN table_reference(E) join_on_clause_opt(F). { JOINED_TABLE_MK(JOIN_TYPE_INNER, JOIN_STYPE_NONE, A, B, E, F, NULL, NULL); }
|
||||||
join_type(A) ::= INNER. { A = JOIN_TYPE_INNER; }
|
|
||||||
join_type(A) ::= LEFT. { A = JOIN_TYPE_LEFT; }
|
|
||||||
join_type(A) ::= RIGHT. { A = JOIN_TYPE_RIGHT; }
|
|
||||||
join_type(A) ::= FULL. { A = JOIN_TYPE_FULL; }
|
|
||||||
|
|
||||||
%type join_subtype { EJoinSubType }
|
inner_joined(A) ::=
|
||||||
%destructor join_subtype { }
|
table_reference(B) INNER JOIN table_reference(E) join_on_clause_opt(F). { JOINED_TABLE_MK(JOIN_TYPE_INNER, JOIN_STYPE_NONE, A, B, E, F, NULL, NULL); }
|
||||||
join_subtype(A) ::= . { A = JOIN_STYPE_NONE; }
|
|
||||||
join_subtype(A) ::= OUTER. { A = JOIN_STYPE_OUTER; }
|
|
||||||
join_subtype(A) ::= SEMI. { A = JOIN_STYPE_SEMI; }
|
|
||||||
join_subtype(A) ::= ANTI. { A = JOIN_STYPE_ANTI; }
|
|
||||||
join_subtype(A) ::= ASOF. { A = JOIN_STYPE_ASOF; }
|
|
||||||
join_subtype(A) ::= WINDOW. { A = JOIN_STYPE_WIN; }
|
|
||||||
|
|
||||||
join_on_clause_opt(A) ::= . { A = NULL; }
|
/************************************************ outer join **********************************************************/
|
||||||
join_on_clause_opt(A) ::= ON search_condition(B). { A = B; }
|
outer_joined(A) ::=
|
||||||
|
table_reference(B) LEFT JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
window_offset_clause_opt(A) ::= . { A = NULL; }
|
outer_joined(A) ::=
|
||||||
window_offset_clause_opt(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
|
table_reference(B) RIGHT JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
outer_joined(A) ::=
|
||||||
|
table_reference(B) FULL JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_FULL, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
outer_joined(A) ::=
|
||||||
|
table_reference(B) LEFT OUTER JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
outer_joined(A) ::=
|
||||||
|
table_reference(B) RIGHT OUTER JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
outer_joined(A) ::=
|
||||||
|
table_reference(B) FULL OUTER JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_FULL, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
/************************************************ semi join ***********************************************************/
|
||||||
|
semi_joined(A) ::=
|
||||||
|
table_reference(B) LEFT SEMI JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_SEMI, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
semi_joined(A) ::=
|
||||||
|
table_reference(B) RIGHT SEMI JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_SEMI, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
/************************************************ ansi join ***********************************************************/
|
||||||
|
anti_joined(A) ::=
|
||||||
|
table_reference(B) LEFT ANTI JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ANTI, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
anti_joined(A) ::=
|
||||||
|
table_reference(B) RIGHT ANTI JOIN table_reference(E) join_on_clause(F). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ANTI, A, B, E, F, NULL, NULL); }
|
||||||
|
|
||||||
|
/************************************************ asof join ***********************************************************/
|
||||||
|
asof_joined(A) ::=
|
||||||
|
table_reference(B) LEFT ASOF JOIN table_reference(E) join_on_clause_opt(F)
|
||||||
|
jlimit_clause_opt(H). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
|
||||||
|
|
||||||
|
asof_joined(A) ::=
|
||||||
|
table_reference(B) RIGHT ASOF JOIN table_reference(E) join_on_clause_opt(F)
|
||||||
|
jlimit_clause_opt(H). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
|
||||||
|
|
||||||
|
/************************************************ window join *********************************************************/
|
||||||
|
win_joined(A) ::=
|
||||||
|
table_reference(B) LEFT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
|
||||||
|
window_offset_clause(G) jlimit_clause_opt(H). { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
|
||||||
|
|
||||||
|
win_joined(A) ::=
|
||||||
|
table_reference(B) RIGHT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
|
||||||
|
window_offset_clause(G) jlimit_clause_opt(H). { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
|
||||||
|
|
||||||
|
join_on_clause_opt(A) ::= . [ON] { A = NULL; }
|
||||||
|
join_on_clause_opt(A) ::= join_on_clause(B). { A = B; }
|
||||||
|
|
||||||
|
join_on_clause(A) ::= ON search_condition(B). { A = B; }
|
||||||
|
|
||||||
|
window_offset_clause(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
|
||||||
NK_COMMA window_offset_literal(C) NK_RP. { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
|
NK_COMMA window_offset_literal(C) NK_RP. { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
|
||||||
|
|
||||||
window_offset_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
|
window_offset_literal(A) ::= NK_VARIABLE(B). { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
|
||||||
|
@ -1481,7 +1532,7 @@ window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C).
|
||||||
A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
|
A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
|
||||||
}
|
}
|
||||||
|
|
||||||
jlimit_clause_opt(A) ::= . { A = NULL; }
|
jlimit_clause_opt(A) ::= . [JLIMIT] { A = NULL; }
|
||||||
jlimit_clause_opt(A) ::= JLIMIT NK_INTEGER(B). { A = createLimitNode(pCxt, &B, NULL); }
|
jlimit_clause_opt(A) ::= JLIMIT NK_INTEGER(B). { A = createLimitNode(pCxt, &B, NULL); }
|
||||||
|
|
||||||
/************************************************ query_specification *************************************************/
|
/************************************************ query_specification *************************************************/
|
||||||
|
|
|
@ -356,11 +356,6 @@ class TDTestCase:
|
||||||
def join_semantic_test(self, dbname=DBNAME):
|
def join_semantic_test(self, dbname=DBNAME):
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 semi join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 anti join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 outer join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 asof join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 window join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
|
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
|
@ -374,7 +369,7 @@ class TDTestCase:
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 left asof join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 left asof join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 left window join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
tdSql.error("select ct1.c_int from db.ct1 as ct1 left window join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
|
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 right join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 right join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
|
@ -386,16 +381,11 @@ class TDTestCase:
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 right asof join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 right asof join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 right window join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
tdSql.error("select ct1.c_int from db.ct1 as ct1 right window join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
|
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 full join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 full join db1.ct1 as cy1 on ct1.ts=cy1.ts")
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 full semi join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 full anti join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 full outer join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.checkRows(self.rows)
|
tdSql.checkRows(self.rows)
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 full asof join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
tdSql.error("select ct1.c_int from db.ct1 as ct1 full window join db1.ct1 as cy1 on ct1.ts=cy1.ts", TSDB_CODE_TSC_INVALID_OPERATION)
|
|
||||||
|
|
||||||
|
|
||||||
tdSql.query("select ct1.c_int from db.ct1 as ct1 full join db1.ct1 as cy1 on ct1.ts=cy1.ts join db1.ct1 as cy2 on ct1.ts=cy2.ts")
|
tdSql.query("select ct1.c_int from db.ct1 as ct1 full join db1.ct1 as cy1 on ct1.ts=cy1.ts join db1.ct1 as cy2 on ct1.ts=cy2.ts")
|
||||||
|
|
Loading…
Reference in New Issue