MCPcopy Create free account
hub / github.com/dbcli/mssql-cli / extract_table_identifiers

Function extract_table_identifiers

mssqlcli/packages/parseutils/tables.py:68–117  ·  view source on GitHub ↗

yields tuples of TableReference namedtuples

(token_stream, allow_functions=True)

Source from the content-addressed store, hash-verified

66
67
68def extract_table_identifiers(token_stream, allow_functions=True):
69 """yields tuples of TableReference namedtuples"""
70
71 # We need to do some massaging of the names because postgres is case-
72 # insensitive and '"Foo"' is not the same table as 'Foo' (while 'foo' is)
73 def parse_identifier(item):
74 name = item.get_real_name()
75 schema_name = item.get_parent_name()
76 alias = item.get_alias()
77 if not name:
78 schema_name = None
79 name = item.get_name()
80 alias = alias or name
81 schema_quoted = schema_name and item.value[0] == '"'
82 if schema_name and not schema_quoted:
83 schema_name = schema_name.lower()
84 quote_count = item.value.count('"')
85 name_quoted = quote_count > 2 or (quote_count and not schema_quoted)
86 alias_quoted = alias and item.value[-1] == '"'
87 if alias_quoted or name_quoted and not alias and name.islower():
88 alias = '"' + (alias or name) + '"'
89 if name and not name_quoted and not name.islower():
90 if not alias:
91 alias = name
92 name = name.lower()
93 return schema_name, name, alias
94
95 for item in token_stream:
96 if isinstance(item, IdentifierList):
97 for identifier in item.get_identifiers():
98 # Sometimes Keywords (such as FROM ) are classified as
99 # identifiers which don't have the get_real_name() method.
100 try:
101 schema_name = identifier.get_parent_name()
102 real_name = identifier.get_real_name()
103 is_function = (allow_functions and
104 _identifier_is_function(identifier))
105 except AttributeError:
106 continue
107 if real_name:
108 yield TableReference(schema_name, real_name,
109 identifier.get_alias(), is_function)
110 elif isinstance(item, Identifier):
111 schema_name, real_name, alias = parse_identifier(item)
112 is_function = allow_functions and _identifier_is_function(item)
113
114 yield TableReference(schema_name, real_name, alias, is_function)
115 elif isinstance(item, Function):
116 schema_name, real_name, alias = parse_identifier(item)
117 yield TableReference(None, real_name, alias, allow_functions)
118
119
120# extract_tables is inspired from examples in the sqlparse lib.

Callers 1

extract_tablesFunction · 0.85

Calls 2

_identifier_is_functionFunction · 0.85
parse_identifierFunction · 0.85

Tested by

no test coverage detected