You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tokens.py 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # -*- coding: utf-8 -*-
  2. #
  3. # Copyright (C) 2009-2018 the sqlparse authors and contributors
  4. # <see AUTHORS file>
  5. #
  6. # This module is part of python-sqlparse and is released under
  7. # the BSD License: https://opensource.org/licenses/BSD-3-Clause
  8. from sqlparse import tokens as T
  9. from sqlparse.compat import text_type
  10. class _CaseFilter(object):
  11. ttype = None
  12. def __init__(self, case=None):
  13. case = case or 'upper'
  14. self.convert = getattr(text_type, case)
  15. def process(self, stream):
  16. for ttype, value in stream:
  17. if ttype in self.ttype:
  18. value = self.convert(value)
  19. yield ttype, value
  20. class KeywordCaseFilter(_CaseFilter):
  21. ttype = T.Keyword
  22. class IdentifierCaseFilter(_CaseFilter):
  23. ttype = T.Name, T.String.Symbol
  24. def process(self, stream):
  25. for ttype, value in stream:
  26. if ttype in self.ttype and value.strip()[0] != '"':
  27. value = self.convert(value)
  28. yield ttype, value
  29. class TruncateStringFilter(object):
  30. def __init__(self, width, char):
  31. self.width = width
  32. self.char = char
  33. def process(self, stream):
  34. for ttype, value in stream:
  35. if ttype != T.Literal.String.Single:
  36. yield ttype, value
  37. continue
  38. if value[:2] == "''":
  39. inner = value[2:-2]
  40. quote = "''"
  41. else:
  42. inner = value[1:-1]
  43. quote = "'"
  44. if len(inner) > self.width:
  45. value = ''.join((quote, inner[:self.width], self.char, quote))
  46. yield ttype, value