001package gudusoft.gsqlparser.nodes;
002/*
003 * Date: 14-9-17
004 */
005
006import gudusoft.gsqlparser.EQueryHint;
007import gudusoft.gsqlparser.nodes.*;
008
009/**
010 * <a href="http://msdn.microsoft.com/en-us/library/ms181714.aspx">SQL Server query hint</a>
011 *
012 * @see gudusoft.gsqlparser.EQueryHint
013 */
014public class TQueryHint extends TParseTreeNode {
015    private EQueryHint queryHintType;
016    private TConstant number_rows;
017    private TConstant number_of_processors;
018    private TConstant maxrecursion_number;
019    private TObjectName exposed_object_name ;
020    private TPTNodeList <TTableHint> tableHints;
021
022    /**
023     * TABLE HINT ( exposed_object_name [ , &lt;table_hint&gt; [ [, ]...n ] ] )
024     * @return table_hint list
025     * @see gudusoft.gsqlparser.nodes.TTableHint
026     */
027
028    public TPTNodeList<TTableHint> getTableHints() {
029        return tableHints;
030    }
031
032    /**
033     * TABLE HINT ( exposed_object_name [ , &lt;table_hint&gt; [ [, ]...n ] ] )
034     * @return exposed_object_name
035     */
036    public TObjectName getExposed_object_name() {
037        return exposed_object_name;
038    }
039
040    /**
041     *  MAXRECURSION number
042     * @return  number
043     */
044    public TConstant getMaxrecursion_number() {
045        return maxrecursion_number;
046    }
047
048    /**
049     * MAXDOP number_of_processors
050     * @return number_of_processors
051     */
052    public TConstant getNumber_of_processors() {
053        return number_of_processors;
054    }
055
056    public EQueryHint getQueryHintType() {
057        return queryHintType;
058    }
059
060    public void init(Object arg1){
061        queryHintType = (EQueryHint)arg1;
062    }
063
064    /**
065     * FAST number_rows
066     * @return number_rows
067     */
068    public TConstant getNumber_rows() {
069        return number_rows;
070    }
071
072    public void init(Object arg1,Object arg2){
073        init(arg1);
074        switch (queryHintType){
075            case E_QUERY_HINT_FAST:
076                number_rows = (TConstant)arg2;
077                break;
078            case E_QUERY_HINT_MAXDOP:
079                number_of_processors = (TConstant)arg2;
080                break;
081            case E_QUERY_HINT_MAXRECURSION:
082                maxrecursion_number = (TConstant)arg2;
083                break;
084            case E_QUERY_HINT_TABLE_HINT:
085                exposed_object_name = (TObjectName)arg2;
086                break;
087            default:
088                break;
089        }
090    }
091
092    public void init(Object arg1,Object arg2,Object arg3){
093        init(arg1,arg2);
094        tableHints = (TPTNodeList)arg3;
095    }
096
097    public void accept(TParseTreeVisitor v){
098        v.preVisit(this);
099        v.postVisit(this);
100    }
101
102    public void acceptChildren(TParseTreeVisitor v){
103        v.preVisit(this);
104        v.postVisit(this);
105    }
106
107    public void setQueryHintType(EQueryHint queryHintType) {
108        this.queryHintType = queryHintType;
109    }
110
111    public void setNumber_rows(TConstant number_rows) {
112        this.number_rows = number_rows;
113    }
114
115    public void setNumber_of_processors(TConstant number_of_processors) {
116        this.number_of_processors = number_of_processors;
117    }
118
119    public void setMaxrecursion_number(TConstant maxrecursion_number) {
120        this.maxrecursion_number = maxrecursion_number;
121    }
122
123    public void setExposed_object_name(TObjectName exposed_object_name) {
124        this.exposed_object_name = exposed_object_name;
125    }
126
127    public void setTableHints(TPTNodeList<TTableHint> tableHints) {
128        this.tableHints = tableHints;
129    }
130}