db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: jdo.dtd changes (was: Re: Spec review items Chapter 18)
Date Mon, 20 Feb 2006 03:10:36 GMT
Hi Michael,

On Feb 19, 2006, at 12:31 PM, Michael Bouschen wrote:

> Hi Craig,
>
> I implemented the jdo.dtd changes, you find a patch file attached.
>
> However, I have three questions:
> (1) I changed the foreign-key elements as I described below:
>  <!ELEMENT foreign-key (extension*, column*, field*, property*,  
> extension*)>

I think this should allow any number of extensions before or after,  
and your choice of one of column*, field*, or property*. I don't  
think it makes sense for a foreign key, index, or unique to combine  
more than one.

I thought that (column* | field* | property*) said that.

So, my proposal:

<!ELEMENT foreign-key (extension*, (column*| field*| property*),  
extension*)>


> I did the same change for the elements index, unique and fetch-group.
> This change might not what you had in mind. Please let me know.
> (2) I changed the value order for the foreign-key attributes delete- 
> action and update-action to match the definition of delete-action  
> and update-action in other elements. The only difference is that  
> foreign-key does not allow the value 'none'...

I found some information on this:
InnoDB rejects any INSERT or UPDATE operation that attempts to create  
a foreign key value in a child table if there is no a matching  
candidate key value in the parent table. The action InnoDB takes for  
any UPDATE or DELETE operation that attempts to update or delete a  
candidate key value in the parent table that has some matching rows  
in the child table is dependent on the referential action specified  
using ON UPDATE and ON DELETE subclauses of the FOREIGN KEY clause.  
When the user attempts to delete or update a row from a parent table,  
and there are one or more matching rows in the child table, InnoDB  
supports five options regarding the action to be taken:

CASCADE: Delete or update the row from the parent table and  
automatically delete or update the matching rows in the child table.  
Both ON DELETE CASCADE and ON UPDATE CASCADE are supported. Between  
two tables, you should not define several ON UPDATE CASCADE clauses  
that act on the same column in the parent table or in the child table.
SET NULL: Delete or update the row from the parent table and set the  
foreign key column or columns in the child table to NULL. This is  
valid only if the foreign key columns do not have the NOT NULL  
qualifier specified. Both ON DELETE SET NULL and ON UPDATE SET NULL  
clauses are supported.
NO ACTION: In standard SQL, NO ACTION means no action in the sense  
that an attempt to delete or update a primary key value is not  
allowed to proceed if there is a related foreign key value in the  
referenced table. InnoDB rejects the delete or update operation for  
the parent table.
RESTRICT: Rejects the delete or update operation for the parent  
table. NO ACTION and RESTRICT are the same as omitting the ON DELETE  
or ON UPDATE clause. (Some database systems have deferred checks, and  
NO ACTION is a deferred check. In MySQL, foreign key constraints are  
checked immediately, so NO ACTION and RESTRICT are the same.)
SET DEFAULT: This action is recognized by the parser, but InnoDB  
rejects table definitions containing ON DELETE SET DEFAULT or ON  
UPDATE SET DEFAULT clauses.

So I think that the delete-action should allow all of the cascade,  
null, none, restrict, and default. None might be "deferred checking"  
but otherwise is the same as restrict.

> (3) I think the attribute update-action should restrict the  
> permitted values to the same values as key/value update-action, so  
> 'none' should be allowed. What do you think?

I think both delete-action and update-action should allow all of the  
actions.

>
> As soon as we agreed on the changes I can update the jdo.xsd  
> accordingly and change the test cases Positive99-dtd.jdo and  
> Positive99-xsd.jdo.

Ok.

Craig

>
> Regards Michael
>
>> Hi Craig,
>>
>> sorry for not replying earier.
>>
>>> Javadogs,
>>>
>>> I've made these changes to the final spec.
>>>
>>> Craig
>>>
>>> On Feb 15, 2006, at 11:37 AM, Craig L Russell wrote:
>>>
>>>> 1. <!ATTLIST column allows-null CDATA #IMPLIED>
>>>> should be
>>>> <!ATTLIST column allows-null (true|false) #IMPLIED>
>>>>
>>>> 2. <!ELEMENT foreign-key (extension*, (column|field|property)*,  
>>>> extension*)>
>>>> should be
>>>> <!ELEMENT foreign-key (extension*, (column*|field*|property*),  
>>>> extension*)>
>>>
>>>
>> I read (column*|field*|property*) as: either a list of columns or  
>> a list of fields or a list of properties. So you cannot have  
>> fields and properties mixed.  Did you intend to have a list of  
>> columns, followed by a list of fields, followed by a list of  
>> properties:
>>  <!ELEMENT foreign-key (extension*, column*, field*, property*,  
>> extension*)>
>>
>> The fetch-group element looks similar. Did you paln you change  
>> this too:
>>  <!ELEMENT fetch-group (extension*, (fetch-group|field|property)*,  
>> extension*)>
>>
>> Regards Michael
>>
>>>>
>>>> 3. same as 2 for index
>>>
>>>
>>>
>>> Same as 2 for unique as well.
>>>
>>>>
>>>> 4. <!ATTLIST element update-action CDATA #IMPLIED>
>>>> element update-action should restrict the permitted values to  
>>>> the same values as foreign-key update-action
>>>>
>>>> 5. Missing element key attribute update-action
>>>>
>>>> 6. Missing element value attribute update-action
>>>>
>>>> 7. Element order should not have the delete-action, update- 
>>>> action, indexed, and unique attributes
>>>> Anything else?
>>>>
>>>> Craig
>>>>
>>>> Craig Russell
>>>> Architect, Sun Java Enterprise System http://java.sun.com/ 
>>>> products/jdo
>>>> 408 276-5638 mailto:Craig.Russell@sun.com
>>>> P.S. A good JDO? O, Gasp!
>>>>
>>>
>>> Craig Russell
>>>
>>> Architect, Sun Java Enterprise System http://java.sun.com/ 
>>> products/jdo
>>>
>>> 408 276-5638 mailto:Craig.Russell@sun.com
>>>
>>> P.S. A good JDO? O, Gasp!
>>>
>>>
>>
>>
>
>
> -- 
> Michael Bouschen		Tech@Spree Engineering GmbH
> mailto:mbo.tech@spree.de	http://www.tech.spree.de/
> Tel.:++49/30/235 520-33		Buelowstr. 66			
> Fax.:++49/30/2175 2012		D-10783 Berlin			
>
> Index: src/dtd/javax/jdo/jdo.dtd
> ===================================================================
> --- src/dtd/javax/jdo/jdo.dtd	(Revision 378929)
> +++ src/dtd/javax/jdo/jdo.dtd	(Arbeitskopie)
> @@ -99,7 +99,7 @@
>  <!ATTLIST column sql-type CDATA #IMPLIED>
>  <!ATTLIST column length CDATA #IMPLIED>
>  <!ATTLIST column scale CDATA #IMPLIED>
> -<!ATTLIST column allows-null CDATA #IMPLIED>
> +<!ATTLIST column allows-null (true|false) #IMPLIED>
>  <!ATTLIST column default-value CDATA #IMPLIED>
>  <!ATTLIST column insert-value CDATA #IMPLIED>
>
> @@ -123,11 +123,11 @@
>  <!ATTLIST field recursion-depth CDATA #IMPLIED>
>  <!ATTLIST field mapped-by CDATA #IMPLIED>
>
> -<!ELEMENT foreign-key (extension*, (column|field|property)*,  
> extension*)>
> +<!ELEMENT foreign-key (extension*, column*, field*, property*,  
> extension*)>
>  <!ATTLIST foreign-key table CDATA #IMPLIED>
>  <!ATTLIST foreign-key deferred (true|false) #IMPLIED>
> -<!ATTLIST foreign-key delete-action (cascade|restrict|null| 
> default) 'restrict'>
> -<!ATTLIST foreign-key update-action (cascade|restrict|null| 
> default) 'restrict'>
> +<!ATTLIST foreign-key delete-action (restrict|cascade|null| 
> default) 'restrict'>
> +<!ATTLIST foreign-key update-action (restrict|cascade|null| 
> default) 'restrict'>
>  <!ATTLIST foreign-key unique (true|false) #IMPLIED>
>  <!ATTLIST foreign-key name CDATA #IMPLIED>
>
> @@ -151,6 +151,7 @@
>  <!ATTLIST key column CDATA #IMPLIED>
>  <!ATTLIST key table CDATA #IMPLIED>
>  <!ATTLIST key delete-action (restrict|cascade|null|default|none)  
> #IMPLIED>
> +<!ATTLIST key update-action (restrict|cascade|null|default|none)  
> #IMPLIED>
>  <!ATTLIST key indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST key unique (true|false) #IMPLIED>
>  <!ATTLIST key mapped-by CDATA #IMPLIED>
> @@ -159,6 +160,7 @@
>  <!ATTLIST value table CDATA #IMPLIED>
>  <!ATTLIST value column CDATA #IMPLIED>
>  <!ATTLIST value delete-action (restrict|cascade|null|default|none)  
> #IMPLIED>
> +<!ATTLIST value update-action (restrict|cascade|null|default|none)  
> #IMPLIED>
>  <!ATTLIST value indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST value unique (true|false) #IMPLIED>
>  <!ATTLIST value mapped-by CDATA #IMPLIED>
> @@ -173,16 +175,15 @@
>  <!ATTLIST element column CDATA #IMPLIED>
>  <!ATTLIST element table CDATA #IMPLIED>
>  <!ATTLIST element delete-action (restrict|cascade|null|default| 
> none) #IMPLIED>
> -<!ATTLIST element update-action CDATA #IMPLIED>
> +<!ATTLIST element update-action (restrict|cascade|null|default| 
> none) #IMPLIED>
>  <!ATTLIST element indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST element unique (true|false) #IMPLIED>
>
>  <!ELEMENT order (extension*, column*, index?, extension*)>
>  <!ATTLIST order column CDATA #IMPLIED>
> -<!ATTLIST order indexed (true|false|unique) #IMPLIED>
>  <!ATTLIST order mapped-by CDATA #IMPLIED>
>
> -<!ELEMENT fetch-group (extension*, (fetch-group|field|property)*,  
> extension*)>
> +<!ELEMENT fetch-group (extension*, fetch-group*, field*,  
> property*, extension*)>
>  <!ATTLIST fetch-group name CDATA #REQUIRED>
>  <!ATTLIST fetch-group post-load (true|false) #IMPLIED>
>
> @@ -197,7 +198,7 @@
>  <!ATTLIST sequence factory-class CDATA #IMPLIED>
>  <!ATTLIST sequence strategy (nontransactional|contiguous| 
> noncontiguous) #REQUIRED>
>
> -<!ELEMENT index (extension*, (column|field|property)*, extension*)>
> +<!ELEMENT index (extension*, column*, field*, property*, extension*)>
>  <!ATTLIST index name CDATA #IMPLIED>
>  <!ATTLIST index table CDATA #IMPLIED>
>  <!ATTLIST index unique (true|false) 'false'>
> @@ -209,7 +210,7 @@
>  <!ATTLIST query unique (true|false) 'false'>
>  <!ATTLIST query result-class CDATA #IMPLIED>
>
> -<!ELEMENT unique (extension*, (column|field|property)*, extension*)>
> +<!ELEMENT unique (extension*, column*, field*, property*,  
> extension*)>
>  <!ATTLIST unique name CDATA #IMPLIED>
>  <!ATTLIST unique table CDATA #IMPLIED>
>  <!ATTLIST unique deferred (true|false) 'false'>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message