/*
CREATE SCHEMA test_schema;
CREATE SCHEMA another_test_schema;

CREATE TYPE test_schema.test_type AS ( intfield int, textfield varchar );
CREATE TYPE another_test_schema.test_type AS ( other_textfield varchar, other_intfield int );

Query: SELECT (1,'adsf')::test_schema.test_type, ('zxcv',2)::another_test_schema.test_type

// This variant gives enough information to look up the schema, but isn't what I'm testing for:
CREATE TABLE test_schema.test_table (
    first_testfield test_schema.test_type,
    second_testfield another_test_schema.test_type );

Query: SELECT first_testfield, second_testfield FROM test_schema.test_table
*/
package tmdbctest;

import java.sql.*;
import org.postgresql.jdbc2.AbstractJdbc2ResultSetMetaData;

public class Testcase {
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(
            "jdbc:postgresql://localhost/postgres?user=postgres"); // trust access to user with access to both schemas
    }
    public static void main(String[] args) throws Exception {
        PreparedStatement stmnt = getConnection().prepareStatement(
                "SELECT (1,'adsf')::test_schema.test_type, ('zxcv',2)::another_test_schema.test_type" );
        AbstractJdbc2ResultSetMetaData metaData = (AbstractJdbc2ResultSetMetaData) stmnt.getMetaData();

        for(int i = 1; i <= metaData.getColumnCount() ; i++  ){
            System.out.println( "Column "+ i );
            System.out.println( "  CatalogName: "+ metaData.getCatalogName(i) );
            System.out.println( "  SchemaName: "+ metaData.getSchemaName(i) );
            System.out.println( "  TableName: "+ metaData.getTableName(i) );
            System.out.println( "  ColumnName: "+ metaData.getColumnName(i) );
            System.out.println( "  ColumnLabel: "+ metaData.getColumnLabel(i) );
            System.out.println( "  ColumnType: "+ metaData.getColumnType(i) );
            System.out.println( "  ColumnTypeName: "+ metaData.getColumnTypeName(i) );
            System.out.println( "  ColumnClassName: "+ metaData.getColumnClassName(i) );
            System.out.println( "  ColumnDisplaySize: "+ metaData.getColumnDisplaySize(i) );
            System.out.println( "  Precision: "+ metaData.getPrecision(i) );
            System.out.println( "  Scale: "+ metaData.getScale(i) );
            // AbstractJdbc2ResultSetMetaData specific columns:
            System.out.println( "  BaseSchemaName: "+ metaData.getBaseSchemaName(i) );
            System.out.println( "  BaseTableName: "+ metaData.getBaseTableName(i) );
            System.out.println( "  BaseColumnName: "+ metaData.getBaseColumnName(i) );
        }

        stmnt.close();
    }
}
