保存数据库元数据
通常情况下,打开由其他应用程序(xSQL 或使用 C、C++、Java、C# 或 Python API 的嵌入式 SmartESQL 应用程序)创建的持久数据库是很有必要的。为了能够做到这一点,这两个应用程序必须使用完全相同的元数据(运行时选项、页面大小、设备、数据库参数和字典)。C API 函数 mco_db_save_metadata()
可以通过保存所有相关信息来实现此目的。
MCO_RET mco_db_save_metadata(
void* stream_handle,
mco_stream_write output_stream_writer,
mco_db_h db,
mco_bool save_defaults
);
前两个参数是流句柄和流写入函数(类似于 mco_db_save()
API 中使用的函数)。
- db :数据库连接
- save_defaults :表示如果参数值为默认值时是否写入该值。
MCO_NO
:表示只有与默认值不同的元数据会被写入配置文件。在此上下文中,默认值指的是通过mco_db_params_init()
函数创建的数据库参数的默认值。MCO_YES
:所有mco_db_params
字段值都会被写入元数据文件
例如:
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);
}
...
}
元数据以 JSON 格式保存。xSQL 可以从配置文件中按如下方式加载此元数据。
./xsql -c metadata.cfg