0
|
1 /* Copyright (c) 2012 Tomislav Gountchev <tomi@gountchev.net> */
|
|
2
|
|
3 package jdbcpgbackup;
|
|
4
|
|
5 import java.sql.Connection;
|
|
6 import java.sql.PreparedStatement;
|
|
7 import java.sql.ResultSet;
|
|
8 import java.sql.SQLException;
|
|
9 import java.util.ArrayList;
|
|
10 import java.util.List;
|
|
11
|
|
12 final class View extends DbBackupObject {
|
|
13
|
|
14 static class ViewFactory implements DBOFactory<View> {
|
|
15
|
|
16 @Override
|
|
17 public Iterable<View> getDbBackupObjects(Connection con, Schema schema) throws SQLException {
|
|
18 List<View> views = new ArrayList<View>();
|
|
19 PreparedStatement stmt = null;
|
|
20 try {
|
|
21 stmt = con.prepareStatement(
|
|
22 "SELECT * FROM pg_views WHERE schemaname = ?");
|
|
23 stmt.setString(1, schema.getName());
|
|
24 ResultSet rs = stmt.executeQuery();
|
|
25 while (rs.next()) {
|
|
26 views.add(new View(rs.getString("viewname"), schema, rs.getString("viewowner"), rs.getString("definition")));
|
|
27 }
|
|
28 rs.close();
|
|
29 } finally {
|
|
30 if (stmt != null) stmt.close();
|
|
31 }
|
|
32 return views;
|
|
33 }
|
|
34
|
|
35 @Override
|
|
36 public View getDbBackupObject(Connection con, String viewName, Schema schema) throws SQLException {
|
|
37 View view = null;
|
|
38 PreparedStatement stmt = null;
|
|
39 try {
|
|
40 stmt = con.prepareStatement(
|
|
41 "SELECT * FROM pg_views WHERE schemaname = ? AND viewname = ?");
|
|
42 stmt.setString(1, schema.getName());
|
|
43 stmt.setString(2, viewName);
|
|
44 ResultSet rs = stmt.executeQuery();
|
|
45 if (rs.next())
|
|
46 view = new View(viewName, schema, rs.getString("viewowner"), rs.getString("definition"));
|
|
47 else
|
|
48 throw new RuntimeException("no such view: " + viewName);
|
|
49 rs.close();
|
|
50 } finally {
|
|
51 if (stmt != null) stmt.close();
|
|
52 }
|
|
53 return view;
|
|
54 }
|
|
55 }
|
|
56
|
|
57 static class CachingViewFactory extends CachingDBOFactory<View> {
|
|
58
|
|
59 protected CachingViewFactory(Schema.CachingSchemaFactory schemaFactory) {
|
|
60 super(schemaFactory);
|
|
61 }
|
|
62
|
|
63 @Override
|
|
64 protected final PreparedStatement getAllStatement(Connection con) throws SQLException {
|
|
65 return con.prepareStatement(
|
|
66 "SELECT c.relnamespace AS schema_oid, c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, " +
|
|
67 "pg_get_viewdef(c.oid) AS definition " +
|
|
68 "FROM pg_class c " +
|
|
69 "WHERE c.relkind = 'v'::\"char\"");
|
|
70 /*
|
|
71 "SELECT * FROM pg_views " +
|
|
72 "WHERE schemaname NOT LIKE 'pg_%' " +
|
|
73 "AND schemaname <> 'information_schema'");
|
|
74 */
|
|
75 }
|
|
76
|
|
77 @Override
|
|
78 protected final View newDbBackupObject(Connection con, ResultSet rs, Schema schema) throws SQLException {
|
|
79 return new View(rs.getString("viewname"), schema,
|
|
80 rs.getString("viewowner"), rs.getString("definition"));
|
|
81 }
|
|
82
|
|
83 }
|
|
84
|
|
85
|
|
86 private final String definition;
|
|
87
|
|
88 private View(String name, Schema schema, String owner, String definition) {
|
|
89 super(name, schema, owner);
|
|
90 this.definition = definition;
|
|
91 }
|
|
92
|
|
93 @Override
|
|
94 protected StringBuilder appendCreateSql(StringBuilder buf) {
|
|
95 buf.append("CREATE VIEW ");
|
|
96 buf.append(getName());
|
|
97 buf.append(" AS ");
|
|
98 buf.append(definition);
|
|
99 buf.append(" ;\n");
|
|
100 return buf;
|
|
101 }
|
|
102
|
|
103 }
|