[![Build Status](https://travis-ci.org/moznion/MySQL-Explain-Parser.png?branch=master)](https://travis-ci.org/moznion/MySQL-Explain-Parser) [![Coverage Status](https://coveralls.io/repos/moznion/MySQL-Explain-Parser/badge.png?branch=master)](https://coveralls.io/r/moznion/MySQL-Explain-Parser?branch=master)
# NAME

MySQL::Explain::Parser - Parser for result of EXPLAIN of MySQL

# SYNOPSIS

   use utf8;
   use MySQL::Explain::Parser qw/parse/;

   my $explain = <<'...';
   +----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
   | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |
   +----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
   |  1 | PRIMARY     | t1    | index | NULL          | PRIMARY | 4       | NULL | 4    | 100.00   |             |
   |  2 | SUBQUERY    | t2    | index | a             | a       | 5       | NULL | 3    | 100.00   | Using index |
   +----+-------------+-------+-------+---------------+---------+---------+------+------+----------+-------------+
   ...

   my $parsed = parse($explain);
   # =>
   #    [
   #        {
   #            'id'            => '1',
   #            'select_type'   => 'PRIMARY',
   #            'table'         => 't1',
   #            'type'          => 'index',
   #            'possible_keys' => undef,
   #            'key'           => 'PRIMARY',
   #            'key_len'       => '4',
   #            'ref'           => undef
   #            'rows'          => '4',
   #            'filtered'      => '100.00',
   #            'Extra'         => '',
   #        },
   #        {
   #            'id'            => '2',
   #            'select_type'   => 'SUBQUERY',
   #            'table'         => 't2',
   #            'type'          => 'index',
   #            'possible_keys' => 'a',
   #            'key'           => 'a',
   #            'key_len'       => '5',
   #            'ref'           => undef
   #            'rows'          => '3',
   #            'filtered'      => '100.00',
   #            'Extra'         => 'Using index',
   #        }
   #    ]

# DESCRIPTION

MySQL::Explain::Parser is the parser for result of EXPLAIN of MySQL.

This module provides `parse()` and `parse_vertical()` function.
These function receive the result of EXPLAIN or EXPLAIN EXTENDED, and return the parsed result as array reference that contains hash reference.

This module treat SQL's `NULL` as Perl's `undef`.

Please refer to the following pages to get information about format of EXPLAIN;

- [http://dev.mysql.com/doc/en/explain-output.html](http://dev.mysql.com/doc/en/explain-output.html)
- [http://dev.mysql.com/doc/en/explain-extended.html](http://dev.mysql.com/doc/en/explain-extended.html)

# FUNCTIONS

- `parse($explain : Str)`

   Returns the parsed result of EXPLAIN as ArrayRef\[HashRef\]. This function can be exported.

- `parse_vertical($explain : Str)`

   Returns the parsed result of EXPLAIN which is formatted vertical as ArrayRef\[HashRef\]. This function can be exported.

   e.g.

       use utf8;
       use MySQL::Explain::Parser qw/parse_vertical/;

       my $explain = <<'...';
       *************************** 1. row ***************************
                  id: 1
         select_type: PRIMARY
               table: t1
                type: index
       possible_keys: NULL
                 key: PRIMARY
             key_len: 4
                 ref: NULL
                rows: 4
            filtered: 100.00
               Extra:
       *************************** 2. row ***************************
                  id: 2
         select_type: SUBQUERY
               table: t2
                type: index
       possible_keys: a
                 key: a
             key_len: 5
                 ref: NULL
                rows: 3
            filtered: 100.00
               Extra: Using index
       ...

       my $parsed = parse_vertical($explain);

# LICENSE

Copyright (C) moznion.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# AUTHOR

moznion <[email protected]>