Revision: 6237 http://sourceforge.net/p/jump-pilot/code/6237 Author: elnico Date: 2020-02-12 14:16:26 +0000 (Wed, 12 Feb 2020) Log Message: ----------- fix bug in Spatialite datasources management, where spatial index query was not built even if a spatial index was defined on the geometric column. Also removed debug comments preventing spatialite to be detected
Modified Paths: -------------- core/trunk/ChangeLog core/trunk/src/com/vividsolutions/jump/datastore/GeometryColumn.java core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDSMetadata.java core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteDSMetadata.java core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteSQLBuilder.java Modified: core/trunk/ChangeLog =================================================================== --- core/trunk/ChangeLog 2020-02-11 10:23:54 UTC (rev 6236) +++ core/trunk/ChangeLog 2020-02-12 14:16:26 UTC (rev 6237) @@ -5,6 +5,10 @@ * Changes.txt updated until here ********************************************** +2020-02-12 Nicolas Ribot + * fix bug in Spatialite datasources management, where spatial index query was not built + even if a spatial index was defined on the geometric column + 2020-01-26 mmichaud <m.michael.mich...@orange.fr> * FR#265 : add a plugin to make line from ordered points * fix bug in MakeValidOp Modified: core/trunk/src/com/vividsolutions/jump/datastore/GeometryColumn.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/GeometryColumn.java 2020-02-11 10:23:54 UTC (rev 6236) +++ core/trunk/src/com/vividsolutions/jump/datastore/GeometryColumn.java 2020-02-12 14:16:26 UTC (rev 6237) @@ -8,7 +8,7 @@ private String name; private int srid = 0; private String type = "Geometry"; - private boolean indexed = false; + private Boolean indexed = null; private int coordDimension = 2; public GeometryColumn(String name) { @@ -90,11 +90,11 @@ ", srid=" + srid + ")"; } - public boolean isIndexed() { + public Boolean isIndexed() { return indexed; } - public void setIndexed(boolean indexed) { + public void setIndexed(Boolean indexed) { this.indexed = indexed; } } Modified: core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDSMetadata.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDSMetadata.java 2020-02-11 10:23:54 UTC (rev 6236) +++ core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDSMetadata.java 2020-02-12 14:16:26 UTC (rev 6237) @@ -279,7 +279,9 @@ if (! datasetNames.contains(table)) { datasetNames.add(table); } - // datastoreLayers + // datastoreLayers: + // 2020-02-12: caution here; geometryColumn is built without index info + // this info is retrieved as necessary by specialized classes GeometryColumn geo = new GeometryColumn( resultSet.getString(3), resultSet.getInt(4), Modified: core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteDSMetadata.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteDSMetadata.java 2020-02-11 10:23:54 UTC (rev 6236) +++ core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteDSMetadata.java 2020-02-12 14:16:26 UTC (rev 6237) @@ -189,6 +189,7 @@ * Overriden to deal with indexed geo columns, as queries to get features are different * if spatial index is detected on the column. * Buids a GeometryColumn object with 5 params ctor. + * TODO: no more used now all layers info are retrieved at once ? refactor * @param sql * @param datasetName * @return @@ -290,17 +291,17 @@ // tries to load spatialite, assuming it is available on the system's path Statement stmt = null; try { -// stmt = conn.getJdbcConnection().createStatement(); -// stmt.executeUpdate("SELECT load_extension('mod_spatialite')"); -// // ex is thrown if extension cannot be loaded -// this.spatialiteLoaded = true; -// ResultSet rs = stmt.executeQuery("select spatialite_version()"); -// rs.next(); -// this.setSpatialiteVersion(rs.getString(1)); -// -// JUMPWorkbench.getInstance().getFrame().log( -// "SpatialDatabasesPlugin: Spatialite extension loaded for this connexion, version: " -// + this.getSpatialiteVersion(), this.getClass()); + stmt = conn.getJdbcConnection().createStatement(); + stmt.executeUpdate("SELECT load_extension('mod_spatialite')"); + // ex is thrown if extension cannot be loaded + this.spatialiteLoaded = true; + ResultSet rs = stmt.executeQuery("select spatialite_version()"); + rs.next(); + this.setSpatialiteVersion(rs.getString(1)); + + JUMPWorkbench.getInstance().getFrame().log( + "SpatialDatabasesPlugin: Spatialite extension loaded for this connexion, version: " + + this.getSpatialiteVersion(), this.getClass()); } catch (Exception e) { JUMPWorkbench.getInstance().getFrame().log( "SpatialDatabasesPlugin: CANNOT load Spatialite Extention (mod_spatialite), reason:" @@ -446,7 +447,8 @@ } public boolean isSpatialiteLoaded() { - return spatialiteLoaded; + // TODO: clean up type detection: geopackage vs spatialite + return spatialiteLoaded || this.geometryColumnsLayout == GeometryColumnsLayout.OGC_GEOPACKAGE_LAYOUT; } public String getSpatialiteVersion() { @@ -471,7 +473,7 @@ * @param datasetName the name of the dataset this column belongs to * @param gc the geometry column to set */ - private void setIndexInfo(String datasetName, final GeometryColumn gc) { + protected void setIndexInfo(String datasetName, final GeometryColumn gc) { String q = String.format(Locale.US, spatialIndexQuery, datasetName, gc.getName()); try { JDBCUtil.execute( @@ -521,3 +523,4 @@ } } + Modified: core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteSQLBuilder.java =================================================================== --- core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteSQLBuilder.java 2020-02-11 10:23:54 UTC (rev 6236) +++ core/trunk/src/com/vividsolutions/jump/datastore/spatialite/SpatialiteSQLBuilder.java 2020-02-12 14:16:26 UTC (rev 6237) @@ -154,6 +154,10 @@ SpatialiteDSMetadata dsm = (SpatialiteDSMetadata) getDbMetadata(); // test if geometry column is indexed, if so, builds special query according to type: GeometryColumn gc = dsm.getGeometryColumn(query.getDatasetName(), query.getGeometryAttributeName()); + // 2020-02-12: if info is not set, retrieve column index status here + if (gc.isIndexed() == null) { + dsm.setIndexInfo(datasetName, gc); + } if (gc.isIndexed()) { if (dsm.getGeometryColumnsLayout() == GeometryColumnsLayout.OGC_GEOPACKAGE_LAYOUT) { String idxName = SQLUtil.quote(String.format("rtree_%s_%s", @@ -174,4 +178,6 @@ return ret; } + + } _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel