001package gudusoft.gsqlparser;
002
003public class TSingletonParser {
004    private static volatile TSingletonParser instance;
005    private TSingletonParser(){}
006
007    public static TSingletonParser getInstance() {
008
009        if (instance == null) {
010            synchronized (TSingletonParser.class) {
011                if (instance == null)
012                    instance = new TSingletonParser();
013            }
014        }
015        return instance;
016    }
017
018    public synchronized TStatementList getStmts(EDbVendor dbVendor, String str){
019        TStatementList statements = new TStatementList();
020        TGSqlParser sqlParser = this.getParser(dbVendor);
021        sqlParser.sqltext = str;
022        int i = sqlParser.parse();
023        if (i == 0){
024            for(int j=0;j<sqlParser.getSqlstatements().size();j++){
025                statements.add(sqlParser.getSqlstatements().get(j));
026            }
027        }
028        return statements;
029    }
030
031    public synchronized TSourceTokenList getTokens(EDbVendor dbVendor, String str){
032        TSourceTokenList stList = new TSourceTokenList();
033        TGSqlParser sqlParser = this.getParser(dbVendor);
034        sqlParser.sqltext = str;
035        sqlParser.tokenizeSqltext();
036        for(int i=0;i<sqlParser.sourcetokenlist.size();i++){
037            stList.add(sqlParser.sourcetokenlist.get(i));
038        }
039        return stList;
040    }
041
042    private static TGSqlParser gOracleParser = null, gSQLServerParer = null, gSybaseParser = null,gInformixParser = null,
043            gDb2Parser = null,gMySQLParser = null, gTeradataParser = null, gPostgresParser = null, gRedshiftParser = null,
044            gGreenplumParser = null, gMdxParser = null, gNetezzaParser = null, gHiveParser = null, gImpalaParser = null,
045            gHanaParser = null, gDaxParser = null, gOdbcParser = null,gVerticalParser = null, gOpenedgeParser = null,
046            gCouchbaseParser = null, gSnowflakeParser = null,gBigqueryParser = null, gSoqlParser = null, gSparksqlParser = null,
047            gAthenaParser = null, gPrestoParser = null, gTrinoParser = null, gGaussDBParser = null;
048
049
050    private synchronized TGSqlParser getParser(EDbVendor dbVendor) {
051
052        TGSqlParser ret = null;
053
054        switch(dbVendor){
055            case dbvmssql :
056            case dbvaccess:
057            case dbvazuresql:
058            {
059                if (gSQLServerParer == null){
060                    gSQLServerParer = new TGSqlParser(dbVendor);
061                }
062                ret = gSQLServerParer;
063                break;
064            }
065            case dbvsybase:{
066                if (gSybaseParser == null){
067                    gSybaseParser = new TGSqlParser(dbVendor);
068                }
069                ret = gSybaseParser;
070                break;
071            }
072            case dbvinformix:{
073                if (gInformixParser == null){
074                    gInformixParser = new TGSqlParser(dbVendor);
075                }
076                ret = gInformixParser;
077                break;
078            }
079            case dbvoracle :{
080                if (gOracleParser == null){
081                    gOracleParser = new TGSqlParser(dbVendor);
082                }
083                ret = gOracleParser;
084                break;
085            }
086            case dbvdb2 :{
087                if (gDb2Parser == null){
088                    gDb2Parser = new TGSqlParser(dbVendor);
089                }
090                ret = gDb2Parser;
091                break;
092            }
093            case dbvmysql :{
094                if (gMySQLParser == null){
095                    gMySQLParser = new TGSqlParser(dbVendor);
096                }
097                ret = gMySQLParser;
098                break;
099            }
100            case dbvteradata :{
101                if (gTeradataParser == null){
102                    gTeradataParser = new TGSqlParser(dbVendor);
103                }
104                ret = gTeradataParser;
105                break;
106            }
107            case dbvpostgresql:{
108                if (gPostgresParser == null){
109                    gPostgresParser = new TGSqlParser(dbVendor);
110                }
111                ret = gPostgresParser;
112                break;
113            }
114            case dbvredshift:{
115                if (gRedshiftParser == null){
116                    gRedshiftParser = new TGSqlParser(dbVendor);
117                }
118                ret = gRedshiftParser;
119                break;
120            }
121            case dbvgreenplum:{
122                if (gGreenplumParser == null){
123                    gGreenplumParser = new TGSqlParser(dbVendor);
124                }
125                ret = gGreenplumParser;
126                break;
127            }
128            case dbvmdx:{
129                if (gMdxParser == null){
130                    gMdxParser = new TGSqlParser(dbVendor);
131                }
132                ret = gMdxParser;
133                break;
134            }
135            case dbvnetezza:{
136                if (gNetezzaParser == null){
137                    gNetezzaParser = new TGSqlParser(dbVendor);
138                }
139                ret = gNetezzaParser;
140                break;
141            }
142            case dbvhive:{
143                if (gHiveParser == null){
144                    gHiveParser = new TGSqlParser(dbVendor);
145                }
146                ret = gHiveParser;
147                break;
148            }
149            case dbvimpala:{
150                if (gImpalaParser == null){
151                    gImpalaParser = new TGSqlParser(dbVendor);
152                }
153                ret = gImpalaParser;
154                break;
155            }
156            case dbvhana:{
157                if (gHanaParser == null){
158                    gHanaParser = new TGSqlParser(dbVendor);
159                }
160                ret = gHanaParser;
161                break;
162            }
163            case dbvdax:{
164                if (gDaxParser == null){
165                    gDaxParser = new TGSqlParser(dbVendor);
166                }
167                ret = gDaxParser;
168                break;
169            }
170            case dbvodbc:{
171                if (gOdbcParser == null){
172                    gOdbcParser = new TGSqlParser(dbVendor);
173                }
174                ret = gOdbcParser;
175                break;
176            }
177            case dbvvertica:{
178                if (gVerticalParser == null){
179                    gVerticalParser = new TGSqlParser(dbVendor);
180                }
181                ret = gVerticalParser;
182                break;
183            }
184            case dbvopenedge:{
185                if (gOpenedgeParser == null){
186                    gOpenedgeParser = new TGSqlParser(dbVendor);
187                }
188                ret = gOpenedgeParser;
189                break;
190            }
191            case dbvcouchbase:{
192                if (gCouchbaseParser == null){
193                    gCouchbaseParser = new TGSqlParser(dbVendor);
194                }
195                ret = gCouchbaseParser;
196                break;
197            }
198            case dbvsnowflake:{
199                if (gSnowflakeParser == null){
200                    gSnowflakeParser = new TGSqlParser(dbVendor);
201                }
202                ret = gSnowflakeParser;
203                break;
204            }
205            case dbvbigquery:{
206                if (gBigqueryParser == null){
207                    gBigqueryParser = new TGSqlParser(dbVendor);
208                }
209                ret = gBigqueryParser;
210                break;
211            }
212            case dbvansi:
213            case dbvgeneric: {
214                if (gSQLServerParer == null){
215                    gSQLServerParer = new TGSqlParser(dbVendor);
216                }
217                ret = gSQLServerParer;
218                break;
219            }
220            case dbvsoql:{
221                if (gSoqlParser == null){
222                    gSoqlParser = new TGSqlParser(dbVendor);
223                }
224                ret = gSoqlParser;
225                break;
226            }
227            case dbvsparksql:{
228                if (gSparksqlParser == null){
229                    gSparksqlParser = new TGSqlParser(dbVendor);
230                }
231                ret = gSparksqlParser;
232                break;
233            }
234            case dbvathena:
235            {
236                if (gAthenaParser == null){
237                    gAthenaParser = new TGSqlParser(dbVendor);
238                }
239                ret = gAthenaParser;
240                break;
241            }
242            case dbvpresto:
243            {
244                if (gPrestoParser == null){
245                    gPrestoParser = new TGSqlParser(dbVendor);
246                }
247                ret = gPrestoParser;
248                break;
249            }
250            case dbvtrino:
251            {
252                if (gTrinoParser == null){
253                    gTrinoParser = new TGSqlParser(dbVendor);
254                }
255                ret = gTrinoParser;
256                break;
257            }
258            case dbvgaussdb:
259                if (gGaussDBParser == null){
260                    gGaussDBParser = new TGSqlParser(dbVendor);
261                }
262                ret = gGaussDBParser;
263                break;
264            default:  {
265                if (gSQLServerParer == null){
266                    gSQLServerParer = new TGSqlParser(dbVendor);
267                }
268                ret = gSQLServerParer;
269                break;
270            }
271        }
272
273        return ret;
274
275    }
276
277}