summaryrefslogtreecommitdiffstats
path: root/pgcli
diff options
context:
space:
mode:
authorOwen Stephens <owen@owenstephens.co.uk>2019-10-12 16:19:04 +0100
committerOwen Stephens <owen@owenstephens.co.uk>2019-10-12 16:19:15 +0100
commitb401b16d9a4332b3af64a5ce12c8ce6727885917 (patch)
tree3427d1d05143da6466ecff5e9c4caae8a0014a7b /pgcli
parentd5cdd2ad4ea5c70dae766f2e00a71510e9c76b58 (diff)
Take account of table aliases when completing function args (#1048)
Diffstat (limited to 'pgcli')
-rw-r--r--pgcli/packages/sqlcompletion.py52
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`"""