Hi Adrian,
I thought that there is an
alternative simple permanent solution to the problem - but apparently I
didn't understand the problem.
After
reading your reply and discussing it with Guy I suggest the following
solution to https://bugs.eclipse.org/bugs/show_bug.cgi?id=317597:
1) define a new empty java class (say, BinaryComparable) - it will be
used only as a key in fieldTypeMapping;
2) on all database platforms, in buildFieldsType method, map the new
type to comparable database field definition:
on MySQLPlatform it would be:
fieldTypeMapping.put(BinaryComparible.class, new
FieldTypeDefinition("LONGBLOB", 16));
on Oracle:
fieldTypeMapping.put(BinaryComparible.class, new
FieldTypeDefinition("RAW", 16));
etc.
3) In DefaultTableGenerator class, when FieldDefinition its java type
is copied from the corresponding DatabaseField.
That should change so that if the field
a) is of type byte[] or Byte[] and
b) involved in comparisons - it's either a FK or the target of a
foreign key - then
FieldDefinition's type should be set to BinaryComparable
If you think that it's a reasonable approach and it wouldn't take too
long and you have the time right now, may be you could try to implement
it.
Otherwise please go ahead with the workaround fix you have suggested.
Thanks,
Andrei
On 16/07/2010 7:11 AM, Goerler, Adrian wrote:
Hi Andrei, all,
hm, so I understand that you
are rejecting the proposed patch. :-(
The tests need a binary comparable
non-LOB column. I don't think this is a bad thing to use as the
EclipseLink runtime can deal with it. It is an issue for the forward
mapper only.
Changing the field
definition would not help, I am affraid: My
understanding is that MySQL has six different binary types:
4 non-comparable LOB
types:TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB. The BLOB types can take up
to 2^8, 2^16, 2^24 and 2^32 bytes, respectively. But they don't have a
length argument.
2 comparable non-LOB types:
BINARY, VARBINARY, which can take up to 256 bytes. BINARY and VARBINARY
require a length argument.
The distinction between LOB and non-LOB is
orthogonal to the length, I'd say. There should be distinct
field-definitions for LOB types and for non-LOB types. But there aren't.
The patch I was proposing tackles the issue
the tests are facing using a column definiton + descriptor customizer.
I agree with you that we should rather fix the underlying issue instead
of introducing a workaround in the tests. But the tests are broken on
Oracle currently and I'd rather get them up and running before we
tackle the more complicated issue addressed by https://bugs.eclipse.org/bugs/show_bug.cgi?id=317597.
@All, what do
you think about this?
Or should we
tackle 317597 directly? In this case the WDF tests would likely remain
broken on Oracle for a while.
Regards,
Adrian
Dietmar-Hopp-Allee
16, 69190 Walldorf, Germany
Sitz der Gesellschaft/Registered Office:
Walldorf, Germany
Vorstand/SAP
Executive Board: Henning Kagermann (Sprecher/CEO), Léo Apotheker
(stellvertretender Sprecher/Deputy CEO), Werner Brandt, Claus Heinrich,
Gerhard Oswald, John Schwarz, Peter Zencke
Vorsitzender des Aufsichtsrats/Chairperson
of the SAP Supervisory Board: Hasso Plattner
Registergericht/Commercial
Register Mannheim No HRB 350269
It looks like the real culprit
is bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=317448
- JPA forward mapper fails to create
join table
It seems that table creation on MySQL always requires field size for
LONGBLOB.
That should be fixed in MySQLPlatform.buildFieldTypes method:
the FieldTypeDefinitions for LONGBLOB (what about LONGTEXT?) should be
changed to allow size, and should specify default size (what would be a
reasonable value?)
from:
fieldTypeMapping.put(byte[].class, new
FieldTypeDefinition("LONGBLOB", false));
to:
fieldTypeMapping.put(byte[].class, new
FieldTypeDefinition("LONGBLOB", 16));
The latter would indicate that the size is required, and if not
provided then the default value will be used.
On 15/07/2010 3:37 PM, Goerler, Adrian wrote:
Hi Andrei, all,
The patch uses a descriptor customizer in
order to specify the column definittion for the binary column in a
database-specific way.
I have tested this on MySQL and Oracle.
Likely, it needs to be extended to cover more database dialects.
Could you please have a look?
Regards,
Adrian
Hi Adrian,
Starting yesterday (Wed. July 14th) I am getting lots of errors (146
errors 4 failures) when I run test-wdf on Oracle, yet official build
results are clean.
It seems all the errors are the same - table doesn't exist. It look
like:
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: table
or view does not exist Error Code: 942 Call: SELECT t1.ID, t1.LASTNAME,
t1.FIRSTNAME, t1.SALARY, t1.SAMPLE_ACCOUNT, t1.PROFILE_GUID,
t1.DEPARTMENT, t1.COSTCENTER, t1.CUBICLE_FLOOR, t1.CUBICLE_PLACE,
t1.BROKERAGE_ACCOUNT, t1.EMP_START, t1.EMP_END FROM TMP_EMP_BICYCLE t0,
TMP_EMP t1 WHERE ((t0.BICYCLE_ID = ?) AND (t1.ID = t0.EMPLOYEE_ID))
bind => [7] Query: ReadAllQuery(name="riders"
referenceClass=Employee sql="SELECT t1.ID, t1.LASTNAME, t1.FIRSTNAME,
t1.SALARY, t1.SAMPLE_ACCOUNT, t1.PROFILE_GUID, t1.DEPARTMENT,
t1.COSTCENTER, t1.CUBICLE_FLOOR, t1.CUBICLE_PLACE,
t1.BROKERAGE_ACCOUNT, t1.EMP_START, t1.EMP_END FROM TMP_EMP_BICYCLE t0,
TMP_EMP t1 WHERE ((t0.BICYCLE_ID = ?) AND (t1.ID = t0.EMPLOYEE_ID))")
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services -
2.2.0.qualifier): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: table
or view does not exist
or
Exception [EclipseLink-4002] (Eclipse Persistence Services -
2.2.0.qualifier): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: table
or view does not exist Error Code: 942 Call: INSERT INTO TMP_EMP (ID,
LASTNAME, FIRSTNAME, SALARY, SAMPLE_ACCOUNT, PROFILE_GUID, DEPARTMENT,
COSTCENTER, CUBICLE_FLOOR, CUBICLE_PLACE, BROKERAGE_ACCOUNT, EMP_START,
EMP_END) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) bind =>
[1234, Mouse, Mighty, null, null, null, null, null, null, null, null,
null, null] Query:
InsertObjectQuery(org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee@1de6ff8)
javax.persistence.RollbackException: Exception [EclipseLink-4002]
(Eclipse Persistence Services - 2.2.0.qualifier):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00942: table
or view does not exist
Any idea what that might be?
Thanks,
Andrei
eclipselink.jpa.wdf.test\reports\*.* is attached
On 14/07/2010 7:30 AM, Goerler, Adrian wrote:
Hi,
reviewed by Kevin and checked in in trunk at # 7814,
-Adrian
Hi Adrian,
The patch for this workaround are fine for me.
Thanks,
Kevin
On 13/07/2010 12:51 PM, Goerler, Adrian wrote:
Hi Kevin,
I am proposing a workaround for the failing WDF
tests until the issue 317448 is solved.
The workaround uses a columnDefinition and hence
will work on MySQL only, I am afraid.
Could you please have a look?
Thanks,
Adrian
SAP AG
Dietmar-Hopp-Allee
16, 69190 Walldorf, Germany
Sitz der
Gesellschaft/Registered Office: Walldorf, Germany
Vorstand/SAP
Executive Board: Henning Kagermann (Sprecher/CEO), Léo Apotheker
(stellvertretender Sprecher/Deputy CEO), Werner Brandt, Claus Heinrich,
Gerhard Oswald, John Schwarz, Peter Zencke
Vorsitzender des
Aufsichtsrats/Chairperson of the SAP Supervisory Board: Hasso Plattner
Registergericht/Commercial
Register Mannheim No HRB 350269
_______________________________________________
eclipselink-dev mailing list
eclipselink-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-dev
_______________________________________________
eclipselink-dev mailing list
eclipselink-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-dev
|