aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorThomas G. Lockhart <lockhart@fourpalms.org>2000-03-21 06:00:41 +0000
committerThomas G. Lockhart <lockhart@fourpalms.org>2000-03-21 06:00:41 +0000
commitdcdcada7e9d76f8d7a1d04ac7f9184f286f401cd (patch)
tree45fa32f4e2c5f46877c77dcd462c39d3e44b3fbb /src/backend
parent3c7ca8d459cb06596073f0480c030ed44f0ffa25 (diff)
downloadpostgresql-dcdcada7e9d76f8d7a1d04ac7f9184f286f401cd.tar.gz
postgresql-dcdcada7e9d76f8d7a1d04ac7f9184f286f401cd.zip
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.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/parser/gram.y54
-rw-r--r--src/backend/parser/keywords.c3
2 files changed, 49 insertions, 8 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index a1172d404db..4277f9c7366 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> ParamNo
%type <typnam> Typename, opt_type, SimpleTypename,
- Generic, Numeric, Character, Datetime
-%type <str> generic, numeric, character, datetime
+ Generic, Numeric, Character, Datetime, Bit
+%type <str> generic, numeric, character, datetime, bit
%type <str> extract_arg
%type <str> opt_charset, opt_collate
%type <str> 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
;
@@ -3902,18 +3903,52 @@ 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().
*/
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 5bf703703d3..470a6c95234 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},