docs: def rewrite_update(clauseelement, multiparams, params):
      """ change the params to enable partial updates
  
      sqlalchemy by default only supports updates of complex types in the form of
  
          "col = ?", ({"x": 1, "y": 2}
  
      but crate supports
  
          "col['x'] = ?, col['y'] = ?", (1, 2)
  
      by using the `Craty` (`MutableDict`) type.
      The update statement is only rewritten if an item of the MutableDict was
      changed.
      """
      newmultiparams = []
      _multiparams = multiparams[0]
      if len(_multiparams) == 0:
          return clauseelement, multiparams, params
      for _params in _multiparams:
          newparams = {}
          for key, val in _params.items():
              if (
                  not isinstance(val, MutableDict) or
                  (not any(val._changed_keys) and not any(val._deleted_keys))
              ):
                  newparams[key] = val
                  continue
  
              for subkey, subval in val.items():
                  if subkey in val._changed_keys:
                      newparams["{0}['{1}']".format(key, subkey)] = subval
              for subkey in val._deleted_keys:
                  newparams["{0}['{1}']".format(key, subkey)] = None
          newmultiparams.append(newparams)
      _multiparams = (newmultiparams, )
      clause = clauseelement.values(newmultiparams[0])
      clause._crate_specific = True
      return clause, _multiparams, params