public Status readSubset(String key, Set<String> fields, Map<String, ByteIterator> result) { String whereStr = String.format("RowKey eq '%s'", key); TableQuery<TableServiceEntity> projectionQuery = TableQuery.from( TableServiceEntity.class).where(whereStr).select(fields.toArray(new String[0])); EntityResolver<HashMap<String, ByteIterator>> resolver = new EntityResolver<HashMap<String, ByteIterator>>() { public HashMap<String, ByteIterator> resolve(String partitionkey, String rowKey, Date timeStamp, HashMap<String, EntityProperty> properties, String etag) { HashMap<String, ByteIterator> tmp = new HashMap<String, ByteIterator>(); for (Entry<String, EntityProperty> entry : properties.entrySet()) { String key = entry.getKey(); ByteIterator val = new ByteArrayByteIterator(entry.getValue().getValueAsByteArray()); tmp.put(key, val); } return tmp; } }; try { for (HashMap<String, ByteIterator> tmp : cloudTable.execute(projectionQuery, resolver)) { for (Entry<String, ByteIterator> entry : tmp.entrySet()){ String fieldName = entry.getKey(); ByteIterator fieldVal = entry.getValue(); result.put(fieldName, fieldVal); } } return Status.OK; } catch (Exception e) { return Status.ERROR; } }
private void testTableQueryProjectionWithSpecialCases(CloudTable table) { // Query on String and IntegerPrimitive TableQuery<ComplexEntity> query = TableQuery.from(ComplexEntity.class).select( new String[] { "String", "IntegerPrimitive"}); Iterable<ComplexEntity> iterable = table.execute(query); List<ComplexEntity> entities = new ArrayList<ComplexEntity>(); for (ComplexEntity entity : iterable) { entities.add(entity); } // Verify A has a set value and B and E have class defaults assertEquals(1, entities.size()); ComplexEntity entity = entities.get(0); assertNull(entity.getString()); assertEquals(-1, entity.getIntegerPrimitive()); }
private void testTableWithSelectOnMissingFields(TableRequestOptions options) throws StorageException { TableQuery<DynamicTableEntity> projectionQuery = TableQuery.from(DynamicTableEntity.class).where( "(PartitionKey eq 'javatables_batch_0') and (RowKey eq '000000')"); // A exists, F does not projectionQuery.select(new String[]{"A", "F"}); ResultSegment<DynamicTableEntity> seg = table.executeSegmented(projectionQuery, null, options, null); assertEquals(1, seg.getResults().size()); DynamicTableEntity ent = seg.getResults().get(0); assertEquals("foo_A", ent.getProperties().get("A").getValueAsString()); assertEquals(null, ent.getProperties().get("F").getValueAsString()); assertEquals(EdmType.STRING, ent.getProperties().get("F").getEdmType()); }
private void testTableQueryWithTake(TableRequestOptions options, boolean usePropertyResolver) throws StorageException { // Create entity to check against Class1 randEnt = TableTestHelper.generateRandomEntity(null); if (usePropertyResolver) { options.setPropertyResolver(randEnt); } final ResultSegment<Class1> result = table.executeSegmented( TableQuery.from(Class1.class).select(new String[] { "A", "C" }).take(25), null, options, null); int count = 0; // Validate results for (Class1 ent : result.getResults()) { count++; assertEquals(ent.getA(), randEnt.getA()); assertEquals(ent.getB(), null); assertEquals(ent.getC(), randEnt.getC()); assertEquals(ent.getD(), null); } assertEquals(count, 25); }
private void testSelectOnlySendsReservedColumnsOnce(TableRequestOptions options, boolean usePropertyResolver) { // Create entity to use property resolver Class1 randEnt = TableTestHelper.generateRandomEntity(null); if (usePropertyResolver) { options.setPropertyResolver(randEnt); } OperationContext opContext = new OperationContext(); opContext.getResponseReceivedEventHandler().addListener(new StorageEvent<ResponseReceivedEvent>() { @Override public void eventOccurred(ResponseReceivedEvent eventArg) { HttpURLConnection conn = (HttpURLConnection) eventArg.getConnectionObject(); String urlString = conn.getURL().toString(); assertEquals(urlString.indexOf("PartitionKey"), urlString.lastIndexOf("PartitionKey")); assertEquals(urlString.indexOf("RowKey"), urlString.lastIndexOf("RowKey")); assertEquals(urlString.indexOf("Timestamp"), urlString.lastIndexOf("Timestamp")); } }); final Iterable<Class1> result = table.execute( TableQuery.from(Class1.class).select(new String[] { "PartitionKey", "RowKey", "Timestamp" }), options, opContext); // Validate results for (Class1 ent : result) { assertEquals(ent.getA(), null); assertEquals(ent.getB(), null); assertEquals(ent.getC(), null); assertEquals(ent.getD(), null); } }
private void testTableQueryWithProjection(TableRequestOptions options, boolean usePropertyResolver) { // Create entity to check against Class1 randEnt = TableTestHelper.generateRandomEntity(null); if (usePropertyResolver) { options.setPropertyResolver(randEnt); } final Iterable<Class1> result = table.execute(TableQuery.from(Class1.class).select(new String[] { "A", "C" }), options, null); // Validate results for (Class1 ent : result) { // Validate core properties were sent. assertNotNull(ent.getPartitionKey()); assertNotNull(ent.getRowKey()); assertNotNull(ent.getTimestamp()); // Validate correct column returned. assertEquals(ent.getA(), randEnt.getA()); assertEquals(ent.getB(), null); assertEquals(ent.getC(), randEnt.getC()); assertEquals(ent.getD(), null); } }