/*
* Copyright 1999-2012 Alibaba Group.
*
* 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.
*/
/**
* (created at 2011-1-21)
*/
package com.alibaba.cobar.parser.ast.expression.primary.literal;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.cobar.parser.ast.expression.Expression;
import com.alibaba.cobar.parser.visitor.SQLASTVisitor;
/**
* @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a>
*/
public class IntervalPrimary extends Literal {
public static enum Unit {
MICROSECOND,
SECOND,
MINUTE,
HOUR,
DAY,
WEEK,
MONTH,
QUARTER,
YEAR,
SECOND_MICROSECOND,
MINUTE_MICROSECOND,
MINUTE_SECOND,
HOUR_MICROSECOND,
HOUR_SECOND,
HOUR_MINUTE,
DAY_MICROSECOND,
DAY_SECOND,
DAY_MINUTE,
DAY_HOUR,
YEAR_MONTH
}
private static final Map<String, Unit> unitMap = initUnitMap();
private static Map<String, Unit> initUnitMap() {
Unit[] units = Unit.class.getEnumConstants();
Map<String, Unit> map = new HashMap<String, IntervalPrimary.Unit>(units.length);
for (Unit unit : units) {
map.put(unit.name(), unit);
}
return map;
}
/**
* @param unitString must be upper case, null is forbidden
*/
public static Unit getIntervalUnit(String unitString) {
return unitMap.get(unitString);
}
private final Unit unit;
private final Expression quantity;
public IntervalPrimary(Expression quantity, Unit unit) {
super();
if (quantity == null)
throw new IllegalArgumentException("quantity expression is null");
if (unit == null)
throw new IllegalArgumentException("unit of time is null");
this.quantity = quantity;
this.unit = unit;
}
/**
* @return never null
*/
public Unit getUnit() {
return unit;
}
/**
* @return never null
*/
public Expression getQuantity() {
return quantity;
}
@Override
public void accept(SQLASTVisitor visitor) {
visitor.visit(this);
}
}