All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.napp.database.impl.UpdateQuery Maven / Gradle / Ivy

There is a newer version: 1.1.8
Show newest version
/**
 *
 */
package com.github.napp.database.impl;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.github.napp.database.IUpdateQuery;

/**
 * @author Alexandru Bledea
 * @since Sep 28, 2013
 */
class UpdateQuery extends WhereQuery implements IUpdateQuery {

	private final Map commands = new HashMap();
	private final Map set = new HashMap();
	protected boolean allowOverride = true;

	/**
	 * @param dao
	 */
	UpdateQuery(DAO dao) {
		super(dao, "UPDATE ");
	}

	/* (non-Javadoc)
	 * @see com.github.napp.database.ISetQuery#set(java.lang.String, java.lang.Object)
	 */
	@Override
	public final void set(String property, Object object) {
		dao.validateProperty(property);
		if (!allowOverride && set.containsKey(property)) {
			throw new IllegalStateException(String.format("%s was already set to %s", property, set.get(property)));
		}
		set.put(property, object);
	}

	/**
	 * @param sb
	 */
	private void addSetClause(StringBuilder sb) {
		if (set.isEmpty() && commands.isEmpty()) {
			throw new IllegalStateException("Empty Set Arguments!");
		}
		sb.append(" SET ");

		append(sb, set.entrySet(), !commands.isEmpty(), false);
		append(sb, commands.entrySet(), false, true);
	}

	/**
	 * @param sb
	 * @param entrySet
	 * @param moreToCome
	 * @param commands
	 */
	private void append(StringBuilder sb, Set> entrySet, boolean moreToCome, boolean commands) {
		if (!entrySet.isEmpty()) {
			boolean hasNext = true;
			Iterator> iterator = entrySet.iterator();
			while (hasNext) {
				Entry entry = iterator.next();
				sb.append(entry.getKey());
				sb.append("=");
				sb.append(commands ? (String) entry.getValue() : PLACEHOLDER);
				hasNext = iterator.hasNext();
				if (hasNext || moreToCome) {
					sb.append(",  ");
				}
			}
		}
	}

	/* (non-Javadoc)
	 * @see com.github.napp.database.impl.WhereQuery#setArguments(java.sql.PreparedStatement)
	 */
	@Override
	protected void setArguments(PreparedStatement ps) throws SQLException {
		addAll(ps, set.values(), args);
	}

	/* (non-Javadoc)
	 * @see com.github.napp.database.impl.WhereQuery#addToQuery(java.lang.StringBuilder)
	 */
	@Override
	protected void addToQuery(StringBuilder sb) {
		addSetClause(sb);
		super.addToQuery(sb);
	}

	/* (non-Javadoc)
	 * @see com.github.napp.database.IUpdateQuery#setCurrentTimestamp(java.lang.String)
	 */
	@Override
	public void setCurrentTimestamp(String property) {
		commands.put(property, "NOW()");
	}

	/**
	 * @return the allowOverride
	 */
	public final boolean isAllowOverride() {
		return allowOverride;
	}

	/**
	 * @param allowOverride the allowOverride to set
	 */
	public final void setAllowOverride(boolean allowOverride) {
		this.allowOverride = allowOverride;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy