Showing 2 changed files with 27 additions and 13 deletions
+7 -12
lib/DBIx/Custom/QueryBuilder.pm
... ...
@@ -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};
+20 -1
t/dbix-custom-querybuilder.t
... ...
@@ -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