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