diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-07-22 14:49:29 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-07-22 17:57:00 +0200 |
commit | 81ea37904e4959414b53b225b4b5e56e1b561bdc (patch) | |
tree | 6ae70d4adb9c0c3ed57679873de8061d5b9c5b19 /odb/relational/schema.hxx | |
parent | 246b1557bf84082cc72ec2cbe089262b21c8bc97 (diff) |
Add pragma for setting type's or member's default value
New pragma: default. New test: default.
Diffstat (limited to 'odb/relational/schema.hxx')
-rw-r--r-- | odb/relational/schema.hxx | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/odb/relational/schema.hxx b/odb/relational/schema.hxx index b218c2b..6ada960 100644 --- a/odb/relational/schema.hxx +++ b/odb/relational/schema.hxx @@ -190,8 +190,11 @@ namespace relational type (m); null (m); - constraints (m); - reference (m); + + // An id member cannot have a default value. + // + if (!m.count ("id")) + default_ (m); // If we have options, add them. // @@ -200,6 +203,9 @@ namespace relational if (!o.empty ()) os << " " << o; + constraints (m); + reference (m); + return true; } @@ -217,6 +223,49 @@ namespace relational } virtual void + default_null (semantics::data_member&) + { + os << " DEFAULT NULL"; + } + + virtual void + default_bool (semantics::data_member&, bool v) + { + // Most databases do not support boolean literals. Those that + // do should override this. + // + os << " DEFAULT " << (v ? "1" : "0"); + } + + virtual void + default_integer (semantics::data_member&, unsigned long long v, bool neg) + { + os << " DEFAULT " << (neg ? "-" : "") << v; + } + + virtual void + default_float (semantics::data_member&, double v) + { + os << " DEFAULT " << v; + } + + virtual void + default_string (semantics::data_member&, string const& v) + { + os << " DEFAULT " << quote_string (v); + } + + virtual void + default_enum (semantics::data_member&, + tree /*enumerator*/, + string const& /*name*/) + { + // Has to be implemented by the database-specific override. + // + assert (false); + } + + virtual void constraints (semantics::data_member& m) { if (m.count ("id")) @@ -234,6 +283,10 @@ namespace relational } protected: + void + default_ (semantics::data_member&); + + protected: string prefix_; }; |