CurrentTimeFunction.java

package com.github.mygreen.sqlmapper.core.where.metamodel.function;

import java.util.List;

import com.github.mygreen.sqlmapper.core.where.metamodel.ExpressionEvaluator;
import com.github.mygreen.sqlmapper.core.where.metamodel.SqlFunction;
import com.github.mygreen.sqlmapper.core.where.metamodel.VisitorContext;
import com.github.mygreen.sqlmapper.metamodel.Visitor;
import com.github.mygreen.sqlmapper.metamodel.expression.Constant;
import com.github.mygreen.sqlmapper.metamodel.expression.Expression;

/**
 * {@literal CURRENT_TIME} 関数を処理します。
 *
 * @since 0.3
 * @author T.TSUCHIE
 *
 */
public class CurrentTimeFunction implements SqlFunction {

    @Override
    public void handle(List<Expression<?>> args, Visitor<VisitorContext> visitor, VisitorContext context,
            ExpressionEvaluator invoker) {

        context.appendSql("current_time");
        doPrecision(args, context);

    }

    /**
     * 時間の制度が指定されていれば処理を行う。
     * @param expr 演算子の式
     * @param context コンテキスト
     */
    @SuppressWarnings("unchecked")
    private void doPrecision(List<Expression<?>> args, VisitorContext context) {

        if(args.isEmpty()) {
            return;
        }

        int precision = (int)((Constant<Integer>)args.get(0)).getValue();
        context.appendSql("(").append(precision).append(")");

    }

}