Search in sources :

Example 1 with Action

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" };
        }
    } };
}
Also used : Action(info.xiancloud.dao.jdbc.sql.Action) UpdateAction(info.xiancloud.dao.jdbc.sql.UpdateAction) Table(info.xiancloud.dao.global.Table) UpdateAction(info.xiancloud.dao.jdbc.sql.UpdateAction) ArrayList(java.util.ArrayList) Map(java.util.Map)

Example 2 with Action

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();
    }
}
Also used : AbstractAction(info.xiancloud.dao.jdbc.sql.AbstractAction) Action(info.xiancloud.dao.jdbc.sql.Action) UnitResponse(info.xiancloud.core.message.UnitResponse) ArrayList(java.util.ArrayList)

Example 3 with Action

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();
    }
}
Also used : AbstractAction(info.xiancloud.dao.jdbc.sql.AbstractAction) Action(info.xiancloud.dao.jdbc.sql.Action) Connection(java.sql.Connection) AbstractAction(info.xiancloud.dao.jdbc.sql.AbstractAction)

Example 4 with Action

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" };
        }
    } };
}
Also used : Action(info.xiancloud.dao.jdbc.sql.Action) QueryAction(info.xiancloud.dao.jdbc.sql.QueryAction) DeleteAction(info.xiancloud.dao.jdbc.sql.DeleteAction) Table(info.xiancloud.dao.global.Table) ArrayList(java.util.ArrayList) DeleteAction(info.xiancloud.dao.jdbc.sql.DeleteAction)

Aggregations

Action (info.xiancloud.dao.jdbc.sql.Action)4 ArrayList (java.util.ArrayList)3 Table (info.xiancloud.dao.global.Table)2 AbstractAction (info.xiancloud.dao.jdbc.sql.AbstractAction)2 UnitResponse (info.xiancloud.core.message.UnitResponse)1 DeleteAction (info.xiancloud.dao.jdbc.sql.DeleteAction)1 QueryAction (info.xiancloud.dao.jdbc.sql.QueryAction)1 UpdateAction (info.xiancloud.dao.jdbc.sql.UpdateAction)1 Connection (java.sql.Connection)1 Map (java.util.Map)1