001package gudusoft.gsqlparser.sqlenv.parser.grabit; 002 003import gudusoft.gsqlparser.EDbVendor; 004import gudusoft.gsqlparser.sqlenv.ESQLDataObjectType; 005import gudusoft.gsqlparser.sqlenv.TSQLEnv; 006import gudusoft.gsqlparser.sqlenv.TSQLSchema; 007import gudusoft.gsqlparser.sqlenv.TSQLTable; 008import gudusoft.gsqlparser.util.SQLUtil; 009 010import java.util.List; 011import java.util.Map; 012 013@SuppressWarnings("rawtypes") 014public class GrabitSQLEnv extends TSQLEnv { 015 016 private Map jsonContent; 017 018 private Boolean init = false; 019 020 public GrabitSQLEnv(String defaultServer, String defaultDatabase, String defaultSchema, EDbVendor dbVendor, Map jsonContent) { 021 super(dbVendor); 022 if(!SQLUtil.isEmpty(defaultServer) && !defaultServer.equals(TSQLEnv.DEFAULT_SERVER_NAME)) { 023 setDefaultServerName(defaultServer); 024 } 025 if(!SQLUtil.isEmpty(defaultDatabase) && !defaultDatabase.equals(TSQLEnv.DEFAULT_DB_NAME)) { 026 setDefaultCatalogName(defaultDatabase); 027 } 028 if(!SQLUtil.isEmpty(defaultSchema) && !defaultSchema.equals(TSQLEnv.DEFAULT_SCHEMA_NAME)) { 029 setDefaultSchemaName(defaultSchema); 030 } 031 this.jsonContent = jsonContent; 032 initSQLEnv(); 033 } 034 035 @Override 036 public void initSQLEnv() { 037 synchronized (init) { 038 if (jsonContent == null || init) 039 return; 040 if(jsonContent.containsKey("databaseModel")){ 041 jsonContent = (Map)jsonContent.get("databaseModel"); 042 } 043 List databases = (List) jsonContent.get("databases"); 044 if (databases != null) { 045 for (int i = 0; i < databases.size(); i++) { 046 Map jsonDatabase = (Map) databases.get(i); 047 String databaseName = (String) jsonDatabase.get("name"); 048 if(databaseName.indexOf(".")!=-1) { 049 databaseName = SQLUtil.quoteDottedName(this.getDBVendor(), ESQLDataObjectType.dotCatalog, databaseName); 050 } 051 List tables = (List) jsonDatabase.get("tables"); 052 for (int j = 0; j < tables.size(); j++) { 053 Map jsonTable = (Map) tables.get(j); 054 String schemeName = (String) jsonTable.get("schema"); 055 if(schemeName.indexOf(".")!=-1) { 056 schemeName = SQLUtil.quoteDottedName(this.getDBVendor(), ESQLDataObjectType.dotSchema, schemeName); 057 } 058 String tableName = (String) jsonTable.get("name"); 059 if(tableName.indexOf(".")!=-1) { 060 tableName = SQLUtil.quoteDottedName(this.getDBVendor(), ESQLDataObjectType.dotTable, tableName); 061 } 062 TSQLSchema sqlSchema = getSQLSchema(databaseName + "." + schemeName, true); 063 TSQLTable sqlTable = sqlSchema.createTable(tableName, 3); 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 jsonContent = null; 076 init = true; 077 } 078 } 079 } 080 081}