Repository: incubator-groovy Updated Branches: refs/heads/GROOVY_2_4_X cbf6aec77 -> 3a6b00180
groovy-sql doco: initial JDBC metadata handling doco Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/5e96d4ae Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/5e96d4ae Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/5e96d4ae Branch: refs/heads/GROOVY_2_4_X Commit: 5e96d4aeb771fc0affd03007e78ffb6b42e1ca23 Parents: cbf6aec Author: Paul King <pa...@asert.com.au> Authored: Fri Apr 17 12:59:32 2015 +1000 Committer: Paul King <pa...@asert.com.au> Committed: Mon Apr 20 17:22:38 2015 +1000 ---------------------------------------------------------------------- .../groovy-sql/src/spec/doc/sql-userguide.adoc | 10 ++++++ .../groovy-sql/src/spec/test/SqlTest.groovy | 33 ++++++++++++++++++++ 2 files changed, 43 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/5e96d4ae/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc ---------------------------------------------------------------------- diff --git a/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc b/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc index 2c0202d..f679e6a 100644 --- a/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc +++ b/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc @@ -236,6 +236,16 @@ include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[ta === Fetching metadata +JDBC metadata can be retrieved in numerous ways. Perhaps the most basic approach is to extract the metadata from any row as shown here: + +[source,groovy] +.Using row metadata +---- +include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_metadata,indent=0] +---- + +Advanced options for metadata handling using closures are also possible. + (TBD) === Named and named-ordinal parameters http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/5e96d4ae/subprojects/groovy-sql/src/spec/test/SqlTest.groovy ---------------------------------------------------------------------- diff --git a/subprojects/groovy-sql/src/spec/test/SqlTest.groovy b/subprojects/groovy-sql/src/spec/test/SqlTest.groovy index 3e09362..bfa5daf 100644 --- a/subprojects/groovy-sql/src/spec/test/SqlTest.groovy +++ b/subprojects/groovy-sql/src/spec/test/SqlTest.groovy @@ -289,6 +289,39 @@ class SqlTest extends GroovyTestCase { ''' } + void testMetadata() { + assertScript ''' + import groovy.sql.Sql + + def url = 'jdbc:hsqldb:mem:yourDB' + def user = 'sa' + def password = '' + def driver = 'org.hsqldb.jdbcDriver' + Sql.withInstance(url, user, password, driver) { sql -> + sql.execute """ + DROP TABLE Author IF EXISTS + """ + sql.execute """ + CREATE TABLE Author ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY, + firstname VARCHAR(64), + lastname VARCHAR(64) + ) + """ + sql.execute "INSERT INTO Author (firstname, lastname) VALUES ('Dierk', 'Koenig')" + + // tag::sql_basic_metadata[] + sql.eachRow("SELECT * FROM Author where firstname = 'Dierk'") { row -> + def md = row.getMetaData() + assert md.getTableName(1).toLowerCase() == 'author' + assert (1..md.columnCount).collect{ md.getColumnTypeName(it).toLowerCase() } == ['integer', 'varchar', 'varchar'] + assert (1..md.columnCount).collect{ md.getColumnLabel(it).toLowerCase() } == ['id', 'firstname', 'lastname'] + } + // end::sql_basic_metadata[] + } + ''' + } + void testDeletingRows() { assertScript ''' import groovy.sql.Sql