db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fuzzylo...@apache.org
Subject 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 22:53:55 GMT
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