It is often desirable to open a persistent database that has been created by another application (xSQL or an embedded eXtremeSQL application using the C, C++, Java, C# or Python APIs). In order to be able to do so, the two applications must use the exact same metadata (runtime options, page sizes, devices, database parameters and dictionary). The C API function
mco_db_save_metadata()
facilitates this purpose by saving all relevant information.MCO_RET mco_db_save_metadata(void* stream_handle, mco_stream_write output_stream_writer, mco_db_h db, mco_bool save_defaults);The first two parameters are the stream handle and the stream writer function (similar to that used with the
mco_db_save()
API), thedb
argument is the database connection andsave_defaults
indicates whether to write the parameter's value if that value is the default. (MCO_NO
indicates that only the metadata that is different from the defaults are written into the configuration file. In this context the defaults refer to the default values of the database parameters that are normally created through functionmco_db_params_init()
.Ifsave_defaults
isMCO_YES
, than all of themco_db_params
field values - several dozen values - are written into the metadata file).The usage is similar to
mco_db_save()
. For example:mco_size_sig_t file_writer(void *stream_handle, const void *from, mco_size_t nbytes) { return (mco_size_sig_t) fwrite(from, 1, nbytes, (FILE*) stream_handle); } main() { ... mco_db_connect(dbName, &db); FILE *f = fopen("metadata.cfg", "w"); if (f) { mco_db_save_metadata(f, file_writer, db, MCO_YES); fclose(f); } ... }The metadata is saved in
JSON
format. (This metadata can be loaded by xSQL from the configuration file as follows:)./xsql -c metadata.cfg