From fe69d94f3d2dcb37d69ac2d7a0f88ad5fce2ad5c Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 1 Mar 2011 11:56:33 +0200 Subject: Add support for embedded database schemas New options: --schema-format, --default-schema. New example: schema/embedded. --- odb/option-types.cxx | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 odb/option-types.cxx (limited to 'odb/option-types.cxx') diff --git a/odb/option-types.cxx b/odb/option-types.cxx new file mode 100644 index 0000000..b05fead --- /dev/null +++ b/odb/option-types.cxx @@ -0,0 +1,93 @@ +// file : odb/option-types.cxx +// author : Boris Kolpackov +// copyright : Copyright (c) 2009-2011 Code Synthesis Tools CC +// license : GNU GPL v3; see accompanying LICENSE file + +#include +#include +#include +#include // std::lower_bound + +#include + +using namespace std; + +// database +// +static const char* database_[] = +{ + "mysql", + "tracer" +}; + +const char* database:: +string () const +{ + return database_[v_]; +} + +istream& +operator>> (istream& is, database& db) +{ + string s; + is >> s; + + if (!is.fail ()) + { + const char** e (database_ + sizeof (database_) / sizeof (char*)); + const char** i (lower_bound (database_, e, s)); + + if (i != e && *i == s) + db = database::value (i - database_); + else + is.setstate (istream::failbit); + } + + return is; +} + +ostream& +operator<< (ostream& os, database db) +{ + return os << db.string (); +} + +// schema_format +// +static const char* schema_format_[] = +{ + "embedded", + "sql" +}; + +const char* schema_format:: +string () const +{ + return schema_format_[v_]; +} + +istream& +operator>> (istream& is, schema_format& sf) +{ + string s; + is >> s; + + if (!is.fail ()) + { + const char** e (schema_format_ + sizeof (schema_format_) / sizeof (char*)); + const char** i (lower_bound (schema_format_, e, s)); + + if (i != e && *i == s) + sf = schema_format::value (i - schema_format_); + else + is.setstate (istream::failbit); + } + + return is; +} + +ostream& +operator<< (ostream& os, schema_format sf) +{ + return os << sf.string (); +} -- cgit v1.1