embulk-filter-row 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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