| 69 | |
| 70 | |
| 71 | class MssqlCompleter(Completer): |
| 72 | # keywords_tree: A dict mapping keywords to well known following keywords. |
| 73 | # e.g. 'CREATE': ['TABLE', 'USER', ...], |
| 74 | keywords_tree = get_literals('keywords', type_=dict) |
| 75 | keywords = tuple(set(chain(keywords_tree.keys(), *keywords_tree.values()))) |
| 76 | functions = get_literals('functions') |
| 77 | datatypes = get_literals('datatypes') |
| 78 | reserved_words = set(get_literals('reserved')) |
| 79 | |
| 80 | def __init__(self, smart_completion=True, settings=None): |
| 81 | super(MssqlCompleter, self).__init__() |
| 82 | self.smart_completion = smart_completion |
| 83 | self.prioritizer = PrevalenceCounter() |
| 84 | settings = settings or {} |
| 85 | self.signature_arg_style = settings.get( |
| 86 | 'signature_arg_style', '{arg_name} {arg_type}' |
| 87 | ) |
| 88 | self.call_arg_style = settings.get( |
| 89 | 'call_arg_style', '{arg_name: <{max_arg_len}} := {arg_default}' |
| 90 | ) |
| 91 | self.call_arg_display_style = settings.get( |
| 92 | 'call_arg_display_style', '{arg_name}' |
| 93 | ) |
| 94 | self.call_arg_oneliner_max = settings.get('call_arg_oneliner_max', 2) |
| 95 | self.search_path_filter = settings.get('search_path_filter') |
| 96 | self.generate_aliases = settings.get('generate_aliases') |
| 97 | self.casing_file = settings.get('casing_file') |
| 98 | self.insert_col_skip_patterns = [ |
| 99 | re.compile(pattern) for pattern in settings.get( |
| 100 | 'insert_col_skip_patterns', |
| 101 | [r'^now\(\)$', r'^nextval\('] |
| 102 | ) |
| 103 | ] |
| 104 | self.generate_casing_file = settings.get('generate_casing_file') |
| 105 | self.qualify_columns = settings.get( |
| 106 | 'qualify_columns', 'if_more_than_one_table') |
| 107 | self.asterisk_column_order = settings.get( |
| 108 | 'asterisk_column_order', 'table_order') |
| 109 | |
| 110 | keyword_casing = settings.get('keyword_casing', 'upper').lower() |
| 111 | if keyword_casing not in ('upper', 'lower', 'auto'): |
| 112 | keyword_casing = 'upper' |
| 113 | self.keyword_casing = keyword_casing |
| 114 | self.name_pattern = re.compile(r"^[_a-z][_a-z0-9\$]*$") |
| 115 | |
| 116 | self.databases = [] |
| 117 | self.dbmetadata = {'tables': {}, 'views': {}, 'functions': {}, |
| 118 | 'datatypes': {}} |
| 119 | self.search_path = [] |
| 120 | self.casing = {} |
| 121 | |
| 122 | self.all_completions = set(self.keywords + self.functions) |
| 123 | |
| 124 | # initialize attributes to be set later |
| 125 | self._arg_list_cache = None |
| 126 | self.special_commands = None |
| 127 | |
| 128 | @staticmethod |