db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Van Couvering <David.Vancouver...@Sun.COM>
Subject Re: svn commit: r430177 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/jdbc/ testing/org/apache/derbyTesting/functionTests/master/ testing/org/apache/derbyTesting/functionTests/master/DerbyNet/ testing/org/apache/derbyTesting/functionTests/ma...
Date Wed, 09 Aug 2006 23:58:32 GMT
Great stuff, Havard!  Is documentation coming for this?

David

fuzzylogic@apache.org wrote:
> Author: fuzzylogic
> Date: Wed Aug  9 15:53:53 2006
> New Revision: 430177
> 
> URL: http://svn.apache.org/viewvc?rev=430177&view=rev
> Log:
> DERBY-1146: Add SHOW TABLES and DESCRIBE commands to ij.
> 
> Committed for Havard Mork <havard.mork@gmail.com>
> 
> Added:
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out   (with props)
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql   (with props)
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties   (with props)
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java   (with props)
> Modified:
>     db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java
>     db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/odbc_metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/odbc_metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/Upgrade_10_1_10_2.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/j9_13/ij.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/odbc_metadata.out
>     db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbytools.runall
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ij.jj
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijException.java
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResult.java
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultImpl.java
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/util.java
>     db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/utilMain.java
>     db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties
>     db/derby/code/trunk/java/tools/org/apache/derby/tools/JDBCDisplayUtil.java
> 
> Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java (original)
> +++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java Wed Aug  9 15:53:53 2006
> @@ -283,7 +283,7 @@
>  	public String getDatabaseProductVersion() {
>  		ProductVersionHolder myPVH = Monitor.getMonitor().getEngineVersion();
>  
> -		return myPVH.getVersionBuildString(false);
> +		return myPVH.getVersionBuildString(true);
>  	}
>  
>      /**
> 
> Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties (original)
> +++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties Wed Aug  9 15:53:53 2006
> @@ -133,8 +133,8 @@
>  	FROM \
>  		 SYS.SYSTABLES, \
>  	     SYS.SYSSCHEMAS, \
> -	     (VALUES ('T','TABLE'), \
> -			('S','SYSTEM TABLE'), ('V', 'VIEW')) T(TTABBREV,TABLE_TYPE) \
> +	     (VALUES ('T','TABLE'), ('S','SYSTEM TABLE'), \
> +			('V', 'VIEW'), ('A', 'SYNONYM')) T(TTABBREV,TABLE_TYPE) \
>  	WHERE (TTABBREV=TABLETYPE 	\
>  	  AND (SYS.SYSTABLES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID) \
>  	  AND ((1=1) OR ? IS NOT NULL) \
> @@ -272,7 +272,8 @@
>  # so we wrap the values in a select to name it.
>  getTableTypes=\
>  	SELECT CAST (RTRIM(TABLE_TYPE) AS VARCHAR(12)) AS TABLE_TYPE \
> -	FROM (VALUES 'SYSTEM TABLE', 'TABLE', 'VIEW') TABLETYPES(TABLE_TYPE) \
> +	FROM (VALUES 'SYNONYM', 'SYSTEM TABLE', 'TABLE', 'VIEW') \
> +		TABLETYPES(TABLE_TYPE) \
>  	ORDER BY TABLE_TYPE
>  
>  # parameter 1 = pattern for catalog name
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/metadata.out Wed Aug  9 15:53:53 2006
> @@ -284,6 +284,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/odbc_metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/odbc_metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/odbc_metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/odbc_metadata.out Wed Aug  9 15:53:53 2006
> @@ -314,6 +314,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/jdk14/metadata.out Wed Aug  9 15:53:53 2006
> @@ -377,6 +377,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/metadata.out Wed Aug  9 15:53:53 2006
> @@ -377,6 +377,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/odbc_metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/odbc_metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/odbc_metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/odbc_metadata.out Wed Aug  9 15:53:53 2006
> @@ -407,6 +407,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/Upgrade_10_1_10_2.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/Upgrade_10_1_10_2.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/Upgrade_10_1_10_2.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/Upgrade_10_1_10_2.out Wed Aug  9 15:53:53 2006
> @@ -1106,6 +1106,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> @@ -2597,6 +2598,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij.out Wed Aug  9 15:53:53 2006
> @@ -49,6 +49,12 @@
>    DISCONNECT [ CURRENT | connectionName | ALL ];
>                                 -- drop current, named, or all connections;
>                                 -- the default is CURRENT
> +  SHOW SCHEMAS;                -- lists all schemas in the current database
> +  SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema };
> +                               -- lists tables, views, procedures or synonyms
> +  SHOW INDEXES { IN schema | FROM table };
> +                               -- lists indexes in a schema, or for a table
> +  DESCRIBE name;               -- lists columns in the named table
>    COMMIT;                      -- commits the current transaction
>    ROLLBACK;                    -- rolls back the current transaction
>    PREPARE name AS 'SQL-J text'; -- prepares the SQL-J text
> 
> Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out?rev=430177&view=auto
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out (added)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out Wed Aug  9 15:53:53 2006
> @@ -0,0 +1,89 @@
> +ij> -- This test will cover SHOW TABLES, SHOW SCHEMAS, etc.
> +-- and the DESCRIBE command.
> +connect 'jdbc:derby:wombat;create=true';
> +ij> SET SCHEMA = APP;
> +0 rows inserted/updated/deleted
> +ij> CREATE TABLE t1 (i int generated always as identity, d DECIMAL(5,2), test VARCHAR(20));
> +0 rows inserted/updated/deleted
> +ij> CREATE SCHEMA USER1;
> +0 rows inserted/updated/deleted
> +ij> SET SCHEMA = USER1;
> +0 rows inserted/updated/deleted
> +ij> CREATE TABLE t2 (i int);
> +0 rows inserted/updated/deleted
> +ij> CREATE SYNONYM USER1.T3 FOR USER1.T2;
> +0 rows inserted/updated/deleted
> +ij> CREATE VIEW v1 AS SELECT * from app.t1;
> +0 rows inserted/updated/deleted
> +ij> CREATE INDEX idx1 ON APP.t1 (test ASC);
> +0 rows inserted/updated/deleted
> +ij> CREATE PROCEDURE APP.PROCTEST(IN A INTEGER, OUT B DECIMAL(10,2))
> +PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA 
> +EXTERNAL NAME 'a.b.c.d.e';
> +0 rows inserted/updated/deleted
> +ij> -- first display all tables, then display tables in one schema
> +SHOW TABLES;
> +TABLE_SCHEM         |TABLE_NAME                    |REMARKS             
> +------------------------------------------------------------------------
> +APP                 |T1                            |                    
> +USER1               |T2                            |                    
> +2 rows selected
> +ij> SHOW TABLES IN APP;
> +TABLE_SCHEM         |TABLE_NAME                    |REMARKS             
> +------------------------------------------------------------------------
> +APP                 |T1                            |                    
> +1 row selected
> +ij> -- 'describe t1' will give error, as not in current schema
> +DESCRIBE t1;
> +IJ ERROR: No table exists with the name T1
> +ij> DESCRIBE APP.t1;
> +COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
> +------------------------------------------------------------------------------
> +I                   |INTEGER  |0   |10  |10    |AUTOINCRE&|NULL      |NO      
> +D                   |DECIMAL  |2   |10  |5     |NULL      |NULL      |YES     
> +TEST                |VARCHAR  |NULL|NULL|20    |NULL      |40        |YES     
> +3 rows selected
> +ij> DESCRIBE v1;
> +COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
> +------------------------------------------------------------------------------
> +I                   |INTEGER  |0   |10  |10    |NULL      |NULL      |NO      
> +D                   |DECIMAL  |2   |10  |5     |NULL      |NULL      |YES     
> +TEST                |VARCHAR  |NULL|NULL|20    |NULL      |40        |YES     
> +3 rows selected
> +ij> SHOW SCHEMAS;
> +TABLE_SCHEM                   
> +------------------------------
> +APP                           
> +NULLID                        
> +SQLJ                          
> +SYS                           
> +SYSCAT                        
> +SYSCS_DIAG                    
> +SYSCS_UTIL                    
> +SYSFUN                        
> +SYSIBM                        
> +SYSPROC                       
> +SYSSTAT                       
> +USER1                         
> +12 rows selected
> +ij> SHOW VIEWS IN USER1;
> +TABLE_SCHEM         |TABLE_NAME                    |REMARKS             
> +------------------------------------------------------------------------
> +USER1               |V1                            |                    
> +1 row selected
> +ij> SHOW PROCEDURES IN APP;
> +PROCEDURE_SCHEM     |PROCEDURE_NAME                |REMARKS             
> +------------------------------------------------------------------------
> +APP                 |PROCTEST                      |a.b.c.d.e           
> +1 row selected
> +ij> SHOW SYNONYMS IN USER1;
> +TABLE_SCHEM         |TABLE_NAME                    |REMARKS             
> +------------------------------------------------------------------------
> +USER1               |T3                            |                    
> +1 row selected
> +ij> SHOW INDEXES FROM APP.t1;
> +TABLE_NAME          |COLUMN_NAME         |NON_U&|TYPE|ASC&|CARDINA&|PAGES   
> +----------------------------------------------------------------------------
> +T1                  |TEST                |true  |3   |A   |NULL    |NULL    
> +1 row selected
> +ij> 
> 
> Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/ij7.out
> ------------------------------------------------------------------------------
>     svn:eol-style = native
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/j9_13/ij.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/j9_13/ij.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/j9_13/ij.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/j9_13/ij.out Wed Aug  9 15:53:53 2006
> @@ -49,6 +49,12 @@
>    DISCONNECT [ CURRENT | connectionName | ALL ];
>                                 -- drop current, named, or all connections;
>                                 -- the default is CURRENT
> +  SHOW SCHEMAS;                -- lists all schemas in the current database
> +  SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema };
> +                               -- lists tables, views, procedures or synonyms
> +  SHOW INDEXES { IN schema | FROM table };
> +                               -- lists indexes in a schema, or for a table
> +  DESCRIBE name;               -- lists columns in the named table
>    COMMIT;                      -- commits the current transaction
>    ROLLBACK;                    -- rolls back the current transaction
>    PREPARE name AS 'SQL-J text'; -- prepares the SQL-J text
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/metadata.out Wed Aug  9 15:53:53 2006
> @@ -377,6 +377,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/odbc_metadata.out
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/odbc_metadata.out?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/odbc_metadata.out (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/odbc_metadata.out Wed Aug  9 15:53:53 2006
> @@ -407,6 +407,7 @@
>  ,APP,SCREWIE,VIEW,,null,null,null,null,null
>  getTableTypes():
>  TABLE_TYPE[VARCHAR]
> +SYNONYM
>  SYSTEM TABLE
>  TABLE
>  VIEW
> 
> Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbytools.runall
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbytools.runall?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbytools.runall (original)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbytools.runall Wed Aug  9 15:53:53 2006
> @@ -10,5 +10,6 @@
>  tools/ij4.sql
>  tools/ij5.sql
>  tools/ij6.sql
> +tools/ij7.sql
>  tools/ijConnName.sql
>  tools/URLCheck.sql
> 
> Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql?rev=430177&view=auto
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql (added)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql Wed Aug  9 15:53:53 2006
> @@ -0,0 +1,35 @@
> +
> +-- This test will cover SHOW TABLES, SHOW SCHEMAS, etc.
> +-- and the DESCRIBE command.
> +
> +connect 'jdbc:derby:wombat;create=true';
> +
> +SET SCHEMA = APP;
> +CREATE TABLE t1 (i int generated always as identity, d DECIMAL(5,2), test VARCHAR(20));
> +
> +CREATE SCHEMA USER1;
> +SET SCHEMA = USER1;
> +CREATE TABLE t2 (i int);
> +
> +CREATE SYNONYM USER1.T3 FOR USER1.T2;
> +CREATE VIEW v1 AS SELECT * from app.t1;
> +CREATE INDEX idx1 ON APP.t1 (test ASC);
> +CREATE PROCEDURE APP.PROCTEST(IN A INTEGER, OUT B DECIMAL(10,2))
> +PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA 
> +EXTERNAL NAME 'a.b.c.d.e';
> +
> +-- first display all tables, then display tables in one schema
> +SHOW TABLES;
> +SHOW TABLES IN APP;
> +
> +-- 'describe t1' will give error, as not in current schema
> +DESCRIBE t1;
> +DESCRIBE APP.t1;
> +DESCRIBE v1;
> +
> +SHOW SCHEMAS;
> +SHOW VIEWS IN USER1;
> +SHOW PROCEDURES IN APP;
> +SHOW SYNONYMS IN USER1;
> +SHOW INDEXES FROM APP.t1;
> +
> 
> Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7.sql
> ------------------------------------------------------------------------------
>     svn:eol-style = native
> 
> Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties?rev=430177&view=auto
> ==============================================================================
> --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties (added)
> +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties Wed Aug  9 15:53:53 2006
> @@ -0,0 +1,4 @@
> +ij.showNoConnectionsAtStart=false
> +
> +#Exclude for J2ME/Foundation - need to look into reason for failure
> +runwithfoundation=false
> \ No newline at end of file
> 
> Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/ij7_app.properties
> ------------------------------------------------------------------------------
>     svn:eol-style = native
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ij.jj
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ij.jj?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ij.jj (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ij.jj Wed Aug  9 15:53:53 2006
> @@ -551,6 +551,240 @@
>  	  	return new ijVectorResult(v,w);
>  	}
>  
> +	/**
> +	   Returns a subset of the input integer array
> +	   
> +	   @param input The input integer array
> +	   @param start Starting index, inclusive
> +	   @param end   Ending index, exclusive
> +	 */
> +	public static int[] intArraySubset(final int[] input, int start, int end) {
> +		int[] res = new int[end-start];
> +		System.arraycopy(input, start, res, 0, end-start);
> +		return res;
> +	}
> +
> +	/**
> +	   Verify that a table exists within a schema. Throws an exception
> +	   if table does not exist.
> +	   
> +	   @param schema Schema for the table
> +	   @param table  Name of table to check for existence of
> +	 */
> +	public void verifyTableExists(String schema, String table) 
> +	throws SQLException {
> +		if(schema == null)
> +			return;
> +
> +		ResultSet rs = null;
> +		try {
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getTables(null,schema,table,null);
> +			if(!rs.next())
> +				throw ijException.noSuchTable(table);
> +		} finally {
> +			if(rs!=null)
> +				rs.close();
> +		}
> +	}
> +
> +	/**
> +	   Return a resultset of tables (or views, procs...) in the given schema. 
> +
> +	   @param schema  Schema to get tables for, or null for search 
> +	                  in all schemas.
> +	   @param tableType Types of tables to return, see
> +	                  {@link java.sql.DatabaseMetaData#getTableTypes}
> +	 */
> +	public ijResult showTables(String schema, String[] tableType) throws SQLException {
> +		ResultSet rs = null;
> +		try {
> +			haveConnection();
> +
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getTables(null,schema,null,tableType);
> +
> +			int[] displayColumns = new int[] {
> +				rs.findColumn("TABLE_SCHEM"),
> +				rs.findColumn("TABLE_NAME"),
> +				rs.findColumn("REMARKS"),
> +			};
> +			int[] columnWidths = new int[] {
> +				20,
> +				30,
> +				20,
> +			};
> +
> +			return new ijResultSetResult(rs, displayColumns, columnWidths);
> +		} catch (SQLException e) {
> +			if(rs!=null)
> +				rs.close();
> +			throw e;
> +		}
> +	}
> +
> +	/**
> +	   Return a resultset of indexes for the given table or schema
> +
> +	   @param schema  schema to find indexes for
> +	   @param table   table to find indexes for
> +	 */
> +	public ijResult showIndexes(String schema, String table) throws SQLException {
> +		ResultSet rs = null;
> +		try {
> +			haveConnection();
> +			verifyTableExists(schema, table);
> +
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getIndexInfo(null, schema, table, false, true);
> +
> +			int[] displayColumns = new int[] {
> +				rs.findColumn("TABLE_SCHEM"),
> +				rs.findColumn("TABLE_NAME"),
> +				rs.findColumn("COLUMN_NAME"),
> +				rs.findColumn("NON_UNIQUE"),
> +				rs.findColumn("TYPE"),
> +				rs.findColumn("ASC_OR_DESC"),
> +				rs.findColumn("CARDINALITY"),
> +				rs.findColumn("PAGES"),
> +			};
> +			int[] columnWidths = new int[] {
> +				20,
> +				20,
> +				20,
> +				6,
> +				4,
> +				4,
> +				8,
> +				8,
> +			};
> +
> +			if(schema!=null) {
> +				displayColumns = intArraySubset(displayColumns, 1, 
> +												displayColumns.length);
> +				columnWidths   = intArraySubset(columnWidths, 1, 
> +												columnWidths.length);
> +			}
> +			return new ijResultSetResult(rs, displayColumns, columnWidths);
> +		} catch (SQLException e) {
> +			if(rs!=null)
> +				rs.close();
> +			throw e;
> +		}
> +	}
> +
> +	/**
> +	   Return a resultset of procedures from database metadata
> +	 */
> +	public ijResult showProcedures(String schema) throws SQLException {
> +		ResultSet rs = null;
> +		try {
> +			haveConnection();
> +
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getProcedures(null,schema,null);
> +
> +			int[] displayColumns = new int[] {
> +				rs.findColumn("PROCEDURE_SCHEM"),
> +				rs.findColumn("PROCEDURE_NAME"),
> +				rs.findColumn("REMARKS"),
> +			};
> +			int[] columnWidths = new int[] {
> +				20,
> +				30,
> +				20,
> +			};
> +
> +			return new ijResultSetResult(rs, displayColumns, columnWidths);
> +		} catch (SQLException e) {
> +			if(rs!=null)
> +				rs.close();
> +			throw e;
> +		}
> +	}
> +
> +	/**
> +	   Return a resultset of schemas from database metadata
> +	 */
> +	public ijResult showSchemas() throws SQLException {
> +		ResultSet rs = null;
> +		try {
> +			haveConnection();
> +
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getSchemas();
> +
> +			int[] displayColumns = new int[] {
> +				rs.findColumn("TABLE_SCHEM")
> +			};
> +			int[] columnWidths = new int[] {
> +				30
> +			};
> +
> +			return new ijResultSetResult(rs, displayColumns, columnWidths);
> +		} catch (SQLException e) {
> +			if(rs!=null)
> +				rs.close();
> +			throw e;
> +		}
> +	}
> +
> +	/**
> +	   Outputs the names of all fields of given table. Outputs field
> +	   names and data type.
> +	 */
> +	public ijResult describeTable(String schema, String table) throws SQLException {
> +		ResultSet rs = null;
> +		try {
> +			haveConnection();
> +			verifyTableExists(schema,table);
> +
> +			DatabaseMetaData dbmd = theConnection.getMetaData();
> +			rs = dbmd.getColumns(null,schema,table,null);
> +
> +			int[] displayColumns = new int[] {
> +				rs.findColumn("TABLE_SCHEM"),
> +				rs.findColumn("TABLE_NAME"),
> +				rs.findColumn("COLUMN_NAME"),
> +				rs.findColumn("TYPE_NAME"),
> +				rs.findColumn("DECIMAL_DIGITS"),
> +				rs.findColumn("NUM_PREC_RADIX"),
> +				rs.findColumn("COLUMN_SIZE"),
> +				rs.findColumn("COLUMN_DEF"),
> +				rs.findColumn("CHAR_OCTET_LENGTH"),
> +				rs.findColumn("IS_NULLABLE"),
> +			};
> +			int[] columnWidths = new int[] {
> +				20,
> +				20,
> +				20,
> +				9,
> +				4,
> +				4,
> +				6,
> +				10,
> +				10,
> +				8
> +			};
> +
> +			//
> +			// If schema is specified (if util.getSelectedSchema in
> +			// DescTableStatement() returns correct value), then we
> +			// don't need to output schema and table names.
> +			if(schema!=null) {
> +				displayColumns = intArraySubset(displayColumns, 2, 
> +												displayColumns.length);
> +				columnWidths   = intArraySubset(columnWidths, 2, 
> +												columnWidths.length);
> +			}
> +
> +			return new ijResultSetResult(rs, displayColumns, columnWidths);
> +		} catch (SQLException e) {
> +			if(rs!=null)
> +				rs.close();
> +			throw e;
> +		}
> +	}
>  
>  	private Object makeXid(int xid)
>  	{
> @@ -589,6 +823,7 @@
>  {	/* ij Keywords */
>  	<ABSOLUTE: "absolute">
>  |	<AFTER: "after">
> +|	<ALIASES: "aliases">
>  |	<ALL: "all">
>  |	<AS: "as">
>  |	<ASYNC: "async">
> @@ -603,6 +838,7 @@
>  | 	<CONNECTIONS: "connections">
>  |	<CURRENT: "current">
>  |	<CURSOR: "cursor">
> +|	<DESCRIBE: "describe">
>  |	<DISCONNECT: "disconnect">
>  |	<DRIVER: "driver">
>  |	<ELAPSEDTIME: "elapsedtime">
> @@ -614,10 +850,13 @@
>  |	<FAIL: "fail">
>  |	<FIRST: "first">
>  |	<FOR: "for">
> +|	<FROM: "from">
>  |	<GET: "get">
>  |	<GETCURRENTROWNUMBER: "getcurrentrownumber">
>  |	<HOLD: "hold">
>  |	<HELP: "help">
> +|	<IN: "in">
> +|	<INDEXES: "indexes">
>  |	<INSENSITIVE: "insensitive">
>  |	<INTO: "into">
>  |	<LAST: "last">
> @@ -634,6 +873,7 @@
>  |	<PREPARE: "prepare">
>  |	<PREVIOUS: "previous">
>  |	<PROCEDURE: "procedure">
> +|	<PROCEDURES: "procedures">
>  |	<PROPERTIES: "properties">
>  |	<PROTOCOL: "protocol">
>  |	<QUIT: "quit">
> @@ -645,14 +885,18 @@
>  |	<RUN: "run">
>  |	<TO: "to">
>  |	<SAVEPOINT: "savepoint">
> +|	<SCHEMAS: "schemas">
>  |	<SCROLL: "scroll">
>  |	<SENSITIVE: "sensitive">
>  |	<SET: "set">
>  |	<SHOW: "show">
>  |	<SHUTDOWN: "shutdown">
>  |	<STATEMENT: "statement">
> +|	<SYNONYMS: "synonyms">
> +|	<TABLES: "tables">
>  |	<USER: "user">
>  |	<USING: "using">
> +|	<VIEWS: "views">
>  |	<WAIT: "wait">
>  |	<WITH: "with">
>  |	<XA_1PHASE: "XA_1phase">
> @@ -985,6 +1229,7 @@
>  | 	r=CloseStatement()
>  | 	r=CommitStatement()
>  | 	r=ConnectStatement()
> +|	r=DescTableStatement()
>  |	r=DisconnectStatement()
>  |	r=DriverStatement()
>  |	r=ElapsedTimeStatement()	
> @@ -1012,7 +1257,7 @@
>  |	r=RemoveStatement()	
>  |	r=RunStatement()	
>  |	r=SetConnectionStatement()	
> -|	r=ShowConnectionsStatement()	
> +|	r=ShowStatement()	
>  |	r=WaitForStatement()	
>  |	r=XA_DataSourceStatement()
>  |	r=XA_ConnectStatement()
> @@ -1246,6 +1491,43 @@
>  
>  
>  /**
> + * Handles DESCRIBE table
> + */
> +ijResult
> +DescTableStatement()
> +throws SQLException
> +:
> +{
> +	String i = null;
> +	String i2 = null;
> +	Token  s = null;
> +}
> +{
> +	<DESCRIBE>
> +	( ( i=identifier() <PERIOD> i2=identifier() )
> +	| i2=identifier()
> +	| s=<STRING>
> +	)
> +	{
> +		if(s!=null) {
> +			String image = stringValue(s.image.toUpperCase());
> +
> +			int dotPosition = image.indexOf('.');
> +			if(dotPosition!=-1) {
> +				i = image.substring(0,dotPosition);
> +				i2 = image.substring(dotPosition+1);
> +			}
> +		}
> +
> +		if(i==null)
> +			i = util.getSelectedSchema(theConnection);
> +
> +		return describeTable(i,i2);
> +	}
> +}
> +
> +
> +/**
>    * Handles CONNECT yadda.yadda.foo( stringArg, ... stringArg ) AS connectionName
>    */
>  ijResult
> @@ -1334,19 +1616,69 @@
>  }
>  
>  /**
> -	Shows the current connections for the current environment.
> + * Handles showing current connections for the current environment, and
> + * SHOW TABLES/VIEWS/... commands.
>   */
>  ijResult
> -ShowConnectionsStatement()
> +ShowStatement()
>  throws SQLException
>  :
>  {
> +	String schema  = null;
> +	String tblname = null;
> +	String str     = null;
> +	String[] types = null;
> +	Token t = null;
> +	Token v = null;
>  }
>  {
>  	<SHOW> <CONNECTIONS>
>  	{
>  		return showConnectionsMethod(false);
>  	}
> +|   <SHOW> (t=<TABLES> | v=<VIEWS> | <SYNONYMS> | <ALIASES>)
> +		[ <IN> schema=identifier() ]
> +	{
> +		if(t!=null) {
> +			// Only show non-system tables by default.
> +			// If schema specified (i.e. SYS), also display system tables.
> +			if(schema!=null)
> +				types = new String[] { "TABLE", "SYSTEM TABLE" };
> +			else
> +				types = new String[] { "TABLE" };
> +		}
> +		else if(v!=null)
> +			types = new String[] { "VIEW" };
> +		else
> +			types = new String[] { "ALIAS" };
> +		return showTables(schema, types);
> +	}
> +|	<SHOW> <INDEXES> 
> +		[ (<IN> schema=identifier()) |
> +		  (<FROM> tblname=identifier() [ <PERIOD> str=identifier() ] ) ]
> +	{
> +		if(str != null) {
> +			// if absolute table reference given
> +			schema = tblname;
> +			tblname = str;
> +		}
> +
> +		// If user specifies a table name, then assume schema is
> +		// current schema. Note that getSelectedSchema may return
> +		// null for some DBMSes.
> +		if(schema == null && tblname != null)
> +			schema = util.getSelectedSchema(theConnection);
> +		return showIndexes(schema,tblname);
> +	}
> +|	<SHOW> <PROCEDURES>
> +		[ <IN> schema=identifier() ]
> +	{
> +		return showProcedures(schema);
> +	}
> +|	<SHOW> <SCHEMAS>
> +	{
> +		return showSchemas();
> +	}
>  }
>  
>  /**
> @@ -3097,6 +3429,7 @@
>  	(
>  	tok = <ABSOLUTE>
>  |	tok = <AFTER>
> +|	tok = <ALIASES>
>  |	tok = <ALL>
>  |	tok = <AS>
>  |	tok = <ASYNC>
> @@ -3111,6 +3444,7 @@
>  | 	tok = <CONNECTIONS>
>  |	tok = <CURRENT>
>  |	tok = <CURSOR>
> +|	tok = <DESCRIBE>
>  |	tok = <DISCONNECT>
>  |	tok = <DRIVER>
>  |	tok = <ELAPSEDTIME>
> @@ -3121,10 +3455,13 @@
>  |	tok = <FAIL>
>  |	tok = <FIRST>
>  |	tok = <FOR>
> +|	tok = <FROM>
>  |	tok = <GET>
>  |	tok = <GETCURRENTROWNUMBER>
>  |	tok = <HOLD>
>  |	tok = <HELP>
> +|	tok = <IN>
> +|	tok = <INDEXES>
>  |	tok = <INSENSITIVE>
>  |	tok = <INTO>
>  |	tok = <LAST>
> @@ -3141,6 +3478,7 @@
>  |	tok = <PREPARE>
>  |	tok = <PREVIOUS>
>  |	tok = <PROCEDURE>
> +|	tok = <PROCEDURES>
>  |	tok = <PROPERTIES>
>  |	tok = <PROTOCOL>
>  |	tok = <QUIT>
> @@ -3151,14 +3489,18 @@
>  |	tok = <ROLLBACK>
>  |	tok = <RUN>
>  |	tok = <TO>
> +|	tok = <SCHEMAS>
>  |	tok = <SCROLL>
>  |	tok = <SENSITIVE>
>  |	tok = <SET>
>  |	tok = <SHOW>
>  |	tok = <SHUTDOWN>
>  |	tok = <STATEMENT>
> +|	tok = <SYNONYMS>
> +|	tok = <TABLES>
>  |	tok = <USER>
>  |	tok = <USING>
> +|	tok = <VIEWS>
>  |	tok = <WAIT>
>  |	tok = <WITH>
>  |	tok = <XA_1PHASE>
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijException.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijException.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijException.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijException.java Wed Aug  9 15:53:53 2006
> @@ -53,6 +53,7 @@
>  	private final static String NoSuchAsyncStatement = "IJ_NoAsynStatEx";
>  	private final static String NoSuchConnection = "IJ_NoConnExisWi";
>  	private final static String NoSuchProtocol = "IJ_NoProtExisWi";
> +	private final static String NoSuchTable = "IJ_NoSuchTable";
>  	private final static String NotJDBC20 = "IJ_IsOnlySuppIn";
>  	private final static String NoUsingResults = "IJ_UsinClauHadN";
>  	private final static String ObjectWasNull = "IJ_UnabToEsta";
> @@ -122,6 +123,9 @@
>  	}
>  	static ijException noSuchProtocol(String c) {
>  		return new ijException(LocalizedResource.getMessage(NoSuchProtocol, c));
> +	}
> +	static ijException noSuchTable(String c) {
> +		return new ijException(LocalizedResource.getMessage(NoSuchTable, c));
>  	}
>  	static public ijException notJDBC20(String operation) {
>  		return new ijException(LocalizedResource.getMessage(NotJDBC20, operation));
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResult.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResult.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResult.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResult.java Wed Aug  9 15:53:53 2006
> @@ -54,6 +54,8 @@
>  	ResultSet getNextRowOfResultSet();
>  	Vector getVector();
>  	SQLException getException();
> +	int[] getColumnDisplayList();
> +	int[] getColumnWidthList();
>  
>  	void closeStatement() throws SQLException ;
>  
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultImpl.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultImpl.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultImpl.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultImpl.java Wed Aug  9 15:53:53 2006
> @@ -53,6 +53,9 @@
>  	public Vector getVector() { return null; }
>  	public SQLException getException() { return null; }
>  
> +	public int[] getColumnDisplayList() { return null; }
> +	public int[] getColumnWidthList() { return null; }
> +
>  	public void closeStatement() throws SQLException { }
>  
>  	public abstract SQLWarning getSQLWarnings() throws SQLException;
> @@ -66,6 +69,10 @@
>  		if (isVector()) return LocalizedResource.getMessage("IJ_Vec0",getVector().toString());
>  		if (isMulti()) return LocalizedResource.getMessage("IJ_Mul0",getVector().toString());
>  		if (isException()) return LocalizedResource.getMessage("IJ_Exc0",getException().toString());
> +		try {
> +			if (isResultSet()) return LocalizedResource.getMessage("IJ_Rse0",getStatement().toString());
> +		} catch(SQLException se) {
> +		}
>  		return LocalizedResource.getMessage("IJ_Unkn0",this.getClass().getName());
>  	}
>  }
> 
> Added: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java?rev=430177&view=auto
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java (added)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java Wed Aug  9 15:53:53 2006
> @@ -0,0 +1,81 @@
> +/*
> +
> +   Derby - Class org.apache.derby.impl.tools.ij.ijResultSetResult
> +
> +   Licensed to the Apache Software Foundation (ASF) under one
> +   or more contributor license agreements.  See the NOTICE file
> +   distributed with this work for additional information
> +   regarding copyright ownership.  The ASF licenses this file
> +   to you under the Apache License, Version 2.0 (the
> +   "License"); you may not use this file except in compliance
> +   with the License.  You may obtain a copy of the License at
> +
> +      http://www.apache.org/licenses/LICENSE-2.0
> +
> +   Unless required by applicable law or agreed to in writing, software
> +   distributed under the License is distributed on an "AS IS" BASIS,
> +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +   See the License for the specific language governing permissions and
> +   limitations under the License.
> +
> + */
> +
> +package org.apache.derby.impl.tools.ij;
> +
> +import java.sql.Connection;
> +import java.sql.ResultSet;
> +import java.sql.Statement;
> +import java.sql.SQLException;
> +import java.sql.SQLWarning;
> +
> +/**
> + * This impl is intended to be used with a resultset,
> + * where the execution of the statement is already complete.
> + */
> +public class ijResultSetResult extends ijResultImpl {
> +
> +	ResultSet resultSet;
> +	Statement statement;
> +
> +	int[]     displayColumns = null;
> +	int[]     columnWidths = null;
> +
> +	/**
> +	 * Create a ijResultImpl that represents a result set.
> +	 */
> +	public ijResultSetResult(ResultSet r) throws SQLException {
> +		resultSet = r;
> +		statement = resultSet.getStatement();
> +	}
> +
> +	/**
> +	 * Create a ijResultImpl that represents a result set, only
> +	 * displaying a subset of the columns, using specified column widths.
> +	 * 
> +	 * @param r The result set to display
> +	 * @param display Which column numbers to display, or null to display
> +	 *                all columns.
> +	 * @param widths  The widths of the columns specified in 'display', or
> +	 *                null to display using default column sizes.
> +	 */
> +	public ijResultSetResult(ResultSet r, int[] display,
> +							 int[] widths) throws SQLException {
> +		resultSet = r;
> +		statement = resultSet.getStatement();
> +
> +		displayColumns = display;
> +		columnWidths   = widths;
> +	}
> +
> +	public boolean isResultSet() throws SQLException { return statement==null || statement.getUpdateCount() == -1; }
> +
> +	public ResultSet getResultSet() throws SQLException { return resultSet; }
> +
> +	public void closeStatement() throws SQLException { if(statement!=null) statement.close(); else resultSet.close(); }
> +
> +	public int[] getColumnDisplayList() { return displayColumns; }
> +	public int[] getColumnWidthList() { return columnWidths; }
> +
> +	public SQLWarning getSQLWarnings() throws SQLException { return resultSet.getWarnings(); }
> +	public void clearSQLWarnings() throws SQLException { resultSet.clearWarnings(); }
> +}
> 
> Propchange: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/ijResultSetResult.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/util.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/util.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/util.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/util.java Wed Aug  9 15:53:53 2006
> @@ -853,6 +853,35 @@
>  			 (framework.toUpperCase(Locale.ENGLISH).indexOf("JCC") != -1)));
>  	}
>  	
> -
> +	/**
> +	 * Selects the current schema from the given connection.
> +	 * 
> +	 * As there are no way of getting current schema supported by
> +	 * all major DBMS-es, this method may return null.
> +	 * 
> +	 * @param theConnection  Connection to get current schema for
> +	 * @return the current schema of the connection, or null if error.
> +	 */
> +	public static String getSelectedSchema(Connection theConnection) throws SQLException {
> +		String schema = null;
> +                if (theConnection == null)
> +                  return null;
> +		Statement st = theConnection.createStatement();
> +		try {
> +			if(!st.execute("VALUES CURRENT SCHEMA"))
> +				return null;
> +			
> +			ResultSet rs = st.getResultSet();
> +			if(rs==null || !rs.next())
> +				return null;
> +			schema = rs.getString(1);
> +		} catch(SQLException e) {
> +			// There are no standard way of getting schema.
> +			// Getting default schema may fail.
> +		} finally {
> +			st.close();
> +		}
> +		return schema;
> +	}
>  }
>  
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/utilMain.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/utilMain.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/utilMain.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/impl/tools/ij/utilMain.java Wed Aug  9 15:53:53 2006
> @@ -451,6 +451,15 @@
>  					JDBCDisplayUtil.ShowWarnings(out,result.getSQLWarnings());
>  					result.clearSQLWarnings();
>  				}
> +			} else if (result.isResultSet()) {
> +				ResultSet rs = result.getResultSet();
> +				try {
> +					JDBCDisplayUtil.DisplayResults(out,rs,connEnv[currCE].getConnection(), result.getColumnDisplayList(), result.getColumnWidthList());
> +				} catch (SQLException se) {
> +					result.closeStatement();
> +					throw se;
> +				}
> +				result.closeStatement();
>  			} else if (result.isException()) {
>  				JDBCDisplayUtil.ShowException(out,result.getException());
>  			}
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/loc/toolsmessages.properties Wed Aug  9 15:53:53 2006
> @@ -65,6 +65,13 @@
>  \                               -- drop current, named, or all connections;\n\
>  \                               -- the default is CURRENT\n\
>  \ \n\
> +\  SHOW SCHEMAS;                -- lists all schemas in the current database\n\
> +\  SHOW [ TABLES | VIEWS | PROCEDURES | SYNONYMS ] { IN schema };\n\
> +\                               -- lists tables, views, procedures or synonyms\n\
> +\  SHOW INDEXES { IN schema | FROM table };\n\
> +\                               -- lists indexes in a schema, or for a table\n\
> +\  DESCRIBE name;               -- lists columns in the named table\n\
> +\ \n\
>  \  COMMIT;                      -- commits the current transaction\n\
>  \  ROLLBACK;                    -- rolls back the current transaction\n\
>  \ \n\
> @@ -129,6 +136,7 @@
>  IJ_NoAsynStatEx=No async statement exists with the name {0}
>  IJ_NoConnExisWi=No connection exists with the name {0}
>  IJ_NoProtExisWi=No protocol exists with the name {0}
> +IJ_NoSuchTable=No table exists with the name {0}
>  IJ_IsOnlySuppIn={0} is only supported in JDBC 2.0 and greater.
>  IJ_UsinClauHadN=Using clause had no results
>  IJ_UnabToEsta=Unable to establish {0}
> @@ -149,6 +157,7 @@
>  IJ_Vec0=VEC::{0}
>  IJ_Mul0=MUL::{0}
>  IJ_Exc0=EXC::{0}
> +IJ_Rse0=RST::{0}
>  IJ_Unkn0=UNKNOWN::{0}
>  # From util.java
>  IJ_UsageJavaComCloudToolsIjPPropeInput=Usage: java org.apache.derby.tools.ij [-p propertyfile] [-ca connectionAttributePropertyFile] [inputfile]
> 
> Modified: db/derby/code/trunk/java/tools/org/apache/derby/tools/JDBCDisplayUtil.java
> URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/tools/org/apache/derby/tools/JDBCDisplayUtil.java?rev=430177&r1=430176&r2=430177&view=diff
> ==============================================================================
> --- db/derby/code/trunk/java/tools/org/apache/derby/tools/JDBCDisplayUtil.java (original)
> +++ db/derby/code/trunk/java/tools/org/apache/derby/tools/JDBCDisplayUtil.java Wed Aug  9 15:53:53 2006
> @@ -258,18 +258,20 @@
>  	static public void DisplayResults(PrintWriter out, Statement stmt, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayResults( out, stmt, conn, 0);			
> +		indent_DisplayResults( out, stmt, conn, 0, null, null);			
>  	}
>  
>  	static private void indent_DisplayResults
> -	(PrintWriter out, Statement stmt, Connection conn, int indentLevel)
> +	(PrintWriter out, Statement stmt, Connection conn, int indentLevel,
> +	 int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException {
>  
>  		checkNotNull(stmt, "Statement");
>  
>  		ResultSet rs = stmt.getResultSet();
>  		if (rs != null) {
> -			indent_DisplayResults(out, rs, conn, indentLevel);
> +			indent_DisplayResults(out, rs, conn, indentLevel, 
> +								  displayColumns, displayColumnWidths);
>  			rs.close(); // let the result set go away
>  		}
>  		else {
> @@ -297,20 +299,48 @@
>  	}
>  
>  	/**
> +	    Calculates column display widths from the default widths of the
> +	    result set.
> +	 */
> +	static private int[] getColumnDisplayWidths(ResultSetMetaData rsmd, int[] dispColumns,
> +												boolean localizedOutput)
> +		throws SQLException {
> +		int count = (dispColumns == null) ? rsmd.getColumnCount() : dispColumns.length;
> +		int[] widths = new int[count];
> +
> +		for(int i=0; i<count; i++) {
> +			int colnum = (dispColumns == null) ? (i + 1) : dispColumns[i];
> +			int dispsize = localizedOutput
> +				? LocalizedResource.getInstance().getColumnDisplaySize(rsmd, colnum)
> +                : rsmd.getColumnDisplaySize(colnum);
> +			widths[i] = Math.min(maxWidth,
> +				Math.max((rsmd.isNullable(colnum) == ResultSetMetaData.columnNoNulls)?
> +				0 : MINWIDTH, dispsize));
> +		}
> +		return widths;
> +	}
> +
> +
> +	/**
>  		@param out the place to write to
>  		@param rs the ResultSet to display
>  		@param conn the Connection against which the ResultSet was retrieved
> +	    @param displayColumns Column numbers to display, or null if all
> +	    @param displayColumnWidths Column widths, in characters, if displayColumns is specified.
>  
>  		@exception SQLException on JDBC access failure
>  	 */
> -	static public void DisplayResults(PrintWriter out, ResultSet rs, Connection conn)
> +	static public void DisplayResults(PrintWriter out, ResultSet rs, Connection conn,
> +									  int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException
>  	{
> -		indent_DisplayResults( out, rs, conn, 0);
> +		indent_DisplayResults( out, rs, conn, 0, displayColumns, 
> +							   displayColumnWidths);
>  	}
>  
>  	static private void indent_DisplayResults
> -	(PrintWriter out, ResultSet rs, Connection conn, int indentLevel)
> +	(PrintWriter out, ResultSet rs, Connection conn, int indentLevel, 
> +	 int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException {
>  		ResultSetMetaData rsmd = rs.getMetaData();
>  		checkNotNull(rsmd, "ResultSetMetaData");
> @@ -324,7 +354,11 @@
>  		else
>  			nestedResults = null;
>  
> -		int len = indent_DisplayBanner(out,rsmd, indentLevel);
> +		if(displayColumnWidths == null)
> +			displayColumnWidths = getColumnDisplayWidths(rsmd, displayColumns,true);
> +		
> +		int len = indent_DisplayBanner(out,rsmd, indentLevel, displayColumns,
> +									   displayColumnWidths);
>  
>  		// When displaying rows, keep going past errors
>  		// unless/until the maximum # of errors is reached.
> @@ -335,7 +369,9 @@
>  				doNext = rs.next();
>  				if (doNext) {
>  
> -		    		DisplayRow(out, rs, rsmd, len, nestedResults, conn, indentLevel);
> +		    		DisplayRow(out, rs, rsmd, len, nestedResults, conn, 
> +							   indentLevel, displayColumns, 
> +							   displayColumnWidths);
>  					ShowWarnings(out, rs);
>  					numberOfRowsSelected++;
>  				}
> @@ -392,7 +428,8 @@
>  			LocalizedResource.OutputWriter().println(b);
>  			LocalizedResource.OutputWriter().println(LocalizedResource.getMessage("UT_Resul0", LocalizedResource.getNumber(i)));
>  			LocalizedResource.OutputWriter().println(b);
> -			indent_DisplayResults(out, (ResultSet) nr.elementAt(i), conn, indentLevel);
> +			indent_DisplayResults(out, (ResultSet) nr.elementAt(i), conn,
> +								  indentLevel, null, null);
>  		}
>  	}
>  
> @@ -409,10 +446,12 @@
>  	static public void DisplayNextRow(PrintWriter out, ResultSet rs, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayNextRow( out, rs, conn, 0 );
> +		indent_DisplayNextRow( out, rs, conn, 0, null, (rs == null) ? null
> +							   : getColumnDisplayWidths(rs.getMetaData(), null, true));
>  	}
>  
> -	static private void indent_DisplayNextRow(PrintWriter out, ResultSet rs, Connection conn, int indentLevel )
> +	static private void indent_DisplayNextRow(PrintWriter out, ResultSet rs, Connection conn, int indentLevel,
> +											  int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException {
>  
>  		Vector nestedResults;
> @@ -431,8 +470,9 @@
>  
>  		// Only print stuff out if there is a row to be had.
>  		if (rs.next()) {
> -			int rowLen = indent_DisplayBanner(out, rsmd, indentLevel);
> -    		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel );
> +			int rowLen = indent_DisplayBanner(out, rsmd, indentLevel, displayColumns, displayColumnWidths);
> +    		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel,
> +					   null, null );
>  		}
>  		else {
>  			indentedPrintLine( out, indentLevel, LocalizedResource.getMessage("UT_NoCurreRow"));
> @@ -458,10 +498,12 @@
>  	static public void DisplayCurrentRow(PrintWriter out, ResultSet rs, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayCurrentRow( out, rs, conn, 0 );
> +		indent_DisplayCurrentRow( out, rs, conn, 0, null, (rs == null) ? null
> +								  : getColumnDisplayWidths(rs.getMetaData(), null, true) );
>  	}
>  
> -	static private void indent_DisplayCurrentRow(PrintWriter out, ResultSet rs, Connection conn, int indentLevel )
> +	static private void indent_DisplayCurrentRow(PrintWriter out, ResultSet rs, Connection conn, 
> +												 int indentLevel, int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException {
>  
>  		Vector nestedResults;
> @@ -481,8 +523,9 @@
>  		ResultSetMetaData rsmd = rs.getMetaData();
>  		checkNotNull(rsmd, "ResultSetMetaData");
>  
> -		int rowLen = indent_DisplayBanner(out, rsmd, indentLevel);
> -   		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel );
> +		int rowLen = indent_DisplayBanner(out, rsmd, indentLevel, displayColumns, displayColumnWidths);
> +   		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel,
> +				   displayColumns, displayColumnWidths );
>  
>  		ShowWarnings(out, rs);
>  
> @@ -504,42 +547,38 @@
>  	static public int DisplayBanner(PrintWriter out, ResultSetMetaData rsmd )
>  		throws SQLException
>  	{
> -		return indent_DisplayBanner( out, rsmd, 0 );
> +		return indent_DisplayBanner( out, rsmd, 0, null, 
> +									 getColumnDisplayWidths(rsmd, null, true) );
>  	}
>  
> -	static private int indent_DisplayBanner(PrintWriter out, ResultSetMetaData rsmd, int indentLevel )
> +	static private int indent_DisplayBanner(PrintWriter out, ResultSetMetaData rsmd, int indentLevel,
> +											int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException	{
>  
>  		StringBuffer buf = new StringBuffer();
>  
> -		int numCols = rsmd.getColumnCount();
> +		int numCols = displayColumnWidths.length;
>  		int rowLen;
>  
>  		// do some precalculation so the buffer is allocated only once
>  		// buffer is twice as long as the display length plus one for a newline
>  		rowLen = (numCols - 1); // for the column separators
> -		for (int i=1; i <= numCols; i++) {
> -			rowLen += Math.min(maxWidth,
> -				Math.max((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH, LocalizedResource.getInstance().getColumnDisplaySize(rsmd, i)));
> -		}
> +		for (int i=1; i <= numCols; i++)
> +			rowLen += displayColumnWidths[i-1];
>  		buf.ensureCapacity(rowLen);
>  
>  		// get column header info
>  		// truncate it to the column display width
>  		// add a bar between each item.
>  		for (int i=1; i <= numCols; i++) {
> +			int colnum = displayColumns==null ? i : displayColumns[i-1];
>  
>  			if (i>1)
>  				buf.append('|');
>  
> -			String s = rsmd.getColumnLabel(i);
> +			String s = rsmd.getColumnLabel(colnum);
>  
> -			int w = Math.min(maxWidth,
> -				Math.max(((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH), LocalizedResource.getInstance().getColumnDisplaySize(rsmd, i)));
> +			int w = displayColumnWidths[i-1];
>  
>  			if (s.length() < w) {
>  				
> @@ -592,34 +631,39 @@
>  		@param nestedResults
>  		@param conn
>  		@param indentLevel number of tab stops to indent line
> +	    @param displayColumns A list of column numbers to display
> +	    @param displayColumnWidths If displayColumns is set, the width of
> +								columns to display, in characters.
>  
>  		@exception SQLException thrown on JDBC access failure
>  	 */
> -	static private void DisplayRow(PrintWriter out, ResultSet rs, ResultSetMetaData rsmd, int rowLen, Vector nestedResults, Connection conn, int indentLevel )
> +	static private void DisplayRow(PrintWriter out, ResultSet rs, ResultSetMetaData rsmd, int rowLen, Vector nestedResults, Connection conn, int indentLevel,
> +								   int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException
>  	{
>  		StringBuffer buf = new StringBuffer();
>  		buf.ensureCapacity(rowLen);
>  
> -		int numCols = rsmd.getColumnCount();
> +		int numCols = displayColumnWidths.length;
>  		int i;
>  
>  		// get column header info
>  		// truncate it to the column display width
>  		// add a bar between each item.
>  		for (i=1; i <= numCols; i++){
> +			int colnum = displayColumns==null ? i : displayColumns[i-1];
>  			if (i>1)
>  				buf.append('|');
>  
>  			String s;
> -			switch (rsmd.getColumnType(i)) {
> +			switch (rsmd.getColumnType(colnum)) {
>  			default:
> -				s = LocalizedResource.getInstance().getLocalizedString(rs, rsmd, i );
> +				s = LocalizedResource.getInstance().getLocalizedString(rs, rsmd, colnum );
>  				break;
>  			case org.apache.derby.iapi.reference.JDBC20Translation.SQL_TYPES_JAVA_OBJECT:
>  			case Types.OTHER:
>  			{
> -				Object o = rs.getObject(i);
> +				Object o = rs.getObject(colnum);
>  				if (o == null) { s = "NULL"; }
>  				else if (o instanceof ResultSet && nestedResults != null)
>  				{
> @@ -629,7 +673,7 @@
>  				else
>  				{
>  					try {
> -						s = rs.getString(i);
> +						s = rs.getString(colnum);
>  					} catch (SQLException se) {
>  						// oops, they don't support refetching the column
>  						s = o.toString();
> @@ -640,10 +684,7 @@
>  			}
>  			if (s==null) s = "NULL";
>  
> -			int w = Math.min(maxWidth,
> -				Math.max((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH, LocalizedResource.getInstance().getColumnDisplaySize(rsmd, i)));
> +			int w = displayColumnWidths[i-1];
>  			if (s.length() < w) {
>  				StringBuffer fullS = new StringBuffer(s);
>  				fullS.ensureCapacity(w);
> @@ -816,18 +857,20 @@
>  	static public void DisplayResults(PrintStream out, Statement stmt, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayResults( out, stmt, conn, 0);			
> +		indent_DisplayResults( out, stmt, conn, 0, null, null);			
>  	}
>  
>  	static private void indent_DisplayResults
> -	(PrintStream out, Statement stmt, Connection conn, int indentLevel)
> +	(PrintStream out, Statement stmt, Connection conn, int indentLevel,
> +	 int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException {
>  
>  		checkNotNull(stmt, "Statement");
>  
>  		ResultSet rs = stmt.getResultSet();
>  		if (rs != null) {
> -			indent_DisplayResults(out, rs, conn, indentLevel);
> +			indent_DisplayResults(out, rs, conn, indentLevel, displayColumns,
> +								  displayColumnWidths);
>  			rs.close(); // let the result set go away
>  		}
>  		else {
> @@ -852,11 +895,12 @@
>  	static public void DisplayResults(PrintStream out, ResultSet rs, Connection conn)
>  		throws SQLException
>  	{
> -		indent_DisplayResults( out, rs, conn, 0);
> +		indent_DisplayResults( out, rs, conn, 0, null, null);
>  	}
>  
>  	static private void indent_DisplayResults
> -	(PrintStream out, ResultSet rs, Connection conn, int indentLevel)
> +	(PrintStream out, ResultSet rs, Connection conn, int indentLevel,
> +	 int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException {
>  		ResultSetMetaData rsmd = rs.getMetaData();
>  		checkNotNull(rsmd, "ResultSetMetaData");
> @@ -870,7 +914,11 @@
>  		else
>  			nestedResults = null;
>  
> -		int len = indent_DisplayBanner(out,rsmd, indentLevel);
> +		if(displayColumnWidths == null)
> +			displayColumnWidths = getColumnDisplayWidths(rsmd, displayColumns, false);
> +
> +		int len = indent_DisplayBanner(out,rsmd, indentLevel, displayColumns,
> +									   displayColumnWidths);
>  
>  		// When displaying rows, keep going past errors
>  		// unless/until the maximum # of errors is reached.
> @@ -881,7 +929,9 @@
>  				doNext = rs.next();
>  				if (doNext) {
>  
> -		    		DisplayRow(out, rs, rsmd, len, nestedResults, conn, indentLevel);
> +		    		DisplayRow(out, rs, rsmd, len, nestedResults, conn, 
> +							   indentLevel, displayColumns, 
> +							   displayColumnWidths);
>  					ShowWarnings(out, rs);
>  					numberOfRowsSelected++;
>  				}
> @@ -930,17 +980,20 @@
>  			System.out.println(b);
>  			System.out.println(s+i+" +");
>  			System.out.println(b);
> -			indent_DisplayResults(out, (ResultSet) nr.elementAt(i), conn, indentLevel);
> +			indent_DisplayResults(out, (ResultSet) nr.elementAt(i), conn, 
> +								  indentLevel, null, null);
>  		}
>  	}
>  
>  	static public void DisplayNextRow(PrintStream out, ResultSet rs, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayNextRow( out, rs, conn, 0 );
> +		indent_DisplayNextRow( out, rs, conn, 0, null, (rs == null) ? null
> +							   : getColumnDisplayWidths(rs.getMetaData(),null,false) );
>  	}
>  
> -	static private void indent_DisplayNextRow(PrintStream out, ResultSet rs, Connection conn, int indentLevel )
> +	static private void indent_DisplayNextRow(PrintStream out, ResultSet rs, Connection conn, int indentLevel,
> +											  int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException {
>  
>  		Vector nestedResults;
> @@ -959,8 +1012,9 @@
>  
>  		// Only print stuff out if there is a row to be had.
>  		if (rs.next()) {
> -			int rowLen = indent_DisplayBanner(out, rsmd, indentLevel);
> -    		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel );
> +			int rowLen = indent_DisplayBanner(out, rsmd, indentLevel, null, null);
> +    		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel,
> +					   displayColumns, displayColumnWidths);
>  		}
>  		else {
>  			indentedPrintLine( out, indentLevel, LocalizedResource.getMessage("UT_NoCurreRow"));
> @@ -976,10 +1030,12 @@
>  	static public void DisplayCurrentRow(PrintStream out, ResultSet rs, Connection conn )
>  		throws SQLException
>  	{
> -		indent_DisplayCurrentRow( out, rs, conn, 0 );
> +		indent_DisplayCurrentRow( out, rs, conn, 0, null, (rs == null) ? null
> +								  : getColumnDisplayWidths(rs.getMetaData(),null,false) );
>  	}
>  
> -	static private void indent_DisplayCurrentRow(PrintStream out, ResultSet rs, Connection conn, int indentLevel )
> +	static private void indent_DisplayCurrentRow(PrintStream out, ResultSet rs, Connection conn, 
> +												 int indentLevel, int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException {
>  
>  		Vector nestedResults;
> @@ -999,8 +1055,9 @@
>  		ResultSetMetaData rsmd = rs.getMetaData();
>  		checkNotNull(rsmd, "ResultSetMetaData");
>  
> -		int rowLen = indent_DisplayBanner(out, rsmd, indentLevel);
> -   		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel );
> +		int rowLen = indent_DisplayBanner(out, rsmd, indentLevel, displayColumns, displayColumnWidths);
> +   		DisplayRow(out, rs, rsmd, rowLen, nestedResults, conn, indentLevel,
> +				   displayColumns, displayColumnWidths);
>  
>  		ShowWarnings(out, rs);
>  
> @@ -1012,26 +1069,24 @@
>  	static public int DisplayBanner(PrintStream out, ResultSetMetaData rsmd )
>  		throws SQLException
>  	{
> -		return indent_DisplayBanner( out, rsmd, 0 );
> +		return indent_DisplayBanner( out, rsmd, 0, null,
> +									 getColumnDisplayWidths(rsmd,null,false) );
>  	}
>  
> -	static private int indent_DisplayBanner(PrintStream out, ResultSetMetaData rsmd, int indentLevel )
> +	static private int indent_DisplayBanner(PrintStream out, ResultSetMetaData rsmd, int indentLevel,
> +											int[] displayColumns, int[] displayColumnWidths )
>  		throws SQLException	{
>  
>  		StringBuffer buf = new StringBuffer();
>  
> -		int numCols = rsmd.getColumnCount();
> +		int numCols = displayColumnWidths.length;
>  		int rowLen;
>  
>  		// do some precalculation so the buffer is allocated only once
>  		// buffer is twice as long as the display length plus one for a newline
>  		rowLen = (numCols - 1); // for the column separators
>  		for (int i=1; i <= numCols; i++) {
> -			rowLen += Math.min(maxWidth,
> -				Math.max((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH,
> -						rsmd.getColumnDisplaySize(i)));
> +			rowLen += displayColumnWidths[i-1];
>  		}
>  		buf.ensureCapacity(rowLen);
>  
> @@ -1039,17 +1094,14 @@
>  		// truncate it to the column display width
>  		// add a bar between each item.
>  		for (int i=1; i <= numCols; i++) {
> +			int colnum = displayColumns==null ? i : displayColumns[i-1];
>  
>  			if (i>1)
>  				buf.append('|');
>  
> -			String s = rsmd.getColumnLabel(i);
> +			String s = rsmd.getColumnLabel(colnum);
>  
> -			int w = Math.min(maxWidth,
> -				Math.max(((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH),
> -						rsmd.getColumnDisplaySize(i)));
> +			int w = displayColumnWidths[i-1];
>  
>  			if (s.length() < w) {
>  				// build a string buffer to hold the whitespace
> @@ -1095,31 +1147,33 @@
>  		return rowLen;
>  	} // DisplayBanner
>  
> -	static private void DisplayRow(PrintStream out, ResultSet rs, ResultSetMetaData rsmd, int rowLen, Vector nestedResults, Connection conn, int indentLevel )
> +	static private void DisplayRow(PrintStream out, ResultSet rs, ResultSetMetaData rsmd, int rowLen, Vector nestedResults, Connection conn, int indentLevel,
> +								   int[] displayColumns, int[] displayColumnWidths)
>  		throws SQLException
>  	{
>  		StringBuffer buf = new StringBuffer();
>  		buf.ensureCapacity(rowLen);
>  
> -		int numCols = rsmd.getColumnCount();
> +		int numCols = displayColumnWidths.length;
>  		int i;
>  
>  		// get column header info
>  		// truncate it to the column display width
>  		// add a bar between each item.
>  		for (i=1; i <= numCols; i++){
> +			int colnum = displayColumns==null ? i : displayColumns[i-1];
>  			if (i>1)
>  				buf.append('|');
>  
>  			String s;
> -			switch (rsmd.getColumnType(i)) {
> +			switch (rsmd.getColumnType(colnum)) {
>  			default:
> -				s = rs.getString(i);
> +				s = rs.getString(colnum);
>  				break;
>  			case org.apache.derby.iapi.reference.JDBC20Translation.SQL_TYPES_JAVA_OBJECT:
>  			case Types.OTHER:
>  			{
> -				Object o = rs.getObject(i);
> +				Object o = rs.getObject(colnum);
>  				if (o == null) { s = "NULL"; }
>  				else if (o instanceof ResultSet && nestedResults != null)
>  				{
> @@ -1129,7 +1183,7 @@
>  				else
>  				{
>  					try {
> -						s = rs.getString(i);
> +						s = rs.getString(colnum);
>  					} catch (SQLException se) {
>  						// oops, they don't support refetching the column
>  						s = o.toString();
> @@ -1141,11 +1195,7 @@
>  
>  			if (s==null) s = "NULL";
>  
> -			int w = Math.min(maxWidth,
> -				Math.max((rsmd.isNullable(i) == 
> -							ResultSetMetaData.columnNoNulls)?
> -							0 : MINWIDTH,
> -						rsmd.getColumnDisplaySize(i)));
> +			int w = displayColumnWidths[i-1];
>  			if (s.length() < w) {
>  				StringBuffer fullS = new StringBuffer(s);
>  				fullS.ensureCapacity(w);
> 
> 

Mime
View raw message