[ 
https://issues.apache.org/jira/browse/CASSANDRA-6185?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sylvain Lebresne updated CASSANDRA-6185:
----------------------------------------

    Attachment: 6185.txt

Currently, our type compatibility is based on comparison compatibility, and 
since 'blob' does not compare like 'int', this is refused. That being said, 
except for clustering columns, we can use a more permissive compatibilty check 
that don't take comparison order into account. Attaching patch that does that 
(the patch also slightly clean-up/improve the validation made by 
AlterTableStatement).


> Can't update int column to blob type.
> -------------------------------------
>
>                 Key: CASSANDRA-6185
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6185
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Nick Bailey
>            Assignee: Sylvain Lebresne
>             Fix For: 1.2.11, 2.0.2
>
>         Attachments: 6185.txt
>
>
> Patch for dtests:
> {noformat}
> diff --git a/cql_tests.py b/cql_tests.py
> index 11461e4..405c998 100644
> --- a/cql_tests.py
> +++ b/cql_tests.py
> @@ -1547,35 +1547,35 @@ class TestCQL(Tester):
>              CREATE TABLE test (
>                  k text,
>                  c text,
> -                v text,
> +                v int,
>                  PRIMARY KEY (k, c)
>              )
>          """)
> -        req = "INSERT INTO test (k, c, v) VALUES ('%s', '%s', '%s')"
> +        req = "INSERT INTO test (k, c, v) VALUES ('%s', '%s', %d)"
>          # using utf8 character so that we can see the transition to BytesType
> -        cursor.execute(req % ('ɸ', 'ɸ', 'ɸ'))
> +        cursor.execute(req % ('ɸ', 'ɸ', 1))
>          cursor.execute("SELECT * FROM test")
>          cursor.execute("SELECT * FROM test")
>          res = cursor.fetchall()
> -        assert res == [[u'ɸ', u'ɸ', u'ɸ']], res
> +        assert res == [[u'ɸ', u'ɸ', 1]], res
>          cursor.execute("ALTER TABLE test ALTER v TYPE blob")
>          cursor.execute("SELECT * FROM test")
>          res = cursor.fetchall()
>          # the last should not be utf8 but a raw string
> -        assert res == [[u'ɸ', u'ɸ', 'ɸ']], res
> +        assert res == [[u'ɸ', u'ɸ', '\x00\x00\x00\x01']], res
>          cursor.execute("ALTER TABLE test ALTER k TYPE blob")
>          cursor.execute("SELECT * FROM test")
>          res = cursor.fetchall()
> -        assert res == [['ɸ', u'ɸ', 'ɸ']], res
> +        assert res == [['ɸ', u'ɸ', '\x00\x00\x00\x01']], res
>          cursor.execute("ALTER TABLE test ALTER c TYPE blob")
>          cursor.execute("SELECT * FROM test")
>          res = cursor.fetchall()
> -        assert res == [['ɸ', 'ɸ', 'ɸ']], res
> +        assert res == [['ɸ', 'ɸ', '\x00\x00\x00\x01']], res
>      @since('1.2')
>      def composite_row_key_test(self):
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to