jsonGroupObject function
Returns a JSON object consisting of the keys and values from the provided
values
map.
As an example, consider this example schema to store emails:
class Emails extends Table {
TextColumn get subject => text()();
TextColumn get body => text()();
IntColumn get folder => integer().references(Folders, #id)();
}
class Folders extends Table {
IntColumn get id => integer()();
TextColumn get title => text()();
}
Now, say you wanted to write a query finding the subject and body of every email in every folder. The resulting value might look like this:
{
"Group array example": "Hey there, aren't you aware that email is dead?",
"Re: Group array example": "It's just an example okay?"
}
Again, the starting point is formed by a query joining the tables:
final query = select(folders)
.join([innerJoin(emails, emails.folder.equalsExp(folders.id))]);
Now, a group by clause and jsonGroupObject can be used to collapse all
joined rows from the emails
table into a single value:
final subjectAndBody = jsonGroupObject({emails.subject: emails.body});
query
..groupBy([folders.id])
..addColumns([subjectAndBody]);
Running this query would return one row for each folder, where
row.read(subjectAndBody)
is a textual JSON representation of a
Map<String, String>
.
Implementation
Expression<String> jsonGroupObject(Map<Expression<String>, Expression> values) {
return FunctionCallExpression('json_group_object', _groupObjectArgs(values));
}