001package gudusoft.gsqlparser.sqlenv.parser.sqldep;
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 SQLDepSQLEnv extends TSQLEnv {
015
016        private Map jsonContent;
017
018        private Boolean init = false;
019
020        public SQLDepSQLEnv(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}