public static String update()

in bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/SQLBuilder.java [196:272]


    public static <Entity> String update(
            TableMetaData tableMetaData, Entity entity, String databaseId, boolean partial) {
        Class<?> entityClass = entity.getClass();
        Map<String, String> fieldColumnMap = tableMetaData.getFieldColumnMap();

        SQL sql = new SQL();
        switch (DBType.toType(databaseId)) {
            case MYSQL: {
                sql.UPDATE(keywordsFormat(tableMetaData.getTableName(), DBType.MYSQL));
                for (Map.Entry<String, String> entry : fieldColumnMap.entrySet()) {
                    // Ignore primary key
                    if (Objects.equals(entry.getKey(), tableMetaData.getPkProperty())) {
                        continue;
                    }
                    PropertyDescriptor ps = BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
                    if (ps == null || ps.getReadMethod() == null) {
                        continue;
                    }
                    Object value = ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
                    if (ObjectUtils.isEmpty(value) && partial) {
                        continue;
                    }
                    Field field = ReflectionUtils.findField(entityClass, entry.getKey());
                    if (field != null) {
                        if (checkBaseField(field)) {
                            continue;
                        }
                        Column column = field.getAnnotation(Column.class);
                        if (column != null && !column.nullable() && value == null) {
                            continue;
                        }
                    }
                    sql.SET(getEquals(keywordsFormat(entry.getValue(), DBType.MYSQL), entry.getKey()));
                }

                sql.WHERE(getEquals(
                        keywordsFormat(tableMetaData.getPkColumn(), DBType.MYSQL), tableMetaData.getPkProperty()));
                break;
            }
            case POSTGRESQL: {
                sql.UPDATE(keywordsFormat(tableMetaData.getTableName(), DBType.POSTGRESQL));
                for (Map.Entry<String, String> entry : fieldColumnMap.entrySet()) {
                    // Ignore primary key
                    if (Objects.equals(entry.getKey(), tableMetaData.getPkProperty())) {
                        continue;
                    }
                    PropertyDescriptor ps = BeanUtils.getPropertyDescriptor(entityClass, entry.getKey());
                    if (ps == null || ps.getReadMethod() == null) {
                        continue;
                    }
                    Object value = ReflectionUtils.invokeMethod(ps.getReadMethod(), entity);
                    if (ObjectUtils.isEmpty(value) && partial) {
                        continue;
                    }
                    Field field = ReflectionUtils.findField(entityClass, entry.getKey());
                    if (field != null) {
                        if (checkBaseField(field)) {
                            continue;
                        }
                        Column column = field.getAnnotation(Column.class);
                        if (column != null && !column.nullable() && value == null) {
                            continue;
                        }
                    }
                    sql.SET(getEquals(keywordsFormat(entry.getValue(), DBType.POSTGRESQL), entry.getKey()));
                }
                sql.WHERE(getEquals(
                        keywordsFormat(tableMetaData.getPkColumn(), DBType.POSTGRESQL), tableMetaData.getPkProperty()));
                break;
            }
            default: {
                log.error("Unsupported data source");
            }
        }

        return sql.toString();
    }