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

Edward Capriolo updated CASSANDRA-5198:
---------------------------------------

    Description: 
This works as it should.

{noformat}
cqlsh:movies> select * from users where token (username) > token('') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
    bsmith |         null |  null |       bob |    smith |     null
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token('bsmith') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token('scapriolo') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null

{noformat}

But look what happens when you supply numbers into the token function.


{noformat}
qlsh:movies> select * from users where token (username) > token(0) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null
cqlsh:movies> select * from users where token (username) > token(1134314) ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
    bsmith |         null |  null |       bob |    smith |     null
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token(113431431) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token(1134) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null
cqlsh:movies> select * from users where token (username) > token(1134434) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
{noformat}

This does not make sense to me. The token function is apparently converting 
integers to strings leading to seemingly unpredictable results. 

However I find this syntax odd, I feel like I should be able to say 
'token(username) > 0 and token(username) < 10' because from a thrift side I can 
page tokens or I can page keys. In this case, I guess, I am only able to page 
keys because the token is not returned to the user.

Is token 0 = ''? How do I arrive at the minimal token for and int column. 

Should the token() function at least be smart enough to reject integers for 
string columns?

  was:
This works as it should.

{noformat}
cqlsh:movies> select * from users where token (username) > token('') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
    bsmith |         null |  null |       bob |    smith |     null
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token('bsmith') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token('scapriolo') ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null

{noformat}

But look what happens when you supply numbers into the token function.


{noformat}
qlsh:movies> select * from users where token (username) > token(0) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null
cqlsh:movies> select * from users where token (username) > token(1134314) ;

 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
    bsmith |         null |  null |       bob |    smith |     null
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token(113431431) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
 ecapriolo |         null |  null |    edward | capriolo |     null

cqlsh:movies> select * from users where token (username) > token(1134) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 ecapriolo |         null |  null |    edward | capriolo |     null
cqlsh:movies> select * from users where token (username) > token(1134434) ;
 username  | created_date | email | firstname | lastname | password
-----------+--------------+-------+-----------+----------+----------
 scapriolo |         null |  null |    stacey | capriolo |     null
{noformat}

This does not make sense to me. The token function is apparently converting 
integers to strings leading to seemingly unpredictable results. 

However I find this syntax odd, I feel like I should be able to say 
'token(username) > 0 and token(username) < 10' because from a thrift side I can 
page tokens or I can page keys. In this case, I guess, I am only able to page 
keys because the token is not returned to the user.

Is token 0 = ''? How do I arrive at the minimal token for and int column. 

    
> token () function automatically coerses types leading to confusing output
> -------------------------------------------------------------------------
>
>                 Key: CASSANDRA-5198
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-5198
>             Project: Cassandra
>          Issue Type: Bug
>    Affects Versions: 1.2.1
>            Reporter: Edward Capriolo
>            Priority: Minor
>
> This works as it should.
> {noformat}
> cqlsh:movies> select * from users where token (username) > token('') ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>     bsmith |         null |  null |       bob |    smith |     null
>  scapriolo |         null |  null |    stacey | capriolo |     null
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token('bsmith') ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  scapriolo |         null |  null |    stacey | capriolo |     null
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token('scapriolo') 
> ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  ecapriolo |         null |  null |    edward | capriolo |     null
> {noformat}
> But look what happens when you supply numbers into the token function.
> {noformat}
> qlsh:movies> select * from users where token (username) > token(0) ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token(1134314) ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>     bsmith |         null |  null |       bob |    smith |     null
>  scapriolo |         null |  null |    stacey | capriolo |     null
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token(113431431) ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  scapriolo |         null |  null |    stacey | capriolo |     null
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token(1134) ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  ecapriolo |         null |  null |    edward | capriolo |     null
> cqlsh:movies> select * from users where token (username) > token(1134434) ;
>  username  | created_date | email | firstname | lastname | password
> -----------+--------------+-------+-----------+----------+----------
>  scapriolo |         null |  null |    stacey | capriolo |     null
> {noformat}
> This does not make sense to me. The token function is apparently converting 
> integers to strings leading to seemingly unpredictable results. 
> However I find this syntax odd, I feel like I should be able to say 
> 'token(username) > 0 and token(username) < 10' because from a thrift side I 
> can page tokens or I can page keys. In this case, I guess, I am only able to 
> page keys because the token is not returned to the user.
> Is token 0 = ''? How do I arrive at the minimal token for and int column. 
> Should the token() function at least be smart enough to reject integers for 
> string columns?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to