001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.ETablePartitionType;
004
005/**
006 * Partition definition in syntax like:
007 * <pre>
008 *     <code>
009             partition_definition:
010             PARTITION partition_name
011             [VALUES
012             {LESS THAN {(expr | value_list) | MAXVALUE}
013             |
014             IN (value_list)}]
015 *     </code>
016 * </pre>
017 * ref: https://dev.mysql.com/doc/refman/8.3/en/create-table.html
018 *
019 * @see {@link TTablePartitionItem}
020 */
021public class TPartitionDefinition extends TParseTreeNode{
022
023    private ETablePartitionType tablePartitionType;
024
025    public ETablePartitionType getTablePartitionType() {
026        return tablePartitionType;
027    }
028
029    public TObjectName getPartitionName() {
030        return partitionName;
031    }
032
033    public TExpressionList getLessThanValueList() {
034        return lessThanValueList;
035    }
036
037    public TExpressionList getInValueList() {
038        return inValueList;
039    }
040
041    private TObjectName partitionName;
042    private TExpressionList lessThanValueList;
043    private TExpressionList inValueList;
044
045    public void accept(TParseTreeVisitor v){
046        v.preVisit(this);
047        v.postVisit(this);
048    }
049
050    public void acceptChildren(TParseTreeVisitor v){
051        v.preVisit(this);
052        v.postVisit(this);
053    }
054
055    public void init(Object arg1, Object arg2, Object arg3){
056        this.tablePartitionType = (ETablePartitionType) arg1;
057        this.partitionName = (TObjectName)arg2;
058        switch (tablePartitionType){
059            case range:
060                this.lessThanValueList = (TExpressionList) arg3;
061                break;
062            case list:
063                this.inValueList = (TExpressionList) arg3;
064                break;
065        }
066    }
067}