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

com.avaje.ebeaninternal.server.query.SqlTreeProperties Maven / Gradle / Ivy

There is a newer version: 9.5.1
Show newest version
package com.avaje.ebeaninternal.server.query;

import com.avaje.ebeaninternal.api.ManyWhereJoins;
import com.avaje.ebeaninternal.server.deploy.BeanProperty;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

/**
 * The select properties for a node in the SqlTree.
 */
public class SqlTreeProperties {

  /**
   * True if this node of the tree should have read only entity beans.
   */
  private boolean readOnly;

  /**
   * The bean properties in order.
   */
  private final List propsList = new ArrayList<>();

  /**
   * Maintain a list of property names to detect embedded bean additions.
   */
  private final LinkedHashSet propNames = new LinkedHashSet<>();

  private boolean allProperties;

  private boolean aggregation;

  SqlTreeProperties() {
  }

  boolean containsProperty(String propName) {
    return propNames.contains(propName);
  }

  public void add(BeanProperty[] props) {
    //noinspection ManualArrayToCollectionCopy
    for (BeanProperty prop : props) {
      propsList.add(prop);
    }
  }

  public void add(BeanProperty prop) {
    propsList.add(prop);
    propNames.add(prop.getName());
  }

  public BeanProperty[] getProps() {
    return propsList.toArray(new BeanProperty[propsList.size()]);
  }

  boolean isPartialObject() {
    return !allProperties;
  }

  public boolean isReadOnly() {
    return readOnly;
  }

  public void setReadOnly(boolean readOnly) {
    this.readOnly = readOnly;
  }

  void setAllProperties() {
    this.allProperties = true;
  }

  /**
   * Check for an aggregation property and set manyWhereJoin as needed.
   * 

* Return true if a Sql distinct is required. *

*/ boolean requireSqlDistinct(ManyWhereJoins manyWhereJoins) { String joinProperty = aggregationJoin(); if (joinProperty != null) { aggregation = true; manyWhereJoins.addAggregationJoin(joinProperty); return false; } else { return manyWhereJoins.requireSqlDistinct(); } } /** * Return true if this contains an aggregation property. */ public boolean isAggregation() { return aggregation; } /** * Return the property to join for aggregation. */ private String aggregationJoin() { if (!allProperties) { for (BeanProperty beanProperty : propsList) { if (beanProperty.isAggregation()) { return beanProperty.getElPrefix(); } } } return null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy