/*
* ====================================================================
* Copyright (c) 2004-2010 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.internal.db;
import java.util.Map;
import org.tmatesoft.sqljet.core.SqlJetException;
import org.tmatesoft.sqljet.core.SqlJetTransactionMode;
import org.tmatesoft.sqljet.core.table.ISqlJetCursor;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.wc17.db.SvnNodesPristineTrigger;
import org.tmatesoft.svn.core.internal.wc17.db.statement.SVNWCDbSchema;
/**
*
* @author TMate Software Ltd.
*/
public abstract class SVNSqlJetUpdateStatement extends SVNSqlJetSelectStatement {
public SVNSqlJetUpdateStatement(SVNSqlJetDb sDb, Enum<?> fromTable) throws SVNException {
this(sDb, fromTable, null);
}
public SVNSqlJetUpdateStatement(SVNSqlJetDb sDb, Enum<?> fromTable, Enum<?> indexName) throws SVNException {
super(sDb, fromTable, indexName);
if (SVNWCDbSchema.NODES == fromTable) {
SvnNodesPristineTrigger trigger = new SvnNodesPristineTrigger();
addTrigger(trigger);
}
transactionMode = SqlJetTransactionMode.WRITE;
}
public void update(final Map<String, Object> values) throws SqlJetException {
if (getCursor() == null) {
throw new UnsupportedOperationException();
}
beforeUpdate(getCursor(), values);
getCursor().updateByFieldNames(values);
}
private void beforeUpdate(ISqlJetCursor cursor, Map<String, Object> values) {
for (ISVNSqlJetTrigger trigger : getTriggers()) {
try {
trigger.beforeUpdate(cursor, values);
} catch (SqlJetException e) {
//
}
}
}
public long exec() throws SVNException {
long n = 0;
try {
statementStarted();
while (next()) {
Map<String, Object> values = getUpdateValues();
update(values);
n++;
}
statementCompleted(null);
} catch (SqlJetException e) {
statementCompleted(e);
SVNSqlJetDb.createSqlJetError(e);
}
return n;
}
public abstract Map<String, Object> getUpdateValues() throws SVNException;
}