or ORDER BY bug.
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.21 1998/03/30 19:04:41 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.22 1998/03/31 04:43:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
{
List *union_plans = NIL,
*ulist,
- *unionall_queries,
+ *union_all_queries,
*union_rts,
- *last_union = NIL;
+ *last_union = NIL,
+ *hold_sortClause = parse->sortClause;
bool union_all_found = false,
union_found = false,
- last_unionall_flag = false;
+ last_union_all_flag = false;
/*------------------------------------------------------------------
*
union_found = true;
last_union = ulist;
}
- last_unionall_flag = union_query->unionall;
+ last_union_all_flag = union_query->unionall;
}
/* Is this a simple one */
if (!union_all_found ||
!union_found ||
/* A trailing UNION negates the affect of earlier UNION ALLs */
- !last_unionall_flag)
+ !last_union_all_flag)
{
List *hold_unionClause = parse->unionClause;
+ /* we will do this later, so don't do it now */
+ if (!union_all_found ||
+ !last_union_all_flag)
+ {
+ parse->sortClause = NIL;
+ parse->uniqueFlag = NULL;
+ }
+
parse->unionClause = NIL; /* prevent recursion */
union_plans = lcons(union_planner(parse), NIL);
union_rts = lcons(parse->rtable, NIL);
*/
/* save off everthing past the last UNION */
- unionall_queries = lnext(last_union);
+ union_all_queries = lnext(last_union);
/* clip off the list to remove the trailing UNION ALLs */
lnext(last_union) = NIL;
union_rts = lcons(parse->rtable, NIL);
/* Append the remainging UNION ALLs */
- foreach(ulist, unionall_queries)
+ foreach(ulist, union_all_queries)
{
- Query *unionall_query = lfirst(ulist);
+ Query *union_all_query = lfirst(ulist);
- union_plans = lappend(union_plans, union_planner(unionall_query));
- union_rts = lappend(union_rts, unionall_query->rtable);
+ union_plans = lappend(union_plans, union_planner(union_all_query));
+ union_rts = lappend(union_rts, union_all_query->rtable);
}
}
/* We have already split UNION and UNION ALL and we made it consistent */
- if (!last_unionall_flag)
+ if (!last_union_all_flag)
{
parse->uniqueFlag = "*";
parse->sortClause = transformSortClause(NULL, NIL,
- parse->sortClause,
+ hold_sortClause,
parse->targetList, "*");
}
else
union_rts,
0,
NULL,
- ((Plan *) lfirst(union_plans))->targetlist));
+ parse->targetList));
}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.14 1998/03/18 15:47:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.15 1998/03/31 04:43:53 momjian Exp $
*
*-------------------------------------------------------------------------
*/
{
SortClause *sortcl = lfirst(s);
- if (sortcl->resdom == tlelt->resdom)
+ /*
+ * We use equal() here because we are called for UNION
+ * from the optimizer, and at that point, the sort clause
+ * resdom pointers don't match the target list resdom
+ * pointers
+ */
+ if (equal(sortcl->resdom, tlelt->resdom))
break;
s = lnext(s);
}
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/alter_table.l,v 1.4 1998/01/11 22:17:04 momjian Exp $
+.\" $Header: /cvsroot/pgsql/src/man/Attic/alter_table.l,v 1.5 1998/03/31 04:44:19 momjian Exp $
.TH "ALTER TABLE" SQL 09/25/97 PostgreSQL
.SH NAME
-alter table - add attributes to a class
+alter table - add attributes to a class, or rename an attribute or class
.SH SYNOPSIS
.nf
\fBalter table\fR classname [ * ]
\fBadd\fR [ \fBcolumn\fR ] attname type
-.fi
-.nf
\fBalter table\fR classname [ * ]
\fBadd\fR \fB(\fR attname type \fB)\fR
+\fBalter table\fR classname1
+ \fBrename to\fR classname2
+
+\fBalter table\fR classname1 [\fB*\fR]
+ \fBrename [column]\fR attname1 \fBto\fR attname2
.fi
+
.SH DESCRIPTION
The
.BR "alter table"
-command
-causes a new attribute to be added to an existing class,
-.IR classname .
+command causes a new attribute to be added to an existing class,
+.IR classname ,
+or the name of a class or attribute to change
+without changing any of the data contained in the affected class.
+Thus, the class or attribute will remain of the same type and size
+after this command is executed.
+.PP
The new attributes and their types are specified
in the same style and with the the same restrictions as in
.IR "create table" (l).
be done when adding an attribute to a superclass. If it is not,
queries on the inheritance hierarchy such as
.nf
-select * from super* s
+
+ select * from super* s
+
.fi
will not work because the subclasses will be missing an attribute
found in the superclass.
.IR update (l)
query should be run.
.PP
+In order to rename an attribute in each class in an entire inheritance
+hierarchy, use the
+.IR classname
+of the superclass and append a \*(lq*\*(rq. (By default, the attribute
+will not be renamed in any of the subclasses.) This should
+.BR always
+be done when changing an attribute name in a superclass. If it is
+not, queries on the inheritance hierarchy such as
+.nf
+select * from super* s
+.fi
+will not work because the subclasses will be (in effect) missing an
+attribute found in the superclass.
+.PP
+You must own the class being modified in order to rename it or part of
+its schema. Renaming any part of the schema of a system catalog is
+not permitted.
+.PP
You must own the class in order to change its schema.
.SH EXAMPLE
.nf
-- add the date of hire to the emp class
--
alter table emp add column hiredate abstime
-.fi
-.nf
--
-- add a health-care number to all persons
-- (including employees, students, ...)
--
alter table person * add column health_care_id int4
+--
+-- change the emp class to personnel
+--
+alter table emp rename to personnel
+--
+-- change the sports attribute to hobbies
+--
+alter table emp rename column sports to hobbies
+--
+-- make a change to an inherited attribute
+--
+alter table person * rename column last_name to family_name
.fi
.SH "SEE ALSO"
create table (l),
update (l).
+
+++ /dev/null
-.\" This is -*-nroff-*-
-.\" XXX standard disclaimer belongs here....
-.\" $Header: /cvsroot/pgsql/src/man/Attic/rename.l,v 1.3 1998/01/11 22:17:55 momjian Exp $
-.TH RENAME SQL 02/08/94 PostgreSQL PostgreSQL
-.SH NAME
-rename - rename a class or an attribute in a class
-.SH SYNOPSIS
-.nf
-\fBalter table\fR classname1
- \fBrename to\fR classname2
-\fBalter table\fR classname1 [\fB*\fR]
- \fBrename [column]\fR attname1 \fBto\fR attname2
-.fi
-.SH DESCRIPTION
-The
-.BR rename
-command
-causes the name of a class or attribute to change without changing any
-of the data contained in the affected class. Thus, the class or
-attribute will remain of the same type and size after this command is
-executed.
-.PP
-In order to rename an attribute in each class in an entire inheritance
-hierarchy, use the
-.IR classname
-of the superclass and append a \*(lq*\*(rq. (By default, the attribute
-will not be renamed in any of the subclasses.) This should
-.BR always
-be done when changing an attribute name in a superclass. If it is
-not, queries on the inheritance hierarchy such as
-.nf
-select * from super* s
-.fi
-will not work because the subclasses will be (in effect) missing an
-attribute found in the superclass.
-.PP
-You must own the class being modified in order to rename it or part of
-its schema. Renaming any part of the schema of a system catalog is
-not permitted.
-.SH EXAMPLE
-.nf
---
--- change the emp class to personnel
---
-alter table emp rename to personnel
-.fi
-.nf
---
--- change the sports attribute to hobbies
---
-alter table emp rename column sports to hobbies
-.fi
-.nf
---
--- make a change to an inherited attribute
---
-alter table person * rename column last_name to family_name
-.fi
-.SH BUGS
-Execution of historical queries using classes and attributes whose
-names have changed will produce incorrect results in many situations.
-.PP
-Renaming of types, operators, rules, etc., should also be supported.
--- /dev/null
+--**************** testing built-in type name **************
+--
+-- all inputs are silently truncated at NAMEDATALEN (32) characters
+--
+
+-- fixed-length by reference
+SELECT 'name string'::name = 'name string'::name AS "True";
+
+SELECT 'name string'::name = 'name string '::name AS "False";
+
+--
+--
+--
+
+CREATE TABLE NAME_TBL(f1 name);
+
+INSERT INTO NAME_TBL(f1) VALUES ('ABCDEFGHIJKLMNOP');
+
+INSERT INTO NAME_TBL(f1) VALUES ('abcdefghijklmnop');
+
+INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
+
+INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
+
+INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
+
+INSERT INTO NAME_TBL(f1) VALUES ('');
+
+INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+
+
+SELECT '' AS seven, NAME_TBL.*;
+
+SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= 'ABCDEFGHIJKLMNOP';
+
+SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
+
+SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
+
+SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
+
+SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
+
+DROP TABLE NAME_TBL;