@Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof Like) { Like like = (Like)obj; if (like.getMode() == MatchMode.REGEX) { if (like.isNegated()) { return Arrays.asList("NOT(REGEXP_LIKE(", like.getLeftExpression(), ", ", like.getRightExpression(), "))"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } return Arrays.asList("REGEXP_LIKE(", like.getLeftExpression(), ", ", like.getRightExpression(), ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } return super.translate(obj, context); }
/** * Add a default escape * @param like * @return */ public static List<Object> addDefaultEscape(Like like) { return Arrays.asList(like.getLeftExpression(), like.isNegated()?" NOT ":" ", like.getMode()==MatchMode.LIKE?"LIKE ":"SIMILAR TO ", like.getRightExpression(), " ESCAPE ''"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ }
public void visit(Like obj) { append(obj.getLeftExpression()); if (obj.isNegated()) { buffer.append(Tokens.SPACE) .append(NOT); } buffer.append(Tokens.SPACE); switch (obj.getMode()) { case LIKE: buffer.append(LIKE); break; case SIMILAR: buffer.append(SIMILAR) .append(Tokens.SPACE) .append(TO); case REGEX: buffer.append(getLikeRegexString()); } buffer.append(Tokens.SPACE); append(obj.getRightExpression()); if (obj.getEscapeCharacter() != null) { buffer.append(Tokens.SPACE) .append(ESCAPE) .append(Tokens.SPACE) .append(Tokens.QUOTE) .append(escapeString(String.valueOf(obj.getEscapeCharacter()), Tokens.QUOTE)) .append(Tokens.QUOTE); } }
@Override public void visit(Like obj) { try { Object o1 = getRowValue(obj.getLeftExpression()); Object o2 = getLiteralValue(obj.getRightExpression()); if (o1 instanceof String && o2 instanceof String) { String value = (String)o1; if (obj.isNegated()) { this.match.push(!value.matches((String)o2)); } else { this.match.push(value.matches((String)o2)); } } else { this.exceptions.add(new TranslatorException(MongoDBPlugin.Util.gs(MongoDBPlugin.Event.TEIID18019))); } } catch (TranslatorException e) { this.exceptions.add(e); } }
public void visit(Like obj) { visitNode(obj.getLeftExpression()); visitNode(obj.getRightExpression()); }
@Override public void visit(Like obj) { if (obj.getMode() == MatchMode.REGEX) { if (obj.isNegated()) { buffer.append("NOT("); //$NON-NLS-1$ } buffer.append("REGEXP_LIKE("); //$NON-NLS-1$ append(obj.getLeftExpression()); buffer.append(", "); //$NON-NLS-1$ append(obj.getRightExpression()); buffer.append(")"); //$NON-NLS-1$ if (obj.isNegated()) { buffer.append(")"); //$NON-NLS-1$ } } else { super.visit(obj); } }
public void testGetRightExpression() throws Exception { Like like = example("abc", '.', false); //$NON-NLS-1$ assertNotNull(like.getRightExpression()); assertTrue(like.getRightExpression() instanceof Literal); assertEquals("abc", ((Literal)like.getRightExpression()).getValue()); //$NON-NLS-1$ }
/** * Postgres doesn't provide min/max(boolean), so this conversion writes a min(BooleanValue) as * bool_and(BooleanValue) * @see org.teiid.language.visitor.LanguageObjectVisitor#visit(org.teiid.language.AggregateFunction) * @since 4.3 */ @Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof AggregateFunction) { AggregateFunction agg = (AggregateFunction)obj; if (agg.getParameters().size() == 1 && TypeFacility.RUNTIME_TYPES.BOOLEAN.equals(agg.getParameters().get(0).getType())) { if (agg.getName().equalsIgnoreCase(NonReserved.MIN)) { agg.setName("bool_and"); //$NON-NLS-1$ } else if (agg.getName().equalsIgnoreCase(NonReserved.MAX)) { agg.setName("bool_or"); //$NON-NLS-1$ } } } else if (obj instanceof Like) { Like like = (Like)obj; if (like.getMode() == MatchMode.REGEX) { return Arrays.asList(like.getLeftExpression(), like.isNegated()?" !~ ":" ~ ", like.getRightExpression()); //$NON-NLS-1$ //$NON-NLS-2$ } else if (like.getEscapeCharacter() == null) { return addDefaultEscape(like); } } return super.translate(obj, context); }
Expression rhs = like.getRightExpression();