Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Metadata
PrevUpHomeNext

In the context of this library, metadata refers to information describing a column retrieved by the execution of a SQL query. The metadata class contains information about an individual column.

You may access metadata using results::meta or execution_state::meta. There is a metadata object per column retrieved by the query. The metadata objects are present even if no row was returned by the query (e.g. a SELECT on an empty table).

connection objects have an associated metadata_mode that describes how to handle metadata when running a query or a statement:

  • If connection::meta_mode is metadata_mode::minimal (the default), the library will retain the minimal amout of data required to run the operation. Additional information, like column names, won't be retained. Unless you are using metadata explicitly, you should keep this default, as it consumes slightly less memory.
  • If connection::meta_mode is metadata_mode::full, the library will retain all the information provided by the server, including column names.

Only the metadata members that are strings (database, table and field names) are affected by this setting. You may change this setting using connection::set_meta_mode.

For example:

// By default, a connection has metadata_mode::minimal
results result;
conn.query("SELECT 1 AS my_field", result);
string_view colname = result.meta()[0].column_name();

// colname will be empty because conn.meta_mode() == metadata_mode::minimal
ASSERT(colname == "");

// If you are using metadata names, set the connection's metadata_mode
conn.set_meta_mode(metadata_mode::full);
conn.query("SELECT 1 AS my_field", result);
colname = result.meta()[0].column_name();
ASSERT(colname == "my_field");

PrevUpHomeNext