package org.tmatesoft.svn.core.internal.wc17.db;
import java.util.HashMap;
import java.util.Map;
import org.tmatesoft.sqljet.core.SqlJetException;
import org.tmatesoft.sqljet.core.SqlJetTransactionMode;
import org.tmatesoft.sqljet.core.schema.SqlJetConflictAction;
import org.tmatesoft.sqljet.core.table.ISqlJetCursor;
import org.tmatesoft.sqljet.core.table.ISqlJetTable;
import org.tmatesoft.sqljet.core.table.SqlJetDb;
import org.tmatesoft.svn.core.internal.db.ISVNSqlJetTrigger;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb;
import org.tmatesoft.svn.core.internal.wc17.db.statement.SVNWCDbSchema;
import org.tmatesoft.svn.core.internal.wc17.db.statement.SVNWCDbSchema.ACTUAL_NODE__Fields;
import org.tmatesoft.svn.core.internal.wc17.db.statement.SVNWCDbSchema.CHANGELIST_LIST__Fields;
public class SvnChangelistActualNodesTrigger implements ISVNSqlJetTrigger {
private SVNSqlJetDb db;
public SvnChangelistActualNodesTrigger(SVNSqlJetDb db) {
this.db = db;
}
public void beforeDelete(ISqlJetCursor cursor) throws SqlJetException {
}
/*
* DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_clear;
* CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_clear
* BEFORE UPDATE ON actual_node
* WHEN OLD.changelist IS NOT NULL AND
* (OLD.changelist != NEW.changelist OR NEW.changelist IS NULL)
* BEGIN
*
* INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
* VALUES (OLD.wc_id, OLD.local_relpath, 27, OLD.changelist);
* END;
*
* DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_set;
* CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_set
* BEFORE UPDATE ON actual_node
* WHEN NEW.CHANGELIST IS NOT NULL AND
* (OLD.changelist != NEW.changelist OR OLD.changelist IS NULL)
* BEGIN
*
* INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
* VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist);
* END
*/
public void beforeUpdate(ISqlJetCursor cursor, Map<String, Object> newValues) throws SqlJetException {
ISqlJetTable table = db.getDb().getTemporaryDatabase().getTable(SVNWCDbSchema.CHANGELIST_LIST.toString());
if (!cursor.isNull(ACTUAL_NODE__Fields.changelist.toString()) &&
(!cursor.getValue(ACTUAL_NODE__Fields.changelist.toString()).equals(newValues.get(ACTUAL_NODE__Fields.changelist.toString()) )
|| (newValues.get(ACTUAL_NODE__Fields.changelist.toString()) == null)))
{
Map<String, Object> rowValues = new HashMap<String, Object>();
rowValues.put(CHANGELIST_LIST__Fields.wc_id.toString(), cursor.getValue(ACTUAL_NODE__Fields.wc_id.toString()));
rowValues.put(CHANGELIST_LIST__Fields.local_relpath.toString(), cursor.getValue(ACTUAL_NODE__Fields.local_relpath.toString()));
rowValues.put(CHANGELIST_LIST__Fields.notify.toString(), 27);
rowValues.put(CHANGELIST_LIST__Fields.changelist.toString(), cursor.getValue(ACTUAL_NODE__Fields.changelist.toString()));
table.insertByFieldNames(rowValues);
}
if ( (newValues.get(ACTUAL_NODE__Fields.changelist.toString()) != null) &&
(cursor.isNull(ACTUAL_NODE__Fields.changelist.toString())
|| !cursor.getValue(ACTUAL_NODE__Fields.changelist.toString()).equals(newValues.get(ACTUAL_NODE__Fields.changelist.toString()) )
))
{
Map<String, Object> rowValues = new HashMap<String, Object>();
rowValues.put(CHANGELIST_LIST__Fields.wc_id.toString(), newValues.get(ACTUAL_NODE__Fields.changelist.toString()));
rowValues.put(CHANGELIST_LIST__Fields.local_relpath.toString(), newValues.get(ACTUAL_NODE__Fields.local_relpath.toString()));
rowValues.put(CHANGELIST_LIST__Fields.notify.toString(), 26);
rowValues.put(CHANGELIST_LIST__Fields.changelist.toString(), newValues.get(ACTUAL_NODE__Fields.changelist.toString()));
table.insertByFieldNames(rowValues);
}
}
/**
* DROP TRIGGER IF EXISTS trigger_changelist_list_actual_cl_insert;
* CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_insert
* BEFORE INSERT ON actual_node
* BEGIN
* INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
* VALUES (NEW.wc_id, NEW.local_relpath, 26, NEW.changelist);
* END;
*/
public void beforeInsert(SqlJetConflictAction conflictAction, ISqlJetTable table, Map<String, Object> newValues) throws SqlJetException {
ISqlJetTable clltable = db.getDb().getTemporaryDatabase().getTable(SVNWCDbSchema.CHANGELIST_LIST.toString());
Map<String, Object> rowValues = new HashMap<String, Object>();
rowValues.put(CHANGELIST_LIST__Fields.wc_id.toString(), newValues.get(ACTUAL_NODE__Fields.wc_id.toString()));
rowValues.put(CHANGELIST_LIST__Fields.local_relpath.toString(), newValues.get(ACTUAL_NODE__Fields.local_relpath.toString()));
rowValues.put(CHANGELIST_LIST__Fields.notify.toString(), 26);
rowValues.put(CHANGELIST_LIST__Fields.changelist.toString(), newValues.get(ACTUAL_NODE__Fields.changelist.toString()));
clltable.insertByFieldNames(rowValues);
}
public void statementStarted(SqlJetDb db) throws SqlJetException {
this.db.getDb().getTemporaryDatabase().beginTransaction(SqlJetTransactionMode.WRITE);
}
public void statementCompleted(SqlJetDb db, SqlJetException error) throws SqlJetException {
if (error == null) {
this.db.getDb().getTemporaryDatabase().commit();
} else {
this.db.getDb().getTemporaryDatabase().rollback();
}
}
}