From dcdcada7e9d76f8d7a1d04ac7f9184f286f401cd Mon Sep 17 00:00:00 2001 From: "Thomas G. Lockhart" Date: Tue, 21 Mar 2000 06:00:41 +0000 Subject: [PATCH] Add syntax for BIT() and BIT VARYING(), but no underlying implementation is available yet. Remove redundant call to xlateSqlType() in the character type handling code. --- src/backend/parser/gram.y | 54 ++++++++++++++++++++++++++++++----- src/backend/parser/keywords.c | 3 +- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a1172d404d..4277f9c736 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.161 2000/03/20 05:20:34 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.162 2000/03/21 06:00:40 thomas Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -249,8 +249,8 @@ static void doNegateFloat(Value *v); %type ParamNo %type Typename, opt_type, SimpleTypename, - Generic, Numeric, Character, Datetime -%type generic, numeric, character, datetime + Generic, Numeric, Character, Datetime, Bit +%type generic, numeric, character, datetime, bit %type extract_arg %type opt_charset, opt_collate %type opt_float @@ -334,7 +334,7 @@ static void doNegateFloat(Value *v); * - Todd A. Brandys 1998-01-01? */ %token ABORT_TRANS, ACCESS, AFTER, AGGREGATE, ANALYZE, - BACKWARD, BEFORE, BINARY, + BACKWARD, BEFORE, BINARY, BIT, CACHE, CLUSTER, COMMENT, COPY, CREATEDB, CREATEUSER, CYCLE, DATABASE, DELIMITERS, DO, EACH, ENCODING, EXCLUSIVE, EXPLAIN, EXTEND, @@ -3766,6 +3766,7 @@ Typename: SimpleTypename opt_array_bounds SimpleTypename: Generic | Numeric + | Bit | Character | Datetime ; @@ -3901,6 +3902,40 @@ opt_decimal: '(' Iconst ',' Iconst ')' ; +/* + * SQL92 bit-field data types + * The following implements BIT() and BIT VARYING(). + */ +Bit: bit '(' Iconst ')' + { + $$ = makeNode(TypeName); + $$->name = $1; + if ($3 < 1) + elog(ERROR,"length for type '%s' must be at least 1",$1); + else if ($3 > (MaxAttrSize * sizeof(char))) + elog(ERROR,"length for type '%s' cannot exceed %ld",$1, + (MaxAttrSize * sizeof(char))); + $$->typmod = $3; + } + | bit + { + $$ = makeNode(TypeName); + $$->name = $1; + /* default length, if needed, will be inserted later */ + $$->typmod = -1; + } + ; + +bit: BIT opt_varying + { + char *type; + + if ($2) type = xlateSqlType("varbit"); + else type = xlateSqlType("bit"); + $$ = type; + } + + /* * SQL92 character data types * The following implements CHAR() and VARCHAR(). @@ -3908,12 +3943,12 @@ opt_decimal: '(' Iconst ',' Iconst ')' Character: character '(' Iconst ')' { $$ = makeNode(TypeName); - $$->name = xlateSqlType($1); + $$->name = $1; if ($3 < 1) elog(ERROR,"length for type '%s' must be at least 1",$1); else if ($3 > MaxAttrSize) elog(ERROR,"length for type '%s' cannot exceed %ld",$1, - MaxAttrSize); + MaxAttrSize); /* we actually implement these like a varlen, so * the first 4 bytes is the length. (the difference @@ -3925,7 +3960,7 @@ Character: character '(' Iconst ')' | character { $$ = makeNode(TypeName); - $$->name = xlateSqlType($1); + $$->name = $1; /* default length, if needed, will be inserted later */ $$->typmod = -1; } @@ -5198,9 +5233,12 @@ TypeId: ColId { $$ = xlateSqlType($1); } | numeric { $$ = xlateSqlType($1); } + | bit + { $$ = xlateSqlType($1); } | character { $$ = xlateSqlType($1); } ; + /* Column identifier * Include date/time keywords as SQL92 extension. * Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05 @@ -5316,7 +5354,9 @@ ColLabel: ColId { $$ = $1; } | ABORT_TRANS { $$ = "abort"; } | ANALYZE { $$ = "analyze"; } | BINARY { $$ = "binary"; } + | BIT { $$ = "bit"; } | CASE { $$ = "case"; } + | CHARACTER { $$ = "character"; } | CLUSTER { $$ = "cluster"; } | COALESCE { $$ = "coalesce"; } | CONSTRAINT { $$ = "constraint"; } diff --git a/src/backend/parser/keywords.c b/src/backend/parser/keywords.c index 5bf703703d..470a6c9523 100644 --- a/src/backend/parser/keywords.c +++ b/src/backend/parser/keywords.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.68 2000/03/14 23:06:32 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.69 2000/03/21 06:00:41 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -47,6 +47,7 @@ static ScanKeyword ScanKeywords[] = { {"begin", BEGIN_TRANS}, {"between", BETWEEN}, {"binary", BINARY}, + {"bit", BIT}, {"both", BOTH}, {"by", BY}, {"cache", CACHE},