aboutsummaryrefslogtreecommitdiff
path: root/odb/semantics/relational/table.hxx
blob: 9f56843daebf61e1f34d0dc0e1482abb974500ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// file      : odb/semantics/relational/table.hxx
// copyright : Copyright (c) 2009-2018 Code Synthesis Tools CC
// license   : GNU GPL v3; see accompanying LICENSE file

#ifndef ODB_SEMANTICS_RELATIONAL_TABLE_HXX
#define ODB_SEMANTICS_RELATIONAL_TABLE_HXX

#include <odb/semantics/relational/elements.hxx>

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<string, string> 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