Example #1
0
 private FilterToSQLSDE getSqlEncoder() {
   if (_sqlEncoder == null) {
     final String layerName = sdeTable.getQualifiedName();
     String fidColumn = fidReader.getFidColumn();
     _sqlEncoder = new FilterToSQLSDE(layerName, fidColumn, featureType, layerSelectStatement);
   }
   return _sqlEncoder;
 }
Example #2
0
 /**
  * Returns the stream used to fetch rows, creating it if it was not yet created.
  *
  * @throws SeException
  * @throws IOException
  */
 private SeQuery getSeQuery() throws IOException {
   if (this.query == null) {
     try {
       String[] propsToQuery = fidReader.getPropertiesToFetch(this.schema);
       this.query = createSeQueryForFetch(propsToQuery);
     } catch (SeException e) {
       throw new ArcSdeException(e);
     }
   }
   return this.query;
 }
  private FIDReader getFidReader(String tableName) throws IOException {
    FIDReader fidReader;
    String dbName = session.getDatabaseName();
    tableName =
        ((dbName == null || "".equals(dbName)) ? "" : (dbName + "."))
            + session.getUser()
            + "."
            + tableName;
    tableName = tableName.toUpperCase();

    SeTable table = session.getTable(tableName);
    SeLayer layer = session.getLayer(tableName);
    SeRegistration reg = session.createSeRegistration(tableName);
    fidReader = FIDReader.getFidReader(session, table, layer, reg);
    return fidReader;
  }
Example #4
0
  private static String buildSortByClause(
      final SimpleFeatureType fullSchema,
      final SortBy[] sortByAttributes,
      final FIDReader fidReader) {

    if (sortByAttributes == null || sortByAttributes.length == 0) {
      return null;
    }

    StringBuilder byClause = new StringBuilder("ORDER BY ");
    for (int i = 0; i < sortByAttributes.length; i++) {
      SortBy sortAtt = sortByAttributes[i];
      if (sortAtt == NATURAL_ORDER || sortAtt == REVERSE_ORDER) {
        if (fidReader instanceof SdeManagedFidReader || fidReader instanceof UserManagedFidReader) {
          byClause.append(fidReader.getFidColumn()).append(" ");
          byClause.append(sortAtt == NATURAL_ORDER ? "ASC" : "DESC");
        } else {
          throw new IllegalArgumentException(
              sortAtt + " sorting is not supported for featureclasses" + " with no primary key");
        }
      } else {
        final PropertyName propertyName = sortAtt.getPropertyName();
        final String attName = propertyName.getPropertyName();
        final AttributeDescriptor descriptor = fullSchema.getDescriptor(attName);
        if (descriptor == null) {
          throw new IllegalArgumentException(attName + " does not exist. Can't sort by it");
        }
        if (descriptor instanceof GeometryDescriptor) {
          throw new IllegalArgumentException(
              attName + " is a geometry attribute. Can't sort by it");
        }

        byClause.append(attName).append(" ");
        byClause.append(sortAtt.getSortOrder() == SortOrder.ASCENDING ? "ASC" : "DESC");
      }
      if (i < sortByAttributes.length - 1) {
        byClause.append(", ");
      }
    }
    return byClause.toString();
  }
  /**
   * Test method for {@link
   * org.geotools.arcsde.data.FIDReader#getFidReader(org.geotools.arcsde.session.ISession,
   * com.esri.sde.sdk.client.SeTable, com.esri.sde.sdk.client.SeLayer,
   * com.esri.sde.sdk.client.SeRegistration)} .
   *
   * @throws IOException
   */
  @Test
  public void testGetFidReader() throws IOException {
    FIDReader fidReader;
    fidReader = getFidReader("GT_TEST_POINT_ROWID_SDE");
    assertNotNull(fidReader);
    assertTrue(fidReader instanceof FIDReader.SdeManagedFidReader);
    assertEquals(0, fidReader.getColumnIndex());
    assertEquals("ROW_ID", fidReader.getFidColumn());

    fidReader = getFidReader("GT_TEST_POINT_ROWID_USER");
    assertNotNull(fidReader);
    assertTrue(fidReader instanceof FIDReader.UserManagedFidReader);
    assertEquals(0, fidReader.getColumnIndex());
    assertEquals("ROW_ID", fidReader.getFidColumn());

    fidReader = getFidReader("GT_TEST_POINT_ROWID_NONE");
    assertNotNull(fidReader);
    assertTrue(fidReader instanceof FIDReader.ShapeFidReader);
    assertEquals(-1, fidReader.getColumnIndex());
    // use toUpperCase, case may be different depending on the backend rdbms
    assertEquals("GEOM.FID", fidReader.getFidColumn().toUpperCase());
  }