~ubuntu-branches/ubuntu/raring/apgdiff/raring

« back to all changes in this revision

Viewing changes to src/main/java/cz/startnet/utils/pgdiff/schema/PgView.java

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Berg
  • Date: 2010-10-11 09:08:18 UTC
  • mfrom: (2.1.7 sid)
  • Revision ID: james.westby@ubuntu.com-20101011090818-sdw8yfemrnxo328k
Tags: 2.2.2-1
* New upstream version.
* Using changelog included in zipfile, thanks Miroslav for providing this.
* Update manpage.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Copyright 2006 StartNet s.r.o.
 
3
 *
 
4
 * Distributed under MIT license
 
5
 */
1
6
package cz.startnet.utils.pgdiff.schema;
2
7
 
3
8
import cz.startnet.utils.pgdiff.PgDiffUtils;
 
9
import java.util.ArrayList;
 
10
import java.util.Collections;
 
11
import java.util.List;
4
12
 
5
13
/**
6
14
 * Stores view information.
10
18
public class PgView {
11
19
 
12
20
    /**
13
 
     * String specifying column names.
 
21
     * List of column names.
14
22
     */
15
 
    private String columnNames;
 
23
    private List<String> columnNames;
16
24
    /**
17
25
     * Name of the view.
18
26
     */
21
29
     * SQL query of the view.
22
30
     */
23
31
    private String query;
 
32
    /**
 
33
     * List of optional column default values.
 
34
     */
 
35
    private final List<DefaultValue> defaultValues =
 
36
            new ArrayList<DefaultValue>(0);
24
37
 
25
38
    /**
26
39
     * Creates a new PgView object.
28
41
     * @param name {@link #name}
29
42
     */
30
43
    public PgView(final String name) {
31
 
        super();
32
44
        this.name = name;
33
45
    }
34
46
 
37
49
     *
38
50
     * @param columnNames {@link #columnNames}
39
51
     */
40
 
    public void setColumnNames(final String columnNames) {
 
52
    @SuppressWarnings("AssignmentToCollectionOrArrayFieldFromParameter")
 
53
    public void setColumnNames(final List<String> columnNames) {
41
54
        this.columnNames = columnNames;
42
55
    }
43
56
 
44
57
    /**
45
 
     * Getter for {@link #columnNames}.
 
58
     * Getter for {@link #columnNames}. The list cannot be modified.
46
59
     *
47
60
     * @return {@link #columnNames}
48
61
     */
49
 
    public String getColumnNames() {
50
 
        return columnNames;
 
62
    public List<String> getColumnNames() {
 
63
        return Collections.unmodifiableList(columnNames);
51
64
    }
52
65
 
53
66
    /**
54
67
     * Creates and returns SQL for creation of the view.
55
68
     *
56
 
     * @param quoteNames whether names should be quoted
57
 
     *
58
 
     * @return created SQL command
 
69
     * @return created SQL statement
59
70
     */
60
 
    public String getCreationSQL(final boolean quoteNames) {
61
 
        final StringBuilder sbSQL = new StringBuilder();
 
71
    public String getCreationSQL() {
 
72
        final StringBuilder sbSQL = new StringBuilder(query.length() * 2);
62
73
        sbSQL.append("CREATE VIEW ");
63
 
        sbSQL.append(PgDiffUtils.getQuotedName(name, quoteNames));
 
74
        sbSQL.append(PgDiffUtils.getQuotedName(name));
64
75
 
65
 
        if ((columnNames != null) && (columnNames.length() > 0)) {
 
76
        if (columnNames != null && !columnNames.isEmpty()) {
66
77
            sbSQL.append(" (");
67
 
            sbSQL.append(columnNames);
 
78
 
 
79
            for (int i = 0; i < columnNames.size(); i++) {
 
80
                if (i > 0) {
 
81
                    sbSQL.append(", ");
 
82
                }
 
83
 
 
84
                sbSQL.append(PgDiffUtils.getQuotedName(columnNames.get(i)));
 
85
            }
68
86
            sbSQL.append(')');
69
87
        }
70
88
 
72
90
        sbSQL.append(query);
73
91
        sbSQL.append(';');
74
92
 
 
93
        for (final DefaultValue defaultValue : defaultValues) {
 
94
            sbSQL.append("\n\nALTER VIEW ");
 
95
            sbSQL.append(PgDiffUtils.getQuotedName(name));
 
96
            sbSQL.append(" ALTER COLUMN ");
 
97
            sbSQL.append(
 
98
                    PgDiffUtils.getQuotedName(defaultValue.getColumnName()));
 
99
            sbSQL.append(" SET DEFAULT ");
 
100
            sbSQL.append(defaultValue.getDefaultValue());
 
101
            sbSQL.append(';');
 
102
        }
 
103
 
75
104
        return sbSQL.toString();
76
105
    }
77
106
 
78
107
    /**
79
 
     * Creates and returns SQL command for dropping the view.
80
 
     *
81
 
     * @param quoteNames whether names should be quoted
82
 
     *
83
 
     * @return created SQL command
 
108
     * Creates and returns SQL statement for dropping the view.
 
109
     *
 
110
     * @return created SQL statement
84
111
     */
85
 
    public String getDropSQL(final boolean quoteNames) {
86
 
        return "DROP VIEW " + PgDiffUtils.getQuotedName(getName(), quoteNames)
87
 
                + ";";
 
112
    public String getDropSQL() {
 
113
        return "DROP VIEW " + PgDiffUtils.getQuotedName(getName()) + ";";
88
114
    }
89
115
 
90
116
    /**
113
139
    public String getQuery() {
114
140
        return query;
115
141
    }
 
142
 
 
143
    /**
 
144
     * Adds/replaces column default value specification.
 
145
     *
 
146
     * @param columnName column name
 
147
     * @param defaultValue default value
 
148
     */
 
149
    public void addColumnDefaultValue(final String columnName,
 
150
            final String defaultValue) {
 
151
        removeColumnDefaultValue(columnName);
 
152
        defaultValues.add(new DefaultValue(columnName, defaultValue));
 
153
    }
 
154
 
 
155
    /**
 
156
     * Removes column default value if present.
 
157
     *
 
158
     * @param columnName column name
 
159
     */
 
160
    public void removeColumnDefaultValue(final String columnName) {
 
161
        for (final DefaultValue item : defaultValues) {
 
162
            if (item.getColumnName().equals(columnName)) {
 
163
                defaultValues.remove(item);
 
164
                return;
 
165
            }
 
166
        }
 
167
    }
 
168
 
 
169
    /**
 
170
     * Getter for {@link #defaultValues}.
 
171
     *
 
172
     * @return {@link #defaultValues}
 
173
     */
 
174
    public List<DefaultValue> getDefaultValues() {
 
175
        return Collections.unmodifiableList(defaultValues);
 
176
    }
 
177
 
 
178
    /**
 
179
     * Contains information about default value of column.
 
180
     */
 
181
    @SuppressWarnings("PublicInnerClass")
 
182
    public class DefaultValue {
 
183
 
 
184
        /**
 
185
         * Column name.
 
186
         */
 
187
        private final String columnName;
 
188
        /**
 
189
         * Default value.
 
190
         */
 
191
        private final String defaultValue;
 
192
 
 
193
        /**
 
194
         * Creates new instance of DefaultValue.
 
195
         *
 
196
         * @param columnName {@link #columnName}
 
197
         * @param defaultValue {@link #defaultValue}
 
198
         */
 
199
        DefaultValue(final String columnName, final String defaultValue) {
 
200
            this.columnName = columnName;
 
201
            this.defaultValue = defaultValue;
 
202
        }
 
203
 
 
204
        /**
 
205
         * Getter for {@link #columnName}.
 
206
         *
 
207
         * @return {@link #columnName}
 
208
         */
 
209
        public String getColumnName() {
 
210
            return columnName;
 
211
        }
 
212
 
 
213
        /**
 
214
         * Getter for {@link #defaultValue}.
 
215
         *
 
216
         * @return {@link #defaultValue}
 
217
         */
 
218
        public String getDefaultValue() {
 
219
            return defaultValue;
 
220
        }
 
221
    }
116
222
}