/* OpenRow * open currently closed row indicated by row id */ LIB_EXPORT rc_t CC VCursorOpenRow ( const VCursor *cself ) { rc_t rc; VCursor *self = ( VCursor* ) cself; if ( self == NULL ) rc = RC ( rcVDB, rcCursor, rcOpening, rcSelf, rcNull ); else if ( self -> state < vcReady ) rc = RC ( rcVDB, rcCursor, rcOpening, rcRow, rcIncomplete ); else if ( self -> state > vcReady ) rc = 0; else rc = VCursorOpenRowRead ( self ); return rc; }
/* OpenRow * open currently closed row indicated by row id */ LIB_EXPORT rc_t CC VCursorOpenRow ( const VCursor *cself ) { rc_t rc; VCursor *self = ( VCursor* ) cself; if ( self == NULL ) rc = RC ( rcVDB, rcCursor, rcOpening, rcSelf, rcNull ); else if ( self -> state != vcReady ) { switch ( self -> state ) { case vcConstruct: rc = RC ( rcVDB, rcCursor, rcOpening, rcRow, rcIncomplete ); break; case vcFailed: rc = RC ( rcVDB, rcCursor, rcOpening, rcCursor, rcInvalid ); break; case vcRowOpen: rc = 0; break; default: rc = RC ( rcVDB, rcCursor, rcOpening, rcRow, rcBusy ); } } else if ( self -> read_only ) rc = VCursorOpenRowRead ( self ); else { /* validate that all columns have the same starting row_id */ int64_t row_id = self -> row_id; VectorForEach ( & self -> row, false, WColumnOpenRow, & row_id ); assert ( row_id == self -> row_id ); self -> state = vcRowOpen; rc = 0; } return rc; }