Packages
exosql
0.2.56
0.2.88
0.2.87
0.2.86
0.2.85
0.2.84
0.2.83
0.2.82
0.2.81
0.2.80
0.2.79
0.2.78
0.2.77
0.2.76
0.2.75
0.2.74
0.2.73
0.2.72
0.2.71
0.2.70
0.2.69
0.2.68
0.2.67
0.2.65
0.2.64
0.2.63
0.2.62
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Universal SQL engine for Elixir. This library implements the SQL logic to perform queries on user provided databases using a simple interface based on Foreign Data Wrappers from PostgreSQL.
Current section
Files
Jump to
Current section
Files
src/sql_lexer.xrl
Definitions.
INT = [0-9]+
COMMENT = --.*
MINUS = -
RESERVEDL = (select|where|from|as|inner|cross|left|right|outer|join|on|group|by|order|asc|desc|true|false|not|distinct|limit|offset|all|null|case|if|elif|when|then|else|end|union|with)
RESERVEDU = (SELECT|WHERE|FROM|AS|INNER|CROSS|LEFT|RIGHT|OUTER|JOIN|ON|GROUP|BY|ORDER|ASC|DESC|TRUE|FALSE|NOT|DISTINCT|LIMIT|OFFSET|ALL|NULL|CASE|IF|ELIF|WHEN|THEN|ELSE|END|UNION|WITH)
ID = [_a-zA-Z][_a-zA-Z0-9]*
COMMA = ,
DOT = \.
OP1 = (and|AND)
OP2 = (or|OR)
OP3 = (<|>|<=|>=|==|!=|<>|<|>|=|\|\|)
OP4 = (-|\+)
OP5 = (\*|/|%)
OP6 = (IN|IS|LIKE|ILIKE|CASE|in|is|like|ilike)
SPACE = [\n\t\s]+
OPEN_PAR = \(
CLOSE_PAR = \)
OPEN_SQB = \[
CLOSE_SQB = \]
OPEN_BR = \{
CLOSE_BR = \}
QUOTED_STRING = ("([^"])*"|'([^'])*')
%% "
VAR = \$[_a-zA-Z][_a-zA-Z0-9]*
Rules.
{SPACE} : skip_token.
{COMMENT} : skip_token.
{RESERVEDL} : {token, {list_to_atom(string:to_upper(TokenChars)), TokenLine}}.
{RESERVEDU} : {token, {list_to_atom(TokenChars), TokenLine}}.
{OP1} : {token, {op1, TokenLine, TokenChars}}.
{OP2} : {token, {op2, TokenLine, TokenChars}}.
{OP3} : {token, {op3, TokenLine, TokenChars}}.
{OP4} : {token, {op4, TokenLine, TokenChars}}.
{OP5} : {token, {op5, TokenLine, TokenChars}}.
{OP6} : {token, {op6, TokenLine, TokenChars}}.
{ID} : {token, {id, TokenLine, TokenChars}}.
{COMMA} : {token, {comma, TokenLine, TokenChars}}.
{DOT} : {token, {dot, TokenLine, TokenChars}}.
{OPEN_PAR} : {token, {open_par, TokenLine, TokenChars}}.
{CLOSE_PAR} : {token, {close_par, TokenLine, TokenChars}}.
{OPEN_SQB} : {token, {open_sqb, TokenLine, TokenChars}}.
{CLOSE_SQB} : {token, {close_sqb, TokenLine, TokenChars}}.
{OPEN_BR} : {token, {open_br, TokenLine, TokenChars}}.
{CLOSE_BR} : {token, {close_br, TokenLine, TokenChars}}.
{INT}{DOT}{INT} : {token, {litf, TokenLine, to_number(TokenChars)}}.
{INT} : {token, {litn, TokenLine, to_number(TokenChars)}}.
{MINUS}{INT}{DOT}{INT} : {token, {litf, TokenLine, to_number(TokenChars)}}.
{MINUS}{INT} : {token, {litn, TokenLine, to_number(TokenChars)}}.
{QUOTED_STRING} : {token, {lit, TokenLine, string:substr(TokenChars, 2, string:len(TokenChars)-2)}}.
{VAR} : {token, {var, TokenLine, string:substr(TokenChars, 2, string:len(TokenChars))}}.
Erlang code.
to_number(S) ->
S2 = list_to_binary(S),
'Elixir.ExoSQL.Utils':'to_number!'(S2).