class InsertOrUpdateStatement extends InsertStatement {
    private final String primaryKey;
    private Boolean onlyUpdate = Boolean.FALSE;
    private final Map<String, Boolean> allowUpdates = new HashMap<>();

    public InsertOrUpdateStatement(String catalogName, String schemaName, String tableName, String primaryKey) {
        super(catalogName, schemaName, tableName);
        this.primaryKey = primaryKey ;
    }

    public InsertOrUpdateStatement(String catalogName, String schemaName, String tableName, String primaryKey, boolean onlyUpdate) {
        this(catalogName, schemaName, tableName,primaryKey);
        this.onlyUpdate = onlyUpdate;
    }
    
    public String getPrimaryKey() {
        return primaryKey;
    }

    @DatabaseChangeProperty(description = "Whether records with no matching database record should be ignored")
    public Boolean getOnlyUpdate() {
    	if ( onlyUpdate == null ) {
    		return false;
    	}
		return onlyUpdate;
	}

	public void setOnlyUpdate(Boolean onlyUpdate) {
        this.onlyUpdate = ((onlyUpdate == null) ? Boolean.FALSE : onlyUpdate);
	}

    public boolean getAllowColumnUpdate(String columnName) {<FILL_FUNCTION_BODY>}

    public void setAllowColumnUpdate(String columnName, boolean allowUpdate) {
        this.allowUpdates.put(columnName, allowUpdate);
    }
}

        final Boolean allow = this.allowUpdates.get(columnName);
        if (allow == null) {
            return true;
        }
        return allow;
    
<methods>public void <init>(java.lang.String, java.lang.String, java.lang.String) ,public liquibase.statement.core.InsertStatement addColumn(liquibase.change.ColumnConfig) ,public liquibase.statement.core.InsertStatement addColumnValue(java.lang.String, java.lang.Object) ,public java.lang.String getCatalogName() ,public java.lang.Object getColumnValue(java.lang.String) ,public Map<java.lang.String,java.lang.Object> getColumnValues() ,public java.lang.String getSchemaName() ,public java.lang.String getTableName() <variables>private final non-sealed java.lang.String catalogName,private final Map<java.lang.String,java.lang.Object> columnValues,private final non-sealed java.lang.String schemaName,private final non-sealed java.lang.String tableName