| Viewing file:  json.py (2 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
# mysql/json.py# Copyright (C) 2005-2021 the SQLAlchemy authors and contributors
 # <see AUTHORS file>
 #
 # This module is part of SQLAlchemy and is released under
 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
 from __future__ import absolute_import
 
 from ... import types as sqltypes
 
 
 class JSON(sqltypes.JSON):
 """MySQL JSON type.
 
 MySQL supports JSON as of version 5.7.
 MariaDB supports JSON (as an alias for LONGTEXT) as of version 10.2.
 
 The :class:`.mysql.JSON` type supports persistence of JSON values
 as well as the core index operations provided by :class:`_types.JSON`
 datatype, by adapting the operations to render the ``JSON_EXTRACT``
 function at the database level.
 
 .. versionadded:: 1.1
 
 """
 
 pass
 
 
 class _FormatTypeMixin(object):
 def _format_value(self, value):
 raise NotImplementedError()
 
 def bind_processor(self, dialect):
 super_proc = self.string_bind_processor(dialect)
 
 def process(value):
 value = self._format_value(value)
 if super_proc:
 value = super_proc(value)
 return value
 
 return process
 
 def literal_processor(self, dialect):
 super_proc = self.string_literal_processor(dialect)
 
 def process(value):
 value = self._format_value(value)
 if super_proc:
 value = super_proc(value)
 return value
 
 return process
 
 
 class JSONIndexType(_FormatTypeMixin, sqltypes.JSON.JSONIndexType):
 def _format_value(self, value):
 if isinstance(value, int):
 value = "$[%s]" % value
 else:
 value = '$."%s"' % value
 return value
 
 
 class JSONPathType(_FormatTypeMixin, sqltypes.JSON.JSONPathType):
 def _format_value(self, value):
 return "$%s" % (
 "".join(
 [
 "[%s]" % elem if isinstance(elem, int) else '."%s"' % elem
 for elem in value
 ]
 )
 )
 
 |