Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/feature/externalSource' into dev…
Browse files Browse the repository at this point in the history
…elop
  • Loading branch information
bia-tech committed Jul 31, 2023
2 parents d314815 + cd000b9 commit 4be67e7
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 3 deletions.
14 changes: 12 additions & 2 deletions src/main/antlr/SDBLLexer.g4
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ ENUM_TYPE: RU_P RU_E RU_R RU_E RU_CH RU_I RU_S RU_L RU_E RU_N RU_I RU_E
EXCHANGE_PLAN_TYPE:
PLAN_RU RU_O RU_B RU_M RU_E RU_N RU_A | E X C H A N G E P L A N;
EXTERNAL_DATA_SOURCE_TYPE:
RU_V RU_N RU_E RU_SH RU_N RU_I RU_J RU_I RU_S RU_T RU_O RU_CH RU_N RU_I RU_K RU_D RU_A RU_N RU_N RU_Y RU_H
| E X T E R N A L D A T A S O U R C E;
(RU_V RU_N RU_E RU_SH RU_N RU_I RU_J RU_I RU_S RU_T RU_O RU_CH RU_N RU_I RU_K RU_D RU_A RU_N RU_N RU_Y RU_H
| E X T E R N A L D A T A S O U R C E) -> pushMode(EXTERNAL_DATA_SOURCE_MODE);
FILTER_CRITERION_TYPE:
RU_K RU_R RU_I RU_T RU_E RU_R RU_I RU_J RU_O RU_T RU_B RU_O RU_R RU_A | F I L T E R C R I T E R I O N;
INFORMATION_REGISTER_TYPE:
Expand Down Expand Up @@ -357,3 +357,13 @@ ID_TASK_TYPE : TASK_TYPE -> type(TASK_TYPE), popMode;
ID_DOT : DOT -> type(DOT), pushMode(DOT_MODE), popMode;
ID_IDENTIFIER : IDENTIFIER -> type(IDENTIFIER), popMode;
ID_UNKNOWN : . -> channel(HIDDEN), type(UNKNOWN);
mode EXTERNAL_DATA_SOURCE_MODE;
EDS_TABLE: (RU_T RU_A RU_B RU_L RU_I RU_C RU_A | T A B L E) -> popMode;
EDS_CUBE: (RU_K RU_U RU_B | C U B E);
EDS_CUBE_DIMTABLE: (RU_T RU_A RU_B RU_L RU_I RU_C RU_A RU_I RU_Z RU_M RU_E RU_R RU_E RU_N RU_I RU_YA
| D I M E N S I O N T A B L E) -> popMode;
EDS_WHITE_SPACE : WHITE_SPACE -> channel(HIDDEN), type(WHITE_SPACE);
EDS_MUL: MUL -> type(MUL);
EDS_DOT : DOT -> type(DOT);
EDS_IDENTIFIER : IDENTIFIER -> type(IDENTIFIER);
6 changes: 5 additions & 1 deletion src/main/antlr/SDBLParser.g4
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ dataSources: tables+=dataSource (COMMA tables+=dataSource)*;
dataSource:
(LPAREN dataSource RPAREN)
| ((
((virtualTable | table | parameterTable) alias?)
((virtualTable | table | parameterTable | externalDataSourceTable) alias?)
| (LPAREN (virtualTable | table | parameterTable | subquery) RPAREN alias?)
) joins+=joinPart*)
;
Expand Down Expand Up @@ -345,6 +345,10 @@ virtualTableParameter: logicalExpression?;
// таблица как параметр, соединяться ни с чем не может
parameterTable: parameter;

externalDataSourceTable:
mdo DOT EDS_TABLE DOT tableName=identifier
| mdo DOT EDS_CUBE DOT cubeName=identifier DOT EDS_CUBE_DIMTABLE DOT tableName=identifier;

// соединения таблиц
joinPart:
( // тип соединения
Expand Down
22 changes: 22 additions & 0 deletions src/test/java/com/github/_1c_syntax/bsl/parser/SDBLLexerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,26 @@ void testMDOTT() {
assertMatch(".ДанныеГрафика", ".SCHEDULEDATA", SDBLLexer.DOT, SDBLLexer.SCHEDULE_DATA_VT);
assertMatch(".ЗадачиПоИсполнителю", ".TASKBYPERFORMER", SDBLLexer.DOT, SDBLLexer.TASK_BY_PERFORMER_VT);
}

@Test
void testExternalTypes() {
assertMatch("ВнешнийИсточникДанных.ВИД1.Таблица",
"ExternalDataSource.EDS1.Table",
SDBLLexer.EXTERNAL_DATA_SOURCE_TYPE,
SDBLLexer.DOT,
SDBLLexer.IDENTIFIER,
SDBLLexer.DOT,
SDBLLexer.EDS_TABLE);
assertMatch("ВнешнийИсточникДанных.ВИД1.Куб.Куб1.ТаблицаИзмерения",
"ExternalDataSource.EDS1.Cube.Cube1.DimensionTable",
SDBLLexer.EXTERNAL_DATA_SOURCE_TYPE,
SDBLLexer.DOT,
SDBLLexer.IDENTIFIER,
SDBLLexer.DOT,
SDBLLexer.EDS_CUBE,
SDBLLexer.DOT,
SDBLLexer.IDENTIFIER,
SDBLLexer.DOT,
SDBLLexer.EDS_CUBE_DIMTABLE);
}
}
16 changes: 16 additions & 0 deletions src/test/java/com/github/_1c_syntax/bsl/parser/SDBLParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,22 @@ void testSelect05() {
);
}

@Test
void testSelect06() {
checkSource("src/test/resources/sdbl/select06.sdbl",
pair(SDBLParser.RULE_queries, 4),
pair(SDBLParser.RULE_dataSource, 4)
);
}

@Test
void testSelect07() {
checkSource("src/test/resources/sdbl/select07.sdbl",
pair(SDBLParser.RULE_queries, 1),
pair(SDBLParser.RULE_dataSource, 1)
);
}

private void checkSource(String filePath, Pair... rules) {
var exampleString = TestUtils.getSourceFromFile(filePath);
setInput(exampleString);
Expand Down
19 changes: 19 additions & 0 deletions src/test/resources/sdbl/select06.sdbl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
ВЫБРАТЬ
timestamp
ИЗ
ВнешнийИсточникДанных.ClickHouse.Таблица.test01_log
;
SELECT
timestamp
FROM
ExternalDataSource.ClickHouse.Table.test01_log
;
ВЫБРАТЬ
Поле1 КАК Поле1
ИЗ
ВнешнийИсточникДанных.ВнешнийИсточникДанных1.Куб.Куб1.ТаблицаИзмерения.ТаблицаИзмерения1
;
SELECT
Cube1DimensionTableDimensionTable1.Ref AS Ref
FROM
ExternalDataSource.ExternalDataSource1.Cube.Cube1.DimensionTable.DimensionTable1 AS Cube1DimensionTableDimensionTable1
2 changes: 2 additions & 0 deletions src/test/resources/sdbl/select07.sdbl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ВЫБРАТЬ *
ИЗ РегистрСведений.Таблица КАК Таблица

0 comments on commit 4be67e7

Please sign in to comment.