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                if (sqlSchemaObject instanceof TSQLSynonyms) {
051                    exportSynonym(schema, (TSQLSynonyms) sqlSchemaObject);
052                }
053            }
054        }
055    }
056
057    private static void exportSynonym(Schema schema, TSQLSynonyms sqlSynonyms) {
058        Synonym synonym = new Synonym();
059        schema.appendSynonym(synonym);
060        synonym.setName(sqlSynonyms.getName());
061        synonym.setSourceDatabase(sqlSynonyms.getSourceDatabase());
062        synonym.setSourceSchema(sqlSynonyms.getSourceSchema());
063        synonym.setSourceName(sqlSynonyms.getSourceName());
064    }
065
066    private static void exportProcedure(Schema schema, TSQLProcedure sqlProcedure) {
067        Procedure procedure = new Procedure();
068        schema.appendProcedure(procedure);
069        procedure.setName(sqlProcedure.getName());
070        procedure.setDefinition(sqlProcedure.getDefinition());
071        procedure.setType(sqlProcedure.getDataObjectType().name().replace("dot", "").toLowerCase());
072    }
073
074
075    private static void exportOraclePackage(Schema schema, TSQLOraclePackage sqlOraclePackage) {
076        OraclePackage oraclePackage = new OraclePackage();
077        schema.appendOraclePackage(oraclePackage);
078        oraclePackage.setName(sqlOraclePackage.getName());
079        oraclePackage.setDefinition(sqlOraclePackage.getDefinition());
080        List<TSQLSchemaObject> procedures = sqlOraclePackage.getSchemaObjectList();
081        if (procedures != null) {
082            for (TSQLSchemaObject schemaObject : procedures) {
083                Procedure procedure = new Procedure();
084                oraclePackage.appendProcedure(procedure);
085                procedure.setName(schemaObject.getName());
086                procedure.setType(schemaObject.getDataObjectType().name().replace("dot", "").toLowerCase());
087                if(schemaObject instanceof TSQLProcedure) {
088                    procedure.setDefinition(((TSQLProcedure) schemaObject).getDefinition());
089                }
090            }
091        }
092    }
093
094    private static void exportTable(Schema schema, TSQLTable sqlTable) {
095        Table table = new Table();
096        schema.appendTable(table);
097        table.setName(sqlTable.getName());
098        table.setIsView(String.valueOf(sqlTable.isView()));
099        table.setPriority(sqlTable.getPriority());
100        List<TSQLColumn> columnList = sqlTable.getColumnList();
101        if (columnList != null) {
102            for (TSQLColumn sqlColumn : columnList) {
103                exportColumn(table, sqlColumn);
104            }
105        }
106    }
107
108    private static void exportColumn(Table table, TSQLColumn sqlColumn) {
109        Column column = new Column();
110        table.appendColumn(column);
111        column.setName(sqlColumn.getName());
112    }
113}