protected CommandEvaluator<Criterion, Object> compileIdentifierToValueCMP(
     IdentifierToValueCMP node) {
   Identifier id = node.getIdentifier();
   if (id instanceof Field) {
     String name = id.getName();
     Value value = node.getValue();
     if (INSTANCE_ID_FIELD.equals(name)) {
       value.setValue(Long.valueOf((String) value.getValue()));
     } else if (INSTANCE_STARTED_FIELD.equals(name) || INSTANCE_LAST_ACTIVE_FIELD.equals(name)) {
       try {
         value.setValue(ISO8601DateParser.parse((String) value.getValue()));
       } catch (ParseException ex) {
         throw new RuntimeException(ex);
       }
     }
   }
   if (node instanceof Equality) {
     return compileEqual((Equality) node);
   } else if (node instanceof Less) {
     return compileLess((Less) node);
   } else if (node instanceof Greater) {
     return compileGreater((Greater) node);
   } else if (node instanceof GE) {
     return compileGE((GE) node);
   } else if (node instanceof LE) {
     return compileLE((LE) node);
   } else if (node instanceof Like) {
     return compileLike((Like) node);
   } else {
     throw new IllegalArgumentException("Unsupported node " + node.getClass());
   }
 }