/** * 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$ }
@Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof Like) { Like like = (Like)obj; if (like.getEscapeCharacter() == null && like.getMode() != MatchMode.REGEX) { return PostgreSQLExecutionFactory.addDefaultEscape(like); } } return super.translate(obj, context); }
public Like createLikeCriteria( Expression leftExpression, Expression rightExpression, Character escapeCharacter, boolean isNegated) { return new Like(leftExpression, rightExpression, escapeCharacter, isNegated); }
@Override public void visit(Like obj) { if (obj.isNegated()) { buffer.append("("); //$NON-NLS-1$ } super.visit(obj); if (obj.isNegated()) { buffer.append(" AND "); //$NON-NLS-1$ visitNode(obj.getLeftExpression()); buffer.append(" IS NOT NULL)"); //$NON-NLS-1$ } }
@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); } }
@Override public void visit( Like criteria ) { if (isIdColumn(criteria.getLeftExpression())) { TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.Id")); //$NON-NLS-1$ exceptions.add(e); } if (isMultiSelectColumn(criteria.getLeftExpression())) { TranslatorException e = new TranslatorException(SalesForcePlugin.Util.getString("CriteriaVisitor.LIKE.not.supported.on.multiselect")); //$NON-NLS-1$ exceptions.add(e); } boolean negated = criteria.isNegated(); criteria.setNegated(false); if (negated) { criteriaBuffer.add("NOT ("); //$NON-NLS-1$ } criteriaBuffer.add(criteria.toString()); if (negated) { criteriaBuffer.add(CLOSE); criteria.setNegated(true); } // don't check if it's ID, Id LIKE '123%' still requires a query setHasCriteria(true, false); }
public void visit(Like obj) { visitNode(obj.getLeftExpression()); visitNode(obj.getRightExpression()); }
protected QueryBuilder buildLikeQuery(Like obj, QueryBuilder query) { if (obj.isNegated()) { query.not(); append(obj.getRightExpression());
@Override public void visit(Like obj) { append(obj.getLeftExpression()); Object expr = this.onGoingExpression.pop(); ColumnDetail detail = this.expressionMap.get(expr); QueryBuilder query = QueryBuilder.start(); if (detail == null) { this.exceptions.add(new TranslatorException(MongoDBPlugin.Event.TEIID18033, MongoDBPlugin.Util.gs(MongoDBPlugin.Event.TEIID18033))); } else { query = detail.getQueryBuilder(); buildLikeQuery(obj, query); this.onGoingExpression.push(query.get()); } }
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
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$ }
public void testGetEscapeCharacter() throws Exception { assertEquals(new Character('.'), example("abc", '.', false).getEscapeCharacter()); //$NON-NLS-1$ }
@Override public void visit(Like obj) { if (!this.mongoDoc.isMerged() || this.mongoDoc.isMerged() && this.mongoDoc.getMergeAssociation() != Association.MANY) { super.visit(obj); return; } try { boolean buildPullQuery = includeInPullCriteria(obj.getLeftExpression()); if (buildPullQuery) { ColumnDetail exprAlias = getExpressionAlias(obj.getLeftExpression()); this.onGoingPullCriteria.push(buildLikeQuery(obj, exprAlias.getPullQueryBuilder()).get()); } else { ColumnDetail exprAlias = getExpressionAlias(obj.getLeftExpression()); this.onGoingExpression.push(buildLikeQuery(obj, exprAlias.getQueryBuilder()).get()); } } catch (TranslatorException e) { this.exceptions.add(e); } } }
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
@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); }
public void testGetLeftExpression() throws Exception { assertNotNull(example("abc", '.', false).getLeftExpression()); //$NON-NLS-1$ }
Like translate(MatchCriteria criteria) { Character escapeChar = null; if(criteria.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) { escapeChar = new Character(criteria.getEscapeChar()); } Like like = new Like(translate(criteria.getLeftExpression()), translate(criteria.getRightExpression()), escapeChar, criteria.isNegated()); like.setMode(criteria.getMode()); return like; }
@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 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); } }