DATACOUCH-276 Dont escape the order by property as a whole

Escape each nested level and concatenate with a period

Original pull request: #141.
This commit is contained in:
Subhashni Balakrishnan
2017-04-10 07:23:27 -07:00
parent 620586af3b
commit 03bb6372c7
2 changed files with 20 additions and 1 deletions

View File

@@ -197,7 +197,16 @@ public class N1qlUtils {
for (Sort.Order order : sort) {
String orderProperty = order.getProperty();
//FIXME the order property should be converted to its corresponding fieldName
Expression orderFieldName = i(orderProperty);
String[] orderPropertyParts = orderProperty.split("\\.");
StringBuilder sb = new StringBuilder();
for (String part:orderPropertyParts) {
if (sb.length() != 0) {
sb.append(".");
}
sb.append(i(part).toString());
}
Expression orderFieldName = x(sb.toString());
if (order.isIgnoreCase()) {
orderFieldName = lower(TypeFunctions.toString(orderFieldName));
}

View File

@@ -147,4 +147,14 @@ public class N1qlUtilsTest {
assertEquals(expected, real);
}
@Test
public void testOrderByWithNestedField() throws Exception {
CouchbaseConverter converter = mock(CouchbaseConverter.class);
com.couchbase.client.java.query.dsl.Sort[] realSort =
N1qlUtils.createSort(new Sort("party.attendees"), converter);
assertEquals("`party`.`attendees` ASC", realSort[0].toString());
verifyZeroInteractions(converter);
}
}