protected boolean internalPrevious() throws SQLException {
      boolean ret = false;

      do {
         if (cursorPos > 1) {
            --cursorPos;
            ret = true;
         } else if (cursorPos == 1) {
            // decrement to before first
            --cursorPos;
            ret = false;
            break;
         }
      } while ((getShowDeleted() == false) && (rowDeleted() == true));

      /*
       * Each call to internalPrevious may move the cursor
       * over multiple rows, the absolute position moves one one row
       */
      if (ret == true)
         --absolutePos;
      else
         absolutePos = 0;

      return ret;
   }
Moves the cursor to the previous row in this <code>StreamingRowSetImpl</code>
object, skipping past deleted rows that are not visible; returns
<code>true</code> if the cursor is on a row in this rowset and
<code>false</code> when the cursor goes before the first row.
<P>
This method is called internally by the method <code>previous</code>.
<P>
This is a implementation only method and is not required as a standard
implementation of the <code>CachedRowSet</code> interface.

@return <code>true</code> if the cursor is on a row in this rowset;
        <code>false</code> when the cursor reaches the position before
        the first row
@throws SQLException if an error occurs
src/main/java/org/replicadb/rowset/StreamingRowSetImpl.java