cqlsh: preserve original result column names

Patch by Tyler Hobbs; reviewed by Aleksey Yeschenko for CASSANDRA-7806
This commit is contained in:
Tyler Hobbs 2014-08-20 17:46:41 -05:00
parent 58554decc2
commit c4191ed1c9
3 changed files with 14 additions and 11 deletions

View File

@ -1,4 +1,6 @@
2.1.0
* (cqlsh) Fix column name formatting for functions, CAS operations,
and UDT field selections (CASSANDRA-7806)
* (cqlsh) Fix COPY FROM handling of null/empty primary key
values (CASSANDRA-7792)
* Fix ordering of static cells (CASSANDRA-7763)

View File

@ -107,7 +107,7 @@ except ImportError, e:
'Error: %s\n' % (sys.executable, sys.path, e))
from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement
from cassandra.query import SimpleStatement, ordered_dict_factory
from cassandra.policies import WhiteListRoundRobinPolicy
from cassandra.metadata import protect_name, protect_names, protect_value
from cassandra.auth import PlainTextAuthProvider
@ -521,6 +521,7 @@ class Shell(cmd.Cmd):
self.session = self.conn.connect(keyspace)
else:
self.session = self.conn.connect()
self.session.row_factory = ordered_dict_factory
self.get_connection_versions()
self.current_keyspace = keyspace
@ -612,9 +613,9 @@ class Shell(cmd.Cmd):
def get_connection_versions(self):
result, = self.session.execute("select * from system.local where key = 'local'")
vers = {
'build': result.release_version,
'protocol': result.native_protocol_version,
'cql': result.cql_version,
'build': result['release_version'],
'protocol': result['native_protocol_version'],
'cql': result['cql_version'],
}
self.connection_versions = vers
self.cass_ver_tuple = tuple(map(int, vers['build'].split('-', 1)[0].split('.')[:3]))
@ -952,9 +953,9 @@ class Shell(cmd.Cmd):
def print_static_result(self, rows):
if not rows:
return
colnames = rows[0]._fields
colnames = rows[0].keys()
formatted_names = [self.myformat_colname(name) for name in colnames]
formatted_values = [map(self.myformat_value, row) for row in rows]
formatted_values = [map(self.myformat_value, row.values()) for row in rows]
if self.expand_enabled:
self.print_formatted_result_vertically(formatted_names, formatted_values)
else:
@ -1423,7 +1424,7 @@ class Shell(cmd.Cmd):
format_value(v, output_encoding=encoding, nullval=nullval,
time_format=self.display_time_format,
float_precision=self.display_float_precision).strval
writer.writerow(map(fmt, row))
writer.writerow(map(fmt, row.values()))
rows += 1
finally:
if do_close:

View File

@ -1149,7 +1149,7 @@ def username_name_completer(ctxt, cass):
return [Hint('<username>')]
session = cass.session
return [maybe_quote(row[0].replace("'", "''")) for row in session.execute("LIST USERS")]
return [maybe_quote(row.values()[0].replace("'", "''")) for row in session.execute("LIST USERS")]
# END SYNTAX/COMPLETION RULE DEFINITIONS
@ -1167,12 +1167,12 @@ class UserTypesMeta(object):
def from_layout(cls, layout):
result = {}
for row in layout:
ksname = row.keyspace_name
ksname = row['keyspace_name']
if ksname not in result:
result[ksname] = {}
utname = row.type_name
utname = row['type_name']
result[ksname][utname] = zip(row.field_names, row.field_types)
result[ksname][utname] = zip(row['field_names'], row['field_types'])
return cls(meta=result)
def get_usertypes_names(self, keyspace):