/* Generated By:JJTree: Do not edit this line. OInstanceofCondition.java Version 4.3 */ /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=O,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package com.orientechnologies.orient.core.sql.parser; import com.orientechnologies.orient.core.command.OCommandContext; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.record.ORecord; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.serialization.serializer.OStringSerializerHelper; import java.util.Collections; import java.util.List; import java.util.Map; public class OInstanceofCondition extends OBooleanExpression{ protected OExpression left; protected OIdentifier right; protected String rightString; public OInstanceofCondition(int id) { super(id); } public OInstanceofCondition(OrientSql p, int id) { super(p, id); } /** * Accept the visitor. **/ public Object jjtAccept(OrientSqlVisitor visitor, Object data) { return visitor.visit(this, data); } @Override public boolean evaluate(OIdentifiable currentRecord, OCommandContext ctx) { if (currentRecord == null) { return false; } ORecord record = currentRecord.getRecord(); if (record == null) { return false; } if (!(record instanceof ODocument)) { return false; } ODocument doc = (ODocument) record; OClass clazz = doc.getSchemaClass(); if (clazz == null) { return false; } if (right != null) { return clazz.isSubClassOf(right.getStringValue()); } else if (rightString != null) { return clazz.isSubClassOf(decode(rightString)); } return false; } private String decode(String rightString) { if(rightString==null){ return null; } return OStringSerializerHelper.decode(rightString.substring(1, rightString.length()-1)); } public void toString(Map<Object, Object> params, StringBuilder builder) { left.toString(params, builder); builder.append(" instanceof "); if (right != null) { right.toString(params, builder); } else if (rightString != null) { builder.append(rightString); } } @Override public boolean supportsBasicCalculation() { return left.supportsBasicCalculation(); } @Override protected int getNumberOfExternalCalculations() { if (!left.supportsBasicCalculation()) { return 1; } return 0; } @Override protected List<Object> getExternalCalculationConditions() { if (!left.supportsBasicCalculation()) { return (List) Collections.singletonList(left); } return Collections.EMPTY_LIST; } @Override public List<String> getMatchPatternInvolvedAliases() { return left == null ? null : left.getMatchPatternInvolvedAliases(); } } /* JavaCC - OriginalChecksum=0b5eb529744f307228faa6b26f0592dc (do not edit this line) */