Metadata

public virtual const const metadata& meta(int icol);
public const const metadata& meta(const std::string& colname);
public virtual int ncolumns(const = 0;);

provider_data has this member:

public mutable std::vector<cell> row;

and cell is:

struct cell : public metadata

Each element of the row has both data and metadata. The row should be resized, and its metadata set, as soon as the number of columns is known and metadata are available.