001package gudusoft.gsqlparser.dlineage.dataflow.sqlenv;
002
003import gudusoft.gsqlparser.dlineage.dataflow.sqlenv.model.*;
004import gudusoft.gsqlparser.sqlenv.*;
005
006import java.util.List;
007
008public class SQLEnvExporter {
009    public static SQLEnv exportSQLEnv(TSQLEnv sqlenv) {
010        SQLEnv sqlEnv = new SQLEnv();
011        sqlEnv.setDefaultServer(sqlenv.getDefaultServerName());
012        sqlEnv.setDefaultDatabase(sqlenv.getDefaultCatalogName());
013        sqlEnv.setDefaultSchema(sqlenv.getDefaultSchemaName());
014        if (sqlenv.getCatalogList() != null) {
015            for (TSQLCatalog sqlCatalog : sqlenv.getCatalogList()) {
016                exportCatalog(sqlEnv, sqlCatalog);
017            }
018        }
019        return sqlEnv;
020    }
021
022    private static void exportCatalog(SQLEnv sqlEnv, TSQLCatalog sqlCatalog) {
023        Catalog catalog = new Catalog();
024        sqlEnv.appendCatalog(catalog);
025        catalog.setName(sqlCatalog.getName());
026        List<TSQLSchema> schemaList = sqlCatalog.getSchemaList();
027        if (schemaList != null) {
028            for (TSQLSchema sqlSchema : schemaList) {
029                exportSchema(catalog, sqlSchema);
030            }
031        }
032    }
033
034    private static void exportSchema(Catalog catalog, TSQLSchema sqlSchema) {
035        Schema schema = new Schema();
036        schema.setName(sqlSchema.getName());
037        catalog.appendSchema(schema);
038        List<TSQLSchemaObject> schemaObjectList = sqlSchema.getSchemaObjectList();
039        if (schemaObjectList != null) {
040            for (TSQLSchemaObject sqlSchemaObject : schemaObjectList) {
041                if (sqlSchemaObject instanceof TSQLTable) {
042                    exportTable(schema, (TSQLTable) sqlSchemaObject);
043                }
044                if (sqlSchemaObject instanceof TSQLOraclePackage) {
045                    exportOraclePackage(schema, (TSQLOraclePackage) sqlSchemaObject);
046                }
047                if (sqlSchemaObject instanceof TSQLProcedure) {
048                    exportProcedure(schema, (TSQLProcedure) sqlSchemaObject);
049                }
050            }
051        }
052    }
053
054    private static void exportProcedure(Schema schema, TSQLProcedure sqlProcedure) {
055        Procedure procedure = new Procedure();
056        schema.appendProcedure(procedure);
057        procedure.setName(sqlProcedure.getName());
058        procedure.setDefinition(sqlProcedure.getDefinition());
059        procedure.setType(sqlProcedure.getDataObjectType().name().replace("dot", "").toLowerCase());
060    }
061
062
063    private static void exportOraclePackage(Schema schema, TSQLOraclePackage sqlOraclePackage) {
064        OraclePackage oraclePackage = new OraclePackage();
065        schema.appendOraclePackage(oraclePackage);
066        oraclePackage.setName(sqlOraclePackage.getName());
067        oraclePackage.setDefinition(sqlOraclePackage.getDefinition());
068        List<TSQLSchemaObject> procedures = sqlOraclePackage.getSchemaObjectList();
069        if (procedures != null) {
070            for (TSQLSchemaObject schemaObject : procedures) {
071                Procedure procedure = new Procedure();
072                oraclePackage.appendProcedure(procedure);
073                procedure.setName(schemaObject.getName());
074                procedure.setType(schemaObject.getDataObjectType().name().replace("dot", "").toLowerCase());
075                if(schemaObject instanceof TSQLProcedure) {
076                    procedure.setDefinition(((TSQLProcedure) schemaObject).getDefinition());
077                }
078            }
079        }
080    }
081
082    private static void exportTable(Schema schema, TSQLTable sqlTable) {
083        Table table = new Table();
084        schema.appendTable(table);
085        table.setName(sqlTable.getName());
086        table.setIsView(String.valueOf(sqlTable.isView()));
087        table.setPriority(sqlTable.getPriority());
088        List<TSQLColumn> columnList = sqlTable.getColumnList();
089        if (columnList != null) {
090            for (TSQLColumn sqlColumn : columnList) {
091                exportColumn(table, sqlColumn);
092            }
093        }
094    }
095
096    private static void exportColumn(Table table, TSQLColumn sqlColumn) {
097        Column column = new Column();
098        table.appendColumn(column);
099        column.setName(sqlColumn.getName());
100    }
101}