Hi Tom,
I checked in. Thanks again for your review!
-- markus.
Tom Ware wrote:
> Hi Markus,
>
> It should be ok, to include both of these changes. I will just
> insure that our internal QA group is going to do a full set of
> database platform tests at some point in the future so we do not see
> any surprises for platforms you do not have available.
>
> -Tom
>
> Markus Fuchs wrote:
>
>> Hi Tom,
>>
>> Tom Ware wrote:
>>
>>
>>
>>> Hi Markus,
>>>
>>> In general, the changes look good.
>>>
>>
>>
>> Thank you!
>>
>>
>>
>>> My main concern is similar to one I sent you earlier. Are issues
>>> related to these changes only occuring on MS SQLServer? If so, why
>>> are we updating DatabasePlatform instead of SQLServerPlatform? I am
>>> not entirely opposed to making the updates in DatabasePlatform, but
>>> we should have a good reason before we do this.
>>>
>>
>>
>> Are you addressing the additions to both mappings defined in
>> buildClassTypes() as well as buildFieldTypes()? I understand
>> DatabasePlatform as providing reasonable defaults, that can be
>> overwritten/customized in specific sub classes. My additions are
>> meant to be that kind of defaults. Defining these defaults in a sub
>> class doesn't seem a good solution to me. Also note that the tests
>> succeeded on all tested platforms.
>>
>>
>>
>>> Is the additional test failure you are seeing the one in
>>> "testEMDefaultTxType"? If so, I believe I have seen that once
>>> before, but have not been able to recreate it. I will give it
>>> another try today.
>>>
>>
>>
>> Thanks! That's the failure I saw.
>>
>> Best regards,
>>
>> -- markus.
>>
>>
>>
>>> -Tom
>>>
>>> Markus Fuchs wrote:
>>>
>>>
>>>
>>>> Hi Tom,
>>>>
>>>> One of our tests ran into an issue while binding a null value to an
>>>> IMAGE column on MS SQLServer:
>>>>
>>>>
>>>>
>>>>> Based on the table definition:
>>>>>
>>>>> CREATE TABLE DATATYPES2 (
>>>>> DATATYPES2_ID DATETIME NOT NULL,
>>>>> TIMEDATA DATETIME,
>>>>> TSDATA DATETIME,
>>>>> BYTEDATA IMAGE,
>>>>> CHARDATA VARCHAR(448),
>>>>> CONSTRAINT PK_DATATYPES2 PRIMARY KEY (DATATYPES2_ID)
>>>>> )
>>>>> The following exception occurs when trying to insert a null value
>>>>> into DATATYPES2.BYTEDATA.
>>>>>
>>>>> Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.4 (Build
>>>>> 060412)):
>>>>> oracle.toplink.essentials.exceptions.DatabaseException
>>>>> Internal Exception: java.sql.SQLException: [sunm][SQLServer JDBC
>>>>> Driver][SQLServer]
>>>>> Operand type clash: nvarchar is incompatible with image Error
>>>>> Code: 206
>>>>> Call:INSERT INTO DATATYPES2 (DATATYPES2_ID, TIMEDATA, TSDATA,
>>>>> CHARDATA, BYTEDATA) VALUES (?, ?, ?, ?, ?)
>>>>> bind => [2006-05-15, null, null, null, null]
>>>>> Query:InsertObjectQuery(com.sun.ts.tests.ejb30.persistence.types.property.DataTypes2_at_1b8d241)
>>>>>
>>>>> at
>>>>> oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:295)
>>>>>
>>>>> at
>>>>> oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:639)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> This problem is fixed by the attached NullParameterBinding.jar.
>>>>
>>>> The fix basically adds JDBC sql type mappings for several java
>>>> field types in the method DatabasePlatform#getJdbcType(Class):
>>>>
>>>> 665a667,670
>>>>
>>>>
>>>>> } else if (javaType == ClassConstants.BYTE) {
>>>>> return Types.TINYINT;
>>>>> } else if (javaType == ClassConstants.CHAR) {
>>>>> return Types.CHAR;
>>>>>
>>>>
>>>> 675a681,686
>>>>
>>>>
>>>>> } else if (javaType == ClassConstants.SHORT ) {
>>>>> return Types.SMALLINT;
>>>>> } else if (javaType == ClassConstants.CALENDAR ) {
>>>>> return Types.TIMESTAMP;
>>>>> } else if (javaType == ClassConstants.UTILDATE ) {
>>>>> return Types.TIMESTAMP;
>>>>>
>>>>
>>>> 681a693,694
>>>>
>>>>
>>>>> } else if (javaType == ClassConstants.ABYTE) {
>>>>> return Types.LONGVARBINARY;
>>>>>
>>>>
>>>> 685a699,704
>>>>
>>>>
>>>>> } else if (javaType == ClassConstants.ACHAR) {
>>>>> return Types.LONGVARCHAR;
>>>>> } else if (javaType == ClassConstants.APCHAR) {
>>>>> return Types.LONGVARCHAR;
>>>>> } else if (javaType == ClassConstants.CLOB) {
>>>>> return Types.CLOB;
>>>>>
>>>>
>>>> Please note that none of the existing mappings is changed.
>>>>
>>>> The archive also contains JUnit tests for entity-persistence-tests
>>>> testing the binding of null values to sql parameters for multiple
>>>> java field types. I ran these tests successfully against Oracle,
>>>> JavaDB, DB2, SQLServer and Sybase. I also ran the
>>>> FullRegressionSuite against JavaDB and Oracle. The tests against
>>>> JavaDB succeeded, but there's one failure on Oracle, which seems to
>>>> be unrelated. Please see the attached testresults.jar.
>>>>
>>>> The other changes are:
>>>>
>>>> - DatabasePlatform#buildClassTypes:
>>>> added mapping for "CLOB" -> Character[].class
>>>>
>>>> - Added a data types test model:
>>>>
>>>> PrimitiveTypes.java: A JPA class having all primitive type and a
>>>> String field
>>>> WrapperTypes.java: A JPA class having all primitive wrapper type
>>>> and a String field
>>>> ByteArrayType.java: A JPA class having a Byte[] field
>>>> PrimitiveByteArrayType.java: A JPA class having a byte[] field
>>>> CharacterArrayType.java: A JPA class having a Character[] field
>>>> CharArrayType.java: A JPA class having a char[] field
>>>>
>>>> - Added an additional constructor for DateTime.java
>>>>
>>>> - Added null binding tests for the datatypes and datetime test models
>>>>
>>>> - PlatinumBuyer.java, Customer.java:
>>>> minor changes
>>>>
>>>> - FullRegressionTestSuite.java:
>>>> added datatypes/NullBindingJUnitTestCase and
>>>> datetime/NullBindingJUnitTestCase
>>>>
>>>> Please have a look!
>>>>
>>>> Thanks,
>>>>
>>>> -- markus.
>>>>
>>>>
>>>