Return-Path: X-Original-To: apmail-db-derby-commits-archive@www.apache.org Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7952AD3CE for ; Fri, 26 Oct 2012 15:06:05 +0000 (UTC) Received: (qmail 17591 invoked by uid 500); 26 Oct 2012 15:06:05 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 17495 invoked by uid 500); 26 Oct 2012 15:06:03 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 17444 invoked by uid 99); 26 Oct 2012 15:06:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Oct 2012 15:06:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Oct 2012 15:05:55 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 235C223888E4; Fri, 26 Oct 2012 15:05:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1402539 - in /db/derby/docs/trunk/src: devguide/ ref/ tools/ Date: Fri, 26 Oct 2012 15:05:09 -0000 To: derby-commits@db.apache.org From: chaase3@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121026150510.235C223888E4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: chaase3 Date: Fri Oct 26 15:05:08 2012 New Revision: 1402539 URL: http://svn.apache.org/viewvc?rev=1402539&view=rev Log: DERBY-5926 Document user-defined aggregates (DERBY-672) Created 2 new Reference Manual topics and 1 new Developer's Guide topic; modified 7 Reference Manual topics and 1 Tools Guide topic. Patch: DERBY-5926-3.diff Added: db/derby/docs/trunk/src/devguide/cdevspecialuda.dita (with props) db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita (with props) db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita (with props) Modified: db/derby/docs/trunk/src/devguide/derbydev.ditamap db/derby/docs/trunk/src/ref/refderby.ditamap db/derby/docs/trunk/src/ref/rrefsistabs28114.dita db/derby/docs/trunk/src/ref/rrefsistabssysperms.dita db/derby/docs/trunk/src/ref/rrefsqlj27781.dita db/derby/docs/trunk/src/ref/rrefsqlj33520.dita db/derby/docs/trunk/src/ref/rrefsqlj33923.dita db/derby/docs/trunk/src/ref/rrefsqljgrant.dita db/derby/docs/trunk/src/ref/rrefsqljrevoke.dita db/derby/docs/trunk/src/tools/ctoolsgenddldb.dita Added: db/derby/docs/trunk/src/devguide/cdevspecialuda.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/devguide/cdevspecialuda.dita?rev=1402539&view=auto ============================================================================== --- db/derby/docs/trunk/src/devguide/cdevspecialuda.dita (added) +++ db/derby/docs/trunk/src/devguide/cdevspecialuda.dita Fri Oct 26 15:05:08 2012 @@ -0,0 +1,96 @@ + + + + + +Programming user-defined aggregates + allows +you to create custom aggregate operators, called user-defined aggregates (UDAs). + + +aggregatesuser-defined +user-defined aggregatesprogramming + + + +

A UDA is a Java class that implements the +org.apache.derby.agg.Aggregator interface.

+

For example, the following class provides an aggregate that computes the +median value from a list of objects. This is a generic class. Its parameter must +be a linear (Comparable) type.

+import java.util.ArrayList; +import java.util.Collections; +import org.apache.derby.agg.Aggregator; + +public class Median<V extends Comparable<V>> + implements Aggregator<V,V,Median<V>> +{ + private ArrayList<V> _values; + + public Median() {} + + public void init() { _values = new ArrayList<V>(); } + + public void accumulate( V value ) { _values.add( value ); } + + public void merge( Median<V> other ) + { + _values.addAll( other._values ); + } + + public V terminate() + { + Collections.sort( _values ); + + int count = _values.size(); + + if ( count == 0 ) { return null; } + else { return _values.get( count/2 ); } + } +} +

Using this generic class, we can declare UDAs for all of the sortable + data types. For +example:

+create derby aggregate intMedian for int external name 'Median'; +create derby aggregate varcharMedian for varchar( 32672 ) external name + 'Median'; + +

We can then use these UDAs just like built-in + aggregates:

+create table intValues( a int, b int ); +create table varcharValues( a int, b varchar( 32672 ) ); +insert into intValues values ( 1, 1 ), ( 1, 10 ), ( 1, 100 ), + ( 1, 1000 ), ( 2, 5 ), ( 2, 50 ), ( 2, 500 ), ( 2, 5000 ); +insert into varcharValues values ( 1, 'a' ), ( 1, 'ab' ), ( 1, 'abc' ), + ( 2, 'a' ), ( 2, 'aa' ), ( 2, 'aaa' ); + +select a, intMedian( b ) from intValues group by a; +A |2 +----------------------- +1 |100 +2 |500 + +select varcharMedian( b ) from varcharValues; +1 +--- +aaa + +
+
+
Propchange: db/derby/docs/trunk/src/devguide/cdevspecialuda.dita ------------------------------------------------------------------------------ svn:eol-style = native Modified: db/derby/docs/trunk/src/devguide/derbydev.ditamap URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/devguide/derbydev.ditamap?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/devguide/derbydev.ditamap (original) +++ db/derby/docs/trunk/src/devguide/derbydev.ditamap Fri Oct 26 15:05:08 2012 @@ -1728,6 +1728,8 @@ limitations under the License. + + Modified: db/derby/docs/trunk/src/ref/refderby.ditamap URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/refderby.ditamap?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/refderby.ditamap (original) +++ db/derby/docs/trunk/src/ref/refderby.ditamap Fri Oct 26 15:05:08 2012 @@ -611,6 +611,8 @@ limitations under the License. + + @@ -642,6 +644,8 @@ limitations under the License. + + Modified: db/derby/docs/trunk/src/ref/rrefsistabs28114.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsistabs28114.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsistabs28114.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsistabs28114.dita Fri Oct 26 15:05:08 2012 @@ -20,8 +20,8 @@ limitations under the License. --> SYSALIASES system table -The SYSALIASES table describes the procedures, functions, and -user-defined types in the database. +The SYSALIASES table describes the procedures, functions, +user-defined types, and user-defined aggregates in the database. system tablesSYSALIASES aliasesSYSALIASES system table @@ -61,8 +61,8 @@ user-defined types in the database.VARCHAR 128 false -Alias (in the case of a user-defined type, the name of the -user-defined type) +Alias (in the case of a user-defined type or user-defined +aggregate, the name of the user-defined type or user-defined aggregate) SCHEMAID @@ -84,7 +84,7 @@ user-defined type) 1 false 'F' (function), 'P' (procedure), -'A' (user-defined type) +'A' (user-defined type), 'G' (user-defined aggregate) NAMESPACE @@ -92,7 +92,7 @@ user-defined type) 1 false 'F' (function), 'P' (procedure), -'A' (user-defined type) +'A' (user-defined type), 'G' (user-defined aggregate) SYSTEMALIAS Modified: db/derby/docs/trunk/src/ref/rrefsistabssysperms.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsistabssysperms.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsistabssysperms.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsistabssysperms.dita Fri Oct 26 15:05:08 2012 @@ -23,7 +23,7 @@ under the License. SYSPERMS system table The SYSPERMS table describes the USAGE permissions for -sequence generators and user-defined types. +sequence generators, user-defined types, and user-defined aggregates. system tablesSYSPERMS sequence generatorsSYSPERMS system table @@ -65,8 +65,8 @@ key. VARCHAR 36 false -The kind of object receiving the permission. The only valid -values are 'SEQUENCE' and 'TYPE'. +The kind of object receiving the permission. Valid values are +'SEQUENCE', 'TYPE', and 'DERBY AGGREGATE'. OBJECTID @@ -75,9 +75,9 @@ values are 'SEQUENCE' and 'TYP false The UUID of the object receiving the permission. For sequence generators, the only valid values are SEQUENCEIDs in the -SYS.SYSSEQUENCES table. For user-defined types, the only valid values are -ALIASIDs in the SYS.SYSALIASES table if the SYSALIASES row describes a -user-defined type. +SYS.SYSSEQUENCES table. For user-defined types and user-defined aggregates, the +only valid values are ALIASIDs in the SYS.SYSALIASES table if the SYSALIASES row +describes a user-defined type or user-defined aggregate. PERMISSION @@ -108,9 +108,10 @@ privilege was granted CHAR 1 false -If the GRANTEE is the owner of the sequence generator or -user-defined type, this value is 'Y'. If the GRANTEE is not the owner of -the sequence generator or user-defined type, this value is 'N'. +If the GRANTEE is the owner of the sequence generator, +user-defined type, or user-defined aggregate, this value is 'Y'. If the +GRANTEE is not the owner of the sequence generator, user-defined type, or +user-defined aggregate, this value is 'N'. Modified: db/derby/docs/trunk/src/ref/rrefsqlj27781.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqlj27781.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqlj27781.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsqlj27781.dita Fri Oct 26 15:05:08 2012 @@ -26,8 +26,12 @@ limitations under the License.

MAX is an aggregate function that evaluates the maximum of an expression over a set of rows (see ). -MAX is allowed only on expressions that evaluate to built-in data types (including -CHAR, VARCHAR, DATE, TIME, CHAR FOR BIT DATA, etc.).

+MAX is allowed only on expressions that evaluate to indexable data types +(specifically, those marked with a Y in the second table, "Comparisons allowed +by ", in +). This means that MAX +cannot be used with expressions that evaluate to BLOB, CLOB, LONG VARCHAR, LONG +VARCHAR FOR BIT DATA, XML, or user-defined types.

Syntax MAX ( [ DISTINCT | ALL ] Expression )

The DISTINCT and ALL qualifiers eliminate or retain duplicates, but these qualifiers have no effect in a MAX expression. Only one DISTINCT aggregate Modified: db/derby/docs/trunk/src/ref/rrefsqlj33520.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqlj33520.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqlj33520.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsqlj33520.dita Fri Oct 26 15:05:08 2012 @@ -26,8 +26,12 @@ limitations under the License.

MIN is an aggregate function that evaluates the minimum of an expression over a set of rows (see ). -MIN is allowed only on expressions that evaluate to built-in data types (including -CHAR, VARCHAR, DATE, TIME, etc.).

+MIN is allowed only on expressions that evaluate to indexable data types +(specifically, those marked with a Y in the second table, "Comparisons allowed +by ", in +). This means that MIN +cannot be used with expressions that evaluate to BLOB, CLOB, LONG VARCHAR, LONG +VARCHAR FOR BIT DATA, XML, or user-defined types.

Syntax MIN ( [ DISTINCT | ALL ] Expression )

The DISTINCT and ALL qualifiers eliminate or retain duplicates, but these qualifiers have no effect in a MIN expression. Only one DISTINCT aggregate expression Modified: db/derby/docs/trunk/src/ref/rrefsqlj33923.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqlj33923.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqlj33923.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsqlj33923.dita Fri Oct 26 15:05:08 2012 @@ -34,8 +34,21 @@ other built-in functions operate on a si on a set of values and reduce them to a single scalar value. Built-in aggregates can calculate the minimum, maximum, sum, count, and average of an expression over a set of values as well as count rows.

-

The built-in aggregates can operate on the data types shown in -the following table.

+

In addition to the built-in aggregates, + allows you to create +custom aggregate operators, called user-defined aggregates (UDAs). For +information on creating and removing UDAs, see + and +. See + and + for information on usage +privileges for UDAs.

+

For information on writing the Java classes that implement UDAs, see +"Programming user-defined aggregates" in the +.

+
+

The built-in aggregates can operate on expressions that evaluate to +the data types shown in the following table.

Permitted data types for built-in aggregatesThis table lists the data types that are valid for each of the built-in aggregates. @@ -50,23 +63,23 @@ the following table.

-COUNT +COUNT All types -MIN -Numeric built-in data types +MIN +Data types that can be indexed -MAX -Numeric built-in data types +MAX +Data types that can be indexed -AVG +AVG Numeric built-in data types -SUM +SUM Numeric built-in data types @@ -103,14 +116,6 @@ HAVING c2 > WHERE t2.y = SUM(t1.c3))

A cursor declared on a ResultSet that includes an aggregate in the outer query block is not updatable.

-

supports -the following aggregates:

    -
  • -
  • -
  • -
  • -
  • -

Added: db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita?rev=1402539&view=auto ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita (added) +++ db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita Fri Oct 26 15:05:08 2012 @@ -0,0 +1,104 @@ + + + + + +CREATE DERBY AGGREGATE statement + +CREATE DERBY AGGREGATE statement +SQL statementsCREATE DERBY AGGREGATE +user-defined aggregatescreating +aggregatesuser-defined + + + +

The CREATE DERBY AGGREGATE statement creates a user-defined +aggregate (UDA). A UDA is a custom aggregate operator.

+Syntax +CREATE DERBY AGGREGATE [ schemaName. ] SQL92Identifier +FOR ValueDataType +[ RETURNS ReturnDataType ] +EXTERNAL NAME ClassNameString +

The aggregate name is composed of an optional schemaName and a +SQL92Identifier. If a schemaName is not provided, the current +schema is the default schema. If a qualified aggregate name is specified, the +schema name cannot begin with SYS.

+

In general, UDAs live in the same namespace as one-argument user-defined +functions (see +). +A schema-qualified UDA name may not be the schema-qualified name of a +one-argument user-defined function.

+

An unqualified UDA name may not be the name of an aggregate defined in +part 2 of the SQL Standard, section 10.9:

+ANY +AVG +COLLECT +COUNT +EVERY +FUSION +INTERSECTION +MAX +MIN +SOME +STDDEV_POP +STDDEV_SAMP +SUM +VAR_POP +VAR_SAMP +

In addition, an unqualified UDA name may not be the name of any of the + built-in functions +which take one argument.

+

The ValueDataType can be any valid nullable + data type except for +XML, including user-defined types.

+

The ReturnDataType can be any valid nullable + data type except for +XML. If the ReturnDataType is omitted, it defaults to be the same as +ValueDataType.

+

The ClassNameString is a single-quoted string. It is the full name of +a Java class which implements the org.apache.derby.agg.Aggregator +interface. That contract is not checked until a statement is compiled which +invokes the UDA.

+

The owner of the schema where the UDA lives automatically gains the USAGE +privilege on the UDA and can grant this privilege to other users and roles. Only +the database owner and +the owner of the UDA can grant these USAGE privileges. The USAGE privilege +cannot be revoked from the schema owner. See + and + for more +information.

+
+Examples +CREATE DERBY AGGREGATE mode FOR INT +EXTERNAL NAME 'com.example.myapp.aggs.Mode'; + +CREATE DERBY AGGREGATE types.maxPrice FOR PRICE +EXTERNAL NAME 'com.example.myapp.types.PriceMaxer'; + +CREATE DERBY AGGREGATE types.avgLength FOR VECTOR +RETURNS DOUBLE +EXTERNAL NAME 'com.example.myapp.types.VectorLength'; +

See "Programming user-defined aggregates" in the + for more details about +creating and using user-defined aggregates.

+
+
+
Propchange: db/derby/docs/trunk/src/ref/rrefsqljcreateaggregate.dita ------------------------------------------------------------------------------ svn:eol-style = native Added: db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita?rev=1402539&view=auto ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita (added) +++ db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita Fri Oct 26 15:05:08 2012 @@ -0,0 +1,57 @@ + + + + + +DROP DERBY AGGREGATE statement + +DROP DERBY AGGREGATE statement +SQL statementsDROP DERBY AGGREGATE +user-defined aggregatesdropping +aggregatesuser-defined + + + +

The DROP DERBY AGGREGATE statement removes a user-defined aggregate +(UDA) that was created using a +.

+
+Syntax +DROP DERBY AGGREGATE [ schemaName. ] SQL92Identifier RESTRICT +

The aggregate name is composed of an optional schemaName and a +SQL92Identifier. If a schemaName is not provided, the current +schema is the default schema. If a qualified aggregate name is specified, the +schema name cannot begin with SYS.

+

The RESTRICT keyword is required. CASCADE semantics are not supported. That +is, will not track down +and drop orphaned objects.

+

Dropping a UDA implicitly drops all USAGE privileges that reference it. See + and + for more +information.

+

raises an error if a +trigger or view references the UDA.

+
+Example +DROP DERBY AGGREGATE mode RESTRICT; + +
+
Propchange: db/derby/docs/trunk/src/ref/rrefsqljdropaggregate.dita ------------------------------------------------------------------------------ svn:eol-style = native Modified: db/derby/docs/trunk/src/ref/rrefsqljgrant.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqljgrant.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqljgrant.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsqljgrant.dita Fri Oct 26 15:05:08 2012 @@ -40,7 +40,8 @@ from a table.
  • Create a trigger on a table.
  • Update data in a table or in a subset of columns in a table.
  • Run a specified function or procedure.
  • -
  • Use a sequence generator or a user-defined type.
  • +
  • Use a sequence generator, a user-defined type, or a user-defined +aggregate.
  • Before you issue a GRANT statement, check that the derby.database.sqlAuthorization property is set to true. The derby.database.sqlAuthorization property @@ -85,6 +86,18 @@ information.

    SQL92Identifier. If a schemaName is not provided, the current schema is the default schema. If a qualified type name is specified, the schema name cannot begin with SYS.

    +
    Syntax for user-defined aggregates +GRANT USAGE ON DERBY AGGREGATE [ schemaName. ] SQL92Identifier TO grantees +

    In order to use a user-defined aggregate, you must have the USAGE privilege +on it. This privilege can be granted to users and to roles. See + for +more information.

    +

    The aggregate name is composed of an optional schemaName and a +SQL92Identifier. If a schemaName is not provided, the current +schema is the default schema. If a qualified aggregate name is specified, the +schema name cannot begin with SYS.

    Syntax for roles GRANT roleName [ {, roleName }* ] TO price to the role finance_role, use the following syntax:

    GRANT USAGE ON TYPE price TO finance_role; +

    To grant the USAGE privilege on the user-defined aggregate +types.maxPrice to the role sales_role, use the +following syntax:

    +GRANT USAGE ON DERBY AGGREGATE types.maxPrice TO sales_role; - Modified: db/derby/docs/trunk/src/ref/rrefsqljrevoke.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/ref/rrefsqljrevoke.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/ref/rrefsqljrevoke.dita (original) +++ db/derby/docs/trunk/src/ref/rrefsqljrevoke.dita Fri Oct 26 15:05:08 2012 @@ -39,7 +39,8 @@ from a table.
  • Create a trigger on a table.
  • Update data in a table or in a subset of columns in a table.
  • Run a specified routine (function or procedure).
  • -
  • Use a sequence generator or a user-defined type.
  • +
  • Use a sequence generator, a user-defined type, or a user-defined +aggregate.
  • The derby.database.sqlAuthorization property must be set to true before you can use the GRANT @@ -95,6 +96,21 @@ information.

    SQL92Identifier. If a schemaName is not provided, the current schema is the default schema. If a qualified type name is specified, the schema name cannot begin with SYS.

    +
    Syntax for user-defined aggregates +REVOKE USAGE ON DERBY AGGREGATE [ schemaName. ] SQL92Identifier FROM grantees RESTRICT +

    In order to use a user-defined aggregate, you must have the USAGE privilege +on it. This privilege can be revoked from users and roles. Only RESTRICTed +revokes are allowed. This means that the REVOKE statement cannot make a view or +trigger unusable by its owner. The USAGE privilege cannot be revoked from the +schema owner. See + for +more information.

    +

    The aggregate name is composed of an optional schemaName and a +SQL92Identifier. If a schemaName is not provided, the current +schema is the default schema. If a qualified aggregate name is specified, the +schema name cannot begin with SYS.

    Syntax for roles REVOKE roleName [ {, roleName }* ] FROM price from the role finance_role, use the following syntax:

    REVOKE USAGE ON TYPE price FROM finance_role; +

    To revoke the USAGE privilege on the user-defined aggregate +types.maxPrice from the role sales_role, use +the following syntax:

    +REVOKE USAGE ON DERBY AGGREGATE types.maxPrice FROM sales_role; Modified: db/derby/docs/trunk/src/tools/ctoolsgenddldb.dita URL: http://svn.apache.org/viewvc/db/derby/docs/trunk/src/tools/ctoolsgenddldb.dita?rev=1402539&r1=1402538&r2=1402539&view=diff ============================================================================== --- db/derby/docs/trunk/src/tools/ctoolsgenddldb.dita (original) +++ db/derby/docs/trunk/src/tools/ctoolsgenddldb.dita Fri Oct 26 15:05:08 2012 @@ -34,6 +34,9 @@ generating the DDL for a database:
  • Triggers
  • Tables
  • Views
  • +
  • Roles
  • +
  • User-defined types
  • +
  • User-defined aggregates
  • When dblook runs against a database that has jar files installed, it will create a new directory, called DERBYJARS, within