groovy-sql doco: other 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/65df5e2e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/65df5e2e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/65df5e2e

Branch: refs/heads/groovy_2_4_X
Commit: 65df5e2e82f788a7d4ce1d95c347a72dae69e897
Parents: 95760b2
Author: Paul King <pa...@asert.com.au>
Authored: Fri Apr 17 21:45:31 2015 +1000
Committer: Paul King <pa...@asert.com.au>
Committed: Sat Apr 18 09:09:32 2015 +1000

----------------------------------------------------------------------
 .../groovy-sql/src/spec/doc/sql-userguide.adoc  | 35 ++++++++++++++++---
 .../groovy-sql/src/spec/test/SqlTest.groovy     | 36 ++++++++++++++++----
 2 files changed, 61 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/65df5e2e/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 f679e6a..5d06fd8 100644
--- a/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc
+++ b/subprojects/groovy-sql/src/spec/doc/sql-userguide.adoc
@@ -236,17 +236,44 @@ 
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:
+JDBC metadata can be retrieved in numerous ways. Perhaps the most basic 
approach is to extract the
+metadata from any row as shown in the following example which examines the 
tablename, column names and column type names:
 
 [source,groovy]
 .Using row metadata
 ----
-include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_metadata,indent=0]
+include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_rs_metadata,indent=0]
 ----
 
-Advanced options for metadata handling using closures are also possible.
+And another slight variant to the previous example, this time also looking at 
the column label:
 
-(TBD)
+[source,groovy]
+.Also using row metadata
+----
+include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_rs_metadata2,indent=0]
+----
+
+Accessing metadata is quite common, so Groovy also provides variants to many 
of its methods that let you
+supply a closure that will be called once with the row metadata in addition to 
the normal row closure
+which is called for each row. The following example illustrates the two 
closure variant for `eachRow`:
+
+[source,groovy]
+.Using row and metadata closures
+----
+include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_rs_metadata3,indent=0]
+----
+
+Note that our SQL query will only return one row, so we could have equally 
used `firstRow` for the previous example.
+
+Finally, JDBC also provides metadata per connection (not just for rows). You 
can also access such metadata from Groovy as shown in this example:
+
+[source,groovy]
+.Using connection metadata
+----
+include::{rootProjectDir}/subprojects/groovy-sql/src/spec/test/SqlTest.groovy[tags=sql_basic_table_metadata,indent=0]
+----
+
+Consult the JavaDoc for your driver to find out what metadata information is 
available for you to access.
 
 === Named and named-ordinal parameters
 

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/65df5e2e/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 bfa5daf..eb249ce 100644
--- a/subprojects/groovy-sql/src/spec/test/SqlTest.groovy
+++ b/subprojects/groovy-sql/src/spec/test/SqlTest.groovy
@@ -310,14 +310,38 @@ class SqlTest extends GroovyTestCase {
               """
               sql.execute "INSERT INTO Author (firstname, lastname) VALUES 
('Dierk', 'Koenig')"
 
-              // tag::sql_basic_metadata[]
-              sql.eachRow("SELECT * FROM Author where firstname = 'Dierk'") { 
row ->
+              // tag::sql_basic_rs_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']
+                assert md.getTableName(1) == 'AUTHOR'
+                assert (1..md.columnCount).collect{ md.getColumnName(it) } == 
['ID', 'FIRSTNAME', 'LASTNAME']
+                assert (1..md.columnCount).collect{ md.getColumnTypeName(it) } 
== ['INTEGER', 'VARCHAR', 'VARCHAR']
               }
-              // end::sql_basic_metadata[]
+              // end::sql_basic_rs_metadata[]
+              // tag::sql_basic_rs_metadata2[]
+              sql.eachRow("SELECT firstname AS first FROM Author WHERE 
firstname = 'Dierk'") { row ->
+                def md = row.getMetaData()
+                assert md.getColumnName(1) == 'FIRSTNAME'
+                assert md.getColumnLabel(1) == 'FIRST'
+              }
+              // end::sql_basic_rs_metadata2[]
+              // tag::sql_basic_rs_metadata3[]
+              def metaClosure = { meta -> assert meta.getColumnName(1) == 
'FIRSTNAME' }
+              def rowClosure = { row -> assert row.FIRSTNAME == 'Dierk' }
+              sql.eachRow("SELECT firstname FROM Author WHERE firstname = 
'Dierk'", metaClosure, rowClosure)
+              // end::sql_basic_rs_metadata3[]
+              // build currently uses the jdk5 classifier version of 
hsqldb.jar which is JDBC 3
+              // TODO remove this classifier since we now require jdk6+
+              // tag::sql_basic_table_metadata[]
+              def md = sql.connection.metaData
+              assert md.driverName == 'HSQL Database Engine Driver'
+              assert md.databaseProductVersion == '2.3.2'
+              assert ['JDBCMajorVersion', 'JDBCMinorVersion'].collect{ md[it] 
} == [3, 0]
+              assert md.stringFunctions.tokenize(',').contains('CONCAT')
+              def rs = md.getTables(null, null, 'AUTH%', null)
+              assert rs.next()
+              assert rs.getString('TABLE_NAME') == 'AUTHOR'
+              // end::sql_basic_table_metadata[]
             }
         '''
     }

Reply via email to