001package gudusoft.gsqlparser.sqlenv.parser.sqldep; 002 003import gudusoft.gsqlparser.EDbVendor; 004import gudusoft.gsqlparser.dlineage.util.DlineageUtil; 005import gudusoft.gsqlparser.util.SQLUtil; 006import gudusoft.gsqlparser.util.json.JSON; 007import gudusoft.gsqlparser.sqlenv.TSQLEnv; 008import gudusoft.gsqlparser.sqlenv.TSQLSchema; 009import gudusoft.gsqlparser.sqlenv.TSQLTable; 010 011import java.util.List; 012import java.util.Map; 013import java.util.logging.Level; 014import java.util.logging.Logger; 015 016@SuppressWarnings("rawtypes") 017public class MultipleSQLDepSQLEnv extends TSQLEnv { 018 019 private List jsonArray; 020 021 private Boolean init = false; 022 023 public MultipleSQLDepSQLEnv(String defaultServer, String defaultDatabase, String defaultSchema, EDbVendor dbVendor, List jsonArray) { 024 super(dbVendor); 025 if(!SQLUtil.isEmpty(defaultServer) && !defaultServer.equals(TSQLEnv.DEFAULT_SERVER_NAME)) { 026 setDefaultServerName(defaultServer); 027 } 028 if(!SQLUtil.isEmpty(defaultDatabase) && !defaultDatabase.equals(TSQLEnv.DEFAULT_DB_NAME)) { 029 setDefaultCatalogName(defaultDatabase); 030 } 031 if(!SQLUtil.isEmpty(defaultSchema) && !defaultSchema.equals(TSQLEnv.DEFAULT_SCHEMA_NAME)) { 032 setDefaultSchemaName(defaultSchema); 033 } 034 this.jsonArray = jsonArray; 035 initSQLEnv(); 036 } 037 038 @Override 039 public void initSQLEnv() { 040 synchronized (init) { 041 if (jsonArray == null || init) 042 return; 043 044 for (int x = 0; x < jsonArray.size(); x++) { 045 String sql = ((Map) jsonArray.get(x)).get("sql").toString().trim(); 046 if (!sql.startsWith("{") && !sql.endsWith("}")) { 047 continue; 048 } 049 050 try { 051 Map jsonContent = (Map) JSON.parseObject(sql); 052 List databases = (List) jsonContent.get("databases"); 053 if (databases != null) { 054 for (int i = 0; i < databases.size(); i++) { 055 Map jsonDatabase = (Map) databases.get(i); 056 String databaseName = (String) jsonDatabase.get("name"); 057 List tables = (List) jsonDatabase.get("tables"); 058 for (int j = 0; j < tables.size(); j++) { 059 Map jsonTable = (Map) tables.get(j); 060 String schemeName = (String) jsonTable.get("schema"); 061 String tableName = (String) jsonTable.get("name"); 062 TSQLSchema sqlSchema = getSQLSchema(databaseName + "." + schemeName, true); 063 TSQLTable sqlTable = sqlSchema.createTable(DlineageUtil.getSimpleTableName(tableName)); 064 if (jsonTable.containsKey("isView")) { 065 sqlTable.setView(Boolean.parseBoolean((String) jsonTable.get("isView"))); 066 } 067 List columns = (List) jsonTable.get("columns"); 068 for (int k = 0; k < columns.size(); k++) { 069 Map jsonColumn = (Map) columns.get(k); 070 sqlTable.addColumn((String) jsonColumn.get("name")); 071 } 072 } 073 } 074 } 075 } catch (Exception e) { 076 Logger.getLogger(MultipleSQLDepSQLEnv.class.getName()).log(Level.WARNING, "Parse json failed.", e); 077 } 078 } 079 080 jsonArray = null; 081 init = true; 082 } 083 } 084 085}