Package com.google.visualization.datasource.base

Examples of com.google.visualization.datasource.base.InvalidQueryException


  public static DateTimeValue stringToDatetime(String s)
      throws InvalidQueryException {
    String[] mainSplit = s.split(" ");
    if (mainSplit.length != 2) {
      log.error(String.format(dateTimeMessage, s));
      throw new InvalidQueryException(String.format(dateTimeMessage, s));
    }
    String[] dateSplit = mainSplit[0].split("-");
    String[] timeSplit = mainSplit[1].split(":");
    if ((dateSplit.length != 3) || (timeSplit.length != 3)) {
      log.error(String.format(dateTimeMessage, s));
      throw new InvalidQueryException(String.format(dateTimeMessage, s));
    }
    try {
      int year = Integer.parseInt(dateSplit[0]);
      int month = Integer.parseInt(dateSplit[1]);
      month--; // normalize 1-12 to 0-11.
      int day = Integer.parseInt(dateSplit[2]);
      int hour = Integer.parseInt(timeSplit[0]);
      int minute = Integer.parseInt(timeSplit[1]);
      int second;
      int milli = 0;
      if (timeSplit[2].contains(".")) {
        String[] secondMilliSplit = timeSplit[2].split("\\.");
        if (secondMilliSplit.length != 2) {
          log.error(String.format(dateTimeMessage, s));
          throw new InvalidQueryException(String.format(dateTimeMessage, s));
        }
        second = Integer.parseInt(secondMilliSplit[0]);
        milli = Integer.parseInt(secondMilliSplit[1]);
      } else {
        second = Integer.parseInt(timeSplit[2]);
      }
      return new DateTimeValue(year, month, day, hour, minute, second, milli);
    } catch (NumberFormatException e) {
      log.error(String.format(dateTimeMessage, s));
      throw new InvalidQueryException(String.format(dateTimeMessage, s));
    } catch (IllegalArgumentException e) {
      log.error(String.format(dateTimeMessage, s));
      throw new InvalidQueryException(String.format(dateTimeMessage, s));
    }
  }
View Full Code Here


      try {
        query = QueryParser.parseString(tqValue);
      } catch (ParseException ex) {
        String messageToUserAndLog = ex.getMessage();
        log.error("Parsing error: " + messageToUserAndLog);
        throw new InvalidQueryException("Query error: " + messageToUserAndLog);
      }
      query.validate();
    }
    return query;
  }
View Full Code Here

  public void addLabel(AbstractColumn column, String label) throws InvalidQueryException {
    if (columnLabels.keySet().contains(column)) {
      String messageToLogAndUser = "Column [" + column.toString() + "] is "
          + "specified more than once in LABEL.";
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }
    columnLabels.put(column, label);
  }
View Full Code Here

    ValueType valueType = dataTable.getColumnDescription(aggregatedColumn.getId()).getType();
    switch (aggregationType) {
      case COUNT: case MAX: case MIN: break;
      case AVG: case SUM:
      if (valueType != ValueType.NUMBER) {
        throw new InvalidQueryException("'Average' and 'sum' aggreagation "
            + "functions can be applied only on numeric values.");
      }
      break;
      default: throw new RuntimeException("Invalid aggregation type: "
          + aggregationType);
View Full Code Here

    for (String columnId : mentionedColumnIds) {
      if (!dataTable.containsColumn(columnId)) {
        String messageToLogAndUser = "Column [" + columnId + "] does not"
            + " exist in table.";
        log.error(messageToLogAndUser);
        throw new InvalidQueryException(messageToLogAndUser);
      }
    }

    // Check that all aggregation columns are valid (i.e., the aggregation type
    // matches the columns type).
    Set<AggregationColumn> mentionedAggregations = query.getAllAggregations();
    for (AggregationColumn agg : mentionedAggregations) {
      try {
        agg.validateColumn(dataTable);
      } catch (RuntimeException e) {
        log.error("A runtime exception has occured", e);
        throw new InvalidQueryException(e.getMessage());
      }
    }

    // Check that all scalar function columns are valid. (i.e., the scalar
    // function matches the columns types).
View Full Code Here

      for (int j = i + 1; j < selectionColumns.size(); j++) {
        if (col.equals(selectionColumns.get(j))) {
          String messageToLogAndUser = "Column [" + col.toString() + "] "
              + "cannot appear more than once in " + clauseName + ".";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }
  }
View Full Code Here

   */
  public void setRowLimit(int rowLimit) throws InvalidQueryException {
    if (rowLimit < -1) {
      String messageToLogAndUser = "Invalid value for row limit: " + rowLimit;
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }
    this.rowLimit = rowLimit;
  }
View Full Code Here

   */
  public void setRowOffset(int rowOffset) throws InvalidQueryException {
    if (rowOffset < 0) {
      String messageToLogAndUser = "Invalid value for row offset: " + rowOffset;
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }
    this.rowOffset = rowOffset;
  }
View Full Code Here

      for (AbstractColumn column : group.getColumns()) {
        if (!column.getAllAggregationColumns().isEmpty()) {
          String messageToLogAndUser = "Column [" + column.toQueryString() + "] connot be in"
              + " GROUP BY because it has an aggregation.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }
    if (hasPivot()) {
      for (AbstractColumn column : pivot.getColumns()) {
        if (!column.getAllAggregationColumns().isEmpty()) {
          String messageToLogAndUser = "Column [" + column.toQueryString() + "] connot be in"
              + " PIVOT because it has an aggregation.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }
    if (hasFilter()) {
      List<AggregationColumn> filterAggregations = filter.getAggregationColumns();
      if (!filterAggregations.isEmpty()) {
        String messageToLogAndUser = "Column [" + filterAggregations.get(0).toQueryString() + "] "
        + " cannot appear in WHERE because it has an aggregation.";
        log.error(messageToLogAndUser);
        throw new InvalidQueryException(messageToLogAndUser);
      }
    }
   
    // A column cannot appear both as an aggregation column and as a regular
    // column in the selection.
    for (SimpleColumn column1 : selectionSimple) {
      String id = column1.getColumnId();
      for (AggregationColumn column2 : selectionAggregated) {
        if (id.equals(column2.getAggregatedColumn().getId())) {
          String messageToLogAndUser = "Column [" + id + "] cannot be "
              + "selected both with and without aggregation in SELECT.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }

    // When aggregation is used, check that all selected columns are valid
    // (a column is valid if it is either grouped-by, or is a
    // scalar function column whose arguments are all valid columns).
    if (!selectionAggregated.isEmpty()) {
      for (AbstractColumn col : selectionColumns) {
        checkSelectedColumnWithGrouping(groupColumns, col);
      }
    }

    // Cannot group by a column that appears in an aggregation.
    if (hasSelection() && hasGroup()) {
      for (AggregationColumn column : selectionAggregated) {
        String id = column.getAggregatedColumn().getId();
        if (groupColumnIds.contains(id)) {
          String messageToLogAndUser = "Column [" + id + "] which is "
              + "aggregated in SELECT, cannot appear in GROUP BY.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }

    // Cannot use grouping or pivoting when no aggregations are defined in the
    // selection.
    if (hasGroup() && selectionAggregated.isEmpty()) {
      String messageToLogAndUser = "Cannot use GROUP BY when no "
          + "aggregations are defined in SELECT.";
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }
    if (hasPivot() && selectionAggregated.isEmpty()) {
      String messageToLogAndUser = "Cannot use PIVOT when no "
          + "aggregations are defined in SELECT.";
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }

    // Cannot order by a column that is not in the selection when aggregations
    // are defined.
    if (hasSort() && !selectionAggregated.isEmpty()) {
      for (AbstractColumn column : sort.getColumns()) {
        String messageToLogAndUser = "Column [" + column.toQueryString() + "] which "
            + "appears in ORDER BY, must be in SELECT as well, because SELECT"
            + " contains aggregated columns.";
        checkColumnInList(selection.getColumns(), column,
            messageToLogAndUser);
      }
    }

    // Cannot pivot by a column that appears in an aggregation.
    if (hasPivot()) {
      for (AggregationColumn column : selectionAggregated) {
        String id = column.getAggregatedColumn().getId();
        if (pivotColumnIds.contains(id)) {
          String messageToLogAndUser = "Column [" + id + "] which is "
              + "aggregated in SELECT, cannot appear in PIVOT.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }

    // Cannot have a column appear in both group by and pivot.
    if (hasGroup() && hasPivot()) {
      for (String id : groupColumnIds) {
        if (pivotColumnIds.contains(id)) {
          String messageToLogAndUser = "Column [" + id + "] cannot appear" +
              " both in GROUP BY and in PIVOT.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }

    // Cannot order by aggregation column when pivoting is used.
    if (hasPivot() && !sortAggregated.isEmpty()) {
      AggregationColumn column = sortAggregated.get(0);
      String messageToLogAndUser = "Column [" +
          column.getAggregatedColumn().getId() + "] " + "cannot be aggregated "
          + "in ORDER BY when PIVOT is used.";
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }

    // Cannot order by aggregation columns that weren't defined in the
    // selection.
    for (AggregationColumn column : sortAggregated) {
        String messageToLogAndUser = "Aggregation [" + column.toQueryString() + "] "
            + "found in ORDER BY but was not found in SELECT";
        checkColumnInList(selectionAggregated, column, messageToLogAndUser);
    }

    Set<AbstractColumn> labelColumns = (hasLabels()
        ? labels.getColumns() : Sets.<AbstractColumn>newHashSet());
    Set<AbstractColumn> formatColumns = (hasUserFormatOptions()
        ? userFormatOptions.getColumns() : Sets.<AbstractColumn>newHashSet());

    if (hasSelection()) {
      for (AbstractColumn col : labelColumns) {
        if (!selectionColumns.contains(col)) {
          String messageToLogAndUser = "Column [" + col.toQueryString() + "] which"
              + " is referenced in LABEL, is not part of SELECT clause.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
      for (AbstractColumn col : formatColumns) {
        if (!selectionColumns.contains(col)) {
          String messageToLogAndUser = "Column [" + col.toQueryString() + "] which"
              + " is referenced in FORMAT, is not part of SELECT clause.";
          log.error(messageToLogAndUser);
          throw new InvalidQueryException(messageToLogAndUser);
        }
      }
    }
  }
View Full Code Here

      for (AbstractColumn innerColumn : innerColumns) {
        checkColumnInList(columns, innerColumn, messageToLogAndUser);
      }
    } else {
      log.error(messageToLogAndUser);
      throw new InvalidQueryException(messageToLogAndUser);
    }
  }
View Full Code Here

TOP

Related Classes of com.google.visualization.datasource.base.InvalidQueryException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.