diff --git a/redash/query_runner/cass.py b/redash/query_runner/cass.py index a503f6a9b6..7a577e6e30 100644 --- a/redash/query_runner/cass.py +++ b/redash/query_runner/cass.py @@ -15,7 +15,7 @@ class Cassandra(BaseQueryRunner): - noop_query = "SELECT * FROM system.compactions_in_progress" + noop_query = "SELECT dateof(now()) FROM system.local" @classmethod def enabled(cls): @@ -53,13 +53,23 @@ def configuration_schema(cls): def type(cls): return "Cassandra" - def _get_tables(self, schema): + def get_schema(self, get_stats=False): query = """ - select columnfamily_name from system.schema_columnfamilies where keyspace_name = '{}'; + SELECT columnfamily_name, column_name FROM system.schema_columns where keyspace_name ='{}'; """.format(self.configuration['keyspace']) results, error = self.run_query(query, None) - return results, error + results = json.loads(results) + + schema = {} + for row in results['rows']: + table_name = row['columnfamily_name'] + column_name = row['column_name'] + if table_name not in schema: + schema[table_name] = {'name': table_name, 'columns': []} + schema[table_name]['columns'].append(column_name) + + return schema.values() def run_query(self, query, user): connection = None @@ -67,9 +77,9 @@ def run_query(self, query, user): if self.configuration.get('username', '') and self.configuration.get('password', ''): auth_provider = PlainTextAuthProvider(username='{}'.format(self.configuration.get('username', '')), password='{}'.format(self.configuration.get('password', ''))) - connection = Cluster([self.configuration.get('host', '')], auth_provider=auth_provider) + connection = Cluster([self.configuration.get('host', '')], auth_provider=auth_provider, protocol_version=3) else: - connection = Cluster([self.configuration.get('host', '')]) + connection = Cluster([self.configuration.get('host', '')], protocol_version=3) session = connection.connect() session.set_keyspace(self.configuration['keyspace'])