Whinstone use jkniv-sqlegance to handle the query language for your database. The philosophy behind jkniv-whinstone it’s keeping the java code simple, without SQL manipulation, all SQL is handler by XML files.
Into jkniv-whinstone-couchdb there are queries that are built-in, or else, you don’t need write them:
Example to create CouchDb View that emit a list of values for nationalities:
<package name="_design/stored">
<select id="map#natio-combo">
<description>generate unique values of nationality</description>
function (doc) {
if(doc.nationality) {
emit(doc.nationality, 1);
}
}
</select>
<select id="reduce#natio-combo">
<description>Count total of nationalities</description>
function(keys, values) {
return sum(values);
}
</select>
</package>
Result of CouchDb view http://localhost:5984/my-db/_design/stored/_view/natio-combo?group=true
{
"rows": [
{
"key": "BR", "value": 1
},
{
"key": "CZ", "value": 1
},
{
"key": "DE", "value": 3
},
{
"key": "DZ", "value": 1
},
{
"key": "GB", "value": 1
}
]
}
Write a select query with type STORED to execute it:
<select id="docs/_view/natio-combo" type="STORED"/>
Java code to retrieve the view data using the group attribute from CouchDb:
Queryable q = QueryFactory.of("docs/_view/natio-combo", "group", "true");
List<Map> list = repositoryDb.list(q);
or write a POJO with key and value attributes to retrieve a typed object.
Queryable q = QueryFactory.of("docs/_view/natio-combo", Combo.class, "group", "true");
List<Combo> list = repositoryDb.list(q);
If you want retrieve the default JSON data from CouchDb you can use the CouchDbResult interface as return of your query:
<select id="authors-deutsch" returnType="net.sf.jkniv.whinstone.couchdb.CouchDbResult">
<description>Select all books written by a german</description>
{
"selector": {"nationality": "DE" }
}
</select>
Java code get the result:
Queryable query = QueryFactory.of("authors-deutsch");
CouchDbResult answer = repositoryDb.get(query);
Interface that represents the CouchDb data, this interface was normalized to represents the data from _find and _view
public interface CouchDbResult {
Long getTotalRows();
Long getOffset();
List<?> getRows();
String getBookmark();
String getWarning();
ExecutionStats getExecutionStats();
}