From: <svn...@os...> - 2012-02-29 15:35:25
|
Author: groldan Date: 2012-02-29 07:35:12 -0800 (Wed, 29 Feb 2012) New Revision: 38584 Modified: branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/data/ArcSDEQuery.java branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/filter/FilterToSQLSDE.java Log: always qualify attribute names, versioned layers may be doing internal joins and fail otherwise Modified: branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/data/ArcSDEQuery.java =================================================================== --- branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/data/ArcSDEQuery.java 2012-02-29 15:34:33 UTC (rev 38583) +++ branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/data/ArcSDEQuery.java 2012-02-29 15:35:12 UTC (rev 38584) @@ -575,11 +575,16 @@ final SimpleFeatureType schema = this.schema; final String colName; - if (fidReader.getFidColumn() == null) { - colName = schema.getDescriptor(0).getLocalName(); - } else { - colName = fidReader.getFidColumn(); + { + String fidAtt; + if (fidReader.getFidColumn() == null) { + fidAtt = schema.getDescriptor(0).getLocalName(); + } else { + fidAtt = fidReader.getFidColumn(); + } + colName = filters.getSqlEncoder().getColumnDefinition(fidAtt); } + final SeQueryInfo qInfo = filters.getQueryInfo(new String[] { colName }); final SeFilter[] spatialFilters = filters.getSpatialFilters(); @@ -589,6 +594,8 @@ public Integer execute(ISession session, SeConnection connection) throws SeException, IOException { + final SeQueryInfo queryInfo = qInfo; + SeQuery query = new SeQuery(connection); try { @@ -616,7 +623,7 @@ */ } - query.prepareQueryInfo(qInfo); + query.prepareQueryInfo(queryInfo); query.execute(); int count = 0; while (query.fetch() != null) { @@ -628,7 +635,7 @@ final int defaultMaxDistinctValues = 0; final SeTable.SeTableStats tableStats; tableStats = query.calculateTableStatistics(colName, - SeTable.SeTableStats.SE_COUNT_STATS, qInfo, defaultMaxDistinctValues); + SeTable.SeTableStats.SE_COUNT_STATS, queryInfo, defaultMaxDistinctValues); int actualCount = tableStats.getCount(); return new Integer(actualCount); @@ -657,7 +664,13 @@ public SeExtent execute(ISession session, SeConnection connection) throws SeException, IOException { - final String[] spatialCol = { schema.getGeometryDescriptor().getLocalName() }; + final String[] spatialCol; + { + String geomCol = schema.getGeometryDescriptor().getLocalName(); + geomCol = filters.getSqlEncoder().getColumnDefinition(geomCol); + spatialCol = new String[] { geomCol }; + } + // fullConstruct may hold information about multiple tables in case of an // in-process view final SeSqlConstruct fullConstruct = filters.getQueryInfo(spatialCol) Modified: branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/filter/FilterToSQLSDE.java =================================================================== --- branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/filter/FilterToSQLSDE.java 2012-02-29 15:34:33 UTC (rev 38583) +++ branches/2.7.x/modules/plugin/arcsde/datastore/src/main/java/org/geotools/arcsde/filter/FilterToSQLSDE.java 2012-02-29 15:35:12 UTC (rev 38584) @@ -232,10 +232,8 @@ return unused; } - String fidField = layerFidFieldName; - try { - String sql = buildFilter(fids, fidField + " IN(", ")", ",", 1000, " OR "); + String sql = buildFidFilter(fids, layerFidFieldName, " IN(", ")", ",", 1000, " OR "); if (LOGGER.isLoggable(Level.FINER)) { LOGGER.finer("added fid filter: " + sql); @@ -249,16 +247,20 @@ } // return a string - private String buildFilter(long[] fids, String prefix, String suffix, String separator, - int groupSize, String groupSeparator) { + private String buildFidFilter(long[] fids, String fidAttribute, String prefix, String suffix, + String separator, int groupSize, String groupSeparator) { final int count = fids.length; final int groups = count / groupSize; final int remainder = count % groupSize; final StringBuilder sql = new StringBuilder(); + + final String encodedFidAttribute = getColumnDefinition(fidAttribute); + for (int i = 0; i < groups; i++) { if (i > 0) { sql.append(groupSeparator); } + sql.append(encodedFidAttribute); sql.append(prefix); addSubList(sql, fids, i * groupSize, (i + 1) * groupSize, separator); sql.append(suffix); @@ -267,6 +269,7 @@ if (groups > 0) { sql.append(groupSeparator); } + sql.append(encodedFidAttribute); sql.append(prefix); addSubList(sql, fids, count - remainder, count, separator); sql.append(suffix); |