Package org.openrdf.sail.rdbms.algebra.base

Examples of org.openrdf.sail.rdbms.algebra.base.SqlExpr


  @Override
  public void meet(SqlAnd node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr left = node.getLeftArg();
    SqlExpr right = node.getRightArg();
    if (left instanceof FalseValue || right instanceof FalseValue) {
      replace(node, new FalseValue());
    }
    else if (left instanceof TrueValue && right instanceof TrueValue) {
      replace(node, new TrueValue());
    }
    else if (left instanceof TrueValue) {
      replace(node, right.clone());
    }
    else if (right instanceof TrueValue) {
      replace(node, left.clone());
    }
    else if (right instanceof SqlNull || left instanceof SqlNull) {
View Full Code Here


  @Override
  public void meet(SqlCompare node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr left = node.getLeftArg();
    SqlExpr right = node.getRightArg();
    if (left instanceof SqlNull || right instanceof SqlNull) {
      replace(node, new SqlNull());
    }
  }
View Full Code Here

  @Override
  public void meet(SqlConcat node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr left = node.getLeftArg();
    SqlExpr right = node.getRightArg();
    if (left instanceof StringValue && right instanceof StringValue) {
      StringValue l = (StringValue)left;
      StringValue r = (StringValue)right;
      replace(node, new StringValue(l.getValue() + r.getValue()));
    }
View Full Code Here

  @Override
  public void meet(SqlEq node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr left = node.getLeftArg();
    SqlExpr right = node.getRightArg();
    if (left instanceof SqlNull || right instanceof SqlNull) {
      replace(node, new SqlNull());
    }
    else if (left instanceof SqlConstant<?> && right instanceof SqlConstant<?>) {
      SqlConstant<?> l = (SqlConstant<?>)left;
View Full Code Here

  @Override
  public void meet(SqlIsNull node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr arg = node.getArg();
    if (arg instanceof SqlNull) {
      replace(node, new TrueValue());
    }
    else if (arg instanceof SqlConstant<?>) {
      replace(node, new FalseValue());
    }
    else if (arg instanceof SqlCase) {
      SqlExpr rep = null;
      SqlExpr prev = null;
      SqlCase scase = (SqlCase)arg;
      for (Entry entry : scase.getEntries()) {
        SqlExpr condition = entry.getCondition();
        if (rep == null) {
          rep = and(condition.clone(), isNull(entry.getResult().clone()));
          prev = not(condition.clone());
        }
        else {
          rep = or(rep, and(and(prev.clone(), condition.clone()), isNull(entry.getResult().clone())));
          prev = and(prev, not(condition.clone()));
        }
      }
      replace(node, or(rep, prev.clone()));
    }
  }
View Full Code Here

  @Override
  public void meet(SqlNot node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr arg = node.getArg();
    if (arg instanceof TrueValue) {
      replace(node, new FalseValue());
    }
    else if (arg instanceof FalseValue) {
      replace(node, new TrueValue());
View Full Code Here

  @Override
  public void meet(SqlOr node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr left = node.getLeftArg();
    SqlExpr right = node.getRightArg();
    if (left instanceof TrueValue || right instanceof TrueValue) {
      replace(node, new TrueValue());
    }
    else if (left instanceof FalseValue && right instanceof FalseValue) {
      replace(node, new FalseValue());
    }
    else if (left instanceof FalseValue) {
      replace(node, right.clone());
    }
    else if (right instanceof FalseValue) {
      replace(node, left.clone());
    }
    else if (right instanceof SqlNull && andAllTheWay(node)) {
      replace(node, left.clone());
    }
    else if (left instanceof SqlNull && andAllTheWay(node)) {
      replace(node, right.clone());
    }
    else if (right instanceof SqlNull && left instanceof SqlNull) {
      replace(node, new SqlNull());
    }
    else if (left instanceof SqlNull && right instanceof SqlOr) {
      SqlOr r = (SqlOr)right;
      SqlExpr rleft = r.getLeftArg();
      SqlExpr rright = r.getRightArg();
      if (rleft instanceof SqlNull || rright instanceof SqlNull) {
        replace(node, right.clone());
      }
    }
    else if (right instanceof SqlNull && left instanceof SqlOr) {
      SqlOr l = (SqlOr)left;
      SqlExpr lleft = l.getLeftArg();
      SqlExpr lright = l.getRightArg();
      if (lleft instanceof SqlNull || lright instanceof SqlNull) {
        replace(node, left.clone());
      }
    }
    else if (right instanceof SqlNull && left instanceof SqlAnd) {
      // value IS NOT NULL AND value = ? OR NULL
      // -> value = ?
      SqlAnd l = (SqlAnd)left;
      SqlExpr lleft = l.getLeftArg();
      SqlExpr lright = l.getRightArg();
      SqlExpr isNotNull = arg(arg(lleft, SqlNot.class), SqlIsNull.class);
      SqlExpr isNotEq = other(lright, isNotNull, SqlEq.class);
      if (isNotEq instanceof SqlConstant) {
        replace(node, lright);
      }
    }
  }
View Full Code Here

  }

  private SqlExpr other(SqlExpr node, SqlExpr compare, Class<? extends BinarySqlOperator> type) {
    if (type.isInstance(node)) {
      BinarySqlOperator cast = type.cast(node);
      SqlExpr left = cast.getLeftArg();
      SqlExpr right = cast.getRightArg();
      if (left.equals(compare))
        return right;
      if (right.equals(compare))
        return left;
    }
    return null;
  }
View Full Code Here

  @Override
  public void meet(SqlRegex node)
    throws RuntimeException
  {
    super.meet(node);
    SqlExpr flags = node.getFlagsArg();
    if (!(flags instanceof SqlNull)) {
      SqlExpr pattern = node.getPatternArg();
      SqlExpr prefix = concat(str("(?"), flags, str(")"));
      pattern.replaceWith(concat(prefix, pattern.clone()));
      node.setFlagsArg(null);
    }
  }
View Full Code Here

  private SqlExpr str(String string) {
    return new StringValue(string);
  }

  private SqlExpr concat(SqlExpr... exprs) {
    SqlExpr concat = null;
    for (SqlExpr expr : exprs) {
      if (concat == null) {
        concat = expr;
      }
      else {
View Full Code Here

TOP

Related Classes of org.openrdf.sail.rdbms.algebra.base.SqlExpr

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.