private FilterToSQLSDE getSqlEncoder() { if (_sqlEncoder == null) { final String layerName = sdeTable.getQualifiedName(); String fidColumn = fidReader.getFidColumn(); _sqlEncoder = new FilterToSQLSDE(layerName, fidColumn, featureType, layerSelectStatement); } return _sqlEncoder; }
/** * 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; }
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()); }