Torque
  1. Torque
  2. TORQUE-11

Torque Type Timestamp should be mapped to datetime in Mysql

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.3
    • Fix Version/s: 4.0-beta1
    • Component/s: Generator, Runtime
    • Labels:
      None
    • Environment:
      Mysql
    • Old Scarab Id:
      TRQS298

      Description

      Currently, the torque type timestamp is mapped to timestamp in mysql. However, timestamp in mysql has a range only from 1970 to 2037, whereas datetime has a range from 1000 to 9999. Both seem to have second precision. Thanks to Joerg Friedrich for suggesting this.

        Activity

        Hide
        Thomas Fox added a comment -

        The problem is not a technical one, resolving this would need to add one line of code in the class org.apache.torque.engine.platform.PlatformMysqlImpl in the method initialize():
        setSchemaDomainMapping(new Domain(SchemaType.TIMESTAMP, "DATETIME"));

        The problem is rather a compatibility issue. The Torque team has tried hard not to make any hidden incompatible changes between 3.2 and the next release (which is probably called 3.3), and I'd consider this change to be such an incompatibility (people might rely on the magic behaviour of the timestamp).
        My personal idea would be to address this issue in 4.0-dev. In the meantime, if you have problems with this, you can get the sources, make the change above, and recompile the Torque generator.

        Show
        Thomas Fox added a comment - The problem is not a technical one, resolving this would need to add one line of code in the class org.apache.torque.engine.platform.PlatformMysqlImpl in the method initialize(): setSchemaDomainMapping(new Domain(SchemaType.TIMESTAMP, "DATETIME")); The problem is rather a compatibility issue. The Torque team has tried hard not to make any hidden incompatible changes between 3.2 and the next release (which is probably called 3.3), and I'd consider this change to be such an incompatibility (people might rely on the magic behaviour of the timestamp). My personal idea would be to address this issue in 4.0-dev. In the meantime, if you have problems with this, you can get the sources, make the change above, and recompile the Torque generator.
        Hide
        Declan Shanaghy added a comment -

        Any progress on this issue?
        I am having the same problem with this magic behavious in my application that i am converting over to turbine.

        Show
        Declan Shanaghy added a comment - Any progress on this issue? I am having the same problem with this magic behavious in my application that i am converting over to turbine.
        Hide
        Adrian Price added a comment -

        Agreed: MySQL TIMESTAMP most emphatically is not the correct mapping for JDBC TIMESTAMP. The correct mapping is JDBC TIMESTAMP -> MySQL DATETIME.

        This is a major issue because it breaks applications which rely on normal DATETIME nullability and behaviour; for example, my own Open Business Engine (http://obe.sourceforge.net), which I am currently attempting to convert to use Torque for DDL generation.

        Show
        Adrian Price added a comment - Agreed: MySQL TIMESTAMP most emphatically is not the correct mapping for JDBC TIMESTAMP. The correct mapping is JDBC TIMESTAMP -> MySQL DATETIME. This is a major issue because it breaks applications which rely on normal DATETIME nullability and behaviour; for example, my own Open Business Engine ( http://obe.sourceforge.net ), which I am currently attempting to convert to use Torque for DDL generation.
        Hide
        Thomas Fox added a comment -

        This is problematic because of the magic behaviour of the timestamp column.
        See
        http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.html
        and
        http://dev.mysql.com/doc/refman/5.0/en/datetime.html

        The magic behaviour happens if a mysql timestamp column is set to null, then it is automatically set to the current date by mysql. Once this has happened, the magic behaviour is not seen any more because the timestamp column is set explicitly on every update.

        For mysql datetime columns, if the column value is set to null and saved, it is retrieved as null again.

        Show
        Thomas Fox added a comment - This is problematic because of the magic behaviour of the timestamp column. See http://dev.mysql.com/doc/refman/4.1/en/timestamp-pre-4-1.html and http://dev.mysql.com/doc/refman/5.0/en/datetime.html The magic behaviour happens if a mysql timestamp column is set to null, then it is automatically set to the current date by mysql. Once this has happened, the magic behaviour is not seen any more because the timestamp column is set explicitly on every update. For mysql datetime columns, if the column value is set to null and saved, it is retrieved as null again.

          People

          • Assignee:
            Thomas Fox
            Reporter:
            Thomas Fox
          • Votes:
            2 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development