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