Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Sep 16, 2020
2 parents c62ae5c + c5c6a8f commit 1bacc56
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class QueryComputer extends BSLParserBaseVisitor<ParseTree> implements Co

private static final Pattern QUERIES_ROOT_KEY = CaseInsensitivePattern.compile(
"select|выбрать|drop|уничтожить");
private static final Pattern QUERIES_STARTING_QUOTE = CaseInsensitivePattern.compile("^\\s*\"");

private static final int MINIMAL_QUERY_STRING_LENGTH = 8;

Expand All @@ -65,11 +66,10 @@ public ParseTree visitString(BSLParser.StringContext ctx) {
}

int startLine = 0;
var text = "";
var startEmptyLines = "";
if (!ctx.getTokens().isEmpty()) {
startLine = ctx.getTokens().get(0).getLine();
startEmptyLines = "\n".repeat(startLine);
startEmptyLines = "\n".repeat(startLine - 1);
}

boolean isQuery = false;
Expand All @@ -85,9 +85,7 @@ public ParseTree visitString(BSLParser.StringContext ctx) {
}

if (isQuery) {
text = startEmptyLines + strings.toString();
// в токенайзер передадим строку без кавычек
queries.add(new SDBLTokenizer(text.substring(1, text.length() - 1)));
queries.add(new SDBLTokenizer(startEmptyLines + removeExtremeQuotes(strings.toString())));
}

return ctx;
Expand All @@ -110,4 +108,14 @@ private static String addEmptyLines(int startLine, Token token) {
}
return "";
}

private static String removeExtremeQuotes(String text) {
if (QUERIES_STARTING_QUOTE.matcher(text).find()) {
// Кавычка может быть не первым символом строки
var quoteIndex = text.indexOf("\"");
return text.substring(0, quoteIndex) + " " + text.substring(quoteIndex + 1, text.length() - 1);
}

return text;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@ void test() {

List<Diagnostic> diagnostics = getDiagnostics();

assertThat(diagnostics).hasSize(1);
assertThat(diagnostics).hasSize(2);
assertThat(diagnostics, true)
.hasRange(21, 5, 21, 15);
.hasRange(21, 5, 21, 15)
.hasRange(56, 5, 56, 15);

}
}
36 changes: 36 additions & 0 deletions src/test/resources/diagnostics/UnionAllDiagnostic.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,40 @@
| Справочник.Справочник3 КАК Справочник3
|ГДЕ
| Справочник3.Ссылка = &Ссылка3"
);

Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| Справочник1.Поле1 КАК Поле1,
| 1 КАК Поле2,
| Справочник1.Поле3 КАК Поле3,
| ЕСТЬNULL(НачислениеЗарплатыМонтажникамОбороты.Заявка.Адрес, """") КАК Поле4
|ИЗ
| Справочник.Справочник1 КАК Справочник1
|ГДЕ
| Справочник1.Ссылка = &Ссылка1
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Справочник2.Поле1 КАК Поле1,
| 2 КАК Поле2,
| Справочник2.Поле3 КАК Поле3,
| ЕСТЬNULL(НачислениеЗарплатыМонтажникамОбороты.Заявка.Адрес, """") КАК Поле4
|ИЗ
| Справочник.Справочник2 КАК Справочник2
|ГДЕ
| Справочник2.Ссылка = &Ссылка2
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Справочник3.Поле1 КАК Поле1,
| 3 КАК Поле2,
| Справочник3.Поле3 КАК Поле3,
| ЕСТЬNULL(НачислениеЗарплатыМонтажникамОбороты.Заявка.Адрес, """") КАК Поле4
|ИЗ
| Справочник.Справочник3 КАК Справочник3
|ГДЕ
| Справочник3.Ссылка = &Ссылка3"
);

0 comments on commit 1bacc56

Please sign in to comment.