Python sqlparse.tokens.Keyword() Examples
The following are 30
code examples of sqlparse.tokens.Keyword().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
sqlparse.tokens
, or try the search function
.
Example #1
Source File: aligned_indent.py From SublimeText-SQLTools with GNU General Public License v3.0 | 8 votes |
def _process_case(self, tlist): offset_ = len('case ') + len('when ') cases = tlist.get_cases(skip_ws=True) # align the end as well end_token = tlist.token_next_by(m=(T.Keyword, 'END'))[1] cases.append((None, [end_token])) condition_width = [len(' '.join(map(text_type, cond))) if cond else 0 for cond, _ in cases] max_cond_width = max(condition_width) for i, (cond, value) in enumerate(cases): # cond is None when 'else or end' stmt = cond[0] if cond else value[0] if i > 0: tlist.insert_before(stmt, self.nl( offset_ - len(text_type(stmt)))) if cond: ws = sql.Token(T.Whitespace, self.char * ( max_cond_width - condition_width[i])) tlist.insert_after(cond[-1], ws)
Example #2
Source File: grouping.py From SublimeText-SQLTools with GNU General Public License v3.0 | 7 votes |
def group_identifier_list(tlist): m_role = T.Keyword, ('null', 'role') sqlcls = (sql.Function, sql.Case, sql.Identifier, sql.Comparison, sql.IdentifierList, sql.Operation) ttypes = (T_NUMERICAL + T_STRING + T_NAME + (T.Keyword, T.Comment, T.Wildcard)) def match(token): return token.match(T.Punctuation, ',') def valid(token): return imt(token, i=sqlcls, m=m_role, t=ttypes) def post(tlist, pidx, tidx, nidx): return pidx, nidx valid_prev = valid_next = valid _group(tlist, sql.IdentifierList, match, valid_prev, valid_next, post, extend=True)
Example #3
Source File: sql.py From codenn with MIT License | 6 votes |
def get_type(self): """Returns the type of a statement. The returned value is a string holding an upper-cased reprint of the first DML or DDL keyword. If the first token in this group isn't a DML or DDL keyword "UNKNOWN" is returned. """ first_token = self.token_first() if first_token is None: # An "empty" statement that either has not tokens at all # or only whitespace tokens. return 'UNKNOWN' elif first_token.ttype in (T.Keyword.DML, T.Keyword.DDL): return first_token.normalized return 'UNKNOWN'
Example #4
Source File: sql.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 6 votes |
def get_type(self): """Returns the type of a statement. The returned value is a string holding an upper-cased reprint of the first DML or DDL keyword. If the first token in this group isn't a DML or DDL keyword "UNKNOWN" is returned. Whitespaces and comments at the beginning of the statement are ignored. """ first_token = self.token_first(ignore_comments=True) if first_token is None: # An "empty" statement that either has not tokens at all # or only whitespace tokens. return 'UNKNOWN' elif first_token.ttype in (T.Keyword.DML, T.Keyword.DDL): return first_token.normalized return 'UNKNOWN'
Example #5
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 6 votes |
def is_dmlddl_parenthesis(token): """ DMLかDDLの括弧判定 """ if not is_parenthesis(token): return False open_punc = token.token_next_match(0, T.Punctuation, '(') first = token_next_enable(token, open_punc) if first and first.ttype in (T.Keyword.DML, T.Keyword.DDL): return True if is_with(first): return True if is_parenthesis(first): return is_dmlddl_parenthesis(first) return False
Example #6
Source File: grouping.py From codenn with MIT License | 6 votes |
def group_where(tlist): [group_where(sgroup) for sgroup in tlist.get_sublists() if not isinstance(sgroup, sql.Where)] idx = 0 token = tlist.token_next_match(idx, T.Keyword, 'WHERE') stopwords = ('ORDER', 'GROUP', 'LIMIT', 'UNION', 'EXCEPT', 'HAVING') while token: tidx = tlist.token_index(token) end = tlist.token_next_match(tidx + 1, T.Keyword, stopwords) if end is None: end = tlist._groupable_tokens[-1] else: end = tlist.tokens[tlist.token_index(end) - 1] group = tlist.group_tokens(sql.Where, tlist.tokens_between(token, end), ignore_ws=True) idx = tlist.token_index(group) token = tlist.token_next_match(idx, T.Keyword, 'WHERE')
Example #7
Source File: sql.py From codenn with MIT License | 6 votes |
def _get_first_name(self, idx=None, reverse=False, keywords=False): """Returns the name of the first token with a name""" if idx and not isinstance(idx, int): idx = self.token_index(idx) + 1 tokens = self.tokens[idx:] if idx else self.tokens tokens = reversed(tokens) if reverse else tokens types = [T.Name, T.Wildcard, T.String.Symbol] if keywords: types.append(T.Keyword) for tok in tokens: if tok.ttype in types: return self._remove_quotes(tok.value) elif isinstance(tok, Identifier) or isinstance(tok, Function): return tok.get_name() return None
Example #8
Source File: mysql_handler.py From schematizer with Apache License 2.0 | 6 votes |
def _get_primary_key(self, def_tokens): EXPECT_PRIMARY = 0 EXPECT_KEY = 1 EXPECT_COLUMN = 2 state = EXPECT_PRIMARY for token in def_tokens: if state == EXPECT_PRIMARY and token.match(T.Keyword, 'PRIMARY'): state = EXPECT_KEY elif state == EXPECT_KEY and token.value.upper() == 'KEY': state = EXPECT_COLUMN elif state == EXPECT_COLUMN and isinstance(token, sql.Parenthesis): return [ self._clean_identifier_quotes(t.value) for t in token.tokens[1:-1] if t.ttype in (T.Name, T.Literal.String.Symbol) ] return []
Example #9
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def is_values_keyword(token): """ VALUES判定 """ return token.match(T.Keyword, "VALUES")
Example #10
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def is_from_keyword(token): """ 「FROM」判定 """ return token.match(T.Keyword, "FROM")
Example #11
Source File: grouping.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def group_as(tlist): def _right_valid(token): # Currently limited to DML/DDL. Maybe additional more non SQL reserved # keywords should appear here (see issue8). return not token.ttype in (T.DML, T.DDL) def _left_valid(token): if token.ttype is T.Keyword and token.value in ('NULL',): return True return token.ttype is not T.Keyword _group_left_right(tlist, T.Keyword, 'AS', sql.Identifier, check_right=_right_valid, check_left=_left_valid)
Example #12
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def is_distinct_keyword(token): """ 「DISTINCT」判定 """ return token.match(T.Keyword, "DISTINCT")
Example #13
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def is_null_keyword(token): """ 「NULL」文字列判定 """ return token.match(T.Keyword, "NULL")
Example #14
Source File: ctes.py From pgcli with BSD 3-Clause "New" or "Revised" License | 5 votes |
def extract_column_names(parsed): # Find the first DML token to check if it's a SELECT or INSERT/UPDATE/DELETE idx, tok = parsed.token_next_by(t=DML) tok_val = tok and tok.value.lower() if tok_val in ("insert", "update", "delete"): # Jump ahead to the RETURNING clause where the list of column names is idx, tok = parsed.token_next_by(idx, (Keyword, "returning")) elif not tok_val == "select": # Must be invalid CTE return () # The next token should be either a column name, or a list of column names idx, tok = parsed.token_next(idx, skip_ws=True, skip_cm=True) return tuple(t.get_name() for t in _identifiers(tok))
Example #15
Source File: sql.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def get_ordering(self): """Returns the ordering or ``None`` as uppercase string.""" ordering = self.token_next_by_type(0, T.Keyword.Order) if ordering is None: return None return ordering.value.upper()
Example #16
Source File: tokenutils.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def is_by_keyword(token): """ 「BY」判定 """ return token.match(T.Keyword, "BY")
Example #17
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def process(self, stack, stream): index = 7 stream = list(stream) stream.reverse() # Run over all tokens in the stream from the end for token_type, value in stream: index -= 1 # if index and token_type in Keyword: if index and token_type in Keyword and value == 'LIMIT': return stream[4 - index][1] return -1
Example #18
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _process_case(self, tlist): is_first = True num_offset = None case = tlist.tokens[0] outer_offset = self._get_offset(case) - len(case.value) self.offset += outer_offset for cond, value in tlist.get_cases(): if is_first: tcond = list(cond[0].flatten())[0] is_first = False num_offset = self._get_offset(tcond) - len(tcond.value) self.offset += num_offset continue if cond is None: token = value[0] else: token = cond[0] tlist.insert_before(token, self.nl()) # Line breaks on group level are done. Now let's add an offset of # 5 (=length of "when", "then", "else") and process subgroups. self.offset += 5 self._process_default(tlist) self.offset -= 5 if num_offset is not None: self.offset -= num_offset end = tlist.token_next_match(0, T.Keyword, 'END') tlist.insert_before(end, self.nl()) self.offset -= outer_offset
Example #19
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _process_having(self, tlist): token = tlist.token_next_match(0, T.Keyword, 'HAVING') try: tlist.insert_before(token, self.nl()) except ValueError: # issue121, errors in statement pass self.indent += 1 self._process_default(tlist) self.indent -= 1
Example #20
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _process_where(self, tlist): token = tlist.token_next_match(0, T.Keyword, 'WHERE') try: tlist.insert_before(token, self.nl()) except ValueError: # issue121, errors in statement pass self.indent += 1 self._process_default(tlist) self.indent -= 1
Example #21
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _split_statements(self, tlist): idx = 0 token = tlist.token_next_by_type(idx, (T.Keyword.DDL, T.Keyword.DML)) while token: prev = tlist.token_prev(tlist.token_index(token), False) if prev and prev.is_whitespace(): tlist.tokens.pop(tlist.token_index(prev)) # only break if it's not the first token if prev: nl = self.nl() tlist.insert_before(token, nl) token = tlist.token_next_by_type(tlist.token_index(token) + 1, (T.Keyword.DDL, T.Keyword.DML))
Example #22
Source File: filters.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _split_kwds(self, tlist): split_words = ('FROM', 'STRAIGHT_JOIN$', 'JOIN$', 'AND', 'OR', 'GROUP', 'ORDER', 'UNION', 'VALUES', 'SET', 'BETWEEN', 'EXCEPT', 'HAVING') def _next_token(i): t = tlist.token_next_match(i, T.Keyword, split_words, regex=True) if t and t.value.upper() == 'BETWEEN': t = _next_token(tlist.token_index(t) + 1) if t and t.value.upper() == 'AND': t = _next_token(tlist.token_index(t) + 1) return t idx = 0 token = _next_token(idx) added = set() while token: prev = tlist.token_prev(tlist.token_index(token), False) offset = 1 if prev and prev.is_whitespace() and prev not in added: tlist.tokens.pop(tlist.token_index(prev)) offset += 1 uprev = str(prev) if (prev and (uprev.endswith('\n') or uprev.endswith('\r'))): nl = tlist.token_next(token) else: nl = self.nl() added.add(nl) tlist.insert_before(token, nl) offset += 1 token = _next_token(tlist.token_index(nl) + offset)
Example #23
Source File: functions.py From uroboroSQL-formatter with BSD 3-Clause "New" or "Revised" License | 5 votes |
def __call__(self, stream): for token_type, value in stream: if token_type not in Whitespace: return token_type in Keyword and value == self.type
Example #24
Source File: sql_handler.py From mysql_streamer with Apache License 2.0 | 5 votes |
def does_rename_table(self): return any( token.match(Token.Keyword, 'rename') for token in self.token_matcher.get_remaining_tokens() )
Example #25
Source File: sql_handler.py From mysql_streamer with Apache License 2.0 | 5 votes |
def keyword_tokens(self): return [ token for token in self.statement.tokens if token.match(Token.Keyword, None) or token.match(Token.Keyword.DDL, None) ]
Example #26
Source File: test_grouping.py From codenn with MIT License | 5 votes |
def test_function_not_in(self): # issue183 p = sqlparse.parse('in(1, 2)')[0] self.assertEqual(len(p.tokens), 2) self.assertEqual(p.tokens[0].ttype, T.Keyword) self.assert_(isinstance(p.tokens[1], sql.Parenthesis))
Example #27
Source File: test_grouping.py From codenn with MIT License | 5 votes |
def test_identifier_as_invalid(self): # issue8 p = sqlparse.parse('foo as select *')[0] self.assert_(len(p.tokens), 5) self.assert_(isinstance(p.tokens[0], sql.Identifier)) self.assertEqual(len(p.tokens[0].tokens), 1) self.assertEqual(p.tokens[2].ttype, T.Keyword)
Example #28
Source File: test_grouping.py From codenn with MIT License | 5 votes |
def test_identifiers(self): s = 'select foo.bar from "myscheme"."table" where fail. order' parsed = sqlparse.parse(s)[0] self.ndiffAssertEqual(s, unicode(parsed)) self.assert_(isinstance(parsed.tokens[2], sql.Identifier)) self.assert_(isinstance(parsed.tokens[6], sql.Identifier)) self.assert_(isinstance(parsed.tokens[8], sql.Where)) s = 'select * from foo where foo.id = 1' parsed = sqlparse.parse(s)[0] self.ndiffAssertEqual(s, unicode(parsed)) self.assert_(isinstance(parsed.tokens[-1].tokens[-1].tokens[0], sql.Identifier)) s = 'select * from (select "foo"."id" from foo)' parsed = sqlparse.parse(s)[0] self.ndiffAssertEqual(s, unicode(parsed)) self.assert_(isinstance(parsed.tokens[-1].tokens[3], sql.Identifier)) s = "INSERT INTO `test` VALUES('foo', 'bar');" parsed = sqlparse.parse(s)[0] types = [l.ttype for l in parsed.tokens if not l.is_whitespace()] self.assertEquals(types, [T.DML, T.Keyword, None, T.Keyword, None, T.Punctuation]) s = "select 1.0*(a+b) as col, sum(c)/sum(d) from myschema.mytable" parsed = sqlparse.parse(s)[0] self.assertEqual(len(parsed.tokens), 7) self.assert_(isinstance(parsed.tokens[2], sql.IdentifierList)) self.assertEqual(len(parsed.tokens[2].tokens), 4) identifiers = list(parsed.tokens[2].get_identifiers()) self.assertEqual(len(identifiers), 2) self.assertEquals(identifiers[0].get_alias(), u"col")
Example #29
Source File: test_regressions.py From codenn with MIT License | 5 votes |
def test_dont_alias_keywords(): # The _group_left_right function had a bug where the check for the # left side wasn't handled correctly. In one case this resulted in # a keyword turning into an identifier. p = sqlparse.parse('FROM AS foo')[0] assert len(p.tokens) == 5 assert p.tokens[0].ttype is T.Keyword assert p.tokens[2].ttype is T.Keyword
Example #30
Source File: sql.py From codenn with MIT License | 5 votes |
def get_ordering(self): """Returns the ordering or ``None`` as uppercase string.""" ordering = self.token_next_by_type(0, T.Keyword.Order) if ordering is None: return None return ordering.value.upper()