Skip to content

Commit

Permalink
Merge pull request #28 from jcookems/fix213
Browse files Browse the repository at this point in the history
Fix213
  • Loading branch information
jcookems committed Apr 4, 2012
2 parents ab4f701 + c18b9d3 commit d59baba
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Enumeration;
import java.util.Formatter;
import java.util.List;
import java.util.UUID;

import javax.activation.DataSource;
import javax.inject.Inject;
Expand Down Expand Up @@ -205,9 +208,51 @@ private void buildFilterExpression(Filter filter, StringBuilder sb) {
sb.append(((LitteralFilter) filter).getLitteral());
}
else if (filter instanceof ConstantFilter) {
sb.append("'");
sb.append(((ConstantFilter) filter).getValue());
sb.append("'");
Object value = ((ConstantFilter) filter).getValue();
if (value == null) {
sb.append("null");
}
else if (value.getClass() == Long.class) {
sb.append(value);
sb.append("L");
}
else if (value.getClass() == Date.class) {
ISO8601DateConverter dateConverter = new ISO8601DateConverter();
sb.append("datetime'");
sb.append(dateConverter.format((Date) value));
sb.append("'");
}
else if (value.getClass() == UUID.class) {
sb.append("(guid'");
sb.append(value);
sb.append("')");
}
else if (value.getClass() == String.class) {
sb.append("'");
sb.append(((String) value).replace("'", "''"));
sb.append("'");
}
else if (value.getClass() == byte[].class) {
sb.append("X'");
byte[] byteArray = (byte[]) value;
Formatter formatter = new Formatter(sb);
for (byte b : byteArray) {
formatter.format("%02x", b);
}
sb.append("'");
}
else if (value.getClass() == Byte[].class) {
sb.append("X'");
Byte[] byteArray = (Byte[]) value;
Formatter formatter = new Formatter(sb);
for (Byte b : byteArray) {
formatter.format("%02x", b);
}
sb.append("'");
}
else {
sb.append(value);
}
}
else if (filter instanceof UnaryFilter) {
sb.append(((UnaryFilter) filter).getOperator());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -610,13 +610,16 @@ public void queryEntitiesWithFilterWorks() throws Exception {
TableContract service = TableService.create(config);
String table = TEST_TABLE_5;
int numberOfEntries = 5;
Entity[] entities = new Entity[numberOfEntries];
for (int i = 0; i < numberOfEntries; i++) {
Entity entity = new Entity().setPartitionKey("001").setRowKey("queryEntitiesWithFilterWorks-" + i)
.setProperty("test", EdmType.BOOLEAN, true).setProperty("test2", EdmType.STRING, "value")
.setProperty("test3", EdmType.INT32, 3).setProperty("test4", EdmType.INT64, 12345678901L)
.setProperty("test5", EdmType.DATETIME, new Date());

service.insertEntity(table, entity);
entities[i] = new Entity().setPartitionKey("001").setRowKey("queryEntitiesWithFilterWorks-" + i)
.setProperty("test", EdmType.BOOLEAN, (i % 2 == 0))
.setProperty("test2", EdmType.STRING, "'value'" + i).setProperty("test3", EdmType.INT32, i)
.setProperty("test4", EdmType.INT64, 12345678901L + i)
.setProperty("test5", EdmType.DATETIME, new Date(i * 1000))
.setProperty("test6", EdmType.GUID, UUID.randomUUID());

service.insertEntity(table, entities[i]);
}

{
Expand All @@ -641,6 +644,63 @@ public void queryEntitiesWithFilterWorks() throws Exception {
assertEquals(1, result.getEntities().size());
assertEquals("queryEntitiesWithFilterWorks-3", result.getEntities().get(0).getRowKey());
}

{
// Act
QueryEntitiesResult result = service.queryEntities(
table,
new QueryEntitiesOptions().setQuery(new Query().setFilter(Filter.eq(Filter.litteral("test"),
Filter.constant(true)))));

// Assert
assertNotNull(result);
assertEquals(3, result.getEntities().size());
}

{
// Act
QueryEntitiesResult result = service.queryEntities(table, new QueryEntitiesOptions().setQuery(new Query()
.setFilter(Filter.eq(Filter.litteral("test2"), Filter.constant("'value'3")))));

// Assert
assertNotNull(result);
assertEquals(1, result.getEntities().size());
assertEquals("queryEntitiesWithFilterWorks-3", result.getEntities().get(0).getRowKey());
}

{
// Act
QueryEntitiesResult result = service.queryEntities(table, new QueryEntitiesOptions().setQuery(new Query()
.setFilter(Filter.eq(Filter.litteral("test4"), Filter.constant(12345678903L)))));

// Assert
assertNotNull(result);
assertEquals(1, result.getEntities().size());
assertEquals("queryEntitiesWithFilterWorks-2", result.getEntities().get(0).getRowKey());
}

{
// Act
QueryEntitiesResult result = service.queryEntities(table, new QueryEntitiesOptions().setQuery(new Query()
.setFilter(Filter.eq(Filter.litteral("test5"), Filter.constant(new Date(3000))))));

// Assert
assertNotNull(result);
assertEquals(1, result.getEntities().size());
assertEquals("queryEntitiesWithFilterWorks-3", result.getEntities().get(0).getRowKey());
}

{
// Act
QueryEntitiesResult result = service.queryEntities(table, new QueryEntitiesOptions().setQuery(new Query()
.setFilter(Filter.eq(Filter.litteral("test6"),
Filter.constant(entities[3].getPropertyValue("test6"))))));

// Assert
assertNotNull(result);
assertEquals(1, result.getEntities().size());
assertEquals("queryEntitiesWithFilterWorks-3", result.getEntities().get(0).getRowKey());
}
}

@Test
Expand Down

0 comments on commit d59baba

Please sign in to comment.