mirror of https://github.com/apache/cassandra
cqlsh: preserve original result column names
Patch by Tyler Hobbs; reviewed by Aleksey Yeschenko for CASSANDRA-7806
This commit is contained in:
parent
58554decc2
commit
c4191ed1c9
|
|
@ -1,4 +1,6 @@
|
||||||
2.1.0
|
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
|
* (cqlsh) Fix COPY FROM handling of null/empty primary key
|
||||||
values (CASSANDRA-7792)
|
values (CASSANDRA-7792)
|
||||||
* Fix ordering of static cells (CASSANDRA-7763)
|
* Fix ordering of static cells (CASSANDRA-7763)
|
||||||
|
|
|
||||||
15
bin/cqlsh
15
bin/cqlsh
|
|
@ -107,7 +107,7 @@ except ImportError, e:
|
||||||
'Error: %s\n' % (sys.executable, sys.path, e))
|
'Error: %s\n' % (sys.executable, sys.path, e))
|
||||||
|
|
||||||
from cassandra.cluster import Cluster
|
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.policies import WhiteListRoundRobinPolicy
|
||||||
from cassandra.metadata import protect_name, protect_names, protect_value
|
from cassandra.metadata import protect_name, protect_names, protect_value
|
||||||
from cassandra.auth import PlainTextAuthProvider
|
from cassandra.auth import PlainTextAuthProvider
|
||||||
|
|
@ -521,6 +521,7 @@ class Shell(cmd.Cmd):
|
||||||
self.session = self.conn.connect(keyspace)
|
self.session = self.conn.connect(keyspace)
|
||||||
else:
|
else:
|
||||||
self.session = self.conn.connect()
|
self.session = self.conn.connect()
|
||||||
|
self.session.row_factory = ordered_dict_factory
|
||||||
self.get_connection_versions()
|
self.get_connection_versions()
|
||||||
|
|
||||||
self.current_keyspace = keyspace
|
self.current_keyspace = keyspace
|
||||||
|
|
@ -612,9 +613,9 @@ class Shell(cmd.Cmd):
|
||||||
def get_connection_versions(self):
|
def get_connection_versions(self):
|
||||||
result, = self.session.execute("select * from system.local where key = 'local'")
|
result, = self.session.execute("select * from system.local where key = 'local'")
|
||||||
vers = {
|
vers = {
|
||||||
'build': result.release_version,
|
'build': result['release_version'],
|
||||||
'protocol': result.native_protocol_version,
|
'protocol': result['native_protocol_version'],
|
||||||
'cql': result.cql_version,
|
'cql': result['cql_version'],
|
||||||
}
|
}
|
||||||
self.connection_versions = vers
|
self.connection_versions = vers
|
||||||
self.cass_ver_tuple = tuple(map(int, vers['build'].split('-', 1)[0].split('.')[:3]))
|
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):
|
def print_static_result(self, rows):
|
||||||
if not rows:
|
if not rows:
|
||||||
return
|
return
|
||||||
colnames = rows[0]._fields
|
colnames = rows[0].keys()
|
||||||
formatted_names = [self.myformat_colname(name) for name in colnames]
|
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:
|
if self.expand_enabled:
|
||||||
self.print_formatted_result_vertically(formatted_names, formatted_values)
|
self.print_formatted_result_vertically(formatted_names, formatted_values)
|
||||||
else:
|
else:
|
||||||
|
|
@ -1423,7 +1424,7 @@ class Shell(cmd.Cmd):
|
||||||
format_value(v, output_encoding=encoding, nullval=nullval,
|
format_value(v, output_encoding=encoding, nullval=nullval,
|
||||||
time_format=self.display_time_format,
|
time_format=self.display_time_format,
|
||||||
float_precision=self.display_float_precision).strval
|
float_precision=self.display_float_precision).strval
|
||||||
writer.writerow(map(fmt, row))
|
writer.writerow(map(fmt, row.values()))
|
||||||
rows += 1
|
rows += 1
|
||||||
finally:
|
finally:
|
||||||
if do_close:
|
if do_close:
|
||||||
|
|
|
||||||
|
|
@ -1149,7 +1149,7 @@ def username_name_completer(ctxt, cass):
|
||||||
return [Hint('<username>')]
|
return [Hint('<username>')]
|
||||||
|
|
||||||
session = cass.session
|
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
|
# END SYNTAX/COMPLETION RULE DEFINITIONS
|
||||||
|
|
||||||
|
|
@ -1167,12 +1167,12 @@ class UserTypesMeta(object):
|
||||||
def from_layout(cls, layout):
|
def from_layout(cls, layout):
|
||||||
result = {}
|
result = {}
|
||||||
for row in layout:
|
for row in layout:
|
||||||
ksname = row.keyspace_name
|
ksname = row['keyspace_name']
|
||||||
if ksname not in result:
|
if ksname not in result:
|
||||||
result[ksname] = {}
|
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)
|
return cls(meta=result)
|
||||||
|
|
||||||
def get_usertypes_names(self, keyspace):
|
def get_usertypes_names(self, keyspace):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue