@@ -731,12 +731,12 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
731
731
%nonassoc LIKE
732
732
%nonassoc BETWEEN
733
733
%nonassoc IN
734
- %nonassoc Op /* multi-character ops and user-defined operators */
734
+ %left Op /* multi-character ops and user-defined operators */
735
735
%nonassoc NOTNULL
736
736
%nonassoc ISNULL
737
737
%nonassoc IS
738
738
%left ' +' ' -'
739
- %left ' *' ' /'
739
+ %left ' *' ' /' ' % '
740
740
%left ' |' /* this is the relation union op, not logical or */
741
741
/* Unary Operators */
742
742
%right ' :'
@@ -1420,6 +1420,8 @@ default_expr: AexprConst
1420
1420
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
1421
1421
| default_expr ' /' default_expr
1422
1422
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
1423
+ | default_expr ' %' default_expr
1424
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
1423
1425
| default_expr ' *' default_expr
1424
1426
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
1425
1427
| default_expr ' =' default_expr
@@ -1540,6 +1542,8 @@ constraint_expr: AexprConst
1540
1542
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
1541
1543
| constraint_expr ' /' constraint_expr
1542
1544
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
1545
+ | constraint_expr ' %' constraint_expr
1546
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
1543
1547
| constraint_expr ' *' constraint_expr
1544
1548
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
1545
1549
| constraint_expr ' =' constraint_expr
@@ -2260,6 +2264,7 @@ all_Op: Op | MathOp;
2260
2264
MathOp : ' +' { $$ = make1_str(" +" ); }
2261
2265
| ' -' { $$ = make1_str(" -" ); }
2262
2266
| ' *' { $$ = make1_str(" *" ); }
2267
+ | ' %' { $$ = make1_str(" %" ); }
2263
2268
| ' /' { $$ = make1_str(" /" ); }
2264
2269
| ' <' { $$ = make1_str(" <" ); }
2265
2270
| ' >' { $$ = make1_str(" >" ); }
@@ -3524,6 +3529,7 @@ row_op: Op { $$ = $1; }
3524
3529
| ' +' { $$ = " +" ; }
3525
3530
| ' -' { $$ = " -" ; }
3526
3531
| ' *' { $$ = " *" ; }
3532
+ | ' %' { $$ = " %" ; }
3527
3533
| ' /' { $$ = " /" ; }
3528
3534
;
3529
3535
@@ -3571,6 +3577,8 @@ a_expr: attr opt_indirection
3571
3577
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
3572
3578
| a_expr ' /' a_expr
3573
3579
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
3580
+ | a_expr ' %' a_expr
3581
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
3574
3582
| a_expr ' *' a_expr
3575
3583
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
3576
3584
| a_expr ' <' a_expr
@@ -3747,6 +3755,10 @@ a_expr: attr opt_indirection
3747
3755
{
3748
3756
$$ = make4_str($1 , make1_str(" /(" ), $4 , make1_str(" )" ));
3749
3757
}
3758
+ | a_expr ' %' ' (' SubSelect ' )'
3759
+ {
3760
+ $$ = make4_str($1 , make1_str(" %(" ), $4 , make1_str(" )" ));
3761
+ }
3750
3762
| a_expr ' *' ' (' SubSelect ' )'
3751
3763
{
3752
3764
$$ = make4_str($1 , make1_str(" *(" ), $4 , make1_str(" )" ));
@@ -3769,63 +3781,71 @@ a_expr: attr opt_indirection
3769
3781
}
3770
3782
| a_expr ' +' ANY ' (' SubSelect ' )'
3771
3783
{
3772
- $$ = make4_str($1 , make1_str(" +any(" ), $5 , make1_str(" )" ));
3784
+ $$ = make4_str($1 , make1_str(" + any(" ), $5 , make1_str(" )" ));
3773
3785
}
3774
3786
| a_expr ' -' ANY ' (' SubSelect ' )'
3775
3787
{
3776
- $$ = make4_str($1 , make1_str(" -any(" ), $5 , make1_str(" )" ));
3788
+ $$ = make4_str($1 , make1_str(" - any(" ), $5 , make1_str(" )" ));
3777
3789
}
3778
3790
| a_expr ' /' ANY ' (' SubSelect ' )'
3779
3791
{
3780
- $$ = make4_str($1 , make1_str(" /any(" ), $5 , make1_str(" )" ));
3792
+ $$ = make4_str($1 , make1_str(" / any(" ), $5 , make1_str(" )" ));
3793
+ }
3794
+ | a_expr ' %' ANY ' (' SubSelect ' )'
3795
+ {
3796
+ $$ = make4_str($1 , make1_str(" % any(" ), $5 , make1_str(" )" ));
3781
3797
}
3782
3798
| a_expr ' *' ANY ' (' SubSelect ' )'
3783
3799
{
3784
- $$ = make4_str($1 , make1_str(" *any(" ), $5 , make1_str(" )" ));
3800
+ $$ = make4_str($1 , make1_str(" * any(" ), $5 , make1_str(" )" ));
3785
3801
}
3786
3802
| a_expr ' <' ANY ' (' SubSelect ' )'
3787
3803
{
3788
- $$ = make4_str($1 , make1_str(" <any(" ), $5 , make1_str(" )" ));
3804
+ $$ = make4_str($1 , make1_str(" < any(" ), $5 , make1_str(" )" ));
3789
3805
}
3790
3806
| a_expr ' >' ANY ' (' SubSelect ' )'
3791
3807
{
3792
- $$ = make4_str($1 , make1_str(" >any(" ), $5 , make1_str(" )" ));
3808
+ $$ = make4_str($1 , make1_str(" > any(" ), $5 , make1_str(" )" ));
3793
3809
}
3794
3810
| a_expr ' =' ANY ' (' SubSelect ' )'
3795
3811
{
3796
- $$ = make4_str($1 , make1_str(" =any(" ), $5 , make1_str(" )" ));
3812
+ $$ = make4_str($1 , make1_str(" = any(" ), $5 , make1_str(" )" ));
3797
3813
}
3798
3814
| a_expr Op ALL ' (' SubSelect ' )'
3799
3815
{
3800
3816
$$ = cat3_str($1 , $2 , make3_str(make1_str(" all (" ), $5 , make1_str(" )" )));
3801
3817
}
3802
3818
| a_expr ' +' ALL ' (' SubSelect ' )'
3803
3819
{
3804
- $$ = make4_str($1 , make1_str(" +all(" ), $5 , make1_str(" )" ));
3820
+ $$ = make4_str($1 , make1_str(" + all(" ), $5 , make1_str(" )" ));
3805
3821
}
3806
3822
| a_expr ' -' ALL ' (' SubSelect ' )'
3807
3823
{
3808
- $$ = make4_str($1 , make1_str(" -all(" ), $5 , make1_str(" )" ));
3824
+ $$ = make4_str($1 , make1_str(" - all(" ), $5 , make1_str(" )" ));
3809
3825
}
3810
3826
| a_expr ' /' ALL ' (' SubSelect ' )'
3811
3827
{
3812
- $$ = make4_str($1 , make1_str(" /all(" ), $5 , make1_str(" )" ));
3828
+ $$ = make4_str($1 , make1_str(" / all(" ), $5 , make1_str(" )" ));
3829
+ }
3830
+ | a_expr ' %' ALL ' (' SubSelect ' )'
3831
+ {
3832
+ $$ = make4_str($1 , make1_str(" % all(" ), $5 , make1_str(" )" ));
3813
3833
}
3814
3834
| a_expr ' *' ALL ' (' SubSelect ' )'
3815
3835
{
3816
- $$ = make4_str($1 , make1_str(" *all(" ), $5 , make1_str(" )" ));
3836
+ $$ = make4_str($1 , make1_str(" * all(" ), $5 , make1_str(" )" ));
3817
3837
}
3818
3838
| a_expr ' <' ALL ' (' SubSelect ' )'
3819
3839
{
3820
- $$ = make4_str($1 , make1_str(" <all(" ), $5 , make1_str(" )" ));
3840
+ $$ = make4_str($1 , make1_str(" < all(" ), $5 , make1_str(" )" ));
3821
3841
}
3822
3842
| a_expr ' >' ALL ' (' SubSelect ' )'
3823
3843
{
3824
- $$ = make4_str($1 , make1_str(" >all(" ), $5 , make1_str(" )" ));
3844
+ $$ = make4_str($1 , make1_str(" > all(" ), $5 , make1_str(" )" ));
3825
3845
}
3826
3846
| a_expr ' =' ALL ' (' SubSelect ' )'
3827
3847
{
3828
- $$ = make4_str($1 , make1_str(" =all(" ), $5 , make1_str(" )" ));
3848
+ $$ = make4_str($1 , make1_str(" = all(" ), $5 , make1_str(" )" ));
3829
3849
}
3830
3850
| a_expr AND a_expr
3831
3851
{ $$ = cat3_str($1 , make1_str(" and" ), $3 ); }
@@ -3862,6 +3882,8 @@ b_expr: attr opt_indirection
3862
3882
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
3863
3883
| b_expr ' /' b_expr
3864
3884
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
3885
+ | b_expr ' %' b_expr
3886
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
3865
3887
| b_expr ' *' b_expr
3866
3888
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
3867
3889
/* not possible in embedded sql | ':' b_expr
@@ -4011,6 +4033,8 @@ position_expr: attr opt_indirection
4011
4033
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
4012
4034
| position_expr ' /' position_expr
4013
4035
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
4036
+ | position_expr ' %' position_expr
4037
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
4014
4038
| position_expr ' *' position_expr
4015
4039
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
4016
4040
| ' |' position_expr
@@ -5583,6 +5607,8 @@ ecpg_expr: attr opt_indirection
5583
5607
{ $$ = cat3_str($1 , make1_str(" -" ), $3 ); }
5584
5608
| a_expr ' /' ecpg_expr
5585
5609
{ $$ = cat3_str($1 , make1_str(" /" ), $3 ); }
5610
+ | a_expr ' %' ecpg_expr
5611
+ { $$ = cat3_str($1 , make1_str(" %" ), $3 ); }
5586
5612
| a_expr ' *' ecpg_expr
5587
5613
{ $$ = cat3_str($1 , make1_str(" *" ), $3 ); }
5588
5614
| a_expr ' <' ecpg_expr
@@ -5751,6 +5777,10 @@ ecpg_expr: attr opt_indirection
5751
5777
{
5752
5778
$$ = make4_str($1 , make1_str(" /(" ), $4 , make1_str(" )" ));
5753
5779
}
5780
+ | a_expr ' %' ' (' SubSelect ' )'
5781
+ {
5782
+ $$ = make4_str($1 , make1_str(" %(" ), $4 , make1_str(" )" ));
5783
+ }
5754
5784
| a_expr ' *' ' (' SubSelect ' )'
5755
5785
{
5756
5786
$$ = make4_str($1 , make1_str(" *(" ), $4 , make1_str(" )" ));
@@ -5773,59 +5803,67 @@ ecpg_expr: attr opt_indirection
5773
5803
}
5774
5804
| a_expr ' +' ANY ' (' SubSelect ' )'
5775
5805
{
5776
- $$ = make4_str($1 , make1_str(" +any(" ), $5 , make1_str(" )" ));
5806
+ $$ = make4_str($1 , make1_str(" + any(" ), $5 , make1_str(" )" ));
5777
5807
}
5778
5808
| a_expr ' -' ANY ' (' SubSelect ' )'
5779
5809
{
5780
- $$ = make4_str($1 , make1_str(" -any(" ), $5 , make1_str(" )" ));
5810
+ $$ = make4_str($1 , make1_str(" - any(" ), $5 , make1_str(" )" ));
5781
5811
}
5782
5812
| a_expr ' /' ANY ' (' SubSelect ' )'
5783
5813
{
5784
- $$ = make4_str($1 , make1_str(" /any(" ), $5 , make1_str(" )" ));
5814
+ $$ = make4_str($1 , make1_str(" / any(" ), $5 , make1_str(" )" ));
5815
+ }
5816
+ | a_expr ' %' ANY ' (' SubSelect ' )'
5817
+ {
5818
+ $$ = make4_str($1 , make1_str(" % any(" ), $5 , make1_str(" )" ));
5785
5819
}
5786
5820
| a_expr ' *' ANY ' (' SubSelect ' )'
5787
5821
{
5788
- $$ = make4_str($1 , make1_str(" *any(" ), $5 , make1_str(" )" ));
5822
+ $$ = make4_str($1 , make1_str(" * any(" ), $5 , make1_str(" )" ));
5789
5823
}
5790
5824
| a_expr ' <' ANY ' (' SubSelect ' )'
5791
5825
{
5792
- $$ = make4_str($1 , make1_str(" <any(" ), $5 , make1_str(" )" ));
5826
+ $$ = make4_str($1 , make1_str(" < any(" ), $5 , make1_str(" )" ));
5793
5827
}
5794
5828
| a_expr ' >' ANY ' (' SubSelect ' )'
5795
5829
{
5796
- $$ = make4_str($1 , make1_str(" >any(" ), $5 , make1_str(" )" ));
5830
+ $$ = make4_str($1 , make1_str(" > any(" ), $5 , make1_str(" )" ));
5797
5831
}
5798
5832
| a_expr ' =' ANY ' (' SubSelect ' )'
5799
5833
{
5800
- $$ = make4_str($1 , make1_str(" =any(" ), $5 , make1_str(" )" ));
5834
+ $$ = make4_str($1 , make1_str(" = any(" ), $5 , make1_str(" )" ));
5801
5835
}
5802
5836
| a_expr Op ALL ' (' SubSelect ' )'
5803
5837
{
5804
5838
$$ = make3_str($1 , $2 , make3_str(make1_str(" all (" ), $5 , make1_str(" )" )));
5805
5839
}
5806
5840
| a_expr ' +' ALL ' (' SubSelect ' )'
5807
5841
{
5808
- $$ = make4_str($1 , make1_str(" +all(" ), $5 , make1_str(" )" ));
5842
+ $$ = make4_str($1 , make1_str(" + all(" ), $5 , make1_str(" )" ));
5809
5843
}
5810
5844
| a_expr ' -' ALL ' (' SubSelect ' )'
5811
5845
{
5812
- $$ = make4_str($1 , make1_str(" -all(" ), $5 , make1_str(" )" ));
5846
+ $$ = make4_str($1 , make1_str(" - all(" ), $5 , make1_str(" )" ));
5813
5847
}
5814
5848
| a_expr ' /' ALL ' (' SubSelect ' )'
5815
5849
{
5816
- $$ = make4_str($1 , make1_str(" /all(" ), $5 , make1_str(" )" ));
5850
+ $$ = make4_str($1 , make1_str(" / all(" ), $5 , make1_str(" )" ));
5851
+ }
5852
+ | a_expr ' %' ALL ' (' SubSelect ' )'
5853
+ {
5854
+ $$ = make4_str($1 , make1_str(" % all(" ), $5 , make1_str(" )" ));
5817
5855
}
5818
5856
| a_expr ' *' ALL ' (' SubSelect ' )'
5819
5857
{
5820
- $$ = make4_str($1 , make1_str(" *all(" ), $5 , make1_str(" )" ));
5858
+ $$ = make4_str($1 , make1_str(" * all(" ), $5 , make1_str(" )" ));
5821
5859
}
5822
5860
| a_expr ' <' ALL ' (' SubSelect ' )'
5823
5861
{
5824
- $$ = make4_str($1 , make1_str(" <all(" ), $5 , make1_str(" )" ));
5862
+ $$ = make4_str($1 , make1_str(" < all(" ), $5 , make1_str(" )" ));
5825
5863
}
5826
5864
| a_expr ' >' ALL ' (' SubSelect ' )'
5827
5865
{
5828
- $$ = make4_str($1 , make1_str(" >all(" ), $5 , make1_str(" )" ));
5866
+ $$ = make4_str($1 , make1_str(" > all(" ), $5 , make1_str(" )" ));
5829
5867
}
5830
5868
| a_expr ' =' ALL ' (' SubSelect ' )'
5831
5869
{
0 commit comments