[
https://issues.apache.org/jira/browse/CASSANDRA-4003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13224519#comment-13224519
]
Jonathan Ellis commented on CASSANDRA-4003:
-------------------------------------------
It looks like the core of the fix is this:
{noformat}
+ def get_nametype(self, cursor, num):
+ """
+ Determine the Cassandra type of a column name from the current row of
+ query results on the given cursor. The column in question is given by
+ its zero-based ordinal number within the row.
+
+ Pretty big hack, but necessary to differentiate some things like ascii
+ vs. blob hex. Probably this should be available from the driver
+ somehow, instead.
+ """
+
+ row = cursor.result[cursor.rs_idx - 1]
+ col = row.columns[num]
+ schema = cursor.decoder.schema
+ return schema.name_types.get(col.name, schema.default_name_type)
{noformat}
Can you elaborate as to what's going on?
> cqlsh still failing to handle decode errors in some column names
> ----------------------------------------------------------------
>
> Key: CASSANDRA-4003
> URL: https://issues.apache.org/jira/browse/CASSANDRA-4003
> Project: Cassandra
> Issue Type: Bug
> Components: Tools
> Affects Versions: 1.0.8
> Reporter: paul cannon
> Assignee: paul cannon
> Priority: Minor
> Labels: cqlsh
> Fix For: 1.0.9
>
>
> Columns which are expected to be text, but which are not valid utf8, cause
> cqlsh to display an error and not show any output:
> {noformat}
> cqlsh:ks> CREATE COLUMNFAMILY test (a text PRIMARY KEY) WITH comparator =
> timestamp;
> cqlsh:ks> INSERT INTO test (a, '2012-03-05') VALUES ('val1', 'val2');
> cqlsh:ks> ASSUME test NAMES ARE text;
> cqlsh:ks> select * from test;
> 'utf8' codec can't decode byte 0xe1 in position 4: invalid continuation byte
> {noformat}
> the traceback with cqlsh --debug:
> {noformat}
> Traceback (most recent call last):
> File "bin/cqlsh", line 581, in onecmd
> self.handle_statement(st)
> File "bin/cqlsh", line 606, in handle_statement
> return custom_handler(parsed)
> File "bin/cqlsh", line 663, in do_select
> self.perform_statement_as_tokens(parsed.matched, decoder=decoder)
> File "bin/cqlsh", line 666, in perform_statement_as_tokens
> return self.perform_statement(cqlhandling.cql_detokenize(tokens),
> decoder=decoder)
> File "bin/cqlsh", line 693, in perform_statement
> self.print_result(self.cursor)
> File "bin/cqlsh", line 728, in print_result
> self.print_static_result(cursor)
> File "bin/cqlsh", line 742, in print_static_result
> formatted_names = map(self.myformat_colname, colnames)
> File "bin/cqlsh", line 413, in myformat_colname
> wcwidth.wcswidth(name.decode(self.output_codec.name)))
> File "/usr/local/Cellar/python/2.7.2/lib/python2.7/encodings/utf_8.py",
> line 16, in decode
> return codecs.utf_8_decode(input, errors, True)
> UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 4:
> invalid continuation byte
> {noformat}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira