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}