You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Rick Hillegas (JIRA)" <ji...@apache.org> on 2009/12/07 14:20:18 UTC

[jira] Issue Comment Edited: (DERBY-651) Re-enable the storing of java objects in the database

    [ https://issues.apache.org/jira/browse/DERBY-651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12786715#action_12786715 ] 

Rick Hillegas edited comment on DERBY-651 at 12/7/09 1:19 PM:
--------------------------------------------------------------

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. Regression tests passed cleanly for me.

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.


      was (Author: rhillegas):
    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.