docs: def visit_update(self, update_stmt, **kw):
          """
          used to compile <sql.expression.Update> expressions
          Parts are taken from the SQLCompiler base class.
          """
  
          if not update_stmt.parameters and \
                  not hasattr(update_stmt, '_crate_specific'):
              return super(CrateCompiler, self).visit_update(update_stmt, **kw)
  
          self.isupdate = True
  
          extra_froms = update_stmt._extra_froms
  
          text = 'UPDATE '
  
          if update_stmt._prefixes:
              text += self._generate_prefixes(update_stmt,
                                              update_stmt._prefixes, **kw)
  
          table_text = self.update_tables_clause(update_stmt, update_stmt.table,
                                                 extra_froms, **kw)
  
          dialect_hints = None
          if update_stmt._hints:
              dialect_hints, table_text = self._setup_crud_hints(
                  update_stmt, table_text
              )
  
          crud_params = self._get_crud_params(update_stmt, **kw)
  
          text += table_text
  
          text += ' SET '
          include_table = extra_froms and \
              self.render_table_with_column_in_update_from
  
          set_clauses = []
  
          for k, v in crud_params:
              clause = k._compiler_dispatch(self,
                                            include_table=include_table) + \
                  ' = ' + v
              set_clauses.append(clause)
  
          for k, v in update_stmt.parameters.items():
              if isinstance(k, str) and '[' in k:
                  bindparam = sa.sql.bindparam(k, v)
                  set_clauses.append(k + ' = ' + self.process(bindparam))
  
          text += ', '.join(set_clauses)
  
          if self.returning or update_stmt._returning:
              if not self.returning:
                  self.returning = update_stmt._returning
              if self.returning_precedes_values:
                  text += " " + self.returning_clause(
                      update_stmt, self.returning)
  
          if extra_froms:
              extra_from_text = self.update_from_clause(
                  update_stmt,
                  update_stmt.table,
                  extra_froms,
                  dialect_hints,
                  **kw)
              if extra_from_text:
                  text += " " + extra_from_text
  
          if update_stmt._whereclause is not None:
              t = self.process(update_stmt._whereclause)
              if t:
                  text += " WHERE " + t
  
          limit_clause = self.update_limit_clause(update_stmt)
          if limit_clause:
              text += " " + limit_clause
  
          if self.returning and not self.returning_precedes_values:
              text += " " + self.returning_clause(
                  update_stmt, self.returning)
  
          return text