NAME

Hermes - Cluster information interpreter. Extends Hermes::Range

SYNOPSIS

use Hermes;

my $a = Hermes->new( cache => '/database/file' );

$a->load( 'foo{2~9}{??==*=={foo,bar}!!baz}.bar' );

## ... see base class for other methods ...

QUERY

cluster

A cluster query is expressed as a tuple of elements, corresponding to columns of the cache table. See Hermes::DBI::Cache.

Such a query is made when an element is indicated by the select symbol, and the other three are given as query conditions, expressed by a condition symbol followed a range expression. e.g. "{??==*=={foo,bar}!!baz}" may be translated into the following SQL statement,

"SELECT col1 FROM $TABLE WHERE col3 IN ('foo','bar') AND col4!='baz'"

callabck

A callback query is expressed as a callback symbol followed by the callback name, and optionally, followed by a query condition. See Hermes::Call.

e.g. "{%%foo!!bar,baz}" means get all elements returned by callback foo, expect those indexed by bar and baz.

Naturally, '*' in a query condition means 'any', i.e. no condition. And a query expression may be recursive.

SYMBOLS

( in addition to those in the base class )

QUERY

'??' : select
'==' : in
'!!' : not

GRAMMAR

( BNF rules additional to those in the base class )

complex

'{' [ <expr> | <call> | <cluster> ] '}'

complex

<call_sym> <string> <query_cond>

cluster

[ <select_symbol> <query_cond> ** 3 ] |
[ <query_cond> <select_symbol> <query_cond> ** 2 ] |
[ <query_cond> ** 2 <select_symbol> <query_cond> ] |
[ <query_cond> ** 3 <select_symbol> ]

query_cond

<condition_symbol> <expr>