diff options
author | Owen Stephens <owen@owenstephens.co.uk> | 2019-10-12 16:19:04 +0100 |
---|---|---|
committer | Owen Stephens <owen@owenstephens.co.uk> | 2019-10-12 16:19:15 +0100 |
commit | b401b16d9a4332b3af64a5ce12c8ce6727885917 (patch) | |
tree | 3427d1d05143da6466ecff5e9c4caae8a0014a7b /pgcli | |
parent | d5cdd2ad4ea5c70dae766f2e00a71510e9c76b58 (diff) |
Take account of table aliases when completing function args (#1048)
Diffstat (limited to 'pgcli')
-rw-r--r-- | pgcli/packages/sqlcompletion.py | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/pgcli/packages/sqlcompletion.py b/pgcli/packages/sqlcompletion.py index 85b3bb10..781a24ab 100644 --- a/pgcli/packages/sqlcompletion.py +++ b/pgcli/packages/sqlcompletion.py @@ -398,35 +398,11 @@ def suggest_based_on_last_token(token, stmt): if prev_prev_tok and prev_prev_tok.normalized == "INTO": return (Column(table_refs=stmt.get_tables("insert"), context="insert"),) # We're probably in a function argument list - return ( - Column( - table_refs=extract_tables(stmt.full_text), - local_tables=stmt.local_tables, - qualifiable=True, - ), - ) + return _suggest_expression(token_v, stmt) elif token_v == "set": return (Column(table_refs=stmt.get_tables(), local_tables=stmt.local_tables),) elif token_v in ("select", "where", "having", "order by", "distinct"): - # Check for a table alias or schema qualification - parent = (stmt.identifier and stmt.identifier.get_parent_name()) or [] - tables = stmt.get_tables() - if parent: - tables = tuple(t for t in tables if identifies(parent, t)) - return ( - Column(table_refs=tables, local_tables=stmt.local_tables), - Table(schema=parent), - View(schema=parent), - Function(schema=parent), - ) - else: - return ( - Column( - table_refs=tables, local_tables=stmt.local_tables, qualifiable=True - ), - Function(schema=None), - Keyword(token_v.upper()), - ) + return _suggest_expression(token_v, stmt) elif token_v == "as": # Don't suggest anything for aliases return () @@ -554,6 +530,30 @@ def suggest_based_on_last_token(token, stmt): return (Keyword(),) +def _suggest_expression(token_v, stmt): + """ + Return suggestions for an expression, taking account of the partially-typed + identifiers parent, which may be a table alias or schema name. + """ + parent = stmt.identifier.get_parent_name() if stmt.identifier else [] + tables = stmt.get_tables() + + if parent: + tables = tuple(t for t in tables if identifies(parent, t)) + return ( + Column(table_refs=tables, local_tables=stmt.local_tables), + Table(schema=parent), + View(schema=parent), + Function(schema=parent), + ) + + return ( + Column(table_refs=tables, local_tables=stmt.local_tables, qualifiable=True), + Function(schema=None), + Keyword(token_v.upper()), + ) + + def identifies(id, ref): """Returns true if string `id` matches TableReference `ref`""" |