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

Rick Hillegas commented on DERBY-712:
-------------------------------------

Hi Suran,

Thanks for the first rev of the patch. Lots of good stuff. Here are some 
comments. Despite all of the great work here, I think that another patch will 
be needed and that in turn will probably need some adjusting. Don't be 
discouraged, this is an iterative process and your foundation here is solid.

o In a couple of the files, you have removed the imports of individual classes 
and replaced them with a bulk import of all the classes in a package. Perhaps 
your IDE did this for you. The convention in Derby is to declare each import 
individually. I have weak religion on this style topic, but there are some 
reasons for this convention, which you can find at 
http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad/147532
 and http://192.220.96.201/essays/java-style/structure.html I recommend 
sticking with the Derby style at least for your initial submissions.

o There are funny line endings for the new files in the patch. I think this may 
be because you haven't set the new files to have native eol-style. Before 
generating the patch, you need to issue the following command on each of the 
new files:

  svn propset svn:eol-style native $NEW_FILE

o I think that PermDescriptor should extend PermissionsDescriptor. This will 
make the code easier to understand and it will probably make some existing 
logic just work for the USAGE privilege when you code support for USAGE. 
Consult RoutinePermsDescriptor for the pattern to follow.

o Similarly, I suspect that SYSPERMSRowFactory should extend 
PermissionsCatalogRowFactory and follow the pattern of 
SYSROUTINEPERMSRowFactory.

o For some reason one of your new classes, SYSSEQUENCESRowFactory, appears in 
the patch as a diff from SYSROLESRowFactory rather than as a new class. This 
makes it impossible to apply the patch and it makes the patch hard to read.

o Following the existing pattern in DataDictionaryImpl, dropSequence() should 
be dropSequenceDescriptor() and the argument should be a SequenceDescriptor. I 
don't think that this drop code is going to do the right thing. It looks to me 
as though it is trying to use the sequence name (a String datum) as a sequence 
id (a UUID datum) in order to drop the sequence by using the unique index on 
sequence id. Take a look at DataDictionaryImpl.dropTrigger() for the pattern to 
follow.

o Similarly, getSequenceDescriptor(String sequenceName) should be 
getSequenceDescriptor(String sequenceName, SchemaDescriptor sd). This is 
because the sequence name is not globally unique, it is only unique within a 
given schema. The code here is not going to work. It is trying to use the 
sequence name as a UUID in order to look up the sequence descriptor using the 
index on sequence id. Instead, it needs to use the second index on 
SYSSEQUENCES, the one which has a name and a UUID key. Again, see 
getTriggerDescriptor(String name, SchemaDescriptor sd) for the pattern to 
follow.

o I don't understand how DataDictionaryImpl.dropPerm()  and getPermDescriptor() 
will be used. I suspect that if you make PermDescriptor follow the pattern of 
RoutinePermDescriptor, then you will not need these methods--you will need 
other methods!

o In SYSPERMSRowFactory, it looks as though you have allocated UUIDs for 3 
indexes but you have only defined one of them. I suspect you will need more 
than 1 index. In any event, the index you have defined is the first index, not 
the 3rd index as indicated in the list of UUIDs.

o Don't forget to write header comments for the new methods which you add to 
the DataDictionary interface

o I think that FileInfoDescriptor would be a good pattern to follow for 
SequenceDescriptor. In particular, I think you will want SequenceDescriptor to 
implement UniqueSQLObjectDescriptor. I don't understand why SequenceDescriptor 
needs a writeExternal() method. Will these descriptors be persisted in any way 
other than being flattened into tuples in SYSSEQUENCES? I understand the need 
for the getXXX() methods, but why are the setXXX() methods necessary? I would 
eliminate them unless these objects really need to be mutable.

o On second thought, I don't think you need a Formatable id for the the 
SequenceDescriptors in StoredFormatIds. I apologize for misleading you there. I 
think you just need a Formatable id for the SequenceDescriptorFinder.

o Have you tried running the regression tests with this patch? Usually when 
someone adds a new catalog, this breaks the tests which track the shape of the 
system schema. You probably need to submit some updated tests and/or test 
canons with this patch.

Thanks!
-Rick


> Support for sequences
> ---------------------
>
>                 Key: DERBY-712
>                 URL: https://issues.apache.org/jira/browse/DERBY-712
>             Project: Derby
>          Issue Type: New Feature
>          Components: SQL
>         Environment: feature request 
>            Reporter: Tony Dahbura
>            Assignee: Suran Jayathilaka
>             Fix For: 10.6.0.0
>
>         Attachments: catalogs_a.patch, SequenceGenerator.html
>
>
> Would like to see support added for sequences.  This would permit a select 
> against the sequence to always obtain a ever increasing/decreasing value.  
> The identity column works fine but there are times for applications where the 
> application needs to obtain the sequence number and use it prior to the 
> database write.  Subsequent calls to the table/column would result in a new 
> number on each call.
> SQL such as the following:
> SELECT NEXT VALUE FOR sequence_name FROM sometable ; would result in a next 
> value.

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

Reply via email to