/**
   * Execute a SQL INSERT, UPDATE or DELETE statement. In addition SQL statements that return
   * nothing such as SQL DDL statements can be executed
   *
   * <p>Any IDs generated for AUTO_INCREMENT fields can be retrieved by casting this Statement to
   * org.gjt.mm.mysql.Statement and calling the getLastInsertID() method.
   *
   * @param Sql a SQL statement
   * @return either a row count, or 0 for SQL commands
   * @exception java.sql.SQLException if a database access error occurs
   */
  public int executeUpdate(String Sql) throws java.sql.SQLException {
    if (Driver.trace) {
      Object[] Args = {Sql};
      Debug.methodCall(this, "executeUpdate", Args);
    }

    if (_escapeProcessing) {
      Sql = _Escaper.escapeSQL(Sql);
    }

    if (Sql.indexOf("||") != -1) {
      Sql = _Escaper.doConcat(Sql);
    }

    // The checking and changing of catalogs
    // must happen in sequence, so synchronize
    // on the same mutex that _Conn is using

    ResultSet RS = null;

    synchronized (_Conn.getMutex()) {
      String OldCatalog = null;

      if (!_Conn.getCatalog().equals(_Catalog)) {
        OldCatalog = _Conn.getCatalog();
        _Conn.setCatalog(_Catalog);
      }

      RS = _Conn.execSQL(Sql, -1);

      RS.setConnection(_Conn);

      if (OldCatalog != null) {
        _Conn.setCatalog(OldCatalog);
      }
    }

    if (RS.reallyResult()) {
      throw new java.sql.SQLException("Results returned for UPDATE ONLY.", "01S03");
    } else {
      _update_count = RS.getUpdateCount();

      int truncated_update_count = 0;

      if (_update_count > Integer.MAX_VALUE) {
        truncated_update_count = Integer.MAX_VALUE;
      } else {
        truncated_update_count = (int) _update_count;
      }

      _last_insert_id = RS.getUpdateID();

      return truncated_update_count;
    }
  }
  /**
   * getUpdateCount returns the current result as an update count, if the result is a ResultSet or
   * there are no more results, -1 is returned. It should only be called once per result.
   *
   * @return the current result as an update count.
   * @exception java.sql.SQLException if a database access error occurs
   */
  public int getUpdateCount() throws java.sql.SQLException {
    if (Driver.trace) {
      Object[] Args = new Object[0];
      Debug.methodCall(this, "getUpdateCount", Args);
    }

    if (_Results == null) {
      return -1;
    }
    if (_Results.reallyResult()) {
      return -1;
    }

    int truncated_update_count = 0;

    if (_Results.getUpdateCount() > Integer.MAX_VALUE) {
      truncated_update_count = Integer.MAX_VALUE;
    } else {
      truncated_update_count = (int) _Results.getUpdateCount();
    }

    return truncated_update_count;
  }