[
https://issues.apache.org/jira/browse/CAY-2694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrus Adamchik updated CAY-2694:
---------------------------------
Description:
There is a number of issues with reverse and forward engineering of
time-related types on MySQL. Not sure if this affects other databases.
h2. Background
Per https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html TIME,
TIMESTAMP and DATETIME native types can be specified either without a numeric
parameter (indicating truncation to whole seconds) or with a single numeric
parameter (indicating the number of fractional digits). So "TIME" means whole
seconds precision, "TIME(3)" means millisecond precision, "TIME(6)" -
microsecond precision.
h2. Reverse Engineering
Regardless of precision, Cayenne reverse-engineers the above 3 types to
DbAttributes with "maxlength" of "19" and no "scale". Expected - empty
"maxlength" and "scale" matching the precision of the column (e.g. none, 3, 6
for the example above).
h2. Forward Engineering
Currently "maxlength" is included in the generated SQL (e.g. "TIME(19)"),
causing DB errors. But even if there were no errors (if it was in the
acceptable range), that would still generate invalid column definitions.
Expected - "maxlength" must be ignored, and "scale" used if present (e.g.
"TIME", "TIME(3)", etc.)
was:
There is a number of issues with reverse and forward engineering of
time-related types on MySQL. Not sure if this affects other databases.
h2. Background
Per https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html TIME,
TIMESTAMP and DATETIME natibe types can be specified either without a numeric
parameter (indicating truncation to whole seconds) or with a single numeric
parameter (indicating the number of fractional digits). So "TIME" means whole
seconds precision, "TIME(3)" means millisecond precision, "TIME(6)" -
microsecond precision.
h2. Reverse Engineering
Regardless of precision, Cayenne reverse-engineers the above 3 types to
DbAttributes with "maxlength" of "19" and no "scale". Expected - empty
"maxlength" and "scale" matching the precision of the column (e.g. none, 3, 6
for the example above).
h2. Forward Engineering
Currently "maxlength" is included in the generated SQL (e.g. "TIME(19)"),
causing DB errors. But even if there were no errors (if it was in the
acceptable range), that would still generate invalid column definitions.
Expected - "maxlength" must be ignored, and "scale" used if present (e.g.
"TIME", "TIME(3)", etc.)
> Precision issues with reverse / forward engineering of time types on MySQL
> --------------------------------------------------------------------------
>
> Key: CAY-2694
> URL: https://issues.apache.org/jira/browse/CAY-2694
> Project: Cayenne
> Issue Type: Bug
> Affects Versions: 4.1
> Environment: MySQL 5.7.24, Java 1.8, Cayenne 4.1
> Reporter: Andrus Adamchik
> Priority: Major
> Fix For: 4.2.M3
>
>
> There is a number of issues with reverse and forward engineering of
> time-related types on MySQL. Not sure if this affects other databases.
> h2. Background
> Per https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html TIME,
> TIMESTAMP and DATETIME native types can be specified either without a numeric
> parameter (indicating truncation to whole seconds) or with a single numeric
> parameter (indicating the number of fractional digits). So "TIME" means whole
> seconds precision, "TIME(3)" means millisecond precision, "TIME(6)" -
> microsecond precision.
> h2. Reverse Engineering
> Regardless of precision, Cayenne reverse-engineers the above 3 types to
> DbAttributes with "maxlength" of "19" and no "scale". Expected - empty
> "maxlength" and "scale" matching the precision of the column (e.g. none, 3, 6
> for the example above).
> h2. Forward Engineering
> Currently "maxlength" is included in the generated SQL (e.g. "TIME(19)"),
> causing DB errors. But even if there were no errors (if it was in the
> acceptable range), that would still generate invalid column definitions.
> Expected - "maxlength" must be ignored, and "scale" used if present (e.g.
> "TIME", "TIME(3)", etc.)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)