| 165 | return (sch, tbl, col, "text", (tbl, col) in defaults, defaults.get((tbl, col))) |
| 166 | |
| 167 | def get_completer(self, settings=None, casing=None): |
| 168 | metadata = self.metadata |
| 169 | from pgcli.pgcompleter import PGCompleter |
| 170 | from pgspecial import PGSpecial |
| 171 | |
| 172 | comp = PGCompleter(smart_completion=True, settings=settings, pgspecial=PGSpecial()) |
| 173 | |
| 174 | schemata, tables, tbl_cols, views, view_cols = [], [], [], [], [] |
| 175 | |
| 176 | for sch, tbls in metadata["tables"].items(): |
| 177 | schemata.append(sch) |
| 178 | |
| 179 | for tbl, cols in tbls.items(): |
| 180 | tables.append((sch, tbl)) |
| 181 | # Let all columns be text columns |
| 182 | tbl_cols.extend([self._make_col(sch, tbl, col) for col in cols]) |
| 183 | |
| 184 | for sch, tbls in metadata.get("views", {}).items(): |
| 185 | for tbl, cols in tbls.items(): |
| 186 | views.append((sch, tbl)) |
| 187 | # Let all columns be text columns |
| 188 | view_cols.extend([self._make_col(sch, tbl, col) for col in cols]) |
| 189 | |
| 190 | functions = [ |
| 191 | FunctionMetadata(sch, *func_meta, arg_defaults=None) for sch, funcs in metadata["functions"].items() for func_meta in funcs |
| 192 | ] |
| 193 | |
| 194 | datatypes = [(sch, typ) for sch, datatypes in metadata["datatypes"].items() for typ in datatypes] |
| 195 | |
| 196 | foreignkeys = [ForeignKey(*fk) for fks in metadata["foreignkeys"].values() for fk in fks] |
| 197 | |
| 198 | comp.extend_schemata(schemata) |
| 199 | comp.extend_relations(tables, kind="tables") |
| 200 | comp.extend_relations(views, kind="views") |
| 201 | comp.extend_columns(tbl_cols, kind="tables") |
| 202 | comp.extend_columns(view_cols, kind="views") |
| 203 | comp.extend_functions(functions) |
| 204 | comp.extend_datatypes(datatypes) |
| 205 | comp.extend_foreignkeys(foreignkeys) |
| 206 | comp.set_search_path(["public"]) |
| 207 | comp.extend_casing(casing or []) |
| 208 | |
| 209 | return comp |