Esempio n. 1
0
  void parseDisplayColumns(VoltXMLElement columnsNode) {
    for (VoltXMLElement child : columnsNode.children) {
      ParsedColInfo col = new ParsedColInfo();
      col.expression = parseExpressionTree(child);
      if (col.expression instanceof ConstantValueExpression) {
        assert (col.expression.getValueType() != VoltType.NUMERIC);
      }
      ExpressionUtil.finalizeValueTypes(col.expression);
      assert (col.expression != null);
      col.alias = child.attributes.get("alias");

      if (child.name.equals("columnref")) {
        col.columnName = child.attributes.get("column");
        col.tableName = child.attributes.get("table");
      } else {
        // XXX hacky, assume all non-column refs come from a temp table
        col.tableName = "VOLT_TEMP_TABLE";
        col.columnName = "";
      }
      // This index calculation is only used for sanity checking
      // materialized views (which use the parsed select statement but
      // don't go through the planner pass that does more involved
      // column index resolution).
      col.index = displayColumns.size();
      displayColumns.add(col);
    }
  }
Esempio n. 2
0
  void parseGroupByColumn(VoltXMLElement groupByNode) {

    ParsedColInfo col = new ParsedColInfo();
    col.expression = parseExpressionTree(groupByNode);
    assert (col.expression != null);

    if (groupByNode.name.equals("columnref")) {
      col.alias = groupByNode.attributes.get("alias");
      col.columnName = groupByNode.attributes.get("column");
      col.tableName = groupByNode.attributes.get("table");
      col.groupBy = true;
    } else {
      throw new RuntimeException("GROUP BY with complex expressions not yet supported");
    }

    assert (col.alias.equalsIgnoreCase(col.columnName));
    assert (getTableFromDB(col.tableName) != null);
    assert (getTableFromDB(col.tableName).getColumns().getIgnoreCase(col.columnName) != null);
    org.voltdb.catalog.Column catalogColumn =
        getTableFromDB(col.tableName).getColumns().getIgnoreCase(col.columnName);
    col.index = catalogColumn.getIndex();
    groupByColumns.add(col);
  }