Derby
  1. Derby
  2. DERBY-1804

[DOC] CAST conversions between data types table is incorrect in Reference manual in some VARCHAR and TIMESTAMP cases

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.2.2.0
    • Fix Version/s: 10.2.1.6, 10.3.1.4
    • Component/s: Documentation
    • Labels:
      None

      Description

      The CAST function documentation contains a table which lists the explicit conversions between data types.
      http://db.apache.org/derby/docs/10.2/ref/rrefsqlj33562.html

      For the 'SOURCE' values (the columns) of SMALLINT, INTEGER, BIGINT and DECIMAL the CAST to VARCHAR is listed. However, they should not be listed because this cast is not allowed. See the output below;

      ij> create table smallint_tab(id integer, col2 smallint);
      0 rows inserted/updated/deleted
      ij> insert into smallint_tab values (1, 10);
      1 row inserted/updated/deleted
      ij> select cast(col2 as varchar(10)) from smallint_tab;
      ERROR 42846: Cannot convert types 'SMALLINT' to 'VARCHAR'.

      Also from integer to varchar does not work:

      ij> create table int_tab (id integer, col2 integer);
      0 rows inserted/updated/deleted
      ij> insert into int_tab values (1, 10);
      1 row inserted/updated/deleted
      ij> select cast(col2 as varchar(20)) from int_tab;
      ERROR 42846: Cannot convert types 'INTEGER' to 'VARCHAR'.

      Bigint neither:

      ij> create table bigint_tab (id integer, col2 bigint);
      0 rows inserted/updated/deleted
      ij> insert into bigint_tab values (1, 10);
      ij> select cast(col2 as varchar(20)) from bigint_tab;
      ERROR 42846: Cannot convert types 'BIGINT' to 'VARCHAR'.

      Nor decimal:

      ij> create table decimal_tab (id integer, col2 decimal);
      0 rows inserted/updated/deleted
      ij> insert into decimal_tab values (1, 1.88);
      1 row inserted/updated/deleted
      ij> select cast(col2 as varchar(3)) from decimal_tab;
      ERROR 42846: Cannot convert types 'DECIMAL' to 'VARCHAR'.

      The Cast from DATE to TIMESTAMP and TIME to TIMESTAMP also are not allowed, although they
      are listed. They need to be removed;

      ij> create table date_tab (id integer, col2 date);
      0 rows inserted/updated/deleted
      ij> insert into date_tab values (1, CURRENT_DATE);
      1 row inserted/updated/deleted
      ij> select cast(col2 as timestamp) from date_tab;
      ERROR 42846: Cannot convert types 'DATE' to 'TIMESTAMP'.

      ij> create table time_tab (id integer, col2 time);
      0 rows inserted/updated/deleted
      ij> insert into time_tab values (1, CURRENT_TIME);
      1 row inserted/updated/deleted
      ij> select cast(col2 as timestamp) from time_tab;
      ERROR 42846: Cannot convert types 'TIME' to 'TIMESTAMP'.

      1. derby1804.diff
        3 kB
        Laura Stewart
      2. rrefsqlj33562.html
        33 kB
        Laura Stewart

        Activity

        Hide
        Laura Stewart added a comment -

        Updating Fix versions (not affects versions)

        Show
        Laura Stewart added a comment - Updating Fix versions (not affects versions)
        Hide
        Laura Stewart added a comment -

        Reopening to change affects versions

        Show
        Laura Stewart added a comment - Reopening to change affects versions
        Hide
        Knut Anders Hatlen added a comment -

        Thanks, Laura and Susan! Committed revision 446543.

        Show
        Knut Anders Hatlen added a comment - Thanks, Laura and Susan! Committed revision 446543.
        Hide
        Susan Cline added a comment -

        This patch looks good to me Laura. Although it still took me a while to understand that table looking at it again.

        Show
        Susan Cline added a comment - This patch looks good to me Laura. Although it still took me a while to understand that table looking at it again.
        Hide
        Laura Stewart added a comment -

        Updated the DATE and TIME data types
        and added a clarification about how to
        understand the table.

        Show
        Laura Stewart added a comment - Updated the DATE and TIME data types and added a clarification about how to understand the table.
        Hide
        Laura Stewart added a comment -

        Yes, it took me a try to two to understand how the table is setup.
        I will add some text to clarify it

        Show
        Laura Stewart added a comment - Yes, it took me a try to two to understand how the table is setup. I will add some text to clarify it
        Hide
        Susan Cline added a comment -

        Hi Laura,

        Whoa .. I think that I'm confused about how to read this table. The way I was reading it
        was down the column instead of across on the row. This is my mistake and therefore the document as it stands is correct. However, do you think it would be possible to make a change from this:

        The first column on the table lists the source types, while the first row lists the target types. A "Y" indicates that the source to the target is a valid conversion.

        to this: (or whatever you think clarifies how to read this table, and maybe it does not need clarification, it might have just been my misread.):

        The column on the table lists the source types, while the row lists the target types.
        A "Y" indicates that the source to the target is a valid conversion.
        For example, the source represented by the first column lists the target types in the first row, the source represented by the second column lists the target types in the second row and so on.

        Show
        Susan Cline added a comment - Hi Laura, Whoa .. I think that I'm confused about how to read this table. The way I was reading it was down the column instead of across on the row. This is my mistake and therefore the document as it stands is correct. However, do you think it would be possible to make a change from this: The first column on the table lists the source types, while the first row lists the target types. A "Y" indicates that the source to the target is a valid conversion. to this: (or whatever you think clarifies how to read this table, and maybe it does not need clarification, it might have just been my misread.): The column on the table lists the source types, while the row lists the target types. A "Y" indicates that the source to the target is a valid conversion. For example, the source represented by the first column lists the target types in the first row, the source represented by the second column lists the target types in the second row and so on.
        Hide
        Laura Stewart added a comment -

        Susan - As I read the CAST table, the "Source" is the first column. The "Target" is the first row. When I look at source=SMALLINT (in the second row), there is a dash under the VARCHAR column, meaning that you cannot cast a SMALLINT column as a VARCHAR. Conversely, the table indicates that you can cast a VARCHAR as a SMALLINT.

        I believe that your tests were from SMALLINT, INTEGER, BIGINT and DECIMAL to VARCHAR?
        The table currently does show that you cannot perform those casts.
        Do you also mean that you can't cast a VARCHAR as a SMALLINT, INTEGER, BIGINT or DECIMAL ???

        I have corrected the DATE to TIMESTAMP and TIME to TIMESTAMP columns.

        I produce a patch once you let me know about VARCHAR.

        Show
        Laura Stewart added a comment - Susan - As I read the CAST table, the "Source" is the first column. The "Target" is the first row. When I look at source=SMALLINT (in the second row), there is a dash under the VARCHAR column, meaning that you cannot cast a SMALLINT column as a VARCHAR. Conversely, the table indicates that you can cast a VARCHAR as a SMALLINT. I believe that your tests were from SMALLINT, INTEGER, BIGINT and DECIMAL to VARCHAR? The table currently does show that you cannot perform those casts. Do you also mean that you can't cast a VARCHAR as a SMALLINT, INTEGER, BIGINT or DECIMAL ??? I have corrected the DATE to TIMESTAMP and TIME to TIMESTAMP columns. I produce a patch once you let me know about VARCHAR.

          People

          • Assignee:
            Laura Stewart
            Reporter:
            Susan Cline
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development