/** * Create a key object. We map "table" and (YCSB's) "key" to a major component * of the oracle.kv.Key, and "field" to a minor component. * * @return An oracle.kv.Key object. */ private static Key createKey(String table, String key, String field) { List<String> majorPath = new ArrayList<String>(); majorPath.add(table); majorPath.add(key); if (field == null) { return Key.createKey(majorPath); } return Key.createKey(majorPath, field); }
private static String getFieldFromKey(Key key) { return key.getMinorPath().get(0); }
@Override public Map<String, Object> search(String query, Class<?> parentClass, EntityMetadata parentMetadata, Class<?> childClass, EntityMetadata childMetadata, Object entityId, int start, int count) { String secIndexName = getIndexTableName(childMetadata); String parentIdColumnName = ((AbstractAttribute) parentMetadata.getIdAttribute()).getJPAColumnName(); String childIdColumnName = ((AbstractAttribute) childMetadata.getIdAttribute()).getJPAColumnName(); String id = PropertyAccessorHelper.getString(entityId); List<String> majorComponents = new ArrayList<String>(); majorComponents.add(secIndexName); majorComponents.add(parentIdColumnName); majorComponents.add(id); Key majorKeyToFind = Key.createKey(majorComponents); Iterator<KeyValueVersion> iterator = kvStore.multiGetIterator(Direction.FORWARD, 0, majorKeyToFind, null, null); Map<String, Object> results = new HashMap<String, Object>(); while (iterator.hasNext()) { KeyValueVersion keyValueVersion = iterator.next(); String minorKey = keyValueVersion.getKey().getMinorPath().get(0); PropertyAccessor accessor = PropertyAccessorFactory .getPropertyAccessor(childMetadata.getIdAttribute().getBindableJavaType()); byte[] idByteArr = keyValueVersion.getValue().getValue(); Object keyObj = accessor.fromBytes(childMetadata.getIdAttribute().getBindableJavaType(), idByteArr); results.put(childIdColumnName + "|" + minorKey, keyObj); } return results; }
Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.multiGetIterator(Direction.FORWARD, 0, majorKeyToFind, range, null); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); Key majorKeyToFind = Key.createKey(majorComponents); iterator = kvStore.storeIterator(Direction.UNORDERED, 0, majorKeyToFind, range, null); String minorKey = keyValueVersion.getKey().getMinorPath().get(0);
@Override public void index(Class entityClazz, EntityMetadata m, Map<String, Object> values, Object entityId, final Class parentClazz) { String idColumnName = ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(); Object id = values.get(idColumnName); for (String column : values.keySet()) { Object valueObject = values.get(column); List<String> majorKeyComponents = new ArrayList<String>(); majorKeyComponents.add(getIndexTableName(m)); majorKeyComponents.add(column); majorKeyComponents.add(PropertyAccessorHelper.getString(valueObject)); String minorKey = PropertyAccessorHelper.getString(id); Key key = Key.createKey(majorKeyComponents, minorKey); byte[] valueByteArray = PropertyAccessorHelper.getBytes(id); kvStore.put(key, Value.createValue(valueByteArray)); } }
majorComponents.add(columnName); Key key = Key.createKey(majorComponents); Iterator<KeyValueVersion> iterator = kvStore.storeIterator(Direction.UNORDERED, 0, key, null, null);