The Hooks Query Language

The Hooks Query Language is a simplified SQL-like language designed to retrieve items and apply filters over Hooks datasources.

Contents

Selecting fields

Currently HQL only supports selecting all available item fields, and so, every query MUST begin with SELECT *. Otherwise a parse error will be returned.

The FROM clause

In HQL the FROM clause references one datasource. This may also include a required parameter in form of a string or an entity subquery.

For example, SoccerGames datasource does not require parameter, so in order to fetch all current items the query would be like:

SELECT * FROM SoccerGames

However, if the datasource requires a string parameter as input, the statement would be:

SELECT * FROM RSS('theverge.com')

Alternatively, if the datasource requires an entity as mandatory parameter, this should be specified by including entity subquery WHERE conditions within parenthesis.

SELECT * FROM WeatherByCity(name = 'Orihuela')

Note that HQL only supports fetching items from a single datasource, so if more than one is included in the FROM clause a parse error will be returned.

The WHERE clause

The where clause allows you to refine the list of items returned from a datasouce.

SELECT * FROM SoccerGames WHERE home_team.team_name = 'Real Madrid'

This returns all items contained in SoccerGames where home team is Real Madrid.

Expressions

Expressions used in the where clause include the following:

  • binary comparison operators: =, >=, <=, <>, !=, like
  • logical operations AND, OR
  • Parentheses ( ) that indicates grouping
  • IN, NOT INT, BETWEEN, NOT BETWEEN, IS NULL, IS NOT NULL

The ORDER and GROUP BY clause

ORDER and GROUP BY clauses and not currently supported in HQL.

HQL examples

The following queries show the power of HQL put in practice, though maybe most of the ones you will write will be much simpler than the following examples.

This example will return all those matches in which Real Madrid played and won.

SELECT * FROM SoccerGames
 WHERE (
        (home_team.team_name = 'Real Madrid' AND home_score > away_score) OR
        (away_team.team_name = 'Real Madrid' AND away_score > home_score)
       )
   AND status = 'FINAL'

Here’s a another one that will return of those items from a parametrized RSS datasource that contains the sentence ‘machine learning’.

SELECT * FROM RSS('theverge.com') WHERE content LIKE '%marchine learning%'