Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fordfrog/apgdiff
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: develop
Choose a base ref
...
head repository: d1maxa/apgdiff
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: develop
Choose a head ref
Can’t automatically merge. Don’t worry, you can still create the pull request.
  • 3 commits
  • 6 files changed
  • 2 contributors

Commits on May 25, 2019

  1. fixed some crashes:

    fixed schema name for triggers, constraints during parsing comments
    fixed parser function 'expectOptional'
    fixed null referenced exceptions in PgdiffTriggers and PgDiffViews
    d1maxa committed May 25, 2019
    Copy the full SHA
    446c9aa View commit details

Commits on Oct 24, 2019

  1. Copy the full SHA
    6279745 View commit details

Commits on Jul 28, 2020

  1. Copy the full SHA
    a444ea8 View commit details
6 changes: 4 additions & 2 deletions src/main/java/cz/startnet/utils/pgdiff/PgDiffTriggers.java
Original file line number Diff line number Diff line change
@@ -218,8 +218,10 @@ private static List<PgTrigger> getEnablerOrDisableTriggers(final PgRelation oldR
if (newRelation != null) {

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

PgTrigger oldTrigger = oldRelation.getTrigger(newTrigger.getName());

PgTrigger oldTrigger = null;
if (oldRelation != null)
oldTrigger = oldRelation.getTrigger(newTrigger.getName());
if ((newTrigger.isDisable() && oldTrigger==null) ||
(oldTrigger!=null && oldTrigger.isDisable()!=newTrigger.isDisable())) {
list.add(newTrigger);
5 changes: 4 additions & 1 deletion src/main/java/cz/startnet/utils/pgdiff/PgDiffViews.java
Original file line number Diff line number Diff line change
@@ -32,8 +32,11 @@ public class PgDiffViews {
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 (oldSchema != null)
oldView = oldSchema.getView(newView.getName());
if (oldSchema == null
|| !oldSchema.containsView(newView.getName())
|| isViewModified(oldView, newView)) {
Original file line number Diff line number Diff line change
@@ -90,7 +90,7 @@ private static void parseConstraint(final Parser parser,
final String tableName = parser.parseIdentifier();
final String objectName = ParserUtils.getObjectName(tableName);
final String schemaName =
ParserUtils.getSchemaName(constraintName, database);
ParserUtils.getSchemaName(tableName, database);

final PgConstraint constraint = database.getSchema(schemaName).
getTable(objectName).getConstraint(constraintName);
@@ -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);
Original file line number Diff line number Diff line change
@@ -104,7 +104,13 @@ public static void parse(final PgDatabase database,
parser.expect(")");
}

parser.expect("EXECUTE", "PROCEDURE");
parser.expect("EXECUTE");
final String procedureWord = parser.expectOptionalOneOf("PROCEDURE", "FUNCTION");
if(procedureWord == null){
parser.expect("PROCEDURE");
}
trigger.setProcedureWord(procedureWord);

trigger.setFunction(parser.getRest());

final boolean ignoreSlonyTrigger = ignoreSlonyTriggers
14 changes: 12 additions & 2 deletions src/main/java/cz/startnet/utils/pgdiff/parsers/Parser.java
Original file line number Diff line number Diff line change
@@ -102,15 +102,20 @@ public boolean expect(final String word, final boolean optional) {
* @return true if whole sequence was found, otherwise false
*/
public boolean expectOptional(final String... words) {
final boolean found = expect(words[0], true);
final int oldPosition = position;
boolean found = expect(words[0], true);

if (!found) {
return false;
}

for (int i = 1; i < words.length; i++) {
skipWhitespace();
expect(words[i]);
found = expect(words[i], true);
if (!found) {
position = oldPosition;
return false;
}
}

return true;
@@ -274,6 +279,11 @@ public String parseString() {
final String result;

try {
if (endPos >= string.length())
{
//try to fix StringIndexOutOfBoundsException
endPos = string.lastIndexOf('\'');
}
result = string.substring(position, endPos + 1);
} catch (final Throwable ex) {
throw new RuntimeException("Failed to get substring: " + string
26 changes: 25 additions & 1 deletion src/main/java/cz/startnet/utils/pgdiff/schema/PgTrigger.java
Original file line number Diff line number Diff line change
@@ -44,6 +44,10 @@ public static String toString(EventTimeQualification eventTimeQualification) {
}
}

/**
* Function type definition : FUNCTION | PROCEDURE
*/
private String procedureWord;
/**
* Function name and arguments that should be fired on the trigger.
*/
@@ -223,7 +227,9 @@ public String getCreationSQL() {
}

sbSQL.append(System.getProperty("line.separator"));
sbSQL.append("\tEXECUTE PROCEDURE ");
sbSQL.append("\tEXECUTE ");
sbSQL.append(getProcedureWord());
sbSQL.append(' ');
sbSQL.append(getFunction());
sbSQL.append(';');

@@ -270,6 +276,24 @@ public boolean isForEachRow() {
return forEachRow;
}

/**
* Setter for {@link #procedureWord}.
*
* @param procedureWord {@link #procedureWord}
*/
public void setProcedureWord(final String procedureWord) {
this.procedureWord = procedureWord;
}

/**
* Getter for {@link #procedureWord}.
*
* @return {@link #procedureWord}
*/
public String getProcedureWord() {
return procedureWord;
}

/**
* Setter for {@link #function}.
*