/*
* ====================================================================
* 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.wc17.db.statement;
import java.util.HashMap;
import java.util.Map;
import org.tmatesoft.sqljet.core.SqlJetException;
import org.tmatesoft.sqljet.core.schema.SqlJetConflictAction;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetInsertStatement;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectFieldsStatement;
/**
* -- STMT_INSERT_EXTERNAL_UPGRADE
* INSERT OR REPLACE INTO externals (
* wc_id, local_relpath, parent_relpath, presence, kind, def_local_relpath,
* repos_id, def_repos_relpath, def_operational_revision, def_revision)
* VALUES (?1, ?2, ?3, ?4,
* CASE WHEN (SELECT file_external FROM nodes
* WHERE wc_id = ?1 AND local_relpath = ?2 AND op_depth = 0)
* IS NOT NULL THEN 'file' ELSE 'unknown' END,
* ?5, ?6, ?7, ?8, ?9)
* @version 1.4
* @author TMate Software Ltd.
*/
public class SVNWCDbInsertExternalUpgrade extends SVNSqlJetInsertStatement {
private SVNSqlJetSelectFieldsStatement<SVNWCDbSchema.NODES__Fields> select;
public SVNWCDbInsertExternalUpgrade(SVNSqlJetDb sDb) throws SVNException {
super(sDb, SVNWCDbSchema.EXTERNALS, SqlJetConflictAction.REPLACE);
select = new SVNSqlJetSelectFieldsStatement<SVNWCDbSchema.NODES__Fields>(sDb, SVNWCDbSchema.NODES) {
protected Object[] getWhere() throws SVNException {
return new Object[] { getBind(1), getBind(2), 0 };
}
protected void defineFields() {
fields.add(SVNWCDbSchema.NODES__Fields.file_external);
}
};
}
public long exec() throws SVNException {
try {
select.bindf("is", getBind(1), getBind(2));
select.next();
try {
table.insertByFieldNamesOr(SqlJetConflictAction.REPLACE, getInsertValues());
} catch (SqlJetException e) {
SVNSqlJetDb.createSqlJetError(e);
return -1;
}
return 1;
} finally {
select.reset();
}
}
protected Map<String, Object> getInsertValues() throws SVNException {
Map<String, Object> values = new HashMap<String, Object>();
values.put(SVNWCDbSchema.EXTERNALS__Fields.wc_id.toString(), getBind(1));
values.put(SVNWCDbSchema.EXTERNALS__Fields.local_relpath.toString(), getBind(2));
values.put(SVNWCDbSchema.EXTERNALS__Fields.parent_relpath.toString(), getBind(3));
values.put(SVNWCDbSchema.EXTERNALS__Fields.presence.toString(), getBind(4));
values.put(SVNWCDbSchema.EXTERNALS__Fields.kind.toString(),
select.isColumnNull(SVNWCDbSchema.NODES__Fields.file_external) ? "unknown" : "file");
values.put(SVNWCDbSchema.EXTERNALS__Fields.def_local_relpath.toString(), getBind(5));
values.put(SVNWCDbSchema.EXTERNALS__Fields.repos_id.toString(), getBind(6));
values.put(SVNWCDbSchema.EXTERNALS__Fields.def_repos_relpath.toString(), getBind(7));
values.put(SVNWCDbSchema.EXTERNALS__Fields.def_operational_revision.toString(), getBind(8));
values.put(SVNWCDbSchema.EXTERNALS__Fields.def_revision.toString(), getBind(9));
return values;
}
}