예제 #1
0
 private String toString(SeQueryInfo qInfo) {
   StringBuffer sb = new StringBuffer("SeQueryInfo[\n\tcolumns=");
   try {
     SeSqlConstruct sql = qInfo.getConstruct();
     String[] tables = sql.getTables();
     String[] cols = qInfo.getColumns();
     String by = null;
     try {
       by = qInfo.getByClause();
     } catch (NullPointerException npe) {
       // no-op
     }
     String where = sql.getWhere();
     for (int i = 0; cols != null && i < cols.length; i++) {
       sb.append(cols[i]);
       if (i < cols.length - 1) sb.append(", ");
     }
     sb.append("\n\tTables=");
     for (int i = 0; i < tables.length; i++) {
       sb.append(tables[i]);
       if (i < tables.length - 1) sb.append(", ");
     }
     sb.append("\n\tWhere=");
     sb.append(where);
     sb.append("\n\tOrderBy=");
     sb.append(by);
   } catch (SeException e) {
     sb.append("Exception retrieving query info properties: " + e.getMessage());
   }
   sb.append("]");
   return sb.toString();
 }
예제 #2
0
    /**
     * Returns an SeQueryInfo that can be used to retrieve a set of SeRows from an ArcSDE layer or a
     * layer with joins. The SeQueryInfo object lacks the set of column names to fetch. It is the
     * responsibility of the calling code to call setColumns(String []) on the returned object to
     * specify which properties to fetch.
     *
     * @param unqualifiedPropertyNames non null, possibly empty, list of property names to fetch
     * @return
     * @throws IOException
     */
    public SeQueryInfo getQueryInfo(final String[] unqualifiedPropertyNames) throws IOException {
      assert unqualifiedPropertyNames != null;
      String[] tables;
      String byClause = null;

      final SeSqlConstruct plainSqlConstruct = getSeSqlConstruct();

      String where = plainSqlConstruct.getWhere();

      try {
        if (definitionQuery == null) {
          tables = new String[] {this.sdeTable.getQualifiedName()};
        } else {
          tables = definitionQuery.getConstruct().getTables();
          String joinWhere = definitionQuery.getConstruct().getWhere();
          if (where == null) {
            where = joinWhere;
          } else {
            where = joinWhere == null ? where : (joinWhere + " AND " + where);
          }
          try {
            byClause = definitionQuery.getByClause();
          } catch (NullPointerException e) {
            // no-op
          }
        }

        final SeQueryInfo qInfo = new SeQueryInfo();
        final SeSqlConstruct sqlConstruct = new SeSqlConstruct();
        sqlConstruct.setTables(tables);
        if (where != null && where.length() > 0) {
          sqlConstruct.setWhere(where);
        }

        final int queriedAttCount = unqualifiedPropertyNames.length;

        if (queriedAttCount > 0) {
          String[] sdeAttNames = new String[queriedAttCount];
          FilterToSQLSDE sqlEncoder = getSqlEncoder();

          for (int i = 0; i < queriedAttCount; i++) {
            String attName = unqualifiedPropertyNames[i];
            String coldef = sqlEncoder.getColumnDefinition(attName);
            sdeAttNames[i] = coldef;
          }
          qInfo.setColumns(sdeAttNames);
        }

        qInfo.setConstruct(sqlConstruct);
        if (byClause != null) {
          qInfo.setByClause(byClause);
        }
        return qInfo;
      } catch (SeException e) {
        throw new ArcSdeException(e);
      }
    }