![JAR search and dependency download from the Maven repository](/logo.png)
com.yesql4j.parser.SQLParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of yesql4j-maven-plugin Show documentation
Show all versions of yesql4j-maven-plugin Show documentation
Maven plugin for generating Java classes from SQL files
package com.yesql4j.parser;
import com.yesql4j.antlr.YeSQLGrammarLexer;
import com.yesql4j.antlr.YeSQLGrammarParser;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public final class SQLParser {
public List parse(String sql) {
var queries = sql.trim() + "\n";
var lexer = new YeSQLGrammarLexer(CharStreams.fromString(queries));
var parser = new YeSQLGrammarParser(new CommonTokenStream(lexer));
return parser.queries().query().stream()
.map(parsed -> {
String name = cleanupName(parsed.name().getText());
String body = cleanupBody(parsed.statement().getText());
Map paramsTypes = parseParamsTypes(parsed.param());
return new SQLQueryDefinition(name, body, paramsTypes);
})
.collect(Collectors.toList());
}
private String cleanupName(String nameDefinition) {
return StringUtils.removeStart(
nameDefinition
.trim()
.replaceAll("\\s+", ""),
"--name:"
);
}
private String cleanupBody(String body) {
return body.replaceAll("\n[ ]*--.*\n$", "\n").trim();
}
private Map parseParamsTypes(List paramsContext) {
return paramsContext.stream()
.map(param -> param.getText().trim())
.map(param -> StringUtils.removeStart(param, "--").trim())
.map(param -> StringUtils.removeStart(param, "@param "))
.map(param -> param.split("\\s+"))
.collect(Collectors.toMap(
param -> param[param.length - 1],
param -> StringUtils.join(Arrays.copyOf(param, param.length - 1))
));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy