Search in sources :

Example 1 with Project

use of com.beanexplorer.enterprise.metadata.model.Project 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 Project

use of com.beanexplorer.enterprise.metadata.model.Project in project be5 by DevelopmentOnTheEdge.

the class TestMain method testModule.

public static StatContext testModule(String name, Rdbms dbms, FailData parseFailQueries) throws ProjectLoadException, ReadException {
    LoadContext ctx = new LoadContext();
    Project project = ModuleUtils.loadModule(name, ctx);
    ModuleUtils.addModuleScripts(project);
    ctx.check();
    project.setDatabaseSystem(dbms);
    return testProject(project, parseFailQueries);
}
Also used : Project(com.beanexplorer.enterprise.metadata.model.Project) LoadContext(com.beanexplorer.enterprise.metadata.serialization.LoadContext)

Example 3 with Project

use of com.beanexplorer.enterprise.metadata.model.Project in project be5 by DevelopmentOnTheEdge.

the class TestMain method testModule5DB.

public static StatContext testModule5DB(String name, List<String> okQueries) throws ProjectLoadException, ReadException {
    LoadContext ctx = new LoadContext();
    Project project = ModuleUtils.loadModule(name, ctx);
    ModuleUtils.addModuleScripts(project);
    ctx.check();
    SqlParser parser = new SqlParser();
    Formatter formatter = new Formatter();
    DefaultParserContext parserContext = new DefaultParserContext();
    parser.setContext(parserContext);
    Rdbms[] dbms = { Rdbms.MYSQL, Rdbms.DB2, Rdbms.ORACLE, Rdbms.SQLSERVER, Rdbms.POSTGRESQL };
    StatContext stat = new StatContext(name + "/5DB", StreamEx.of(dbms).map(Rdbms::name).prepend("Count", "PF").append("Success").toArray(String[]::new));
    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;
            project.setDatabaseSystem(Rdbms.BESQL);
            String queryText;
            try {
                queryText = query.getQueryCompiled().validate();
            } catch (ProjectElementException e) {
                continue;
            }
            stat.inc("Count");
            parser.parse(queryText);
            if (!parser.getMessages().isEmpty()) {
                stat.inc("PF");
                continue;
            }
            try {
                formatter.format(parser.getStartNode(), new Context(Dbms.POSTGRESQL), parserContext);
            } catch (IllegalArgumentException e) {
                System.out.println(entityName + "." + query.getName() + ": " + e.getMessage());
                stat.inc("PF");
                continue;
            }
            boolean success = true;
            for (Rdbms db : dbms) {
                project.setDatabaseSystem(db);
                String expected;
                try {
                    expected = sanitizeValue(query.getQueryCompiled().validate());
                } catch (ProjectElementException e) {
                    continue;
                }
                String formatted;
                try {
                    formatted = formatter.format(parser.getStartNode(), new Context(Dbms.valueOf(db.name())), parserContext);
                } catch (IllegalArgumentException e) {
                    System.out.println(entityName + "." + query.getName() + ": " + e.getMessage());
                    stat.inc(db.name());
                    success = false;
                    continue;
                }
                String actual = sanitizeValue(formatted);
                if (!expected.equals(actual)) {
                    if (db == Rdbms.ORACLE) {
                        System.out.println(entityName + "." + query.getName());
                        System.out.println("BESQL: " + queryText);
                        System.out.println("Actual: " + actual);
                        System.out.println("Expected: " + expected);
                    }
                    stat.inc(db.name());
                    success = false;
                }
            }
            if (success) {
                stat.inc("Success");
            // okQueries.add( entityName+"."+query.getName() );
            }
        }
    }
    return stat;
}
Also used : DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) Context(com.developmentontheedge.sql.format.Context) LoadContext(com.beanexplorer.enterprise.metadata.serialization.LoadContext) 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) Project(com.beanexplorer.enterprise.metadata.model.Project) DefaultParserContext(com.developmentontheedge.sql.model.DefaultParserContext) LoadContext(com.beanexplorer.enterprise.metadata.serialization.LoadContext)

Example 4 with Project

use of com.beanexplorer.enterprise.metadata.model.Project in project be5 by DevelopmentOnTheEdge.

the class TestMain method testSqlDatabase.

public static StatContext testSqlDatabase(String name, String connectionURL, FailData failedQueries) throws IOException, ExtendedSqlException, SQLException, ProcessInterruptedException {
    BeSqlExecutor executor = new BeSqlExecutor(connectionURL);
    SqlModelReader reader = new SqlModelReader(executor, SqlModelReader.READ_META);
    Project project = reader.readProject(name);
    return testProject(project, failedQueries);
}
Also used : BeSqlExecutor(com.beanexplorer.enterprise.metadata.sql.BeSqlExecutor) SqlModelReader(com.beanexplorer.enterprise.metadata.sql.SqlModelReader) Project(com.beanexplorer.enterprise.metadata.model.Project)

Aggregations

Project (com.beanexplorer.enterprise.metadata.model.Project)4 LoadContext (com.beanexplorer.enterprise.metadata.serialization.LoadContext)3 ProjectElementException (com.beanexplorer.enterprise.metadata.exception.ProjectElementException)2 Entity (com.beanexplorer.enterprise.metadata.model.Entity)2 Query (com.beanexplorer.enterprise.metadata.model.Query)2 BeSqlExecutor (com.beanexplorer.enterprise.metadata.sql.BeSqlExecutor)2 Rdbms (com.beanexplorer.enterprise.metadata.sql.Rdbms)2 SqlModelReader (com.beanexplorer.enterprise.metadata.sql.SqlModelReader)2 Context (com.developmentontheedge.sql.format.Context)2 Formatter (com.developmentontheedge.sql.format.Formatter)2 DefaultParserContext (com.developmentontheedge.sql.model.DefaultParserContext)2 SqlParser (com.developmentontheedge.sql.model.SqlParser)2 ProcessInterruptedException (com.beanexplorer.enterprise.metadata.exception.ProcessInterruptedException)1 ProjectLoadException (com.beanexplorer.enterprise.metadata.exception.ProjectLoadException)1 ReadException (com.beanexplorer.enterprise.metadata.exception.ReadException)1 ModuleUtils (com.beanexplorer.enterprise.metadata.util.ModuleUtils)1 ExtendedSqlException (com.developmentontheedge.dbms.ExtendedSqlException)1 Dbms (com.developmentontheedge.sql.format.Dbms)1 AstStart (com.developmentontheedge.sql.model.AstStart)1 IOException (java.io.IOException)1