def create_cf_composite_key_declaration_completer(ctxt, cass): cols_declared = ctxt.get_binding("newcolname") pieces_already = ctxt.get_binding("ptkey", ()) + ctxt.get_binding("pkey", ()) pieces_already = map(dequote_name, pieces_already) while cols_declared[0] in pieces_already: cols_declared = cols_declared[1:] if len(cols_declared) < 2: return () return [maybe_escape_name(cols_declared[0])]
def insert_colname_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) colnames = set(map(dequote_name, ctxt.get_binding("colname", ()))) keycols = layout.primary_key for k in keycols: if k.name not in colnames: return [maybe_escape_name(k.name)] normalcols = set(regular_column_names(layout)) - colnames return map(maybe_escape_name, normalcols)
def create_cf_pkdef_declaration_completer(ctxt, cass): cols_declared = ctxt.get_binding('newcolname') pieces_already = ctxt.get_binding('ptkey', ()) pieces_already = map(dequote_name, pieces_already) while cols_declared[0] in pieces_already: cols_declared = cols_declared[1:] if len(cols_declared) < 2: return () return [maybe_escape_name(cols_declared[0])]
def update_countername_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) curcol = dequote_name(ctxt.get_binding('updatecol', '')) coltype = layout.columns[curcol].cql_type if coltype == 'counter': return [maybe_escape_name(curcol)] if coltype in ('map', 'set'): return ["{"] if coltype == 'list': return ["["] return [Hint('<term (%s)>' % coltype)]
def update_countername_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) curcol = dequote_name(ctxt.get_binding("updatecol", "")) cqltype = layout.columns[curcol].data_type coltype = cqltype.typename if coltype == "counter": return [maybe_escape_name(curcol)] if coltype in ("map", "set"): return ["{"] if coltype == "list": return ["["] return [Hint("<term (%s)>" % cqltype.cql_parameterized_type())]
def select_order_column_completer(ctxt, cass): prev_order_cols = ctxt.get_binding("ordercol", ()) keyname = ctxt.get_binding("keyname") if keyname is None: keyname = ctxt.get_binding("rel_lhs", ()) if not keyname: return [Hint("Can't ORDER BY here: need to specify partition key in WHERE clause")] layout = get_table_meta(ctxt, cass) order_by_candidates = [col.name for col in layout.clustering_key] if len(order_by_candidates) > len(prev_order_cols): return [maybe_escape_name(order_by_candidates[len(prev_order_cols)])] return [Hint("No more orderable columns here.")]
def insert_newval_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) insertcols = map(dequote_name, ctxt.get_binding("colname")) valuesdone = ctxt.get_binding("newval", ()) if len(valuesdone) >= len(insertcols): return [] curcol = insertcols[len(valuesdone)] cqltype = layout.columns[curcol].data_type coltype = cqltype.typename if coltype in ("map", "set"): return ["{"] if coltype == "list": return ["["] if coltype == "boolean": return ["true", "false"] return [Hint("<value for %s (%s)>" % (maybe_escape_name(curcol), cqltype.cql_parameterized_type()))]
def insert_newval_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) insertcols = map(dequote_name, ctxt.get_binding('colname')) valuesdone = ctxt.get_binding('newval', ()) if len(valuesdone) >= len(insertcols): return [] curcol = insertcols[len(valuesdone)] cqltype = layout.columns[curcol].data_type coltype = cqltype.typename if coltype in ('map', 'set'): return ['{'] if coltype == 'list': return ['['] if coltype == 'boolean': return ['true', 'false'] return [Hint('<value for %s (%s)>' % (maybe_escape_name(curcol), cqltype.cql_parameterized_type()))]
def update_listcol_completer(ctxt, cass): rhs = ctxt.get_binding("update_rhs") if rhs.startswith("["): colname = dequote_name(ctxt.get_binding("updatecol")) return [maybe_escape_name(colname)] return []
def cf_ks_name_completer(ctxt, cass): return [maybe_escape_name(ks) + "." for ks in cass.get_keyspace_names()]
def quote_name(name): return maybe_escape_name(name)
def idx_ks_name_completer(ctxt, cass): return [maybe_escape_name(ks) + '.' for ks in cass.get_keyspace_names()]
def update_listcol_completer(ctxt, cass): rhs = ctxt.get_binding('update_rhs') if rhs.startswith('['): colname = dequote_name(ctxt.get_binding('updatecol')) return [maybe_escape_name(colname)] return []