예제 #1
0
  private static SelectStatement prependTenantAndViewConstants(
      PTable table, SelectStatement select, String tenantId, Set<PColumn> addViewColumns) {
    if ((!table.isMultiTenant() || tenantId == null)
        && table.getViewIndexId() == null
        && addViewColumns.isEmpty()) {
      return select;
    }
    List<AliasedNode> selectNodes =
        newArrayListWithCapacity(select.getSelect().size() + 1 + addViewColumns.size());
    if (table.isMultiTenant() && tenantId != null) {
      selectNodes.add(new AliasedNode(null, new LiteralParseNode(tenantId)));
    }
    if (table.getViewIndexId() != null) {
      selectNodes.add(new AliasedNode(null, new LiteralParseNode(table.getViewIndexId())));
    }
    selectNodes.addAll(select.getSelect());
    for (PColumn column : addViewColumns) {
      byte[] byteValue = column.getViewConstant();
      Object value = column.getDataType().toObject(byteValue, 0, byteValue.length - 1);
      selectNodes.add(new AliasedNode(null, new LiteralParseNode(value)));
    }

    return SelectStatement.create(select, selectNodes);
  }