Skip to content

tinrab/restql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RestQL

Build Status

Usage

Parsing

AstNode result = RestQL.parse("print('hello, world')&life=42&nope=1!:2");
result.accept(new DumpVisitor());

Result AST:

Query
  Sequence
    Call
      Identifier('print')
      Sequence
        Literal(STRING, hello, world)
  Assignment
    Sequence
      Identifier('life')
    Sequence
      Literal(NUMBER, 42.0)
  Assignment
    Sequence
      Identifier('nope')
    Sequence
      Binary(NOT_EQUAL)
        Literal(NUMBER, 1.0)
        Literal(NUMBER, 2.0)

Use custom visitor, which implements Visitor interface, to traverse an AST. For example, a visitor can be used to generate a SQL statement.

Executing

Engine e = new Engine();
e.execute("a = 5 & b = 3");
e.execute("user.age = 19");

// prints '3'
System.out.println(e.getVariable("b").numberValue());
// prints '1.0' a.k.a 'true'
System.out.println(e.evaluate("user.age >: 18").numberValue());

Example queries

user.name:'bob%' and user.age >: 18
a = sum(1, 2, 3) & b = avg(a, 2)

Syntax grammar

<query>:
    <empty>
    <assignment>
    <assignment> & <query>

<assignment>:
    <sequence>
    <sequence> = <sequence>

<sequence>:
    <or>
    <or> , <sequence>

<or>:
    <and>
    <and> or <or>

<and>:
    <equality>
    <equality> and <and>

<equality>:
    <relation>
    <relation> <equalityOperator> <equality>

<relation>:
    <unary>
    <unary> <relationOperator> <relation>

<unary>:
    <member>
    ! <member>

<member>:
    <primary>
    <primary> . <member>
    <primary> ( <arguments> )
    <primary> ( <arguments> ) . <member>

<arguments>:
    <empty>
    <sequence>

<primary>:
    ( <sequence> )
    <identifier>
    <number>
    <string>

<equalityOperator>:
    :
    !:

<relationOperator>:
    <
    >
    <:
    :>

About

Query language for REST

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages