项目作者: altenwald

项目描述 :
SQL Parsers
高级语言: Erlang
项目地址: git://github.com/altenwald/sqlparser.git
创建时间: 2017-04-28T14:27:32Z
项目社区:https://github.com/altenwald/sqlparser

开源协议:GNU Lesser General Public License v2.1

下载


SQL Parser

Build Status
Codecov
License: LGPL 2.1
Hex

SQL Parsers let you to parse SQL strings to generic SQL records.

Usage

If you want to use, only add this in rebar.config using rebar3:

  1. {deps, [
  2. {sqlparser, "0.3.1"}
  3. ]}.

The way to use it in the code:

  1. -include_lib("sqlparser/include/sqlparser.hrl").
  2. parsing(SQL) ->
  3. mysql_parser:parse(SQL).

You can use two different parsers at this moment: mysql_parser and sql92_parser. The second one was included from sqlapi. Both are intended to do the same but mysql_parser is more complete and less prone to fail and sql92_parser is faster (a lot more):

  1. 1> CompareNew = fun(Q) -> timer:tc(fun() -> sql92_parser:parse(Q) end) end.
  2. 2> CompareLegacy = fun(Q) -> timer:tc(fun() -> mysql_parser:parse(Q) end) end.
  3. 3> CompareNew("SELECT name, surname, nickname FROM users WHERE country = 'Spain'").
  4. {63,
  5. {select,[{key,<<"name">>,<<"name">>,undefined},
  6. {key,<<"surname">>,<<"surname">>,undefined},
  7. {key,<<"nickname">>,<<"nickname">>,undefined}],
  8. [{table,<<"users">>,<<"users">>}],
  9. {condition,eq,
  10. {key,<<"country">>,<<"country">>,undefined},
  11. {value,undefined,<<"Spain">>}},
  12. undefined,undefined,undefined,undefined}}
  13. 4> CompareLegacy("SELECT name, surname, nickname FROM users WHERE country = 'Spain'").
  14. {1803,
  15. {select,[{key,<<"name">>,<<"name">>,undefined},
  16. {key,<<"surname">>,<<"surname">>,undefined},
  17. {key,<<"nickname">>,<<"nickname">>,undefined}],
  18. [{table,<<"users">>,<<"users">>}],
  19. {condition,eq,
  20. {key,<<"country">>,<<"country">>,undefined},
  21. {value,undefined,<<"Spain">>}},
  22. undefined,undefined,undefined,undefined}}

For the same query mysql_parser takes 1803 microseconds (or 1,8 ms) and sql92 takes 63 microseconds (or 0,06 ms).

Enjoy!