From: <svn...@os...> - 2010-04-30 10:53:09
|
Author: aaime Date: 2010-04-30 06:52:59 -0400 (Fri, 30 Apr 2010) New Revision: 35311 Modified: trunk/modules/unsupported/postgis-versioned/ trunk/modules/unsupported/postgis-versioned/src/main/java/org/geotools/data/postgis/VersionedPostgisDataStore.java trunk/modules/unsupported/postgis-versioned/src/test/java/org/geotools/data/postgis/VersionedOperationsOnlineTest.java Log: Fixing diff calculation not working on tables that where empty when version enabled Property changes on: trunk/modules/unsupported/postgis-versioned ___________________________________________________________________ Modified: svn:mergeinfo - /branches/2.5.x/modules/unsupported/postgis-versioned:33601,33614,33682,33788 /branches/2.6.x/modules/library/referencing/unsupported/postgis-versioned:34717-34718 /branches/2.6.x/modules/unsupported/postgis-versioned:34665,34679,34701,34713,34717-34718,34759,34802,34849,35198,35219 /branches/simple-features/modules/unsupported/postgis-versioned:35278-35308 + /branches/2.5.x/modules/unsupported/postgis-versioned:33601,33614,33682,33788 /branches/2.6.x/modules/library/referencing/unsupported/postgis-versioned:34717-34718 /branches/2.6.x/modules/unsupported/postgis-versioned:34665,34679,34701,34713,34717-34718,34759,34802,34849,35198,35219,35309 /branches/simple-features/modules/unsupported/postgis-versioned:35278-35308 Modified: trunk/modules/unsupported/postgis-versioned/src/main/java/org/geotools/data/postgis/VersionedPostgisDataStore.java =================================================================== --- trunk/modules/unsupported/postgis-versioned/src/main/java/org/geotools/data/postgis/VersionedPostgisDataStore.java 2010-04-30 10:32:15 UTC (rev 35310) +++ trunk/modules/unsupported/postgis-versioned/src/main/java/org/geotools/data/postgis/VersionedPostgisDataStore.java 2010-04-30 10:52:59 UTC (rev 35311) @@ -849,17 +849,32 @@ * The base revision is the revision at which the feature type has been version enabled. * returned) * @param typeName - * @return + * @return */ long getBaseRevision(String typeName, Transaction transaction) throws IOException { - DefaultQuery q = new DefaultQuery(typeName); - q.setPropertyNames(new String[] {REVISION}); + // first grab the table code + DefaultQuery q = new DefaultQuery(TBL_VERSIONEDTABLES); + q.setFilter(ff.equal(ff.property("name"), ff.literal(typeName), true)); + FeatureReader<SimpleFeatureType, SimpleFeature> fr = null; + Long tableId; + try { + fr = wrapped.getFeatureReader(q, transaction); + tableId = (Long) fr.next().getAttribute("id"); + } finally { + if(fr != null) fr.close(); + } + + // next find the revision at which it was version enabled (it's the oldest) + q = new DefaultQuery(TBL_TABLESCHANGED); q.setSortBy(new org.opengis.filter.sort.SortBy[] { ff.sort(REVISION, SortOrder.ASCENDING) }); q.setMaxFeatures(1); - FeatureReader<SimpleFeatureType, SimpleFeature> fr = null; try { fr = wrapped.getFeatureReader(q, transaction); - return (Long) fr.next().getAttribute(REVISION); + if(!fr.hasNext()) { + return -1; // this is equivalent to "FIRST" + } else { + return (Long) fr.next().getAttribute(REVISION); + } } finally { if(fr != null) fr.close(); } Modified: trunk/modules/unsupported/postgis-versioned/src/test/java/org/geotools/data/postgis/VersionedOperationsOnlineTest.java =================================================================== --- trunk/modules/unsupported/postgis-versioned/src/test/java/org/geotools/data/postgis/VersionedOperationsOnlineTest.java 2010-04-30 10:32:15 UTC (rev 35310) +++ trunk/modules/unsupported/postgis-versioned/src/test/java/org/geotools/data/postgis/VersionedOperationsOnlineTest.java 2010-04-30 10:52:59 UTC (rev 35311) @@ -1317,6 +1317,42 @@ fdr.close(); } + public void testVersionEmptyTable() throws Exception { + // start with an empty table + VersionedPostgisDataStore ds = getDataStore(); + FeatureStore store = (FeatureStore) ds.getFeatureSource("river"); + store.removeFeatures(Filter.INCLUDE); + + ds.setVersioned("river", true, "mambo", "version enabling stuff"); + + VersionedPostgisFeatureStore fs = (VersionedPostgisFeatureStore) ds.getFeatureSource("river"); + FeatureDiffReader reader = fs.getDifferences("FIRST", "LAST", null, null); + assertFalse(reader.hasNext()); + reader.close(); + + // add a new feature + Transaction t = createTransaction("lamb", "third change"); + FeatureWriter<SimpleFeatureType, SimpleFeature> fw = ds.getFeatureWriterAppend("river", t); + SimpleFeature f = fw.next(); + f.setAttribute("id", new Integer(3)); + f.setAttribute("geom", lines(new int[][] { { 300, 300, 301, 301 } })); + f.setAttribute("river", "rv2 v3"); + f.setAttribute("flow", new Double(12.2)); + fw.write(); + String newId = f.getID(); + fw.close(); + t.commit(); + t.close(); + + // now grab again the diff + reader = fs.getDifferences("FIRST", "LAST", null, null); + assertTrue(reader.hasNext()); + FeatureDiff fd = reader.next(); + reader.close(); + assertEquals(FeatureDiff.INSERTED, fd.getState()); + assertEquals(newId, fd.getID()); + } + /** * Create history, rollback it, diff used to report changes anyways * @throws IOException |