Skip to content

Instantly share code, notes, and snippets.

@stuartcarnie
Last active May 17, 2017 00:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stuartcarnie/82b04f27b454c5689bff59a8b3029776 to your computer and use it in GitHub Desktop.
Save stuartcarnie/82b04f27b454c5689bff59a8b3029776 to your computer and use it in GitHub Desktop.
EBNF for InfluxQL
// queries
query ::= statement ( ";" statement )*
statement ::= alter_retention_policy_stmt |
create_continuous_query_stmt |
create_database_stmt |
create_retention_policy_stmt |
create_subscription_stmt |
create_user_stmt |
delete_stmt |
drop_continuous_query_stmt |
drop_database_stmt |
drop_measurement_stmt |
drop_retention_policy_stmt |
drop_series_stmt |
drop_shard_stmt |
drop_subscription_stmt |
drop_user_stmt |
grant_stmt |
kill_query_statement |
show_continuous_queries_stmt |
show_databases_stmt |
show_field_keys_stmt |
show_grants_stmt |
show_measurements_stmt |
show_queries_stmt |
show_retention_policies |
show_series_stmt |
show_shard_groups_stmt |
show_shards_stmt |
show_subscriptions_stmt|
show_tag_keys_stmt |
show_tag_values_stmt |
show_users_stmt |
revoke_stmt |
select_stmt
// characters
newline ::= #x0A
unicode_char ::= /* an arbitrary Unicode code point except newline */
// letters and digits
letter ::= ascii_letter | "_"
ascii_letter ::= [A-Za-z]
digit ::= [0-9]
// identifiers
identifier ::= unquoted_identifier | quoted_identifier
unquoted_identifier ::= letter ( letter | digit )*
quoted_identifier ::= '"' unicode_char unicode_char* '"'
// literals
int_lit ::= ( "+" | "-" )? [1-9] digit?
float_lit ::= ( "+" | "-" )? ( "." digit digit* | digit digit* "." digit* )
string_lit ::= "'" unicode_char* "'"
// durations
duration_lit ::= int_lit duration_unit
duration_unit ::= "u" | "µ" | "ms" | "s" | "m" | "h" | "d" | "w"
// dates and times
time_lit ::= "2006-01-02 15:04:05.999999" | "2006-01-02"
// booleans
bool_lit ::= TRUE | FALSE
// regular expressions
regex_lit ::= "/" unicode_char* "/"
// statements
alter_retention_policy_stmt ::= "ALTER RETENTION POLICY" policy_name on_clause
retention_policy_option
retention_policy_option?
retention_policy_option?
retention_policy_option?
create_continuous_query_stmt ::= "CREATE CONTINUOUS QUERY" query_name on_clause
( "RESAMPLE" resample_opts )?
"BEGIN" select_stmt "END"
create_database_stmt ::= 'CREATE DATABASE' db_name
( 'WITH' ( ( retention_policy_duration? retention_policy_replication )? retention_policy_shard_group_duration )? retention_policy_name )?
create_retention_policy_stmt ::= "CREATE RETENTION POLICY" policy_name on_clause
retention_policy_duration
retention_policy_replication
retention_policy_shard_group_duration?
"DEFAULT"?
query_name ::= identifier
resample_opts ::= (every_stmt for_stmt | every_stmt | for_stmt)
every_stmt ::= "EVERY" duration_lit
for_stmt ::= "FOR" duration_lit
create_subscription_stmt ::= "CREATE SUBSCRIPTION" subscription_name "ON" db_name "." retention_policy "DESTINATIONS" ("ANY"|"ALL") host ( "," host )*
create_user_stmt ::= "CREATE USER" user_name "WITH PASSWORD" password "WITH ALL PRIVILEGES"?
delete_stmt ::= "DELETE" ( from_clause | where_clause | from_clause where_clause )
drop_continuous_query_stmt ::= "DROP CONTINUOUS QUERY" query_name on_clause
drop_database_stmt ::= "DROP DATABASE" db_name
drop_measurement_stmt ::= "DROP MEASUREMENT" measurement
drop_retention_policy_stmt ::= "DROP RETENTION POLICY" policy_name on_clause
drop_series_stmt ::= "DROP SERIES" ( from_clause | where_clause | from_clause where_clause )
drop_shard_stmt ::= "DROP SHARD" shard_id
drop_subscription_stmt ::= "DROP SUBSCRIPTION" subscription_name "ON" db_name "." retention_policy
drop_user_stmt ::= "DROP USER" user_name
grant_stmt ::= "GRANT" privilege on_clause? to_clause
kill_query_statement ::= "KILL QUERY" query_id
show_continuous_queries_stmt ::= "SHOW CONTINUOUS QUERIES"
show_databases_stmt ::= "SHOW DATABASES"
show_field_keys_stmt ::= "SHOW FIELD KEYS" from_clause?
show_grants_stmt ::= "SHOW GRANTS FOR" user_name
show_measurements_stmt ::= "SHOW MEASUREMENTS" with_measurement_clause? where_clause? limit_clause? offset_clause?
show_queries_stmt ::= "SHOW QUERIES"
show_retention_policies ::= "SHOW RETENTION POLICIES" on_clause
show_series_stmt ::= "SHOW SERIES" from_clause? where_clause? limit_clause? offset_clause?
show_shard_groups_stmt ::= "SHOW SHARD GROUPS"
show_shards_stmt ::= "SHOW SHARDS"
show_subscriptions_stmt ::= "SHOW SUBSCRIPTIONS"
show_tag_keys_stmt ::= "SHOW TAG KEYS" from_clause? where_clause? group_by_clause? limit_clause? offset_clause?
show_tag_values_stmt ::= "SHOW TAG VALUES" from_clause? with_tag_clause where_clause? group_by_clause? limit_clause? offset_clause?
show_users_stmt ::= "SHOW USERS"
revoke_stmt ::= "REVOKE" privilege on_clause? "FROM" user_name
select_stmt ::= "SELECT" fields from_clause into_clause? where_clause?
group_by_clause? order_by_clause? limit_clause?
offset_clause? slimit_clause? soffset_clause?
timezone_clause?
// clauses
from_clause ::= "FROM" measurements
group_by_clause ::= "GROUP BY" dimensions fill "(" fill_option ")"
into_clause ::= "INTO" ( measurement | back_ref )
limit_clause ::= "LIMIT" int_lit
offset_clause ::= "OFFSET" int_lit
slimit_clause ::= "SLIMIT" int_lit
soffset_clause ::= "SOFFSET" int_lit
timezone_clause ::= tz "(" string_lit ")"
on_clause ::= "ON" db_name
order_by_clause ::= "ORDER BY" sort_fields
to_clause ::= "TO" user_name
where_clause ::= "WHERE" expr
with_measurement_clause ::= "WITH MEASUREMENT" ( "=" measurement | "=~" regex_lit )
with_tag_clause ::= "WITH KEY" ( "=" tag_key | "!=" tag_key | "=~" regex_lit | "IN (" tag_keys ")" )
// expressions
binary_op ::= "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "AND" |
"OR" | "=" | "!=" | "<>" | "<" | "<=" | ">" | ">="
expr ::= unary_expr ( binary_op unary_expr )?
unary_expr ::= "(" expr ")" | var_ref | time_lit | string_lit | int_lit |
float_lit | bool_lit | duration_lit | regex_lit
// other
alias ::= "AS" identifier
back_ref ::= ( policy_name ".:MEASUREMENT" ) | ( db_name "." policy_name? ".:MEASUREMENT" )
db_name ::= identifier
dimension ::= expr
dimensions ::= dimension ( "," dimension )*
field_key ::= identifier
field ::= expr alias?
fields ::= field ( "," field )*
fill_option ::= "null" | "none" | "previous" | "linear" | int_lit | float_lit
host ::= string_lit
measurement ::= measurement_name | ( policy_name "." measurement_name ) | ( db_name "." policy_name? "." measurement_name )
measurements ::= measurement ( "," measurement )*
measurement_name ::= identifier | regex_lit
password ::= string_lit
policy_name ::= identifier
privilege ::= "ALL" "PRIVILEGES"? | "READ" | "WRITE"
query_id ::= int_lit
query_name ::= identifier
retention_policy ::= identifier
retention_policy_option ::= retention_policy_duration | retention_policy_replication | retention_policy_shard_group_duration | "DEFAULT"
retention_policy_duration ::= "DURATION" duration_lit
retention_policy_replication ::= "REPLICATION" int_lit
retention_policy_shard_group_duration ::= "SHARD DURATION" duration_lit
retention_policy_name ::= "NAME" identifier
series_id ::= int_lit
shard_id ::= int_lit
sort_field ::= field_key ( ASC | DESC )?
sort_fields ::= sort_field ( "," sort_field )*
subscription_name ::= identifier
tag_key ::= identifier
tag_keys ::= tag_key ( "," tag_key )*
user_name ::= identifier
var_ref ::= measurement
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment