79 lines
1.9 KiB
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);
|
|
}
|
|
}
|