diff options
Diffstat (limited to 'odb/relational/pgsql/model.cxx')
-rw-r--r-- | odb/relational/pgsql/model.cxx | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/odb/relational/pgsql/model.cxx b/odb/relational/pgsql/model.cxx index ff2ce39..7361c6e 100644 --- a/odb/relational/pgsql/model.cxx +++ b/odb/relational/pgsql/model.cxx @@ -4,6 +4,8 @@ #include <sstream> +#include <odb/diagnostics.hxx> + #include <odb/relational/model.hxx> #include <odb/relational/pgsql/common.hxx> @@ -23,6 +25,36 @@ namespace relational { object_columns (base const& x): base (x) {} + virtual void + traverse_object (semantics::class_& c) + { + base::traverse_object (c); + + if (context::top_object == &c) + { + // Make sure that the auto id type is INTEGER or BIGINT. + // + if (pkey_ != 0 && pkey_->auto_ ()) + { + // Should be a single column. + // + sema_rel::column& c (pkey_->contains_begin ()->column ()); + + // This should never fail since we have already parsed this. + // + sql_type const& t (parse_sql_type (c.type ())); + + if (t.type != sql_type::INTEGER && t.type != sql_type::BIGINT) + { + location const& l (c.get<location> ("cxx-location")); + error (l) << "automatically assigned object id must map " + << "to PostgreSQL INTEGER or BIGINT" << endl; + throw operation_failed (); + } + } + } + } + virtual string default_bool (semantics::data_member&, bool v) { |