From 823026b58211a4166de06ac243d978dcb9930271 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 22 Jan 2024 15:58:08 +0300 Subject: Turn odb repository into muti-package repository Also remove the autoconf/make-based build system. --- odb/semantics/relational/changelog.cxx | 187 ------------ odb/semantics/relational/changelog.hxx | 164 ----------- odb/semantics/relational/changeset.cxx | 56 ---- odb/semantics/relational/changeset.hxx | 93 ------ odb/semantics/relational/column.cxx | 201 ------------- odb/semantics/relational/column.hxx | 205 -------------- odb/semantics/relational/deferrable.cxx | 55 ---- odb/semantics/relational/deferrable.hxx | 41 --- odb/semantics/relational/elements.cxx | 179 ------------ odb/semantics/relational/elements.hxx | 468 ------------------------------- odb/semantics/relational/elements.txx | 215 -------------- odb/semantics/relational/foreign-key.cxx | 218 -------------- odb/semantics/relational/foreign-key.hxx | 152 ---------- odb/semantics/relational/index.cxx | 145 ---------- odb/semantics/relational/index.hxx | 100 ------- odb/semantics/relational/key.cxx | 97 ------- odb/semantics/relational/key.hxx | 104 ------- odb/semantics/relational/model.cxx | 54 ---- odb/semantics/relational/model.hxx | 49 ---- odb/semantics/relational/name.cxx | 89 ------ odb/semantics/relational/name.hxx | 159 ----------- odb/semantics/relational/primary-key.cxx | 80 ------ odb/semantics/relational/primary-key.hxx | 62 ---- odb/semantics/relational/table.cxx | 183 ------------ odb/semantics/relational/table.hxx | 115 -------- 25 files changed, 3471 deletions(-) delete mode 100644 odb/semantics/relational/changelog.cxx delete mode 100644 odb/semantics/relational/changelog.hxx delete mode 100644 odb/semantics/relational/changeset.cxx delete mode 100644 odb/semantics/relational/changeset.hxx delete mode 100644 odb/semantics/relational/column.cxx delete mode 100644 odb/semantics/relational/column.hxx delete mode 100644 odb/semantics/relational/deferrable.cxx delete mode 100644 odb/semantics/relational/deferrable.hxx delete mode 100644 odb/semantics/relational/elements.cxx delete mode 100644 odb/semantics/relational/elements.hxx delete mode 100644 odb/semantics/relational/elements.txx delete mode 100644 odb/semantics/relational/foreign-key.cxx delete mode 100644 odb/semantics/relational/foreign-key.hxx delete mode 100644 odb/semantics/relational/index.cxx delete mode 100644 odb/semantics/relational/index.hxx delete mode 100644 odb/semantics/relational/key.cxx delete mode 100644 odb/semantics/relational/key.hxx delete mode 100644 odb/semantics/relational/model.cxx delete mode 100644 odb/semantics/relational/model.hxx delete mode 100644 odb/semantics/relational/name.cxx delete mode 100644 odb/semantics/relational/name.hxx delete mode 100644 odb/semantics/relational/primary-key.cxx delete mode 100644 odb/semantics/relational/primary-key.hxx delete mode 100644 odb/semantics/relational/table.cxx delete mode 100644 odb/semantics/relational/table.hxx (limited to 'odb/semantics/relational') diff --git a/odb/semantics/relational/changelog.cxx b/odb/semantics/relational/changelog.cxx deleted file mode 100644 index 353497f..0000000 --- a/odb/semantics/relational/changelog.cxx +++ /dev/null @@ -1,187 +0,0 @@ -// file : odb/semantics/relational/changelog.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include -#include - -#include - -#include -#include -#include - -using namespace std; - -namespace semantics -{ - namespace relational - { - changelog:: - changelog (xml::parser& p) - : contains_model_ (0) - { - using namespace xml; - - p.next_expect (parser::start_element, xmlns, "changelog"); - p.content (content::complex); - - if (p.attribute ("version") != 1) - throw parsing (p, "unsupported changelog format version"); - - database_ = p.attribute ("database"); - schema_name_ = p.attribute ("schema-name", ""); - - // Because things are stored in the reverse order, first save the - // changesets as XML chunks and then re-parse them in the reverse - // order. We have to do it this way so that we can do lookups along - // the alters edges. - // - typedef vector changesets; - changesets cs; - - for (parser::event_type e (p.peek ()); - e == parser::start_element; - e = p.peek ()) - { - if (p.qname () != xml::qname (xmlns, "changeset")) - break; // Not our elements. - - ostringstream os; - os.exceptions (ios_base::badbit | ios_base::failbit); - serializer s (os, "changeset", 0); // No pretty-printing. - size_t depth (0); - - do - { - switch (p.next ()) - { - case parser::start_element: - { - s.start_element (p.qname ()); - - if (depth == 0) - s.namespace_decl (xmlns, ""); - - typedef parser::attribute_map_type attr_map; - attr_map const& am (p.attribute_map ()); - - for (attr_map::const_iterator i (am.begin ()); - i != am.end (); ++i) - s.attribute (i->first, i->second.value); - - depth++; - break; - } - case parser::end_element: - { - depth--; - s.end_element (); - break; - } - case parser::characters: - { - s.characters (p.value ()); - break; - } - default: - { - depth = 0; - break; - } - } - } while (depth != 0); - - cs.push_back (os.str ()); - } - - // Get the model. - // - p.next_expect (parser::start_element, xmlns, "model"); - model_type& m (new_node (p, *this)); - new_edge (*this, m); - p.next_expect (parser::end_element); - - // Re-parse the changesets in reverse order. - // - qscope* base (&m); - for (changesets::reverse_iterator i (cs.rbegin ()); i != cs.rend (); ++i) - { - istringstream is (*i); - is.exceptions (ios_base::badbit | ios_base::failbit); - parser ip (is, p.input_name ()); - - ip.next_expect (parser::start_element, xmlns, "changeset"); - - changeset& c (new_node (ip, *base, *this)); - new_edge (*this, c); - base = &c; - - ip.next_expect (parser::end_element); - } - - p.next_expect (parser::end_element); - } - - void changelog:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "changelog"); - s.namespace_decl (xmlns, ""); - s.attribute ("database", database_); - if (!schema_name_.empty ()) - s.attribute ("schema-name", schema_name_); - s.attribute ("version", 1); // Format version. - - // For better readability serialize things in reverse order so that - // the most recent changeset appears first. - // - for (contains_changeset_list::const_reverse_iterator i ( - contains_changeset_.rbegin ()); - i != contains_changeset_.rend (); ++i) - { - (*i)->changeset ().serialize (s); - s.characters ("\n"); - } - - model ().serialize (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - using compiler::type_info; - - // contains_model - // - { - type_info ti (typeid (contains_model)); - ti.add_base (typeid (edge)); - insert (ti); - } - - // contains_changeset - // - { - type_info ti (typeid (contains_changeset)); - ti.add_base (typeid (edge)); - insert (ti); - } - - // changelog - // - { - type_info ti (typeid (changelog)); - ti.add_base (typeid (node)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/changelog.hxx b/odb/semantics/relational/changelog.hxx deleted file mode 100644 index 2398cf6..0000000 --- a/odb/semantics/relational/changelog.hxx +++ /dev/null @@ -1,164 +0,0 @@ -// file : odb/semantics/relational/changelog.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_CHANGELOG_HXX -#define ODB_SEMANTICS_RELATIONAL_CHANGELOG_HXX - -#include - -namespace semantics -{ - namespace relational - { - class model; - class changeset; - class changelog; - - class contains_model: public edge - { - public: - typedef relational::changelog changelog_type; - typedef relational::model model_type; - - changelog_type& - changelog () const {return *changelog_;} - - model_type& - model () const {return *model_;} - - public: - void - set_left_node (changelog_type& n) {changelog_ = &n;} - - void - set_right_node (model_type& n) {model_ = &n;} - - protected: - changelog_type* changelog_; - model_type* model_; - }; - - class contains_changeset: public edge - { - public: - typedef relational::changelog changelog_type; - typedef relational::changeset changeset_type; - - changelog_type& - changelog () const {return *changelog_;} - - changeset_type& - changeset () const {return *changeset_;} - - public: - void - set_left_node (changelog_type& n) {changelog_ = &n;} - - void - set_right_node (changeset_type& n) {changeset_ = &n;} - - protected: - changelog_type* changelog_; - changeset_type* changeset_; - }; - - class changelog: public graph, public node - { - typedef std::vector contains_changeset_list; - - public: - typedef relational::model model_type; - typedef relational::contains_model contains_model_type; - - model_type& - model () const {return contains_model_->model ();} - - contains_model_type& - contains_model () const {return *contains_model_;} - - public: - typedef - pointer_iterator - contains_changeset_iterator; - - contains_changeset const& - contains_changeset_back () const - { - return *contains_changeset_.back (); - } - - contains_changeset const& - contains_changeset_at (contains_changeset_list::size_type i) const - { - return *contains_changeset_[i]; - } - - contains_changeset_iterator - contains_changeset_begin () const - { - return contains_changeset_.begin (); - } - - contains_changeset_iterator - contains_changeset_end () const - { - return contains_changeset_.end (); - } - - contains_changeset_list::size_type - contains_changeset_size () const - { - return contains_changeset_.size (); - } - - bool - contains_changeset_empty () const - { - return contains_changeset_.empty (); - } - - public: - string const& - database () const {return database_;} - - string const& - schema_name () const {return schema_name_;} - - public: - changelog (string const& db, string const& sn) - : database_ (db), schema_name_ (sn), contains_model_ (0) {} - changelog (xml::parser&); - - void - add_edge_left (contains_model_type& e) - { - assert (contains_model_ == 0); - contains_model_ = &e; - } - - void - add_edge_left (contains_changeset& e) - { - contains_changeset_.push_back (&e); - } - - virtual string - kind () const {return "changelog";} - - virtual void - serialize (xml::serializer&) const; - - private: - changelog (changelog const&); - changelog& operator= (changelog const&); - - protected: - string database_; - string schema_name_; - contains_model_type* contains_model_; - contains_changeset_list contains_changeset_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_CHANGELOG_HXX diff --git a/odb/semantics/relational/changeset.cxx b/odb/semantics/relational/changeset.cxx deleted file mode 100644 index b044a0c..0000000 --- a/odb/semantics/relational/changeset.cxx +++ /dev/null @@ -1,56 +0,0 @@ -// file : odb/semantics/relational/changeset.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - changeset:: - changeset (changeset const& c, qscope& b, graph& g) - : qscope (c, &b, g), - version_ (c.version_), - alters_model_ (0) - { - } - - changeset:: - changeset (xml::parser& p, qscope& b, graph& g) - : qscope (p, &b, g), - version_ (p.attribute ("version")), - alters_model_ (0) - { - } - - void changeset:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "changeset"); - s.attribute ("version", version_); - qscope::serialize_content (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - using compiler::type_info; - - { - type_info ti (typeid (changeset)); - ti.add_base (typeid (qscope)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/changeset.hxx b/odb/semantics/relational/changeset.hxx deleted file mode 100644 index efe2c61..0000000 --- a/odb/semantics/relational/changeset.hxx +++ /dev/null @@ -1,93 +0,0 @@ -// file : odb/semantics/relational/changeset.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_CHANGESET_HXX -#define ODB_SEMANTICS_RELATIONAL_CHANGESET_HXX - -#include - -namespace semantics -{ - namespace relational - { - class model; - class changeset; - - class alters_model: public edge - { - public: - typedef relational::model model_type; - typedef relational::changeset changeset_type; - - model_type& - model () const {return *model_;} - - changeset_type& - changeset () const {return *changeset_;} - - public: - alters_model () : model_ (0), changeset_ (0) {} - - void - set_left_node (changeset_type& c) - { - assert (changeset_ == 0); - changeset_ = &c; - } - - void - set_right_node (model_type& m) - { - assert (model_ == 0); - model_ = &m; - } - - protected: - model_type* model_; - changeset_type* changeset_; - }; - - class changeset: public qscope - { - public: - typedef relational::version version_type; - - version_type - version () const {return version_;} - - // Returns model to which this changeset applies (as opposed to the - // ultimate base model). Note that it may not be set. - // - model& - base_model () const {return alters_model_->model ();} - - public: - changeset (version_type v): version_ (v), alters_model_ (0) {} - changeset (changeset const&, qscope& base, graph&); - changeset (xml::parser&, qscope& base, graph&); - - virtual string - kind () const {return "changeset";} - - virtual void - serialize (xml::serializer&) const; - - public: - virtual void - add_edge_left (alters_model& am) - { - assert (alters_model_ == 0); - alters_model_ = &am; - } - - using qscope::add_edge_left; - using qscope::add_edge_right; - - private: - version_type version_; - alters_model* alters_model_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_CHANGESET_HXX diff --git a/odb/semantics/relational/column.cxx b/odb/semantics/relational/column.cxx deleted file mode 100644 index 9d4d6e5..0000000 --- a/odb/semantics/relational/column.cxx +++ /dev/null @@ -1,201 +0,0 @@ -// file : odb/semantics/relational/column.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - // column - // - column:: - column (column const& c, uscope&, graph& g) - : unameable (c, g), - type_ (c.type_), - null_ (c.null_), - default__ (c.default__), - options_ (c.options_) - { - } - - column:: - column (xml::parser& p, uscope&, graph& g) - : unameable (p, g), - type_ (p.attribute ("type", string ())), - null_ (p.attribute ("null")), - default__ (p.attribute ("default", string ())), - options_ (p.attribute ("options", string ())) - { - p.content (xml::content::empty); - } - - column& column:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void column:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "column"); - serialize_attributes (s); - s.end_element (); - } - - void column:: - serialize_attributes (xml::serializer& s) const - { - unameable::serialize_attributes (s); - - s.attribute ("type", type ()); - s.attribute ("null", null ()); // Output even if false. - - if (!default_ ().empty ()) - s.attribute ("default", default_ ()); - - if (!options ().empty ()) - s.attribute ("options", options ()); - } - - // add_column - // - add_column& add_column:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void add_column:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "add-column"); - column::serialize_attributes (s); - s.end_element (); - } - - // drop_column - // - drop_column:: - drop_column (xml::parser& p, uscope&, graph& g) - : unameable (p, g) - { - p.content (xml::content::empty); - } - - drop_column& drop_column:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void drop_column:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "drop-column"); - unameable::serialize_attributes (s); - s.end_element (); - } - - // alter_column - // - alter_column:: - alter_column (alter_column const& ac, uscope& s, graph& g) - : column (ac, s, g), - alters_ (0), - null_altered_ (ac.null_altered_) - { - column* b (s.lookup (ac.name ())); - assert (b != 0); - g.new_edge (*this, *b); - } - - alter_column:: - alter_column (xml::parser& p, uscope& s, graph& g) - : column (p, s, g), - alters_ (0), - null_altered_ (p.attribute_present ("null")) - { - name_type n (p.attribute ("name")); - column* b (s.lookup (n)); - assert (b != 0); - g.new_edge (*this, *b); - } - - alter_column& alter_column:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void alter_column:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "alter-column"); - - // Here we override the standard column logic. - // - unameable::serialize_attributes (s); - - if (null_altered_) - s.attribute ("null", null_); - - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - unameable::parser_map& m (unameable::parser_map_); - - m["column"] = &unameable::parser_impl; - m["add-column"] = &unameable::parser_impl; - m["drop-column"] = &unameable::parser_impl; - m["alter-column"] = &unameable::parser_impl; - - using compiler::type_info; - - // column - // - { - type_info ti (typeid (column)); - ti.add_base (typeid (unameable)); - insert (ti); - } - - // add_column - // - { - type_info ti (typeid (add_column)); - ti.add_base (typeid (column)); - insert (ti); - } - - // drop_column - // - { - type_info ti (typeid (drop_column)); - ti.add_base (typeid (unameable)); - insert (ti); - } - - // alter_column - // - { - type_info ti (typeid (alter_column)); - ti.add_base (typeid (column)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/column.hxx b/odb/semantics/relational/column.hxx deleted file mode 100644 index b7a2c31..0000000 --- a/odb/semantics/relational/column.hxx +++ /dev/null @@ -1,205 +0,0 @@ -// file : odb/semantics/relational/column.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_COLUMN_HXX -#define ODB_SEMANTICS_RELATIONAL_COLUMN_HXX - -#include -#include - -namespace semantics -{ - namespace relational - { - class contains; - - class column: public unameable - { - typedef std::vector contained_list; - - public: - virtual string const& - type () const {return type_;} - - virtual bool - null () const {return null_;} - - virtual void - null (bool n) {null_ = n;} - - virtual string const& - default_ () const {return default__;} - - virtual void - default_ (string const& d) {default__ = d;} - - virtual string const& - options () const {return options_;} - - virtual void - options (string const& o) {options_ = o;} - - public: - typedef relational::table table_type; - - table_type& - table () const {return dynamic_cast (scope ());} - - // Key containment. - // - public: - typedef - pointer_iterator - contained_iterator; - - contained_iterator - contained_begin () const {return contained_.begin ();} - - contained_iterator - contained_end () const {return contained_.end ();} - - public: - column (string const& id, string const& type, bool null) - : unameable (id), type_ (type), null_ (null) - { - } - - column (column const&, uscope&, graph&); - column (xml::parser&, uscope&, graph&); - - virtual column& - clone (uscope&, graph&) const; - - void - add_edge_right (contains& e) - { - contained_.push_back (&e); - } - - using unameable::add_edge_right; - - virtual string - kind () const - { - return "column"; - } - - virtual void - serialize (xml::serializer&) const; - - protected: - void - serialize_attributes (xml::serializer&) const; - - protected: - string type_; - bool null_; - string default__; - string options_; - - private: - contained_list contained_; - }; - - class add_column: public column - { - public: - add_column (string const& id, string const& type, bool null) - : column (id, type, null) {} - add_column (column const& c, uscope& s, graph& g): column (c, s, g) {} - add_column (xml::parser& p, uscope& s, graph& g): column (p, s, g) {} - - virtual add_column& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "add column";} - - virtual void - serialize (xml::serializer&) const; - }; - - class drop_column: public unameable - { - public: - drop_column (string const& id): unameable (id) {} - drop_column (drop_column const& c, uscope&, graph& g) - : unameable (c, g) {} - drop_column (xml::parser&, uscope&, graph&); - - public: - typedef relational::table table_type; - - table_type& - table () const {return dynamic_cast (scope ());} - - public: - virtual drop_column& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "drop column";} - - virtual void - serialize (xml::serializer&) const; - }; - - class alter_column: public column - { - public: - virtual string const& - type () const {return base ().type ();} - - bool - null_altered () const {return null_altered_;} - - virtual bool - null () const {return null_altered_ ? null_ : base ().null ();} - - virtual void - null (bool n) {null_ = n; null_altered_ = true;} - - virtual string const& - default_ () const {return base ().default_ ();} - - virtual string const& - options () const {return base ().options ();} - - public: - column& - base () const {return dynamic_cast (alters_->base ());} - - public: - alter_column (string const& id) - : column (id, "", false), alters_ (0), null_altered_ (false) {} - alter_column (alter_column const&, uscope&, graph&); - alter_column (xml::parser&, uscope&, graph&); - - virtual alter_column& - clone (uscope&, graph&) const; - - virtual string - kind () const - { - return "alter column"; - } - - virtual void - serialize (xml::serializer&) const; - - virtual void - add_edge_left (alters& a) - { - assert (alters_ == 0); - alters_ = &a; - } - - private: - alters* alters_; - - bool null_altered_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_COLUMN_HXX diff --git a/odb/semantics/relational/deferrable.cxx b/odb/semantics/relational/deferrable.cxx deleted file mode 100644 index 076ff69..0000000 --- a/odb/semantics/relational/deferrable.cxx +++ /dev/null @@ -1,55 +0,0 @@ -// file : odb/semantics/relational/deferrable.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include -#include - -#include - -using namespace std; - -namespace semantics -{ - namespace relational - { - static const char* deferrable_[] = - { - "NOT DEFERRABLE", - "IMMEDIATE", - "DEFERRED" - }; - - string deferrable:: - string () const - { - return deferrable_[v_]; - } - - ostream& - operator<< (ostream& os, deferrable const& v) - { - return os << v.string (); - } - - istream& - operator>> (istream& is, deferrable& v) - { - string s; - is >> s; - - if (!is.fail ()) - { - if (s == "not_deferrable" || s == "NOT DEFERRABLE") - v = deferrable::not_deferrable; - else if (s == "immediate" || s == "IMMEDIATE") - v = deferrable::immediate; - else if (s == "deferred" || s == "DEFERRED") - v = deferrable::deferred; - else - is.setstate (istream::failbit); - } - - return is; - } - } -} diff --git a/odb/semantics/relational/deferrable.hxx b/odb/semantics/relational/deferrable.hxx deleted file mode 100644 index b2f888d..0000000 --- a/odb/semantics/relational/deferrable.hxx +++ /dev/null @@ -1,41 +0,0 @@ -// file : odb/semantics/relational/deferrable.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_DEFERRABLE_HXX -#define ODB_SEMANTICS_RELATIONAL_DEFERRABLE_HXX - -#include -#include - -namespace semantics -{ - namespace relational - { - struct deferrable - { - enum value - { - not_deferrable, - immediate, - deferred - }; - - deferrable (value v = value (0)) : v_ (v) {} - operator value () const {return v_;} - - std::string - string () const; - - private: - value v_; - }; - - std::ostream& - operator<< (std::ostream&, deferrable const&); - - std::istream& - operator>> (std::istream&, deferrable&); - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_DEFERRABLE_HXX diff --git a/odb/semantics/relational/elements.cxx b/odb/semantics/relational/elements.cxx deleted file mode 100644 index de1878a..0000000 --- a/odb/semantics/relational/elements.cxx +++ /dev/null @@ -1,179 +0,0 @@ -// file : odb/semantics/relational/elements.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include -#include -#include - -namespace semantics -{ - namespace relational - { - string const xmlns = "http://www.codesynthesis.com/xmlns/odb/changelog"; - - // duplicate_name - // - template <> - duplicate_name:: - duplicate_name (uscope& s, unameable& o, unameable& d) - : scope (s), orig (o), dup (d), name (o.name ()) - { - } - - template <> - duplicate_name:: - duplicate_name (qscope& s, qnameable& o, qnameable& d) - : scope (s), orig (o), dup (d), name (o.name ().string ()) - { - } - - // scope - // - template <> - void scope:: - add_edge_left (names_type& e) - { - nameable_type& n (e.nameable ()); - name_type const& name (e.name ()); - - typename names_map::iterator i (names_map_.find (name)); - - if (i == names_map_.end ()) - { - typename names_list::iterator i; - - // We want the order to be add/alter columns first, then the - // primary key, then other keys, and finnally drop columns. - // - if (n.is_a () || - n.is_a () || - n.is_a ()) - { - i = names_.insert (first_key_, &e); - } - else if (!n.is_a ()) - { - if (n.is_a ()) - first_key_ = i = names_.insert ( - first_key_ != names_.end () ? first_key_ : first_drop_column_, - &e); - else - { - i = names_.insert (first_drop_column_, &e); - - if (first_key_ == names_.end ()) - first_key_ = i; - } - } - else - { - i = names_.insert (names_.end (), &e); - - if (first_drop_column_ == names_.end ()) - first_drop_column_ = i; - } - - names_map_[name] = i; - iterator_map_[&e] = i; - } - else - throw duplicate_name (*this, (*i->second)->nameable (), n); - } - - template <> - void scope:: - remove_edge_left (names_type& e) - { - typename names_iterator_map::iterator i (iterator_map_.find (&e)); - assert (i != iterator_map_.end ()); - - // If we are removing the first key, then move to the next key (or - // the end which means there are no keys). - // - if (first_key_ == i->second) - first_key_++; - - // The same for the first drop column. - // - if (first_drop_column_ == i->second) - first_drop_column_++; - - names_.erase (i->second); - names_map_.erase (e.name ()); - iterator_map_.erase (i); - } - - // type info - // - namespace - { - struct init - { - init () - { - using compiler::type_info; - - // node - // - insert (type_info (typeid (node))); - - // edge - // - insert (type_info (typeid (edge))); - - // alters - // - { - type_info ti (typeid (alters)); - ti.add_base (typeid (edge)); - insert (ti); - } - - // names - // - { - type_info ti (typeid (unames)); - ti.add_base (typeid (edge)); - insert (ti); - } - - { - type_info ti (typeid (qnames)); - ti.add_base (typeid (edge)); - insert (ti); - } - - // nameable - // - { - type_info ti (typeid (unameable)); - ti.add_base (typeid (node)); - insert (ti); - } - - { - type_info ti (typeid (qnameable)); - ti.add_base (typeid (node)); - insert (ti); - } - - // scope - // - { - type_info ti (typeid (uscope)); - ti.add_base (typeid (node)); - insert (ti); - } - - { - type_info ti (typeid (qscope)); - ti.add_base (typeid (node)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/elements.hxx b/odb/semantics/relational/elements.hxx deleted file mode 100644 index 06ec552..0000000 --- a/odb/semantics/relational/elements.hxx +++ /dev/null @@ -1,468 +0,0 @@ -// file : odb/semantics/relational/elements.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_ELEMENTS_HXX -#define ODB_SEMANTICS_RELATIONAL_ELEMENTS_HXX - -#include -#include -#include -#include -#include - -#include -#include -#include - -#ifdef ODB_BUILD2 -#include -#include -#else -#include -#include -namespace cutl {namespace xml {typedef parser content;}} -#endif - -#include - -namespace semantics -{ - namespace relational - { - using namespace cutl; - - using std::string; - - using container::pointer_iterator; - using compiler::context; - - typedef unsigned long long version; - - // - // - extern string const xmlns; - - // - // - class node; - class edge; - - typedef container::graph graph; - - // - // - class edge: public context - { - public: - template - bool - is_a () const - { - return dynamic_cast (this) != 0; - } - - public: - virtual - ~edge () {} - }; - - // - // - class node: public context - { - // Return name of the node. - // - public: - virtual string - kind () const = 0; - - public: - template - bool - is_a () const - { - return dynamic_cast (this) != 0; - } - - public: - virtual - ~node () {} - - // XML serialization. - // - virtual void - serialize (xml::serializer&) const = 0; - - // Sink functions that allow extensions in the form of one-way - // edges. - // - void - add_edge_right (edge&) {} - - void - remove_edge_right (edge&) {} - }; - - // - // - class alters: public edge - { - public: - node& - base () const {return *base_;} - - node& - modifier () const {return *modifier_;} - - public: - alters () : base_ (0), modifier_ (0) {} - - void - set_left_node (node& m) - { - assert (modifier_ == 0); - modifier_ = &m; - } - - void - set_right_node (node& b) - { - assert (base_ == 0); - base_ = &b; - } - - void - clear_left_node (node& m) - { - assert (modifier_ == &m); - modifier_ = 0; - } - - void - clear_right_node (node& b) - { - assert (base_ == &b); - base_ = 0; - } - - protected: - node* base_; - node* modifier_; - }; - - // - // - template - class scope; - - template - class nameable; - - // - // - template - class names: public edge - { - public: - typedef N name_type; - typedef relational::scope scope_type; - typedef relational::nameable nameable_type; - - name_type const& - name () const - { - return name_; - } - - scope_type& - scope () const - { - return *scope_; - } - - nameable_type& - nameable () const - { - return *nameable_; - } - - public: - names (name_type const& name): name_ (name) {} - - void - set_left_node (scope_type& n) - { - scope_ = &n; - } - - void - set_right_node (nameable_type& n) - { - nameable_ = &n; - } - - void - clear_left_node (scope_type& n) - { - assert (scope_ == &n); - scope_ = 0; - } - - void - clear_right_node (nameable_type& n) - { - assert (nameable_ == &n); - nameable_ = 0; - } - - protected: - name_type name_; - scope_type* scope_; - nameable_type* nameable_; - }; - - typedef names unames; - typedef names qnames; - - // - // - template - class nameable: public virtual node - { - public: - typedef N name_type; - typedef relational::names names_type; - typedef relational::scope scope_type; - - name_type const& - name () const {return named_->name ();} - - scope_type& - scope () const {return named ().scope ();} - - names_type& - named () const {return *named_;} - - string const& - id () const {return id_;} - - public: - // Id identifies the C++ node (e.g., a class or a data member) that - // this model node corresponds to. The ids are not necessarily unique - // (e.g., there can be a foreign key and an index with the same id that - // correspond to a container member). However, in any given scope, the - // {id,typeid} must be unique. This becomes important when we try to - // find correspondance between nodes during model diff'ing. - // - nameable (string const& id): id_ (id), named_ (0) {} - - virtual nameable& - clone (scope_type&, graph&) const = 0; - - // Virtual because we call it via nameable interface (e.g., in copy). - // - virtual void - add_edge_right (names_type& e) - { - assert (named_ == 0); - named_ = &e; - } - - virtual void - remove_edge_right (names_type& e) - { - assert (named_ == &e); - named_ = 0; - } - - using node::add_edge_right; - using node::remove_edge_right; - - protected: - nameable (nameable const&, graph& g); - nameable (xml::parser&, graph& g); - - void - serialize_attributes (xml::serializer&) const; - - public: - typedef void (*parser_func) (xml::parser&, scope_type&, graph&); - typedef std::map parser_map; - static parser_map parser_map_; - - template - static void - parser_impl (xml::parser&, scope_type&, graph&); - - private: - string id_; - names_type* named_; - }; - - typedef nameable unameable; - typedef nameable qnameable; - - - // - // - struct duplicate_name - { - template - duplicate_name (relational::scope&, - relational::nameable& orig, - relational::nameable& dup); - - node& scope; - node& orig; - node& dup; - - string name; - }; - - template - class scope: public virtual node - { - protected: - typedef N name_type; - typedef relational::names names_type; - typedef relational::nameable nameable_type; - - typedef std::list names_list; - typedef std::map names_map; - typedef - std::map - names_iterator_map; - - public: - typedef pointer_iterator names_iterator; - typedef - pointer_iterator - names_const_iterator; - - public: - // Iteration. - // - names_iterator - names_begin () - { - return names_.begin (); - } - - names_iterator - names_end () - { - return names_.end (); - } - - names_const_iterator - names_begin () const - { - return names_.begin (); - } - - names_const_iterator - names_end () const - { - return names_.end (); - } - - bool - names_empty () const - { - return names_.empty (); - } - - // Find (this scope only). - // - template - T* - find (name_type const&); - - names_iterator - find (name_type const&); - - names_const_iterator - find (name_type const&) const; - - names_iterator - find (names_type const&); - - names_const_iterator - find (names_type const&) const; - - // Lookup in this and all altered scopes until we find what we are - // looking for or hit a stop node of type S (e.g., drop_*). - // - template - T* - lookup (name_type const&); - - public: - scope* - base () const - { - return alters_ != 0 ? &dynamic_cast (alters_->base ()) : 0; - } - - public: - scope () - : first_key_ (names_.end ()), - first_drop_column_ (names_.end ()), - alters_ (0) {} - - // Virtual because we call it via scope interface (e.g., in copy). - // - virtual void - add_edge_left (alters& a) - { - assert (alters_ == 0); - alters_ = &a; - } - - virtual void - remove_edge_left (alters& a) - { - assert (alters_ == &a); - alters_ = 0; - } - - virtual void - add_edge_left (names_type&); - - virtual void - remove_edge_left (names_type&); - - protected: - scope (scope const&, scope* base, graph&); - scope (xml::parser&, scope* base, graph&); - - void - serialize_content (xml::serializer&) const; - - protected: - names_list names_; - names_map names_map_; - names_iterator_map iterator_map_; - - typename names_list::iterator first_key_; - typename names_list::iterator first_drop_column_; - - alters* alters_; - }; - - template <> - void scope:: - add_edge_left (names_type&); - - template <> - void scope:: - remove_edge_left (names_type&); - - typedef scope uscope; - typedef scope qscope; - } -} - -#include - -#endif // ODB_SEMANTICS_RELATIONAL_ELEMENTS_HXX diff --git a/odb/semantics/relational/elements.txx b/odb/semantics/relational/elements.txx deleted file mode 100644 index 2362d48..0000000 --- a/odb/semantics/relational/elements.txx +++ /dev/null @@ -1,215 +0,0 @@ -// file : odb/semantics/relational/elements.txx -// license : GNU GPL v3; see accompanying LICENSE file - -namespace semantics -{ - namespace relational - { - // nameable - // - template - typename nameable::parser_map nameable::parser_map_; - - template - template - void nameable:: - parser_impl (xml::parser& p, scope_type& s, graph& g) - { - name_type n (p.attribute ("name", name_type ())); - T& x (g.new_node (p, s, g)); - g.new_edge (s, x, n); - } - - template - nameable:: - nameable (nameable const& n, graph&) - : id_ (n.id_), named_ (0) - { - } - - template - nameable:: - nameable (xml::parser&, graph&) - // : id_ (p.attribute ("id")) - : named_ (0) - { - // The name attribute is handled in parser_impl(). - } - - template - void nameable:: - serialize_attributes (xml::serializer& s) const - { - // Omit empty names (e.g., a primary key). - // - name_type const& n (name ()); - if (!n.empty ()) - s.attribute ("name", n); - - //s.attribute ("id", id_); - } - - // scope - // - - template - template - T* scope:: - lookup (name_type const& name) - { - if (T* r = find (name)) - return r; - - if (scope* b = base ()) - { - if (find (name) == 0) - return b->lookup (name); - } - - return 0; - } - - template - template - T* scope:: - find (name_type const& name) - { - typename names_map::iterator i (names_map_.find (name)); - return i != names_map_.end () - ? dynamic_cast (&(*i->second)->nameable ()) - : 0; - } - - template - typename scope::names_iterator scope:: - find (name_type const& name) - { - typename names_map::iterator i (names_map_.find (name)); - - if (i == names_map_.end ()) - return names_.end (); - else - return i->second; - } - - template - typename scope::names_const_iterator scope:: - find (name_type const& name) const - { - typename names_map::const_iterator i (names_map_.find (name)); - - if (i == names_map_.end ()) - return names_.end (); - else - return names_const_iterator (i->second); - } - - template - typename scope::names_iterator scope:: - find (names_type const& e) - { - typename names_iterator_map::iterator i (iterator_map_.find (&e)); - return i != iterator_map_.end () ? i->second : names_.end (); - } - - template - typename scope::names_const_iterator scope:: - find (names_type const& e) const - { - typename names_iterator_map::const_iterator i (iterator_map_.find (&e)); - return i != iterator_map_.end () ? i->second : names_.end (); - } - - template - scope:: - scope (scope const& s, scope* base, graph& g) - : first_key_ (names_.end ()), - first_drop_column_ (names_.end ()), - alters_ (0) - { - // Set the alters edge for lookup. - // - if (base != 0) - g.new_edge (*this, *base); - - for (names_const_iterator i (s.names_begin ()); - i != s.names_end (); ++i) - { - nameable_type& n (i->nameable ().clone (*this, g)); - g.new_edge (*this, n, i->name ()); - } - } - - template - scope:: - scope (xml::parser& p, scope* base, graph& g) - : first_key_ (names_.end ()), - first_drop_column_ (names_.end ()), - alters_ (0) - { - // Set the alters edge for lookup. - // - if (base != 0) - g.new_edge (*this, *base); - - using namespace xml; - p.content (content::complex); - - for (parser::event_type e (p.peek ()); - e == parser::start_element; - e = p.peek ()) - { - typename nameable_type::parser_map::iterator i ( - nameable_type::parser_map_.find (p.name ())); - - if (p.namespace_ () != xmlns || i == nameable_type::parser_map_.end ()) - break; // Not one of our elements. - - p.next (); - i->second (p, *this, g); - p.next_expect (parser::end_element); - } - } - - template - void scope:: - serialize_content (xml::serializer& s) const - { - for (names_const_iterator i (names_begin ()); i != names_end (); ++i) - i->nameable ().serialize (s); - } - - class column; - class primary_key; - - template - void scope:: - add_edge_left (names_type& e) - { - name_type const& name (e.name ()); - - typename names_map::iterator i (names_map_.find (name)); - - if (i == names_map_.end ()) - { - typename names_list::iterator i (names_.insert (names_.end (), &e)); - names_map_[name] = i; - iterator_map_[&e] = i; - } - else - throw duplicate_name (*this, (*i->second)->nameable (), e.nameable ()); - } - - template - void scope:: - remove_edge_left (names_type& e) - { - typename names_iterator_map::iterator i (iterator_map_.find (&e)); - assert (i != iterator_map_.end ()); - - names_.erase (i->second); - names_map_.erase (e.name ()); - iterator_map_.erase (i); - } - } -} diff --git a/odb/semantics/relational/foreign-key.cxx b/odb/semantics/relational/foreign-key.cxx deleted file mode 100644 index 0357d95..0000000 --- a/odb/semantics/relational/foreign-key.cxx +++ /dev/null @@ -1,218 +0,0 @@ -// file : odb/semantics/relational/foreign-key.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include -#include - -#include - -#include - -using namespace std; - -namespace semantics -{ - namespace relational - { - static const char* action_str[] = {"NO ACTION", "CASCADE", "SET NULL"}; - - ostream& - operator<< (ostream& os, foreign_key::action_type v) - { - return os << action_str[v]; - } - - istream& - operator>> (istream& is, foreign_key::action_type& v) - { - string s; - getline (is, s); - - if (!is.eof ()) - is.setstate (istream::failbit); - - if (!is.fail ()) - { - if (s == "NO ACTION") - v = foreign_key::no_action; - else if (s == "CASCADE") - v = foreign_key::cascade; - else if (s == "SET NULL") - v = foreign_key::set_null; - else - is.setstate (istream::failbit); - } - - return is; - } - - foreign_key:: - foreign_key (foreign_key const& k, uscope& s, graph& g) - : key (k, s, g), - referenced_table_ (k.referenced_table_), - referenced_columns_ (k.referenced_columns_), - deferrable_ (k.deferrable_), - on_delete_ (k.on_delete_) - { - } - - foreign_key:: - foreign_key (xml::parser& p, uscope& s, graph& g) - : key (p, s, g), - deferrable_ (p.attribute ("deferrable", deferrable_type ())), - on_delete_ (p.attribute ("on-delete", no_action)) - { - using namespace xml; - - p.next_expect (parser::start_element, xmlns, "references"); - referenced_table_ = p.attribute ("table"); - p.content (content::complex); - - for (parser::event_type e (p.peek ()); - e == parser::start_element; - e = p.peek ()) - { - if (p.qname () != xml::qname (xmlns, "column")) - break; // Not our elements. - - p.next (); - referenced_columns_.push_back (p.attribute ("name")); - p.content (content::empty); - p.next_expect (parser::end_element); - } - - p.next_expect (parser::end_element); - } - - foreign_key& foreign_key:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void foreign_key:: - serialize_attributes (xml::serializer& s) const - { - key::serialize_attributes (s); - - if (deferrable () != deferrable_type::not_deferrable) - s.attribute ("deferrable", deferrable ()); - - if (on_delete () != no_action) - s.attribute ("on-delete", on_delete ()); - } - - void foreign_key:: - serialize_content (xml::serializer& s) const - { - key::serialize_content (s); - - // Referenced columns. - // - s.start_element (xmlns, "references"); - s.attribute ("table", referenced_table ()); - - for (columns::const_iterator i (referenced_columns_.begin ()); - i != referenced_columns_.end (); ++i) - { - s.start_element (xmlns, "column"); - s.attribute ("name", *i); - s.end_element (); - } - - s.end_element (); // references - } - - void foreign_key:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "foreign-key"); - serialize_attributes (s); - serialize_content (s); - s.end_element (); // foreign-key - } - - // add_foreign_key - // - add_foreign_key& add_foreign_key:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void add_foreign_key:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "add-foreign-key"); - foreign_key::serialize_attributes (s); - foreign_key::serialize_content (s); - s.end_element (); - } - - // drop_foreign_key - // - drop_foreign_key:: - drop_foreign_key (xml::parser& p, uscope&, graph& g) - : unameable (p, g) - { - p.content (xml::content::empty); - } - - drop_foreign_key& drop_foreign_key:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void drop_foreign_key:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "drop-foreign-key"); - unameable::serialize_attributes (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - unameable::parser_map& m (unameable::parser_map_); - - m["foreign-key"] = &unameable::parser_impl; - m["add-foreign-key"] = &unameable::parser_impl; - m["drop-foreign-key"] = &unameable::parser_impl; - - using compiler::type_info; - - // foreign_key - // - { - type_info ti (typeid (foreign_key)); - ti.add_base (typeid (key)); - insert (ti); - } - - // add_foreign_key - // - { - type_info ti (typeid (add_foreign_key)); - ti.add_base (typeid (foreign_key)); - insert (ti); - } - - // drop_foreign_key - // - { - type_info ti (typeid (drop_foreign_key)); - ti.add_base (typeid (unameable)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/foreign-key.hxx b/odb/semantics/relational/foreign-key.hxx deleted file mode 100644 index 32179fa..0000000 --- a/odb/semantics/relational/foreign-key.hxx +++ /dev/null @@ -1,152 +0,0 @@ -// file : odb/semantics/relational/foreign-key.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_FOREIGN_KEY_HXX -#define ODB_SEMANTICS_RELATIONAL_FOREIGN_KEY_HXX - -#include - -#include -#include -#include - -namespace semantics -{ - namespace relational - { - class foreign_key: public key - { - public: - qname const& - referenced_table () const - { - return referenced_table_; - } - - typedef std::vector columns; - - columns const& - referenced_columns () const - { - return referenced_columns_; - } - - columns& - referenced_columns () - { - return referenced_columns_; - } - - public: - typedef relational::deferrable deferrable_type; - - deferrable_type - deferrable () const {return deferrable_;} - - bool - not_deferrable () const - { - return deferrable_ == deferrable_type::not_deferrable; - } - - enum action_type - { - no_action, - cascade, - set_null - }; - - action_type - on_delete () const {return on_delete_;} - - public: - foreign_key (string const& id, - qname const& referenced_table, - deferrable_type deferrable, - action_type on_delete = no_action) - : key (id), - referenced_table_ (referenced_table), - deferrable_ (deferrable), - on_delete_ (on_delete) - { - } - - foreign_key (foreign_key const&, uscope&, graph&); - foreign_key (xml::parser&, uscope&, graph&); - - virtual foreign_key& - clone (uscope&, graph&) const; - - virtual string - kind () const - { - return "foreign key"; - } - - virtual void - serialize (xml::serializer&) const; - - protected: - void - serialize_attributes (xml::serializer&) const; - - void - serialize_content (xml::serializer&) const; - - private: - qname referenced_table_; - columns referenced_columns_; - deferrable_type deferrable_; - action_type on_delete_; - }; - - std::ostream& - operator<< (std::ostream&, foreign_key::action_type); - - std::istream& - operator>> (std::istream&, foreign_key::action_type&); - - class add_foreign_key: public foreign_key - { - public: - add_foreign_key (string const& id, - qname const& rt, - deferrable_type d, - action_type od = no_action) - : foreign_key (id, rt, d, od) {} - add_foreign_key (foreign_key const& fk, uscope& s, graph& g) - : foreign_key (fk, s, g) {} - add_foreign_key (xml::parser& p, uscope& s, graph& g) - : foreign_key (p, s, g) {} - - virtual add_foreign_key& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "add foreign key";} - - virtual void - serialize (xml::serializer&) const; - }; - - class drop_foreign_key: public unameable - { - public: - drop_foreign_key (string const& id): unameable (id) {} - drop_foreign_key (drop_foreign_key const& dfk, uscope&, graph& g) - : unameable (dfk, g) {} - drop_foreign_key (xml::parser&, uscope&, graph&); - - virtual drop_foreign_key& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "drop foreign key";} - - virtual void - serialize (xml::serializer&) const; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_FOREIGN_KEY_HXX diff --git a/odb/semantics/relational/index.cxx b/odb/semantics/relational/index.cxx deleted file mode 100644 index 2329f3a..0000000 --- a/odb/semantics/relational/index.cxx +++ /dev/null @@ -1,145 +0,0 @@ -// file : odb/semantics/relational/index.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - // index - // - index:: - index (index const& i, uscope& s, graph& g) - : key (i, s, g), - type_ (i.type_), - method_ (i.method_), - options_ (i.options_) - { - } - - index:: - index (xml::parser& p, uscope& s, graph& g) - : key (p, s, g), - type_ (p.attribute ("type", string ())), - method_ (p.attribute ("method", string ())), - options_ (p.attribute ("options", string ())) - { - } - - index& index:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void index:: - serialize_attributes (xml::serializer& s) const - { - key::serialize_attributes (s); - - if (!type ().empty ()) - s.attribute ("type", type ()); - - if (!method ().empty ()) - s.attribute ("method", method ()); - - if (!options ().empty ()) - s.attribute ("options", options ()); - } - - void index:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "index"); - serialize_attributes (s); - key::serialize_content (s); - s.end_element (); - } - - // add_index - // - add_index& add_index:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void add_index:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "add-index"); - index::serialize_attributes (s); - index::serialize_content (s); - s.end_element (); - } - - // drop_index - // - drop_index:: - drop_index (xml::parser& p, uscope&, graph& g) - : unameable (p, g) - { - p.content (xml::content::empty); - } - - drop_index& drop_index:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void drop_index:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "drop-index"); - unameable::serialize_attributes (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - unameable::parser_map& m (unameable::parser_map_); - - m["index"] = &unameable::parser_impl; - m["add-index"] = &unameable::parser_impl; - m["drop-index"] = &unameable::parser_impl; - - using compiler::type_info; - - // index - // - { - type_info ti (typeid (index)); - ti.add_base (typeid (key)); - insert (ti); - } - - // add_index - // - { - type_info ti (typeid (add_index)); - ti.add_base (typeid (index)); - insert (ti); - } - - // drop_index - // - { - type_info ti (typeid (drop_index)); - ti.add_base (typeid (unameable)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/index.hxx b/odb/semantics/relational/index.hxx deleted file mode 100644 index 68648cb..0000000 --- a/odb/semantics/relational/index.hxx +++ /dev/null @@ -1,100 +0,0 @@ -// file : odb/semantics/relational/index.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_INDEX_HXX -#define ODB_SEMANTICS_RELATIONAL_INDEX_HXX - -#include -#include - -namespace semantics -{ - namespace relational - { - // Note that in our model indexes are defined in the table scope. - // - class index: public key - { - public: - string const& - type () const {return type_;} - - string const& - method () const {return method_;} - - string const& - options () const {return options_;} - - public: - index (string const& id, - string const& t = string (), - string const& m = string (), - string const& o = string ()) - : key (id), type_ (t), method_ (m), options_ (o) {} - index (index const&, uscope&, graph&); - index (xml::parser&, uscope&, graph&); - - virtual index& - clone (uscope&, graph&) const; - - virtual string - kind () const - { - return "index"; - } - - virtual void - serialize (xml::serializer&) const; - - protected: - void - serialize_attributes (xml::serializer&) const; - - private: - string type_; // E.g., "UNIQUE", etc. - string method_; // E.g., "BTREE", etc. - string options_; // Database-specific index options. - }; - - class add_index: public index - { - public: - add_index (string const& id, - string const& t = string (), - string const& m = string (), - string const& o = string ()) - : index (id, t, m, o) {} - add_index (index const& i, uscope& s, graph& g): index (i, s, g) {} - add_index (xml::parser& p, uscope& s, graph& g): index (p, s, g) {} - - virtual add_index& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "add index";} - - virtual void - serialize (xml::serializer&) const; - }; - - class drop_index: public unameable - { - public: - drop_index (string const& id): unameable (id) {} - drop_index (drop_index const& di, uscope&, graph& g) - : unameable (di, g) {} - drop_index (xml::parser&, uscope&, graph&); - - virtual drop_index& - clone (uscope&, graph&) const; - - virtual string - kind () const {return "drop index";} - - virtual void - serialize (xml::serializer&) const; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_INDEX_HXX diff --git a/odb/semantics/relational/key.cxx b/odb/semantics/relational/key.cxx deleted file mode 100644 index 3511618..0000000 --- a/odb/semantics/relational/key.cxx +++ /dev/null @@ -1,97 +0,0 @@ -// file : odb/semantics/relational/key.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include -#include - -namespace semantics -{ - namespace relational - { - key:: - key (key const& k, uscope& s, graph& g) - : unameable (k, g) - { - for (contains_iterator i (k.contains_begin ()); - i != k.contains_end (); ++i) - { - column* c (s.lookup (i->column ().name ())); - assert (c != 0); - g.new_edge (*this, *c, i->options ()); - } - } - - key:: - key (xml::parser& p, uscope& s, graph& g) - : unameable (p, g) - { - using namespace xml; - p.content (content::complex); - - for (parser::event_type e (p.peek ()); - e == parser::start_element; - e = p.peek ()) - { - if (p.qname () != xml::qname (xmlns, "column")) - break; // Not our elements. - - p.next (); - p.content (content::empty); - - uname n (p.attribute ("name")); - column* c (s.lookup (n)); - if (c == 0) - throw parsing (p, "invalid column name in the 'name' attribute"); - - string o (p.attribute ("options", string ())); - g.new_edge (*this, *c, o); - - p.next_expect (parser::end_element); - } - } - - void key:: - serialize_content (xml::serializer& s) const - { - for (contains_iterator i (contains_begin ()); i != contains_end (); ++i) - { - s.start_element (xmlns, "column"); - s.attribute ("name", i->column ().name ()); - if (!i->options ().empty ()) - s.attribute ("options", i->options ()); - s.end_element (); - } - } - - // type info - // - namespace - { - struct init - { - init () - { - using compiler::type_info; - - // contains - // - { - type_info ti (typeid (contains)); - ti.add_base (typeid (edge)); - insert (ti); - } - - // key - // - { - type_info ti (typeid (key)); - ti.add_base (typeid (node)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/key.hxx b/odb/semantics/relational/key.hxx deleted file mode 100644 index 814d2ec..0000000 --- a/odb/semantics/relational/key.hxx +++ /dev/null @@ -1,104 +0,0 @@ -// file : odb/semantics/relational/key.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_KEY_HXX -#define ODB_SEMANTICS_RELATIONAL_KEY_HXX - -#include -#include - -namespace semantics -{ - namespace relational - { - class key; - class column; - - class contains: public edge - { - public: - typedef relational::key key_type; - typedef relational::column column_type; - - key_type& - key () const {return *key_;} - - column_type& - column () const {return *column_;} - - string const& - options () const {return options_;} - - public: - contains (string const& o = string ()) : options_ (o) {} - - void - set_left_node (key_type& n) - { - key_ = &n; - } - - void - set_right_node (column_type& n) - { - column_ = &n; - } - - protected: - key_type* key_; - column_type* column_; - string options_; - }; - - class key: public unameable - { - typedef std::vector contains_list; - - public: - typedef contains_list::size_type contains_size_type; - - typedef - pointer_iterator - contains_iterator; - - contains_iterator - contains_begin () const {return contains_.begin ();} - - contains_iterator - contains_end () const {return contains_.end ();} - - contains_size_type - contains_size () const {return contains_.size ();} - - contains& - contains_at (contains_size_type i) const {return *contains_[i];} - - public: - typedef relational::table table_type; - - table_type& - table () const {return dynamic_cast (scope ());} - - public: - key (std::string const& id): unameable (id) {} - - void - add_edge_left (contains& e) - { - contains_.push_back (&e); - } - - protected: - key (key const&, uscope&, graph&); - key (xml::parser&, uscope&, graph&); - - void - serialize_content (xml::serializer&) const; - - private: - contains_list contains_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_KEY_HXX diff --git a/odb/semantics/relational/model.cxx b/odb/semantics/relational/model.cxx deleted file mode 100644 index 8763045..0000000 --- a/odb/semantics/relational/model.cxx +++ /dev/null @@ -1,54 +0,0 @@ -// file : odb/semantics/relational/model.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - model:: - model (model const& m, graph& g) - : qscope (m, 0, g), - version_ (m.version_) - { - } - - model:: - model (xml::parser& p, graph& g) - : qscope (p, 0, g), - version_ (p.attribute ("version")) - { - } - - void model:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "model"); - s.attribute ("version", version_); - qscope::serialize_content (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - using compiler::type_info; - - { - type_info ti (typeid (model)); - ti.add_base (typeid (qscope)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/model.hxx b/odb/semantics/relational/model.hxx deleted file mode 100644 index 02d1863..0000000 --- a/odb/semantics/relational/model.hxx +++ /dev/null @@ -1,49 +0,0 @@ -// file : odb/semantics/relational/model.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_MODEL_HXX -#define ODB_SEMANTICS_RELATIONAL_MODEL_HXX - -#include - -namespace semantics -{ - namespace relational - { - class model: public graph, public qscope - { - public: - typedef relational::version version_type; - - version_type - version () const {return version_;} - - void - version (version_type v) {version_ = v;} - - public: - model (version_type v): version_ (v) {} - model (model const&, graph&); - model (xml::parser&, graph&); - - virtual string - kind () const {return "model";} - - virtual void - serialize (xml::serializer&) const; - - public: - using qscope::add_edge_left; - using qscope::add_edge_right; - - private: - model (model const&); - model& operator= (model const&); - - private: - version_type version_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_MODEL_HXX diff --git a/odb/semantics/relational/name.cxx b/odb/semantics/relational/name.cxx deleted file mode 100644 index 6eb2e16..0000000 --- a/odb/semantics/relational/name.cxx +++ /dev/null @@ -1,89 +0,0 @@ -// file : odb/semantics/relational/name.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include -#include - -#include - -using namespace std; - -namespace semantics -{ - namespace relational - { - string qname:: - string () const - { - std::string r; - - bool f (true); - for (iterator i (begin ()); i < end (); ++i) - { - if (i->empty ()) - continue; - - if (f) - f = false; - else - r += '.'; - - r += *i; - } - - return r; - } - - qname qname:: - from_string (std::string const& s) - { - using std::string; - - qname n; - - string::size_type p (string::npos); - - for (size_t i (0); i < s.size (); ++i) - { - char c (s[i]); - - if (c == '.') - { - if (p == string::npos) - n.append (string (s, 0, i)); - else - n.append (string (s, p + 1, i - p - 1)); - - p = i; - } - } - - if (p == string::npos) - n.append (s); - else - n.append (string (s, p + 1, string::npos)); - - return n; - } - - ostream& - operator<< (ostream& os, qname const& n) - { - return os << n.string (); - } - - istream& - operator>> (istream& is, qname& n) - { - string s; - is >> s; - - if (!is.fail ()) - n = qname::from_string (s); - else - n.clear (); - - return is; - } - } -} diff --git a/odb/semantics/relational/name.hxx b/odb/semantics/relational/name.hxx deleted file mode 100644 index 5268b4a..0000000 --- a/odb/semantics/relational/name.hxx +++ /dev/null @@ -1,159 +0,0 @@ -// file : odb/semantics/relational/name.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_NAME_HXX -#define ODB_SEMANTICS_RELATIONAL_NAME_HXX - -#include -#include -#include - -namespace semantics -{ - namespace relational - { - typedef std::string uname; - - class qname - { - public: - typedef relational::uname uname_type; - - qname () {} - - explicit - qname (uname_type const& n) {append (n);} - - template - qname (I begin, I end) - { - for (; begin != end; ++begin) - append (*begin); - } - - qname& - operator= (uname_type const& n) - { - components_.resize (1); - components_[0] = n; - return *this; - } - - void - append (uname_type const& n) {components_.push_back (n);} - - void - append (qname const& n) - { - components_.insert (components_.end (), - n.components_.begin (), - n.components_.end ()); - } - - void - clear () {components_.clear ();} - - // Append a string to the last component. - // - qname& - operator+= (std::string const& s) - { - if (empty ()) - append (s); - else - uname () += s; - - return *this; - } - - friend qname - operator+ (qname const& n, std::string const& s) - { - qname r (n); - - if (r.empty ()) - r.append (s); - else - r.uname () += s; - - return r; - } - - void - swap (qname& n) {components_.swap (n.components_);} - - public: - bool - empty () const {return components_.empty ();} - - bool - qualified () const {return components_.size () > 1;} - - bool - fully_qualified () const - { - return qualified () && components_.front ().empty (); - } - - public: - typedef std::vector components; - typedef components::const_iterator iterator; - - iterator - begin () const {return components_.begin ();} - - iterator - end () const {return components_.end ();} - - uname_type& - uname () {return components_.back ();} - - uname_type const& - uname () const {return components_.back ();} - - qname - qualifier () const - { - return empty () - ? qname () - : qname (components_.begin (), components_.end () - 1); - } - - std::string - string () const; - - static qname - from_string (std::string const&); - - public: - friend bool - operator== (qname const& x, qname const& y) - { - return x.components_ == y.components_; - } - - friend bool - operator!= (qname const& x, qname const& y) - { - return x.components_ != y.components_; - } - - friend bool - operator< (qname const& x, qname const& y) - { - return x.components_ < y.components_; - } - - private: - components components_; - }; - - std::ostream& - operator<< (std::ostream&, qname const&); - - std::istream& - operator>> (std::istream&, qname&); - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_NAME_HXX diff --git a/odb/semantics/relational/primary-key.cxx b/odb/semantics/relational/primary-key.cxx deleted file mode 100644 index 235340f..0000000 --- a/odb/semantics/relational/primary-key.cxx +++ /dev/null @@ -1,80 +0,0 @@ -// file : odb/semantics/relational/primary-key.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - primary_key:: - primary_key (primary_key const& k, uscope& s, graph& g) - : key (k, s, g), auto__ (k.auto__), extra_map_ (k.extra_map_) - { - } - - primary_key:: - primary_key (xml::parser& p, uscope& s, graph& g) - : key (p, s, g), - auto__ (p.attribute ("auto", false)) - { - // All unhandled attributes go into the extra map. - // - typedef xml::parser::attribute_map_type attr_map; - attr_map const& am (p.attribute_map ()); - - for (attr_map::const_iterator i (am.begin ()); i != am.end (); ++i) - { - if (!i->second.handled) - extra_map_[i->first.name ()] = i->second.value; - } - } - - primary_key& primary_key:: - clone (uscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void primary_key:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "primary-key"); - key::serialize_attributes (s); - - if (auto_ ()) - s.attribute ("auto", true); - - for (extra_map::const_iterator i (extra_map_.begin ()); - i != extra_map_.end (); ++i) - s.attribute (i->first, i->second); - - key::serialize_content (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - unameable::parser_map_["primary-key"] = - &unameable::parser_impl; - - using compiler::type_info; - - { - type_info ti (typeid (primary_key)); - ti.add_base (typeid (key)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/primary-key.hxx b/odb/semantics/relational/primary-key.hxx deleted file mode 100644 index 114f682..0000000 --- a/odb/semantics/relational/primary-key.hxx +++ /dev/null @@ -1,62 +0,0 @@ -// file : odb/semantics/relational/primary-key.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_PRIMARY_KEY_HXX -#define ODB_SEMANTICS_RELATIONAL_PRIMARY_KEY_HXX - -#include - -#include -#include - -namespace semantics -{ - namespace relational - { - class primary_key: public key - { - public: - bool - auto_ () const {return auto__;} - - // Extra information. - // - public: - typedef std::map extra_map; - - extra_map& - extra () {return extra_map_;} - - extra_map const& - extra () const {return extra_map_;} - - public: - primary_key (bool auto_) - : key (""), // Primary key has the implicit empty id. - auto__ (auto_) - { - } - - primary_key (primary_key const&, uscope&, graph&); - primary_key (xml::parser&, uscope&, graph&); - - virtual primary_key& - clone (uscope&, graph&) const; - - virtual string - kind () const - { - return "primary key"; - } - - virtual void - serialize (xml::serializer&) const; - - private: - bool auto__; - extra_map extra_map_; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_PRIMARY_KEY_HXX diff --git a/odb/semantics/relational/table.cxx b/odb/semantics/relational/table.cxx deleted file mode 100644 index 3bf763d..0000000 --- a/odb/semantics/relational/table.cxx +++ /dev/null @@ -1,183 +0,0 @@ -// file : odb/semantics/relational/table.cxx -// license : GNU GPL v3; see accompanying LICENSE file - -#include - -#include - -namespace semantics -{ - namespace relational - { - // table - // - table:: - table (table const& t, qscope& s, graph& g, bool b) - : qnameable (t, g), - uscope (t, (b ? s.lookup (t.name ()) : 0), g), - options_ (t.options_), - extra_map_ (t.extra_map_) - { - } - - table:: - table (xml::parser& p, qscope& s, graph& g, bool b) - : qnameable (p, g), - uscope ( - p, - (b ? s.lookup ( - p.attribute ("name")) : 0), - g), - options_ (p.attribute ("options", string ())) - { - // All unhandled attributes go into the extra map. - // - typedef xml::parser::attribute_map_type attr_map; - attr_map const& am (p.attribute_map ()); - - for (attr_map::const_iterator i (am.begin ()); i != am.end (); ++i) - { - if (!i->second.handled) - extra_map_[i->first.name ()] = i->second.value; - } - } - - table& table:: - clone (qscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void table:: - serialize_attributes (xml::serializer& s) const - { - qnameable::serialize_attributes (s); - - if (!options_.empty ()) - s.attribute ("options", options_); - - for (extra_map::const_iterator i (extra_map_.begin ()); - i != extra_map_.end (); ++i) - s.attribute (i->first, i->second); - } - - void table:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "table"); - serialize_attributes (s); - uscope::serialize_content (s); - s.end_element (); - } - - // add_table - // - add_table& add_table:: - clone (qscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void add_table:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "add-table"); - table::serialize_attributes (s); - table::serialize_content (s); - s.end_element (); - } - - // drop_table - // - drop_table:: - drop_table (xml::parser& p, qscope&, graph& g) - : qnameable (p, g) - { - p.content (xml::content::empty); - } - - drop_table& drop_table:: - clone (qscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void drop_table:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "drop-table"); - qnameable::serialize_attributes (s); - s.end_element (); - } - - // alter_table - // - alter_table& alter_table:: - clone (qscope& s, graph& g) const - { - return g.new_node (*this, s, g); - } - - void alter_table:: - serialize (xml::serializer& s) const - { - s.start_element (xmlns, "alter-table"); - table::serialize_attributes (s); - table::serialize_content (s); - s.end_element (); - } - - // type info - // - namespace - { - struct init - { - init () - { - qnameable::parser_map& m (qnameable::parser_map_); - - m["table"] = &qnameable::parser_impl
; - m["add-table"] = &qnameable::parser_impl; - m["drop-table"] = &qnameable::parser_impl; - m["alter-table"] = &qnameable::parser_impl; - - using compiler::type_info; - - // table - // - { - type_info ti (typeid (table)); - ti.add_base (typeid (qnameable)); - ti.add_base (typeid (uscope)); - insert (ti); - } - - // add_table - // - { - type_info ti (typeid (add_table)); - ti.add_base (typeid (table)); - insert (ti); - } - - // drop_table - // - { - type_info ti (typeid (drop_table)); - ti.add_base (typeid (qnameable)); - insert (ti); - } - - // alter_table - // - { - type_info ti (typeid (alter_table)); - ti.add_base (typeid (table)); - insert (ti); - } - } - } init_; - } - } -} diff --git a/odb/semantics/relational/table.hxx b/odb/semantics/relational/table.hxx deleted file mode 100644 index 1c4efcf..0000000 --- a/odb/semantics/relational/table.hxx +++ /dev/null @@ -1,115 +0,0 @@ -// file : odb/semantics/relational/table.hxx -// license : GNU GPL v3; see accompanying LICENSE file - -#ifndef ODB_SEMANTICS_RELATIONAL_TABLE_HXX -#define ODB_SEMANTICS_RELATIONAL_TABLE_HXX - -#include - -namespace semantics -{ - namespace relational - { - class table: public qnameable, public uscope - { - public: - virtual string const& - options () const {return options_;} - - virtual void - options (string const& o) {options_ = o;} - - // Extra information. - // - public: - typedef std::map extra_map; - - extra_map& - extra () {return extra_map_;} - - extra_map const& - extra () const {return extra_map_;} - - public: - table (string const& id): qnameable (id) {} - table (table const&, qscope&, graph&, bool base = false); - table (xml::parser&, qscope&, graph&, bool base = false); - - virtual table& - clone (qscope&, graph&) const; - - virtual string - kind () const {return "table";} - - virtual void - serialize (xml::serializer&) const; - - // Resolve ambiguity. - // - using qnameable::scope; - - protected: - void - serialize_attributes (xml::serializer&) const; - - protected: - string options_; - extra_map extra_map_; - }; - - class add_table: public table - { - public: - add_table (string const& id): table (id) {} - add_table (table const& t, qscope& s, graph& g): table (t, s, g) {} - add_table (xml::parser& p, qscope& s, graph& g): table (p, s, g) {} - - virtual add_table& - clone (qscope&, graph&) const; - - virtual string - kind () const {return "add table";} - - virtual void - serialize (xml::serializer&) const; - }; - - class drop_table: public qnameable - { - public: - drop_table (string const& id): qnameable (id) {} - drop_table (drop_table const& t, qscope&, graph& g): qnameable (t, g) {} - drop_table (xml::parser&, qscope&, graph&); - - virtual drop_table& - clone (qscope&, graph&) const; - - virtual string - kind () const {return "drop table";} - - virtual void - serialize (xml::serializer&) const; - }; - - class alter_table: public table - { - public: - alter_table (string const& id): table (id) {} - alter_table (alter_table const& at, qscope& s, graph& g) - : table (at, s, g, true) {} - alter_table (xml::parser& p, qscope& s, graph& g) - : table (p, s, g, true) {} - - virtual alter_table& - clone (qscope&, graph&) const; - - virtual string - kind () const {return "alter table";} - - virtual void - serialize (xml::serializer&) const; - }; - } -} - -#endif // ODB_SEMANTICS_RELATIONAL_TABLE_HXX -- cgit v1.1