db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Hillegas (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-651) Re-enable the storing of java objects in the database
Date Sun, 06 Dec 2009 21:59:18 GMT

     [ https://issues.apache.org/jira/browse/DERBY-651?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Rick Hillegas updated DERBY-651:

    Attachment: derby-651-05-ac-dependencyTable.diff

Attaching derby-651-05-ac-dependencyTable.diff. This adds persistent dependency tracking between
tables and the UDT types of their columns. This patch prevents you from dropping a UDT if
there are tables whose columns rely on that type.

Ideally, we would like to track these dependencies at column granularity. However, columns
don't have UUIDs. UUIDs identify the tuple descriptors which are endpoints of arcs in the
dependency graph. The following design choice had to be made:

1) Create UUIDs for every column.

2) Track the dependency at a higher level, drawing the arcs between tables and UDTs rather
than between columns and UDTs.

Option (1) looked like a lot of work with a high probability of destabilizing the codeline.
I opted for (2) instead. This ended up pushing some complexity into one localized method:
DDLConstantAction.adjustUDTDependencies(). That method is responsible for making sure that
there is only one dependency arc between a table and a UDT, regardless of how many columns
in the table may share that UDT type.

Touches the following files:

M      java/engine/org/apache/derby/iapi/sql/dictionary/DataDictionary.java
M      java/storeless/org/apache/derby/impl/storeless/EmptyDictionary.java
M      java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
M      java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java

Adds a dictionary method for looking up the AliasDescriptor associated with a UDT. This AliasDescriptor
is the persistent object that is one of the endpoints of a dependency arc.

M      java/engine/org/apache/derby/iapi/sql/depend/DependencyManager.java
M      java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java
M      java/engine/org/apache/derby/iapi/sql/dictionary/AliasDescriptor.java

Boilerplate to support DROP TYPE.

M      java/engine/org/apache/derby/loc/messages.xml
M      java/shared/org/apache/derby/shared/common/reference/SQLState.java

New error message raised when a dependent table prevents a UDT from being dropped.

M      java/engine/org/apache/derby/impl/sql/compile/TableElementNode.java

Made DROP COLUMN nodes report that they are DROP COLUMN nodes rather than MODIFY COLUMN nodes.
Some of the DROP COLUMN logic was being skipped.

M      java/engine/org/apache/derby/iapi/sql/dictionary/TableDescriptor.java

Made it possible for a table to be the starting point of a dependency arc. Previously, a 
table could only be the ending point of a dependency arc.

M      java/engine/org/apache/derby/impl/sql/compile/TableElementList.java
M      java/engine/org/apache/derby/impl/sql/execute/CreateTableConstantAction.java
M      java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java
M      java/engine/org/apache/derby/impl/sql/execute/AlterTableConstantAction.java

This is the heart of the logic which adds and drops the dependency arc from a table to a UDT.

M      java/engine/org/apache/derby/impl/sql/compile/AlterTableNode.java
M      java/engine/org/apache/derby/impl/sql/compile/ColumnDefinitionNode.java
M      java/engine/org/apache/derby/impl/sql/compile/CreateTableNode.java

More debug machinery for printing out the contents of DDL nodes in the AST. Debug support
for DDL nodes seems weak.

M      java/testing/org/apache/derbyTesting/functionTests/tests/lang/UDTTest.java

Basic tests to verify that if a table has a UDT column then that UDT cannot be dropped.

> Re-enable the storing of java objects in the database
> -----------------------------------------------------
>                 Key: DERBY-651
>                 URL: https://issues.apache.org/jira/browse/DERBY-651
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Rick Hillegas
>            Assignee: Rick Hillegas
>         Attachments: derby-651-01-aa-basicCreateDropType.diff, derby-651-02-af-udtColumnsRetvalsParams.diff,
derby-651-03-aa-udttestInstability.diff, derby-651-04-aa-javadoc.diff, derby-651-05-ac-dependencyTable.diff,
UserDefinedTypes.html, UserDefinedTypes.html, UserDefinedTypes.html, UserDefinedTypes.html
> Islay Symonette, in an email thread called "Storing Java Objects in a table" on October
26, 2005 requests the ability to store java objects in the database.
> Old releases of Cloudscape allow users to declare a column's type to be a Serializable
class. This feature was removed from Derby because the syntax was non-standard. However, most
of the machinery to support objects serialized to columns is still in Derby and is even used
in system tables. We need to agree on some standard syntax here and re-expose this useful
feature. Some subset of the ANSI adt syntax, cumbersome as it is, would do.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message