package io.ebeaninternal.server.core;

import io.ebean.CallableSql;
import io.ebean.MergeOptions;
import io.ebean.Query;
import io.ebean.SqlUpdate;
import io.ebean.Transaction;
import io.ebean.Update;
import io.ebean.bean.EntityBean;
import io.ebean.meta.MetricVisitor;
import io.ebeaninternal.api.SpiSqlUpdate;
import io.ebeaninternal.api.SpiTransaction;
import io.ebeaninternal.server.deploy.BeanDescriptor;

import java.util.Collection;
import java.util.List;

API for persisting a bean.
/** * API for persisting a bean. */
public interface Persister {
Merge the bean.
/** * Merge the bean. */
int merge(BeanDescriptor<?> desc, EntityBean entityBean, MergeOptions options, SpiTransaction transaction);
Update the bean.
/** * Update the bean. */
void update(EntityBean entityBean, Transaction t);
Force an Insert using the given bean.
/** * Force an Insert using the given bean. */
void insert(EntityBean entityBean, Transaction t);
Insert or update the bean depending on its state.
/** * Insert or update the bean depending on its state. */
void save(EntityBean entityBean, Transaction t);
Delete a bean given it's type and id value.

This will also cascade delete one level of children.

/** * Delete a bean given it's type and id value. * <p> * This will also cascade delete one level of children. * </p> */
int delete(Class<?> beanType, Object id, Transaction transaction, boolean permanent);
Delete the bean.
/** * Delete the bean. */
int delete(EntityBean entityBean, Transaction t, boolean permanent);
Delete multiple beans given a collection of Id values.
/** * Delete multiple beans given a collection of Id values. */
int deleteMany(Class<?> beanType, Collection<?> ids, Transaction transaction, boolean permanent);
Delete multiple beans when escalated from a delete query.
/** * Delete multiple beans when escalated from a delete query. */
int deleteByIds(BeanDescriptor<?> descriptor, List<Object> idList, Transaction transaction, boolean permanent);
Execute the Update.
/** * Execute the Update. */
int executeOrmUpdate(Update<?> update, Transaction t);
Execute the SqlUpdate (taking into account transaction batch mode).
/** * Execute the SqlUpdate (taking into account transaction batch mode). */
int executeSqlUpdate(SqlUpdate update, Transaction t);
Execute the SqlUpdate now regardless of transaction batch mode.
/** * Execute the SqlUpdate now regardless of transaction batch mode. */
int executeSqlUpdateNow(SpiSqlUpdate update, Transaction t);
Execute the CallableSql.
/** * Execute the CallableSql. */
int executeCallable(CallableSql callable, Transaction t);
Publish the draft beans matching the given query.
/** * Publish the draft beans matching the given query. */
<T> List<T> publish(Query<T> query, Transaction transaction);
Restore the draft beans back to the matching live beans.
/** * Restore the draft beans back to the matching live beans. */
<T> List<T> draftRestore(Query<T> query, Transaction transaction);
Visit the metrics.
/** * Visit the metrics. */
void visitMetrics(MetricVisitor visitor);
Execute or queue the update.
/** * Execute or queue the update. */
void executeOrQueue(SpiSqlUpdate update, SpiTransaction t, boolean queue);
Queue the SqlUpdate for execution with position 0, 1 or 2 defining when it executes relative to the flush of beans .
/** * Queue the SqlUpdate for execution with position 0, 1 or 2 defining * when it executes relative to the flush of beans . */
void addToFlushQueue(SpiSqlUpdate update, SpiTransaction t, int pos);
Add the statement to JDBC batch for later execution via executeBatch.
/** * Add the statement to JDBC batch for later execution via executeBatch. */
void addBatch(SpiSqlUpdate sqlUpdate, SpiTransaction transaction);
Execute the associated batched statement.
/** * Execute the associated batched statement. */
int[] executeBatch(SpiSqlUpdate sqlUpdate, SpiTransaction transaction); }