hibernate-orm/hibernate-spatial/scripts/generate-sqlserver-testcase...

88 lines
2.2 KiB
Groovy

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
import groovy.sql.Sql
import groovy.xml.MarkupBuilder
import org.geolatte.geom.ByteBuffer
@GrabConfig(systemClassLoader=true)
@Grab(group='com.microsoft', module='sqljdbc', version='2.0')
@Grab(group='org.geolatte', module='geolatte-geom',version='0.12-SNAPSHOT')
//path to the generated TestData XML file
def OUT_FILE = "/tmp/out.xml"
//input test data set
String testdata = new File('test-data-set.xml').text
def records = new XmlSlurper().parseText(testdata)
def wkts = records.Element.wkt
def wkt_srids= wkts.collect{ wkt -> wkt.text() =~ /SRID=(.*);(.*)/ }
.findAll { it.matches() }
.collect {m -> [ m[0][1], m[0][2] ] } //select only matching srid and wkt regions
//add the empty elements
wkt_srids.add( [0, 'POINT EMPTY'])
wkt_srids.add( [0, 'LINESTRING EMPTY'])
wkt_srids.add( [0, 'GEOMETRYCOLLECTION EMPTY'])
wkt_srids.add( [0, 'POLYGON EMPTY'])
wkt_srids.add( [0, 'MULTIPOINT EMPTY'])
//wkt_srids.each{ println( it ) }
sql = Sql.newInstance('jdbc:sqlserver://sqlserver.geovise.com:1433;databaseName=HBS',
'hbs', 'hbs', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')
def writer = new FileWriter( new File(OUT_FILE) )
def xmlOut = new MarkupBuilder(writer)
xmlOut.TestCases() {
def i = 1
wkt_srids.each { el ->
TestCase {
id( i++ )
ewkt( el[1] )
srid( el[0])
db_representation(to_native(el[1], el[0]))
// db_wkt(to_wkt(el[1], el[0]))
// db_wkb(to_wkb(el[1], el[0]))
}
}
}
def to_native(wkt, srid) {
row = sql.firstRow("select Geometry::STGeomFromText('" + wkt + "', ${srid}) ")
buffer = ByteBuffer.from(row[0])
buffer.toString()
}
def to_wkt(wkt, srid) {
row = sql.firstRow("select Geometry::STGeomFromText('" + wkt + "', ${srid}).STAsText() ")
row[0]
}
def to_wkb(wkt, srid) {
row = sql.firstRow("select Geometry::STGeomFromText('" + wkt + "', ${srid}).STAsBinary() ")
buffer = ByteBuffer.from(row[0])
buffer.toString()
}