1 | |
package liquibase.sql; |
2 | |
|
3 | |
import java.util.ArrayList; |
4 | |
import java.util.Arrays; |
5 | |
import java.util.HashSet; |
6 | |
import java.util.List; |
7 | |
import java.util.Set; |
8 | |
|
9 | |
import liquibase.database.structure.DatabaseObject; |
10 | |
|
11 | 0 | public class UnparsedSql implements Sql { |
12 | |
|
13 | |
private String sql; |
14 | |
private String endDelimiter; |
15 | 21 | private Set<DatabaseObject> affectedDatabaseObjects = new HashSet<DatabaseObject>(); |
16 | |
|
17 | |
public UnparsedSql(String sql, DatabaseObject... affectedDatabaseObjects) { |
18 | 21 | this(sql, ";", affectedDatabaseObjects); |
19 | 21 | } |
20 | |
|
21 | 21 | public UnparsedSql(String sql, String endDelimiter, DatabaseObject... affectedDatabaseObjects) { |
22 | 21 | this.sql = sql.trim(); |
23 | 21 | this.endDelimiter = endDelimiter; |
24 | |
|
25 | 21 | this.affectedDatabaseObjects.addAll(Arrays.asList(affectedDatabaseObjects)); |
26 | 21 | List<DatabaseObject> moreAffectedDatabaseObjects = new ArrayList<DatabaseObject>(); |
27 | |
|
28 | 21 | boolean foundMore = true; |
29 | 42 | while (foundMore) { |
30 | 21 | for (DatabaseObject object : this.affectedDatabaseObjects) { |
31 | 0 | DatabaseObject[] containingObjects = object.getContainingObjects(); |
32 | 0 | if (containingObjects != null) { |
33 | 0 | for (DatabaseObject containingObject : containingObjects) { |
34 | 0 | if (containingObject != null && !this.affectedDatabaseObjects.contains(containingObject) |
35 | |
&& !moreAffectedDatabaseObjects.contains(containingObject)) { |
36 | 0 | moreAffectedDatabaseObjects.add(containingObject); |
37 | |
} |
38 | |
} |
39 | |
} |
40 | 0 | } |
41 | 21 | foundMore = moreAffectedDatabaseObjects.size() > 0; |
42 | 21 | this.affectedDatabaseObjects.addAll(moreAffectedDatabaseObjects); |
43 | 21 | moreAffectedDatabaseObjects.clear(); |
44 | |
} |
45 | |
|
46 | 21 | this.affectedDatabaseObjects.addAll(moreAffectedDatabaseObjects); |
47 | 21 | } |
48 | |
|
49 | |
@Override |
50 | |
public String toSql() { |
51 | 21 | return sql; |
52 | |
} |
53 | |
|
54 | |
@Override |
55 | |
public String getEndDelimiter() { |
56 | 0 | return endDelimiter; |
57 | |
} |
58 | |
|
59 | |
@Override |
60 | |
public Set<? extends DatabaseObject> getAffectedDatabaseObjects() { |
61 | 0 | return affectedDatabaseObjects; |
62 | |
} |
63 | |
} |