From af12ffe836de09ec84f666effa4df347eeb07a43 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 26 Jan 2012 12:43:16 +0200 Subject: Implement support for database schema New pragma qualifier: namespace. New pragma specifier: schema. The table specifier was extended to accept a schema prefix. New option: --default- schema. The common/schema test was extended to cover the new functionality. --- odb/relational/source.hxx | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'odb/relational/source.hxx') diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index d909f7b..ff62257 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -350,7 +350,7 @@ namespace relational protected: statement_columns& sc_; bool in_composite_; - string table_prefix_; // Table corresponding to column_prefix_; + qname table_prefix_; // Table corresponding to column_prefix_; }; struct object_joins: object_columns_base, virtual context @@ -411,7 +411,7 @@ namespace relational // This container is a direct member of the class so the table // prefix is just the class table name. // - string const& ct (table_name (*c)); + qname const& ct (table_name (*c)); table_prefix tp (ct + "_", 1); t = table_qname (*im, tp); string const& val (column_qname (*im, "value", "value")); @@ -2818,7 +2818,7 @@ namespace relational // table_name // os << "const char " << traits << "::table_name[] =" << endl - << strlit (table_name (c)) << ";" // Use unquoted name. + << strlit (table_qname (c)) << ";" // Use quoted name. << endl; } @@ -3682,9 +3682,13 @@ namespace relational if (i->kind != view_object::object) continue; // Skip tables. - if (!i->alias.empty () && i->alias != table_name (*i->obj)) + qname const& t (table_name (*i->obj)); + + if (!i->alias.empty () && + (t.qualified () || i->alias != t.uname ())) os << "const char " << traits << "::query_columns::" << endl - << i->alias << "_alias_[] = " << strlit (i->alias) << ";" + << i->alias << "_alias_[] = " << + strlit (quote_id (i->alias)) << ";" << endl; } } @@ -3702,9 +3706,12 @@ namespace relational vo = &*i; } - if (!vo->alias.empty () && vo->alias != table_name (*vo->obj)) + qname const& t (table_name (*vo->obj)); + + if (!vo->alias.empty () && + (t.qualified () || vo->alias != t.uname ())) os << "const char " << traits << "::" << endl - << "query_alias[] = " << strlit (vo->alias) << ";" + << "query_alias[] = " << strlit (quote_id (vo->alias)) << ";" << endl; } } @@ -3863,7 +3870,7 @@ namespace relational if (first) { l = "FROM "; - l += quote_id (i->orig_name); + l += quote_id (i->tbl_name); if (!i->alias.empty ()) l += (need_alias_as ? " AS " : " ") + quote_id (i->alias); @@ -3875,7 +3882,7 @@ namespace relational } l = "LEFT JOIN "; - l += quote_id (i->orig_name); + l += quote_id (i->tbl_name); if (!i->alias.empty ()) l += (need_alias_as ? " AS " : " ") + quote_id (i->alias); @@ -4045,13 +4052,13 @@ namespace relational // Left and right-hand side table names. // - string lt (e.vo->alias.empty () - ? table_name (*e.vo->obj) - : e.vo->alias); + qname lt (e.vo->alias.empty () + ? table_name (*e.vo->obj) + : qname (e.vo->alias)); - string rt (vo->alias.empty () - ? table_name (*vo->obj) - : vo->alias); + qname rt (vo->alias.empty () + ? table_name (*vo->obj) + : qname (vo->alias)); // First join the container table if necessary. // @@ -4532,12 +4539,12 @@ namespace relational schema_emitter emitter_; emitter_ostream stream_; - trav_rel::names drop_names_; + trav_rel::qnames drop_names_; instance drop_model_; instance drop_table_; instance drop_index_; - trav_rel::names create_names_; + trav_rel::qnames create_names_; instance create_model_; instance create_table_; instance create_index_; -- cgit v1.1