| 197 | |
| 198 | |
| 199 | def get_completer(self, settings=None, casing=None): # pylint: disable=too-many-locals |
| 200 | metadata = self.metadata |
| 201 | comp = MssqlCompleter(smart_completion=True, settings=settings) |
| 202 | |
| 203 | schemas, tables, tbl_cols, views, view_cols = [], [], [], [], [] |
| 204 | |
| 205 | for sch, tbls in metadata['tables'].items(): |
| 206 | schemas.append(sch) |
| 207 | |
| 208 | for tbl, cols in tbls.items(): |
| 209 | tables.append((sch, tbl)) |
| 210 | # Let all columns be text columns |
| 211 | tbl_cols.extend([self._make_col(sch, tbl, col) |
| 212 | for col in cols]) |
| 213 | |
| 214 | for sch, tbls in metadata.get('views', {}).items(): |
| 215 | for tbl, cols in tbls.items(): |
| 216 | views.append((sch, tbl)) |
| 217 | # Let all columns be text columns |
| 218 | view_cols.extend([self._make_col(sch, tbl, col) |
| 219 | for col in cols]) |
| 220 | |
| 221 | functions = [ |
| 222 | FunctionMetadata(sch, *func_meta, arg_defaults=None) |
| 223 | for sch, funcs in metadata['functions'].items() |
| 224 | for func_meta in funcs] |
| 225 | |
| 226 | datatypes = [ |
| 227 | (sch, typ) |
| 228 | for sch, datatypes in metadata['datatypes'].items() |
| 229 | for typ in datatypes] |
| 230 | |
| 231 | foreignkeys = [ |
| 232 | ForeignKey(*fk) for fks in metadata['foreignkeys'].values() |
| 233 | for fk in fks] |
| 234 | |
| 235 | comp.extend_schemas(schemas) |
| 236 | comp.extend_relations(tables, kind='tables') |
| 237 | comp.extend_relations(views, kind='views') |
| 238 | comp.extend_columns(tbl_cols, kind='tables') |
| 239 | comp.extend_columns(view_cols, kind='views') |
| 240 | comp.extend_functions(functions) |
| 241 | comp.extend_datatypes(datatypes) |
| 242 | comp.extend_foreignkeys(foreignkeys) |
| 243 | comp.set_search_path(['public']) |
| 244 | comp.extend_casing(casing or []) |
| 245 | |
| 246 | return comp |