Mercurial Hosting > nabble
comparison src/jdbcpgbackup/CachingDBOFactory.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:7ecd1a4ef557 |
---|---|
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.Collections; | |
10 import java.util.HashMap; | |
11 import java.util.Map; | |
12 | |
13 public abstract class CachingDBOFactory<T extends DbBackupObject> implements DBOFactory<T> { | |
14 | |
15 protected final Schema.CachingSchemaFactory schemaFactory; | |
16 | |
17 protected Map<String,Map<String,T>> map = null; | |
18 | |
19 protected CachingDBOFactory(Schema.CachingSchemaFactory schemaFactory) { | |
20 this.schemaFactory = schemaFactory; | |
21 } | |
22 | |
23 @Override | |
24 public Iterable<T> getDbBackupObjects(Connection con, Schema schema) throws SQLException { | |
25 if (map == null) { | |
26 loadMap(con); | |
27 } | |
28 Map<String,T> dbos = map.get(schema.getName()); | |
29 if (dbos == null) return Collections.emptyList(); | |
30 else return Collections.unmodifiableCollection(dbos.values()); | |
31 } | |
32 | |
33 @Override | |
34 public T getDbBackupObject(Connection con, String name, Schema schema) throws SQLException { | |
35 if (map == null) { | |
36 loadMap(con); | |
37 } | |
38 Map<String,T> dbos = map.get(schema.getName()); | |
39 return dbos == null ? null : dbos.get(name); | |
40 } | |
41 | |
42 protected void loadMap(Connection con) throws SQLException { | |
43 map = new HashMap<String,Map<String,T>>(); | |
44 PreparedStatement stmt = null; | |
45 try { | |
46 stmt = getAllStatement(con); | |
47 ZipBackup.debug("loading map in " + CachingDBOFactory.this.getClass()); | |
48 ResultSet rs = stmt.executeQuery(); | |
49 while (rs.next()) { | |
50 Schema schema = schemaFactory.getFromCurrentBatch(rs.getInt("schema_oid")); | |
51 if (schema == null) continue; | |
52 Map<String,T> dbos = map.get(schema.getName()); | |
53 if (dbos == null) { | |
54 dbos = new HashMap<String,T>(); | |
55 map.put(schema.getName(), dbos); | |
56 } | |
57 T dbo = newDbBackupObject(con, rs, schema); | |
58 dbos.put(dbo.getName(), dbo); | |
59 } | |
60 rs.close(); | |
61 } finally { | |
62 if (stmt != null) stmt.close(); | |
63 } | |
64 } | |
65 | |
66 protected abstract PreparedStatement getAllStatement(Connection con) throws SQLException; | |
67 | |
68 protected abstract T newDbBackupObject(Connection con, ResultSet rs, Schema schema) throws SQLException; | |
69 | |
70 } |