@Override public String toString() { StringBuilder s = new StringBuilder(); for (int i = 0; i < nodes.length; i++) { ScelNode node = nodes[i]; if (i > 0) { s.append(' '); } if (node.isQuoted()) { s.append('\''); } s.append(node.literal()); if (node.isQuoted()) { s.append('\''); } } return s.toString(); }
private void scanInValue() { List<ScelNode> values = new ArrayList<>(); String literal = scanInValues(values).trim(); nodes.add(new ScelNode(ScelToken.VALUE, literal, values)); }
private void scanValue() { ScelNode node = scanValueOnly(); if (!node.isNull()) { ScelToken last = nodes.get(nodes.size() - 1).token; if (last == ScelToken.IS_NOT || last == ScelToken.IS) { error("Invalid value of operation '" + last + "', it must be null"); } } nodes.add(node); }
ScelNode node = nodes[i]; if (node.isParen()) { expr.append(node.literal()); continue; if (node.isAnd()) { expr.append(" and "); continue; if (node.isOr()) { expr.append(" or "); continue; ScelToken op = nodes[++i].token(); String value = nodes[++i].literal(); applyFieldFilterExpr(expr, alias, modelAndProp.field, valueExpr, sqlOperator); } else if (op == ScelToken.IN) { applyFieldFilterIn(expr, alias, modelAndProp.field, nodes[i].values()); } else { applyFieldFilter(expr, alias, modelAndProp.field, value, sqlOperator);
protected void applyFieldFilterIn(WhereBuilder.Expr expr, String alias, FieldMapping fm, List<ScelNode> values) { expr.append(alias).append('.').append(fm.getFieldName()).append(' ').append("in").append(" ?"); final Class<?> type = ((FieldMapping) fm).getJavaType(); Object[] args = new Object[values.size()]; for (int i = 0; i < args.length; i++) { ScelNode value = values.get(i); if (ScelToken.NULL == value.token()) { args[i] = null; } else { args[i] = Converts.convert(value.literal(), type); } } expr.arg(args); }
private void scanAndOr() { if (ch == ',') { nodes.add(AND); nextChar(); return; } String s = nextLiteral(); if (s.equalsIgnoreCase("and")) { nodes.add(new ScelNode(ScelToken.AND, s)); } else if (s.equalsIgnoreCase("or")) { nodes.add(new ScelNode(ScelToken.OR, s)); } else { error("Expect 'AND' or 'OR' operator but was '" + s + "'"); } }
private boolean scanName() { String alias = null; String name = scanIdentifier(true); if (name.equalsIgnoreCase("not")) { nodes.add(new ScelNode(ScelToken.NOT, name)); return false; } if (ch == '.') { nextChar(); alias = name; name = scanIdentifier(false); } nodes.add(new ScelName(alias, name)); return true; }
nodes.add(new ScelNode(ScelToken.IS_NOT, op)); String s = nextLiteral(); if (!s.equalsIgnoreCase("null")) { error("Expected 'null' but '" + s + "'"); nodes.add(new ScelNode(ScelToken.NULL, s)); return false; } else if (token == ScelToken.IS) { String s = nextLiteral(); if (s.equalsIgnoreCase("not")) { nodes.add(new ScelNode(ScelToken.IS_NOT, op + " " + s)); s = nextLiteral(); if (!s.equalsIgnoreCase("null")) { error("Expected 'null' but '" + s + "'"); nodes.add(new ScelNode(ScelToken.NULL, s)); return false; } else { nodes.add(new ScelNode(token, op)); if (s.equalsIgnoreCase("null")) { nodes.add(new ScelNode(ScelToken.NULL, s)); return false; nodes.add(new ScelNode(token, op)); scanInValue(); return false; } else { nodes.add(new ScelNode(token, op));