Search in sources :

Example 1 with Entity

use of org.dbflute.Entity in project lastaflute by lastaflute.

the class TransactionSavedRecentResult method prepareEntityUpdateKeyMap.

// ===================================================================================
// Entity Update
// =============
protected Map<String, Object> prepareEntityUpdateKeyMap(BehaviorCommandMeta meta) {
    // always can get if entity update
    final Entity entity = extractArgumentEntity(meta);
    if (entity == null) {
        // no way, just in case
        return Collections.emptyMap();
    }
    final DBMeta dbmeta = entity.asDBMeta();
    final Map<String, Object> keyMap;
    final Set<String> uniqueProps = entity.myuniqueDrivenProperties();
    if (!uniqueProps.isEmpty()) {
        final Map<String, Object> uniqueMap = uniqueProps.stream().map(prop -> {
            return dbmeta.findColumnInfo(prop);
        }).collect(Collectors.toMap(col -> col.getColumnDbName(), col -> col.read(entity)));
        keyMap = uniqueMap;
    } else if (dbmeta.hasPrimaryKey() && entity.hasPrimaryKeyValue()) {
        keyMap = dbmeta.extractPrimaryKeyMap(entity);
    } else {
        // no way if entity update, just in case
        keyMap = Collections.emptyMap();
    }
    return keyMap;
}
Also used : BehaviorCommandMeta(org.dbflute.bhv.core.BehaviorCommandMeta) DfCollectionUtil(org.dbflute.util.DfCollectionUtil) BehaviorCommand(org.dbflute.bhv.core.BehaviorCommand) Logger(org.slf4j.Logger) Entity(org.dbflute.Entity) LoggerFactory(org.slf4j.LoggerFactory) Set(java.util.Set) DBMeta(org.dbflute.dbmeta.DBMeta) Collectors(java.util.stream.Collectors) LinkedHashMap(java.util.LinkedHashMap) List(java.util.List) Map(java.util.Map) Collections(java.util.Collections) Entity(org.dbflute.Entity) DBMeta(org.dbflute.dbmeta.DBMeta)

Example 2 with Entity

use of org.dbflute.Entity in project fess by codelibs.

the class EsAbstractBehavior method delegateBatchRequest.

protected <BUILDER> int[] delegateBatchRequest(final List<? extends Entity> entityList, Function<EsAbstractEntity, BUILDER> call) {
    @SuppressWarnings("unchecked") final BulkList<? extends Entity, BUILDER> bulkList = (BulkList<? extends Entity, BUILDER>) entityList;
    final RequestOptionCall<BUILDER> builderEntityCall = bulkList.getEntityCall();
    final BulkRequestBuilder bulkBuilder = client.prepareBulk();
    for (final Entity entity : entityList) {
        final EsAbstractEntity esEntity = (EsAbstractEntity) entity;
        BUILDER builder = call.apply(esEntity);
        if (builder instanceof IndexRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((IndexRequestBuilder) builder);
        } else if (builder instanceof UpdateRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((UpdateRequestBuilder) builder);
        } else if (builder instanceof DeleteRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((DeleteRequestBuilder) builder);
        }
    }
    final RequestOptionCall<BulkRequestBuilder> builderCall = bulkList.getCall();
    if (builderCall != null) {
        builderCall.callback(bulkBuilder);
    }
    final BulkResponse response = bulkBuilder.execute().actionGet(bulkTimeout);
    final BulkItemResponse[] itemResponses = response.getItems();
    if (itemResponses.length != entityList.size()) {
        throw new IllegalStateException("Invalid response size: " + itemResponses.length + " != " + entityList.size());
    }
    final int[] results = new int[itemResponses.length];
    for (int i = 0; i < itemResponses.length; i++) {
        final BulkItemResponse itemResponse = itemResponses[i];
        final Entity entity = entityList.get(i);
        if (entity instanceof EsAbstractEntity) {
            ((EsAbstractEntity) entity).asDocMeta().id(itemResponse.getId());
        }
        results[i] = itemResponse.isFailed() ? 0 : 1;
    }
    return results;
}
Also used : DeleteRequestBuilder(org.opensearch.action.delete.DeleteRequestBuilder) Entity(org.dbflute.Entity) UpdateRequestBuilder(org.opensearch.action.update.UpdateRequestBuilder) BulkItemResponse(org.opensearch.action.bulk.BulkItemResponse) BulkResponse(org.opensearch.action.bulk.BulkResponse) IndexRequestBuilder(org.opensearch.action.index.IndexRequestBuilder) BulkRequestBuilder(org.opensearch.action.bulk.BulkRequestBuilder)

Example 3 with Entity

use of org.dbflute.Entity in project fess by codelibs.

the class EsAbstractBehavior method delegateBatchRequest.

protected <BUILDER> int[] delegateBatchRequest(final List<? extends Entity> entityList, Function<EsAbstractEntity, BUILDER> call) {
    @SuppressWarnings("unchecked") final BulkList<? extends Entity, BUILDER> bulkList = (BulkList<? extends Entity, BUILDER>) entityList;
    final RequestOptionCall<BUILDER> builderEntityCall = bulkList.getEntityCall();
    final BulkRequestBuilder bulkBuilder = client.prepareBulk();
    for (final Entity entity : entityList) {
        final EsAbstractEntity esEntity = (EsAbstractEntity) entity;
        BUILDER builder = call.apply(esEntity);
        if (builder instanceof IndexRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((IndexRequestBuilder) builder);
        } else if (builder instanceof UpdateRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((UpdateRequestBuilder) builder);
        } else if (builder instanceof DeleteRequestBuilder) {
            if (builderEntityCall != null) {
                builderEntityCall.callback(builder);
            }
            bulkBuilder.add((DeleteRequestBuilder) builder);
        }
    }
    final RequestOptionCall<BulkRequestBuilder> builderCall = bulkList.getCall();
    if (builderCall != null) {
        builderCall.callback(bulkBuilder);
    }
    final BulkResponse response = bulkBuilder.execute().actionGet(bulkTimeout);
    final BulkItemResponse[] itemResponses = response.getItems();
    if (itemResponses.length != entityList.size()) {
        throw new IllegalStateException("Invalid response size: " + itemResponses.length + " != " + entityList.size());
    }
    final int[] results = new int[itemResponses.length];
    for (int i = 0; i < itemResponses.length; i++) {
        final BulkItemResponse itemResponse = itemResponses[i];
        final Entity entity = entityList.get(i);
        if (entity instanceof EsAbstractEntity) {
            ((EsAbstractEntity) entity).asDocMeta().id(itemResponse.getId());
        }
        results[i] = itemResponse.isFailed() ? 0 : 1;
    }
    return results;
}
Also used : DeleteRequestBuilder(org.opensearch.action.delete.DeleteRequestBuilder) Entity(org.dbflute.Entity) UpdateRequestBuilder(org.opensearch.action.update.UpdateRequestBuilder) BulkItemResponse(org.opensearch.action.bulk.BulkItemResponse) BulkResponse(org.opensearch.action.bulk.BulkResponse) IndexRequestBuilder(org.opensearch.action.index.IndexRequestBuilder) BulkRequestBuilder(org.opensearch.action.bulk.BulkRequestBuilder)

Example 4 with Entity

use of org.dbflute.Entity in project dbflute-core by dbflute.

the class InsertOption method xacceptInsertColumnModifiedPropertiesIfNeeds.

// -----------------------------------------------------
// Modified Properties
// -------------------
public void xacceptInsertColumnModifiedPropertiesIfNeeds(List<? extends Entity> entityList) {
    // internal
    if (entityList == null) {
        throw new IllegalArgumentException("The argument 'entityList' should not be null.");
    }
    if (_insertColumnSpecification != null) {
        // already specified
        return;
    }
    if (entityList.isEmpty()) {
        // do nothing
        return;
    }
    if (xisCompatibleBatchInsertDefaultEveryColumn()) {
        // every column for compatible
        return;
    }
    final Entity firstEntity = entityList.get(0);
    if (firstEntity.createdBySelect()) {
        // all columns e.g. copy insert
        specify(new SpecifyQuery<CB>() {

            public void specify(CB cb) {
                final List<ColumnInfo> infoList = firstEntity.asDBMeta().getColumnInfoList();
                for (ColumnInfo info : infoList) {
                    if (!info.isPrimary()) {
                        // except PK
                        cb.localSp().xspecifyColumn(info.getColumnDbName());
                    }
                }
            }
        });
    } else {
        // least common multiple or same-set columns
        final Set<String> targetProps = xgatherInsertColumnModifiedProperties(entityList, firstEntity);
        final DBMeta dbmeta = firstEntity.asDBMeta();
        specify(new SpecifyQuery<CB>() {

            public void specify(CB cb) {
                // you don't need to specify primary key because primary key has special handling
                for (String prop : targetProps) {
                    final ColumnInfo info = dbmeta.findColumnInfo(prop);
                    if (!info.isPrimary()) {
                        // except PK
                        cb.localSp().xspecifyColumn(info.getColumnDbName());
                    }
                }
            }
        });
    }
}
Also used : Entity(org.dbflute.Entity) DBMeta(org.dbflute.dbmeta.DBMeta) ColumnInfo(org.dbflute.dbmeta.info.ColumnInfo) List(java.util.List)

Example 5 with Entity

use of org.dbflute.Entity in project dbflute-core by dbflute.

the class TnQueryInsertDynamicCommand method execute.

// ===================================================================================
// Execute
// =======
public Object execute(Object[] args) {
    // analyze arguments
    final Entity entity = extractEntityWithCheck(args);
    final ConditionBean intoCB = extractIntoConditionBeanWithCheck(args);
    final ConditionBean resourceCB = extractResourceConditionBeanWithCheck(args);
    final InsertOption<ConditionBean> option = extractInsertOptionWithCheck(args);
    prepareStatementConfigOnThreadIfExists(option);
    // arguments for execution (not contains an option)
    final String[] argNames = new String[] { "entity", "pmb" };
    final Class<?>[] argTypes = new Class<?>[] { entity.getClass(), resourceCB.getClass() };
    final Object[] realArgs = new Object[] { entity, resourceCB };
    // prepare context
    final List<TnPropertyType> boundPropTypeList = new ArrayList<TnPropertyType>();
    final CommandContext context;
    {
        final String twoWaySql = buildQueryInsertTwoWaySql(entity, intoCB, resourceCB, option, boundPropTypeList);
        context = createCommandContext(twoWaySql, argNames, argTypes, realArgs);
    }
    // execute
    final TnCommandContextHandler handler = createCommandContextHandler(context);
    handler.setExceptionMessageSqlArgs(context.getBindVariables());
    final boolean identityDisabled = option != null && option.isPrimaryKeyIdentityDisabled();
    if (identityDisabled) {
        disableIdentityGeneration(entity);
    }
    final int rows;
    RuntimeException sqlEx = null;
    try {
        rows = handler.execute(realArgs);
    } catch (RuntimeException e) {
        sqlEx = e;
        throw e;
    } finally {
        if (identityDisabled) {
            try {
                enableIdentityGeneration(entity);
            } catch (RuntimeException e) {
                if (sqlEx == null) {
                    throw e;
                }
            // ignore the exception when main SQL fails
            // not to close the main exception
            }
        }
    }
    return Integer.valueOf(rows);
}
Also used : Entity(org.dbflute.Entity) CommandContext(org.dbflute.twowaysql.context.CommandContext) ArrayList(java.util.ArrayList) TnCommandContextHandler(org.dbflute.s2dao.sqlhandler.TnCommandContextHandler) ConditionBean(org.dbflute.cbean.ConditionBean) TnPropertyType(org.dbflute.s2dao.metadata.TnPropertyType)

Aggregations

Entity (org.dbflute.Entity)30 DBMeta (org.dbflute.dbmeta.DBMeta)11 ColumnInfo (org.dbflute.dbmeta.info.ColumnInfo)10 List (java.util.List)7 ArrayList (java.util.ArrayList)6 Set (java.util.Set)4 ConditionBean (org.dbflute.cbean.ConditionBean)4 EntityAlreadyDeletedException (org.dbflute.exception.EntityAlreadyDeletedException)4 BehaviorCommandMeta (org.dbflute.bhv.core.BehaviorCommandMeta)3 ResourceContext (org.dbflute.bhv.core.context.ResourceContext)3 IllegalConditionBeanOperationException (org.dbflute.exception.IllegalConditionBeanOperationException)3 ExceptionMessageBuilder (org.dbflute.helper.message.ExceptionMessageBuilder)3 LinkedHashMap (java.util.LinkedHashMap)2 AbstractBatchUpdateCommand (org.dbflute.bhv.core.command.AbstractBatchUpdateCommand)2 BatchDeleteCommand (org.dbflute.bhv.core.command.BatchDeleteCommand)2 BatchDeleteNonstrictCommand (org.dbflute.bhv.core.command.BatchDeleteNonstrictCommand)2 BatchInsertCommand (org.dbflute.bhv.core.command.BatchInsertCommand)2 BatchUpdateCommand (org.dbflute.bhv.core.command.BatchUpdateCommand)2 BatchUpdateNonstrictCommand (org.dbflute.bhv.core.command.BatchUpdateNonstrictCommand)2 DeleteEntityCommand (org.dbflute.bhv.core.command.DeleteEntityCommand)2