11
11
*
12
12
*
13
13
* IDENTIFICATION
14
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.161 2000/03/20 05:20:34 tgl Exp $
14
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.162 2000/03/21 06:00:40 thomas Exp $
15
15
*
16
16
* HISTORY
17
17
* AUTHOR DATE MAJOR EVENT
@@ -249,8 +249,8 @@ static void doNegateFloat(Value *v);
249
249
%type <paramno> ParamNo
250
250
251
251
%type <typnam> Typename , opt_type , SimpleTypename ,
252
- Generic , Numeric , Character , Datetime
253
- %type <str> generic , numeric , character , datetime
252
+ Generic , Numeric , Character , Datetime , Bit
253
+ %type <str> generic , numeric , character , datetime , bit
254
254
%type <str> extract_arg
255
255
%type <str> opt_charset , opt_collate
256
256
%type <str> opt_float
@@ -334,7 +334,7 @@ static void doNegateFloat(Value *v);
334
334
* - Todd A. Brandys 1998-01-01?
335
335
*/
336
336
%token ABORT_TRANS , ACCESS , AFTER , AGGREGATE , ANALYZE ,
337
- BACKWARD , BEFORE , BINARY ,
337
+ BACKWARD , BEFORE , BINARY , BIT ,
338
338
CACHE , CLUSTER , COMMENT , COPY , CREATEDB , CREATEUSER , CYCLE ,
339
339
DATABASE , DELIMITERS , DO ,
340
340
EACH , ENCODING , EXCLUSIVE , EXPLAIN , EXTEND ,
@@ -3766,6 +3766,7 @@ Typename: SimpleTypename opt_array_bounds
3766
3766
3767
3767
SimpleTypename : Generic
3768
3768
| Numeric
3769
+ | Bit
3769
3770
| Character
3770
3771
| Datetime
3771
3772
;
@@ -3901,19 +3902,53 @@ opt_decimal: '(' Iconst ',' Iconst ')'
3901
3902
;
3902
3903
3903
3904
3905
+ /*
3906
+ * SQL92 bit-field data types
3907
+ * The following implements BIT() and BIT VARYING().
3908
+ */
3909
+ Bit : bit ' (' Iconst ' )'
3910
+ {
3911
+ $$ = makeNode(TypeName);
3912
+ $$ ->name = $1 ;
3913
+ if ($3 < 1 )
3914
+ elog (ERROR," length for type '%s' must be at least 1" ,$1 );
3915
+ else if ($3 > (MaxAttrSize * sizeof (char )))
3916
+ elog (ERROR," length for type '%s' cannot exceed %ld" ,$1 ,
3917
+ (MaxAttrSize * sizeof (char )));
3918
+ $$ ->typmod = $3 ;
3919
+ }
3920
+ | bit
3921
+ {
3922
+ $$ = makeNode(TypeName);
3923
+ $$ ->name = $1 ;
3924
+ /* default length, if needed, will be inserted later */
3925
+ $$ ->typmod = -1 ;
3926
+ }
3927
+ ;
3928
+
3929
+ bit : BIT opt_varying
3930
+ {
3931
+ char *type;
3932
+
3933
+ if ($2 ) type = xlateSqlType(" varbit" );
3934
+ else type = xlateSqlType(" bit" );
3935
+ $$ = type;
3936
+ }
3937
+
3938
+
3904
3939
/*
3905
3940
* SQL92 character data types
3906
3941
* The following implements CHAR() and VARCHAR().
3907
3942
*/
3908
3943
Character : character ' (' Iconst ' )'
3909
3944
{
3910
3945
$$ = makeNode(TypeName);
3911
- $$ ->name = xlateSqlType( $1 ) ;
3946
+ $$ ->name = $1 ;
3912
3947
if ($3 < 1 )
3913
3948
elog (ERROR," length for type '%s' must be at least 1" ,$1 );
3914
3949
else if ($3 > MaxAttrSize)
3915
3950
elog (ERROR," length for type '%s' cannot exceed %ld" ,$1 ,
3916
- MaxAttrSize);
3951
+ MaxAttrSize);
3917
3952
3918
3953
/* we actually implement these like a varlen, so
3919
3954
* the first 4 bytes is the length. (the difference
@@ -3925,7 +3960,7 @@ Character: character '(' Iconst ')'
3925
3960
| character
3926
3961
{
3927
3962
$$ = makeNode(TypeName);
3928
- $$ ->name = xlateSqlType( $1 ) ;
3963
+ $$ ->name = $1 ;
3929
3964
/* default length, if needed, will be inserted later */
3930
3965
$$ ->typmod = -1 ;
3931
3966
}
@@ -5198,9 +5233,12 @@ TypeId: ColId
5198
5233
{ $$ = xlateSqlType($1 ); }
5199
5234
| numeric
5200
5235
{ $$ = xlateSqlType($1 ); }
5236
+ | bit
5237
+ { $$ = xlateSqlType($1 ); }
5201
5238
| character
5202
5239
{ $$ = xlateSqlType($1 ); }
5203
5240
;
5241
+
5204
5242
/* Column identifier
5205
5243
* Include date/time keywords as SQL92 extension.
5206
5244
* Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05
@@ -5316,7 +5354,9 @@ ColLabel: ColId { $$ = $1; }
5316
5354
| ABORT_TRANS { $$ = " abort" ; }
5317
5355
| ANALYZE { $$ = " analyze" ; }
5318
5356
| BINARY { $$ = " binary" ; }
5357
+ | BIT { $$ = " bit" ; }
5319
5358
| CASE { $$ = " case" ; }
5359
+ | CHARACTER { $$ = " character" ; }
5320
5360
| CLUSTER { $$ = " cluster" ; }
5321
5361
| COALESCE { $$ = " coalesce" ; }
5322
5362
| CONSTRAINT { $$ = " constraint" ; }
0 commit comments