docs: @Override
    public void registerOutParameter(int parameterIndex, int sqlType)
        throws SQLException {
      checkClosed();
      switch (sqlType) {
        case Types.TINYINT:
          // we don't have a TINYINT type use SMALLINT
          sqlType = Types.SMALLINT;
          break;
        case Types.LONGVARCHAR:
          sqlType = Types.VARCHAR;
          break;
        case Types.DECIMAL:
          sqlType = Types.NUMERIC;
          break;
        case Types.FLOAT:
          // float is the same as double
          sqlType = Types.DOUBLE;
          break;
        case Types.VARBINARY:
        case Types.LONGVARBINARY:
          sqlType = Types.BINARY;
          break;
        case Types.BOOLEAN:
          sqlType = Types.BIT;
          break;
        default:
          break;
      }
      if (!isFunction) {
        throw new PSQLException(
            GT.tr(
                "This statement does not declare an OUT parameter.  Use '{' ?= call ... '}' to declare one."),
            PSQLState.STATEMENT_NOT_ALLOWED_IN_FUNCTION_CALL);
      }
      checkIndex(parameterIndex, false);
  
      preparedParameters.registerOutParameter(parameterIndex, sqlType);
      // functionReturnType contains the user supplied value to check
      // testReturn contains a modified version to make it easier to
      // check the getXXX methods..
      functionReturnType[parameterIndex - 1] = sqlType;
      testReturn[parameterIndex - 1] = sqlType;
  
      if (functionReturnType[parameterIndex - 1] == Types.CHAR
          || functionReturnType[parameterIndex - 1] == Types.LONGVARCHAR) {
        testReturn[parameterIndex - 1] = Types.VARCHAR;
      } else if (functionReturnType[parameterIndex - 1] == Types.FLOAT) {
        testReturn[parameterIndex - 1] = Types.REAL; // changes to streamline later error checking
      }
      returnTypeSet = true;
    }