All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.ebeaninternal.server.deploy.id.IdBinder Maven / Gradle / Ivy

There is a newer version: 15.8.0
Show newest version
package io.ebeaninternal.server.deploy.id;

import io.ebean.bean.EntityBean;
import io.ebeaninternal.api.SpiExpressionBind;
import io.ebeaninternal.api.SpiExpressionRequest;
import io.ebeaninternal.server.core.DefaultSqlUpdate;
import io.ebeaninternal.server.deploy.BeanProperty;
import io.ebeaninternal.server.deploy.DbReadContext;
import io.ebeaninternal.server.deploy.DbSqlContext;
import io.ebeaninternal.server.query.STreeProperty;
import io.ebeaninternal.server.bind.DataBind;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;

/**
 * Binds id values to prepared statements.
 */
public interface IdBinder {

  /**
   * Initialise the binder.
   */
  void initialise();

  /**
   * Wrap the filter many expression with a condition allowing lEFT JOIN null matching row.
   */
  String idNullOr(String name, String filterManyExpression);

  String idSelect();

  /**
   * Return true if this is a compound key and must use expanded and or form.
   */
  boolean isIdInExpandedForm();

  /**
   * Write the Id value to binary DataOuput.
   */
  void writeData(DataOutput dataOutput, Object idValue) throws IOException;

  /**
   * Read the Id value from the binary DataInput.
   */
  Object readData(DataInput dataInput) throws IOException;

  /**
   * Return the Id BeanProperty.
   */
  STreeProperty beanProperty();

  /**
   * Find a BeanProperty that is mapped to the database column.
   */
  BeanProperty findBeanProperty(String dbColumnName);

  /**
   * Return false if the id is a simple scalar and false if it is embedded or
   * concatenated.
   */
  boolean isComplexId();

  /**
   * Return the number of properties that make up the id.
   */
  default int size() {
    return 1;
  }

  /**
   * Return the default order by that may need to be used if the query includes
   * a many property.
   */
  String orderBy();

  String orderBy(String pathPrefix, boolean ascending);

  /**
   * Return the id values for a given bean.
   */
  Object[] values(EntityBean bean);

  /**
   * Return the values as an array of scalar bindable values.
   * 

* For concatenated keys that use an Embedded bean or multiple id properties * this determines the field values are returns them as an Object array. *

*

* Added primarily for Query.addWhere().add(Expr.idEq()) support. *

*/ Object[] bindValues(Object idValue); /** * For EmbeddedId convert the idValue into a simple map. * Otherwise the idValue is just returned as is. *

* This is used to provide a simple JSON serializable version of the id value. *

*/ Object convertForJson(EntityBean idValue); /** * For EmbeddedId the value is assumed to be a Map and this is * takes the values from the map and builds an embedded id bean. *

* For other simple id's this just returns the value (no conversion required). *

*

* This is used to provide a simple JSON serializable version of the id value. *

*/ Object convertFromJson(Object value); /** * Build a string of the logical expressions. *

* Typically used to build a id = ? string. *

*/ String assocExpr(String prefix, String operator); /** * Return the logical id in expression taking into account embedded id's. */ String assocInExpr(String prefix); /** * Binds an id value to a prepared statement. */ void bindId(DataBind dataBind, Object value) throws SQLException; /** * Bind the id value to a SqlUpdate statement. */ void bindId(DefaultSqlUpdate sqlUpdate, Object value); /** * Binds multiple id value to an update. */ void addBindValues(DefaultSqlUpdate sqlUpdate, Collection ids); /** * Binds multiple id value to a request. */ void addBindValues(SpiExpressionBind request, Collection ids); /** * Return the sql for binding the id using an IN clause. */ String bindInSql(String baseTableAlias); /** * Return the binding expression (like "?" or "(?,?)")for the Id. */ String idInValueExpr(boolean not, int size); /** * Same as getIdInValueExpr but for delete by id. */ String idInValueExprDelete(int size); void buildRawSqlSelectChain(String prefix, List selectChain); /** * Read the id value from the result set and set it to the bean also returning * it. */ Object readSet(DbReadContext ctx, EntityBean bean) throws SQLException; /** * Ignore the appropriate number of scalar properties for this id. */ void loadIgnore(DbReadContext ctx); /** * Read the id value from the result set and return it. */ Object read(DbReadContext ctx) throws SQLException; /** * Append to the select clause. */ void appendSelect(DbSqlContext ctx, boolean subQuery); /** * Return the sql for binding the id to. This includes table alias and columns * that make up the id. */ String bindEqSql(String baseTableAlias); /** * Cast or convert the Id value if necessary and optionally set it. *

* The Id value is not assumed to be the correct type so it is converted to * the correct type. Typically this is because we could get a Integer, Long or * BigDecimal depending on the JDBC driver and situation. *

*

* If the bean is not null, then the value is set to the bean. *

*/ Object convertSetId(Object idValue, EntityBean bean); /** * Cast or convert the Id value if necessary. */ Object convertId(Object idValue); /** * Return a key to use for bean caches given the id value. */ String cacheKey(Object idValue); /** * Return a key to use for bean caches given the bean. */ String cacheKeyFromBean(EntityBean bean); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy