use of com.developmentontheedge.sql.format.Dbms in project be5 by DevelopmentOnTheEdge.
the class TestMain method testProject.
private static StatContext testProject(Project project, FailData failedQueries) {
String name = project.getName();
Rdbms dbms = project.getDatabaseSystem();
StatContext stat = new StatContext(name + "/" + dbms, "Count", "FMF", "PE", "FE", "PF", "RFE", "RFM", "Success");
SqlParser parser = new SqlParser();
parser.setContext(new DefaultParserContext());
Formatter formatter = new Formatter();
Context context = new Context(Arrays.stream(Dbms.values()).filter(d -> d.getType() == dbms.getType()).findFirst().get());
for (String entityName : project.getEntityNames()) {
Entity entity = project.getEntity(entityName);
for (Query query : entity.getQueries()) {
if (!allowedTypes.contains(query.getType()))
continue;
if (query.getName().equals("Table definition"))
continue;
if (query.getQuery().trim().isEmpty())
continue;
stat.inc("Count");
String queryText;
try {
queryText = query.getQueryCompiled().validate();
} catch (ProjectElementException e) {
stat.inc("FMF");
continue;
}
parser.parse(queryText);
if (!parser.getMessages().isEmpty()) {
if (knownNonExpanded.stream().anyMatch(queryText::contains)) {
stat.inc("FMF");
continue;
}
failedQueries.add(query, queryText);
// System.out.println("----------------------\nQuery: "+entity.getName()+"."+query.getName()+"\n"+queryText+"\n\n"+String.join("\n", parser.getMessages()));
stat.inc("PE");
continue;
}
AstStart astStart = parser.getStartNode();
String format;
try {
format = formatter.format(astStart, context, parser.getContext());
Objects.requireNonNull(format);
} catch (Exception e) {
failedQueries.add(query, queryText);
System.out.println("Err: " + entity.getName() + "." + query.getName() + ": " + e.getMessage());
stat.inc("FE");
continue;
}
parser.parse(format);
if (!parser.getMessages().isEmpty()) {
failedQueries.add(query, queryText);
// System.out.println("PF: "+queryText+"\n"+"Formatted: "+format+"\n"+parser.getMessages());
stat.inc("PF");
continue;
}
astStart = parser.getStartNode();
String format2;
try {
format2 = formatter.format(astStart, context, parser.getContext());
Objects.requireNonNull(format2);
} catch (Exception e) {
stat.inc("RFF");
continue;
}
if (!format.equals(format2)) {
failedQueries.add(query, queryText);
// System.out.println("Orig : "+queryText);
// System.out.println("Form1: "+format);
// System.out.println("Form2: "+format2);
stat.inc("RFM");
continue;
}
stat.inc("Success");
}
}
return stat;
}
use of com.developmentontheedge.sql.format.Dbms in project be5 by DevelopmentOnTheEdge.
the class ParserTarget method format.
protected void format(String dbmsName, Element element) {
Dbms dbms;
if (Dbms.DB2.getName().equals(dbmsName))
dbms = Dbms.DB2;
else if (Dbms.MYSQL.getName().equals(dbmsName))
dbms = Dbms.MYSQL;
else if (Dbms.ORACLE.getName().equals(dbmsName))
dbms = Dbms.ORACLE;
else if (Dbms.POSTGRESQL.getName().equals(dbmsName))
dbms = Dbms.POSTGRESQL;
else if (Dbms.SQLSERVER.getName().equals(dbmsName))
dbms = Dbms.SQLSERVER;
else {
test.getResult().addError(test, new Exception("Unknown DBMS \"" + dbmsName + "\". DBMS should be: db2, mysql, oracle, postgresql or sqlserver."));
return;
}
Formatter formatter = new Formatter();
String formatResult = trimAllLine(formatter.format(astStart, new Context(dbms), parser.getContext()));
String result = trimAllLine(XmlTest.getCData(element));
assertEquals("Incorrect result, dbms=" + dbms.getName(), result, formatResult);
if (!formatResult.equals(result))
test.getResult().addFailure(test, new ComparisonFailure("Incorrect result, dbms=" + dbms.getName(), result, formatResult));
}
use of com.developmentontheedge.sql.format.Dbms in project be5 by DevelopmentOnTheEdge.
the class Project method translateSQL.
/**
* Try to translate the SQL query to the current DBMS using com.developmentontheedge.sql
* @param sql
* @return
*/
public String translateSQL(String sql) {
if (beSQL > 0) {
if (--beSQL == 0)
reconfigureFreemarker();
}
if (sqlParser == null) {
throw new IllegalStateException("translateSQL was called without enterSQL");
}
sqlParser.parse(sql);
List<String> messages = sqlParser.getMessages();
if (!messages.isEmpty()) {
throw new IllegalArgumentException(("SQL cannot be parsed:\nQuery:" + sql + "\nErrors: " + String.join("\n", messages)).replace("\r", "").replace("\n", System.lineSeparator()));
}
AstStart ast = sqlParser.getStartNode();
if (databaseSystem != Rdbms.BESQL) {
new MacroExpander().expandMacros(ast);
Dbms dbms = databaseSystem == null ? Dbms.POSTGRESQL : Dbms.valueOf(databaseSystem.name());
DbmsTransformer dbmsTransformer = new Context(dbms).getDbmsTransformer();
dbmsTransformer.setParserContext(sqlParser.getContext());
dbmsTransformer.transformAst(ast);
}
return ast.format();
}
Aggregations