*sigh*

I actually attached the diff this time...

Chris

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of Christopher
> Kings-Lynne
> Sent: Wednesday, 3 April 2002 12:26 PM
> To: Hackers
> Subject: [HACKERS] BETWEEN SYMMETRIC/ASYMMETRIC
>
>
> Hi All,
>
> As part of my ongoing quest to understand grammar files, I've
> been trying to
> implement BETWEEN SYMMETRIC/ASYMMETRIC.
>
> I've attached my current work.  Can someone please look and tell me if I'm
> on the right track?  With this patch, I get parse errors after
> BETWEEN if I
> go:
>
> SELECT 2 BETWEEN ASYMMETRIC 1 and 3;
>
> or
>
> SELECT 2 BETWEEN SYMMETRIC 1 and 3;
>
> So it doesn't seem to be working - I don't know why!!
>
> Don't look at the NOT BETWEEN stuff - I've not done it yet.
>
> I was forced to put SYMMETRIC and ASYMMETRIC as reserved words - anything
> else seemed to give shift/reduce errors.  Is there anything I can do about
> that?
>
> Chris
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
>
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.299
diff -c -r2.299 gram.y
*** src/backend/parser/gram.y   2002/04/01 04:35:38     2.299
--- src/backend/parser/gram.y   2002/04/03 04:21:13
***************
*** 148,154 ****
                                simple_select
  
  %type <node>    alter_column_default
! %type <ival>    drop_behavior, opt_drop_behavior
  
  %type <list>  createdb_opt_list, createdb_opt_item
  %type <boolean>       opt_equal
--- 148,154 ----
                                simple_select
  
  %type <node>    alter_column_default
! %type <ival>    drop_behavior, opt_drop_behavior, opt_asymmetry
  
  %type <list>  createdb_opt_list, createdb_opt_item
  %type <boolean>       opt_equal
***************
*** 344,350 ****
                IMMEDIATE, INITIALLY, INOUT,
                OFF, OUT,
                PATH_P, PENDANT,
!               REPLACE, RESTRICT,
          TRIGGER,
                WITHOUT
  
--- 344,350 ----
                IMMEDIATE, INITIALLY, INOUT,
                OFF, OUT,
                PATH_P, PENDANT,
!               REPLACE, RESTRICT, SYMMETRIC, ASYMMETRIC,
          TRIGGER,
                WITHOUT
  
***************
*** 4948,4964 ****
                                        b->booltesttype = IS_NOT_UNKNOWN;
                                        $$ = (Node *)b;
                                }
!               | a_expr BETWEEN b_expr AND b_expr                      %prec BETWEEN
                                {
!                                       $$ = makeA_Expr(AND, NULL,
!                                               makeA_Expr(OP, ">=", $1, $3),
!                                               makeA_Expr(OP, "<=", $1, $5));
                                }
!               | a_expr NOT BETWEEN b_expr AND b_expr          %prec BETWEEN
                                {
                                        $$ = makeA_Expr(OR, NULL,
!                                               makeA_Expr(OP, "<", $1, $4),
!                                               makeA_Expr(OP, ">", $1, $6));
                                }
                | a_expr IN in_expr
                                {
--- 4948,4975 ----
                                        b->booltesttype = IS_NOT_UNKNOWN;
                                        $$ = (Node *)b;
                                }
!               | a_expr BETWEEN opt_asymmetry b_expr AND b_expr                       
 %prec BETWEEN
                                {
!                                       if ($3 == SYMMETRIC)
!                                               $$ = makeA_Expr(OR, NULL,
!                                                       makeA_Expr(AND, NULL,
!                                                               makeA_Expr(OP, ">=", 
$1, $4),
!                                                               makeA_Expr(OP, "<=", 
$1, $6)),
!                                                       makeA_Expr(AND, NULL,
!                                                               makeA_Expr(OP, ">=", 
$1, $6),
!                                                               makeA_Expr(OP, "<=", 
$1, $4))
!                                               );
!                                       else
!                                               $$ = makeA_Expr(AND, NULL,
!                                                               makeA_Expr(OP, ">=", 
$1, $4),
!                                                               makeA_Expr(OP, "<=", 
$1, $6));
! 
                                }
!               | a_expr NOT BETWEEN opt_asymmetry b_expr AND b_expr            %prec 
BETWEEN
                                {
                                        $$ = makeA_Expr(OR, NULL,
!                                               makeA_Expr(OP, "<", $1, $5),
!                                               makeA_Expr(OP, ">", $1, $7));
                                }
                | a_expr IN in_expr
                                {
***************
*** 5663,5668 ****
--- 5674,5685 ----
                                        | /*EMPTY*/ { $$ = TRUE; }
                ;
  
+ opt_asymmetry: ASYMMETRIC                     { $$ = ASYMMETRIC; }
+               | SYMMETRIC                                             { $$ = 
+SYMMETRIC; }
+               | /* EMPTY */                                   { $$ = ASYMMETRIC; /* 
+default */ }
+               ;
+ 
+ 
  /*****************************************************************************
   *
   *    target lists
***************
*** 6190,6195 ****
--- 6207,6213 ----
                | AND                                                   { $$ = "and"; }
                | ANY                                                   { $$ = "any"; }
                | AS                                                    { $$ = "as"; }
+               | ASYMMETRIC                                            { $$ = 
+"asymmetric"; }
                | ASC                                                   { $$ = "asc"; }
                | BOTH                                                  { $$ = "both"; 
}
                | CASE                                                  { $$ = "case"; 
}
***************
*** 6238,6243 ****
--- 6256,6262 ----
                | SELECT                                                { $$ = 
"select"; }
                | SESSION_USER                                  { $$ = "session_user"; 
}
                | SOME                                                  { $$ = "some"; 
}
+               | SYMMETRIC                                             { $$ = 
+"symmetric"; }
                | TABLE                                                 { $$ = 
"table"; }
                | THEN                                                  { $$ = "then"; 
}
                | TO                                                    { $$ = "to"; }

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to