/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.engine.handlers;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class KeyHandler
extends HibernateDaoSupport
{
private final static String KEY_UPDATE =
"UPDATE tKey SET key_lLastKey = key_lLastKey + 1 WHERE key_sTableName = :table";
private final static String KEY_SELECT =
"SELECT key_lLastKey FROM tKey WHERE key_sTableName = :table";
private final static String KEY_INSERT =
"INSERT INTO tKey (key_sTableName, key_lLastKey) VALUES (:table, :key)";
private boolean updateNextKey(final String tableName)
{
final Query query = getSession().createSQLQuery(KEY_UPDATE);
query.setString("table", tableName.toLowerCase());
return query.executeUpdate() > 0;
}
private int selectCurrentKey(final String tableName)
{
final Query query = getSession().createSQLQuery(KEY_SELECT);
query.setString("table", tableName.toLowerCase());
return ((Number)query.uniqueResult()).intValue();
}
private int insertCurrentKey(final String tableName, final int key)
{
final Query query = getSession().createSQLQuery(KEY_INSERT);
query.setString("table", tableName.toLowerCase());
query.setInteger("key", key);
query.executeUpdate();
return key;
}
public int generateNextKeySafe( final String tableName )
{
if (updateNextKey(tableName)) {
return selectCurrentKey(tableName);
} else {
return insertCurrentKey(tableName, 0);
}
}
}