cubetiq-sql-core/src/main/java/com/cubetiqs/sql/SqlMapParameter.java

79 lines
1.9 KiB
Java

package com.cubetiqs.sql;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SqlMapParameter implements ISqlMapParameter {
private final String sql;
private final Map<String, Object> params = new HashMap<>();
// Replace all ":variableName" with "?"
private String formatSql;
public SqlMapParameter(String sql) {
this.sql = sql;
}
public SqlMapParameter addParam(String key, Object value) {
params.put(key, value);
return this;
}
public SqlMapParameter addParams(Map<String, Object> values) {
params.putAll(values);
return this;
}
@Override
public Map<String, Object> getParams() {
return params;
}
@Override
public String getSql() {
return sql;
}
@Override
public String getFormatSql() {
return formatSql;
}
@Override
public Object[] getSqlArgs() {
if (params.size() == 0) {
return null;
}
if (sql == null || sql.equals("")) {
return null;
}
List<String> keys = ResultSetUtil.findValues(sql, ":", null);
if (keys.size() > 1 && params.size() == 0) {
System.out.println("Keys = " + keys);
System.out.println("Params = " + params);
throw new IllegalArgumentException("Parameter not matched with keys size!");
}
Object[] args = new Object[keys.size()];
for (int i = 0; i < args.length; i++) {
args[i] = params.get(keys.get(i));
}
Map<String, Object> replacement = new HashMap<>();
for (String key : keys) {
replacement.put(key, "?");
}
formatSql = ResultSetUtil.replacerPrefix(sql, replacement, ":");
return args;
}
public static SqlMapParameter create(String sql) {
return new SqlMapParameter(sql);
}
}