InfluxDB Query Language parser
- Work in progress! Testers and Contributors welcome
- Parser
- Baseline SQL parser
- FROM parser
- TIME math
- Quotes parser
- Cleanup & Tests
- Output
- JSON output
- Elastic DSL output
const parser = require('ifql-parser')();
parser.parse('SELECT sum('load') AS mean_cpu FROM telegraf.autogen.cpu WHERE time > now() - 6h GROUP BY time(3600)');
{ referencedTables: [ 'cpu' ],
createdTables: undefined,
sourceTables: [ 'cpu' ],
operation: 'select',
parsed:
{ type: 'select',
top: undefined,
all_distinct: undefined,
selection:
{ type: 'selection_columns',
columns:
[ { type: 'column',
expression:
{ type: 'function_call',
name: { value: 'sum' },
parameters: [ { type: 'string', string: 'load' } ] },
alias: { type: 'identifier', value: 'mean_cpu' } } ] },
table_exp:
{ type: 'from_table',
from:
{ type: 'from',
table_refs:
[ { type: 'table', table: 'cpu', db: 'telegraf', ret: 'autogen' } ] },
where:
{ type: 'where',
condition:
{ type: 'operator',
operator: '>',
left: { type: 'identifier', value: 'time' },
right:
{ type: 'operator',
operator: '-',
left:
{ type: 'function_call',
name:
{ value: 'now',
from_timestamp: 1545482191716,
to_timestamp: 1545482213317 },
parameters: [] },
right:
{ type: 'decimal',
value: 6,
range: { type: 'data_type', data_type: 'hour', size: undefined } } } } },
groupby:
{ type: 'group_by',
columns:
{ type: 'selection_columns',
columns:
[ { type: 'column',
expression:
{ type: 'function_call',
name: { value: 'time' },
parameters: [ { type: 'decimal', value: 3600 } ] } } ] } },
having: undefined,
order: undefined } },
joins: [],
returnColumns: [ { name: 'mean_cpu', sourceColumns: [] } ] }
- Parser built using the nearley ToolKit
- Grammar baseline forked from js-sql-parse