/** */ private void assertBinaryObjectsEqual(BinaryObject exp, BinaryObject actual) throws Exception { assertBinaryTypesEqual(exp.type(), actual.type()); for (String f : exp.type().fieldNames()) { Object expVal = exp.field(f); Class<?> cls = expVal.getClass(); if (cls.getMethod("equals", Object.class).getDeclaringClass() == cls) assertEquals(expVal, actual.field(f)); } if (exp.type().isEnum()) assertEquals(exp.enumOrdinal(), actual.enumOrdinal()); }
/** * @param obj BinaryObject array. * @return Deserialized enums. */ private TestEnum[] deserializeEnumBinaryArray(Object obj) { Object[] arr = (Object[])obj; final TestEnum[] res = new TestEnum[arr.length]; for (int i = 0; i < arr.length; i++) res[i] = ((BinaryObject)arr[i]).deserialize(); return res; }
/** {@inheritDoc} */ @Override public boolean hasField(Object obj, String fieldName) { return obj != null && ((BinaryObject)obj).hasField(fieldName); }
@Override public void examine(IgniteCache cache) { BinaryObject enumBo = (BinaryObject) cache.get(4); assertEquals(EnumType.ENUM_VAL_0.ordinal(), enumBo.enumOrdinal()); BinaryType type = enumBo.type(); assertTrue(type.isEnum()); assertEquals(EnumType.class.getName(), type.typeName()); Collection<BinaryObject> enumVals = type.enumValues(); assertEquals(2, enumVals.size()); int i = 0; for (BinaryObject bo : enumVals) { assertEquals(i, bo.enumOrdinal()); assertEquals("ENUM_VAL_" + (i++), bo.enumName()); } } };
/** {@inheritDoc} */ @Override protected void checkMap(Map<Object, Object> map, int... idxs) { assert map != null; assert idxs != null; assertEquals(idxs.length, map.size()); for (int idx : idxs) { Object val = map.get(binary(new Key(idx))); assertTrue(String.valueOf(val), val instanceof BinaryObject); BinaryObject po = (BinaryObject)val; assertEquals(expectedTypeName(Value.class.getName()), po.type().typeName()); assertEquals(new Integer(idx), po.field("idx")); } }
assertEquals(obj.b, (byte)po.field("b")); assertEquals(obj.s, (short)po.field("s")); assertEquals(obj.i, (int)po.field("i")); assertEquals(obj.l, (long)po.field("l")); assertEquals(obj.f, (float)po.field("f"), 0); assertEquals(obj.d, (double)po.field("d"), 0); assertEquals(obj.c, (char)po.field("c")); assertEquals(obj.bool, (boolean)po.field("bool")); assertEquals(obj.str, po.field("str")); assertEquals(obj.uuid, po.field("uuid")); assertEquals(obj.date, po.field("date")); assertEquals(Date.class, obj.date.getClass()); assertEquals(obj.ts, po.field("ts")); assertArrayEquals(obj.bArr, (byte[])po.field("bArr")); assertArrayEquals(obj.sArr, (short[])po.field("sArr")); assertArrayEquals(obj.iArr, (int[])po.field("iArr")); assertArrayEquals(obj.lArr, (long[])po.field("lArr")); assertArrayEquals(obj.fArr, (float[])po.field("fArr"), 0); assertArrayEquals(obj.dArr, (double[])po.field("dArr"), 0); assertArrayEquals(obj.cArr, (char[])po.field("cArr")); assertBooleanArrayEquals(obj.boolArr, (boolean[])po.field("boolArr")); assertArrayEquals(obj.strArr, (String[])po.field("strArr")); assertArrayEquals(obj.uuidArr, (UUID[])po.field("uuidArr")); assertArrayEquals(obj.dateArr, (Date[])po.field("dateArr")); assertArrayEquals(obj.objArr, (Object[])po.field("objArr")); assertEquals(obj.col, po.field("col")); assertEquals(obj.map, po.field("map")); assertEquals(new Integer(obj.enumVal.ordinal()), new Integer(((BinaryObject)po.field("enumVal")).enumOrdinal())); assertArrayEquals(ordinals(obj.enumArr), ordinals((BinaryObject[])po.field("enumArr")));
/** {@inheritDoc} */ @Override public Object affinityKey(Object key) { if (key instanceof MapperTestKey1) return ((MapperTestKey1)key).p2; else if (key instanceof BinaryObject) ((BinaryObject) key).field("p2"); return key; }
/** * @throws Exception If failed. */ @Test public void testObjectField() throws Exception { BinaryObjectBuilder builder = builder("Class"); builder.setField("objectField", new Value(1)); BinaryObject po = builder.build(); assertEquals(expectedHashCode("Class"), po.type().typeId()); assertEquals(BinaryArrayIdentityResolver.instance().hashCode(po), po.hashCode()); assertEquals(1, po.<BinaryObject>field("objectField").<Value>deserialize().i); }
/** * @throws Exception If failed. */ @Test public void testWriteReplacePrivate() throws Exception { BinaryMarshaller marsh = binaryMarshaller(Collections.singleton( new BinaryTypeConfiguration(TestObject.class.getName()) )); TestObject obj = new TestObject(); BinaryObject po = marshal(obj, marsh); assertEquals(obj, po.deserialize()); assertEquals(obj.val, ((BinaryObject)po.field("val")).deserialize()); }
/** * Checks that externalizable value is correctly serialized/deserialized. * * @throws Exception If failed. */ @Test public void testBuilderExternalizable() throws Exception { BinaryObjectBuilder builder = newWrapper("TestType"); final TestObjectExternalizable exp = new TestObjectExternalizable("test"); final TestObjectExternalizable[] expArr = new TestObjectExternalizable[]{ new TestObjectExternalizable("test1"), new TestObjectExternalizable("test2")}; BinaryObject extObj = builder.setField("extVal", exp).setField("extArr", expArr).build(); assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr")); builder = extObj.toBuilder(); extObj = builder.setField("intVal", 10).build(); assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr")); assertEquals(Integer.valueOf(10), extObj.field("intVal")); builder = extObj.toBuilder(); extObj = builder.setField("strVal", "some string").build(); assertEquals(exp, extObj.field("extVal")); Assert.assertArrayEquals(expArr, (Object[])extObj.field("extArr")); assertEquals(Integer.valueOf(10), extObj.field("intVal")); assertEquals("some string", extObj.field("strVal")); }
/** * @throws Exception If failed. */ @Test public void testBuildAndDeserialize() throws Exception { BinaryObjectBuilder builder = builder(Value.class.getName()); builder.setField("i", 1); BinaryObject bo = builder.build(); assertEquals(expectedHashCode(Value.class.getName()), bo.type().typeId()); assertEquals(BinaryArrayIdentityResolver.instance().hashCode(bo), bo.hashCode()); assertEquals(1, bo.<Value>deserialize().i); }
/** * Validate single value. * * @param obj Binary value. * @param val Expected value. */ private void validate(BinaryObject obj, DeclaredBodyEnum val) { assertTrue(obj.type().isEnum()); assertEquals(node1.binary().typeId(DeclaredBodyEnum.class.getName()), obj.type().typeId()); assertEquals(node2.binary().typeId(DeclaredBodyEnum.class.getName()), obj.type().typeId()); assertEquals(val.ordinal(), obj.enumOrdinal()); }
/** * @throws Exception If failed. */ @Test public void testBinaryObject() throws Exception { BinaryMarshaller marsh = binaryMarshaller(Arrays.asList(new BinaryTypeConfiguration(SimpleObject.class.getName()))); SimpleObject obj = simpleObject(); BinaryObject po = marshal(obj, marsh); BinaryObject po0 = marshalUnmarshal(po, marsh); assertTrue(po.hasField("b")); assertTrue(po.hasField("s")); assertTrue(po.hasField("i")); assertTrue(po.hasField("l")); assertTrue(po.hasField("f")); assertTrue(po.hasField("d")); assertTrue(po.hasField("c")); assertTrue(po.hasField("bool")); assertFalse(po.hasField("no_such_field")); assertEquals(obj, po.deserialize()); assertEquals(obj, po0.deserialize()); }
@Override public List<String> call() throws Exception { List<String> names = new ArrayList<>(); IgniteCache<BinaryObject, BinaryObject> personCache = currentIgniteInstance .cache("SQL_PUBLIC_PERSON").withKeepBinary(); IgniteBiPredicate<BinaryObject, BinaryObject> filter = (BinaryObject key, BinaryObject value) -> { return key.hasField("CITY_ID") && key.<Long>field("CITY_ID") == cityId; }; ScanQuery<BinaryObject, BinaryObject> query = new ScanQuery<>(filter); try (QueryCursor<Entry<BinaryObject, BinaryObject>> cursor = personCache.query(query)) { Iterator<Entry<BinaryObject, BinaryObject>> itr = cursor.iterator(); while (itr.hasNext()) { Entry<BinaryObject, BinaryObject> cache = itr.next(); names.add(cache.getValue().<String>field("NAME")); } } return names; } }).forEach(System.out::println);
/** {@inheritDoc} */ @Override public boolean matchType(CacheObject val) { if (val instanceof BinaryObject) return ((BinaryObject)val).type().typeId() == typeId; // Value type name can be manually set in QueryEntity to any random value, // also for some reason our conversion from setIndexedTypes sets a full class name // instead of a simple name there, thus we can have a typeId mismatch. // Also, if the type is not in binary format, we always must have it's class available. return val.value(coCtx, false).getClass() == valCls; }
/** * {@inheritDoc} */ @Override public Object process(MutableEntry<String, BinaryObject> mutableEntry, Object... objects) throws EntryProcessorException { BinaryObjectBuilder bob = mutableEntry.getValue().toBuilder(); for (int i = 0; i < flds.length; ++i) { bob.setField(flds[i], vals[i]); } mutableEntry.setValue(bob.build()); return null; } }
/** * @param enumArr Enum array. * @return Ordinals. */ private <T extends Enum<?>> Integer[] ordinals(BinaryObject[] enumArr) { Integer[] ords = new Integer[enumArr.length]; for (int i = 0; i < enumArr.length; i++) ords[i] = enumArr[i].enumOrdinal(); return ords; }
assertEquals(EnumType.ONE.ordinal(), values[0].enumOrdinal()); assertEquals(EnumType.TWO.ordinal(), values[1].enumOrdinal()); assertEquals(EnumType.ONE.name(), values[0].enumName()); assertEquals(EnumType.TWO.name(), values[1].enumName());
/** * @throws Exception If failed. */ @Test public void testUuidArrayField() throws Exception { BinaryObjectBuilder builder = builder("Class"); UUID[] arr = new UUID[] {UUID.randomUUID(), UUID.randomUUID()}; builder.setField("uuidArrayField", arr); BinaryObject po = builder.build(); assertEquals(expectedHashCode("Class"), po.type().typeId()); assertEquals(BinaryArrayIdentityResolver.instance().hashCode(po), po.hashCode()); assertTrue(Arrays.equals(arr, po.<UUID[]>field("uuidArrayField"))); }
assertEquals(obj, po.deserialize()); assertEquals(obj.b, (byte)po.field("b")); assertEquals(obj.s, (short)po.field("s")); assertEquals(obj.i, (int)po.field("i")); assertEquals(obj.l, (long)po.field("l")); assertEquals(obj.f, (float)po.field("f"), 0); assertEquals(obj.d, (double)po.field("d"), 0); assertEquals(obj.c, (char)po.field("c")); assertEquals(obj.bool, (boolean)po.field("bool")); assertEquals(obj.str, po.field("str")); assertEquals(obj.uuid, po.field("uuid")); assertEquals(obj.date, po.field("date")); assertEquals(Date.class, obj.date.getClass()); assertEquals(obj.ts, po.field("ts")); assertArrayEquals(obj.bArr, (byte[])po.field("bArr")); assertArrayEquals(obj.sArr, (short[])po.field("sArr")); assertArrayEquals(obj.iArr, (int[])po.field("iArr")); assertArrayEquals(obj.lArr, (long[])po.field("lArr")); assertArrayEquals(obj.fArr, (float[])po.field("fArr"), 0); assertArrayEquals(obj.dArr, (double[])po.field("dArr"), 0); assertArrayEquals(obj.cArr, (char[])po.field("cArr")); assertBooleanArrayEquals(obj.boolArr, (boolean[])po.field("boolArr")); assertArrayEquals(obj.strArr, (String[])po.field("strArr")); assertArrayEquals(obj.uuidArr, (UUID[])po.field("uuidArr")); assertArrayEquals(obj.dateArr, (Date[])po.field("dateArr")); assertArrayEquals(obj.objArr, (Object[])po.field("objArr")); assertEquals(obj.col, po.field("col")); assertEquals(obj.map, po.field("map"));