use of info.xiancloud.dao.jdbc.sql.Action in project xian by happyyangyuan.
the class BaseUpdateDB method getActions.
@Override
public Action[] getActions() {
return new Action[] { new UpdateAction() {
private Table table;
public Table getTable(Map map) {
if (table != null) {
return table;
}
Object tableName = map.get("$tableName");
if (tableName instanceof String) {
table = TableHeader.getTable(map.get("$tableName").toString());
if (table.getType().equals(Table.Type.view)) {
throw new RuntimeException(String.format("视图:%s,不允许操作 BaseUpdateDB", table.getName()));
}
return table;
}
return null;
}
@Override
public String table() {
Table table = getTable(map);
return table == null ? "" : table.getName();
}
@Override
public String[] unique() {
Table table = getTable(map);
return table == null ? new String[] {} : table.getUnique();
}
@Override
protected String[] where() {
List<String> whereList = new ArrayList<String>();
Object tableName = map.get("$tableName");
if (tableName instanceof String) {
Map<String, Class<?>> columns = TableHeader.getTableColumnTypeMap(tableName.toString(), connection);
for (Entry<String, Class<?>> entry : columns.entrySet()) {
String key = entry.getKey();
if (map.containsKey(StringUtil.underlineToCamel(key))) {
whereList.add(String.format("%s = {%s}", key, StringUtil.underlineToCamel(key)));
}
}
}
// 这里不允许执行整表修改功能
if (whereList.size() > 0) {
return whereList.toArray(new String[] {});
}
return new String[] { "1 < 0" };
}
} };
}
use of info.xiancloud.dao.jdbc.sql.Action in project xian by happyyangyuan.
the class DaoUnit method execute.
@Override
public final UnitResponse execute(UnitRequest msg) {
try {
init(msg);
transaction.get().begin();
List<UnitResponse> unitResponseObjects = new ArrayList<>();
for (Action action : getProxiedActions()) {
UnitResponse unitResponseObject = action.execute(this, msg.getArgMap(), transaction.get().getConnection());
if (Group.CODE_SUCCESS.equals(unitResponseObject.getCode())) {
unitResponseObjects.add(unitResponseObject);
} else {
// db插件内如果返回的code不是SUCCESS,目前的实现是一律回滚事务
transaction.get().rollback();
return unitResponseObject;
}
}
transaction.get().commit();
return unitResponseObjects.get(unitResponseObjects.size() - 1);
} catch (Throwable t) {
LOG.error(t);
transaction.get().rollback();
return UnitResponse.error(DaoGroup.CODE_DB_ERROR, t, null);
} finally {
destroy();
}
}
use of info.xiancloud.dao.jdbc.sql.Action in project xian by happyyangyuan.
the class DaoUnit method logSql.
/**
* 打印sql语句,它不会将sql执行,只是打印sql语句。
* 仅供内部测试使用
*/
public static void logSql(Class daoUnitClass, Map map) {
try (Connection conn = DriverManager.getConnection(DatasourceConfigReader.getWriteUrl(), DatasourceConfigReader.getWriteUser(), DatasourceConfigReader.getWritePwd())) {
DaoUnit daoUnit = (DaoUnit) daoUnitClass.newInstance();
for (Action action : daoUnit.getActions()) {
((AbstractAction) action).setConnection(conn);
((AbstractAction) action).setMap(map);
/*((AbstractAction) action).create();*/
action.logSql(map);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
use of info.xiancloud.dao.jdbc.sql.Action in project xian by happyyangyuan.
the class BaseDeleteDB method getActions.
@Override
public Action[] getActions() {
return new Action[] { new DeleteAction() {
@Override
public String table() {
Object tableName = map.get("$tableName");
if (tableName instanceof String) {
Table table = TableHeader.getTable(map.get("$tableName").toString());
if (table.getType().equals(Table.Type.view)) {
throw new RuntimeException(String.format("视图:%s,不允许操作 BaseDeleteDB", table.getName()));
}
return table.getName();
}
return "";
}
@Override
protected String[] where() {
List<String> whereList = new ArrayList<String>();
Object tableName = map.get("$tableName");
if (tableName instanceof String) {
Map<String, Class<?>> columns = TableHeader.getTableColumnTypeMap(tableName.toString(), connection);
for (Entry<String, Class<?>> entry : columns.entrySet()) {
String key = entry.getKey();
Object value = map.get(StringUtil.underlineToCamel(key));
if (value != null) {
String[] array = QueryAction.fmtObjectToStrArray(value);
if (array != null) {
whereList.add(String.format("%s in {%s}", key, StringUtil.underlineToCamel(key)));
} else {
whereList.add(String.format("%s = {%s}", key, StringUtil.underlineToCamel(key)));
}
}
}
}
// 这里不允许执行整表删除功能
if (whereList.size() > 0) {
return whereList.toArray(new String[] {});
}
return new String[] { "1 < 0" };
}
} };
}
Aggregations