Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
3bb89a27
Commit
3bb89a27
authored
Sep 20, 1997
by
Thomas G. Lockhart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for FLOAT(p) SQL/92 data type.
Allow ALTER TABLE ADD ( column ) syntax.
parent
007e4d9a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
34 deletions
+62
-34
src/backend/parser/gram.y
src/backend/parser/gram.y
+60
-33
src/backend/parser/keywords.c
src/backend/parser/keywords.c
+2
-1
No files found.
src/backend/parser/gram.y
View file @
3bb89a27
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.4
7 1997/09/18 03:46:18
thomas Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.4
8 1997/09/20 16:11:42
thomas Exp $
*
*
* HISTORY
* HISTORY
* AUTHOR DATE MAJOR EVENT
* AUTHOR DATE MAJOR EVENT
...
@@ -207,27 +207,31 @@ static char *FlattenStringList(List *list);
...
@@ -207,27 +207,31 @@ static char *FlattenStringList(List *list);
/* Keywords */
/* Keywords */
%token ABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, ANALYZE,
%token ABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, ANALYZE,
AND, APPEND, ARCHIVE, ARCH_STORE, AS, ASC,
AND, APPEND, ARCHIVE, ARCH_STORE, AS, ASC,
BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN, BINARY, B
OTH, B
Y,
BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN, BINARY, BY,
CAST, CHANGE, CHECK, CLOSE, CLUSTER, COLUMN,
CAST, CHANGE, CHECK, CLOSE, CLUSTER, COLUMN,
COMMIT, CONSTRAINT, COPY, CREATE, CROSS, CURRENT, CURSOR,
COMMIT, CONSTRAINT, COPY, CREATE, CROSS, CURRENT, CURSOR,
DATABASE, D
AYINTERVAL, D
ECLARE, DEFAULT, DELETE, DELIMITERS, DESC,
DATABASE, DECLARE, DEFAULT, DELETE, DELIMITERS, DESC,
DISTINCT, DO, DROP, END_TRANS, EXISTS, EXTEND,
DISTINCT, DO, DROP, END_TRANS, EXISTS, EXTEND,
FETCH, FOR, FORWARD, FROM, FULL, FUNCTION, GRANT, GROUP, HAVING, HEAVY,
HOURINTERVAL,
FETCH, FOR, FORWARD, FROM, FULL, FUNCTION, GRANT, GROUP, HAVING, HEAVY,
IN, INDEX, INHERITS, INNERJOIN, INSERT, IN
TERVAL, IN
STEAD, INTO, IS, ISNULL,
IN, INDEX, INHERITS, INNERJOIN, INSERT, INSTEAD, INTO, IS, ISNULL,
JOIN, LANGUAGE, LE
ADING, LEFT, LIGHT, LISTEN, LOAD, LOCAL, MERGE, MINUTEINTERVAL, MONTHINTERVAL
, MOVE,
JOIN, LANGUAGE, LE
FT, LIGHT, LISTEN, LOAD, LOCAL, MERGE
, MOVE,
NATURAL, NEW, NONE, NOT, NOTHING, NOTIFY, NOTNULL,
NATURAL, NEW, NONE, NOT, NOTHING, NOTIFY, NOTNULL,
OIDS, ON, OPERATOR, OPTION, OR, ORDER, OUTERJOIN,
OIDS, ON, OPERATOR, OPTION, OR, ORDER, OUTERJOIN,
PNULL, PRIVILEGES, PROCEDURE, PUBLIC, PURGE, P_TYPE,
PNULL, PRIVILEGES, PROCEDURE, PUBLIC, PURGE, P_TYPE,
RENAME, REPLACE, RESET, RETRIEVE, RETURNS, REVOKE, RIGHT, ROLLBACK, RULE,
RENAME, REPLACE, RESET, RETRIEVE, RETURNS, REVOKE, RIGHT, ROLLBACK, RULE,
SE
CONDINTERVAL, SE
LECT, SET, SETOF, SHOW, STDIN, STDOUT, STORE,
SELECT, SET, SETOF, SHOW, STDIN, STDOUT, STORE,
TABLE, T
IME, TO, TRAILING
, TRANSACTION, TRIGGER,
TABLE, T
O
, TRANSACTION, TRIGGER,
UNION, UNIQUE, UPDATE, USING, VACUUM, VALUES,
UNION, UNIQUE, UPDATE, USING, VACUUM, VALUES,
VERBOSE, VERSION, VIEW, WHERE, WITH, WORK
, YEARINTERVAL, ZONE
VERBOSE, VERSION, VIEW, WHERE, WITH, WORK
%token EXECUTE, RECIPE, EXPLAIN, LIKE, SEQUENCE
%token EXECUTE, RECIPE, EXPLAIN, LIKE, SEQUENCE
/* SQL-92 support */
/* SQL-92 support */
%token INTERVAL, TIME, ZONE
%token DAYINTERVAL, HOURINTERVAL, MINUTEINTERVAL, MONTHINTERVAL,
SECONDINTERVAL, YEARINTERVAL
%token BOTH, LEADING, TRAILING,
%token EXTRACT, POSITION, SUBSTRING, TRIM
%token EXTRACT, POSITION, SUBSTRING, TRIM
%token DOUBLE, PRECISION
%token DOUBLE, PRECISION
, FLOAT
%token CHARACTER, VARYING
%token CHARACTER, VARYING
/* Special keywords, not in the query language - see the "lex" file */
/* Special keywords, not in the query language - see the "lex" file */
...
@@ -391,6 +395,17 @@ alter_clause: ADD opt_column columnDef
...
@@ -391,6 +395,17 @@ alter_clause: ADD opt_column columnDef
{
{
$$ = $3;
$$ = $3;
}
}
| ADD '(' tableElementList ')'
{
ColumnDef *lp = lfirst($3);
if (length($3) != 1)
elog(WARN,"ALTER TABLE/ADD() allows one column only",NULL);
#ifdef PARSEDEBUG
printf( "list has %d elements\n", length($3));
#endif
$$ = lp;
}
| DROP opt_column Id
| DROP opt_column Id
{ elog(WARN,"ALTER TABLE/DROP COLUMN not yet implemented",NULL); }
{ elog(WARN,"ALTER TABLE/DROP COLUMN not yet implemented",NULL); }
| ALTER opt_column Id SET opt_default
| ALTER opt_column Id SET opt_default
...
@@ -2299,10 +2314,21 @@ nest_array_bounds: '[' ']' nest_array_bounds
...
@@ -2299,10 +2314,21 @@ nest_array_bounds: '[' ']' nest_array_bounds
{ $$ = NIL; }
{ $$ = NIL; }
;
;
/*
* typname handles types without trailing parens for size specification.
* Typename uses either typname or explicit txname(size).
* So, must handle float in both places. - thomas 1997-09-20
*/
typname: txname
typname: txname
{
{
char *tname
= xlateSqlType($1)
;
char *tname;
$$ = makeNode(TypeName);
$$ = makeNode(TypeName);
if (!strcasecmp($1, "float"))
tname = xlateSqlType("float8");
else
tname = xlateSqlType($1);
$$->name = tname;
$$->name = tname;
/* Is this the name of a complex type? If so, implement
/* Is this the name of a complex type? If so, implement
...
@@ -2336,6 +2362,7 @@ txname: Id { $$ = $1; }
...
@@ -2336,6 +2362,7 @@ txname: Id { $$ = $1; }
| INTERVAL interval_opts { $$ = xlateSqlType("interval"); }
| INTERVAL interval_opts { $$ = xlateSqlType("interval"); }
| CHARACTER char_type { $$ = $2; }
| CHARACTER char_type { $$ = $2; }
| DOUBLE PRECISION { $$ = xlateSqlType("float8"); }
| DOUBLE PRECISION { $$ = xlateSqlType("float8"); }
| FLOAT { $$ = xlateSqlType("float"); }
;
;
char_type: VARYING { $$ = xlateSqlType("varchar"); }
char_type: VARYING { $$ = xlateSqlType("varchar"); }
...
@@ -2362,34 +2389,34 @@ Typename: typname opt_array_bounds
...
@@ -2362,34 +2389,34 @@ Typename: typname opt_array_bounds
$$ = $1;
$$ = $1;
$$->arrayBounds = $2;
$$->arrayBounds = $2;
if (!strcasecmp($1->name, "varchar"))
if (!strcasecmp($1->name, "varchar"))
{
$$->typlen = 4 + 1;
$$->typlen = 4 + 1;
}
}
}
| txname '(' Iconst ')'
| txname '(' Iconst ')'
{
{
/*
/*
* This block gets hit when the parser is passed a query
* The following implements CHAR() and VARCHAR().
* which contains only spaces (e.g. from psql type " \g").
* We do it here instead of the 'typname:' production
* Let's check explicitly for a zero-length argument
* because we don't want to allow arrays of VARCHAR().
* here, and do nothing if so. This seems to fix the problem.
* I haven't thought about whether that will work or not.
* - thomas 1997-07-13
* - ay 6/95
* Also implements FLOAT() - thomas 1997-09-18
*/
*/
if (strlen($1) > 0)
$$ = makeNode(TypeName);
{
if (!strcasecmp($1, "float")) {
if ($3 < 1)
elog(WARN,"precision for '%s' type must be at least 1",$1);
else if ($3 <= 7)
$$->name = xlateSqlType("float4");
else if ($3 < 14)
$$->name = xlateSqlType("float8");
else
elog(WARN,"precision for '%s' type must be less than 14",$1);
/*
} else {
* The following implements char() and varchar().
* We do it here instead of the 'typname:' production
* because we don't want to allow arrays of varchar().
* I haven't thought about whether that will work or not.
* - ay 6/95
*/
$$ = makeNode(TypeName);
if (!strcasecmp($1, "char"))
if (!strcasecmp($1, "char"))
$$->name =
"bpchar"; /* strdup("bpchar"); */
$$->name =
xlateSqlType("bpchar");
else if (!strcasecmp($1, "varchar"))
else if (!strcasecmp($1, "varchar"))
$$->name =
"varchar"; /* strdup("varchar"); */
$$->name =
xlateSqlType("varchar");
else
else
yyerror("parse error");
yyerror("parse error");
if ($3 < 1)
if ($3 < 1)
...
@@ -2408,7 +2435,6 @@ Typename: typname opt_array_bounds
...
@@ -2408,7 +2435,6 @@ Typename: typname opt_array_bounds
* truncate where necessary
* truncate where necessary
*/
*/
$$->typlen = 4 + $3;
$$->typlen = 4 + $3;
}
}
}
}
;
;
...
@@ -3069,6 +3095,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr)
...
@@ -3069,6 +3095,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr)
/* xlateSqlType()
/* xlateSqlType()
* Convert alternate type names to internal Postgres types.
* Convert alternate type names to internal Postgres types.
* Do not convert "float", since that is handled elsewhere
* for FLOAT(p) syntax.
*/
*/
static char *
static char *
xlateSqlType(char *name)
xlateSqlType(char *name)
...
@@ -3078,8 +3106,7 @@ xlateSqlType(char *name)
...
@@ -3078,8 +3106,7 @@ xlateSqlType(char *name)
return "int4"; /* strdup("int4") -- strdup leaks memory here */
return "int4"; /* strdup("int4") -- strdup leaks memory here */
else if (!strcasecmp(name, "smallint"))
else if (!strcasecmp(name, "smallint"))
return "int2";
return "int2";
else if (!strcasecmp(name, "float") ||
else if (!strcasecmp(name, "real"))
!strcasecmp(name, "real"))
return "float8";
return "float8";
else if (!strcasecmp(name, "interval"))
else if (!strcasecmp(name, "interval"))
return "timespan";
return "timespan";
...
...
src/backend/parser/keywords.c
View file @
3bb89a27
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.1
7 1997/09/13 03:13:37
thomas Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.1
8 1997/09/20 16:11:44
thomas Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -85,6 +85,7 @@ static ScanKeyword ScanKeywords[] = {
...
@@ -85,6 +85,7 @@ static ScanKeyword ScanKeywords[] = {
{
"extend"
,
EXTEND
},
{
"extend"
,
EXTEND
},
{
"extract"
,
EXTRACT
},
{
"extract"
,
EXTRACT
},
{
"fetch"
,
FETCH
},
{
"fetch"
,
FETCH
},
{
"float"
,
FLOAT
},
{
"for"
,
FOR
},
{
"for"
,
FOR
},
{
"forward"
,
FORWARD
},
{
"forward"
,
FORWARD
},
{
"from"
,
FROM
},
{
"from"
,
FROM
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment