diff --git a/build/cqs.tsv b/build/cqs.tsv index 599820eccf5a..861e8bf54a2f 100644 --- a/build/cqs.tsv +++ b/build/cqs.tsv @@ -97,45 +97,45 @@ io.prometheus:simpleclient_tracer_common 0.16.0 compile io.prometheus:simpleclient_tracer_otel 0.16.0 compile io.prometheus:simpleclient_tracer_otel_agent 0.16.0 compile io.sgr:s2-geometry-library-java 1.0.1 compile -it.geosolutions.jaiext.affine:jt-affine 1.1.24 compile -it.geosolutions.jaiext.algebra:jt-algebra 1.1.24 compile -it.geosolutions.jaiext.bandcombine:jt-bandcombine 1.1.24 compile -it.geosolutions.jaiext.bandmerge:jt-bandmerge 1.1.24 compile -it.geosolutions.jaiext.bandselect:jt-bandselect 1.1.24 compile -it.geosolutions.jaiext.binarize:jt-binarize 1.1.24 compile -it.geosolutions.jaiext.border:jt-border 1.1.24 compile -it.geosolutions.jaiext.buffer:jt-buffer 1.1.24 compile -it.geosolutions.jaiext.classifier:jt-classifier 1.1.24 compile -it.geosolutions.jaiext.colorconvert:jt-colorconvert 1.1.24 compile -it.geosolutions.jaiext.colorindexer:jt-colorindexer 1.1.24 compile -it.geosolutions.jaiext.crop:jt-crop 1.1.24 compile -it.geosolutions.jaiext.errordiffusion:jt-errordiffusion 1.1.24 compile -it.geosolutions.jaiext.format:jt-format 1.1.24 compile -it.geosolutions.jaiext.imagefunction:jt-imagefunction 1.1.24 compile -it.geosolutions.jaiext.iterators:jt-iterators 1.1.24 compile -it.geosolutions.jaiext.lookup:jt-lookup 1.1.24 compile -it.geosolutions.jaiext.mosaic:jt-mosaic 1.1.24 compile -it.geosolutions.jaiext.nullop:jt-nullop 1.1.24 compile -it.geosolutions.jaiext.orderdither:jt-orderdither 1.1.24 compile -it.geosolutions.jaiext.piecewise:jt-piecewise 1.1.24 compile -it.geosolutions.jaiext.rescale:jt-rescale 1.1.24 compile -it.geosolutions.jaiext.rlookup:jt-rlookup 1.1.24 compile -it.geosolutions.jaiext.scale2:jt-scale2 1.1.24 compile -it.geosolutions.jaiext.scale:jt-scale 1.1.24 compile -it.geosolutions.jaiext.shadedrelief:jt-shadedrelief 1.1.24 compile -it.geosolutions.jaiext.stats:jt-stats 1.1.24 compile -it.geosolutions.jaiext.translate:jt-translate 1.1.24 compile -it.geosolutions.jaiext.utilities:jt-utilities 1.1.24 compile -it.geosolutions.jaiext.vectorbin:jt-vectorbin 1.1.24 compile -it.geosolutions.jaiext.warp:jt-warp 1.1.24 compile -it.geosolutions.jaiext.zonal:jt-zonal 1.1.24 compile +it.geosolutions.jaiext.affine:jt-affine 1.1.27 compile +it.geosolutions.jaiext.algebra:jt-algebra 1.1.27 compile +it.geosolutions.jaiext.bandcombine:jt-bandcombine 1.1.27 compile +it.geosolutions.jaiext.bandmerge:jt-bandmerge 1.1.27 compile +it.geosolutions.jaiext.bandselect:jt-bandselect 1.1.27 compile +it.geosolutions.jaiext.binarize:jt-binarize 1.1.27 compile +it.geosolutions.jaiext.border:jt-border 1.1.27 compile +it.geosolutions.jaiext.buffer:jt-buffer 1.1.27 compile +it.geosolutions.jaiext.classifier:jt-classifier 1.1.27 compile +it.geosolutions.jaiext.colorconvert:jt-colorconvert 1.1.27 compile +it.geosolutions.jaiext.colorindexer:jt-colorindexer 1.1.27 compile +it.geosolutions.jaiext.crop:jt-crop 1.1.27 compile +it.geosolutions.jaiext.errordiffusion:jt-errordiffusion 1.1.27 compile +it.geosolutions.jaiext.format:jt-format 1.1.27 compile +it.geosolutions.jaiext.imagefunction:jt-imagefunction 1.1.27 compile +it.geosolutions.jaiext.iterators:jt-iterators 1.1.27 compile +it.geosolutions.jaiext.lookup:jt-lookup 1.1.27 compile +it.geosolutions.jaiext.mosaic:jt-mosaic 1.1.27 compile +it.geosolutions.jaiext.nullop:jt-nullop 1.1.27 compile +it.geosolutions.jaiext.orderdither:jt-orderdither 1.1.27 compile +it.geosolutions.jaiext.piecewise:jt-piecewise 1.1.27 compile +it.geosolutions.jaiext.rescale:jt-rescale 1.1.27 compile +it.geosolutions.jaiext.rlookup:jt-rlookup 1.1.27 compile +it.geosolutions.jaiext.scale2:jt-scale2 1.1.27 compile +it.geosolutions.jaiext.scale:jt-scale 1.1.27 compile +it.geosolutions.jaiext.shadedrelief:jt-shadedrelief 1.1.27 compile +it.geosolutions.jaiext.stats:jt-stats 1.1.27 compile +it.geosolutions.jaiext.translate:jt-translate 1.1.27 compile +it.geosolutions.jaiext.utilities:jt-utilities 1.1.27 compile +it.geosolutions.jaiext.vectorbin:jt-vectorbin 1.1.27 compile +it.geosolutions.jaiext.warp:jt-warp 1.1.27 compile +it.geosolutions.jaiext.zonal:jt-zonal 1.1.27 compile it.geosolutions.jgridshift:jgridshift-core 1.3 compile jakarta.annotation:jakarta.annotation-api 1.3.5 compile jakarta.inject:jakarta.inject-api 2.0.0 compile jakarta.inject:jakarta.inject-api 2.0.1 compile jakarta.transaction:jakarta.transaction-api 1.3.3 compile javax.annotation:javax.annotation-api 1.2 compile -javax.measure:unit-api 2.1.2 compile +javax.measure:unit-api 2.2 compile joda-time:joda-time 2.12.6 compile net.java.dev.jna:jna 5.14.0 compile net.java.dev.jna:jna-platform 5.14.0 compile @@ -219,34 +219,34 @@ org.ejml:ejml-core 0.41 compile org.ejml:ejml-ddense 0.41 compile org.ejml:ejml-fsparse 0.41 compile org.ejml:ejml-simple 0.41 compile -org.geotools.jdbc:gt-jdbc-postgis 30.4 compile -org.geotools.ogc:net.opengis.fes 30.4 compile -org.geotools.ogc:net.opengis.ows 30.4 compile -org.geotools.ogc:net.opengis.wfs 30.4 compile -org.geotools.ogc:org.w3.xlink 30.4 compile -org.geotools.xsd:gt-xsd-core 30.4 compile -org.geotools.xsd:gt-xsd-fes 30.4 compile -org.geotools.xsd:gt-xsd-filter 30.4 compile -org.geotools.xsd:gt-xsd-gml2 30.4 compile -org.geotools.xsd:gt-xsd-gml3 30.4 compile -org.geotools.xsd:gt-xsd-ows 30.4 compile -org.geotools.xsd:gt-xsd-wfs 30.4 compile -org.geotools:gt-api 30.4 compile -org.geotools:gt-coverage 30.4 compile -org.geotools:gt-cql 30.4 compile -org.geotools:gt-epsg-wkt 30.4 compile -org.geotools:gt-grid 30.4 compile -org.geotools:gt-http 30.4 compile -org.geotools:gt-jdbc 30.4 compile -org.geotools:gt-main 30.4 compile -org.geotools:gt-metadata 30.4 compile -org.geotools:gt-process 30.4 compile -org.geotools:gt-process-feature 30.4 compile -org.geotools:gt-referencing 30.4 compile -org.geotools:gt-render 30.4 compile -org.geotools:gt-shapefile 30.4 compile -org.geotools:gt-transform 30.4 compile -org.geotools:gt-xml 30.4 compile +org.geotools.jdbc:gt-jdbc-postgis 32.0 compile +org.geotools.ogc:net.opengis.fes 32.0 compile +org.geotools.ogc:net.opengis.ows 32.0 compile +org.geotools.ogc:net.opengis.wfs 32.0 compile +org.geotools.ogc:org.w3.xlink 32.0 compile +org.geotools.xsd:gt-xsd-core 32.0 compile +org.geotools.xsd:gt-xsd-fes 32.0 compile +org.geotools.xsd:gt-xsd-filter 32.0 compile +org.geotools.xsd:gt-xsd-gml2 32.0 compile +org.geotools.xsd:gt-xsd-gml3 32.0 compile +org.geotools.xsd:gt-xsd-ows 32.0 compile +org.geotools.xsd:gt-xsd-wfs 32.0 compile +org.geotools:gt-api 32.0 compile +org.geotools:gt-coverage 32.0 compile +org.geotools:gt-cql 32.0 compile +org.geotools:gt-epsg-wkt 32.0 compile +org.geotools:gt-grid 32.0 compile +org.geotools:gt-http 32.0 compile +org.geotools:gt-jdbc 32.0 compile +org.geotools:gt-main 32.0 compile +org.geotools:gt-metadata 32.0 compile +org.geotools:gt-process 32.0 compile +org.geotools:gt-process-feature 32.0 compile +org.geotools:gt-referencing 32.0 compile +org.geotools:gt-render 32.0 compile +org.geotools:gt-shapefile 32.0 compile +org.geotools:gt-transform 32.0 compile +org.geotools:gt-xml 32.0 compile org.huldra.math:bigint 0.7.1 compile org.jetbrains:annotations 17.0.0 compile org.jruby.jcodings:jcodings 1.0.55 compile @@ -255,8 +255,8 @@ org.json4s:json4s-ast_2.12 3.6.12 compile org.json4s:json4s-core_2.12 3.6.12 compile org.json4s:json4s-native_2.12 3.6.12 compile org.json4s:json4s-scalap_2.12 3.6.12 compile -org.locationtech.jts.io:jts-io-common 1.19.0 compile -org.locationtech.jts:jts-core 1.19.0 compile +org.locationtech.jts.io:jts-io-common 1.20.0 compile +org.locationtech.jts:jts-core 1.20.0 compile org.locationtech.spatial4j:spatial4j 0.8 compile org.mozilla:rhino 1.7.14 compile org.mozilla:rhino-engine 1.7.14 compile @@ -338,7 +338,7 @@ org.apache.sedona:sedona-common 1.5.0 test org.cassandraunit:cassandra-unit 3.7.1.0 test org.codehaus.groovy:groovy-jsr223 3.0.20 test org.geomesa.testcontainers:testcontainers-accumulo 1.4.1 test -org.geotools:gt-epsg-hsql 30.4 test +org.geotools:gt-epsg-hsql 32.0 test org.jruby:jruby 9.4.5.0 test org.mockito:mockito-core 2.28.2 test org.mortbay.jetty:jetty 6.1.26 test diff --git a/docs/user/geoserver.rst b/docs/user/geoserver.rst index 6cabe7c377a3..219286718c98 100644 --- a/docs/user/geoserver.rst +++ b/docs/user/geoserver.rst @@ -23,6 +23,8 @@ although this may occasionally cause errors as GeoServer does not follow semanti +-------------------+-------------------+ | GeoMesa Version | GeoServer Version | +===================+===================+ +| 5.1.0 | 2.26.0 | ++-------------------+-------------------+ | 5.0.0 | 2.24.2 | +-------------------+-------------------+ | 4.0.0 | 2.22.2 | diff --git a/geomesa-gt/geomesa-gt-partitioning/src/main/scala/org/locationtech/geomesa/gt/partition/postgis/dialect/PartitionedPostgisPsDialect.scala b/geomesa-gt/geomesa-gt-partitioning/src/main/scala/org/locationtech/geomesa/gt/partition/postgis/dialect/PartitionedPostgisPsDialect.scala index 4e24652ff54b..7ff46d6c5ba3 100644 --- a/geomesa-gt/geomesa-gt-partitioning/src/main/scala/org/locationtech/geomesa/gt/partition/postgis/dialect/PartitionedPostgisPsDialect.scala +++ b/geomesa-gt/geomesa-gt-partitioning/src/main/scala/org/locationtech/geomesa/gt/partition/postgis/dialect/PartitionedPostgisPsDialect.scala @@ -15,6 +15,7 @@ import org.geotools.api.filter.Filter import org.geotools.data.postgis.PostGISPSDialect import org.geotools.jdbc.JDBCDataStore +import java.lang.invoke.{MethodHandle, MethodHandles, MethodType} import java.sql.{Connection, DatabaseMetaData, PreparedStatement, Types} import java.util.Locale import java.util.concurrent.TimeUnit @@ -39,7 +40,55 @@ class PartitionedPostgisPsDialect(store: JDBCDataStore, delegate: PartitionedPos } }) - override def setValue(value: Any, binding: Class[_], ps: PreparedStatement, column: Int, cx: Connection): Unit = { + // reference to super.setValue, for back-compatibility with gt 30 + private lazy val superSetValue: MethodHandle = { + val methodType = + MethodType.methodType(classOf[Unit], classOf[Object], classOf[Class[_]], classOf[PreparedStatement], classOf[Int], classOf[Connection]) + MethodHandles.lookup.findSpecial(classOf[PostGISPSDialect], "setValue", methodType, classOf[PartitionedPostgisPsDialect]) + } + + override def setValue( + value: AnyRef, + binding: Class[_], + att: AttributeDescriptor, + ps: PreparedStatement, + column: Int, + cx: Connection): Unit = { + // json columns are string type in geotools, but we have to use setObject or else we get a binding error + if (binding == classOf[String] && jsonColumns.get(new PreparedStatementKey(ps, column))) { + ps.setObject(column, value, Types.OTHER) + } else if (binding == classOf[java.util.List[_]]) { + // handle bug in jdbc store not calling setArrayValue in update statements + value match { + case null => + ps.setNull(column, Types.ARRAY) + + case list: java.util.Collection[_] => + if (list.isEmpty) { + ps.setNull(column, Types.ARRAY) + } else { + setArray(list.toArray(), ps, column, cx) + } + + case array: Array[_] => + if (array.isEmpty) { + ps.setNull(column, Types.ARRAY) + } else { + setArray(array, ps, column, cx) + } + + case _ => + // this will almost certainly fail... + super.setValue(value, binding, att, ps, column, cx) + } + } else { + super.setValue(value, binding, att, ps, column, cx) + } + } + + // for back-compatibility with gt 30 + // noinspection ScalaUnusedSymbol + def setValue(value: AnyRef, binding: Class[_], ps: PreparedStatement, column: Int, cx: Connection): Unit = { // json columns are string type in geotools, but we have to use setObject or else we get a binding error if (binding == classOf[String] && jsonColumns.get(new PreparedStatementKey(ps, column))) { ps.setObject(column, value, Types.OTHER) @@ -65,10 +114,10 @@ class PartitionedPostgisPsDialect(store: JDBCDataStore, delegate: PartitionedPos case _ => // this will almost certainly fail... - super.setValue(value, binding, ps, column, cx) + superSetValue.invoke(this, value, binding, ps, column, cx) } } else { - super.setValue(value, binding, ps, column, cx) + superSetValue.invoke(this, value, binding, ps, column, cx) } } @@ -116,7 +165,7 @@ class PartitionedPostgisPsDialect(store: JDBCDataStore, delegate: PartitionedPos object PartitionedPostgisPsDialect { // uses eq on the prepared statement to ensure that we compute json fields exactly once per prepared statement/col - class PreparedStatementKey(val ps: PreparedStatement, val column: Int) { + private class PreparedStatementKey(val ps: PreparedStatement, val column: Int) { override def equals(other: Any): Boolean = { other match { diff --git a/pom.xml b/pom.xml index 0df654f709f5..0ecc9f31e681 100644 --- a/pom.xml +++ b/pom.xml @@ -58,9 +58,9 @@ 2.3.0 - 30.4 - 2.24.4 - 1.19.0 + 32.0 + 2.26.0 + 1.20.0 0.8 0.41