docs: boolean executeInternal(String sql,
                            Map<String, ParameterBindingDTO> parameterBindings)
    throws SQLException
    {
      raiseSQLExceptionIfStatementIsClosed();
      connection.injectedDelay();
  
      logger.debug("execute: {}", sql);
  
      String trimmedSql = sql.trim();
  
      if (trimmedSql.length() >= 20
          && trimmedSql.toLowerCase().startsWith("set-sf-property"))
      {
        // deprecated: sfsql
        executeSetProperty(sql);
        return false;
      }
  
      SFBaseResultSet sfResultSet;
      try
      {
        sfResultSet = sfStatement.execute(sql, parameterBindings,
                                          SFStatement.CallingMethod.EXECUTE);
        sfResultSet.setSession(this.connection.getSfSession());
        if (resultSet != null)
        {
          openResultSets.add(resultSet);
        }
        resultSet = new SnowflakeResultSetV1(sfResultSet, this);
        queryID = sfResultSet.getQueryId();
  
        // Legacy behavior treats update counts as result sets for single-
        // statement execute, so we only treat update counts as update counts
        // if JDBC_EXECUTE_RETURN_COUNT_FOR_DML is set, or if a statement
        // is multi-statement
        if (!sfResultSet.getStatementType().isGenerateResultSet() &&
            (connection.getSfSession().isExecuteReturnCountForDML() ||
             sfStatement.hasChildren()))
        {
          updateCount = ResultUtil.calculateUpdateCount(sfResultSet);
          if (resultSet != null)
          {
            openResultSets.add(resultSet);
          }
          resultSet = null;
          return false;
        }
  
        updateCount = NO_UPDATES;
        return true;
      }
      catch (SFException ex)
      {
        throw new SnowflakeSQLException(ex.getCause(),
                                        ex.getSqlState(), ex.getVendorCode(), ex.getParams());
      }
    }