Understanding Hyperledger Composer Query Language

On , by

One of the key component is the Query language which resembeles SQL language. In this article I’ll go through how we can build queries for your blockchain application.

In current version of Hyperledger Fabric, the LIMIT and SKIP is not supported it is so in Composer too.

The data model#the-data-model

For this example, I’ll consider the following data model as our application’s data model.

enum UserRole {
  o ADMIN
  o MODERATOR
  o USER
}
participant User identified by id {
  o String id
  o String name
  o UserRole role
  o String[] hobbies
  --> Organization organization
}

participant Organization identified by id {
  o String id
  o String name
}

asset Product identified by id {
  o String id
  o String name
  o String description
  o Double quantity
  o DateTime createdAt
  --> Organization owner
}

Queries#queries

Get the users based on role. In order to get the list of users based on their roles, we can use the where filter

query Q1 {
  description: "Select all users based on role"
  statement:
      SELECT org.acme.User
          WHERE (role == "ADMIN")
}

Also you can give the value from paramater as below

query Q1 {
    description: "Select all users based on role"
    statement:
        SELECT org.acme.User
            WHERE (role == _$role)
}

Get users based on organization To get the nodes based on their related or associated files you can use the where with following type

query Q2 {
  description: "Select all users of an organization"
  statement:
      SELECT org.acme.User
          WHERE (organization == "resource:org.acme.Organization#1")
}

Get Products with quantity more than minimal threshold We can use greater than or lesser than operators in integer or double values as follows.

query Q3 {
  description: "Select all products above the minimum quantity"
  statement:
      SELECT org.acme.Product
          WHERE (quantity > _$minimumThreshold)
}

Using AND operator

query Q4 {
  description: "Select all products above the minimum quantity of an organization"
  statement:
      SELECT org.acme.Product
          WHERE ((quantity > _$minimumThreshold) AND (owner == _$organization))
}

Using ORDER BY operator

query Q5 {
  description: "Select all products above the minimum quantity of an organization and order by quantity"
  statement:
      SELECT org.acme.Product
          WHERE ((quantity > _$minimumThreshold) AND (owner == _$organization))
              ORDER BY quantity
}

Using CONTAINS operator

query Q6 {
  description: "Select all users based on givien hobbies"
  statement:
      SELECT org.acme.User
          WHERE (hobbies CONTAINS ['driving', 'swimming']
}

Mostly you can do all the quering with the above mentioned operators, and also I think there will be even more complex queries in the future.


Read More:

Share this article on Twitter or LinkedIn
Previous Blog Post: Blockchain use-cases for Aviation Industry in 2018
Subscribe to Sudo vs Root

Our newsletter rolls out every month. No fluff. Pure content.

Comments and Discussions
Skcript https://www.skcript.com/svr/understanding-hyperledger-composer-query-language/ https://www.skcript.com/svrmedia/heroes/f/hyperledger-query-1.jpg

Connect with Skcript Global

In 72-hours, your business gets a clear blueprint of what we can do for your organization.

Contact us

Follow us on Twitter / LinkedIn / Instagram