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

com.orientechnologies.orient.core.sql.parser.OOrBlock Maven / Gradle / Ivy

There is a newer version: 3.2.32
Show newest version
/* Generated By:JJTree: Do not edit this line. OOrBlock.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=O,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package com.orientechnologies.orient.core.sql.parser;

import com.orientechnologies.orient.core.command.OCommandContext;
import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.executor.OResult;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class OOrBlock extends OBooleanExpression {
  List subBlocks = new ArrayList();

  public OOrBlock(int id) {
    super(id);
  }

  public OOrBlock(OrientSql p, int id) {
    super(p, id);
  }

  @Override
  public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) {
    if (getSubBlocks() == null) {
      return true;
    }

    for (OBooleanExpression block : subBlocks) {
      if (block.evaluate(currentRecord, ctx)) {
        return true;
      }
    }
    return false;
  }

  @Override
  public boolean evaluate(OResult currentRecord, OCommandContext ctx) {
    if (getSubBlocks() == null) {
      return true;
    }

    for (OBooleanExpression block : subBlocks) {
      if (block.evaluate(currentRecord, ctx)) {
        return true;
      }
    }
    return false;
  }

  public boolean evaluate(Object currentRecord, OCommandContext ctx) {
    if (currentRecord instanceof OResult) {
      return evaluate((OResult) currentRecord, ctx);
    } else if (currentRecord instanceof OIdentifiable) {
      return evaluate((OIdentifiable) currentRecord, ctx);
    } else if (currentRecord instanceof Map) {
      ODocument doc = new ODocument();
      doc.fromMap((Map) currentRecord);
      return evaluate(doc, ctx);
    }
    return false;
  }

  public List getSubBlocks() {
    return subBlocks;
  }

  public void setSubBlocks(List subBlocks) {
    this.subBlocks = subBlocks;
  }

  public void addSubBlock(OBooleanExpression block) {
    this.subBlocks.add(block);
  }

  public void toString(Map params, StringBuilder builder) {
    if (subBlocks == null || subBlocks.size() == 0) {
      return;
    }

    boolean first = true;
    for (OBooleanExpression expr : subBlocks) {
      if (!first) {
        builder.append(" OR ");
      }
      expr.toString(params, builder);
      first = false;
    }
  }

  public void toGenericStatement(StringBuilder builder) {
    if (subBlocks == null || subBlocks.size() == 0) {
      return;
    }

    boolean first = true;
    for (OBooleanExpression expr : subBlocks) {
      if (!first) {
        builder.append(" OR ");
      }
      expr.toGenericStatement(builder);
      first = false;
    }
  }

  @Override
  protected boolean supportsBasicCalculation() {
    for (OBooleanExpression expr : subBlocks) {
      if (!expr.supportsBasicCalculation()) {
        return false;
      }
    }
    return true;
  }

  @Override
  protected int getNumberOfExternalCalculations() {
    int result = 0;
    for (OBooleanExpression expr : subBlocks) {
      result += expr.getNumberOfExternalCalculations();
    }
    return result;
  }

  @Override
  protected List getExternalCalculationConditions() {
    List result = new ArrayList();
    for (OBooleanExpression expr : subBlocks) {
      result.addAll(expr.getExternalCalculationConditions());
    }
    return result;
  }

  public List getIndexedFunctionConditions(
      OClass iSchemaClass, ODatabaseDocumentInternal database) {
    if (subBlocks == null || subBlocks.size() > 1) {
      return null;
    }
    List result = new ArrayList();
    for (OBooleanExpression exp : subBlocks) {
      List sub = exp.getIndexedFunctionConditions(iSchemaClass, database);
      if (sub != null && sub.size() > 0) {
        result.addAll(sub);
      }
    }
    return result.size() == 0 ? null : result;
  }

  public List flatten() {
    List result = new ArrayList();
    for (OBooleanExpression sub : subBlocks) {
      List childFlattened = sub.flatten();
      for (OAndBlock child : childFlattened) {
        result.add(child);
      }
    }
    return result;
  }

  @Override
  public boolean needsAliases(Set aliases) {
    for (OBooleanExpression expr : subBlocks) {
      if (expr.needsAliases(aliases)) {
        return true;
      }
    }
    return false;
  }

  @Override
  public OOrBlock copy() {
    OOrBlock result = new OOrBlock(-1);
    result.subBlocks = subBlocks.stream().map(x -> x.copy()).collect(Collectors.toList());
    return result;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    OOrBlock oOrBlock = (OOrBlock) o;

    if (subBlocks != null ? !subBlocks.equals(oOrBlock.subBlocks) : oOrBlock.subBlocks != null)
      return false;

    return true;
  }

  @Override
  public int hashCode() {
    return subBlocks != null ? subBlocks.hashCode() : 0;
  }

  @Override
  public boolean isEmpty() {
    if (subBlocks.isEmpty()) {
      return true;
    }
    for (OBooleanExpression block : subBlocks) {
      if (!block.isEmpty()) {
        return false;
      }
    }
    return true;
  }

  @Override
  public void extractSubQueries(SubQueryCollector collector) {
    for (OBooleanExpression block : subBlocks) {
      block.extractSubQueries(collector);
    }
  }

  @Override
  public boolean refersToParent() {
    for (OBooleanExpression exp : subBlocks) {
      if (exp != null && exp.refersToParent()) {
        return true;
      }
    }
    return false;
  }

  @Override
  public List getMatchPatternInvolvedAliases() {
    List result = new ArrayList();
    for (OBooleanExpression exp : subBlocks) {
      List x = exp.getMatchPatternInvolvedAliases();
      if (x != null) {
        result.addAll(x);
      }
    }
    return result.size() == 0 ? null : result;
  }

  @Override
  public void translateLuceneOperator() {
    subBlocks.forEach(x -> x.translateLuceneOperator());
  }

  @Override
  public boolean isCacheable() {
    for (OBooleanExpression block : this.subBlocks) {
      if (!block.isCacheable()) {
        return false;
      }
    }
    return true;
  }

  @Override
  public OBooleanExpression rewriteIndexChainsAsSubqueries(OCommandContext ctx, OClass clazz) {
    for (OBooleanExpression exp : subBlocks) {
      exp.rewriteIndexChainsAsSubqueries(ctx, clazz);
    }
    return this;
  }

  @Override
  public boolean isAlwaysTrue() {
    if (subBlocks.isEmpty()) {
      return true;
    }
    for (OBooleanExpression exp : subBlocks) {
      if (exp.isAlwaysTrue()) {
        return true;
      }
    }
    return false;
  }
}
/* JavaCC - OriginalChecksum=98d3077303a598705894dbb7bd4e1573 (do not edit this line) */