All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.kiryu1223.drink.ext.SqlFunctions Maven / Gradle / Ivy

There is a newer version: 1.0.14
Show newest version
package io.github.kiryu1223.drink.ext;


import io.github.kiryu1223.drink.annotation.SqlExtensionExpression;
import io.github.kiryu1223.drink.exception.SqlFunctionInvokeException;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.TemporalAmount;

public class SqlFunctions
{

    // region [聚合函数]

    @SqlExtensionExpression(dbType = DbType.H2, function = "COUNT(*)")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "COUNT(*)")
    public static long count()
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "COUNT({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "COUNT({})")
    public static  long count(T t)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUM({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUM({})")
    public static  T sum(T t)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "AVG({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "AVG({})")
    public static  BigDecimal avg(T t)
    {
        boom();
        return BigDecimal.ZERO;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MIN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MIN({})")
    public static  T min(T t)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MAX({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MAX({})")
    public static  T max(T t)
    {
        boom();
        return (T) new Object();
    }

    // endregion

    // region [时间]

    @SqlExtensionExpression(dbType = DbType.H2, function = "NOW()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "NOW()")
    public static LocalDateTime now()
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "UTC_TIMESTAMP()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "UTC_TIMESTAMP()")
    public static LocalDateTime utcNow()
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOCALTIME()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOCALTIME()")
    public static LocalDateTime localNow()
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SYSDATE()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SYSDATE()")
    public static LocalDateTime sysNow()
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CURDATE()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CURDATE()")
    public static LocalDate nowDate()
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CURTIME()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CURTIME()")
    public static LocalTime nowTime()
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "UTC_DATE()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "UTC_DATE()")
    public static LocalDate utcNowDate()
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "UTC_TIME()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "UTC_TIME()")
    public static LocalTime utcNowTime()
    {
        boom();
        return LocalTime.now();
    }

    //    public static LocalDateTime addDays(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addDays(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addHours(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addHours(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMinutes(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMinutes(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addSeconds(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addSeconds(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMicroSeconds(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMicroSeconds(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMilliSeconds(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMilliSeconds(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addNanoSeconds(LocalDateTime time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addNanoSeconds(LocalDate time, long duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMonths(LocalDateTime time, int duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addMonths(LocalDate time, int duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addYears(LocalDateTime time, int duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }
//
//    public static LocalDateTime addYears(LocalDate time, int duration)
//    {
//        boom();
//        return LocalDateTime.now();
//    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({time},INTERVAL {num} {unit})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({time},INTERVAL {num} {unit})")
    public static LocalDateTime addDate(LocalDateTime time, SqlTimeUnit unit, int num)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({time},INTERVAL {num} {unit})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({time},INTERVAL {num} {unit})")
    public static LocalDate addDate(LocalDate time, SqlTimeUnit unit, int num)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({},{})")
    public static LocalDateTime addDate(LocalDateTime time, int days)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({},{})")
    public static LocalDate addDate(LocalDate time, int days)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({},{})")
    public static LocalDateTime addDate(LocalDateTime time, LocalDateTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDDATE({},{})")
    public static LocalDate addDate(LocalDate time, LocalDate addtime)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDTIME({},{})")
    public static LocalDateTime addTime(LocalDateTime time, LocalTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDTIME({},{})")
    public static LocalDateTime addTime(LocalDateTime time, String addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDTIME({},{})")
    public static LocalTime addTime(LocalTime time, LocalTime addtime)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDTIME({},{})")
    public static LocalDateTime addTime(String time, LocalTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ADDTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ADDTIME({},{})")
    public static LocalDateTime addTime(String time, String addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATE({})")
    public static LocalDate getDate(LocalDateTime time)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATE({})")
    public static LocalDate getDate(String time)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDateTime t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDateTime t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDateTime t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDate t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDate t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(LocalDate t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int daysDiff(String t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDateTime t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDateTime t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDateTime t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDate t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDate t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(LocalDate t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int hoursDiff(String t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDateTime t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDateTime t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDateTime t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDate t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDate t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(LocalDate t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int minutesDiff(String t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDateTime t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDateTime t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDateTime t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDate t1, LocalDate t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDate t1, LocalDateTime t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(LocalDate t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATEDIFF({},{})")
    public static int secondsDiff(String t1, String t2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATE_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATE_FORMAT({},{})")
    public static String dateFormat(LocalDateTime time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATE_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATE_FORMAT({},{})")
    public static String dateFormat(LocalDate time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DATE_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DATE_FORMAT({},{})")
    public static String dateFormat(String time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAY({})")
    public static int getDay(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAY({})")
    public static int getDay(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAY({})")
    public static int getDay(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYNAME({})")
    public static String getDayName(LocalDateTime time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYNAME({})")
    public static String getDayName(LocalDate time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYNAME({})")
    public static String getDayName(String time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFWEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFWEEK({})")
    public static int getDayOfWeek(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFWEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFWEEK({})")
    public static int getDayOfWeek(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFWEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFWEEK({})")
    public static int getDayOfWeek(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFYEAR({})")
    public static int getDayOfYear(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFYEAR({})")
    public static int getDayOfYear(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DAYOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DAYOFYEAR({})")
    public static int getDayOfYear(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SEC_TO_TIME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SEC_TO_TIME({})")
    public static LocalTime toTime(int second)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "STR_TO_DATE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "STR_TO_DATE({})")
    public static LocalDate toDate(String time)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "STR_TO_DATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "STR_TO_DATE({},{})")
    public static LocalDate toDate(String time, String format)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "STR_TO_DATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "STR_TO_DATE({},{})")
    public static LocalDateTime toDateTime(String time, String format)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "FROM_DAYS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "FROM_DAYS({})")
    public static LocalDate toDate(long days)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TO_DAYS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TO_DAYS({})")
    public static long toDays(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TO_DAYS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TO_DAYS({})")
    public static long toDays(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TO_DAYS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TO_DAYS({})")
    public static long toDays(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_TO_SEC({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_TO_SEC({})")
    public static int toSecond(LocalTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_TO_SEC({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_TO_SEC({})")
    public static int toSecond(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_TO_SEC({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_TO_SEC({})")
    public static int toSecond(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "HOUR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "HOUR({})")
    public static int getHour(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "HOUR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "HOUR({})")
    public static int getHour(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "HOUR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "HOUR({})")
    public static int getHour(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LAST_DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LAST_DAY({})")
    public static int getLastDay(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LAST_DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LAST_DAY({})")
    public static int getLastDay(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LAST_DAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LAST_DAY({})")
    public static int getLastDay(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MAKEDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MAKEDATE({},{})")
    public static LocalDate createDate(int year, int days)
    {
        throw new SqlFunctionInvokeException();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MAKETIME({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MAKETIME({},{},{})")
    public static LocalTime createTime(int hour, int minute, int second)
    {
        throw new SqlFunctionInvokeException();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MICROSECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MICROSECOND({})")
    public static int getMicroSecond(LocalTime time)
    {
        throw new SqlFunctionInvokeException();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MICROSECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MICROSECOND({})")
    public static int getMicroSecond(LocalDateTime time)
    {
        throw new SqlFunctionInvokeException();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MICROSECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MICROSECOND({})")
    public static int getMicroSecond(String time)
    {
        throw new SqlFunctionInvokeException();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MINUTE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MINUTE({})")
    public static int getMinute(LocalTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MINUTE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MINUTE({})")
    public static int getMinute(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MINUTE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MINUTE({})")
    public static int getMinute(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTH({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTH({})")
    public static int getMonth(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTH({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTH({})")
    public static int getMonth(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTH({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTH({})")
    public static int getMonth(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTHNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTHNAME({})")
    public static String getMonthName(LocalDate time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTHNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTHNAME({})")
    public static String getMonthName(LocalDateTime time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MONTHNAME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MONTHNAME({})")
    public static String getMonthName(String time)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "QUARTER({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "QUARTER({})")
    public static int getQuarter(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "QUARTER({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "QUARTER({})")
    public static int getQuarter(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "QUARTER({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "QUARTER({})")
    public static int getQuarter(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SECOND({})")
    public static int getSecond(LocalTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SECOND({})")
    public static int getSecond(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SECOND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SECOND({})")
    public static int getSecond(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static  LocalDateTime subDate(LocalDateTime time, TimeLong timeLong)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static  LocalDate subDate(LocalDate time, TimeLong timeLong)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static LocalDateTime subDate(LocalDateTime time, int days)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static LocalDate subDate(LocalDate time, int days)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static LocalDateTime subDate(LocalDateTime time, LocalDateTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBDATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBDATE({},{})")
    public static LocalDate subDate(LocalDate time, LocalDate addtime)
    {
        boom();
        return LocalDate.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBTIME({},{})")
    public static LocalDateTime subTime(LocalDateTime time, LocalTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBTIME({},{})")
    public static LocalDateTime subTime(LocalDateTime time, String addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBTIME({},{})")
    public static LocalTime subTime(LocalTime time, LocalTime addtime)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBTIME({},{})")
    public static LocalDateTime subTime(String time, LocalTime addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBTIME({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBTIME({},{})")
    public static LocalDateTime subTime(String time, String addtime)
    {
        boom();
        return LocalDateTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME({})")
    public static int getTime(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME({})")
    public static int getTime(LocalTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME({})")
    public static int getTime(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_FORMAT({},{})")
    public static String timeFormat(LocalTime time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_FORMAT({},{})")
    public static String timeFormat(LocalDateTime time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIME_FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIME_FORMAT({},{})")
    public static String timeFormat(String time, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalDateTime t1, LocalDateTime t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalDateTime t1, LocalTime t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalDateTime t1, String t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalTime t1, LocalTime t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalTime t1, LocalDateTime t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(LocalTime t1, String t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TIMEDIFF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TIMEDIFF({},{})")
    public static LocalTime timeDiff(String t1, String t2)
    {
        boom();
        return LocalTime.now();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({})")
    public static int getWeek(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({},{})")
    public static int getWeek(LocalDate time, int firstDayofweek)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({})")
    public static int getWeek(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({},{})")
    public static int getWeek(LocalDateTime time, int firstDayofweek)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({})")
    public static int getWeek(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEK({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEK({},{})")
    public static int getWeek(String time, int firstDayofweek)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKDAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKDAY({})")
    public static int getWeekDay(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKDAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKDAY({})")
    public static int getWeekDay(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKDAY({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKDAY({})")
    public static int getWeekDay(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKOFYEAR({})")
    public static int getWeekOfYear(LocalDate time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKOFYEAR({})")
    public static int getWeekOfYear(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "WEEKOFYEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "WEEKOFYEAR({})")
    public static int getWeekOfYear(String time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.SqlServer, function = "DATEPART(YEAR,{})")
    public static int getYear(LocalDateTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.SqlServer, function = "DATEPART(YEAR,{})")
    public static int getYear(LocalTime time)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "YEAR({})")
    @SqlExtensionExpression(dbType = DbType.SqlServer, function = "DATEPART(YEAR,{})")
    public static int getYear(String time)
    {
        boom();
        return 0;
    }

    // endregion

    // region [数值]

    @SqlExtensionExpression(dbType = DbType.H2, function = "ABS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ABS({})")
    public static  T abs(T a)
    {
        boom();
        return (T) new Num();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "COS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "COS({})")
    public static  double cos(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SIN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SIN({})")
    public static  double sin(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TAN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TAN({})")
    public static  double tan(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ACOS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ACOS({})")
    public static  double acos(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ASIN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ASIN({})")
    public static  double asin(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ATAN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ATAN({})")
    public static  double atan(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ATAN2({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ATAN2({},{})")
    public static  double atan2(T a, T b)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CEIL({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CEIL({})")
    public static  long ceil(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "COT({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "COT({})")
    public static  double cot(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "DEGREES({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "DEGREES({})")
    public static  double degrees(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "EXP({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "EXP({})")
    public static  double exp(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "FLOOR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "FLOOR({})")
    public static  T floor(T a)
    {
        boom();
        return (T) new Num();
    }

    @SafeVarargs
    @SqlExtensionExpression(dbType = DbType.H2, function = "GREATEST({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "GREATEST({},{})")
    public static  T big(T a, T b, T... cs)
    {
        boom();
        return (T) new Num();
    }

    @SafeVarargs
    @SqlExtensionExpression(dbType = DbType.H2, function = "LEAST({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LEAST({},{})")
    public static  T small(T a, T b, T... cs)
    {
        boom();
        return (T) new Num();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LN({})")
    public static  double ln(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOG({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOG({})")
    public static  double log(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOG2({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOG2({})")
    public static  double log2(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOG10({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOG10({})")
    public static  double log10(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "MOD({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "MOD({},{})")
    public static  T mod(T a, T b)
    {
        boom();
        return (T) new Num();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "PI()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "PI()")
    public static double pi()
    {
        boom();
        return 3.14159;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "POW({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "POW({},{})")
    public static  double pow(T a, T b)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RADIANS({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RADIANS({})")
    public static  double radians(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RAND()")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RAND()")
    public static double random()
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RAND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RAND({})")
    public static double random(int a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ROUND({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ROUND({})")
    public static  T round(T a)
    {
        boom();
        return (T) new Num();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "ROUND({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ROUND({},{})")
    public static  T round(T a, int b)
    {
        boom();
        return (T) new Num();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SIGN({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SIGN({})")
    public static  int sign(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SQRT({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SQRT({})")
    public static  double sqrt(T a)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TRUNCATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TRUNCATE({},{})")
    public static  long truncate(T a, int b)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TRUNCATE({},0)")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TRUNCATE({},0)")
    public static  long truncate(T a)
    {
        boom();
        return 0;
    }

    // endregion

    // region [字符串]

    @SqlExtensionExpression(dbType = DbType.H2, function = "ASCII({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "ASCII({})")
    public static int ascii(String string)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CHAR_LENGTH({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CHAR_LENGTH({})")
    public static int length(String string)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CONCAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CONCAT({},{})")
    public static String concat(String s1, String s2, String... ss)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CONCAT_WS({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CONCAT_WS({},{},{})")
    public static String join(String separator, String s1, String s2, String... ss)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CHAR({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CHAR({})")
    public static  String toStr(T t)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "FORMAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "FORMAT({},{})")
    public static  String numberFormat(T t, String format)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "HEX({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "HEX({})")
    public static  String hex(T t)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "HEX({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "HEX({})")
    public static String hex(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "INSERT({},{},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "INSERT({},{},{},{})")
    public static String insert(String str, int pos, int length, String newStr)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "INSTR({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "INSTR({},{})")
    public static int instr(String s1, String s2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOWER({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOWER({})")
    public static String toLower(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LEFT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LEFT({},{})")
    public static String left(String string, int length)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LENGTH({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LENGTH({})")
    public static int byteLength(String string)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LPAD({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LPAD({},{},{})")
    public static String leftPad(String string, int length, String lpadString)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LTRIM({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LTRIM({})")
    public static String trimStart(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOCATE({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOCATE({},{})")
    public static int locate(String subString, String string)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "LOCATE({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "LOCATE({},{},{})")
    public static int locate(String subString, String string, int offset)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "REPEAT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "REPEAT({},{})")
    public static String repeat(String string, int number)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "REPLACE({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "REPLACE({},{},{})")
    public static String replace(String cur, String subs, String news)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "REVERSE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "REVERSE({})")
    public static String reverse(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RIGHT({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RIGHT({},{})")
    public static String right(String string, int length)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RPAD({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RPAD({},{},{})")
    public static String rightPad(String string, int length, String rpadString)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "RTRIM({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "RTRIM({})")
    public static String trimEnd(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SPACE({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SPACE({})")
    public static String space(int number)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "STRCMP({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "STRCMP({},{})")
    public static int compare(String s1, String s2)
    {
        boom();
        return 0;
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBSTR({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBSTR({},{})")
    public static String subString(String string, int pos)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBSTR({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBSTR({},{},{})")
    public static String subString(String string, int pos, int length)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "SUBSTRING_INDEX({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "SUBSTRING_INDEX({},{},{})")
    public static String subStringIndex(String string, String delimiter, int length)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "TRIM({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "TRIM({})")
    public static String trim(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "UPPER({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "UPPER({})")
    public static String toUpper(String string)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "UNHEX({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "UNHEX({})")
    public static byte[] unHex(String string)
    {
        boom();
        return new byte[]{};
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "GROUP_CONCAT({})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "GROUP_CONCAT({})")
    public static String groupJoin(String property)
    {
        boom();
        return "";
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "GROUP_CONCAT({property} SEPARATOR {delimiter})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "GROUP_CONCAT({property} SEPARATOR {delimiter})")
    public static  String groupJoin(String delimiter, T property)
    {
        boom();
        return "";
    }

    @SafeVarargs
    @SqlExtensionExpression(dbType = DbType.H2, function = "GROUP_CONCAT({properties} SEPARATOR {delimiter})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "GROUP_CONCAT({properties} SEPARATOR {delimiter})")
    public static  String groupJoin(String delimiter, T... properties)
    {
        boom();
        return "";
    }

    // endregion

    // region [控制流程]

    @SqlExtensionExpression(dbType = DbType.H2, function = "IF({},{},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "IF({},{},{})")
    public static  T If(boolean condition, T truePart, T falsePart)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "IFNULL({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "IFNULL({},{})")
    public static  T ifNull(T ifNotNull, T ifNull)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "NULLIF({},{})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "NULLIF({},{})")
    public static  T nullIf(T ifNotEq, T t2)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CAST({} AS {})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CAST({} AS {})")
    public static  T cast(Object value, Class targetType)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(dbType = DbType.H2, function = "CAST({} AS {})")
    @SqlExtensionExpression(dbType = DbType.MySQL, function = "CONVERT({targetType},{value})")
    public static  T convert(Object value, Class targetType)
    {
        boom();
        return (T) new Object();
    }

    @SqlExtensionExpression(function = "{} IS NULL")
    public static  boolean isNull(T t)
    {
        boom();
        return false;
    }

    @SqlExtensionExpression(function = "{} IS NOT NULL")
    public static  boolean isNotNull(T t)
    {
        boom();
        return false;
    }

    // endregion

    private static void boom()
    {
        if (win) // if win we win always
        {
            throw new SqlFunctionInvokeException();
        }
    }

    private static final boolean win = true;

    private static class Num extends Number
    {
        private Num() {}

        @Override
        public int intValue()
        {
            return 0;
        }

        @Override
        public long longValue()
        {
            return 0;
        }

        @Override
        public float floatValue()
        {
            return 0;
        }

        @Override
        public double doubleValue()
        {
            return 0;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy