Search in sources :

Example 1 with AstStart

use of com.developmentontheedge.sql.model.AstStart 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;
}
Also used : DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) Context(com.developmentontheedge.sql.format.Context) LoadContext(com.beanexplorer.enterprise.metadata.serialization.LoadContext) Arrays(java.util.Arrays) ModuleUtils(com.beanexplorer.enterprise.metadata.util.ModuleUtils) AstStart(com.developmentontheedge.sql.model.AstStart) ProjectElementException(com.beanexplorer.enterprise.metadata.exception.ProjectElementException) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) SQLException(java.sql.SQLException) Formatter(com.developmentontheedge.sql.format.Formatter) Locale(java.util.Locale) Map(java.util.Map) ReadException(com.beanexplorer.enterprise.metadata.exception.ReadException) ExtendedSqlException(com.developmentontheedge.dbms.ExtendedSqlException) Entity(com.beanexplorer.enterprise.metadata.model.Entity) Project(com.beanexplorer.enterprise.metadata.model.Project) Rdbms(com.beanexplorer.enterprise.metadata.sql.Rdbms) SqlModelReader(com.beanexplorer.enterprise.metadata.sql.SqlModelReader) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) Path(java.nio.file.Path) Context(com.developmentontheedge.sql.format.Context) Files(java.nio.file.Files) Predicate(java.util.function.Predicate) MoreCollectors(one.util.streamex.MoreCollectors) SqlParser(com.developmentontheedge.sql.model.SqlParser) Set(java.util.Set) IOException(java.io.IOException) EntryStream(one.util.streamex.EntryStream) Collectors(java.util.stream.Collectors) UncheckedIOException(java.io.UncheckedIOException) Objects(java.util.Objects) ProcessInterruptedException(com.beanexplorer.enterprise.metadata.exception.ProcessInterruptedException) Query(com.beanexplorer.enterprise.metadata.model.Query) BeSqlExecutor(com.beanexplorer.enterprise.metadata.sql.BeSqlExecutor) List(java.util.List) TreeMap(java.util.TreeMap) Paths(java.nio.file.Paths) ProjectLoadException(com.beanexplorer.enterprise.metadata.exception.ProjectLoadException) StreamEx(one.util.streamex.StreamEx) LoadContext(com.beanexplorer.enterprise.metadata.serialization.LoadContext) Entry(java.util.Map.Entry) Pattern(java.util.regex.Pattern) Comparator(java.util.Comparator) Dbms(com.developmentontheedge.sql.format.Dbms) Entity(com.beanexplorer.enterprise.metadata.model.Entity) ProjectElementException(com.beanexplorer.enterprise.metadata.exception.ProjectElementException) Rdbms(com.beanexplorer.enterprise.metadata.sql.Rdbms) Query(com.beanexplorer.enterprise.metadata.model.Query) Formatter(com.developmentontheedge.sql.format.Formatter) SqlParser(com.developmentontheedge.sql.model.SqlParser) ProjectElementException(com.beanexplorer.enterprise.metadata.exception.ProjectElementException) SQLException(java.sql.SQLException) ReadException(com.beanexplorer.enterprise.metadata.exception.ReadException) ExtendedSqlException(com.developmentontheedge.dbms.ExtendedSqlException) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException) ProcessInterruptedException(com.beanexplorer.enterprise.metadata.exception.ProcessInterruptedException) ProjectLoadException(com.beanexplorer.enterprise.metadata.exception.ProjectLoadException) AstStart(com.developmentontheedge.sql.model.AstStart) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext)

Example 2 with AstStart

use of com.developmentontheedge.sql.model.AstStart in project be5 by DevelopmentOnTheEdge.

the class CategoryFilterTest method testCategoryFilter.

@Test
public void testCategoryFilter() {
    AstStart start = SqlQuery.parse("SELECT t.a, q.b FROM myTable t, otherTable q JOIN oneMoreTable a ON (a.ID=q.ID) WHERE t.b > 2");
    new CategoryFilter("myTable", "ID", 123).apply(start);
    assertEquals("SELECT t.a, q.b FROM myTable t " + "INNER JOIN classifications ON classifications.categoryID = 123 " + "AND classifications.recordID = t.ID, otherTable q " + "INNER JOIN oneMoreTable a ON (a.ID = q.ID) " + "WHERE t.b > 2", new Formatter().format(start, new Context(Dbms.MYSQL), new DefaultParserContext()));
}
Also used : Context(com.developmentontheedge.sql.format.Context) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) AstStart(com.developmentontheedge.sql.model.AstStart) Formatter(com.developmentontheedge.sql.format.Formatter) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) CategoryFilter(com.developmentontheedge.sql.format.CategoryFilter) Test(org.junit.Test)

Example 3 with AstStart

use of com.developmentontheedge.sql.model.AstStart in project be5 by DevelopmentOnTheEdge.

the class CloneTest method testAstClone.

@Test
public void testAstClone() {
    AstStart start = SqlQuery.parse("SELECT * FROM table1, table2 WHERE col = 'value'");
    AstStart clone = start.clone();
    assertEquals(start.jjtGetNumChildren(), clone.jjtGetNumChildren());
    assertEquals(start.dump(), clone.dump());
    ((AstSelect) clone.getQuery().child(0)).getFrom().removeChild(1);
    // TODO: Current expected value is incorrect and should be fixed when formatter will be improved
    assertEquals("SELECT * FROM table1 WHERE col = 'value'", new Formatter().format(clone, new Context(Dbms.ORACLE), new DefaultParserContext()));
    assertEquals("SELECT * FROM table1, table2 WHERE col = 'value'", new Formatter().format(start, new Context(Dbms.ORACLE), new DefaultParserContext()));
}
Also used : Context(com.developmentontheedge.sql.format.Context) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) AstStart(com.developmentontheedge.sql.model.AstStart) Formatter(com.developmentontheedge.sql.format.Formatter) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) Test(org.junit.Test)

Example 4 with AstStart

use of com.developmentontheedge.sql.model.AstStart in project be5 by DevelopmentOnTheEdge.

the class ContextApplierApplyParametersTest method digitString.

@Test
public void digitString() {
    AstStart start = SqlQuery.parse("SELECT * FROM table WHERE name = '<parameter:name />'");
    ContextApplier contextApplier = new ContextApplier(new BasicQueryContext.Builder().parameter("name", "123").build());
    contextApplier.applyContext(start);
    assertEquals("SELECT * FROM table WHERE name = '123'", start.getQuery().toString());
}
Also used : AstStart(com.developmentontheedge.sql.model.AstStart) ContextApplier(com.developmentontheedge.sql.format.ContextApplier) BasicQueryContext(com.developmentontheedge.sql.format.BasicQueryContext) Test(org.junit.Test)

Example 5 with AstStart

use of com.developmentontheedge.sql.model.AstStart in project be5 by DevelopmentOnTheEdge.

the class ContextApplierApplyParametersTest method useSafeStr.

@Test
public void useSafeStr() {
    AstStart start = SqlQuery.parse("SELECT * FROM table WHERE name = <parameter:name safestr=\"yes\" />");
    ContextApplier contextApplier = new ContextApplier(new BasicQueryContext.Builder().parameter("name", "12's").build());
    contextApplier.applyContext(start);
    assertEquals("SELECT * FROM table WHERE name = '12''s'", start.getQuery().toString());
}
Also used : AstStart(com.developmentontheedge.sql.model.AstStart) ContextApplier(com.developmentontheedge.sql.format.ContextApplier) BasicQueryContext(com.developmentontheedge.sql.format.BasicQueryContext) Test(org.junit.Test)

Aggregations

AstStart (com.developmentontheedge.sql.model.AstStart)34 Test (org.junit.Test)26 ContextApplier (com.developmentontheedge.sql.format.ContextApplier)16 Context (com.developmentontheedge.sql.format.Context)13 Formatter (com.developmentontheedge.sql.format.Formatter)13 DefaultParserContext (com.developmentontheedge.sql.model.DefaultParserContext)11 BasicQueryContext (com.developmentontheedge.sql.format.BasicQueryContext)10 AstBeSqlSubQuery (com.developmentontheedge.sql.model.AstBeSqlSubQuery)8 HashMap (java.util.HashMap)8 Map (java.util.Map)7 SqlQuery (com.developmentontheedge.sql.model.SqlQuery)6 Collections (java.util.Collections)6 Assert (org.junit.Assert)5 QueryResolver (com.developmentontheedge.sql.format.BasicQueryContext.QueryResolver)4 ColumnRef (com.developmentontheedge.sql.format.ColumnRef)4 FilterApplier (com.developmentontheedge.sql.format.FilterApplier)4 Ignore (org.junit.Ignore)4 ColumnAdder (com.developmentontheedge.sql.format.ColumnAdder)3 Dbms (com.developmentontheedge.sql.format.Dbms)3 LimitsApplier (com.developmentontheedge.sql.format.LimitsApplier)3