| ... | ... | 
                  @@ -71,6 +71,7 @@ sub _parse {
                 | 
              
| 71 | 71 | 
                  my $pos;  | 
              
| 72 | 72 | 
                   | 
              
| 73 | 73 | 
                  # Parse  | 
              
| 74 | 
                  + my $original = $source;  | 
              |
| 74 | 75 | 
                       while (my $c = substr($source, 0, 1, '')) {
                 | 
              
| 75 | 76 | 
                   | 
              
| 76 | 77 | 
                  # State is text  | 
              
| ... | ... | 
                  @@ -112,7 +113,7 @@ sub _parse {
                 | 
              
| 112 | 113 | 
                  # Unexpected  | 
              
| 113 | 114 | 
                                   else {
                 | 
              
| 114 | 115 | 
                  croak qq/Parsing error. unexpected "}". / .  | 
              
| 115 | 
                  - qq/pos $pos of "$source"/;  | 
              |
| 116 | 
                  + qq/pos $pos of "$original"/;  | 
              |
| 116 | 117 | 
                  }  | 
              
| 117 | 118 | 
                  }  | 
              
| 118 | 119 | 
                   | 
              
| ... | ... | 
                  @@ -121,7 +122,7 @@ sub _parse {
                 | 
              
| 121 | 122 | 
                  }  | 
              
| 122 | 123 | 
                   | 
              
| 123 | 124 | 
                  # State is tags  | 
              
| 124 | 
                  -        elsif ($state eq 'tag') {
                 | 
              |
| 125 | 
                  +        else {
                 | 
              |
| 125 | 126 | 
                   | 
              
| 126 | 127 | 
                  # Tag start charactor  | 
              
| 127 | 128 | 
                               if ($c eq '{') {
                 | 
              
| ... | ... | 
                  @@ -135,7 +136,7 @@ sub _parse {
                 | 
              
| 135 | 136 | 
                  # Unexpected  | 
              
| 136 | 137 | 
                                   else {
                 | 
              
| 137 | 138 | 
                                       croak qq/Parsing error. unexpected "{". / .
                 | 
              
| 138 | 
                  - qq/pos $pos of "$source"/;  | 
              |
| 139 | 
                  + qq/pos $pos of "$original"/;  | 
              |
| 139 | 140 | 
                  }  | 
              
| 140 | 141 | 
                  }  | 
              
| 141 | 142 | 
                   | 
              
| ... | ... | 
                  @@ -176,7 +177,7 @@ sub _parse {
                 | 
              
| 176 | 177 | 
                  }  | 
              
| 177 | 178 | 
                   | 
              
| 178 | 179 | 
                  # Tag not finished  | 
              
| 179 | 
                  -    croak qq{Tag not finished. "$source"}
                 | 
              |
| 180 | 
                  +    croak qq{Tag not finished. "$original"}
                 | 
              |
| 180 | 181 | 
                  if $state eq 'tag';  | 
              
| 181 | 182 | 
                   | 
              
| 182 | 183 | 
                  # Add rest text  | 
              
| ... | ... | 
                  @@ -198,17 +199,11 @@ sub _build_query {
                 | 
              
| 198 | 199 | 
                  # Build SQL  | 
              
| 199 | 200 | 
                       foreach my $node (@$tree) {
                 | 
              
| 200 | 201 | 
                   | 
              
| 201 | 
                  - # Get type, tag name, and arguments  | 
              |
| 202 | 
                  -        my $type = $node->{type};
                 | 
              |
| 203 | 
                  -  | 
              |
| 204 | 202 | 
                  # Text  | 
              
| 205 | 
                  -        if ($type eq 'text') {
                 | 
              |
| 206 | 
                  - # Join text  | 
              |
| 207 | 
                  -            $sql .= $node->{value};
                 | 
              |
| 208 | 
                  - }  | 
              |
| 203 | 
                  +        if ($node->{type} eq 'text') { $sql .= $node->{value} }
                 | 
              |
| 209 | 204 | 
                   | 
              
| 210 | 205 | 
                  # Tag  | 
              
| 211 | 
                  -        elsif ($type eq 'tag') {
                 | 
              |
| 206 | 
                  +        else {
                 | 
              |
| 212 | 207 | 
                   | 
              
| 213 | 208 | 
                  # Tag name  | 
              
| 214 | 209 | 
                               my $tag_name = $node->{tag_name};
                 | 
              
| ... | ... | 
                  @@ -16,6 +16,8 @@ my $datas;  | 
              
| 16 | 16 | 
                  my $builder;  | 
              
| 17 | 17 | 
                  my $query;  | 
              
| 18 | 18 | 
                  my $ret_val;  | 
              
| 19 | 
                  +my $source;  | 
              |
| 20 | 
                  +my $tree;  | 
              |
| 19 | 21 | 
                   | 
              
| 20 | 22 | 
                  test "Various source pattern";  | 
              
| 21 | 23 | 
                  $datas = [  | 
              
| ... | ... | 
                  @@ -142,7 +144,24 @@ eval{$builder->build_query("{in a r}")};
                 | 
              
| 142 | 144 | 
                   like($@, qr/\QColumn name and count of values must be specified in tag "{in }"/,
                 | 
              
| 143 | 145 | 
                  "$test : in : key not exist");  | 
              
| 144 | 146 | 
                   | 
              
| 145 | 
                  -test '_parse';  | 
              |
| 147 | 
                  +test 'variouse source';  | 
              |
| 148 | 
                  +$source = "a {= b} c \\{ \\} {= \\{} {= \\}} d;";
                 | 
              |
| 149 | 
                  +$query = $builder->build_query($source);  | 
              |
| 150 | 
                  +is($query->sql, 'a b = ? c { } { = ? } = ? d;', "$test : 1");
                 | 
              |
| 146 | 151 | 
                   | 
              
| 152 | 
                  +$source = "abc;";  | 
              |
| 153 | 
                  +$query = $builder->build_query($source);  | 
              |
| 154 | 
                  +is($query->sql, 'abc;', "$test : 2");  | 
              |
| 147 | 155 | 
                   | 
              
| 156 | 
                  +$source = "{= a}";
                 | 
              |
| 157 | 
                  +$query = $builder->build_query($source);  | 
              |
| 158 | 
                  +is($query->sql, 'a = ?;', "$test : 3");  | 
              |
| 159 | 
                  +  | 
              |
| 160 | 
                  +$source = "a {= b} }";
                 | 
              |
| 161 | 
                  +eval{$builder->build_query($source)};
                 | 
              |
| 162 | 
                  +like($@, qr/unexpected "}"/, "$test : error : 1");  | 
              |
| 163 | 
                  +  | 
              |
| 164 | 
                  +$source = "a {= {}";
                 | 
              |
| 165 | 
                  +eval{$builder->build_query($source)};
                 | 
              |
| 166 | 
                  +like($@, qr/unexpected "{"/, "$test : error : 2");
                 | 
              |
| 148 | 167 | 
                   |