private void testInvalidAggregation(Double[] x, int n) {
   try {
     testAggregation(new long[] {}, createDoublesBlock(x), createLongRepeatBlock(n, x.length));
   } catch (PrestoException e) {
     assertEquals(e.getErrorCode().getName(), INVALID_FUNCTION_ARGUMENT.name());
   }
 }
Beispiel #2
0
 private static DateTime parseDateTimeHelper(DateTimeFormatter formatter, String datetimeString) {
   try {
     return formatter.parseDateTime(datetimeString);
   } catch (IllegalArgumentException e) {
     throw new PrestoException(INVALID_FUNCTION_ARGUMENT.toErrorCode(), e);
   }
 }
Beispiel #3
0
  @Description("get the smallest of the given values")
  @ScalarFunction
  @SqlType(DoubleType.NAME)
  public static double least(
      @SqlType(DoubleType.NAME) double value1, @SqlType(DoubleType.NAME) double value2) {
    if (Double.isNaN(value1) || Double.isNaN(value2)) {
      throw new PrestoException(
          INVALID_FUNCTION_ARGUMENT.toErrorCode(), "Invalid argument to least(): NaN");
    }

    return value1 < value2 ? value1 : value2;
  }
Beispiel #4
0
  @SuppressWarnings("fallthrough")
  public static DateTimeFormatter createDateTimeFormatter(Slice format) {
    DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();

    String formatString = format.toString(Charsets.UTF_8);
    boolean escaped = false;
    for (int i = 0; i < format.length(); i++) {
      char character = formatString.charAt(i);

      if (escaped) {
        switch (character) {
          case 'a': // %a Abbreviated weekday name (Sun..Sat)
            builder.appendDayOfWeekShortText();
            break;
          case 'b': // %b Abbreviated month name (Jan..Dec)
            builder.appendMonthOfYearShortText();
            break;
          case 'c': // %c Month, numeric (0..12)
            builder.appendMonthOfYear(1);
            break;
          case 'd': // %d Day of the month, numeric (00..31)
            builder.appendDayOfMonth(2);
            break;
          case 'e': // %e Day of the month, numeric (0..31)
            builder.appendDayOfMonth(1);
            break;
          case 'f': // %f Microseconds (000000..999999)
            builder.appendMillisOfSecond(6);
            break;
          case 'H': // %H Hour (00..23)
            builder.appendHourOfDay(2);
            break;
          case 'h': // %h Hour (01..12)
          case 'I': // %I Hour (01..12)
            builder.appendClockhourOfHalfday(2);
            break;
          case 'i': // %i Minutes, numeric (00..59)
            builder.appendMinuteOfHour(2);
            break;
          case 'j': // %j Day of year (001..366)
            builder.appendDayOfYear(3);
            break;
          case 'k': // %k Hour (0..23)
            builder.appendClockhourOfDay(1);
            break;
          case 'l': // %l Hour (1..12)
            builder.appendClockhourOfHalfday(1);
            break;
          case 'M': // %M Month name (January..December)
            builder.appendMonthOfYearText();
            break;
          case 'm': // %m Month, numeric (00..12)
            builder.appendMonthOfYear(2);
            break;
          case 'p': // %p AM or PM
            builder.appendHalfdayOfDayText();
            break;
          case 'r': // %r Time, 12-hour (hh:mm:ss followed by AM or PM)
            builder
                .appendClockhourOfHalfday(2)
                .appendLiteral(':')
                .appendMinuteOfHour(2)
                .appendLiteral(':')
                .appendSecondOfMinute(2)
                .appendLiteral(' ')
                .appendHalfdayOfDayText();
            break;
          case 'S': // %S Seconds (00..59)
          case 's': // %s Seconds (00..59)
            builder.appendSecondOfMinute(2);
            break;
          case 'T': // %T Time, 24-hour (hh:mm:ss)
            builder
                .appendHourOfDay(2)
                .appendLiteral(':')
                .appendMinuteOfHour(2)
                .appendLiteral(':')
                .appendSecondOfMinute(2);
            break;
          case 'v': // %v Week (01..53), where Monday is the first day of the week; used with %x
            builder.appendWeekOfWeekyear(2);
            break;
          case 'x': // %x Year for the week, where Monday is the first day of the week, numeric,
                    // four digits; used with %v
            builder.appendWeekyear(4, 4);
            break;
          case 'W': // %W Weekday name (Sunday..Saturday)
            builder.appendDayOfWeekText();
            break;
          case 'w': // %w Day of the week (0=Sunday..6=Saturday)
            builder.appendDayOfWeek(1);
            break;
          case 'Y': // %Y Year, numeric, four digits
            builder.appendYear(4, 4);
            break;
          case 'y': // %y Year, numeric (two digits)
            builder.appendYearOfCentury(2, 2);
            break;
          case 'U': // %U Week (00..53), where Sunday is the first day of the week
          case 'u': // %u Week (00..53), where Monday is the first day of the week
          case 'V': // %V Week (01..53), where Sunday is the first day of the week; used with %X
          case 'X': // %X Year for the week where Sunday is the first day of the week, numeric, four
                    // digits; used with %V
          case 'D': // %D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
            throw new PrestoException(
                INVALID_FUNCTION_ARGUMENT.toErrorCode(),
                String.format("%%%s not supported in date format string", character));
          case '%': // %% A literal “%” character
            builder.appendLiteral('%');
            break;
          default: // %<x> The literal character represented by <x>
            builder.appendLiteral(character);
            break;
        }
        escaped = false;
      } else if (character == '%') {
        escaped = true;
      } else {
        builder.appendLiteral(character);
      }
    }

    try {
      return builder.toFormatter();
    } catch (UnsupportedOperationException e) {
      throw new PrestoException(INVALID_FUNCTION_ARGUMENT.toErrorCode(), e);
    }
  }