Skip to content

Commit

Permalink
Error on disable/enable trigger on trigger that dont exists on old sc…
Browse files Browse the repository at this point in the history
…hema.

Copy corrections from:
Support Postgresql 12 - Fix incorrect disable trigger parsing of quoted identifiers. Bugfixes fordfrog#271 marcus-kempe
fix for null pointer exception fordfrog#270 marco44
Fix issue where rule parsing was throwing # 269-marcus-kempe
fixed some crashes fordfrog#257 d1maxa
  • Loading branch information
jalisson committed May 10, 2020
1 parent 08ee990 commit f2e986e
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 5 deletions.
3 changes: 3 additions & 0 deletions src/main/java/cz/startnet/utils/pgdiff/PgDiffTriggers.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
* Diffs triggers.
Expand Down Expand Up @@ -219,11 +220,13 @@ private static List<PgTrigger> getEnablerOrDisableTriggers(final PgRelation oldR

for (final PgTrigger newTrigger : newRelation.getTriggers()) {

if(Objects.nonNull(oldRelation)){
PgTrigger oldTrigger = oldRelation.getTrigger(newTrigger.getName());
if ((newTrigger.isDisable() && oldTrigger==null) ||
(oldTrigger!=null && oldTrigger.isDisable()!=newTrigger.isDisable())) {
list.add(newTrigger);
}
}
}

}
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/cz/startnet/utils/pgdiff/PgDiffViews.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
* Diffs views.
Expand All @@ -33,7 +34,12 @@ public static void createViews(final PrintWriter writer,
final PgSchema oldSchema, final PgSchema newSchema,
final SearchPathHelper searchPathHelper) {
for (final PgView newView : newSchema.getViews()) {
final PgView oldView = oldSchema.getView(newView.getName());
PgView oldView = null;

if(Objects.nonNull(oldSchema)){
oldView=oldSchema.getView(newView.getName());
}

if (oldSchema == null
|| !oldSchema.containsView(newView.getName())
|| isViewModified(oldView, newView)) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/cz/startnet/utils/pgdiff/loader/PgDumpLoader.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ public class PgDumpLoader { //NOPMD
* Pattern for testing whether it is CREATE POLICY statement.
*/
private static final Pattern PATTERN_DISABLE_TRIGGER = Pattern.compile(
"ALTER\\s+TABLE+\\s+\\w+.+\\w+\\s+DISABLE+\\s+TRIGGER+\\s+\\w+.*$",
"ALTER\\s+TABLE+\\s+\"?\\w+\"?.+\"?\\w+\"?\\s+DISABLE+\\s+TRIGGER+\\s+\\w+.*$",
Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
/**
* Pattern for testing whether it is CREATE RULE statement.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/cz/startnet/utils/pgdiff/parsers/CommentParser.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ private static void parseTrigger(final Parser parser,
final String tableName = parser.parseIdentifier();
final String objectName = ParserUtils.getObjectName(tableName);
final String schemaName =
ParserUtils.getSchemaName(triggerName, database);
ParserUtils.getSchemaName(tableName, database);

final PgTrigger trigger = database.getSchema(schemaName).
getTable(objectName).getTrigger(triggerName);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/cz/startnet/utils/pgdiff/parsers/CreateRuleParser.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public static void parse(final PgDatabase database,

rule.setQuery(query);

final String schemaName = ParserUtils.getSchemaName(ruleName, database);
final String schemaName = ParserUtils.getSchemaName(relationName, database);
final PgSchema schema = database.getSchema(schemaName);

if (schema == null) {
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/cz/startnet/utils/pgdiff/parsers/CreateTriggerParser.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,14 @@ public static void parse(final PgDatabase database,
parser.expect(")");
}

parser.expect("EXECUTE", "PROCEDURE");
parser.expect("EXECUTE");
if(parser.expectOptional("PROCEDURE")){
}
else if (parser.expectOptional("FUNCTION")){
}
else {
parser.throwUnsupportedCommand();
}
trigger.setFunction(parser.getRest());

final boolean ignoreSlonyTrigger = ignoreSlonyTriggers
Expand Down

0 comments on commit f2e986e

Please sign in to comment.