Save an entire class to an external file.
MCO_RET mco_class_save( /*IN*/ uint2 class_code,
/*IN*/ void * stream_handle,
/*IN*/ mco_stream_write output_stream_writer,
/*IN*/ mco_db_h db);
|
class_code |
Integer class code (from generated header file) |
| stream_handle | Handle to the output stream |
|
output_stream_writer |
|
|
db |
The database handle |
This function is used to stream the entire contents of a database class to permanent storage. Used together with
mco_class_load()an application can save and optionally load class data. Note that a transaction is opened implicitly for this operation – no transaction handle is required.The
mco_class_save()/mco_class_load()combination is compatible withmco_db_save()/mco_db_load(). That means that the application can save the entire database image withmco_db_save()and later load (or reload) the content of a particular class from the full image. Or it's possible to save the content of only one class withmco_class_save()and then use this image to create a database with themco_db_load().See the control structure stream writer for further details.
| MCO_S_OK | The database was closed successfully |
| MCO_E_NOINSTANCE | The specified database is not opened |
| MCO_E_WRITE_STREAM | Error writing to output stream |
Application snippet:
const char * dbname = "SimpleDb";
/* Stream writer with prototype mco_stream_write */
mco_size_sig_t file_writer( void *stream_handle /* FILE * */, const void *from, mco_size_t nbytes )
{
FILE *f = (FILE *)stream_handle;
mco_size_sig_t nbs;
nbs = fwrite( from, 1, nbytes, f );
return nbs;
}
int main(int argc, char* argv[])
{
mco_db_h db;
MCO_RET rc;
FILE * fbak;
uint2 my_class_code = 1;
...
if( (rc = mco_runtime_start()) != MCO_S_OK)
exit(-1);
rc = mco_db_open_dev( dbname, simpledb_get_dictionary(), &dev, 1, &db_params );
if ( MCO_S_OK != rc )
{
rc = mco_db_connect(dbname, &db);
...
/* Backup database */
fbak = fopen( "myclass.bak", "wb" );
if ( fbak == 0 )
{
printf( "\n\t Can't open output file for streaming\n");
}
else
{
rc = mco_class_save( my_class_code, (void *)fbak, file_writer, db );
fclose( fbak );
sample_rc_check( "\t Save class", rc );
}
...
}
}