Akhil Mehra created CASSANDRA-13549:
---------------------------------------
Summary: Cqlsh throws and error when querying a duration data type
Key: CASSANDRA-13549
URL: https://issues.apache.org/jira/browse/CASSANDRA-13549
Project: Cassandra
Issue Type: Bug
Components: CQL
Environment: Cassandra 3.10 dev environment running on a MacOS Sierra
Reporter: Akhil Mehra
h3. Overview
Querying duration related data from the cqlsh prompt results in an error.
Consider the following create table and insert statement.
{code:title=Table and insert statement with duration data
type|borderStyle=solid}
CREATE TABLE duration_test (
primary_key text,
col20 duration,
PRIMARY KEY (primary_key)
);
INSERT INTO duration_test (primary_key, col20) VALUES ('primary_key_example',
1y5mo89h4m48s);
{code}
On executing a select query on col20 in cqlsh I get an error "Failed to format
value '"\x00\xfe\x02GS\xfc\xa5\xc0\x00' : 'ascii' codec can't decode byte 0xfe
in position 2: ordinal not in range(128)"
{code:title=Duration Query|borderStyle=solid}
Select col20 from duration_test;
{code}
h3. Investigation
On investigating this further I found that the current python Cassandra driver
used found in lib/cassandra-driver-internal-only-3.7.0.post0-2481531.zip does
not seem to support duration data type. This was added in Jan this year
https://github.com/datastax/python-driver/pull/689.
So I downloaded the latest driver release
https://github.com/datastax/python-driver/releases/tag/3.9.0. I embedded the
latest driver into cassandra-driver-internal-only-3.7.0.post0-2481531.zip. This
fixed the driver related issue but there was still a formatting issue.
I then went on to modify the format_value_duration methos in the
pylib/cqlshlib/formatting.py. Diff posted below
{code}
@formatter_for('Duration')
def format_value_duration(val, colormap, **_):
- buf = six.iterbytes(val)
- months = decode_vint(buf)
- days = decode_vint(buf)
- nanoseconds = decode_vint(buf)
- return format_python_formatted_type(duration_as_str(months, days,
nanoseconds), colormap, 'duration')
+ return format_python_formatted_type(duration_as_str(val.months, val.days,
val.nanoseconds), colormap, 'duration')
{code}
This resulted in fixing the issue and duration types are now correctly
displayed.
Happy to fix the issue if I can get some guidance on:
# If this is a valid issue. Tried searching JIRA but did not find anything
reported.
# If my assumptions are correct i.e. this is actually a bug
# how to package the new driver into the source code.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]