File: CreateStatementGenerator.h

package info (click to toggle)
kphotoalbum 4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 21,324 kB
  • sloc: cpp: 35,900; python: 743; xml: 483; sh: 146; perl: 34; makefile: 16
file content (141 lines) | stat: -rw-r--r-- 4,395 bytes parent folder | download
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
  Copyright (C) 2007-2010 Tuomas Suutari <thsuut@utu.fi>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program (see the file COPYING); if not, write to the
  Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
  MA 02110-1301 USA.
*/

#ifndef SQLDB_CREATESTATEMENTGENERATOR_H
#define SQLDB_CREATESTATEMENTGENERATOR_H

#include "DatabaseSchema.h"
#include <memory>
#include <list>
#include <string>

namespace SQLDB
{
    namespace Schema
    {
        using std::list;
        using std::string;

        /** Generates SQL create statements from a database schema.
         *
         * With this interface it is possible to create SQL database
         * from a DatabaseSchema object in the ame way regardless of
         * the DBMS in use.
         */
        class CreateStatementGenerator
        {
        public:
            typedef std::auto_ptr<CreateStatementGenerator> APtr;

            virtual ~CreateStatementGenerator() {}

            /** Generate SQL commands for creating a database.
             *
             * Execute the returned commands to create a new database
             * with the given schema.
             */
            virtual const list<string>&
            generateCreateStatements(const DatabaseSchema& schema);

        protected:
            virtual void
            makeTable(const TableSchema& t, list<string>& destList) const = 0;

            virtual void
            makeIndices(const TableSchema& t,
                        list<string>& destList) const = 0;

            virtual void
            makeMetadataInserts(const Identifier& id,
                                list<string>& destList) const = 0;

        private:
            list<string> _statementList;
        };


        /** Basic CreateStatementGenerator implementation.
         *
         * Useful as a base class for other CSG classes. Just
         * overwrite the virtual methods you want to have different
         * behaviour.
         */
        class BaseCSG: public CreateStatementGenerator
        {
        public:
            virtual ~BaseCSG() {}

        protected:
            virtual const char*
            getTypeKeyword(const Field& f) const;

            virtual const char*
            getConstraintKeyword(Constraint c) const;

            virtual const char*
            getPolicyKeyword(Policy p) const;

            virtual void
            makeTable(const TableSchema& t, list<string>& destList) const;

            virtual void
            makeIndices(const TableSchema& t, list<string>& destList) const;

            virtual void
            makeMetadataInserts(const Identifier& id,
                                list<string>& destList) const;

            virtual void
            makeField(const Field& f, string& destStr) const;

            virtual void
            makeFieldSuffix(const Field& f, string& destStr) const;

            virtual void
            makeFieldType(const Field& f, string& destStr) const;

            virtual void
            makeFieldConstraints(const Field& f, string& destStr) const;

            virtual void
            makeFieldDefaultValue(const Field& f, string& destStr) const;

            virtual void
            makeConstraints(const TableSchema& t, string& destStr) const;

            virtual void
            makePrimaryKey(const StringTuple& pk, string& destStr) const;

            virtual void
            makeForeignKey(const ForeignKey& fk, string& destStr) const;

            virtual void
            makeUniqueIndices(const StringTupleList& ul,
                              string& destStr) const;

            virtual void
            makeStringTuple(const StringTuple& st, string& destStr) const;

            virtual void
            makeNumber(int n, string& destStr) const;
        };
    }
}

#endif /* SQLDB_CREATESTATEMENTGENERATOR_H */