16
16
import java .util .List ;
17
17
import java .util .Map ;
18
18
19
- import static com .googlecode .scheme2ddl .TypeNamesUtil .map2TypeForConfig ;
19
+ // import static com.googlecode.scheme2ddl.TypeNamesUtil.map2TypeForConfig;
20
20
21
21
/**
22
22
* @author A_Reshetnikov
@@ -30,32 +30,63 @@ public class UserObjectDaoImpl extends JdbcDaoSupport implements UserObjectDao {
30
30
private String schemaName ;
31
31
@ Value ("#{jobParameters['launchedByDBA']}" )
32
32
private boolean isLaunchedByDBA = false ;
33
+ @ Value ("#{jobParameters['objectFilter']}" )
34
+ private String objectFilter ;
35
+ @ Value ("#{jobParameters['typeFilter']}" )
36
+ private String typeFilter ;
37
+ @ Value ("#{jobParameters['typeFilterMode']}" )
38
+ private String typeFilterMode = "include" ;
33
39
34
40
public List <UserObject > findListForProccessing () {
35
41
String sql ;
36
- if (isLaunchedByDBA )
37
- sql = "select t.object_name, t. object_type " +
42
+ if (isLaunchedByDBA ) {
43
+ sql = "select t.object_name, object_type " +
38
44
" from dba_objects t " +
39
45
" where t.generated = 'N' " +
46
+ " and lower(t.object_name) like '" + objectFilter + "' " +
40
47
" and t.owner = '" + schemaName + "' " +
41
48
" and not exists (select 1 " +
42
49
" from user_nested_tables unt" +
43
- " where t.object_name = unt.table_name)" +
44
- " UNION ALL " +
45
- " select rname as object_name, 'REFRESH_GROUP' as object_type " +
46
- " from dba_refresh a " +
47
- " where a.rowner = '" + schemaName + "' " ;
48
- else
49
- sql = "select t.object_name, t.object_type " +
50
+ " where t.object_name = unt.table_name)" ;
51
+ if (!typeFilter .isEmpty ()) { //type filter is filled
52
+ sql += " and upper(t.object_type) " ;
53
+
54
+ if (typeFilterMode .equals ("exclude" )) //exclude types
55
+ sql += " NOT " ;
56
+
57
+ sql += " IN (" + typeFilter + ") " ;
58
+ }
59
+ if (isTypeAllowed ("'REFRESH GROUP'" )) {
60
+ sql += " UNION ALL " +
61
+ " select rname as object_name, 'REFRESH_GROUP' as object_type " +
62
+ " from dba_refresh a " +
63
+ " where a.rowner = '" + schemaName + "' " +
64
+ " and lower(a.rname) like '" + objectFilter + "' " ;
65
+ }
66
+ } else {
67
+ sql = "select t.object_name, object_type " +
50
68
" from user_objects t " +
51
69
" where t.generated = 'N' " +
70
+ " and lower(t.object_name) like '" + objectFilter + "' " +
52
71
" and not exists (select 1 " +
53
72
" from user_nested_tables unt" +
54
- " where t.object_name = unt.table_name)" +
55
- " UNION ALL " +
56
- " select rname as object_name, 'REFRESH GROUP' as object_type " +
57
- " from user_refresh " ;
58
- return getJdbcTemplate ().query (sql , new UserObjectRowMapper ());
73
+ " where t.object_name = unt.table_name)" ;
74
+ if (!typeFilter .isEmpty ()) {
75
+ sql += " and upper(t.object_type) " ;
76
+
77
+ if (typeFilterMode .equals ("exclude" )) //exclude types
78
+ sql += " NOT " ;
79
+
80
+ sql += " IN (" + typeFilter + ") " ;
81
+ }
82
+ if (isTypeAllowed ("'REFRESH GROUP'" )) {
83
+ sql += " UNION ALL " +
84
+ " select rname as object_name, 'REFRESH_GROUP' as object_type " +
85
+ " from user_refresh " +
86
+ " where lower(rname) like '" + objectFilter + "' " ;
87
+ }
88
+ }
89
+ return getJdbcTemplate ().query (sql , new UserObjectRowMapper ());
59
90
}
60
91
61
92
public List <UserObject > findPublicDbLinks () {
@@ -64,7 +95,8 @@ public List<UserObject> findPublicDbLinks() {
64
95
list = getJdbcTemplate ().query (
65
96
"select db_link as object_name, 'PUBLIC DATABASE LINK' as object_type " +
66
97
"from DBA_DB_LINKS " +
67
- "where owner='PUBLIC'" ,
98
+ "where owner='PUBLIC'" +
99
+ " and lower(db_link) like '" + objectFilter + "' " ,
68
100
new UserObjectRowMapper ());
69
101
} catch (BadSqlGrammarException sqlGrammarException ) {
70
102
if (sqlGrammarException .getSQLException ().getErrorCode () == 942 ) {
@@ -97,26 +129,44 @@ public List<UserObject> findDmbsJobs() {
97
129
String tableName = isLaunchedByDBA ? "dba_jobs" : "user_jobs" ;
98
130
String whereClause = isLaunchedByDBA ? "schema_user = '" + schemaName + "'" : "schema_user != 'SYSMAN'" ;
99
131
String sql = "select job || '' as object_name, 'DBMS JOB' as object_type " +
100
- "from " + tableName + " where " + whereClause ;
101
- return getJdbcTemplate ().query (sql , new UserObjectRowMapper ());
132
+ "from " + tableName + " where " + whereClause + " and to_char(job) like '" + objectFilter + "' " ;
133
+ // a little bit ugly, but this prevents an output from jobs if dbms job is not in typeFilter
134
+ if (!isTypeAllowed ("'DBMS JOB'" )) {
135
+ sql += " and 1 = 2 " ;
136
+ }
137
+ return getJdbcTemplate ().query (sql , new UserObjectRowMapper ());
102
138
}
103
139
104
140
public List <UserObject > findConstaints () {
105
141
String sql ;
142
+ String prevent_constraint = new String ("" );
143
+ String prevent_refconstraint = new String ("" );
144
+
145
+ if (!isTypeAllowed ("'CONSTRAINT'" )) {
146
+ prevent_constraint = " and 1 = 2 " ;
147
+ }
148
+ if (!isTypeAllowed ("'REF_CONSTRAINT'" )) {
149
+ prevent_refconstraint = " and 1 = 2 " ;
150
+ }
106
151
if (isLaunchedByDBA )
107
152
sql = " select constraint_name as object_name, 'CONSTRAINT' as object_type" +
108
153
" from all_constraints " +
109
154
" where constraint_type != 'R' and owner = '" + schemaName + "'" +
155
+ " and lower(constraint_name) like '" + objectFilter + "' " + prevent_constraint +
110
156
" UNION ALL " +
111
157
" select constraint_name as object_name, 'REF_CONSTRAINT' as object_type" +
112
158
" from all_constraints " +
113
- " where constraint_type = 'R' and owner = '" + schemaName + "'" ;
159
+ " where constraint_type = 'R' and owner = '" + schemaName + "'" +
160
+ " and lower(constraint_name) like '" + objectFilter + "' " + prevent_refconstraint ;
114
161
else
115
162
sql = " select constraint_name as object_name, 'CONSTRAINT' as object_type" +
116
163
" from user_constraints where constraint_type != 'R'" +
164
+ " and lower(constraint_name) like '" + objectFilter + "' " + prevent_constraint +
117
165
" UNION ALL " +
118
166
" select constraint_name as object_name, 'REF_CONSTRAINT' as object_type" +
119
- " from user_constraints where constraint_type = 'R'" ;
167
+ " from user_constraints where constraint_type = 'R'" +
168
+ " and lower(constraint_name) like '" + objectFilter + "' " + prevent_refconstraint ;
169
+
120
170
return getJdbcTemplate ().query (sql , new UserObjectRowMapper ());
121
171
}
122
172
@@ -260,9 +310,20 @@ private class UserObjectRowMapper implements RowMapper {
260
310
public UserObject mapRow (ResultSet rs , int rowNum ) throws SQLException {
261
311
UserObject userObject = new UserObject ();
262
312
userObject .setName (rs .getString ("object_name" ));
263
- userObject .setType (rs .getString ("object_type" ));
313
+ userObject .setType (rs .getString ("object_type" ));
264
314
userObject .setSchema (schemaName == null ? "" : schemaName );
265
315
return userObject ;
266
316
}
267
317
}
318
+
319
+ private boolean isTypeAllowed (String typeName ) {
320
+ if (typeFilter .isEmpty ()) // empty type filter means all types are allowed
321
+ return true ;
322
+ if (typeFilterMode .equals ("include" ) && typeFilter .contains (typeName )) // given typeName is in the typeFilter
323
+ return true ;
324
+ if (typeFilterMode .equals ("exclude" ) && !typeFilter .contains (typeName )) // given typeName is not in the typeFilter
325
+ return true ;
326
+
327
+ return false ;
328
+ }
268
329
}
0 commit comments