RowDataDynamic
Date: 2018-05-06

com.mysql.jdbc

## Class RowDataDynamic

- java.lang.Object
- - com.mysql.jdbc.RowDataDynamic

- All Implemented Interfaces:
    RowData

      public class RowDataDynamic
      extends java.lang.Object
      implements RowData

  Allows streaming of MySQL data.

- - ### Field Summary

    - ### Fields inherited from interface com.mysql.jdbc.RowData

      `RESULT_SET_SIZE_UNKNOWN`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RowDataDynamic(MysqlIO io, int colCount, Field[] fields, boolean isBinaryEncoded)` Creates a new RowDataDynamic object.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addRow(ResultSetRow row)` Adds a row to this row data.
    `void` | `afterLast()` Moves to after last.
    `void` | `beforeFirst()` Moves to before first.
    `void` | `beforeLast()` Moves to before last so next el is the last el.
    `void` | `close()` We're done.
    `ResultSetRow` | `getAt(int ind)` Only works on non dynamic result sets.
    `int` | `getCurrentRowNumber()` Returns the current position in the result set as a row number.
    `ResultSetInternalMethods` | `getOwner()` Returns the result set that 'owns' this RowData
    `boolean` | `hasNext()` Returns true if another row exsists.
    `boolean` | `isAfterLast()` Returns true if we got the last element.
    `boolean` | `isBeforeFirst()` Returns if iteration has not occured yet.
    `boolean` | `isDynamic()` Returns true if the result set is dynamic.
    `boolean` | `isEmpty()` Has no records.
    `boolean` | `isFirst()` Are we on the first row of the result set?
    `boolean` | `isLast()` Are we on the last row of the result set?
    `void` | `moveRowRelative(int rows)` Moves the current position relative 'rows' from the current position.
    `ResultSetRow` | `next()` Returns the next row.
    `void` | `removeRow(int ind)` Removes the row at the given index.
    `void` | `setCurrentRow(int rowNumber)` Moves the current position in the result set to the given row number.
    `void` | `setMetadata(Field[] metadata)` Sometimes the driver doesn't have metadata until after the statement has the result set in-hand (because it's cached), so it can call this to set it after the fact.
    `void` | `setOwner(ResultSetImpl rs)` Set the result set that 'owns' this RowData
    `int` | `size()` Only works on non dynamic result sets.
    `boolean` | `wasEmpty()` Did this result set have no rows?

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### RowDataDynamic

          public RowDataDynamic(MysqlIO io,
                        int colCount,
                        Field[] fields,
                        boolean isBinaryEncoded)
                         throws java.sql.SQLException

      Creates a new RowDataDynamic object.
      Parameters:
        `io` - the connection to MySQL that this data is coming from
        `metadata` - the metadata that describe this data
        `isBinaryEncoded` - is this data in native format?
        `colCount` - the number of columns
      Throws:
        `java.sql.SQLException` - if the next record can not be found

  - ### Method Detail

    - #### addRow

          public void addRow(ResultSetRow row)
                      throws java.sql.SQLException

      Adds a row to this row data.
      Specified by:
        `addRow` in interface `RowData`
      Parameters:
        `row` - the row to add
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### afterLast

          public void afterLast()
                         throws java.sql.SQLException

      Moves to after last.
      Specified by:
        `afterLast` in interface `RowData`
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### beforeFirst

          public void beforeFirst()
                           throws java.sql.SQLException

      Moves to before first.
      Specified by:
        `beforeFirst` in interface `RowData`
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### beforeLast

          public void beforeLast()
                          throws java.sql.SQLException

      Moves to before last so next el is the last el.
      Specified by:
        `beforeLast` in interface `RowData`
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### close

          public void close()
                     throws java.sql.SQLException

      We're done.
      Specified by:
        `close` in interface `RowData`
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### getAt

          public ResultSetRow getAt(int ind)
                             throws java.sql.SQLException

      Only works on non dynamic result sets.
      Specified by:
        `getAt` in interface `RowData`
      Parameters:
        `index` - row number to get at
      Returns:
        row data at index
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### getCurrentRowNumber

          public int getCurrentRowNumber()
                                  throws java.sql.SQLException

      Returns the current position in the result set as a row number.
      Specified by:
        `getCurrentRowNumber` in interface `RowData`
      Returns:
        the current row number
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### getOwner

          public ResultSetInternalMethods getOwner()

      Description copied from interface: `RowData`
      Returns the result set that 'owns' this RowData
      Specified by:
        `getOwner` in interface `RowData`
      See Also:
        `RowData.getOwner()`

    - #### hasNext

          public boolean hasNext()
                          throws java.sql.SQLException

      Returns true if another row exsists.
      Specified by:
        `hasNext` in interface `RowData`
      Returns:
        true if more rows
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### isAfterLast

          public boolean isAfterLast()
                              throws java.sql.SQLException

      Returns true if we got the last element.
      Specified by:
        `isAfterLast` in interface `RowData`
      Returns:
        true if after last row
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### isBeforeFirst

          public boolean isBeforeFirst()
                                throws java.sql.SQLException

      Returns if iteration has not occured yet.
      Specified by:
        `isBeforeFirst` in interface `RowData`
      Returns:
        true if before first row
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### isDynamic

          public boolean isDynamic()

      Returns true if the result set is dynamic. This means that move back and move forward won't work because we do not hold on to the records.
      Specified by:
        `isDynamic` in interface `RowData`
      Returns:
        true if this result set is streaming from the server

    - #### isEmpty

          public boolean isEmpty()
                          throws java.sql.SQLException

      Has no records.
      Specified by:
        `isEmpty` in interface `RowData`
      Returns:
        true if no records
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### isFirst

          public boolean isFirst()
                          throws java.sql.SQLException

      Are we on the first row of the result set?
      Specified by:
        `isFirst` in interface `RowData`
      Returns:
        true if on first row
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### isLast

          public boolean isLast()
                         throws java.sql.SQLException

      Are we on the last row of the result set?
      Specified by:
        `isLast` in interface `RowData`
      Returns:
        true if on last row
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### moveRowRelative

          public void moveRowRelative(int rows)
                               throws java.sql.SQLException

      Moves the current position relative 'rows' from the current position.
      Specified by:
        `moveRowRelative` in interface `RowData`
      Parameters:
        `rows` - the relative number of rows to move
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### next

          public ResultSetRow next()
                            throws java.sql.SQLException

      Returns the next row.
      Specified by:
        `next` in interface `RowData`
      Returns:
        the next row value
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### removeRow

          public void removeRow(int ind)
                         throws java.sql.SQLException

      Removes the row at the given index.
      Specified by:
        `removeRow` in interface `RowData`
      Parameters:
        `index` - the row to move to
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### setCurrentRow

          public void setCurrentRow(int rowNumber)
                             throws java.sql.SQLException

      Moves the current position in the result set to the given row number.
      Specified by:
        `setCurrentRow` in interface `RowData`
      Parameters:
        `rowNumber` - row to move to
      Throws:
        `java.sql.SQLException` - if a database error occurs

    - #### setOwner

          public void setOwner(ResultSetImpl rs)

      Description copied from interface: `RowData`
      Set the result set that 'owns' this RowData
      Specified by:
        `setOwner` in interface `RowData`
      Parameters:
        `rs` - the result set that 'owns' this RowData
      See Also:
        `com.mysql.jdbc.RowData#setOwner(com.mysql.jdbc.ResultSetInternalMethods)`

    - #### size

          public int size()

      Only works on non dynamic result sets.
      Specified by:
        `size` in interface `RowData`
      Returns:
        the size of this row data

    - #### wasEmpty

          public boolean wasEmpty()

      Description copied from interface: `RowData`
      Did this result set have no rows?
      Specified by:
        `wasEmpty` in interface `RowData`

    - #### setMetadata

          public void setMetadata(Field[] metadata)

      Description copied from interface: `RowData`
      Sometimes the driver doesn't have metadata until after the statement has the result set in-hand (because it's cached), so it can call this to set it after the fact.
      Specified by:
        `setMetadata` in interface `RowData`
      Parameters:
        `metadata` - field-level metadata for the result set