[ http://issues.apache.org/jira/browse/DERBY-337?page=all ]
A B updated DERBY-337:
----------------------
Attachment: derby-337.stat
derby-337.patch
Attaching patch for this issue. In order to get dblook to generate the DDL for
Derby functions, this patch does the following:
1 - Renames "impl/tools/dblook/DB_StoredProcedure.java" to
"impl/tools/dblook/DB_Alias.java" because that file now handles stored
procedures AND functions AND synonyms, all of which are based on the SYSALIASES
system catalog.
2 - Adds logic to new DB_Alias.java file to generate DDL for functions.
3 - Modifies the "toString()" method of the catalog/types/RoutineAliasInfo file
to generate a string that is SYNTACTICALLY VALID based on whether an instance
of that class is for a PROCEDURE or for a FUNCTION. The reason this change is
required is because the "ALIASINFO" column that is returned as part of the
SYS.SYSALIASES result set is an instance of RoutineAliasInfo, and thus a call
to ResultSet.getString() on the ALIASINFO column ultimately makes a call to
RoutineAliasInfo.toString(). That said, the dblook utility makes a
"getString()" call on the ALIASINFO column and uses the result to generate the
corresponding DDL. Before this patch, the result of the toString() method
always corresponded to the PROCEDURE syntax; but now, since dblook is
generating DDL for FUNCTIONs, the RoutineAliasInfo.toString() method must
recognize if an instance is a PROCEDURE or FUNCTION and return the appropriate
syntax.
4 - Adds test cases for FUNCTIONS to the dblook tests and updates the master
files accordingly.
I ran derbyall with these changes on Windows 2000 with Sun JDK 1.4.2, and all
tests passed (except for one failure (testij.java) that is unrelated to my
changes).
NOTE TO COMMITTERS: Because this patch renames an existing file, it's a bit
tricky to apply. I had to copy "DB_StoredProcedure.java" to "DB_Alias.java"
before applying the patch in order to get it to work. I think Andrew suggested
some time ago that a commiter use "svn move" to retain the history of the file
that has changed names--I tried that, but after I did so the patch wouldn't
apply. So I just copied the file to it's new name, then applied the patch.
But I leave it up to people more familiar with svn to do the right thing here...
> dblook doesn't generate SQL statements for SQL functions.
> ---------------------------------------------------------
>
> Key: DERBY-337
> URL: http://issues.apache.org/jira/browse/DERBY-337
> Project: Derby
> Type: Bug
> Components: Tools
> Versions: 10.0.2.0
> Environment: All platforms.
> Reporter: Satheesh Bandaram
> Assignee: A B
> Priority: Critical
> Fix For: 10.1.0.0
> Attachments: derby-337.patch, derby-337.stat
>
> DBLOOK schema dumping tool doesn't emit SQL statements for functions. It
> covers procedures and all other database objects, but not funtions. Here is
> an example I tried:
> [bandaram:satheesh] java org.apache.derby.tools.dblook -d 'jdbc:derby:tdb'
> -- Timestamp: 2005-06-05 09:41:20.603
> -- Source database is: tdb
> -- Connection URL is: jdbc:derby:tdb
> -- appendLogs: false
> -- ----------------------------------------------
> -- DDL Statements for tables
> -- ----------------------------------------------
> CREATE TABLE "APP"."T" ("I" INTEGER);
> At this point, the database has only one table 'T'. Now create a function:
> C:\DerbyCode\bug>java -Dij.protocol=jdbc:derby: org.apache.derby.tools.ij
> ij version 10.1
> ij> connect 'tdb';
> ij> create function gatp(SCH VARCHAR(128), TBL VARCHAR(128)) RETURNS
> VARCHAR(100
> 0)
> EXTERNAL NAME
> 'org.apache.derbyTesting.functionTests.util.TestPropertyInfo.getAllTableProperties'
> LANGUAGE JAVA PARAMETER STYLE JAVA;
> 0 rows inserted/updated/deleted
> ij> quit;
> Now try dblook. Should show a function, but doesn't.
> [bandaram:satheesh] java org.apache.derby.tools.dblook -d 'jdbc:derby:tdb'
> -- Timestamp: 2005-06-05 09:41:20.603
> -- Source database is: tdb
> -- Connection URL is: jdbc:derby:tdb
> -- appendLogs: false
> -- ----------------------------------------------
> -- DDL Statements for tables
> -- ----------------------------------------------
> CREATE TABLE "APP"."T" ("I" INTEGER);
> Now create a procedure:
> C:\DerbyCode\bug>java -Dij.protocol=jdbc:derby: org.apache.derby.tools.ij
> ij version 10.1
> ij> connect 'tdb';
> ij> create procedure insertAsciiColumn( stmtText varchar( 256), colNumber
> int) P
> ARAMETER STYLE JAVA LANGUAGE JAVA MODIFIES SQL DATA
> EXTERNAL NAME
> 'org.apache.derbyTesting.functionTests.util.StreamUtil.insertAsc
> iiColumn';
> 0 rows inserted/updated/deleted
> ij>
> DBLOOK output include newly created procedure, but still not function
> statement.
> [bandaram:satheesh] java org.apache.derby.tools.dblook -d 'jdbc:derby:tdb'
> -- Timestamp: 2005-06-05 09:43:09.5
> -- Source database is: tdb
> -- Connection URL is: jdbc:derby:tdb
> -- appendLogs: false
> -- ----------------------------------------------
> -- DDL Statements for stored procedures
> -- ----------------------------------------------
> CREATE PROCEDURE "APP"."INSERTASCIICOLUMN" (IN STMTTEXT VARCHAR(256),IN
> COLNUMBE
> R INTEGER) LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA EXTERNAL NAME
> 'o
> rg.apache.derbyTesting.functionTests.util.StreamUtil.insertAsciiColumn' ;
> -- ----------------------------------------------
> -- DDL Statements for tables
> -- ----------------------------------------------
> CREATE TABLE "APP"."T" ("I" INTEGER);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira