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

org.onetwo.common.db.sqlext.ParamValues Maven / Gradle / Ivy

package org.onetwo.common.db.sqlext;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

import org.onetwo.dbm.utils.JdbcParamValueConvers;

@SuppressWarnings({ "rawtypes", "unchecked" })
public class ParamValues {
	
	/*public static enum PlaceHolder {
		POSITION,
		NAMED
	}*/

	protected ExtQueryDialet sqlDialet;
//	private PlaceHolder holder;
	private Map values = new LinkedHashMap();
	
	
	public ParamValues(ExtQueryDialet sqlDialet){
		this.sqlDialet = sqlDialet;
	}

	public void addValue(String field, Object value, StringBuilder sqlScript){
		int size = values.size();
		String fieldName = this.sqlDialet.getNamedPlaceHolder(field, size);
		sqlScript.append(":").append(fieldName);
		values.put(fieldName, getActualSqlValue(value));
	}
	
	private Object getActualSqlValue(Object value){
		return JdbcParamValueConvers.getActualValue(value);
	}
	
	/*public void directAddValue(Object value){
		Map map = getValues();
		if(value instanceof Collection){
			Map m = CUtils.asLinkedMap(((Collection)value).toArray());
			if(m!=null && !m.isEmpty())
				map.putAll(m);
		}else if(value instanceof Map){
			map.putAll((Map)value);
		}else{
			LangUtils.throwBaseException("unsupported args: "+LangUtils.toString(value));
		}
	}*/
	
	public void addValues(Map params){
		params.forEach((k, v)->values.put(k, getActualSqlValue(v)));
	}
	
	public void joinToQuery(ExtQueryInner subQuery){
		/*Map pvs = getValues();
		Map subParamValues = subQuery.getParamsValue().getValues();
		subParamValues.putAll(pvs);
		subQuery.build();
		pvs.clear();
		pvs.putAll(subParamValues);*/
		ParamValues subParamValues = subQuery.getParamsValue();
		subParamValues.addValues(getValues());
		subQuery.build();
		
		clear();
		addValues(subParamValues.getValues());
	}
	
	private void clear(){
		this.values.clear();
	}
	
	/*********
	 * List Or Map
	 * @return
	 */
	public Map getValues(){
//		return ImmutableMap.copyOf(values);
		return Collections.unmodifiableMap(values);
	}
	public Map asMap(){
		return (Map) getValues();
	}
	/*public List asList(){
		return (List) getValues();
	}
	
	public boolean isList(){
		return List.class.isInstance(values);
	}
	*/
	/*public boolean isMap(){
		return Map.class.isInstance(values);
	}*/

}