@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { fieldInfo.add(resolveField(q.getField(), context, q, true)); return q; }
private static boolean isFieldQueried(Path field, RegexMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by regex {}", field, q); return isFieldQueried(field, q.getField(), context); }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { fieldInfo.add(resolveField(q.getField(), context, q, true)); return q; }
private static boolean isFieldQueried(Path field, RegexMatchExpression q, Path context) { LOGGER.debug("Checking if field {} is queried by regex {}", field, q); return isFieldQueried(field, q.getField(), context); }
@Override protected KeySpec processRegexMatchExpression(RegexMatchExpression q) { return simpleKeySpec(findFieldInfo(q.getField(),q)); }
@Override protected KeySpec processRegexMatchExpression(RegexMatchExpression q) { return simpleKeySpec(findFieldInfo(q.getField(),q)); }
private DBObject translateRegexMatchExpression(RegexMatchExpression expr) { StringBuilder options = new StringBuilder(); BasicDBObject regex = new BasicDBObject("$regex", expr.getRegex()); if (expr.isCaseInsensitive()) { options.append('i'); } if (expr.isMultiline()) { options.append('m'); } if (expr.isExtended()) { options.append('x'); } if (expr.isDotAll()) { options.append('s'); } String opStr = options.toString(); if (opStr.length() > 0) { regex.append("$options", opStr); } return new BasicDBObject(translatePath(expr.getField()), regex); }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new RegexMatchExpression(p, q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } else { return q; } }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new RegexMatchExpression(p, q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } else { return q; } }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { Path p = rewrite(context, q.getField()); if (!p.equals(q.getField())) { return new RegexMatchExpression(p, q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } else { return q; } }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new RegexMatchExpression(removeContext(context, p, q.getField()), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } else { return q; } }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { Path p = map(applyContext(context, q.getField())); if (p != null) { return new RegexMatchExpression(removeContext(context, p, q.getField()), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } else { return q; } }
/** * Constructs evaluator for {field op value} style comparison * * @param expr The expression * @param md Entity metadata * @param context The path relative to which the expression will be * evaluated */ public RegexEvaluator(RegexMatchExpression expr, FieldTreeNode context) { this.relativePath = expr.getField(); fieldMd = context.resolve(relativePath); if (fieldMd == null) { throw new EvaluationError(expr, CrudConstants.ERR_FIELD_NOT_THERE + relativePath); } int flags = 0; if (expr.isCaseInsensitive()) { flags |= Pattern.CASE_INSENSITIVE; } if (expr.isMultiline()) { flags |= Pattern.MULTILINE; } if (expr.isExtended()) { flags |= Pattern.COMMENTS; } if (expr.isDotAll()) { flags |= Pattern.DOTALL; } regex = Pattern.compile(expr.getRegex(), flags); LOGGER.debug("ctor {} {}", relativePath, regex); }
@Override protected LookupSpec processRegexMatchExpression(RegexMatchExpression q) { return new PrefixLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),getPrefix(q.getRegex()),q.isCaseInsensitive()); }
@Override protected LookupSpec processRegexMatchExpression(RegexMatchExpression q) { return new PrefixLookupSpec(simpleKeySpec(findFieldInfo(q.getField(),q)),getPrefix(q.getRegex()),q.isCaseInsensitive()); }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { return new RegexMatchExpression(toRelative(q.getField(), context), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { return new RegexMatchExpression(toRelative(q.getField(), context), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); }
/** * <pre> * var r0=new RegExp("pattern","options"); * var r1=false; * r1=r0.test(field); * return r1; * </pre> */ private Block translateRegexMatchExpression(Context ctx,RegexMatchExpression query) { FieldTreeNode fieldMd=ctx.contextNode.resolve(query.getField()); if(fieldMd.getType() instanceof StringType) { Name fieldName=ctx.varName(new Name(query.getField())); String regexVar=ctx.topLevel.newGlobal(ctx,String.format("new RegExp(\"%s\",\"%s\")", query.getRegex().replaceAll("\"","\\\""), regexFlags(query))); Block block=new Block(ctx.topLevel.newGlobalBoolean(ctx)); block.add(IfStatement.ifDefined(fieldName,new SimpleStatement("%s=%s.test(this.%s)", block.resultVar, regexVar, fieldName.toString()))); return block; } else throw Error.get(ERR_INVALID_COMPARISON,query.toString()); }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { QueryFieldInfo qfi = findFieldInfo(q.getField(), q); if (qfi.getFieldEntity() != currentEntity) { return new TruePH(); } else if (qfi.getFieldNameInClause().equals(qfi.getEntityRelativeFieldName()) && nestedFieldPrefix.isEmpty()) { return q; } else { return new RegexMatchExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } }
@Override protected QueryExpression itrRegexMatchExpression(RegexMatchExpression q, Path context) { QueryFieldInfo qfi = findFieldInfo(q.getField(), q); if (qfi.getFieldEntity() != currentEntity) { return new TruePH(); } else if (qfi.getFieldNameInClause().equals(qfi.getEntityRelativeFieldName()) && nestedFieldPrefix.isEmpty()) { return q; } else { return new RegexMatchExpression(addPrefix(qfi.getEntityRelativeFieldName()), q.getRegex(), q.isCaseInsensitive(), q.isMultiline(), q.isExtended(), q.isDotAll()); } }