Hello.

1st:
The Derby "dblook" utility will have to be modified to account for the "BY DEFAULT" keyword--right now, it generates all autoincrement columns using the "ALWAYS" keyword. See org/apache/derby/impl/tools/dblook/DB_Table.java, in the "reinsateAutoIncrement" method. Luckily, this change should be fairly easy given the changes in your patch.

I see. I will modify dblook. Thank you for your notifying :D


2nd:
Second (minor):

I noticed that in DefaultInfoImpl.java, the two new methods (getDefinitionBitsValue and calcIsDefaultValueAutoinc) are declared as static--is there a reason for that? I made them non-static and everything compiled, so I'm just wondering if this was intentional?

Yes. That was intentional.

I prefer static method because it have narrower scope than instance method.

Static method can not access instance variable.
On the contrast , calling instance method would change instance variable , and state of the object so on.
Then , I prefer static method than instance methood.


I know method , which are to be overridden , must be instance method.
But I think those methods which I added was not such methods.


Best regards.



/*

        Tomohito Nakayama
        [EMAIL PROTECTED]
        [EMAIL PROTECTED]

        Naka
        http://www5.ocn.ne.jp/~tomohito/TopPage.html

*/
----- Original Message ----- From: "Army" <[EMAIL PROTECTED]>
To: "Derby Development" <[email protected]>
Sent: Tuesday, May 17, 2005 9:50 AM
Subject: Re: Patch again again for DERBY-167.



TomohitoNakayama wrote:
Hello.

I send new patch for DERBY-167 , which is attached to this mail.
Please review it.

Thanks for the sending the new patch.

I've reviewed it and I have the following comments. The first one is an important one, the second one is very minor.

First:

The Derby "dblook" utility will have to be modified to account for the "BY DEFAULT" keyword--right now, it generates all autoincrement columns using the "ALWAYS" keyword. See org/apache/derby/impl/tools/dblook/DB_Table.java, in the "reinsateAutoIncrement" method. Luckily, this change should be fairly easy given the changes in your patch.

Since your patch sets the "DefaultInfo" for a BY DEFAULT column to a non-null value, I think dblook can just check the "COLUMNDEFAULT" column in the SYS.SYSCOLUMNS table. If it is _not_ null, then dblook can generate "BY DEFAULT" instead of "ALWAYS".

For example, you could change the "getAutoIncStmt" statement at the top of DB_Table.java to retrieve the COLUMNDEFAULT column:

getAutoIncStmt =
conn.prepareStatement("SELECT AUTOINCREMENTSTART, " +
"AUTOINCREMENTINC, COLUMNDEFAULT FROM SYS.SYSCOLUMNS " +
"WHERE COLUMNNAME = ? AND REFERENCEID = ?");

and then change the "reinstateAutoIncrement(...)" method to do the following:

.
.
.
if (autoIncCols.next()) {
long start = autoIncCols.getLong(1);
if (!autoIncCols.wasNull()) {
colDef.append(" GENERATED ");
// -- begin new logic --
String def = autoIncCols.getString(3);
colDef.append(autoIncCols.wasNull() ? "ALWAYS" : "BY DEFAULT");
// -- end new logic --
colDef.append(" AS IDENTITY (START WITH ");
colDef.append(autoIncCols.getLong(1));
colDef.append(", INCREMENT BY ");
colDef.append(autoIncCols.getLong(2));
colDef.append(")");
}
}

This will make it so that dblook generates "BY DEFAULT" correctly for columns that require it.

And then it'd probably be good to add a case for this in java/testing/org/apache/derbyTesting/tests/tools/dblook_makeDB.sql, which is the script that is used for testing dblook. In that script, there's a section under the "Tables" heading that indicates "auto increment/default" test cases. You could add a simple table for the "GENERATED BY DEFAULT" case. If you have any problems getting that to work, feel free to post your questions and I'll try to help where I can.

Second (minor):

I noticed that in DefaultInfoImpl.java, the two new methods (getDefinitionBitsValue and calcIsDefaultValueAutoinc) are declared as static--is there a reason for that? I made them non-static and everything compiled, so I'm just wondering if this was intentional?

Thanks again for re-sending the patch, and please feel free to ask if you have any questions about I've written here.

Army




-- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.308 / Virus Database: 266.11.11 - Release Date: 2005/05/16





-- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.308 / Virus Database: 266.11.12 - Release Date: 2005/05/17



Reply via email to