embulk-filter-row 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50dcbbafd3bb2429121a86d74143612f79ca4570
4
- data.tar.gz: ee2a1c37ef931525a43764976d258004b1d24f8e
3
+ metadata.gz: 4362a57be3339dd46cc6be453703748c71755617
4
+ data.tar.gz: 1c2b2044e7421793aac99c774010a6285e3ddc33
5
5
  SHA512:
6
- metadata.gz: 016cc549f49bdc513c9a92e7550779484c1d0a3a8d465f00de6be3db9ee94b39ed280dd9423ae592562f0366b671aeb54eacd612a8a8f3a7fe4494d99ee6959a
7
- data.tar.gz: cc67e9ae035b6ccb4d9c5892b9f638ed51910061c38061040a3c526f0f316c1ae5f61d57aea79aa4ba94ef588382d1b1011efbbb36a0eef779cd6606779f8107
6
+ metadata.gz: 71237877bcfbfeca795113e388268187bbcdec03d98d7e196d24db2fd046c71515765771d0162f0a253579c29cafad354c7b9e86357b4fdb35aa011394a1fb22
7
+ data.tar.gz: 71a585f664ac93a3f82c726333b471e20e1377d7d21c7f685978a78324e22922ab24be634c01ca8466af2a3d8a74f017df00dc3f9b2c3085a767cd772bac5309
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.3.1 (2016-08-08)
2
+
3
+ Changes:
4
+
5
+ * Change identifier syntax from `[a-zA-Z$][a-zA-z0-9\.\-_]*` to `[a-zA-Z_][a-zA-z0-9_]*`
6
+ * Allow starting _. Disallow staring $. Diallow -. Disallow \.
7
+
1
8
  # 0.3.0 (2016-08-06)
2
9
 
3
10
  Enhancements:
data/README.md CHANGED
@@ -80,8 +80,6 @@ filters:
80
80
  - {column: d, operator: "IS NOT NULL"}
81
81
  ```
82
82
 
83
- This is equivalent with `((A OR B) AND (C OR D))`.
84
-
85
83
  ## Example (WHERE) (Experimental)
86
84
 
87
85
  Versions >= 0.3.0 suppors SQL-like syntax like
@@ -107,17 +105,18 @@ See [SQL-like Syntax](#sql-like-syntax) for more details
107
105
 
108
106
  Versions >= 0.3.0 suppors SQL-like syntax as:
109
107
 
110
- ```
111
- where: |-
112
- (
113
- string START_WITH 'str' AND
114
- number > 1.0
115
- )
116
- OR
117
- (
118
- time = TIMESTAMP '2016-01-01 +0900' AND
119
- "true" = true
120
- )
108
+ ```sql
109
+ where: |-
110
+ (
111
+ string START_WITH 'str' AND
112
+ number > 1.0
113
+
114
+ )
115
+ OR
116
+ (
117
+ time = TIMESTAMP '2016-01-01 +0900' AND
118
+ "true" = true
119
+ )
121
120
  ```
122
121
 
123
122
  ## Literals
@@ -149,7 +148,7 @@ String is a timestamp string which matches with one of following format:
149
148
  * `%Y-%m-%d %z`
150
149
  * `%Y-%m-%d`
151
150
 
152
- The default time zone is UTC, and the time resolution is micro second (caused by limitation of Embulk TimestampParser).
151
+ The time zone for formats without `%z` is UTC, and the time resolution is micro second (caused by limitation of Embulk TimestampParser).
153
152
 
154
153
  ### Json Literal
155
154
 
@@ -157,7 +156,7 @@ Not supported yet
157
156
 
158
157
  ### Identifier Literal
159
158
 
160
- Characters matching with a regular expression `[a-zA-Z$][a-zA-z0-9\.\-_]*` such as `foobar`, and characters surrounded by `"` such as `"foo\"bar"` are considred as an identifier literal, that is, embulk's column name.
159
+ Characters matching with a regular expression `[a-zA-Z_][a-zA-z0-9_]*` such as `foobar`, and characters surrounded by `"` such as `"foo\"bar"` are considred as an identifier literal, that is, embulk's column name.
161
160
 
162
161
  ## Operators
163
162
 
@@ -236,3 +235,23 @@ Release gem:
236
235
  ```
237
236
  $ ./gradlew gemPush
238
237
  ```
238
+
239
+ ## Development of SQL-like Syntax
240
+
241
+ Read the article [Supported SQL-like Syntax with embulk-filter-row using BYACC/J and JFlex](http://blog.livedoor.jp/sonots/archives/48172830.html).
242
+
243
+ To download BYACC/J and JFlex and run them, you can use:
244
+
245
+ ```
246
+ $ script/byaccj.sh
247
+ ```
248
+
249
+ or
250
+
251
+ ```
252
+ $ ./gradlew byaccj # this runs script/byaccj.sh internally
253
+ ```
254
+
255
+ This generates `src/main/java/org/embulk/filter/row/where/{Parser,ParserVal,Yylex}.java`.
256
+
257
+ The `byaccj` task of gradle is ran before `compileJava` task (which means to be ran before `classpath` or `test` task also) automatically.
data/build.gradle CHANGED
@@ -15,7 +15,7 @@ configurations {
15
15
  provided
16
16
  }
17
17
 
18
- version = "0.3.0"
18
+ version = "0.3.1"
19
19
  sourceCompatibility = 1.7
20
20
  targetCompatibility = 1.7
21
21
 
@@ -11,7 +11,7 @@ import org.embulk.spi.Schema;
11
11
 
12
12
  import org.slf4j.Logger;
13
13
 
14
- public class BuildColumnVisitorImpl
14
+ public class BuilderColumnVisitorImpl
15
15
  implements ColumnVisitor
16
16
  {
17
17
  private static final Logger logger = Exec.getLogger(RowFilterPlugin.class);
@@ -21,7 +21,7 @@ public class BuildColumnVisitorImpl
21
21
  private final PageReader pageReader;
22
22
  private final PageBuilder pageBuilder;
23
23
 
24
- BuildColumnVisitorImpl(PluginTask task, Schema inputSchema, Schema outputSchema, PageReader pageReader, PageBuilder pageBuilder)
24
+ BuilderColumnVisitorImpl(PluginTask task, Schema inputSchema, Schema outputSchema, PageReader pageReader, PageBuilder pageBuilder)
25
25
  {
26
26
  this.task = task;
27
27
  this.inputSchema = inputSchema;
@@ -105,8 +105,8 @@ public class RowFilterPlugin implements FilterPlugin
105
105
  guradVisitor = new GuardColumnVisitorAndImpl(task, inputSchema, outputSchema, pageReader);
106
106
  }
107
107
 
108
- final BuildColumnVisitorImpl buildVisitor;
109
- buildVisitor = new BuildColumnVisitorImpl(task, inputSchema, outputSchema, pageReader, pageBuilder);
108
+ final BuilderColumnVisitorImpl builderVisitor;
109
+ builderVisitor = new BuilderColumnVisitorImpl(task, inputSchema, outputSchema, pageReader, pageBuilder);
110
110
 
111
111
  return new PageOutput() {
112
112
  @Override
@@ -129,7 +129,7 @@ public class RowFilterPlugin implements FilterPlugin
129
129
  while (pageReader.nextRecord()) {
130
130
  if (guradVisitor.visitColumns(inputSchema)) {
131
131
  // output.add(page); did not work, double release() error occurred. We need to copy from reader to builder...
132
- outputSchema.visitColumns(buildVisitor);
132
+ outputSchema.visitColumns(builderVisitor);
133
133
  pageBuilder.addRecord();
134
134
  }
135
135
  }
@@ -18,9 +18,10 @@ package org.embulk.filter.row.where;
18
18
 
19
19
 
20
20
  //#line 2 "src/main/java/org/embulk/filter/row/where/_parser.y"
21
+ import org.embulk.config.ConfigException;
21
22
  import org.embulk.spi.Column;
22
23
  import org.embulk.spi.Schema;
23
- //#line 20 "Parser.java"
24
+ //#line 21 "Parser.java"
24
25
 
25
26
 
26
27
 
@@ -373,7 +374,7 @@ final static String yyrule[] = {
373
374
  "exp : '(' exp ')'",
374
375
  };
375
376
 
376
- //#line 91 "src/main/java/org/embulk/filter/row/where/_parser.y"
377
+ //#line 92 "src/main/java/org/embulk/filter/row/where/_parser.y"
377
378
 
378
379
  protected Schema schema;
379
380
  protected Yylex lexer;
@@ -410,18 +411,9 @@ private int yylex () {
410
411
 
411
412
  void yyerror(String s)
412
413
  {
413
- throw new RuntimeException("yyerror: " + s);
414
+ throw new ConfigException("yyerror: " + s);
414
415
  }
415
-
416
- /*public static void main(String args[])
417
- {
418
- Parser yyparser = new Parser();
419
- ParserExp exp = yyparser.parse("boolean = true");
420
- HashMap<String, Object> variables = new HashMap<>();
421
- variables.put("boolean", Boolean.TRUE);
422
- System.out.println("ans: " + exp.eval(variables));
423
- }*/
424
- //#line 352 "Parser.java"
416
+ //#line 344 "Parser.java"
425
417
  //###############################################################
426
418
  // method: yylexdebug : check lexer state
427
419
  //###############################################################
@@ -576,194 +568,194 @@ boolean doaction;
576
568
  {
577
569
  //########## USER-SUPPLIED ACTIONS ##########
578
570
  case 2:
579
- //#line 39 "src/main/java/org/embulk/filter/row/where/_parser.y"
571
+ //#line 40 "src/main/java/org/embulk/filter/row/where/_parser.y"
580
572
  { root = val_peek(0); }
581
573
  break;
582
574
  case 3:
583
- //#line 42 "src/main/java/org/embulk/filter/row/where/_parser.y"
575
+ //#line 43 "src/main/java/org/embulk/filter/row/where/_parser.y"
584
576
  { yyval = new ParserVal(new TimestampLiteral(val_peek(0))); }
585
577
  break;
586
578
  case 4:
587
- //#line 43 "src/main/java/org/embulk/filter/row/where/_parser.y"
579
+ //#line 44 "src/main/java/org/embulk/filter/row/where/_parser.y"
588
580
  { yyval = new ParserVal(new TimestampLiteral(val_peek(0))); }
589
581
  break;
590
582
  case 5:
591
- //#line 45 "src/main/java/org/embulk/filter/row/where/_parser.y"
583
+ //#line 46 "src/main/java/org/embulk/filter/row/where/_parser.y"
592
584
  { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), EQ)); }
593
585
  break;
594
586
  case 6:
595
- //#line 46 "src/main/java/org/embulk/filter/row/where/_parser.y"
587
+ //#line 47 "src/main/java/org/embulk/filter/row/where/_parser.y"
596
588
  { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), NEQ)); }
597
589
  break;
598
590
  case 7:
599
- //#line 47 "src/main/java/org/embulk/filter/row/where/_parser.y"
591
+ //#line 48 "src/main/java/org/embulk/filter/row/where/_parser.y"
600
592
  { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), EQ)); }
601
593
  break;
602
594
  case 8:
603
- //#line 48 "src/main/java/org/embulk/filter/row/where/_parser.y"
595
+ //#line 49 "src/main/java/org/embulk/filter/row/where/_parser.y"
604
596
  { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), NEQ)); }
605
597
  break;
606
598
  case 9:
607
- //#line 49 "src/main/java/org/embulk/filter/row/where/_parser.y"
599
+ //#line 50 "src/main/java/org/embulk/filter/row/where/_parser.y"
608
600
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), EQ)); }
609
601
  break;
610
602
  case 10:
611
- //#line 50 "src/main/java/org/embulk/filter/row/where/_parser.y"
603
+ //#line 51 "src/main/java/org/embulk/filter/row/where/_parser.y"
612
604
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), NEQ)); }
613
605
  break;
614
606
  case 11:
615
- //#line 51 "src/main/java/org/embulk/filter/row/where/_parser.y"
607
+ //#line 52 "src/main/java/org/embulk/filter/row/where/_parser.y"
616
608
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GT)); }
617
609
  break;
618
610
  case 12:
619
- //#line 52 "src/main/java/org/embulk/filter/row/where/_parser.y"
611
+ //#line 53 "src/main/java/org/embulk/filter/row/where/_parser.y"
620
612
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GE)); }
621
613
  break;
622
614
  case 13:
623
- //#line 53 "src/main/java/org/embulk/filter/row/where/_parser.y"
615
+ //#line 54 "src/main/java/org/embulk/filter/row/where/_parser.y"
624
616
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LT)); }
625
617
  break;
626
618
  case 14:
627
- //#line 54 "src/main/java/org/embulk/filter/row/where/_parser.y"
619
+ //#line 55 "src/main/java/org/embulk/filter/row/where/_parser.y"
628
620
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LE)); }
629
621
  break;
630
622
  case 15:
631
- //#line 55 "src/main/java/org/embulk/filter/row/where/_parser.y"
623
+ //#line 56 "src/main/java/org/embulk/filter/row/where/_parser.y"
632
624
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), EQ)); }
633
625
  break;
634
626
  case 16:
635
- //#line 56 "src/main/java/org/embulk/filter/row/where/_parser.y"
627
+ //#line 57 "src/main/java/org/embulk/filter/row/where/_parser.y"
636
628
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), NEQ)); }
637
629
  break;
638
630
  case 17:
639
- //#line 57 "src/main/java/org/embulk/filter/row/where/_parser.y"
631
+ //#line 58 "src/main/java/org/embulk/filter/row/where/_parser.y"
640
632
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GT)); }
641
633
  break;
642
634
  case 18:
643
- //#line 58 "src/main/java/org/embulk/filter/row/where/_parser.y"
635
+ //#line 59 "src/main/java/org/embulk/filter/row/where/_parser.y"
644
636
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GE)); }
645
637
  break;
646
638
  case 19:
647
- //#line 59 "src/main/java/org/embulk/filter/row/where/_parser.y"
639
+ //#line 60 "src/main/java/org/embulk/filter/row/where/_parser.y"
648
640
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LT)); }
649
641
  break;
650
642
  case 20:
651
- //#line 60 "src/main/java/org/embulk/filter/row/where/_parser.y"
643
+ //#line 61 "src/main/java/org/embulk/filter/row/where/_parser.y"
652
644
  { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LE)); }
653
645
  break;
654
646
  case 21:
655
- //#line 61 "src/main/java/org/embulk/filter/row/where/_parser.y"
647
+ //#line 62 "src/main/java/org/embulk/filter/row/where/_parser.y"
656
648
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), EQ)); }
657
649
  break;
658
650
  case 22:
659
- //#line 62 "src/main/java/org/embulk/filter/row/where/_parser.y"
651
+ //#line 63 "src/main/java/org/embulk/filter/row/where/_parser.y"
660
652
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), NEQ)); }
661
653
  break;
662
654
  case 23:
663
- //#line 63 "src/main/java/org/embulk/filter/row/where/_parser.y"
655
+ //#line 64 "src/main/java/org/embulk/filter/row/where/_parser.y"
664
656
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), START_WITH)); }
665
657
  break;
666
658
  case 24:
667
- //#line 64 "src/main/java/org/embulk/filter/row/where/_parser.y"
659
+ //#line 65 "src/main/java/org/embulk/filter/row/where/_parser.y"
668
660
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), END_WITH)); }
669
661
  break;
670
662
  case 25:
671
- //#line 65 "src/main/java/org/embulk/filter/row/where/_parser.y"
663
+ //#line 66 "src/main/java/org/embulk/filter/row/where/_parser.y"
672
664
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), INCLUDE)); }
673
665
  break;
674
666
  case 26:
675
- //#line 66 "src/main/java/org/embulk/filter/row/where/_parser.y"
667
+ //#line 67 "src/main/java/org/embulk/filter/row/where/_parser.y"
676
668
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), EQ)); }
677
669
  break;
678
670
  case 27:
679
- //#line 67 "src/main/java/org/embulk/filter/row/where/_parser.y"
671
+ //#line 68 "src/main/java/org/embulk/filter/row/where/_parser.y"
680
672
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), NEQ)); }
681
673
  break;
682
674
  case 28:
683
- //#line 68 "src/main/java/org/embulk/filter/row/where/_parser.y"
675
+ //#line 69 "src/main/java/org/embulk/filter/row/where/_parser.y"
684
676
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), START_WITH)); }
685
677
  break;
686
678
  case 29:
687
- //#line 69 "src/main/java/org/embulk/filter/row/where/_parser.y"
679
+ //#line 70 "src/main/java/org/embulk/filter/row/where/_parser.y"
688
680
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), END_WITH)); }
689
681
  break;
690
682
  case 30:
691
- //#line 70 "src/main/java/org/embulk/filter/row/where/_parser.y"
683
+ //#line 71 "src/main/java/org/embulk/filter/row/where/_parser.y"
692
684
  { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), INCLUDE)); }
693
685
  break;
694
686
  case 31:
695
- //#line 71 "src/main/java/org/embulk/filter/row/where/_parser.y"
687
+ //#line 72 "src/main/java/org/embulk/filter/row/where/_parser.y"
696
688
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), EQ)); }
697
689
  break;
698
690
  case 32:
699
- //#line 72 "src/main/java/org/embulk/filter/row/where/_parser.y"
691
+ //#line 73 "src/main/java/org/embulk/filter/row/where/_parser.y"
700
692
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), NEQ)); }
701
693
  break;
702
694
  case 33:
703
- //#line 73 "src/main/java/org/embulk/filter/row/where/_parser.y"
695
+ //#line 74 "src/main/java/org/embulk/filter/row/where/_parser.y"
704
696
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GT)); }
705
697
  break;
706
698
  case 34:
707
- //#line 74 "src/main/java/org/embulk/filter/row/where/_parser.y"
699
+ //#line 75 "src/main/java/org/embulk/filter/row/where/_parser.y"
708
700
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GE)); }
709
701
  break;
710
702
  case 35:
711
- //#line 75 "src/main/java/org/embulk/filter/row/where/_parser.y"
703
+ //#line 76 "src/main/java/org/embulk/filter/row/where/_parser.y"
712
704
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LT)); }
713
705
  break;
714
706
  case 36:
715
- //#line 76 "src/main/java/org/embulk/filter/row/where/_parser.y"
707
+ //#line 77 "src/main/java/org/embulk/filter/row/where/_parser.y"
716
708
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LE)); }
717
709
  break;
718
710
  case 37:
719
- //#line 77 "src/main/java/org/embulk/filter/row/where/_parser.y"
711
+ //#line 78 "src/main/java/org/embulk/filter/row/where/_parser.y"
720
712
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), EQ)); }
721
713
  break;
722
714
  case 38:
723
- //#line 78 "src/main/java/org/embulk/filter/row/where/_parser.y"
715
+ //#line 79 "src/main/java/org/embulk/filter/row/where/_parser.y"
724
716
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), NEQ)); }
725
717
  break;
726
718
  case 39:
727
- //#line 79 "src/main/java/org/embulk/filter/row/where/_parser.y"
719
+ //#line 80 "src/main/java/org/embulk/filter/row/where/_parser.y"
728
720
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GT)); }
729
721
  break;
730
722
  case 40:
731
- //#line 80 "src/main/java/org/embulk/filter/row/where/_parser.y"
723
+ //#line 81 "src/main/java/org/embulk/filter/row/where/_parser.y"
732
724
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GE)); }
733
725
  break;
734
726
  case 41:
735
- //#line 81 "src/main/java/org/embulk/filter/row/where/_parser.y"
727
+ //#line 82 "src/main/java/org/embulk/filter/row/where/_parser.y"
736
728
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LT)); }
737
729
  break;
738
730
  case 42:
739
- //#line 82 "src/main/java/org/embulk/filter/row/where/_parser.y"
731
+ //#line 83 "src/main/java/org/embulk/filter/row/where/_parser.y"
740
732
  { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LE)); }
741
733
  break;
742
734
  case 43:
743
- //#line 83 "src/main/java/org/embulk/filter/row/where/_parser.y"
735
+ //#line 84 "src/main/java/org/embulk/filter/row/where/_parser.y"
744
736
  { yyval = new ParserVal(new NullOpExp(val_peek(2), EQ)); }
745
737
  break;
746
738
  case 44:
747
- //#line 84 "src/main/java/org/embulk/filter/row/where/_parser.y"
739
+ //#line 85 "src/main/java/org/embulk/filter/row/where/_parser.y"
748
740
  { yyval = new ParserVal(new NullOpExp(val_peek(3), NEQ)); }
749
741
  break;
750
742
  case 45:
751
- //#line 85 "src/main/java/org/embulk/filter/row/where/_parser.y"
743
+ //#line 86 "src/main/java/org/embulk/filter/row/where/_parser.y"
752
744
  { yyval = new ParserVal(new LogicalOpExp(val_peek(2), val_peek(0), OR)); }
753
745
  break;
754
746
  case 46:
755
- //#line 86 "src/main/java/org/embulk/filter/row/where/_parser.y"
747
+ //#line 87 "src/main/java/org/embulk/filter/row/where/_parser.y"
756
748
  { yyval = new ParserVal(new LogicalOpExp(val_peek(2), val_peek(0), AND)); }
757
749
  break;
758
750
  case 47:
759
- //#line 87 "src/main/java/org/embulk/filter/row/where/_parser.y"
751
+ //#line 88 "src/main/java/org/embulk/filter/row/where/_parser.y"
760
752
  { yyval = new ParserVal(new NegateOpExp(val_peek(0))); }
761
753
  break;
762
754
  case 48:
763
- //#line 88 "src/main/java/org/embulk/filter/row/where/_parser.y"
755
+ //#line 89 "src/main/java/org/embulk/filter/row/where/_parser.y"
764
756
  { yyval = val_peek(1); }
765
757
  break;
766
- //#line 689 "Parser.java"
758
+ //#line 681 "Parser.java"
767
759
  //########## END OF USER-SUPPLIED ACTIONS ##########
768
760
  }//switch
769
761
  //#### Now let's reduce... ####
@@ -2,6 +2,7 @@
2
2
 
3
3
  package org.embulk.filter.row.where;
4
4
 
5
+ import org.embulk.config.ConfigException;
5
6
  import org.embulk.spi.Schema;
6
7
 
7
8
  /**
@@ -36,14 +37,14 @@ class Yylex {
36
37
  * Translates characters to character classes
37
38
  */
38
39
  private static final String ZZ_CMAP_PACKED =
39
- "\11\0\1\53\1\13\1\54\1\54\1\12\22\0\1\53\1\25\1\4"+
40
- "\1\0\1\5\2\0\1\11\1\14\1\14\3\0\1\1\1\3\1\0"+
41
- "\12\2\2\0\1\23\1\22\1\24\2\0\1\15\1\10\1\35\1\17"+
42
- "\1\34\1\52\1\10\1\33\1\32\2\10\1\36\1\40\1\16\1\20"+
43
- "\1\41\1\10\1\21\1\26\1\27\1\37\1\10\1\31\3\10\1\6"+
44
- "\1\7\2\6\1\30\1\6\1\47\1\55\2\10\1\45\1\46\5\10"+
45
- "\1\50\1\10\1\56\3\10\1\43\1\51\1\42\1\44\5\10\12\0"+
46
- "\1\54\u1fa2\0\1\54\1\54\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\udfe6\0";
40
+ "\11\0\1\52\1\12\1\53\1\53\1\11\22\0\1\52\1\24\1\4"+
41
+ "\4\0\1\10\1\13\1\13\3\0\1\1\1\3\1\0\12\2\2\0"+
42
+ "\1\22\1\21\1\23\2\0\1\14\1\5\1\34\1\16\1\33\1\51"+
43
+ "\1\5\1\32\1\31\2\5\1\35\1\37\1\15\1\17\1\40\1\5"+
44
+ "\1\20\1\25\1\26\1\36\1\5\1\30\3\5\1\6\1\7\2\6"+
45
+ "\1\27\1\6\1\46\1\54\2\5\1\44\1\45\5\5\1\47\1\5"+
46
+ "\1\55\3\5\1\42\1\50\1\41\1\43\5\5\12\0\1\53\u1fa2\0"+
47
+ "\1\53\1\53\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\udfe6\0";
47
48
 
48
49
  /**
49
50
  * Translates characters to character classes
@@ -90,19 +91,19 @@ class Yylex {
90
91
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
91
92
 
92
93
  private static final String ZZ_ROWMAP_PACKED_0 =
93
- "\0\0\0\57\0\136\0\215\0\274\0\353\0\215\0\u011a"+
94
- "\0\215\0\u0149\0\215\0\215\0\u0178\0\u01a7\0\u01d6\0\215"+
95
- "\0\u0205\0\u0234\0\u0263\0\u0292\0\u02c1\0\u02f0\0\u031f\0\u034e"+
96
- "\0\u037d\0\u03ac\0\u03db\0\u040a\0\u0439\0\215\0\u0468\0\215"+
97
- "\0\u0497\0\u04c6\0\u04f5\0\u0524\0\u0553\0\u011a\0\215\0\215"+
98
- "\0\215\0\u0582\0\u05b1\0\u05e0\0\u060f\0\u011a\0\u063e\0\u066d"+
99
- "\0\u069c\0\u06cb\0\215\0\215\0\215\0\215\0\215\0\215"+
100
- "\0\215\0\215\0\215\0\u04c6\0\u011a\0\u011a\0\u06fa\0\u0729"+
101
- "\0\u0758\0\u0787\0\u07b6\0\u07e5\0\u0814\0\u0843\0\u0872\0\u011a"+
102
- "\0\u08a1\0\u011a\0\u08d0\0\u08ff\0\u092e\0\u095d\0\u098c\0\u09bb"+
103
- "\0\u09ea\0\u0a19\0\u0a48\0\u011a\0\u0a77\0\u0aa6\0\u0ad5\0\u0b04"+
104
- "\0\u0b33\0\u0b62\0\u011a\0\u0b91\0\u0bc0\0\u0bef\0\u011a\0\u0c1e"+
105
- "\0\u011a\0\u011a";
94
+ "\0\0\0\56\0\134\0\212\0\270\0\346\0\212\0\u0114"+
95
+ "\0\212\0\u0142\0\212\0\212\0\u0170\0\u019e\0\u01cc\0\212"+
96
+ "\0\u01fa\0\u0228\0\u0256\0\u0284\0\u02b2\0\u02e0\0\u030e\0\u033c"+
97
+ "\0\u036a\0\u0398\0\u03c6\0\u03f4\0\u0422\0\212\0\u0450\0\212"+
98
+ "\0\u047e\0\u04ac\0\u04da\0\u0508\0\u0536\0\u0114\0\212\0\212"+
99
+ "\0\212\0\u0564\0\u0592\0\u05c0\0\u05ee\0\u0114\0\u061c\0\u064a"+
100
+ "\0\u0678\0\u06a6\0\212\0\212\0\212\0\212\0\212\0\212"+
101
+ "\0\212\0\212\0\212\0\u04ac\0\u0114\0\u0114\0\u06d4\0\u0702"+
102
+ "\0\u0730\0\u075e\0\u078c\0\u07ba\0\u07e8\0\u0816\0\u0844\0\u0114"+
103
+ "\0\u0872\0\u0114\0\u08a0\0\u08ce\0\u08fc\0\u092a\0\u0958\0\u0986"+
104
+ "\0\u09b4\0\u09e2\0\u0a10\0\u0114\0\u0a3e\0\u0a6c\0\u0a9a\0\u0ac8"+
105
+ "\0\u0af6\0\u0b24\0\u0114\0\u0b52\0\u0b80\0\u0bae\0\u0114\0\u0bdc"+
106
+ "\0\u0114\0\u0114";
106
107
 
107
108
  private static int [] zzUnpackRowMap() {
108
109
  int [] result = new int[98];
@@ -128,99 +129,98 @@ class Yylex {
128
129
  private static final int [] ZZ_TRANS = zzUnpackTrans();
129
130
 
130
131
  private static final String ZZ_TRANS_PACKED_0 =
131
- "\1\4\1\5\1\6\1\4\1\7\1\10\2\4\1\10"+
132
- "\1\11\1\12\1\13\1\14\1\15\1\16\1\10\1\17"+
133
- "\1\10\1\20\1\21\1\22\1\23\1\24\1\25\1\4"+
134
- "\1\10\1\26\1\10\1\27\5\10\1\30\3\10\1\31"+
135
- "\3\10\1\32\1\33\1\4\2\10\7\34\1\35\1\34"+
136
- "\1\36\2\4\43\34\4\37\1\40\2\37\1\41\2\37"+
137
- "\2\4\43\37\61\0\1\6\56\0\1\6\1\42\54\0"+
138
- "\3\10\2\0\3\10\4\0\5\10\4\0\25\10\2\0"+
139
- "\2\10\13\0\1\13\44\0\3\10\2\0\3\10\4\0"+
140
- "\1\10\1\43\3\10\4\0\25\10\2\0\2\10\1\0"+
141
- "\3\10\2\0\3\10\4\0\3\10\1\44\1\10\4\0"+
142
- "\11\10\1\45\13\10\2\0\2\10\1\0\3\10\2\0"+
143
- "\3\10\4\0\4\10\1\46\4\0\25\10\2\0\2\10"+
144
- "\22\0\1\47\1\0\1\50\54\0\1\51\56\0\1\50"+
145
- "\35\0\3\10\2\0\3\10\4\0\5\10\4\0\1\10"+
146
- "\1\52\23\10\2\0\2\10\1\0\3\10\2\0\3\10"+
147
- "\4\0\4\10\1\53\4\0\4\10\1\54\20\10\2\0"+
148
- "\2\10\1\0\3\10\2\0\3\10\4\0\1\10\1\55"+
149
- "\3\10\4\0\1\56\24\10\2\0\2\10\1\0\3\10"+
150
- "\2\0\3\10\4\0\1\10\1\57\3\10\4\0\25\10"+
151
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\5\10"+
152
- "\4\0\15\10\1\60\7\10\2\0\2\10\1\0\3\10"+
153
- "\2\0\3\10\4\0\5\10\4\0\21\10\1\61\3\10"+
154
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\1\62"+
155
- "\4\10\4\0\25\10\2\0\2\10\53\0\1\33\3\0"+
156
- "\7\34\1\0\1\34\3\0\43\34\4\63\1\64\2\63"+
157
- "\1\65\1\63\1\66\2\0\26\63\1\67\1\70\2\63"+
158
- "\1\71\5\63\1\0\1\72\1\73\4\37\1\0\2\37"+
159
- "\1\0\2\37\2\0\43\37\4\63\1\64\2\63\1\65"+
160
- "\1\63\1\66\2\0\40\63\1\0\2\63\2\0\1\74"+
161
- "\55\0\3\10\2\0\3\10\4\0\2\10\1\75\2\10"+
162
- "\4\0\25\10\2\0\2\10\1\0\3\10\2\0\3\10"+
163
- "\4\0\5\10\4\0\1\10\1\76\23\10\2\0\2\10"+
164
- "\1\0\3\10\2\0\3\10\4\0\5\10\4\0\10\10"+
165
- "\1\77\14\10\2\0\2\10\1\0\3\10\2\0\3\10"+
166
- "\4\0\1\100\4\10\4\0\25\10\2\0\2\10\1\0"+
167
- "\3\10\2\0\3\10\4\0\5\10\4\0\11\10\1\101"+
168
- "\13\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
169
- "\5\10\4\0\12\10\1\102\12\10\2\0\2\10\1\0"+
170
- "\3\10\2\0\3\10\4\0\5\10\4\0\7\10\1\103"+
171
- "\15\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
172
- "\2\10\1\104\2\10\4\0\25\10\2\0\2\10\1\0"+
173
- "\3\10\2\0\3\10\4\0\5\10\4\0\16\10\1\105"+
174
- "\6\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
175
- "\5\10\4\0\22\10\1\106\2\10\2\0\2\10\1\0"+
176
- "\3\10\2\0\3\10\4\0\5\10\4\0\10\10\1\107"+
177
- "\14\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
178
- "\5\10\4\0\10\10\1\110\14\10\2\0\2\10\1\0"+
179
- "\3\10\2\0\3\10\4\0\4\10\1\111\4\0\25\10"+
180
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\5\10"+
181
- "\4\0\6\10\1\112\16\10\2\0\2\10\1\0\3\10"+
182
- "\2\0\3\10\4\0\5\10\4\0\6\10\1\113\16\10"+
183
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\5\10"+
184
- "\4\0\10\10\1\114\14\10\2\0\2\10\1\0\3\10"+
185
- "\2\0\3\10\4\0\5\10\4\0\2\10\1\115\22\10"+
186
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\5\10"+
187
- "\4\0\17\10\1\112\5\10\2\0\2\10\1\0\3\10"+
188
- "\2\0\3\10\4\0\5\10\4\0\23\10\1\116\1\10"+
189
- "\2\0\2\10\1\0\3\10\2\0\3\10\4\0\5\10"+
190
- "\4\0\1\117\24\10\2\0\2\10\1\0\3\10\2\0"+
191
- "\3\10\4\0\5\10\4\0\1\10\1\120\23\10\2\0"+
192
- "\2\10\1\0\3\10\2\0\3\10\4\0\5\10\4\0"+
193
- "\1\121\24\10\2\0\2\10\1\0\3\10\2\0\3\10"+
194
- "\4\0\5\10\4\0\11\10\1\122\13\10\2\0\2\10"+
195
- "\1\0\3\10\2\0\3\10\4\0\5\10\4\0\3\10"+
196
- "\1\123\21\10\2\0\2\10\1\0\3\10\2\0\3\10"+
197
- "\4\0\5\10\4\0\17\10\1\124\5\10\2\0\2\10"+
198
- "\1\0\3\10\2\0\3\10\4\0\5\10\4\0\6\10"+
199
- "\1\124\16\10\2\0\2\10\1\0\3\10\2\0\3\10"+
200
- "\4\0\5\10\4\0\2\10\1\125\22\10\2\0\2\10"+
201
- "\1\0\3\10\2\0\3\10\4\0\5\10\4\0\1\10"+
202
- "\1\126\23\10\2\0\2\10\1\0\3\10\2\0\3\10"+
203
- "\4\0\2\10\1\127\2\10\4\0\25\10\2\0\2\10"+
204
- "\1\0\3\10\2\0\3\10\4\0\5\10\4\0\4\10"+
205
- "\1\130\20\10\2\0\2\10\1\0\3\10\2\0\3\10"+
206
- "\4\0\5\10\4\0\3\10\1\131\21\10\2\0\2\10"+
207
- "\1\0\3\10\2\0\3\10\4\0\1\132\4\10\4\0"+
208
- "\25\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
209
- "\5\10\4\0\6\10\1\133\16\10\2\0\2\10\1\0"+
210
- "\3\10\2\0\3\10\4\0\5\10\4\0\1\10\1\134"+
211
- "\23\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
212
- "\5\10\4\0\4\10\1\135\20\10\2\0\2\10\1\0"+
213
- "\3\10\2\0\3\10\4\0\5\10\4\0\12\10\1\136"+
214
- "\12\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
215
- "\5\10\4\0\5\10\1\137\17\10\2\0\2\10\1\0"+
216
- "\3\10\2\0\3\10\4\0\5\10\4\0\1\10\1\140"+
217
- "\23\10\2\0\2\10\1\0\3\10\2\0\3\10\4\0"+
218
- "\5\10\4\0\13\10\1\141\11\10\2\0\2\10\1\0"+
219
- "\3\10\2\0\3\10\4\0\5\10\4\0\5\10\1\142"+
220
- "\17\10\2\0\2\10";
132
+ "\1\4\1\5\1\6\1\4\1\7\1\10\2\4\1\11"+
133
+ "\1\12\1\13\1\14\1\15\1\16\1\10\1\17\1\10"+
134
+ "\1\20\1\21\1\22\1\23\1\24\1\25\2\10\1\26"+
135
+ "\1\10\1\27\5\10\1\30\3\10\1\31\3\10\1\32"+
136
+ "\1\33\1\4\2\10\7\34\1\35\1\36\2\4\43\34"+
137
+ "\4\37\1\40\2\37\1\41\1\37\2\4\43\37\60\0"+
138
+ "\1\6\55\0\1\6\1\42\54\0\1\10\2\0\3\10"+
139
+ "\4\0\5\10\4\0\25\10\2\0\2\10\12\0\1\13"+
140
+ "\45\0\1\10\2\0\3\10\4\0\1\10\1\43\3\10"+
141
+ "\4\0\25\10\2\0\2\10\2\0\1\10\2\0\3\10"+
142
+ "\4\0\3\10\1\44\1\10\4\0\11\10\1\45\13\10"+
143
+ "\2\0\2\10\2\0\1\10\2\0\3\10\4\0\4\10"+
144
+ "\1\46\4\0\25\10\2\0\2\10\21\0\1\47\1\0"+
145
+ "\1\50\53\0\1\51\55\0\1\50\36\0\1\10\2\0"+
146
+ "\3\10\4\0\5\10\4\0\1\10\1\52\23\10\2\0"+
147
+ "\2\10\2\0\1\10\2\0\3\10\4\0\4\10\1\53"+
148
+ "\4\0\4\10\1\54\20\10\2\0\2\10\2\0\1\10"+
149
+ "\2\0\3\10\4\0\1\10\1\55\3\10\4\0\1\56"+
150
+ "\24\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
151
+ "\1\10\1\57\3\10\4\0\25\10\2\0\2\10\2\0"+
152
+ "\1\10\2\0\3\10\4\0\5\10\4\0\15\10\1\60"+
153
+ "\7\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
154
+ "\5\10\4\0\21\10\1\61\3\10\2\0\2\10\2\0"+
155
+ "\1\10\2\0\3\10\4\0\1\62\4\10\4\0\25\10"+
156
+ "\2\0\2\10\52\0\1\33\3\0\7\34\4\0\43\34"+
157
+ "\4\63\1\64\2\63\1\65\1\66\2\0\26\63\1\67"+
158
+ "\1\70\2\63\1\71\5\63\1\0\1\72\1\73\4\37"+
159
+ "\1\0\2\37\1\0\1\37\2\0\43\37\4\63\1\64"+
160
+ "\2\63\1\65\1\66\2\0\40\63\1\0\2\63\2\0"+
161
+ "\1\74\55\0\1\10\2\0\3\10\4\0\2\10\1\75"+
162
+ "\2\10\4\0\25\10\2\0\2\10\2\0\1\10\2\0"+
163
+ "\3\10\4\0\5\10\4\0\1\10\1\76\23\10\2\0"+
164
+ "\2\10\2\0\1\10\2\0\3\10\4\0\5\10\4\0"+
165
+ "\10\10\1\77\14\10\2\0\2\10\2\0\1\10\2\0"+
166
+ "\3\10\4\0\1\100\4\10\4\0\25\10\2\0\2\10"+
167
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\11\10"+
168
+ "\1\101\13\10\2\0\2\10\2\0\1\10\2\0\3\10"+
169
+ "\4\0\5\10\4\0\12\10\1\102\12\10\2\0\2\10"+
170
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\7\10"+
171
+ "\1\103\15\10\2\0\2\10\2\0\1\10\2\0\3\10"+
172
+ "\4\0\2\10\1\104\2\10\4\0\25\10\2\0\2\10"+
173
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\16\10"+
174
+ "\1\105\6\10\2\0\2\10\2\0\1\10\2\0\3\10"+
175
+ "\4\0\5\10\4\0\22\10\1\106\2\10\2\0\2\10"+
176
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\10\10"+
177
+ "\1\107\14\10\2\0\2\10\2\0\1\10\2\0\3\10"+
178
+ "\4\0\5\10\4\0\10\10\1\110\14\10\2\0\2\10"+
179
+ "\2\0\1\10\2\0\3\10\4\0\4\10\1\111\4\0"+
180
+ "\25\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
181
+ "\5\10\4\0\6\10\1\112\16\10\2\0\2\10\2\0"+
182
+ "\1\10\2\0\3\10\4\0\5\10\4\0\6\10\1\113"+
183
+ "\16\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
184
+ "\5\10\4\0\10\10\1\114\14\10\2\0\2\10\2\0"+
185
+ "\1\10\2\0\3\10\4\0\5\10\4\0\2\10\1\115"+
186
+ "\22\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
187
+ "\5\10\4\0\17\10\1\112\5\10\2\0\2\10\2\0"+
188
+ "\1\10\2\0\3\10\4\0\5\10\4\0\23\10\1\116"+
189
+ "\1\10\2\0\2\10\2\0\1\10\2\0\3\10\4\0"+
190
+ "\5\10\4\0\1\117\24\10\2\0\2\10\2\0\1\10"+
191
+ "\2\0\3\10\4\0\5\10\4\0\1\10\1\120\23\10"+
192
+ "\2\0\2\10\2\0\1\10\2\0\3\10\4\0\5\10"+
193
+ "\4\0\1\121\24\10\2\0\2\10\2\0\1\10\2\0"+
194
+ "\3\10\4\0\5\10\4\0\11\10\1\122\13\10\2\0"+
195
+ "\2\10\2\0\1\10\2\0\3\10\4\0\5\10\4\0"+
196
+ "\3\10\1\123\21\10\2\0\2\10\2\0\1\10\2\0"+
197
+ "\3\10\4\0\5\10\4\0\17\10\1\124\5\10\2\0"+
198
+ "\2\10\2\0\1\10\2\0\3\10\4\0\5\10\4\0"+
199
+ "\6\10\1\124\16\10\2\0\2\10\2\0\1\10\2\0"+
200
+ "\3\10\4\0\5\10\4\0\2\10\1\125\22\10\2\0"+
201
+ "\2\10\2\0\1\10\2\0\3\10\4\0\5\10\4\0"+
202
+ "\1\10\1\126\23\10\2\0\2\10\2\0\1\10\2\0"+
203
+ "\3\10\4\0\2\10\1\127\2\10\4\0\25\10\2\0"+
204
+ "\2\10\2\0\1\10\2\0\3\10\4\0\5\10\4\0"+
205
+ "\4\10\1\130\20\10\2\0\2\10\2\0\1\10\2\0"+
206
+ "\3\10\4\0\5\10\4\0\3\10\1\131\21\10\2\0"+
207
+ "\2\10\2\0\1\10\2\0\3\10\4\0\1\132\4\10"+
208
+ "\4\0\25\10\2\0\2\10\2\0\1\10\2\0\3\10"+
209
+ "\4\0\5\10\4\0\6\10\1\133\16\10\2\0\2\10"+
210
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\1\10"+
211
+ "\1\134\23\10\2\0\2\10\2\0\1\10\2\0\3\10"+
212
+ "\4\0\5\10\4\0\4\10\1\135\20\10\2\0\2\10"+
213
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\12\10"+
214
+ "\1\136\12\10\2\0\2\10\2\0\1\10\2\0\3\10"+
215
+ "\4\0\5\10\4\0\5\10\1\137\17\10\2\0\2\10"+
216
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\1\10"+
217
+ "\1\140\23\10\2\0\2\10\2\0\1\10\2\0\3\10"+
218
+ "\4\0\5\10\4\0\13\10\1\141\11\10\2\0\2\10"+
219
+ "\2\0\1\10\2\0\3\10\4\0\5\10\4\0\5\10"+
220
+ "\1\142\17\10\2\0\2\10";
221
221
 
222
222
  private static int [] zzUnpackTrans() {
223
- int [] result = new int[3149];
223
+ int [] result = new int[3082];
224
224
  int offset = 0;
225
225
  offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
226
226
  return result;
@@ -371,7 +371,7 @@ class Yylex {
371
371
  char [] map = new char[0x110000];
372
372
  int i = 0; /* index in packed string */
373
373
  int j = 0; /* index in unpacked array */
374
- while (i < 182) {
374
+ while (i < 178) {
375
375
  int count = packed.charAt(i++);
376
376
  char value = packed.charAt(i++);
377
377
  do map[j++] = value; while (--count > 0);
@@ -679,7 +679,7 @@ class Yylex {
679
679
  else {
680
680
  switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
681
681
  case 1:
682
- { throw new RuntimeException("yylex: Unexpected character '"+yytext()+"'");
682
+ { throw new ConfigException("yylex: Unexpected character '"+yytext()+"'");
683
683
  }
684
684
  case 37: break;
685
685
  case 2:
@@ -751,7 +751,7 @@ class Yylex {
751
751
  }
752
752
  case 54: break;
753
753
  case 19:
754
- { throw new RuntimeException("yylex: Illegal escape sequence \""+yytext()+"\"");
754
+ { throw new ConfigException("yylex: Illegal escape sequence \""+yytext()+"\"");
755
755
  }
756
756
  case 55: break;
757
757
  case 20:
@@ -1,5 +1,6 @@
1
1
  package org.embulk.filter.row.where;
2
2
 
3
+ import org.embulk.config.ConfigException;
3
4
  import org.embulk.spi.Schema;
4
5
  %%
5
6
 
@@ -23,7 +24,7 @@ import org.embulk.spi.Schema;
23
24
 
24
25
  Number = -?[0-9]+(\.[0-9]+)?
25
26
  QuotedIdentifierChar = [^\r\n\"\\]
26
- NonQuotedIdentifier = [a-zA-Z$][a-zA-z0-9\.\-_]*
27
+ NonQuotedIdentifier = [a-zA-Z_][a-zA-z0-9_]*
27
28
  StringChar = [^\r\n\'\\]+
28
29
  Newline = \n|\r|\r\n
29
30
 
@@ -82,7 +83,7 @@ Newline = \n|\r|\r\n
82
83
  "\\\\" { string.append( '\\' ); }
83
84
 
84
85
  /* error cases */
85
- \\. { throw new RuntimeException("yylex: Illegal escape sequence \""+yytext()+"\""); }
86
+ \\. { throw new ConfigException("yylex: Illegal escape sequence \""+yytext()+"\""); }
86
87
  }
87
88
 
88
89
  <STRING> {
@@ -101,8 +102,8 @@ Newline = \n|\r|\r\n
101
102
  "\\\\" { string.append( '\\' ); }
102
103
 
103
104
  /* error cases */
104
- \\. { throw new RuntimeException("yylex: Illegal escape sequence \""+yytext()+"\""); }
105
+ \\. { throw new ConfigException("yylex: Illegal escape sequence \""+yytext()+"\""); }
105
106
  }
106
107
 
107
108
  /* error fallback */
108
- [^] { throw new RuntimeException("yylex: Unexpected character '"+yytext()+"'"); }
109
+ [^] { throw new ConfigException("yylex: Unexpected character '"+yytext()+"'"); }
@@ -1,4 +1,5 @@
1
1
  %{
2
+ import org.embulk.config.ConfigException;
2
3
  import org.embulk.spi.Column;
3
4
  import org.embulk.spi.Schema;
4
5
  %}
@@ -124,14 +125,5 @@ private int yylex () {
124
125
 
125
126
  void yyerror(String s)
126
127
  {
127
- throw new RuntimeException("yyerror: " + s);
128
+ throw new ConfigException("yyerror: " + s);
128
129
  }
129
-
130
- /*public static void main(String args[])
131
- {
132
- Parser yyparser = new Parser();
133
- ParserExp exp = yyparser.parse("boolean = true");
134
- HashMap<String, Object> variables = new HashMap<>();
135
- variables.put("boolean", Boolean.TRUE);
136
- System.out.println("ans: " + exp.eval(variables));
137
- }*/
@@ -1,5 +1,6 @@
1
1
  package org.embulk.filter.row.where;
2
2
 
3
+ import org.embulk.config.ConfigException;
3
4
  import org.embulk.spi.Schema;
4
5
  import org.embulk.spi.SchemaConfigException;
5
6
  import org.embulk.spi.time.Timestamp;
@@ -62,10 +63,11 @@ public class TestYylex
62
63
  {
63
64
  Schema schema = Schema.builder()
64
65
  .add("foobar", BOOLEAN)
66
+ .add("_foobar", BOOLEAN)
65
67
  .add("foo bar", BOOLEAN)
66
68
  .add("foo\"bar", BOOLEAN)
67
- .add("$.foo.bar", BOOLEAN) // Support JSONPath someday
68
- .add("$['foo'][0:4][*]", BOOLEAN) // Support JSONPath someday
69
+ .add("$.foo.bar", BOOLEAN)
70
+ .add("$['foo'][0:4][*]", BOOLEAN)
69
71
  .build();
70
72
  yyparser = new Parser(schema);
71
73
 
@@ -81,6 +83,10 @@ public class TestYylex
81
83
  assertNextToken(Parser.IDENTIFIER);
82
84
  assertIdentifier("foobar");
83
85
 
86
+ lexer = new Yylex(" _foobar ", yyparser);
87
+ assertNextToken(Parser.IDENTIFIER);
88
+ assertIdentifier("_foobar");
89
+
84
90
  lexer = new Yylex(" \"foo bar\" ", yyparser);
85
91
  assertNextToken(Parser.IDENTIFIER);
86
92
  assertIdentifier("foo bar");
@@ -89,7 +95,7 @@ public class TestYylex
89
95
  assertNextToken(Parser.IDENTIFIER);
90
96
  assertIdentifier("foo\"bar");
91
97
 
92
- lexer = new Yylex("$.foo.bar", yyparser);
98
+ lexer = new Yylex("\"$.foo.bar\"", yyparser);
93
99
  assertNextToken(Parser.IDENTIFIER);
94
100
  assertIdentifier("$.foo.bar");
95
101
 
@@ -97,12 +103,20 @@ public class TestYylex
97
103
  assertNextToken(Parser.IDENTIFIER);
98
104
  assertIdentifier("$['foo'][0:4][*]");
99
105
 
106
+ try {
107
+ lexer = new Yylex("foo-bar", yyparser);
108
+ assertNextToken(Parser.IDENTIFIER);
109
+ assertTrue(false);
110
+ }
111
+ catch (ConfigException e) {
112
+ }
113
+
100
114
  try {
101
115
  lexer = new Yylex("$['foo'][0:4][*]", yyparser);
102
116
  assertNextToken(Parser.IDENTIFIER);
103
117
  assertTrue(false);
104
118
  }
105
- catch (SchemaConfigException e) {
119
+ catch (ConfigException e) {
106
120
  }
107
121
 
108
122
  try {
@@ -110,7 +124,7 @@ public class TestYylex
110
124
  assertNextToken(Parser.IDENTIFIER);
111
125
  assertTrue(false);
112
126
  }
113
- catch (SchemaConfigException e) {
127
+ catch (ConfigException e) {
114
128
  }
115
129
  }
116
130
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-filter-row
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naotoshi Seo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-05 00:00:00.000000000 Z
11
+ date: 2016-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,7 +65,7 @@ files:
65
65
  - script/byaccj.sh
66
66
  - settings.gradle
67
67
  - src/main/java/org/embulk/filter/row/AbstractGuardColumnVisitor.java
68
- - src/main/java/org/embulk/filter/row/BuildColumnVisitorImpl.java
68
+ - src/main/java/org/embulk/filter/row/BuilderColumnVisitorImpl.java
69
69
  - src/main/java/org/embulk/filter/row/GuardColumnVisitorAndImpl.java
70
70
  - src/main/java/org/embulk/filter/row/GuardColumnVisitorOrImpl.java
71
71
  - src/main/java/org/embulk/filter/row/GuardColumnVisitorWhereImpl.java
@@ -94,7 +94,7 @@ files:
94
94
  - src/test/java/org/embulk/filter/row/condition/TestTimestampCondition.java
95
95
  - src/test/java/org/embulk/filter/row/where/TestParser.java
96
96
  - src/test/java/org/embulk/filter/row/where/TestYylex.java
97
- - classpath/embulk-filter-row-0.3.0.jar
97
+ - classpath/embulk-filter-row-0.3.1.jar
98
98
  homepage: https://github.com/sonots/embulk-filter-row
99
99
  licenses:
100
100
  - MIT
Binary file