Skip to content

bendiy/mql-parser

 
 

Repository files navigation

mql-parser - a JavaScript PEG for MetaSQL

OpenRPT introduced MetaSQL to simplify writing SQL queries for reports.

People frequently clone report definitions because they need to make minor changes to the where clause of the query that drives the report. For example, someone might need two different versions of a report, one that gives data broken down month-to-month and another for data quarter-by-quarter. Sometimes this can be managed by parameterizing the query but often not.

MetaSQL gives tools that allow changing the structure of a query as well as parameterizing values.

For example, here are two version of a simple parameterized query:

select * from history where history_date >= :start; -- standard SQL style
select * from history where history_date >= <? value('start') ?>; -- MetaSQL

This isn't particularly interesting. Sometimes, though, the date should be optional. Here is where MetaSQL becomes useful:

select * from history
<? if exists('start') ?> where history_date >= <? value('start') ?><? endif ?>;

This will give two different queries, depending on whether a parameter named start was passed. Now we no longer need a dummy or default value for "the beginning of time", we just pass the start date if we care.

About

pegjs processor for OpenRPT's MetaSQL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 92.3%
  • Makefile 7.7%