|
From: <svn...@os...> - 2012-01-17 18:40:04
|
Author: aaime
Date: 2012-01-17 10:39:53 -0800 (Tue, 17 Jan 2012)
New Revision: 38500
Modified:
branches/2.7.x/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java
Log:
[GEOT-4020] Have SQL server store use WKB for geometry transfers
Modified: branches/2.7.x/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java
===================================================================
--- branches/2.7.x/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java 2012-01-17 17:14:52 UTC (rev 38499)
+++ branches/2.7.x/modules/plugin/jdbc/jdbc-sqlserver/src/main/java/org/geotools/data/sqlserver/SQLServerDialect.java 2012-01-17 18:39:53 UTC (rev 38500)
@@ -42,6 +42,7 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.io.ParseException;
+import com.vividsolutions.jts.io.WKBReader;
import com.vividsolutions.jts.io.WKTReader;
/**
@@ -58,7 +59,7 @@
public SQLServerDialect(JDBCDataStore dataStore) {
super(dataStore);
}
-
+
@Override
public boolean includeTable(String schemaName, String tableName,
Connection cx) throws SQLException {
@@ -183,17 +184,8 @@
@Override
public void encodeGeometryColumn(GeometryDescriptor gatt, int srid, StringBuffer sql) {
- sql.append( "CAST(");
encodeColumnName( gatt.getLocalName(), sql );
- sql.append( ".STSrid as VARCHAR)");
-
- sql.append( " + ':' + " );
-
- encodeColumnName( gatt.getLocalName(), sql );
- sql.append( ".STAsText()");
-
- //encodeColumnName(gatt.getLocalName(), sql);
- //sql.append( ".STAsText()");
+ sql.append( ".STAsBinary()");
}
@Override
@@ -212,8 +204,15 @@
public Geometry decodeGeometryValue(GeometryDescriptor descriptor,
ResultSet rs, String column, GeometryFactory factory, Connection cx)
throws IOException, SQLException {
- String s = rs.getString( column );
- return decodeGeometry ( s, factory );
+ byte[] bytes = rs.getBytes(column);
+ if(bytes == null) {
+ return null;
+ }
+ try {
+ return new WKBReader(factory).read(bytes);
+ } catch ( ParseException e ) {
+ throw (IOException) new IOException().initCause( e );
+ }
}
Geometry decodeGeometry( String s, GeometryFactory factory ) throws IOException {
@@ -328,4 +327,5 @@
sql.append(tableName);
}
}
+
}
|