Directory
eXtremeDB_rt/samples/cursorDescription
demonstrates basic eXtremeDB/rt cursor operations
Used API
mco_cursor_first(), mco_cursor_next (), mco_cursor_last(), mco_cursor_prev(), mco_cursor_close(), Classname_index_cursor()
Code snippet
/* Navigate forward from first Record */ printf( "\n\n\tFirst %d records:", nRecs ); /* Open a read-only transaction */ rc = mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t ); if ( MCO_S_OK == rc ) { /* Open the cursor */ rc = Record_autoid_index_cursor( t, &csr ); if ( MCO_S_OK == rc ) { /* Get first record */ rc = mco_cursor_first( t, &csr ); /* Show first nRecs */ for ( i = 0; i < nRecs && MCO_S_OK == rc; i++ ) { /* Get Record from cursor */ rc = Record_from_cursor( t, &csr, &rec ); if ( MCO_S_OK == rc ) { Record_key_get( &rec, &key ); Record_name_get( &rec, name, (mco_uint2)sizeof(name), &size ); printf( "\n\t%d: %s", key, name ); /* Move to next item */ rc = mco_cursor_next( t, &csr ); } } printf ("\n\tCursor done, rc=%d\n", rc); /* Close cursor */ mco_cursor_close( t, &csr ); } /* Close the transaction */ mco_trans_rollback( t ); } /* Navigate backwards from last Record */ printf( "\n\n\tLast %d records:", nRecs ); /* Open a transaction */ rc = mco_trans_start( db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t ); if ( MCO_S_OK == rc ) { /* Open the cursor */ rc = Record_autoid_index_cursor( t, &csr ); if ( MCO_S_OK == rc ) { /* Move to last item */ rc = mco_cursor_last( t, &csr ); /* Show last nRecs */ for ( i = 0; i < nRecs && MCO_S_OK == rc; i++ ) { /* Get Record from cursor */ rc = Record_from_cursor( t, &csr, &rec ); if ( MCO_S_OK == rc ) { Record_key_get( &rec, &key ); Record_name_get( &rec, name, (mco_uint2)sizeof(name), &size ); printf( "\n\t%d: %s", key, name ); } /* Move to prev item */ rc = mco_cursor_prev( t, &csr ); } /* Close cursor */ mco_cursor_close( t, &csr );What to expect as an output
First 5 records: 0: Record 0000 1: Record 0001 2: Record 0002 3: Record 0003 4: Record 0004 Cursor done, rc=0 Last 5 records: 9: Record 0009 8: Record 0008 7: Record 0007 6: Record 0006 5: Record 0005