Skip to content

Commit b0ff74d

Browse files
author
arno82
committed
Export refresh groups even without select_catalog_role
use a different mechanism for non dba users
1 parent 5ad9999 commit b0ff74d

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

src/main/java/com/googlecode/scheme2ddl/UserObjectProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ private String map2Ddl(UserObject userObject) throws CannotGetDDLException, NonS
7070
}
7171
if (userObject.getType().equals("PUBLIC DATABASE LINK")) {
7272
return userObjectDao.findDDLInPublicScheme(map2TypeForDBMS(userObject.getType()), userObject.getName());
73+
}
74+
if (userObject.getType().equals("REFRESH_GROUP")) {
75+
return userObjectDao.findRefGroupDDL(userObject.getType(), userObject.getName());
7376
}
7477
String res = userObjectDao.findPrimaryDDL(map2TypeForDBMS(userObject.getType()), userObject.getName());
7578
Set<String> dependedTypes = dependencies.get(userObject.getType());

src/main/java/com/googlecode/scheme2ddl/dao/UserObjectDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,7 @@ public interface UserObjectDao {
2626
String findDDLInPublicScheme(String type, String name);
2727

2828
String findDbmsJobDDL(String name);
29+
30+
String findRefGroupDDL(String type, String name);
2931

3032
}

src/main/java/com/googlecode/scheme2ddl/dao/UserObjectDaoImpl.java

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import java.util.List;
1717
import java.util.Map;
1818

19-
//import static com.googlecode.scheme2ddl.TypeNamesUtil.map2TypeForConfig;
19+
import static com.googlecode.scheme2ddl.TypeNamesUtil.map2TypeForDBMS;
2020

2121
/**
2222
* @author A_Reshetnikov
@@ -270,6 +270,69 @@ public String findDbmsJobDDL(String name) {
270270

271271
return (String) getJdbcTemplate().execute(sql, new CallableStatementCallbackImpl());
272272
}
273+
274+
public String findRefGroupDDL(String type, final String name) {
275+
if (isLaunchedByDBA)
276+
return findPrimaryDDL(map2TypeForDBMS(type), name);
277+
else
278+
return (String) getJdbcTemplate().execute(new ConnectionCallback() {
279+
final String query =
280+
"SELECT 'begin'"
281+
+ "|| CHR (13) || CHR (10)"
282+
+ "|| '-- dbms_refresh.destroy(name => '''"
283+
+ "|| rname"
284+
+ "|| ''');'"
285+
+ "|| CHR (13) || CHR (10)"
286+
+ "|| ' dbms_refresh.make (name => '''"
287+
+ "|| rname"
288+
+ "|| ''', '"
289+
+ "|| CHR (13) || CHR (10)"
290+
+ "|| ' list => '''"
291+
+ "|| listagg(name, ',') within group (order by name)"
292+
+ "|| ''','"
293+
+ "|| CHR (13) || CHR (10)"
294+
+ "|| ' next_date => '"
295+
+ "|| CASE WHEN MAX(next_date) IS NULL THEN 'NULL' ELSE 'to_date(''' || TO_CHAR (MAX (next_date), 'DD.MM.YYYY HH24:MI:SS') || ''', ''DD.MM.YYYY HH24:MI:SS'')' END"
296+
+ "|| ', '"
297+
+ "|| CHR (13) || CHR (10)"
298+
+ "|| ' interval => '"
299+
+ "|| CASE WHEN MAX(interval) IS NULL THEN 'NULL' ELSE '''' || MAX (REPLACE(interval, '''', '''''')) || '''' END "
300+
+ "|| ');'"
301+
+ "|| CHR (13) || CHR (10)"
302+
+ "|| ' commit;'"
303+
+ "|| CHR (13) || CHR (10)"
304+
+ "|| 'end;'"
305+
+ "|| CHR (13) || CHR (10)"
306+
+ "|| '/'"
307+
+ "|| CHR (13) || CHR (10)"
308+
+ " FROM user_refresh_children "
309+
+ " WHERE rname = UPPER ('"+name+"')"
310+
+ " GROUP BY rname";
311+
312+
public Object doInConnection(Connection connection) throws SQLException, DataAccessException {
313+
System.out.println(query);
314+
applyTransformParameters(connection);
315+
PreparedStatement ps = connection.prepareStatement(query);
316+
317+
ResultSet rs;
318+
319+
try {
320+
rs = ps.executeQuery();
321+
} catch (SQLException e) {
322+
log.trace(String.format("Error during select ddl for refresh group (%s)", name));
323+
return "";
324+
}
325+
try {
326+
if (rs.next()) {
327+
return rs.getString(1);
328+
}
329+
} finally {
330+
rs.close();
331+
}
332+
return null;
333+
}
334+
});
335+
}
273336

274337
public void applyTransformParameters(Connection connection) throws SQLException {
275338
for (String parameterName : transformParams.keySet()) {

0 commit comments

Comments
 (0)