OracleSelectParser.java 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

T
terrymanu 已提交
18
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.oracle;
19

20
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
T
terrymanu 已提交
21
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.LexerEngine;
T
terrymanu 已提交
22
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.HavingSQLParser;
T
terrymanu 已提交
23
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.OrderBySQLParser;
T
terrymanu 已提交
24
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SelectRestSQLParser;
T
terrymanu 已提交
25
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.AbstractSelectParser;
26
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectStatement;
27

T
terrymanu 已提交
28 29 30 31 32 33
/**
 * Oracle Select语句解析器.
 *
 * @author zhangliang
 */
public final class OracleSelectParser extends AbstractSelectParser {
34
    
35 36
    private final OracleHierarchicalQueryClauseParser hierarchicalQueryClauseParser;
    
T
terrymanu 已提交
37 38
    private final HavingSQLParser havingSQLParser;
    
T
terrymanu 已提交
39 40
    private final OracleModelClauseParser modelClauseParser;
    
41
    private final OrderBySQLParser orderBySQLParser;
42
    
T
terrymanu 已提交
43 44
    private final OracleForParser forParser;
    
T
terrymanu 已提交
45 46
    private final SelectRestSQLParser selectRestSQLParser;
    
47
    public OracleSelectParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) {
T
terrymanu 已提交
48
        super(shardingRule, lexerEngine, 
T
terrymanu 已提交
49 50
                new OracleDistinctSQLParser(lexerEngine), new OracleSelectListSQLParser(shardingRule, lexerEngine), new OracleTableSQLParser(shardingRule, lexerEngine), 
                new OracleWhereSQLParser(lexerEngine), new OracleGroupBySQLParser(lexerEngine));
51
        hierarchicalQueryClauseParser = new OracleHierarchicalQueryClauseParser(shardingRule, lexerEngine);
T
terrymanu 已提交
52
        havingSQLParser = new HavingSQLParser(lexerEngine);
T
terrymanu 已提交
53
        modelClauseParser = new OracleModelClauseParser(lexerEngine);
54
        orderBySQLParser = new OracleOrderBySQLParser(lexerEngine);
T
terrymanu 已提交
55
        forParser = new OracleForParser(lexerEngine);
T
terrymanu 已提交
56
        selectRestSQLParser = new SelectRestSQLParser(lexerEngine);
57 58
    }
    
T
terrymanu 已提交
59
    @Override
60
    protected void parseInternal(final SelectStatement selectStatement) {
T
terrymanu 已提交
61
        parseDistinct();
T
terrymanu 已提交
62
        parseSelectList(selectStatement, getItems());
63
        parseFrom(selectStatement);
T
terrymanu 已提交
64
        parseWhere(getShardingRule(), selectStatement, getItems());
T
terrymanu 已提交
65
        parseHierarchicalQueryClause(selectStatement);
T
terrymanu 已提交
66
        parseGroupBy(selectStatement);
T
terrymanu 已提交
67
        havingSQLParser.parse();
T
terrymanu 已提交
68
        parseModelClause(selectStatement);
69
        orderBySQLParser.parse(selectStatement);
T
terrymanu 已提交
70
        parseFor(selectStatement);
T
terrymanu 已提交
71
        selectRestSQLParser.parse();
T
terrymanu 已提交
72
    }
T
terrymanu 已提交
73 74 75 76 77 78 79 80 81 82 83 84
    
    private void parseHierarchicalQueryClause(final SelectStatement selectStatement) {
        hierarchicalQueryClauseParser.parse(selectStatement);
    }
    
    private void parseModelClause(final SelectStatement selectStatement) {
        modelClauseParser.parse(selectStatement);
    }
    
    private void parseFor(final SelectStatement selectStatement) {
        forParser.parse(selectStatement);
    }
85
}