File Coverage

blib/lib/DBIx/MyParsePP.pm
Criterion Covered Total %
statement 52 53 98.1
branch 3 4 75.0
condition n/a
subroutine 14 14 100.0
pod 0 3 0.0
total 69 74 93.2


line stmt bran cond sub pod time code
1             package DBIx::MyParsePP;
2 8     8   439870 use strict;
  8         62  
  8         213  
3              
4 8     8   3427 use DBIx::MyParsePP::Lexer;
  8         16  
  8         463  
5 8     8   107320 use DBIx::MyParsePP::Parser;
  8         37  
  8         355  
6 8     8   3827 use DBIx::MyParsePP::Query;
  8         17  
  8         274  
7              
8              
9             our $VERSION = '0.51';
10              
11 8     8   43 use constant MYPARSEPP_YAPP => 0;
  8         15  
  8         353  
12 8     8   35 use constant MYPARSEPP_CHARSET => 1;
  8         15  
  8         320  
13 8     8   34 use constant MYPARSEPP_VERSION => 2;
  8         12  
  8         282  
14 8     8   34 use constant MYPARSEPP_SQL_MODE => 3;
  8         13  
  8         281  
15 8     8   36 use constant MYPARSEPP_CLIENT_CAPABILITIES => 4;
  8         11  
  8         303  
16 8     8   39 use constant MYPARSEPP_STMT_PREPARE_MODE => 5;
  8         11  
  8         2873  
17              
18             my %args = (
19             charset => MYPARSEPP_CHARSET,
20             version => MYPARSEPP_VERSION,
21             sql_mode => MYPARSEPP_SQL_MODE,
22             client_capabilities => MYPARSEPP_CLIENT_CAPABILITIES,
23             stmt_prepare_mode => MYPARSEPP_STMT_PREPARE_MODE
24             );
25              
26             1;
27              
28             sub new {
29 12     12 0 1047 my $class = shift;
30 12         34 my $parser = bless ([], $class );
31              
32 12         46 my $max_arg = (scalar(@_) / 2) - 1;
33              
34 12         41 foreach my $i (0..$max_arg) {
35 3 50       16 if (exists $args{$_[$i * 2]}) {
36 3         14 $parser->[$args{$_[$i * 2]}] = $_[$i * 2 + 1];
37             } else {
38 0         0 warn("Unkown argument '$_[$i * 2]' to DBIx::MyParsePP->new()");
39             }
40             }
41              
42 12         80 my $yapp = DBIx::MyParsePP::Parser->new();
43 12         86 $parser->[MYPARSEPP_YAPP] = $yapp;
44 12         63 return $parser;
45             }
46              
47             sub parse {
48 14     14 0 572 my ($parser, $string) = @_;
49              
50 14         182 my $lexer = DBIx::MyParsePP::Lexer->new(
51             string => $string,
52             charset => $parser->[MYPARSEPP_CHARSET],
53             version => $parser->[MYPARSEPP_VERSION],
54             sql_mode => $parser->[MYPARSEPP_SQL_MODE],
55             client_capabilities => $parser->[MYPARSEPP_CLIENT_CAPABILITIES],
56             stmt_prepare_mode => $parser->[MYPARSEPP_CLIENT_CAPABILITIES]
57             );
58            
59 14         120 my $query = DBIx::MyParsePP::Query->new(
60             lexer => $lexer
61             );
62              
63 14         28 my $yapp = $parser->[MYPARSEPP_YAPP];
64 14     729   154 my $result = $yapp->YYParse( yylex => sub { $lexer->yylex() }, yyerror => sub { $parser->error(@_, $query) } );
  781         15938  
  2         51  
65              
66 14 100       247 if (defined $result) {
67 12         62 $query->setRoot($result->[0]);
68             }
69              
70 14         48 return $query;
71             }
72              
73             sub error {
74 2     2 0 6 my ($parser, $yapp, $query) = @_;
75 2         15 $query->setActual($yapp->YYCurval);
76 2         20 $query->setExpected($yapp->YYExpect);
77             }
78              
79             1;
80              
81             __END__