Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-2694

Precision issues with reverse / forward engineering of time types on MySQL

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.1
    • 4.2.M3, 4.2.B1
    • None
    • None
    • MySQL 5.7.24, Java 1.8, Cayenne 4.1

    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.

      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.

      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).

      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.)

      Forward engineering is particularly important for Bootique users who are relying on Cayenne for schema generation.

      Attachments

        Activity

          People

            ntimofeev Nikita Timofeev
            andrus Andrus Adamchik
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 1h
                1h