You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2018/01/15 14:07:49 UTC
[15/23] cassandra git commit: Merge branch 'cassandra-2.1' into
cassandra-2.2
http://git-wip-us.apache.org/repos/asf/cassandra/blob/503aec74/pylib/cqlshlib/copyutil.py
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/copyutil.py
index b72b517,85e2678..c9c5829
--- a/pylib/cqlshlib/copyutil.py
+++ b/pylib/cqlshlib/copyutil.py
@@@ -150,37 -129,28 +150,37 @@@ class SendingChannel(object)
def num_pending(self):
return self.pending_messages.qsize() if self.pending_messages else 0
- def recv(self):
- with self.rlock:
- return self.reader.recv()
+ def close(self):
+ self.pipe.close()
+
+
+class SendingChannels(object):
+ """
+ A group of one way channels for sending messages.
+ """
+ def __init__(self, num_channels):
+ self.pipes = [OneWayPipe() for _ in xrange(num_channels)]
+ self.channels = [SendingChannel(p) for p in self.pipes]
+ self.num_channels = num_channels
def close(self):
- self.reader.close()
- self.writer.close()
+ for ch in self.channels:
+ try:
+ ch.close()
- except:
++ except Exception:
+ pass
-class OneWayChannels(object):
+class ReceivingChannels(object):
"""
- A group of one way channels.
+ A group of one way channels for receiving messages.
"""
def __init__(self, num_channels):
- self.channels = [OneWayChannel() for _ in xrange(num_channels)]
- self._readers = [ch.reader for ch in self.channels]
- self._rlocks = [ch.rlock for ch in self.channels]
- self._rlocks_by_readers = dict([(ch.reader, ch.rlock) for ch in self.channels])
+ self.pipes = [OneWayPipe() for _ in xrange(num_channels)]
+ self.channels = [ReceivingChannel(p) for p in self.pipes]
+ self._readers = [p.reader for p in self.pipes]
+ self._rlocks = [p.rlock for p in self.pipes]
+ self._rlocks_by_readers = dict([(p.reader, p.rlock) for p in self.pipes])
self.num_channels = num_channels
self.recv = self.recv_select if IS_LINUX else self.recv_polling
http://git-wip-us.apache.org/repos/asf/cassandra/blob/503aec74/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/cql3handling.py
index 897ee16,012e383..8224ad9
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@@ -34,7 -34,8 +34,8 @@@ class UnexpectedTableStructure(UserWarn
def __str__(self):
return 'Unexpected table structure; may not translate correctly to CQL. ' + self.msg
+
-SYSTEM_KEYSPACES = ('system', 'system_traces', 'system_auth')
+SYSTEM_KEYSPACES = ('system', 'system_traces', 'system_auth', 'system_distributed')
NONALTERBALE_KEYSPACES = ('system')
@@@ -785,10 -691,17 +792,11 @@@ def select_relation_lhs_completer(ctxt
filterable.add(layout.clustering_key[num].name)
else:
break
- for cd in layout.columns.values():
- if cd.index:
- filterable.add(cd.name)
+ for idx in layout.indexes.itervalues():
+ filterable.add(idx.index_options["target"])
return map(maybe_escape_name, filterable)
+
-@completer_for('selectClause', 'star')
-def select_count_star_completer(ctxt, cass):
- return ['*']
-
-
explain_completion('selector', 'colname')
syntax_rules += r'''
@@@ -1178,12 -1076,11 +1193,13 @@@ explain_completion('createUserTypeState
@completer_for('createIndexStatement', 'col')
def create_index_col_completer(ctxt, cass):
+ """ Return the columns for which an index doesn't exist yet. """
layout = get_table_meta(ctxt, cass)
- colnames = [cd.name for cd in layout.columns.values() if not cd.index]
+ idx_targets = [idx.index_options["target"] for idx in layout.indexes.itervalues()]
+ colnames = [cd.name for cd in layout.columns.values() if cd.name not in idx_targets]
return map(maybe_escape_name, colnames)
+
syntax_rules += r'''
<dropKeyspaceStatement> ::= "DROP" "KEYSPACE" ("IF" "EXISTS")? ksname=<nonSystemKeyspaceName>
;
@@@ -1403,20 -1246,6 +1421,21 @@@ def username_name_completer(ctxt, cass)
return [maybe_quote(row.values()[0].replace("'", "''")) for row in session.execute("LIST USERS")]
+@completer_for('rolename', 'role')
+def rolename_completer(ctxt, cass):
+ def maybe_quote(name):
+ if CqlRuleSet.is_valid_cql3_name(name):
+ return name
+ return "'%s'" % name
+
+ # disable completion for CREATE ROLE.
+ if ctxt.matched[0][1].upper() == 'CREATE':
+ return [Hint('<rolename>')]
+
+ session = cass.session
+ return [maybe_quote(row[0].replace("'", "''")) for row in session.execute("LIST ROLES")]
+
++
syntax_rules += r'''
<createTriggerStatement> ::= "CREATE" "TRIGGER" ( "IF" "NOT" "EXISTS" )? <cident>
"ON" cf=<columnFamilyName> "USING" class=<stringLiteral>
http://git-wip-us.apache.org/repos/asf/cassandra/blob/503aec74/pylib/cqlshlib/displaying.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/503aec74/pylib/cqlshlib/formatting.py
----------------------------------------------------------------------
diff --cc pylib/cqlshlib/formatting.py
index dcd08da,eac1810..f88fc5d
--- a/pylib/cqlshlib/formatting.py
+++ b/pylib/cqlshlib/formatting.py
@@@ -53,7 -50,9 +54,8 @@@ def _make_turn_bits_red_f(color1, color
return color1 + txt + color2
return _turn_bits_red
+
default_null_placeholder = 'null'
-default_time_format = ''
default_float_precision = 3
default_colormap = DEFAULT_VALUE_COLORS
empty_colormap = defaultdict(lambda: '')
@@@ -97,24 -96,7 +99,25 @@@ def color_text(bval, colormap, displayw
displaywidth -= bval.count(r'\\')
return FormattedValue(bval, coloredval, displaywidth)
+
+DEFAULT_NANOTIME_FORMAT = '%H:%M:%S.%N'
+DEFAULT_DATE_FORMAT = '%Y-%m-%d'
+DEFAULT_TIMESTAMP_FORMAT = '%Y-%m-%d %H:%M:%S%z'
+
+if platform.system() == 'Windows':
+ DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S %Z'
+
+
+class DateTimeFormat():
+
+ def __init__(self, timestamp_format=DEFAULT_TIMESTAMP_FORMAT, date_format=DEFAULT_DATE_FORMAT,
+ nanotime_format=DEFAULT_NANOTIME_FORMAT, timezone=None):
+ self.timestamp_format = timestamp_format
+ self.date_format = date_format
+ self.nanotime_format = nanotime_format
+ self.timezone = timezone
+
+
def format_value_default(val, colormap, **_):
val = str(val)
escapedval = val.replace('\\', '\\\\')
@@@ -146,8 -129,10 +150,10 @@@ def formatter_for(typname)
@formatter_for('bytearray')
def format_value_blob(val, colormap, **_):
- bval = '0x' + binascii.hexlify(str(val))
+ bval = '0x' + binascii.hexlify(val)
return colorme(bval, colormap, 'blob')
+
+
formatter_for('buffer')(format_value_blob)
@@@ -311,14 -290,18 +320,16 @@@ def format_value_tuple(val, encoding, c
@formatter_for('set')
-def format_value_set(val, encoding, colormap, time_format, float_precision, nullval,
+def format_value_set(val, encoding, colormap, date_time_format, float_precision, nullval,
decimal_sep, thousands_sep, boolean_styles, **_):
return format_simple_collection(sorted(val), '{', '}', encoding, colormap,
- time_format, float_precision, nullval,
+ date_time_format, float_precision, nullval,
decimal_sep, thousands_sep, boolean_styles)
+
+
formatter_for('frozenset')(format_value_set)
-# This code is used by cqlsh (bundled driver version 2.7.2 using sortedset),
-# and the dtests, which use whichever driver on the machine, i.e. 3.0.0 (SortedSet)
-formatter_for('SortedSet')(format_value_set)
formatter_for('sortedset')(format_value_set)
+formatter_for('SortedSet')(format_value_set)
@formatter_for('dict')
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org