Skip to content

Commit

Permalink
fix: cannot reference variables in DEFINE statement
Browse files Browse the repository at this point in the history
  • Loading branch information
spena committed Nov 4, 2020
1 parent 3b1fd3d commit d44baec
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,18 @@ public String replace(final SqlBaseParser.SingleStatementContext singleStatement
return StringSubstitutor.replace(statementText, sanitizedValueMap);
}

@Override
public Void visitStringLiteral(final SqlBaseParser.StringLiteralContext context) {
final String text = unquote(context.getText(), "\'");
private void lookupVariables(final String text) {
for (String variableName : VariablesLookup.lookup(text)) {
if (valueMap.containsKey(variableName)) {
sanitizedValueMap.putIfAbsent(variableName, sanitize(valueMap.get(variableName)));
}
}
}

@Override
public Void visitStringLiteral(final SqlBaseParser.StringLiteralContext context) {
final String text = unquote(context.getText(), "\'");
lookupVariables(text);

return null;
}
Expand All @@ -113,6 +117,14 @@ public Void visitVariableLiteral(final SqlBaseParser.VariableLiteralContext cont
return null;
}

@Override
public Void visitVariableValue(final SqlBaseParser.VariableValueContext context) {
final String text = unquote(context.getText(), "\'");
lookupVariables(text);

return null;
}

@Override
public Void visitVariableIdentifier(final SqlBaseParser.VariableIdentifierContext context) {
final String variableRef = context.getText();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,28 @@
public class VariableSubstitutorTest {
private static final KsqlParser KSQL_PARSER = new DefaultKsqlParser();

@Test
public void shouldSubstituteVariableOnDefine() {
// Given
final Map<String, String> variablesMap = new ImmutableMap.Builder<String, String>() {{
put("env", "qa");
put("env_quoted", "\"qa\"");
put("env_backQuoted", "`qa`");
}}.build();

final List<Pair<String, String>> statements = Arrays.asList(
Pair.of("DEFINE topicName = 'topic_${env}';",
"DEFINE topicName = 'topic_qa';"),
Pair.of("DEFINE topicName = 'topic_${env_quoted}';",
"DEFINE topicName = 'topic_\"qa\"';"),
Pair.of("DEFINE topicName = 'topic_${env_backQuoted}';",
"DEFINE topicName = 'topic_`qa`';")
);

// When/Then
assertReplacedStatements(statements, variablesMap);
}

@Test
public void shouldSubstituteVariableOnDescribe() {
// Given
Expand Down

0 comments on commit d44baec

Please sign in to comment.