From b8554760aa3a5c5697c77d11e507a2bb46dbf8e4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 10 Jul 2012 15:17:16 +0200 Subject: Add support for custom database type mapping New pragma qualifier, map, and specifiers: as, to, from. New tests: /custom. --- odb/validator.cxx | 102 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 44 deletions(-) (limited to 'odb/validator.cxx') diff --git a/odb/validator.cxx b/odb/validator.cxx index b0a6492..597da01 100644 --- a/odb/validator.cxx +++ b/odb/validator.cxx @@ -11,6 +11,8 @@ #include #include +#include + using namespace std; namespace @@ -1230,61 +1232,73 @@ void validator:: validate (options const& ops, features& f, semantics::unit& u, - semantics::path const&, + semantics::path const& p, unsigned short pass) { - auto_ptr ctx (create_context (cerr, u, ops, f, 0)); - bool valid (true); - if (pass == 1) - { - traversal::unit unit; - traversal::defines unit_defines; - traversal::declares unit_declares; - typedefs1 unit_typedefs (unit_declares); - traversal::namespace_ ns; - value_type vt (valid); - class1 c (valid, vt); - - unit >> unit_defines >> ns; - unit_defines >> c; - unit >> unit_declares >> vt; - unit >> unit_typedefs >> c; - - traversal::defines ns_defines; - traversal::declares ns_declares; - typedefs1 ns_typedefs (ns_declares); - - ns >> ns_defines >> ns; - ns_defines >> c; - ns >> ns_declares >> vt; - ns >> ns_typedefs >> c; - - unit.dispatch (u); - } - else { - traversal::unit unit; - traversal::defines unit_defines; - typedefs unit_typedefs (true); - traversal::namespace_ ns; - class2 c (valid); + auto_ptr ctx (create_context (cerr, u, ops, f, 0)); + + if (pass == 1) + { + traversal::unit unit; + traversal::defines unit_defines; + traversal::declares unit_declares; + typedefs1 unit_typedefs (unit_declares); + traversal::namespace_ ns; + value_type vt (valid); + class1 c (valid, vt); + + unit >> unit_defines >> ns; + unit_defines >> c; + unit >> unit_declares >> vt; + unit >> unit_typedefs >> c; + + traversal::defines ns_defines; + traversal::declares ns_declares; + typedefs1 ns_typedefs (ns_declares); + + ns >> ns_defines >> ns; + ns_defines >> c; + ns >> ns_declares >> vt; + ns >> ns_typedefs >> c; + + unit.dispatch (u); + } + else + { + traversal::unit unit; + traversal::defines unit_defines; + typedefs unit_typedefs (true); + traversal::namespace_ ns; + class2 c (valid); - unit >> unit_defines >> ns; - unit_defines >> c; - unit >> unit_typedefs >> c; + unit >> unit_defines >> ns; + unit_defines >> c; + unit >> unit_typedefs >> c; - traversal::defines ns_defines; - typedefs ns_typedefs (true); + traversal::defines ns_defines; + typedefs ns_typedefs (true); - ns >> ns_defines >> ns; - ns_defines >> c; - ns >> ns_typedefs >> c; + ns >> ns_defines >> ns; + ns_defines >> c; + ns >> ns_typedefs >> c; - unit.dispatch (u); + unit.dispatch (u); + } } if (!valid) throw failed (); + + try + { + relational::validator v; + v.validate (ops, f, u, p, pass); + } + catch (relational::validator::failed const&) + { + throw failed (); + } } -- cgit v1.1