001/*
002MIT License
003
004Copyright (c) 2020 FBSQL Team
005
006Permission is hereby granted, free of charge, to any person obtaining a copy
007of this software and associated documentation files (the "Software"), to deal
008in the Software without restriction, including without limitation the rights
009to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
010copies of the Software, and to permit persons to whom the Software is
011furnished to do so, subject to the following conditions:
012
013The above copyright notice and this permission notice shall be included in all
014copies or substantial portions of the Software.
015
016THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
017IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
018FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
019AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
020LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
021OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
022SOFTWARE.
023
024Home:   https://fbsql.github.io
025E-Mail: fbsql.team@gmail.com
026*/
027
028package org.fbsql.antlr4.parser;
029
030import java.util.ArrayList;
031import java.util.List;
032
033import org.antlr.v4.runtime.CharStreams;
034import org.antlr.v4.runtime.CommonTokenStream;
035import org.antlr.v4.runtime.Lexer;
036import org.antlr.v4.runtime.tree.ParseTree;
037import org.antlr.v4.runtime.tree.ParseTreeWalker;
038import org.fbsql.antlr4.generated.FbsqlBaseListener;
039import org.fbsql.antlr4.generated.FbsqlLexer;
040import org.fbsql.antlr4.generated.FbsqlParser;
041import org.fbsql.antlr4.generated.FbsqlParser.Sql_script_fileContext;
042import org.fbsql.servlet.DbServlet;
043import org.fbsql.servlet.StringUtils;
044
045public class ParseStmtInclude {
046        /**
047         * DECLARE PROCEDURE statement transfer object
048         * Declare stored procedure or function (can be used only in «init.sql» script)
049         */
050        public class StmtInclude {
051                public List<String> fileNames;
052
053                @Override
054                public String toString() {
055                        return "StmtIncludeScriptFile [fileNames=" + fileNames + "]";
056                }
057        }
058
059        /**
060         * StmtInclude transfer object
061         */
062        private StmtInclude st;
063
064        public ParseStmtInclude() {
065                st           = new StmtInclude();
066                st.fileNames = new ArrayList<>();
067        }
068
069        /**
070         * DECLARE PROCEDURE Statement parser
071         *
072         * E.g.: DECLARE PROCEDURE GET_EMPLOYEES FOR "org.fbsql.examples.StoredProcedures::getEmployees";
073         *
074         * @param sql
075         * @return
076         */
077        public StmtInclude parse(String sql) {
078                Lexer       lexer  = new FbsqlLexer(CharStreams.fromString(sql));
079                FbsqlParser parser = new FbsqlParser(new CommonTokenStream(lexer));
080                ParseTree   tree   = parser.include_script_file_stmt();
081
082                ParseTreeWalker.DEFAULT.walk(new FbsqlBaseListener() {
083
084                        @Override
085                        public void enterSql_script_file(Sql_script_fileContext ctx) {
086                                st.fileNames.add(StringUtils.unquote(ctx.getText()));
087                        }
088
089                }, tree);
090
091                if (DbServlet.DEBUG)
092                        System.out.println(st);
093
094                return st;
095        }
096}
097
098/*
099Please contact FBSQL Team by E-Mail fbsql.team@gmail.com
100or visit https://fbsql.github.io if you need additional
101information or have any questions.
102*/
103
104/* EOF */