aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/pgsql
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-07-22 14:49:29 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-07-22 17:57:00 +0200
commit81ea37904e4959414b53b225b4b5e56e1b561bdc (patch)
tree6ae70d4adb9c0c3ed57679873de8061d5b9c5b19 /odb/relational/pgsql
parent246b1557bf84082cc72ec2cbe089262b21c8bc97 (diff)
Add pragma for setting type's or member's default value
New pragma: default. New test: default.
Diffstat (limited to 'odb/relational/pgsql')
-rw-r--r--odb/relational/pgsql/schema.cxx37
1 files changed, 37 insertions, 0 deletions
diff --git a/odb/relational/pgsql/schema.cxx b/odb/relational/pgsql/schema.cxx
index b7901e5..6530e82 100644
--- a/odb/relational/pgsql/schema.cxx
+++ b/odb/relational/pgsql/schema.cxx
@@ -77,6 +77,43 @@ namespace relational
}
virtual void
+ default_bool (semantics::data_member&, bool v)
+ {
+ os << " DEFAULT " << (v ? "TRUE" : "FALSE");
+ }
+
+ virtual void
+ default_enum (semantics::data_member& m, tree en, string const&)
+ {
+ // Make sure the column is mapped to an integer type.
+ //
+ switch (column_sql_type (m).type)
+ {
+ case sql_type::SMALLINT:
+ case sql_type::INTEGER:
+ case sql_type::BIGINT:
+ break;
+ default:
+ {
+ cerr << m.file () << ":" << m.line () << ":" << m.column ()
+ << ": error: column with default value specified as C++ "
+ << "enumerator must map to PostgreSQL integer type" << endl;
+
+ throw generation_failed ();
+ }
+ }
+
+ using semantics::enumerator;
+
+ enumerator& e (dynamic_cast<enumerator&> (*unit.find (en)));
+
+ if (e.enum_ ().unsigned_ ())
+ os << " DEFAULT " << e.value ();
+ else
+ os << " DEFAULT " << static_cast<long long> (e.value ());
+ }
+
+ virtual void
reference (semantics::data_member&)
{
}