]> granicus.if.org Git - postgresql/commitdiff
Implement column aliases on views "CREATE VIEW name (collist)".
authorThomas G. Lockhart <lockhart@fourpalms.org>
Tue, 14 Mar 2000 23:06:59 +0000 (23:06 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Tue, 14 Mar 2000 23:06:59 +0000 (23:06 +0000)
Implement TIME WITH TIME ZONE type (timetz internal type).
Remap length() for character strings to CHAR_LENGTH() for SQL92
 and to remove the ambiguity with geometric length() functions.
Keep length() for character strings for backward compatibility.
Shrink stored views by removing internal column name list from visible rte.
Implement min(), max() for time and timetz data types.
Implement conversion of TIME to INTERVAL.
Implement abs(), mod(), fac() for the int8 data type.
Rename some math functions to generic names:
 round(), sqrt(), cbrt(), pow(), etc.
Rename NUMERIC power() function to pow().
Fix int2 factorial to calculate result in int4.
Enhance the Oracle compatibility function translate() to work with string
 arguments (from Edwin Ramirez).
Modify pg_proc system table to remove OID holes.

58 files changed:
src/backend/catalog/heap.c
src/backend/commands/explain.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/freefuncs.c
src/backend/optimizer/prep/prepunion.c
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/parser/keywords.c
src/backend/parser/parse_agg.c
src/backend/parser/parse_clause.c
src/backend/parser/parse_coerce.c
src/backend/parser/parse_expr.c
src/backend/parser/parse_func.c
src/backend/parser/parse_relation.c
src/backend/parser/parse_target.c
src/backend/utils/adt/date.c
src/backend/utils/adt/datetime.c
src/backend/utils/adt/float.c
src/backend/utils/adt/geo_ops.c
src/backend/utils/adt/int.c
src/backend/utils/adt/int8.c
src/backend/utils/adt/oracle_compat.c
src/backend/utils/adt/ruleutils.c
src/backend/utils/adt/timestamp.c
src/bin/scripts/createlang.sh
src/include/catalog/catversion.h
src/include/catalog/pg_aggregate.h
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_type.h
src/include/nodes/parsenodes.h
src/include/parser/parse_coerce.h
src/include/utils/builtins.h
src/include/utils/date.h
src/include/utils/datetime.h
src/include/utils/geo_decls.h
src/include/utils/int8.h
src/include/utils/timestamp.h
src/test/regress/expected/alter_table.out
src/test/regress/expected/box.out
src/test/regress/expected/errors.out
src/test/regress/expected/float8.out
src/test/regress/expected/geometry.out
src/test/regress/expected/int4.out
src/test/regress/expected/numeric.out
src/test/regress/expected/rules.out
src/test/regress/expected/timestamp.out
src/test/regress/regress.sh
src/test/regress/sql/alter_table.sql
src/test/regress/sql/box.sql
src/test/regress/sql/float8.sql
src/test/regress/sql/geometry.sql
src/test/regress/sql/int4.sql
src/test/regress/sql/numeric.sql
src/test/regress/sql/timestamp.sql

index 271dc3ed9789ba2423782ee8dcaadddcbf011769..c90516be8016beb199079a3a2e93735e83d2b935 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.122 2000/02/18 09:28:40 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.123 2000/03/14 23:06:06 thomas Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1719,8 +1719,10 @@ StoreAttrDefault(Relation rel, AttrNumber attnum, char *adbin,
         */
        rte = makeNode(RangeTblEntry);
        rte->relname = RelationGetRelationName(rel);
+#ifndef DISABLE_EREF
        rte->ref = makeNode(Attr);
        rte->ref->relname = RelationGetRelationName(rel);
+#endif
        rte->relid = RelationGetRelid(rel);
        rte->inh = false;
        rte->inFromCl = true;
@@ -1799,8 +1801,10 @@ StoreRelCheck(Relation rel, char *ccname, char *ccbin)
         */
        rte = makeNode(RangeTblEntry);
        rte->relname = RelationGetRelationName(rel);
+#ifndef DISABLE_EREF
        rte->ref = makeNode(Attr);
        rte->ref->relname = RelationGetRelationName(rel);
+#endif
        rte->relid = RelationGetRelid(rel);
        rte->inh = false;
        rte->inFromCl = true;
index 2a38a349d6073999b40bfe939939bdb23ec619a9..64dc164a0d590446b2c99eb170422691f163fd07 100644 (file)
@@ -5,7 +5,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
- * $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.54 2000/02/15 20:49:08 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.55 2000/03/14 23:06:12 thomas Exp $
  *
  */
 
@@ -232,9 +232,33 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es)
 
                                appendStringInfo(str, " on %s",
                                                                 stringStringInfo(rte->relname));
-                               if (rte->ref && strcmp(rte->ref->relname, rte->relname) != 0)
-                                       appendStringInfo(str, " %s",
-                                                                        stringStringInfo(rte->ref->relname));
+                               if (rte->ref != NULL)
+                               {
+                                       if ((strcmp(rte->ref->relname, rte->relname) != 0)
+                                               || (length(rte->ref->attrs) > 0))
+                                       {
+                                               appendStringInfo(str, " %s",
+                                                                                stringStringInfo(rte->ref->relname));
+
+                                               if (length(rte->ref->attrs) > 0)
+                                               {
+                                                       List *c;
+                                                       int firstEntry = true;
+
+                                                       appendStringInfo(str, " (");
+                                                       foreach (c, rte->ref->attrs)
+                                                       {
+                                                               if (! firstEntry)
+                                                               {
+                                                                       appendStringInfo(str, ", ");
+                                                                       firstEntry = false;
+                                                               }
+                                                               appendStringInfo(str, "%s", strVal(lfirst(c)));
+                                                       }
+                                                       appendStringInfo(str, ")");
+                                               }
+                                       }
+                               }
                        }
                        break;
                default:
index 601b503ec114a50eae39d23ad5103c2e07156f97..6afa4d8549f7c5e2278813129289cd201366c1d9 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.108 2000/02/21 18:47:00 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.109 2000/03/14 23:06:27 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1366,6 +1366,7 @@ _copyRangeTblEntry(RangeTblEntry *from)
        if (from->relname)
                newnode->relname = pstrdup(from->relname);
        Node_Copy(from, newnode, ref);
+       Node_Copy(from, newnode, eref);
        newnode->relid = from->relid;
        newnode->inh = from->inh;
        newnode->inFromCl = from->inFromCl;
index 14a5ed12d9e90d9ed4c06597b0c28918216b454f..96ce56c94c4ae18e083eae148c75d255fe7b9344 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.38 2000/02/21 18:47:00 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.39 2000/03/14 23:06:28 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1031,6 +1031,7 @@ _freeRangeTblEntry(RangeTblEntry *node)
        if (node->relname)
                pfree(node->relname);
        freeObject(node->ref);
+       freeObject(node->eref);
 
        pfree(node);
 }
index 10a48c666e66ca7645bab4e5404237901dacec59..c0e09dc6d9b572e210d3eeeb460ac590e6f97e90 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.45 2000/02/15 20:49:19 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.46 2000/03/14 23:06:29 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -454,8 +454,8 @@ new_rangetable_entry(Oid new_relid, RangeTblEntry *old_entry)
        RangeTblEntry *new_entry = copyObject(old_entry);
 
        /* ??? someone tell me what the following is doing! - ay 11/94 */
-       if (!strcmp(new_entry->ref->relname, "*CURRENT*") ||
-               !strcmp(new_entry->ref->relname, "*NEW*"))
+       if (!strcmp(new_entry->eref->relname, "*CURRENT*") ||
+               !strcmp(new_entry->eref->relname, "*NEW*"))
                new_entry->ref->relname = get_rel_name(new_relid);
        else
                new_entry->relname = get_rel_name(new_relid);
index 612481deabc4c017e7241123f99bc3d564b35609..c192b4ce7a14e8b68598252723c4fe7955b7582c 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *     $Id: analyze.c,v 1.139 2000/03/01 05:18:20 tgl Exp $
+ *     $Id: analyze.c,v 1.140 2000/03/14 23:06:30 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,6 +146,34 @@ transformStmt(ParseState *pstate, Node *parseTree)
                                ViewStmt   *n = (ViewStmt *) parseTree;
 
                                n->query = (Query *) transformStmt(pstate, (Node *) n->query);
+
+                               /* If a list of column names was given, run through and insert these
+                                * into the actual query tree. - thomas 2000-03-08
+                                */
+                               if (n->aliases != NIL)
+                               {
+                                       int i;
+                                       List *targetList = n->query->targetList;
+
+                                       if (length(targetList) < length(n->aliases))
+                                               elog(ERROR, "CREATE VIEW specifies %d columns"
+                                                        " but only %d columns are present",
+                                                        length(targetList), length(n->aliases));
+
+                                       for (i = 0; i < length(n->aliases); i++)
+                                       {
+                                               Ident *id;
+                                               TargetEntry *te;
+                                               Resdom *rd;
+                                               id = nth(i, n->aliases);
+                                               Assert(nodeTag(id) == T_Ident);
+                                               te = nth(i, targetList);
+                                               Assert(nodeTag(te) == T_TargetEntry);
+                                               rd = te->resdom;
+                                               Assert(nodeTag(rd) == T_Resdom);
+                                               rd->resname = pstrdup(id->name);
+                                       }
+                               }
                                result = makeNode(Query);
                                result->commandType = CMD_UTILITY;
                                result->utilityStmt = (Node *) n;
@@ -1904,7 +1932,7 @@ transformForUpdate(Query *qry, List *forUpdate)
                i = 1;
                foreach(l2, qry->rtable)
                {
-                       if (strcmp(((RangeTblEntry *) lfirst(l2))->ref->relname, relname) == 0)
+                       if (strcmp(((RangeTblEntry *) lfirst(l2))->eref->relname, relname) == 0)
                        {
                                List       *l3;
 
@@ -1925,7 +1953,7 @@ transformForUpdate(Query *qry, List *forUpdate)
                        i++;
                }
                if (l2 == NULL)
-                       elog(ERROR, "FOR UPDATE: relation %s not found in FROM clause",
+                       elog(ERROR, "FOR UPDATE: relation '%s' not found in FROM clause",
                                 relname);
        }
 
index ab69eb4794f21b8cb3834f2718e82956a948230e..c4d98d203ec14b44bb54e47812ee422d88d2efed 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.155 2000/03/12 20:09:41 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.156 2000/03/14 23:06:31 thomas Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -307,7 +307,7 @@ static void doNegateFloat(Value *v);
                ISOLATION, JOIN, KEY, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LOCAL,
                MATCH, MINUTE_P, MONTH_P, NAMES,
                NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
-               OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P,
+               OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P, OVERLAPS,
                PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
                READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
                SCROLL, SECOND_P, SELECT, SESSION_USER, SET, SUBSTRING,
@@ -363,6 +363,7 @@ static void doNegateFloat(Value *v);
 %right         '='
 %nonassoc      '<' '>'
 %nonassoc      LIKE
+%nonassoc      OVERLAPS
 %nonassoc      BETWEEN
 %nonassoc      IN
 %left          Op                              /* multi-character ops and user-defined operators */
@@ -1903,7 +1904,7 @@ comment_text:     Sconst { $$ = $1; }
  *
  *****************************************************************************/
 
-FetchStmt:     FETCH direction fetch_how_many from_in name
+FetchStmt:  FETCH direction fetch_how_many from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        if ($2 == RELATIVE)
@@ -1923,7 +1924,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = false;
                                        $$ = (Node *)n;
                                }
-               |       FETCH fetch_how_many from_in name
+               | FETCH fetch_how_many from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        if ($2 < 0)
@@ -1940,7 +1941,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = false;
                                        $$ = (Node *)n;
                                }
-               |       FETCH direction from_in name
+               | FETCH direction from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        if ($2 == RELATIVE)
@@ -1953,7 +1954,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = false;
                                        $$ = (Node *)n;
                                }
-               |       FETCH from_in name
+               | FETCH from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        n->direction = FORWARD;
@@ -1962,7 +1963,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = false;
                                        $$ = (Node *)n;
                                }
-               |       FETCH name
+               | FETCH name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        n->direction = FORWARD;
@@ -1972,7 +1973,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        $$ = (Node *)n;
                                }
 
-               |       MOVE direction fetch_how_many from_in name
+               | MOVE direction fetch_how_many from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        if ($3 < 0)
@@ -1986,7 +1987,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = TRUE;
                                        $$ = (Node *)n;
                                }
-               |       MOVE fetch_how_many from_in name
+               | MOVE fetch_how_many from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        if ($2 < 0)
@@ -2003,7 +2004,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = TRUE;
                                        $$ = (Node *)n;
                                }
-               |       MOVE direction from_in name
+               | MOVE direction from_in name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        n->direction = $2;
@@ -2021,7 +2022,7 @@ FetchStmt:        FETCH direction fetch_how_many from_in name
                                        n->ismove = TRUE;
                                        $$ = (Node *)n;
                                }
-               |       MOVE name
+               | MOVE name
                                {
                                        FetchStmt *n = makeNode(FetchStmt);
                                        n->direction = FORWARD;
@@ -2659,11 +2660,12 @@ opt_trans: WORK                                                                 { $$ = TRUE; }
  *
  *****************************************************************************/
 
-ViewStmt:  CREATE VIEW name AS SelectStmt
+ViewStmt:  CREATE VIEW name opt_column_list AS SelectStmt
                                {
                                        ViewStmt *n = makeNode(ViewStmt);
                                        n->viewname = $3;
-                                       n->query = (Query *)$5;
+                                       n->aliases = $4;
+                                       n->query = (Query *)$6;
                                        if (((SelectStmt *)n->query)->sortClause != NULL)
                                                elog(ERROR,"ORDER BY and DISTINCT on views are not implemented");
                                        if (((SelectStmt *)n->query)->unionClause != NULL)
@@ -2737,7 +2739,7 @@ createdb_opt_encoding:
             int i;
             i = pg_char_to_encoding($3);
             if (i == -1)
-                elog(ERROR, "%s is not a valid encoding name.", $3);
+                elog(ERROR, "%s is not a valid encoding name", $3);
             $$ = i;
 #else
             elog(ERROR, "Multi-byte support is not enabled");
@@ -2747,7 +2749,7 @@ createdb_opt_encoding:
         {
 #ifdef MULTIBYTE
             if (!pg_get_encent_by_encoding($3))
-                elog(ERROR, "%d is not a valid encoding code.", $3);
+                elog(ERROR, "%d is not a valid encoding code", $3);
             $$ = $3;
 #else
             elog(ERROR, "Multi-byte support is not enabled");
@@ -3979,10 +3981,13 @@ Datetime:  datetime
                                        $$->timezone = $2;
                                        $$->typmod = -1;
                                }
-               | TIME
+               | TIME opt_timezone
                                {
                                        $$ = makeNode(TypeName);
-                                       $$->name = xlateSqlType("time");
+                                       if ($2)
+                                               $$->name = xlateSqlType("timetz");
+                                       else
+                                               $$->name = xlateSqlType("time");
                                        $$->typmod = -1;
                                }
                | INTERVAL opt_interval
@@ -4077,6 +4082,27 @@ row_expr: '(' row_descriptor ')' IN '(' SubSelect ')'
                                {
                                        $$ = makeRowExpr($4, $2, $6);
                                }
+               | '(' row_descriptor ')' OVERLAPS '(' row_descriptor ')'
+                               {
+                                       FuncCall *n = makeNode(FuncCall);
+                                       List *largs = $2;
+                                       List *rargs = $6;
+                                       n->funcname = xlateSqlFunc("overlaps");
+                                       if (length(largs) == 1)
+                                               largs = lappend(largs, $2);
+                                       else if (length(largs) != 2)
+                                               elog(ERROR, "Wrong number of parameters"
+                                                        " on left side of OVERLAPS expression");
+                                       if (length(rargs) == 1)
+                                               rargs = lappend(rargs, $6);
+                                       else if (length(rargs) != 2)
+                                               elog(ERROR, "Wrong number of parameters"
+                                                        " on right side of OVERLAPS expression");
+                                       n->args = nconc(largs, rargs);
+                                       n->agg_star = false;
+                                       n->agg_distinct = false;
+                                       $$ = (Node *)n;
+                               }
                ;
 
 row_descriptor:  row_list ',' a_expr
@@ -4579,7 +4605,8 @@ c_expr:  attr
                                        n->agg_distinct = false;
 
                                        if ($3 != 0)
-                                               elog(NOTICE,"CURRENT_TIME(%d) precision not implemented; zero used instead",$3);
+                                               elog(NOTICE,"CURRENT_TIME(%d) precision not implemented"
+                                                        "; zero used instead",$3);
 
                                        $$ = (Node *)n;
                                }
@@ -4632,7 +4659,8 @@ c_expr:  attr
                                        n->agg_distinct = false;
 
                                        if ($3 != 0)
-                                               elog(NOTICE,"CURRENT_TIMESTAMP(%d) precision not implemented; zero used instead",$3);
+                                               elog(NOTICE,"CURRENT_TIMESTAMP(%d) precision not implemented"
+                                                        "; zero used instead",$3);
 
                                        $$ = (Node *)n;
                                }
@@ -5219,6 +5247,7 @@ ColId:  IDENT                                                     { $$ = $1; }
                | ONLY                                                  { $$ = "only"; }
                | OPERATOR                                              { $$ = "operator"; }
                | OPTION                                                { $$ = "option"; }
+               | OVERLAPS                                              { $$ = "overlaps"; }
                | PASSWORD                                              { $$ = "password"; }
                | PENDANT                                               { $$ = "pendant"; }
                | PRIOR                                                 { $$ = "prior"; }
@@ -5454,9 +5483,8 @@ mapTargetColumns(List *src, List *dst)
 static char *
 xlateSqlFunc(char *name)
 {
-       if (!strcasecmp(name,"character_length")
-        || !strcasecmp(name,"char_length"))
-               return "length";
+       if (!strcasecmp(name,"character_length"))
+               return "char_length";
        else
                return name;
 } /* xlateSqlFunc() */
index d971e95762dcfd008d5c8681734968068df45e1e..5bf703703d39037588b5a5b5cb97dc0a9a30d198 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.67 2000/02/18 09:29:40 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.68 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -184,6 +184,7 @@ static ScanKeyword ScanKeywords[] = {
        {"or", OR},
        {"order", ORDER},
        {"outer", OUTER_P},
+       {"overlaps", OVERLAPS},
        {"partial", PARTIAL},
        {"password", PASSWORD},
        {"pendant", PENDANT},
index afaa55e54f1f3c005081d44d69446c142e7a47a5..17cc026bfdecd0a94a98cf12f5eeb61a3e69d718 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.34 2000/02/15 03:37:47 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.35 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -111,7 +111,7 @@ check_ungrouped_columns_walker(Node *node,
                        elog(ERROR, "cache lookup of attribute %d in relation %u failed",
                                 var->varattno, rte->relid);
                elog(ERROR, "Attribute %s.%s must be GROUPed or used in an aggregate function",
-                        rte->ref->relname, attname);
+                        rte->eref->relname, attname);
        }
        /* Otherwise, recurse. */
        return expression_tree_walker(node, check_ungrouped_columns_walker,
index 68da571f92248fedb80451675f93505a4fab0bcf..53d9b25f11b278d1c3eb6a98d923e73334030118 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.55 2000/02/19 23:45:05 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.56 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -478,7 +478,7 @@ parseFromClause(ParseState *pstate, List *frmList)
                        {
                                Assert(IsA(j->larg, RangeVar));
                                l_rte = transformTableEntry(pstate, (RangeVar *) j->larg);
-                               l_name = expandTable(pstate, l_rte->ref->relname, TRUE);
+                               l_name = expandTable(pstate, l_rte->eref->relname, TRUE);
                        }
 
                        if (IsA(j->rarg, JoinExpr))
@@ -490,7 +490,7 @@ parseFromClause(ParseState *pstate, List *frmList)
                        {
                                Assert(IsA(j->rarg, RangeVar));
                                r_rte = transformTableEntry(pstate, (RangeVar *) j->rarg);
-                               r_name = expandTable(pstate, r_rte->ref->relname, TRUE);
+                               r_name = expandTable(pstate, r_rte->eref->relname, TRUE);
                        }
 
                        /* Natural join does not explicitly specify columns; must generate columns to join.
index 210a8f946e300223f3f4c158d036a91a911509fe..ce06da2669e6d3038a27365cd453de27f948db7d 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.34 2000/03/11 23:19:50 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.35 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -319,6 +319,7 @@ TypeCategory(Oid inType)
 
                case (DATEOID):
                case (TIMEOID):
+               case (TIMETZOID):
                case (ABSTIMEOID):
                case (TIMESTAMPOID):
                        result = DATETIME_TYPE;
index e1e861997221a776607f58f14f72fa106830731b..e2e297cb6b631d5755c8e8842d4b3235370fe89e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.72 2000/03/07 23:30:53 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.73 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -574,15 +574,7 @@ transformIdent(ParseState *pstate, Ident *ident, int precedence)
                if ((rte = colnameRangeTableEntry(pstate, ident->name)) != NULL)
                {
                        /* Convert it to a fully qualified Attr, and transform that */
-#ifndef DISABLE_JOIN_SYNTAX
-                       Attr       *att = makeAttr(rte->ref->relname, ident->name);
-#else
-                       Attr       *att = makeNode(Attr);
-
-                       att->relname = rte->refname;
-                       att->paramNo = NULL;
-                       att->attrs = lcons(makeString(ident->name), NIL);
-#endif
+                       Attr       *att = makeAttr(rte->eref->relname, ident->name);
                        att->indirection = ident->indirection;
                        return transformAttr(pstate, att, precedence);
                }
index 90c65a3830e9ff213dfe6b1a6167fad6d87eb650..eb4884accbbe6be6362b107d52d9e0b555445ea3 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.73 2000/03/11 23:17:47 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.74 2000/03/14 23:06:32 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -325,7 +325,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
                         * now allow column aliases.
                         * - thomas 2000-02-07
                         */
-                       if (rte->ref->attrs != NULL)
+                       if (rte->eref->attrs != NULL)
                        {
                                List   *c;
                                /* start counting attributes/columns from one.
@@ -333,7 +333,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
                                 * - thomas 2000-01-27
                                 */
                                int             i = 1;
-                               foreach (c, rte->ref->attrs)
+                               foreach (c, rte->eref->attrs)
                                {
                                        char *colname = strVal(lfirst(c));
                                        /* found a match? */
@@ -550,7 +550,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
 
                        relname = rte->relname;
 
-                       vnum = refnameRangeTablePosn(pstate, rte->ref->relname, NULL);
+                       vnum = refnameRangeTablePosn(pstate, rte->eref->relname, NULL);
 
                        /*
                         * for func(relname), the param to the function is the tuple
index 265642faaf39adc3f78c17362170aa2d6efa9f7a..4a943af6739f07bfe6234c603e1c500845622ab6 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.36 2000/03/09 05:00:24 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.37 2000/03/14 23:06:33 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -68,8 +68,12 @@ static char *attnum_type[SPECIALS] = {
 /* refnameRangeTableEntries()
  * Given refname, return a list of range table entries
  * This is possible with JOIN syntax, where tables in a join
- * acquire the same reference name
+ * acquire the same reference name.
  * - thomas 2000-01-20
+ * But at the moment we aren't carrying along a full list of
+ * table/column aliases, so we don't have the full mechanism
+ * to support outer joins in place yet.
+ * - thomas 2000-03-04
  */
 List *
 refnameRangeTableEntries(ParseState *pstate, char *refname);
@@ -86,7 +90,7 @@ refnameRangeTableEntries(ParseState *pstate, char *refname)
                {
                        RangeTblEntry *rte = lfirst(temp);
 
-                       if (strcmp(rte->ref->relname, refname) == 0)
+                       if (strcmp(rte->eref->relname, refname) == 0)
                                rteList = lappend(rteList, rte);
                }
                /* only allow correlated columns in WHERE clause */
@@ -110,11 +114,7 @@ refnameRangeTableEntry(ParseState *pstate, char *refname)
                {
                        RangeTblEntry *rte = lfirst(temp);
 
-#ifndef DISABLE_JOIN_SYNTAX
-                       if (strcmp(rte->ref->relname, refname) == 0)
-#else
-                       if (!strcmp(rte->refname, refname))
-#endif
+                       if (strcmp(rte->eref->relname, refname) == 0)
                                return rte;
                }
                /* only allow correlated columns in WHERE clause */
@@ -143,11 +143,7 @@ refnameRangeTablePosn(ParseState *pstate, char *refname, int *sublevels_up)
                {
                        RangeTblEntry *rte = lfirst(temp);
 
-#ifndef DISABLE_JOIN_SYNTAX
-                       if (strcmp(rte->ref->relname, refname) == 0)
-#else
-                       if (!strcmp(rte->refname, refname))
-#endif
+                       if (strcmp(rte->eref->relname, refname) == 0)
                                return index;
                        index++;
                }
@@ -191,7 +187,7 @@ colnameRangeTableEntry(ParseState *pstate, char *colname)
                        if (!rte->inFromCl && rte != pstate->p_target_rangetblentry)
                                continue;
 
-                       if (rte->ref->attrs != NULL)
+                       if (rte->eref->attrs != NULL)
                        {
                                List *c;
                                foreach (c, rte->ref->attrs)
@@ -253,6 +249,7 @@ addRangeTableEntry(ParseState *pstate,
 {
        Relation                rel;
        RangeTblEntry  *rte;
+       Attr               *eref;
        int                             maxattrs;
        int                             sublevels_up;
        int                             varattno;
@@ -286,19 +283,22 @@ addRangeTableEntry(ParseState *pstate,
        rel = heap_openr(relname, AccessShareLock);
        rte->relid = RelationGetRelid(rel);
        maxattrs = RelationGetNumberOfAttributes(rel);
-       if (maxattrs < length(ref->attrs))
+
+       eref = copyObject(ref);
+       if (maxattrs < length(eref->attrs))
                elog(ERROR, "Table '%s' has %d columns available but %d columns specified",
-                        relname, maxattrs, length(ref->attrs));
+                        relname, maxattrs, length(eref->attrs));
 
        /* fill in any unspecified alias columns */
-       for (varattno = length(ref->attrs); varattno < maxattrs; varattno++)
+       for (varattno = length(eref->attrs); varattno < maxattrs; varattno++)
        {
                char       *attrname;
 
                attrname = pstrdup(NameStr(rel->rd_att->attrs[varattno]->attname));
-               ref->attrs = lappend(ref->attrs, makeString(attrname));
+               eref->attrs = lappend(eref->attrs, makeString(attrname));
        }
        heap_close(rel, AccessShareLock);
+       rte->eref = eref;
 
        /*
         * Flags:
@@ -337,10 +337,9 @@ expandTable(ParseState *pstate, char *refname, bool getaliases)
 
        rte = refnameRangeTableEntry(pstate, refname);
 
-       if (getaliases && (rte != NULL) && (rte->ref != NULL)
-               && (length(rte->ref->attrs) > 0))
+       if (getaliases && (rte != NULL))
        {
-               return rte->ref;
+               return rte->eref;
        }
 
        if (rte != NULL)
@@ -415,8 +414,8 @@ expandAll(ParseState *pstate, char *relname, Attr *ref, int *this_resno)
                attrname = pstrdup(NameStr(rel->rd_att->attrs[varattno]->attname));
 
                /* varattno is zero-based, so check that length() is always greater */
-               if (length(rte->ref->attrs) > varattno)
-                       label = pstrdup(strVal(nth(varattno, rte->ref->attrs)));
+               if (length(rte->eref->attrs) > varattno)
+                       label = pstrdup(strVal(nth(varattno, rte->eref->attrs)));
                else
                        label = attrname;
                varnode = make_var(pstate, rte->relid, relname, attrname);
index e815efc9639b74f0a49ff58801bd96a4a83fd08a..65a5b33d58c174c43fdc3a8d0bc1f3d063e9e5ec 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.56 2000/03/09 05:00:24 inoue Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.57 2000/03/14 23:06:33 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -430,7 +430,7 @@ ExpandAllTables(ParseState *pstate)
                        continue;
 
                target = nconc(target,
-                                          expandAll(pstate, rte->ref->relname, rte->ref,
+                                          expandAll(pstate, rte->eref->relname, rte->eref,
                                                                 &pstate->p_last_resno));
        }
        return target;
index 7102f64a44fa89fc28483468cc7c1e0996629c07..378289373b837c252d7b1f2727cd9cd83b5c7439 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.42 2000/02/16 18:17:02 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.43 2000/03/14 23:06:35 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -198,7 +198,7 @@ date_timestamp(DateADT dateVal)
        double          fsec = 0;
        char       *tzn;
 
-       result = palloc(sizeof(Timestamp));
+       result = palloc(sizeof(*result));
 
        if (date2tm(dateVal, &tz, tm, &fsec, &tzn) != 0)
                elog(ERROR, "Unable to convert date to timestamp");
@@ -392,10 +392,10 @@ time_in(char *str)
                elog(ERROR, "Bad (null) time external representation");
 
        if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
-               || (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec) != 0))
+               || (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, NULL) != 0))
                elog(ERROR, "Bad time external representation '%s'", str);
 
-       time = palloc(sizeof(TimeADT));
+       time = palloc(sizeof(*time));
 
        *time = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
 
@@ -422,7 +422,7 @@ time_out(TimeADT *time)
 
        fsec = 0;
 
-       EncodeTimeOnly(tm, fsec, DateStyle, buf);
+       EncodeTimeOnly(tm, fsec, NULL, DateStyle, buf);
 
        result = palloc(strlen(buf) + 1);
 
@@ -456,8 +456,8 @@ time_lt(TimeADT *time1, TimeADT *time2)
        if (!PointerIsValid(time1) || !PointerIsValid(time2))
                return FALSE;
 
-       return *time1 < *time2;
-}      /* time_eq() */
+       return (*time1 < *time2);
+}      /* time_lt() */
 
 bool
 time_le(TimeADT *time1, TimeADT *time2)
@@ -465,8 +465,8 @@ time_le(TimeADT *time1, TimeADT *time2)
        if (!PointerIsValid(time1) || !PointerIsValid(time2))
                return FALSE;
 
-       return *time1 <= *time2;
-}      /* time_eq() */
+       return (*time1 <= *time2);
+}      /* time_le() */
 
 bool
 time_gt(TimeADT *time1, TimeADT *time2)
@@ -474,8 +474,8 @@ time_gt(TimeADT *time1, TimeADT *time2)
        if (!PointerIsValid(time1) || !PointerIsValid(time2))
                return FALSE;
 
-       return *time1 > *time2;
-}      /* time_eq() */
+       return (*time1 > *time2);
+}      /* time_gt() */
 
 bool
 time_ge(TimeADT *time1, TimeADT *time2)
@@ -483,8 +483,8 @@ time_ge(TimeADT *time1, TimeADT *time2)
        if (!PointerIsValid(time1) || !PointerIsValid(time2))
                return FALSE;
 
-       return *time1 >= *time2;
-}      /* time_eq() */
+       return (*time1 >= *time2);
+}      /* time_ge() */
 
 int
 time_cmp(TimeADT *time1, TimeADT *time2)
@@ -492,6 +492,43 @@ time_cmp(TimeADT *time1, TimeADT *time2)
        return (*time1 < *time2) ? -1 : (((*time1 > *time2) ? 1 : 0));
 }      /* time_cmp() */
 
+TimeADT *
+time_larger(TimeADT *time1, TimeADT *time2)
+{
+       return time_gt(time1, time2)? time1: time2;
+}      /* time_larger() */
+
+TimeADT *
+time_smaller(TimeADT *time1, TimeADT *time2)
+{
+       return time_lt(time1, time2)? time1: time2;
+}      /* time_smaller() */
+
+/* overlaps_time()
+ * Implements the SQL92 OVERLAPS operator.
+ * Algorithm from Date and Darwen, 1997
+ */
+bool
+overlaps_time(TimeADT *ts1, TimeADT *te1, TimeADT *ts2, TimeADT *te2)
+{
+       /* Make sure we have ordered pairs... */
+       if (time_gt(ts1, te1))
+       {
+               TimeADT *tt = ts1;
+               ts1 = te1;
+               te1 = tt;
+       }
+       if (time_gt(ts2, te2))
+       {
+               TimeADT *tt = ts2;
+               ts2 = te2;
+               te2 = tt;
+       }
+
+       return ((time_gt(ts1, ts2) && (time_lt(ts1, te2) || time_lt(te1, te2)))
+                       || (time_gt(ts2, ts1) && (time_lt(ts2, te1) || time_lt(te2, te1)))
+                       || time_eq(ts1, ts2));
+}
 
 /* timestamp_time()
  * Convert timestamp to time data type.
@@ -515,12 +552,10 @@ timestamp_time(Timestamp *timestamp)
        if (TIMESTAMP_IS_EPOCH(*timestamp))
        {
                timestamp2tm(SetTimestamp(*timestamp), NULL, tm, &fsec, NULL);
-
        }
        else if (TIMESTAMP_IS_CURRENT(*timestamp))
        {
                timestamp2tm(SetTimestamp(*timestamp), &tz, tm, &fsec, &tzn);
-
        }
        else
        {
@@ -528,7 +563,7 @@ timestamp_time(Timestamp *timestamp)
                        elog(ERROR, "Unable to convert timestamp to date");
        }
 
-       result = palloc(sizeof(TimeADT));
+       result = palloc(sizeof(*result));
 
        *result = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
 
@@ -546,7 +581,7 @@ datetime_timestamp(DateADT date, TimeADT *time)
 
        if (!PointerIsValid(time))
        {
-               result = palloc(sizeof(Timestamp));
+               result = palloc(sizeof(*result));
                TIMESTAMP_INVALID(*result);
        }
        else
@@ -557,3 +592,270 @@ datetime_timestamp(DateADT date, TimeADT *time)
 
        return result;
 }      /* datetime_timestamp() */
+
+
+/* time_interval()
+ * Convert time to interval data type.
+ */
+Interval   *
+time_interval(TimeADT *time)
+{
+       Interval   *result;
+
+       if (!PointerIsValid(time))
+               return NULL;
+
+       result = palloc(sizeof(*result));
+       result->time = *time;
+       result->month = 0;
+
+       return result;
+}      /* time_interval() */
+
+
+/*****************************************************************************
+ *      Time With Time Zone ADT
+ *****************************************************************************/
+
+
+TimeTzADT    *
+timetz_in(char *str)
+{
+       TimeTzADT  *time;
+
+       double          fsec;
+       struct tm       tt,
+                          *tm = &tt;
+       int                     tz;
+
+       int                     nf;
+       char            lowstr[MAXDATELEN + 1];
+       char       *field[MAXDATEFIELDS];
+       int                     dtype;
+       int                     ftype[MAXDATEFIELDS];
+
+       if (!PointerIsValid(str))
+               elog(ERROR, "Bad (null) time external representation");
+
+       if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
+               || (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz) != 0))
+               elog(ERROR, "Bad time external representation '%s'", str);
+
+       time = palloc(sizeof(*time));
+
+       time->time = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
+       time->zone = tz;
+
+       return time;
+}      /* timetz_in() */
+
+
+char *
+timetz_out(TimeTzADT *time)
+{
+       char       *result;
+       struct tm       tt,
+                          *tm = &tt;
+
+       double          fsec;
+       int                     tz;
+       char            buf[MAXDATELEN + 1];
+
+       if (!PointerIsValid(time))
+               return NULL;
+
+       tm->tm_hour = (time->time / (60 * 60));
+       tm->tm_min = (((int) (time->time / 60)) % 60);
+       tm->tm_sec = (((int) time->time) % 60);
+
+       fsec = 0;
+       tz = time->zone;
+
+       EncodeTimeOnly(tm, fsec, &tz, DateStyle, buf);
+
+       result = palloc(strlen(buf) + 1);
+
+       strcpy(result, buf);
+
+       return result;
+}      /* timetz_out() */
+
+
+bool
+timetz_eq(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) == (time2->time + time2->zone));
+}      /* timetz_eq() */
+
+bool
+timetz_ne(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) != (time2->time + time2->zone));
+}      /* timetz_ne() */
+
+bool
+timetz_lt(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) < (time2->time + time2->zone));
+}      /* timetz_lt() */
+
+bool
+timetz_le(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) <= (time2->time + time2->zone));
+}      /* timetz_le() */
+
+bool
+timetz_gt(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) > (time2->time + time2->zone));
+}      /* timetz_gt() */
+
+bool
+timetz_ge(TimeTzADT *time1, TimeTzADT *time2)
+{
+       if (!PointerIsValid(time1) || !PointerIsValid(time2))
+               return FALSE;
+
+       return ((time1->time + time1->zone) >= (time2->time + time2->zone));
+}      /* timetz_ge() */
+
+int
+timetz_cmp(TimeTzADT *time1, TimeTzADT *time2)
+{
+       return (timetz_lt(time1, time2) ? -1 : (timetz_gt(time1, time2)? 1: 0));
+}      /* timetz_cmp() */
+
+TimeTzADT *
+timetz_larger(TimeTzADT *time1, TimeTzADT *time2)
+{
+       return timetz_gt(time1, time2)? time1: time2;
+}      /* timetz_larger() */
+
+TimeTzADT *
+timetz_smaller(TimeTzADT *time1, TimeTzADT *time2)
+{
+       return timetz_lt(time1, time2)? time1: time2;
+}      /* timetz_smaller() */
+
+/* overlaps_timetz()
+ * Implements the SQL92 OVERLAPS operator.
+ * Algorithm from Date and Darwen, 1997
+ */
+bool
+overlaps_timetz(TimeTzADT *ts1, TimeTzADT *te1, TimeTzADT *ts2, TimeTzADT *te2)
+{
+       /* Make sure we have ordered pairs... */
+       if (timetz_gt(ts1, te1))
+       {
+               TimeTzADT *tt = ts1;
+               ts1 = te1;
+               te1 = tt;
+       }
+       if (timetz_gt(ts2, te2))
+       {
+               TimeTzADT *tt = ts2;
+               ts2 = te2;
+               te2 = tt;
+       }
+
+       return ((timetz_gt(ts1, ts2) && (timetz_lt(ts1, te2) || timetz_lt(te1, te2)))
+                       || (timetz_gt(ts2, ts1) && (timetz_lt(ts2, te1) || timetz_lt(te2, te1)))
+                       || timetz_eq(ts1, ts2));
+}      /* overlaps_timetz() */
+
+/* timestamp_timetz()
+ * Convert timestamp to timetz data type.
+ */
+TimeTzADT    *
+timestamp_timetz(Timestamp *timestamp)
+{
+       TimeTzADT    *result;
+       struct tm       tt,
+                          *tm = &tt;
+       int                     tz;
+       double          fsec;
+       char       *tzn;
+
+       if (!PointerIsValid(timestamp))
+               elog(ERROR, "Unable to convert null timestamp to date");
+
+       if (TIMESTAMP_NOT_FINITE(*timestamp))
+               elog(ERROR, "Unable to convert timestamp to date");
+
+       if (TIMESTAMP_IS_EPOCH(*timestamp))
+       {
+               timestamp2tm(SetTimestamp(*timestamp), NULL, tm, &fsec, NULL);
+               tz = 0;
+       }
+       else if (TIMESTAMP_IS_CURRENT(*timestamp))
+       {
+               timestamp2tm(SetTimestamp(*timestamp), &tz, tm, &fsec, &tzn);
+       }
+       else
+       {
+               if (timestamp2tm(*timestamp, &tz, tm, &fsec, &tzn) != 0)
+                       elog(ERROR, "Unable to convert timestamp to date");
+       }
+
+       result = palloc(sizeof(*result));
+
+       result->time = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
+       result->zone = tz;
+
+       return result;
+}      /* timestamp_timetz() */
+
+
+/* datetimetz_timestamp()
+ * Convert date and timetz to timestamp data type.
+ * Timestamp is stored in GMT, so add the time zone
+ * stored with the timetz to the result.
+ * - thomas 2000-03-10
+ */
+Timestamp   *
+datetimetz_timestamp(DateADT date, TimeTzADT *time)
+{
+       Timestamp  *result;
+       struct tm       tt,
+                          *tm = &tt;
+       int                     tz;
+       double          fsec = 0;
+       char       *tzn;
+
+       result = palloc(sizeof(*result));
+
+       if (!PointerIsValid(date) || !PointerIsValid(time))
+       {
+               TIMESTAMP_INVALID(*result);
+       }
+       else
+       {
+               if (date2tm(date, &tz, tm, &fsec, &tzn) != 0)
+                       elog(ERROR, "Unable to convert date to timestamp");
+
+               if (tm2timestamp(tm, fsec, &time->zone, result) != 0)
+                       elog(ERROR, "Timestamp out of range");
+
+               *result += time->time;
+       }
+
+       return result;
+}      /* datetimetz_timestamp() */
+
+
index 1418a0c34c2eb42c02bf28b253d4d7a3030a2e59..3c88ac3a3d11c1c2bfdee26092a9102a9cfde172 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.42 2000/02/16 18:17:02 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.43 2000/03/14 23:06:36 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -618,8 +618,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
        tm->tm_min = 0;
        tm->tm_sec = 0;
        *fsec = 0;
-       tm->tm_isdst = -1;                      /* don't know daylight savings time status
-                                                                * apriori */
+       tm->tm_isdst = -1;      /* don't know daylight savings time status apriori */
        if (tzp != NULL)
                *tzp = 0;
 
@@ -897,8 +896,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
                                tm->tm_mon += 1;
 
 #if defined(HAVE_TM_ZONE)
-                               *tzp = -(tm->tm_gmtoff);                /* tm_gmtoff is
-                                                                                                * Sun/DEC-ism */
+                               *tzp = -(tm->tm_gmtoff);        /* tm_gmtoff is Sun/DEC-ism */
 #elif defined(HAVE_INT_TIMEZONE)
 #ifdef __CYGWIN__
                                *tzp = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
@@ -927,9 +925,18 @@ DecodeDateTime(char **field, int *ftype, int nf,
 
 /* DecodeTimeOnly()
  * Interpret parsed string as time fields only.
+ * Note that support for time zone is here for
+ * SQL92 TIME WITH TIME ZONE, but it reveals
+ * bogosity with SQL92 date/time standards, since
+ * we must infer a time zone from current time.
+ * XXX Later, we should probably support
+ * SET TIME ZONE <integer>
+ * which of course is a screwed up convention.
+ * - thomas 2000-03-10
  */
 int
-DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, double *fsec)
+DecodeTimeOnly(char **field, int *ftype, int nf,
+                          int *dtype, struct tm * tm, double *fsec, int *tzp)
 {
        int                     fmask,
                                tmask,
@@ -944,9 +951,10 @@ DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, dou
        tm->tm_hour = 0;
        tm->tm_min = 0;
        tm->tm_sec = 0;
-       tm->tm_isdst = -1;                      /* don't know daylight savings time status
-                                                                * apriori */
        *fsec = 0;
+       tm->tm_isdst = -1;      /* don't know daylight savings time status apriori */
+       if (tzp != NULL)
+               *tzp = 0;
 
        fmask = DTK_DATE_M;
 
@@ -959,6 +967,14 @@ DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, dou
                                        return -1;
                                break;
 
+                       case DTK_TZ:
+                               if (tzp == NULL)
+                                       return -1;
+                               if (DecodeTimezone(field[i], tzp) != 0)
+                                       return -1;
+                               tmask = DTK_M(TZ);
+                               break;
+
                        case DTK_NUMBER:
                                flen = strlen(field[i]);
 
@@ -1035,6 +1051,45 @@ DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, dou
        if ((fmask & DTK_TIME_M) != DTK_TIME_M)
                return -1;
 
+       /* timezone not specified? then find local timezone if possible */
+       if ((tzp != NULL) && (!(fmask & DTK_M(TZ))))
+       {
+               struct tm tt, *tmp = &tt;
+
+               /*
+                * daylight savings time modifier but no standard timezone?
+                * then error
+                */
+               if (fmask & DTK_M(DTZMOD))
+                       return -1;
+
+               GetCurrentTime(tmp);
+               tmp->tm_hour = tm->tm_hour;
+               tmp->tm_min = tm->tm_min;
+               tmp->tm_sec = tm->tm_sec;
+
+#ifdef USE_POSIX_TIME
+               tmp->tm_isdst = -1;
+               mktime(tmp);
+               tm->tm_isdst = tmp->tm_isdst;
+
+#if defined(HAVE_TM_ZONE)
+               *tzp = -(tmp->tm_gmtoff);       /* tm_gmtoff is Sun/DEC-ism */
+#elif defined(HAVE_INT_TIMEZONE)
+#ifdef __CYGWIN__
+               *tzp = ((tmp->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
+#else
+               *tzp = ((tmp->tm_isdst > 0) ? (timezone - 3600) : timezone);
+#endif
+#else
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
+#endif
+
+#else                                                  /* !USE_POSIX_TIME */
+               *tzp = CTimeZone;
+#endif
+       }
+
        return 0;
 }      /* DecodeTimeOnly() */
 
@@ -1830,7 +1885,7 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
  * Encode time fields only.
  */
 int
-EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
+EncodeTimeOnly(struct tm * tm, double fsec, int *tzp, int style, char *str)
 {
        double          sec;
 
@@ -1842,6 +1897,15 @@ EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
        sprintf(str, "%02d:%02d:", tm->tm_hour, tm->tm_min);
        sprintf((str + 6), ((fsec != 0) ? "%05.2f" : "%02.0f"), sec);
 
+       if (tzp != NULL)
+       {
+               int hour, min;
+
+               hour = -(*tzp / 3600);
+               min = ((abs(*tzp) / 60) % 60);
+               sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
+       }
+
        return TRUE;
 }      /* EncodeTimeOnly() */
 
index 0a0df27b808b421735fabc1350f683b28d4b5507..6af9cd906d30d7e29c6a0196ce204bcee0040ca7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.53 2000/01/26 05:57:14 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.54 2000/03/14 23:06:36 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1236,6 +1236,31 @@ dlog1(float64 arg1)
        return result;
 }
 
+/*
+ *             dlog10                  - returns a pointer to the base 10 logarithm of arg1
+ */
+float64
+dlog10(float64 arg1)
+{
+       float64         result;
+       double          tmp;
+
+       if (!PointerIsValid(arg1))
+               return (float64) NULL;
+
+       result = (float64) palloc(sizeof(float64data));
+
+       tmp = *arg1;
+       if (tmp == 0.0)
+               elog(ERROR, "can't take log of zero");
+       if (tmp < 0)
+               elog(ERROR, "can't take log of a negative number");
+       *result = (float64data) log10(tmp);
+
+       CheckFloat8Val(*result);
+       return result;
+} /* dlog10() */
+
 
 /*
  *             ====================
index 7b56fba275b44fe7eb87cd449d3e7a4468a79fa2..9561f9e875de42feb96ce9315f7b8f9b7dfec9d4 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.48 2000/01/26 05:57:14 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.49 2000/03/14 23:06:36 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3510,29 +3510,6 @@ path_div_pt(PATH *path, Point *point)
 }      /* path_div_pt() */
 
 
-bool
-path_contain_pt(PATH *path, Point *p)
-{
-       if (!PointerIsValid(path) || !PointerIsValid(p))
-               return FALSE;
-
-       return (on_ppath(p, path));
-}      /* path_contain_pt() */
-
-/* pt_contained_path
- * Point in or on path? This is the same as on_ppath.
- * - thomas 1998-10-29
- */
-bool
-pt_contained_path(Point *p, PATH *path)
-{
-       if (!PointerIsValid(p) || !PointerIsValid(path))
-               return FALSE;
-
-       return path_contain_pt(path, p);
-}      /* pt_contained_path() */
-
-
 Point *
 path_center(PATH *path)
 {
index 244bf3aaa4ba4d4a1b1180122bb7da16e881ff19..7eb7783274c59ecdc4f760b97b82b9bff7289703 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.34 2000/03/07 23:58:38 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/int.c,v 1.35 2000/03/14 23:06:36 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -659,8 +659,8 @@ int42mod(int32 arg1, int32 arg2)
        return arg1 % arg2;
 }
 
-/*
- *             int[24]fac              - returns arg1!
+/* int[24]fac()
+ * Factorial
  */
 int32
 int4fac(int32 arg1)
@@ -678,7 +678,7 @@ int4fac(int32 arg1)
 int32
 int2fac(int16 arg1)
 {
-       int16           result;
+       int32           result;
 
        if (arg1 < 1)
                result = 0;
@@ -688,6 +688,21 @@ int2fac(int16 arg1)
        return result;
 }
 
+/* int[24]abs()
+ * Absolute value
+ */
+int32
+int4abs(int32 arg1)
+{
+       return ((arg1 < 0)? -arg1: arg1);
+}
+
+int16
+int2abs(int16 arg1)
+{
+       return ((arg1 < 0)? -arg1: arg1);
+}
+
 int16
 int2larger(int16 arg1, int16 arg2)
 {
index 7c00686b19405846dc7266d4f169e22192157513..27b0f42c97f4838a2b402782c438bf7561c468fd 100644 (file)
@@ -359,6 +359,63 @@ int8div(int64 *val1, int64 *val2)
        return result;
 }      /* int8div() */
 
+/* int8abs()
+ * Absolute value
+ */
+int64 *
+int8abs(int64 *arg1)
+{
+       int64      *result;
+
+       if (!PointerIsValid(arg1))
+               return NULL;
+
+       result = palloc(sizeof(*result));
+
+       *result = ((*arg1 < 0)? -*arg1: *arg1);
+
+       return result;
+}
+
+/* int8mod()
+ * Modulo operation.
+ */
+int64 *
+int8mod(int64 *val1, int64 *val2)
+{
+       int64      *result;
+
+       /* use the divide operation to check params and allocate storage */
+       result = int8div(val1, val2);
+       *result *= *val2;
+       *result = *val1 - *result;
+
+       return result;
+}      /* int8mod() */
+
+/* int8fac()
+ * Factorial
+ */
+int64 *
+int8fac(int64 *arg1)
+{
+       int64      *result;
+       int64      i;
+
+       if (!PointerIsValid(arg1))
+               return NULL;
+
+       result = palloc(sizeof(*result));
+
+       if (*arg1 < 1)
+               *result = 0;
+       else
+               for (i = *arg1, *result = 1; i > 0; --i)
+                       *result *= i;
+
+       return result;
+}
+
 int64 *
 int8larger(int64 *val1, int64 *val2)
 {
@@ -634,4 +691,4 @@ int8_text(int64 *val)
        memmove(VARDATA(result), s, len);
 
        return result;
-}      /* int8out() */
+}      /* int8_text() */
index 50be811b22c8eabdd363c797cc50c98bf9756a19..b18cbf4a2080fec955339953203d441e6f89c230 100644 (file)
@@ -1,24 +1,14 @@
 /*
  *     Edmund Mergl <E.Mergl@bawue.de>
  *
- *     $Id: oracle_compat.c,v 1.20 1999/07/15 15:20:19 momjian Exp $
+ *     $Id: oracle_compat.c,v 1.21 2000/03/14 23:06:37 thomas Exp $
  *
  */
 
 
 #include <ctype.h>
 #include "postgres.h"
-
-text      *lower(text *string);
-text      *upper(text *string);
-text      *initcap(text *string);
-text      *lpad(text *string1, int4 len, text *string2);
-text      *rpad(text *string1, int4 len, text *string2);
-text      *btrim(text *string, text *set);
-text      *ltrim(text *string, text *set);
-text      *rtrim(text *string, text *set);
-text      *substr(text *string, int4 m, int4 n);
-text      *translate(text *string, char from, char to);
+#include "utils/builtins.h"
 
 
 /********************************************************************
@@ -506,42 +496,68 @@ substr(text *string, int4 m, int4 n)
  *
  * Syntax:
  *
- *      text *translate(text *string, char from, char to)
+ *      text *translate(text *string, text *from, text *to)
  *
  * Purpose:
  *
  *      Returns string after replacing all occurences of from with
  *      the corresponding character in to. TRANSLATE will not remove
  *       characters.
+ *      Modified to work with strings rather than single character
+ *       for the substitution arguments.
+ *      Modifications from Edwin Ramirez <ramirez@doc.mssm.edu>.
  *
  ********************************************************************/
 
 text *
-translate(text *string, char from, char to)
+translate(text *string, text *from, text *to)
 {
-       text       *ret;
-       char       *ptr,
-                          *ptr_ret;
-       int                     m;
+       text   *ret;
+       char   *ptr_ret, *from_ptr, *to_ptr;
+       char   *source, *target, *temp, rep;
+       int             m, fromlen, tolen, retlen, i;
 
        if ((string == (text *) NULL) ||
                ((m = VARSIZE(string) - VARHDRSZ) <= 0))
                return string;
 
-       ret = (text *) palloc(VARSIZE(string));
-       VARSIZE(ret) = VARSIZE(string);
-
-       ptr = VARDATA(string);
-       ptr_ret = VARDATA(ret);
+       target   = (char *) palloc(VARSIZE(string) - VARHDRSZ);
+       source   = VARDATA(string);
+       temp     = target;
 
+       fromlen = VARSIZE(from) - VARHDRSZ;
+       from_ptr = VARDATA(from);
+       tolen = VARSIZE(to) - VARHDRSZ;
+       to_ptr   = VARDATA(to);
+       retlen = 0;
        while (m--)
        {
-               *ptr_ret++ = *ptr == from ? to : *ptr;
-               ptr++;
+               rep = *source;
+               for(i=0;i<fromlen;i++) {
+            if(from_ptr[i] == *source)  {
+                               if(i < tolen) {
+                                       rep = to_ptr[i];
+                               } else {
+                                       rep = 0;
+                               }
+                               break;
+            }
+               }
+               if(rep != 0) {
+            *target++ = rep;
+            retlen++;
+               }
+               source++;
        }
 
+       ret = (text *) palloc(retlen + VARHDRSZ);
+       VARSIZE(ret) = retlen + VARHDRSZ;
+       ptr_ret = VARDATA(ret);
+       for(i=0;i<retlen;i++) {
+               *ptr_ret++ = temp[i];
+       }
+       pfree(target);
        return ret;
 }
 
-
 /* EOF */
index bdeaf440829bad16c91600ab5bc01152c5eee6c7..59ec46a85aa1d98dcd753dd4df110b78e027c42f 100644 (file)
@@ -3,7 +3,7 @@
  *                       out of its tuple
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.44 2000/02/26 21:13:18 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.45 2000/03/14 23:06:37 thomas Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -923,6 +923,8 @@ get_select_query_def(Query *query, deparse_context *context)
                        continue;
 
                rte = (RangeTblEntry *) lfirst(l);
+               if (rte->ref == NULL)
+                       continue;
                if (!strcmp(rte->ref->relname, "*NEW*"))
                        continue;
                if (!strcmp(rte->ref->relname, "*CURRENT*"))
@@ -982,9 +984,10 @@ get_select_query_def(Query *query, deparse_context *context)
                        {
                                rte = (RangeTblEntry *) lfirst(l);
 
+                               if (rte->ref == NULL)
+                                       continue;
                                if (!strcmp(rte->ref->relname, "*NEW*"))
                                        continue;
-
                                if (!strcmp(rte->ref->relname, "*CURRENT*"))
                                        continue;
 
@@ -1008,7 +1011,9 @@ get_select_query_def(Query *query, deparse_context *context)
                                 * Since we don't really support SQL joins yet, dropping
                                 * the list of column aliases doesn't hurt anything...
                                 */
-                               if (strcmp(rte->relname, rte->ref->relname) != 0)
+                               if ((rte->ref != NULL)
+                                       && ((strcmp(rte->relname, rte->ref->relname) != 0)
+                                               || (rte->ref->attrs != NIL)))
                                {
                                        appendStringInfo(buf, " %s",
                                                                         quote_identifier(rte->ref->relname));
@@ -1104,6 +1109,8 @@ get_insert_query_def(Query *query, deparse_context *context)
                        continue;
 
                rte = (RangeTblEntry *) lfirst(l);
+               if (rte->ref == NULL)
+                       continue;
                if (!strcmp(rte->ref->relname, "*NEW*"))
                        continue;
                if (!strcmp(rte->ref->relname, "*CURRENT*"))
@@ -1274,7 +1281,10 @@ get_rule_expr(Node *node, deparse_context *context)
 
                                if (context->varprefix)
                                {
-                                       if (!strcmp(rte->ref->relname, "*NEW*"))
+                                       if (rte->ref == NULL)
+                                               appendStringInfo(buf, "%s.",
+                                                                                quote_identifier(rte->relname));
+                                       else if (!strcmp(rte->ref->relname, "*NEW*"))
                                                appendStringInfo(buf, "new.");
                                        else if (!strcmp(rte->ref->relname, "*CURRENT*"))
                                                appendStringInfo(buf, "old.");
index 77202c8308ef180de8b1bed1a191b17d2d58cf03..4086a803dd7877574f683d00e8f873a774388991 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.22 2000/02/16 17:24:48 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.23 2000/03/14 23:06:37 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -952,6 +952,32 @@ interval_cmp(Interval *interval1, Interval *interval2)
        return (span1 < span2) ? -1 : (span1 > span2) ? 1 : 0;
 }      /* interval_cmp() */
 
+/* overlaps_timestamp()
+ * Implements the SQL92 OVERLAPS operator.
+ * Algorithm from Date and Darwen, 1997
+ */
+bool
+overlaps_timestamp(Timestamp *ts1, Timestamp *te1, Timestamp *ts2, Timestamp *te2)
+{
+       /* Make sure we have ordered pairs... */
+       if (timestamp_gt(ts1, te1))
+       {
+               Timestamp *tt = ts1;
+               ts1 = te1;
+               te1 = tt;
+       }
+       if (timestamp_gt(ts2, te2))
+       {
+               Timestamp *tt = ts2;
+               ts2 = te2;
+               te2 = tt;
+       }
+
+       return ((timestamp_gt(ts1, ts2) && (timestamp_lt(ts1, te2) || timestamp_lt(te1, te2)))
+                       || (timestamp_gt(ts2, ts1) && (timestamp_lt(ts2, te1) || timestamp_lt(te2, te1)))
+                       || timestamp_eq(ts1, ts2));
+} /* overlaps_timestamp() */
+
 
 /*----------------------------------------------------------
  *     "Arithmetic" operators on date/times.
index b789196652fac6f4d3621247832e86ac57f5c26d..8fb3c72e4c61b038c740cd170df566b048ae1437 100644 (file)
@@ -8,7 +8,7 @@
 #
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.6 2000/01/19 20:08:35 petere Exp $
+#    $Header: /cvsroot/pgsql/src/bin/scripts/Attic/createlang.sh,v 1.7 2000/03/14 23:06:41 thomas Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -241,11 +241,11 @@ if [ $? -ne 0 ]; then
        echo "$CMDNAME: language installation failed"
        exit 1
 fi
+
 $PSQL "CREATE ${trusted}PROCEDURAL LANGUAGE '$langname' HANDLER $handler LANCOMPILER '$lancomp'"
 if [ $? -ne 0 ]; then
        echo "$CMDNAME: language installation failed"
        exit 1
 fi
 
-echo "Ok"
 exit 0
index 168cd88ac6a30faebcb873509f8274a6af916f8e..3d302be9d75db9f0a2262ed69eb19bd95bd3bade 100644 (file)
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: catversion.h,v 1.17 2000/02/27 18:06:28 tgl Exp $
+ * $Id: catversion.h,v 1.18 2000/03/14 23:06:42 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*                          yyyymmddN */
-#define CATALOG_VERSION_NO  200002271
+#define CATALOG_VERSION_NO  200003141
 
 #endif
index 67c761e3690be43b6f7fd86c85a6a5056635176c..c953d33d00a2b27668886214feed6f1380c811d1 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_aggregate.h,v 1.23 2000/02/16 17:26:06 thomas Exp $
+ * $Id: pg_aggregate.h,v 1.24 2000/03/14 23:06:42 thomas Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -114,6 +114,8 @@ DATA(insert OID = 0 ( max   PGUID float4larger              - -  700  700 0  700 _null_ _null_
 DATA(insert OID = 0 ( max      PGUID float8larger              - -  701  701 0  701 _null_ _null_ ));
 DATA(insert OID = 0 ( max      PGUID int4larger                - -  702  702 0  702 _null_ _null_ ));
 DATA(insert OID = 0 ( max      PGUID date_larger               - - 1082 1082 0 1082 _null_ _null_ ));
+DATA(insert OID = 0 ( max      PGUID time_larger               - - 1083 1083 0 1083 _null_ _null_ ));
+DATA(insert OID = 0 ( max      PGUID timetz_larger             - - 1266 1266 0 1266 _null_ _null_ ));
 DATA(insert OID = 0 ( max      PGUID cashlarger                - -  790  790 0  790 _null_ _null_ ));
 DATA(insert OID = 0 ( max      PGUID timestamp_larger  - - 1184 1184 0 1184 _null_ _null_ ));
 DATA(insert OID = 0 ( max      PGUID interval_larger   - - 1186 1186 0 1186 _null_ _null_ ));
@@ -127,6 +129,8 @@ DATA(insert OID = 0 ( min   PGUID float4smaller             - -  700  700 0  700 _null_ _null
 DATA(insert OID = 0 ( min      PGUID float8smaller             - -  701  701 0  701 _null_ _null_ ));
 DATA(insert OID = 0 ( min      PGUID int4smaller               - -  702  702 0  702 _null_ _null_ ));
 DATA(insert OID = 0 ( min      PGUID date_smaller              - - 1082 1082 0 1082 _null_ _null_ ));
+DATA(insert OID = 0 ( min      PGUID time_smaller              - - 1083 1083 0 1083 _null_ _null_ ));
+DATA(insert OID = 0 ( min      PGUID timetz_smaller    - - 1266 1266 0 1266 _null_ _null_ ));
 DATA(insert OID = 0 ( min      PGUID cashsmaller               - -  790  790 0  790 _null_ _null_ ));
 DATA(insert OID = 0 ( min      PGUID timestamp_smaller - - 1184 1184 0 1184 _null_ _null_ ));
 DATA(insert OID = 0 ( min      PGUID interval_smaller  - - 1186 1186 0 1186 _null_ _null_ ));
index 66830cb18688bb3b25df841759bc6bb9daebbc4f..3f8859dd21611671072c91cca332840f48f5d36b 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.31 2000/02/27 12:02:33 wieck Exp $
+ * $Id: pg_amop.h,v 1.32 2000/03/14 23:06:43 thomas Exp $
  *
  * NOTES
  *      the genbki.sh script reads this file and generates .bki
@@ -285,7 +285,17 @@ DATA(insert OID = 0 (  403 1115 1113 4 ));
 DATA(insert OID = 0 (  403 1115 1112 5 ));
 
 /*
- *     nbtree datetime_ops
+ *     nbtree timetz_ops
+ */
+
+DATA(insert OID = 0 (  403 1399 1552 1 ));
+DATA(insert OID = 0 (  403 1399 1553 2 ));
+DATA(insert OID = 0 (  403 1399 1550 3 ));
+DATA(insert OID = 0 (  403 1399 1555 4 ));
+DATA(insert OID = 0 (  403 1399 1554 5 ));
+
+/*
+ *     nbtree timestamp_ops
  */
 
 DATA(insert OID = 0 (  403 1312 1322 1 ));
@@ -295,7 +305,7 @@ DATA(insert OID = 0 (  403 1312 1325 4 ));
 DATA(insert OID = 0 (  403 1312 1324 5 ));
 
 /*
- *     nbtree timespan_ops
+ *     nbtree interval_ops
  */
 
 DATA(insert OID = 0 (  403 1313 1332 1 ));
@@ -397,9 +407,11 @@ DATA(insert OID = 0 (  405 1077 1062 1 ));
 DATA(insert OID = 0 (  405 1114 1093 1 ));
 /* time_ops */
 DATA(insert OID = 0 (  405 1115 1108 1 ));
-/* datetime_ops */
+/* timetz_ops */
+DATA(insert OID = 0 (  405 1399 1550 1 ));
+/* timestamp_ops */
 DATA(insert OID = 0 (  405 1312 1320 1 ));
-/* timespan_ops */
+/* interval_ops */
 DATA(insert OID = 0 (  405 1313 1330 1 ));
 /* macaddr_ops */
 DATA(insert OID = 0 (  405 810 1220 1 ));
index 8be2a8ef9647cc7dd8d6fde9585fe05f1b4a15b0..a8cdb38d147017e55375a179bbdea7cf7bd6b91b 100644 (file)
@@ -10,7 +10,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amproc.h,v 1.21 2000/02/27 12:02:33 wieck Exp $
+ * $Id: pg_amproc.h,v 1.22 2000/03/14 23:06:43 thomas Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -95,12 +95,13 @@ DATA(insert OID = 0 (403 1115 1107 1));
 DATA(insert OID = 0 (403 1181  359 1));
 DATA(insert OID = 0 (403 1312 1314 1));
 DATA(insert OID = 0 (403 1313 1315 1));
-DATA(insert OID = 0 (403 810 836 1));
-DATA(insert OID = 0 (403 935 926 1));
-DATA(insert OID = 0 (403 652 926 1));
+DATA(insert OID = 0 (403  810  836 1));
+DATA(insert OID = 0 (403  935  926 1));
+DATA(insert OID = 0 (403  652  926 1));
 DATA(insert OID = 0 (403 1768 1769 1));
 DATA(insert OID = 0 (403 1690 1693 1));
 DATA(insert OID = 0 (403 1663 1636 1));
+DATA(insert OID = 0 (403 1399 1358 1));
 
 
 
@@ -120,5 +121,6 @@ DATA(insert OID = 0 (405 1115  452 1));
 DATA(insert OID = 0 (405 1181  455 1));
 DATA(insert OID = 0 (405 1312  452 1));
 DATA(insert OID = 0 (405 1313  452 1));
+DATA(insert OID = 0 (405 1399  452 1));
 
 #endif  /* PG_AMPROC_H */
index 1d17f6151a538419e97e1868eafec7ca500cf3bd..617bb0f4d319b8238961a989ec68b180ceb88b7d 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_opclass.h,v 1.30 2000/02/27 12:02:33 wieck Exp $
+ * $Id: pg_opclass.h,v 1.31 2000/03/14 23:06:43 thomas Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -63,64 +63,66 @@ typedef FormData_pg_opclass *Form_pg_opclass;
  * (see the README in this directory), so just put zeros
  * in, which are invalid OID's anyway.  --djm
  */
-DATA(insert OID =  421 (       int2_ops                 21   ));
+DATA(insert OID =  421 (       int2_ops         21   ));
 DESCR("");
-DATA(insert OID =  422 (       box_ops                 603   ));
+DATA(insert OID =  422 (       box_ops         603   ));
 DESCR("");
-DATA(insert OID =  423 (       float8_ops              701   ));
+DATA(insert OID =  423 (       float8_ops      701   ));
 DESCR("");
-DATA(insert OID =  424 (       int24_ops                 0   ));
+DATA(insert OID =  424 (       int24_ops         0   ));
 DESCR("");
-DATA(insert OID =  425 (       int42_ops                 0   ));
+DATA(insert OID =  425 (       int42_ops         0   ));
 DESCR("");
-DATA(insert OID =  426 (       int4_ops                 23   ));
+DATA(insert OID =  426 (       int4_ops         23   ));
 DESCR("");
 #define INT4_OPS_OID 426
-DATA(insert OID =  427 (       oid_ops                  26   ));
+DATA(insert OID =  427 (       oid_ops          26   ));
 DESCR("");
-DATA(insert OID =  428 (       float4_ops              700   ));
+DATA(insert OID =  428 (       float4_ops      700   ));
 DESCR("");
-DATA(insert OID =  429 (       char_ops                 18   ));
+DATA(insert OID =  429 (       char_ops         18   ));
 DESCR("");
-DATA(insert OID =  431 (       text_ops                 25   ));
+DATA(insert OID =  431 (       text_ops         25   ));
 DESCR("");
-DATA(insert OID =  432 (       abstime_ops             702   ));
+DATA(insert OID =  432 (       abstime_ops     702   ));
 DESCR("");
-DATA(insert OID =  433 (       bigbox_ops              603   ));
+DATA(insert OID =  433 (       bigbox_ops      603   ));
 DESCR("");
-DATA(insert OID =  434 (       poly_ops                604   ));
+DATA(insert OID =  434 (       poly_ops        604   ));
 DESCR("");
-DATA(insert OID =  435 (       oidvector_ops    30   ));
+DATA(insert OID =  435 (       oidvector_ops    30   ));
 DESCR("");
-DATA(insert OID =  714 (       circle_ops              718   ));
+DATA(insert OID =  714 (       circle_ops      718   ));
 DESCR("");
-DATA(insert OID =  754 (       int8_ops                 20   ));
+DATA(insert OID =  754 (       int8_ops         20   ));
 DESCR("");
-DATA(insert OID = 1076 (       bpchar_ops         1042   ));
+DATA(insert OID = 1076 (       bpchar_ops     1042   ));
 DESCR("");
 DATA(insert OID = 1077 (       varchar_ops    1043   ));
 DESCR("");
-DATA(insert OID = 1114 (       date_ops           1082   ));
+DATA(insert OID = 1114 (       date_ops       1082   ));
 DESCR("");
-DATA(insert OID = 1115 (       time_ops           1083   ));
+DATA(insert OID = 1115 (       time_ops       1083   ));
 DESCR("");
-DATA(insert OID = 1181 (       name_ops                 19   ));
+DATA(insert OID = 1181 (       name_ops         19   ));
 DESCR("");
 DATA(insert OID = 1312 (       timestamp_ops  1184   ));
 DESCR("");
 DATA(insert OID = 1313 (       interval_ops   1186   ));
 DESCR("");
-DATA(insert OID = 810  (       macaddr_ops     829       ));
+DATA(insert OID = 810  (       macaddr_ops     829   ));
 DESCR("");
-DATA(insert OID = 935  (       inet_ops            869   ));
+DATA(insert OID = 935  (       inet_ops        869   ));
 DESCR("");
-DATA(insert OID = 652  (       cidr_ops        650       ));
+DATA(insert OID = 652  (       cidr_ops        650   ));
 DESCR("");
-DATA(insert OID = 1768 (       numeric_ops    1700       ));
+DATA(insert OID = 1768 (       numeric_ops    1700   ));
 DESCR("");
-DATA(insert OID = 1663 (    lztext_ops     1625   ));
+DATA(insert OID = 1663 (       lztext_ops     1625   ));
 DESCR("");
-DATA(insert OID = 1690 (       bool_ops    16    ));
+DATA(insert OID = 1690 (       bool_ops         16   ));
+DESCR("");
+DATA(insert OID = 1399 (       timetz_ops     1266   ));
 DESCR("");
 
 #endif  /* PG_OPCLASS_H */
index 98f0a4183111c9f8a938098fb6cd49a6b3f65b5b..571f480ce24529a40ccb1ec6e06d479effd35c4d 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.71 2000/02/27 12:02:33 wieck Exp $
+ * $Id: pg_operator.h,v 1.72 2000/03/14 23:06:43 thomas Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -141,6 +141,8 @@ DATA(insert OID = 401 (  "="           PGUID 0 b t f  1034  1034  16  401 0  0      0 array_e
 
 DATA(insert OID = 387 ( "="       PGUID 0 b t t  27  27  16 387  0  0  0 tideq eqsel eqjoinsel ));
 #define TIDEqualOperator   387
+DATA(insert OID = 388 (  "!"      PGUID 0 r t f  20   0  20   0   0   0   0 int8fac - - ));
+DATA(insert OID = 389 (  "!!"     PGUID 0 l t f   0  20  20   0   0   0   0 int8fac - - ));
 
 DATA(insert OID = 410 ( "="               PGUID 0 b t t  20  20  16 410 411 412 412 int8eq eqsel eqjoinsel ));
 DATA(insert OID = 411 ( "<>"      PGUID 0 b t f  20  20  16 411 410 0 0 int8ne neqsel neqjoinsel ));
@@ -155,6 +157,8 @@ DATA(insert OID = 418 ( "<"            PGUID 0 b t f  20  23  16  76 430 0 0 int84lt sc
 DATA(insert OID = 419 ( ">"               PGUID 0 b t f  20  23  16  37 420 0 0 int84gt scalargtsel scalargtjoinsel ));
 DATA(insert OID = 420 ( "<="      PGUID 0 b t f  20  23  16  82 419 0 0 int84le scalarltsel scalarltjoinsel ));
 DATA(insert OID = 430 ( ">="      PGUID 0 b t f  20  23  16  80 418 0 0 int84ge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 439 (  "%"      PGUID 0 b t f  20  20  20   0   0 0 0 int8mod - - ));
+DATA(insert OID = 473 (  "@"      PGUID 0 l t f   0  20  20   0   0 0 0 int8abs - - ));
 
 DATA(insert OID = 484 (  "-"      PGUID 0 l t f   0  20  20   0   0   0   0 int8um - - ));
 DATA(insert OID = 485 (  "<<"     PGUID 0 b t f 604 604  16   0   0   0   0 poly_left positionsel positionjoinsel ));
@@ -216,12 +220,12 @@ DATA(insert OID = 540 (  "<="        PGUID 0 b t f  21  23  16 543 536  0  0 int24le
 DATA(insert OID = 541 (  "<="     PGUID 0 b t f  23  21  16 542 537  0  0 int42le scalarltsel scalarltjoinsel ));
 DATA(insert OID = 542 (  ">="     PGUID 0 b t f  21  23  16 541 534  0  0 int24ge scalargtsel scalargtjoinsel ));
 DATA(insert OID = 543 (  ">="     PGUID 0 b t f  23  21  16 540 535  0  0 int42ge scalargtsel scalargtjoinsel ));
-DATA(insert OID = 544 (  "*"      PGUID 0 b t f  21  23  23 545   0  0  0 int24mul - - ));
-DATA(insert OID = 545 (  "*"      PGUID 0 b t f  23  21  23 544   0  0  0 int42mul - - ));
-DATA(insert OID = 546 (  "/"      PGUID 0 b t f  21  23  23   0   0  0  0 int24div - - ));
-DATA(insert OID = 547 (  "/"      PGUID 0 b t f  23  21  23   0   0  0  0 int42div - - ));
-DATA(insert OID = 548 (  "%"      PGUID 0 b t f  21  23  23   0   0  0  0 int24mod - - ));
-DATA(insert OID = 549 (  "%"      PGUID 0 b t f  23  21  23   0   0  0  0 int42mod - - ));
+DATA(insert OID = 544 (  "*"      PGUID 0 b t f  21  23  23 545   0   0   0 int24mul - - ));
+DATA(insert OID = 545 (  "*"      PGUID 0 b t f  23  21  23 544   0   0   0 int42mul - - ));
+DATA(insert OID = 546 (  "/"      PGUID 0 b t f  21  23  23   0   0   0   0 int24div - - ));
+DATA(insert OID = 547 (  "/"      PGUID 0 b t f  23  21  23   0   0   0   0 int42div - - ));
+DATA(insert OID = 548 (  "%"      PGUID 0 b t f  21  23  23   0   0   0   0 int24mod - - ));
+DATA(insert OID = 549 (  "%"      PGUID 0 b t f  23  21  23   0   0   0   0 int42mod - - ));
 DATA(insert OID = 550 (  "+"      PGUID 0 b t f  21  21  21 550   0   0   0 int2pl - - ));
 DATA(insert OID = 551 (  "+"      PGUID 0 b t f  23  23  23 551   0   0   0 int4pl - - ));
 DATA(insert OID = 552 (  "+"      PGUID 0 b t f  21  23  23 553   0   0   0 int24pl - - ));
@@ -272,10 +276,10 @@ DATA(insert OID = 596 (  "|/"        PGUID 0 l t f   0 701 701   0   0   0   0 dsqrt
 DATA(insert OID = 597 (  "||/"    PGUID 0 l t f   0 701 701   0   0   0   0 dcbrt - - ));
 DATA(insert OID = 598 (  "%"      PGUID 0 l t f   0 701 701   0   0   0   0 dtrunc - - ));
 DATA(insert OID = 599 (  "%"      PGUID 0 r t f 701   0 701   0   0   0   0 dround - - ));
-DATA(insert OID = 1282 (  ":"          PGUID 0 l t f   0 701 701       0       0       0       0 dexp - - ));
-DATA(insert OID = 1283 (  ";"          PGUID 0 l t f   0 701 701       0       0       0       0 dlog1 - - ));
-DATA(insert OID = 1284 (  "|"          PGUID 0 l t f   0 704 702       0       0       0       0 tintervalstart - - ));
-DATA(insert OID = 606 (  "<#>"         PGUID 0 b t f 702 702 704       0       0       0       0 mktinterval - - ));
+DATA(insert OID = 1282 (  ":"     PGUID 0 l t f   0 701 701   0   0   0   0 dexp - - ));
+DATA(insert OID = 1283 (  ";"     PGUID 0 l t f   0 701 701   0   0   0   0 dlog1 - - ));
+DATA(insert OID = 1284 (  "|"     PGUID 0 l t f   0 704 702    0  0   0   0 tintervalstart - - ));
+DATA(insert OID = 606 (  "<#>"    PGUID 0 b t f 702 702 704    0  0   0   0 mktinterval - - ));
 DATA(insert OID = 607 (  "="      PGUID 0 b t t  26  26  16 607 608 609 609 oideq eqsel eqjoinsel ));
 #define MIN_OIDCMP 607 /* used by cache code */
 DATA(insert OID = 608 (  "<>"     PGUID 0 b t f  26  26  16 608 607  0  0 oidne neqsel neqjoinsel ));
@@ -344,6 +348,7 @@ DATA(insert OID = 673 (  "<="          PGUID 0 b t f  701  701      16 675 674      0 0 float8le
 DATA(insert OID = 674 (  ">"      PGUID 0 b t f  701  701      16 672 673      0 0 float8gt scalargtsel scalargtjoinsel ));
 DATA(insert OID = 675 (  ">="     PGUID 0 b t f  701  701      16 673 672      0 0 float8ge scalargtsel scalargtjoinsel ));
 
+DATA(insert OID = 682 (  "@"      PGUID 0 l t f   0  21  21   0   0   0   0 int2abs - - ));
 DATA(insert OID = 684 (  "+"      PGUID 0 b t f  20  20  20 684   0   0   0 int8pl - - ));
 DATA(insert OID = 685 (  "-"      PGUID 0 b t f  20  20  20   0   0   0   0 int8mi - - ));
 DATA(insert OID = 686 (  "*"      PGUID 0 b t f  20  20  20 686   0   0   0 int8mul - - ));
@@ -379,6 +384,8 @@ DATA(insert OID = 757 (  "~"           PGUID 0 b t f  604  600       16  756  0 0 0 poly_con
 DATA(insert OID = 758 (  "@"      PGUID 0 b t f  600  718       16  759  0 0 0 pt_contained_circle - - ));
 DATA(insert OID = 759 (  "~"      PGUID 0 b t f  718  600       16  758  0 0 0 circle_contain_pt - - ));
 
+DATA(insert OID = 773 (  "@"      PGUID 0 l t f   0  23  23   0   0   0   0 int4abs - - ));
+
 /* additional operators for geometric types - thomas 1997-07-09 */
 DATA(insert OID =  792 (  "="     PGUID 0 b t f  602  602       16  792  0 0 0 path_n_eq eqsel eqjoinsel ));
 DATA(insert OID =  793 (  "<"     PGUID 0 b t f  602  602       16  794  0 0 0 path_n_lt - - ));
@@ -480,6 +487,14 @@ DATA(insert OID = 1111 ( "<="         PGUID 0 b t f  1083  1083  16 1113 1112      0 0 time
 DATA(insert OID = 1112 ( ">"      PGUID 0 b t f  1083  1083  16 1110 1111      0 0 time_gt scalargtsel scalargtjoinsel ));
 DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1110      0 0 time_ge scalargtsel scalargtjoinsel ));
 
+/* timetz operators */
+DATA(insert OID = 1550 ( "="      PGUID 0 b t f  1266  1266  16 1550 1551 1552 1552 timetz_eq eqsel eqjoinsel ));
+DATA(insert OID = 1551 ( "<>"     PGUID 0 b t f  1266  1266  16 1551 1550      0 0 timetz_ne neqsel neqjoinsel ));
+DATA(insert OID = 1552 ( "<"      PGUID 0 b t f  1266  1266  16 1554 1555      0 0 timetz_lt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1553 ( "<="     PGUID 0 b t f  1266  1266  16 1555 1554      0 0 timetz_le scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1554 ( ">"      PGUID 0 b t f  1266  1266  16 1552 1553      0 0 timetz_gt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1555 ( ">="     PGUID 0 b t f  1266  1266  16 1553 1552      0 0 timetz_ge scalargtsel scalargtjoinsel ));
+
 /* float48 operators */
 DATA(insert OID = 1116 (  "+"          PGUID 0 b t f 700 701 701 1126   0       0       0 float48pl - - ));
 DATA(insert OID = 1117 (  "-"          PGUID 0 b t f 700 701 701        0       0       0       0 float48mi - - ));
@@ -505,8 +520,11 @@ DATA(insert OID = 1134 (  "<="             PGUID 0 b t f  701      700  16 1125 1133  0 0 float8
 DATA(insert OID = 1135 (  ">="         PGUID 0 b t f  701      700  16 1124 1132  0 0 float84ge scalargtsel scalargtjoinsel ));
 
 /* int4 and oid equality */
-DATA(insert OID = 1136 (  "="          PGUID 0 b t t 23 26 16 1137 0 0 0 int4eqoid eqsel eqjoinsel ));
-DATA(insert OID = 1137 (  "="          PGUID 0 b t t 26 23 16 1136 0 0 0 oideqint4 eqsel eqjoinsel ));
+DATA(insert OID = 1136 (  "="          PGUID 0 b t t   23   26   16 1137 0 0 0 int4eqoid eqsel eqjoinsel ));
+DATA(insert OID = 1137 (  "="          PGUID 0 b t t   26   23   16 1136 0 0 0 oideqint4 eqsel eqjoinsel ));
+
+DATA(insert OID = 1158 (  "!"          PGUID 0 r t f   21    0   23 0 0 0 0 int2fac - - ));
+DATA(insert OID = 1175 (  "!!"         PGUID 0 l t f    0   21   23 0 0 0 0 int2fac - - ));
 
 /* LIKE hacks by Keith Parks. */
 DATA(insert OID = 1207 (  "~~"   PGUID 0 b t f  19   25  16 0 1208 0 0 namelike eqsel eqjoinsel ));
@@ -544,7 +562,6 @@ DATA(insert OID = 1322 (  "<"          PGUID 0 b t f 1184 1184       16 1324 1325 0 0 times
 DATA(insert OID = 1323 (  "<="    PGUID 0 b t f 1184 1184       16 1325 1324 0 0 timestamp_le scalarltsel scalarltjoinsel ));
 DATA(insert OID = 1324 (  ">"     PGUID 0 b t f 1184 1184       16 1322 1323 0 0 timestamp_gt scalargtsel scalargtjoinsel ));
 DATA(insert OID = 1325 (  ">="    PGUID 0 b t f 1184 1184       16 1323 1322 0 0 timestamp_ge scalargtsel scalargtjoinsel ));
-
 DATA(insert OID = 1327 (  "+"     PGUID 0 b t f 1184 1186 1184    0    0 0 0 timestamp_pl_span - - ));
 DATA(insert OID = 1328 (  "-"     PGUID 0 b t f 1184 1184 1186    0    0 0 0 timestamp_mi - - ));
 DATA(insert OID = 1329 (  "-"     PGUID 0 b t f 1184 1186 1184    0    0 0 0 timestamp_mi_span - - ));
@@ -561,6 +578,11 @@ DATA(insert OID = 1336 (  "-"         PGUID 0 l t f        0 1186 1186    0        0 0 0 interval_u
 DATA(insert OID = 1337 (  "+"     PGUID 0 b t f 1186 1186 1186 1337    0 0 0 interval_pl - - ));
 DATA(insert OID = 1338 (  "-"     PGUID 0 b t f 1186 1186 1186    0    0 0 0 interval_mi - - ));
 
+DATA(insert OID = 1360 (  "+"     PGUID 0 b t f 1082 1083 1184    0    0 0 0 datetime_pl - - ));
+DATA(insert OID = 1361 (  "+"     PGUID 0 b t f 1082 1266 1184    0    0 0 0 datetimetz_pl - - ));
+DATA(insert OID = 1363 (  "+"     PGUID 0 b t f 1083 1082 1184    0    0 0 0 timedate_pl - - ));
+DATA(insert OID = 1366 (  "+"     PGUID 0 b t f 1266 1082 1184    0    0 0 0 timetzdate_pl - - ));
+
 /* additional geometric operators - thomas 97/04/18 */
 DATA(insert OID = 1420 (  "@@"   PGUID 0 l t f    0  718  600    0    0        0        0 circle_center - - ));
 DATA(insert OID = 1500 (  "="    PGUID 0 b t f  718  718       16 1500 1501 1502 1502 circle_eq eqsel eqjoinsel ));
@@ -670,6 +692,7 @@ DATA(insert OID = 828 (  ">>"          PGUID 0 b t f 650 650         16 826   0 0 0 network_s
 DATA(insert OID = 1004 ( ">>="    PGUID 0 b t f 650 650         16 827   0 0 0 network_supeq - - ));
 
 /* NUMERIC type - OID's 1700-1799 */
+DATA(insert OID = 1751 (  "-"     PGUID 0 l t f    0 1700 1700    0    0 0 0 numeric_uminus - - ));
 DATA(insert OID = 1752 (  "="     PGUID 0 b t f 1700 1700       16 1752 1753 1754 1754 numeric_eq eqsel eqjoinsel ));
 DATA(insert OID = 1753 (  "<>"    PGUID 0 b t f 1700 1700       16 1753 1752 0 0 numeric_ne neqsel neqjoinsel ));
 DATA(insert OID = 1754 (  "<"     PGUID 0 b t f 1700 1700       16 1756 1757 0 0 numeric_lt scalarltsel scalarltjoinsel ));
@@ -682,7 +705,6 @@ DATA(insert OID = 1760 (  "*"          PGUID 0 b t f 1700 1700 1700 1760    0 0 0 numeric
 DATA(insert OID = 1761 (  "/"     PGUID 0 b t f 1700 1700 1700    0    0 0 0 numeric_div - - ));
 DATA(insert OID = 1762 (  "%"     PGUID 0 b t f 1700 1700 1700    0    0 0 0 numeric_mod - - ));
 DATA(insert OID = 1763 (  "@"     PGUID 0 l t f        0 1700 1700    0        0 0 0 numeric_abs - - ));
-DATA(insert OID = 1788 (  "-"     PGUID 0 l t f    0 1700 1700    0    0 0 0 numeric_uminus - - ));
 
 /* LZTEXT type */
 DATA(insert OID = 1657 (  "="    PGUID 0 b t f 1625 1625   16 1657 1658 1659 1659 lztext_eq eqsel eqjoinsel ));
index 1e8e1632c564c9a0ec5333705bc5f187828291bf..8568dc5181031e9077664fc08fcbef2e1a306796 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.126 2000/02/27 12:02:33 wieck Exp $
+ * $Id: pg_proc.h,v 1.127 2000/03/14 23:06:44 thomas Exp $
  *
  * NOTES
  *       The script catalog/genbki.sh reads this file and generates .bki
@@ -204,8 +204,6 @@ DATA(insert OID = 1257 (  textlen              PGUID 11 f t t 1 f 23 "25" 100 0 1 0  text
 DESCR("length");
 DATA(insert OID = 1258 (  textcat                 PGUID 11 f t t 2 f 25 "25 25" 100 0 1 0      textcat - ));
 DESCR("concatenate");
-DATA(insert OID = 1377 (  textoctetlen    PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textoctetlen - ));
-DESCR("octet length");
 
 DATA(insert OID =  84 (  boolne                           PGUID 11 f t t 2 f 16 "16 16" 100 0 0 100  boolne - ));
 DESCR("not equal");
@@ -219,7 +217,9 @@ DESCR("btree cost estimator");
 
 /* OIDS 100 - 199 */
 
-DATA(insert OID = 1272 (  eqsel                           PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  eqsel - ));
+DATA(insert OID = 100 (  int8fac                  PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
+DESCR("factorial");
+DATA(insert OID = 101 (  eqsel                    PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  eqsel - ));
 DESCR("restriction selectivity of = and related operators");
 DATA(insert OID = 102 (  neqsel                           PGUID 11 f t f 5 f 701 "26 26 21 0 23" 100 0 0 100  neqsel - ));
 DESCR("restriction selectivity of <> and related operators");
@@ -236,11 +236,11 @@ DESCR("join selectivity of < and related operators on scalar datatypes");
 DATA(insert OID = 108 (  scalargtjoinsel   PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100 scalargtjoinsel - ));
 DESCR("join selectivity of > and related operators on scalar datatypes");
 
-DATA(insert OID = 112 (  int4_text                PGUID 11 f t t 1 f  25 "23" 100 0 0 100      int4_text - ));
+DATA(insert OID = 112 (  text                     PGUID 11 f t t 1 f  25 "23" 100 0 0 100      int4_text - ));
 DESCR("convert int4 to text");
-DATA(insert OID = 113 (  int2_text                PGUID 11 f t t 1 f  25 "21" 100 0 0 100      int2_text - ));
+DATA(insert OID = 113 (  text                     PGUID 11 f t t 1 f  25 "21" 100 0 0 100      int2_text - ));
 DESCR("convert int2 to text");
-DATA(insert OID = 114 (  oid_text                 PGUID 11 f t t 1 f  25 "26" 100 0 0 100      oid_text - ));
+DATA(insert OID = 114 (  text                     PGUID 11 f t t 1 f  25 "26" 100 0 0 100      oid_text - ));
 DESCR("convert oid to text");
 
 DATA(insert OID = 115 (  box_above                PGUID 11 f t t 2 f  16 "603 603" 100 1 0 100  box_above - ));
@@ -299,7 +299,7 @@ DESCR("join selectivity for area-comparison operators");
 DATA(insert OID = 141 (  int4mul                  PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mul - ));
 DESCR("multiply");
 DATA(insert OID = 142 (  int4fac                  PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
-DESCR("fraction");
+DESCR("factorial");
 DATA(insert OID = 143 (  pointdist                PGUID 11 f t t 2 f 23 "600 600" 100 0 0 100  pointdist - ));
 DESCR("");
 DATA(insert OID = 144 (  int4ne                           PGUID 11 f t t 2 f 16 "23 23" 100 0 0 100  int4ne - ));
@@ -406,7 +406,7 @@ DATA(insert OID = 194 (  rt_box_inter          PGUID 11 f t t 2 f 603 "603 603" 100 0
 DESCR("r-tree");
 DATA(insert OID = 195 (  rt_box_size      PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_box_size - ));
 DESCR("r-tree");
-DATA(insert OID = 196 (  rt_bigbox_size    PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_bigbox_size - ));
+DATA(insert OID = 196 (  rt_bigbox_size           PGUID 11 f t t 2 f 700 "603 700" 100 0 0 100  rt_bigbox_size - ));
 DESCR("r-tree");
 DATA(insert OID = 197 (  rt_poly_union    PGUID 11 f t t 2 f 604 "604 604" 100 0 0 100  rt_poly_union - ));
 DESCR("r-tree");
@@ -476,7 +476,7 @@ DATA(insert OID = 227 (  poly_center           PGUID 11 f t t 1 f 600 "604" 100 0 0 100
 DESCR("center of");
 
 DATA(insert OID = 228 (  dround                           PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
-DESCR("truncate to integer");
+DESCR("round to integer");
 DATA(insert OID = 229 (  dtrunc                           PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
 DESCR("truncate to integer");
 DATA(insert OID = 230 (  dsqrt                    PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
@@ -484,19 +484,19 @@ DESCR("square root");
 DATA(insert OID = 231 (  dcbrt                    PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
 DESCR("cube root");
 DATA(insert OID = 232 (  dpow                     PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
-DESCR("exponentiation");
+DESCR("exponential (x^y)");
 DATA(insert OID = 233 (  dexp                     PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
-DESCR("exponential");
+DESCR("natural exponential (e^x)");
 DATA(insert OID = 234 (  dlog1                    PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
-DESCR("natural logarithm (in psql, protect with ()");
+DESCR("natural logarithm");
 
-DATA(insert OID = 235 (  i2tod                    PGUID 11 f t t 1 f 701  "21" 100 0 0 100  i2tod - ));
+DATA(insert OID = 235 (  float8                           PGUID 11 f t t 1 f 701  "21" 100 0 0 100  i2tod - ));
 DESCR("convert int2 to float8");
-DATA(insert OID = 236 (  i2tof                    PGUID 11 f t t 1 f 700  "21" 100 0 0 100  i2tof - ));
+DATA(insert OID = 236 (  float4                           PGUID 11 f t t 1 f 700  "21" 100 0 0 100  i2tof - ));
 DESCR("convert int2 to float4");
-DATA(insert OID = 237 (  dtoi2                    PGUID 11 f t t 1 f  21 "701" 100 0 0 100  dtoi2 - ));
+DATA(insert OID = 237 (  int2                     PGUID 11 f t t 1 f  21 "701" 100 0 0 100  dtoi2 - ));
 DESCR("convert float8 to int2");
-DATA(insert OID = 238 (  ftoi2                    PGUID 11 f t t 1 f  21 "700" 100 0 0 100  ftoi2 - ));
+DATA(insert OID = 238 (  int2                     PGUID 11 f t t 1 f  21 "700" 100 0 0 100  ftoi2 - ));
 DESCR("convert float4 to int2");
 DATA(insert OID = 239 (  line_distance    PGUID 11 f t t 2 f 701 "628 628" 100 0 0 100  line_distance - ));
 DESCR("distance between");
@@ -522,7 +522,7 @@ DESCR("abstime in tinterval");
 DATA(insert OID = 249 (  tintervalrel     PGUID 11 f t f 1 f 703 "704" 100 0 0 100  tintervalrel - ));
 DESCR("");
 DATA(insert OID = 250 (  timenow                  PGUID 11 f t f 0 f 702 "0" 100 0 0 100  timenow - ));
-DESCR("Current date and time");
+DESCR("Current date and time (abstime)");
 DATA(insert OID = 251 (  abstimeeq                PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimeeq - ));
 DESCR("equal");
 DATA(insert OID = 252 (  abstimene                PGUID 11 f t f 2 f 16 "702 702" 100 0 0 100  abstimene - ));
@@ -571,10 +571,10 @@ DATA(insert OID = 273 (  tintervalend        PGUID 11 f t f 1 f 702 "704" 100 0 0 10
 DESCR("");
 DATA(insert OID = 274 (  timeofday                PGUID 11 f t f 0 f 25 "0" 100 0 0 100  timeofday - ));
 DESCR("Current date and time with microseconds");
-DATA(insert OID = 275 (  abstime_finite    PGUID 11 f t f 1 f 16 "702" 100 0 0 100     abstime_finite - ));
+DATA(insert OID = 275 (  isfinite                 PGUID 11 f t f 1 f 16 "702" 100 0 0 100      abstime_finite - ));
 DESCR("");
 
-DATA(insert OID = 276 (  int2fac                  PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2fac - ));
+DATA(insert OID = 276 (  int2fac                  PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
 DESCR("");
 
 DATA(insert OID = 277 (  inter_sl                 PGUID 11 f t t 2 f 16 "601 628" 100 0 0 100  inter_sl - ));
@@ -653,23 +653,23 @@ DESCR("greater-than");
 DATA(insert OID = 310 (  float84ge                PGUID 11 f t t 2 f 16 "701 700" 100 0 0 100  float84ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 311 (  ftod                     PGUID 11 f t t 1 f 701 "700" 100 0 0 100  ftod - ));
+DATA(insert OID = 311 (  float8                           PGUID 11 f t t 1 f 701 "700" 100 0 0 100  ftod - ));
 DESCR("convert float4 to float8");
-DATA(insert OID = 312 (  dtof                     PGUID 11 f t t 1 f 700 "701" 100 0 0 100  dtof - ));
+DATA(insert OID = 312 (  float4                           PGUID 11 f t t 1 f 700 "701" 100 0 0 100  dtof - ));
 DESCR("convert float8 to float4");
-DATA(insert OID = 313 (  i2toi4                           PGUID 11 f t t 1 f  23  "21" 100 0 0 100  i2toi4 - ));
+DATA(insert OID = 313 (  int4                     PGUID 11 f t t 1 f  23  "21" 100 0 0 100  i2toi4 - ));
 DESCR("convert int2 to int4");
-DATA(insert OID = 314 (  i4toi2                           PGUID 11 f t t 1 f  21  "23" 100 0 0 100  i4toi2 - ));
+DATA(insert OID = 314 (  int2                     PGUID 11 f t t 1 f  21  "23" 100 0 0 100  i4toi2 - ));
 DESCR("convert int4 to int2");
 DATA(insert OID = 315 (  int2vectoreq     PGUID 11 f t t 2 f  16  "22 22" 100 0 0 100  int2vectoreq - ));
 DESCR("equal");
-DATA(insert OID = 316 (  i4tod                    PGUID 11 f t t 1 f 701  "23" 100 0 0 100  i4tod - ));
+DATA(insert OID = 316 (  float8                           PGUID 11 f t t 1 f 701  "23" 100 0 0 100  i4tod - ));
 DESCR("convert int4 to float8");
-DATA(insert OID = 317 (  dtoi4                    PGUID 11 f t t 1 f  23 "701" 100 0 0 100  dtoi4 - ));
+DATA(insert OID = 317 (  int4                     PGUID 11 f t t 1 f  23 "701" 100 0 0 100  dtoi4 - ));
 DESCR("convert float8 to int4");
-DATA(insert OID = 318 (  i4tof                    PGUID 11 f t t 1 f 700  "23" 100 0 0 100  i4tof - ));
+DATA(insert OID = 318 (  float4                           PGUID 11 f t t 1 f 700  "23" 100 0 0 100  i4tof - ));
 DESCR("convert int4 to float4");
-DATA(insert OID = 319 (  ftoi4                    PGUID 11 f t t 1 f  23 "700" 100 0 0 100  ftoi4 - ));
+DATA(insert OID = 319 (  int4                     PGUID 11 f t t 1 f  23 "700" 100 0 0 100  ftoi4 - ));
 DESCR("convert float4 to int4");
 
 DATA(insert OID = 320 (  rtinsert                 PGUID 11 f t f 5 f 23 "0" 100 0 0 100  rtinsert - ));
@@ -718,11 +718,11 @@ DATA(insert OID = 341 (  poly_left                   PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0
 DESCR("is left of");
 DATA(insert OID = 342 (  poly_overleft    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overleft - ));
 DESCR("overlaps, but does not extend to right of");
-DATA(insert OID = 343 (  poly_overright    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overright - ));
+DATA(insert OID = 343 (  poly_overright           PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overright - ));
 DESCR("overlaps, but does not extend to left of");
 DATA(insert OID = 344 (  poly_right               PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_right - ));
 DESCR("is left of");
-DATA(insert OID = 345 (  poly_contained    PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contained - ));
+DATA(insert OID = 345 (  poly_contained           PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_contained - ));
 DESCR("contained in");
 DATA(insert OID = 346 (  poly_overlap     PGUID 11 f t t 2 f 16 "604 604" 100 0 1 0  poly_overlap - ));
 DESCR("overlaps");
@@ -765,35 +765,35 @@ DESCR("");
 DATA(insert OID = 363 (  dist_ps                  PGUID 11 f t t 2 f 701 "600 601" 100 0 0 100  dist_ps - ));
 DESCR("distance between");
 DATA(insert OID = 364 (  dist_pb                  PGUID 11 f t t 2 f 701 "600 603" 100 0 0 100  dist_pb - ));
-DESCR("distance between");
+DESCR("distance between point and box");
 DATA(insert OID = 365 (  dist_sb                  PGUID 11 f t t 2 f 701 "601 603" 100 0 0 100  dist_sb - ));
-DESCR("distance between");
+DESCR("distance between segment and box");
 DATA(insert OID = 366 (  close_ps                 PGUID 11 f t t 2 f 600 "600 601" 100 0 0 100  close_ps - ));
 DESCR("closest point on line segment");
 DATA(insert OID = 367 (  close_pb                 PGUID 11 f t t 2 f 600 "600 603" 100 0 0 100  close_pb - ));
 DESCR("closest point on box");
 DATA(insert OID = 368 (  close_sb                 PGUID 11 f t t 2 f 600 "601 603" 100 0 0 100  close_sb - ));
 DESCR("closest point to line segment on box");
-DATA(insert OID = 369 (  on_ps                    PGUID 11 f t t 2 f 16 "600 601" 100 0 0 100  on_ps - ));
-DESCR("contained in");
-DATA(insert OID = 370 (  path_distance    PGUID 11 f t t 2 f 701 "602 602" 100 0 1 0 path_distance - ));
-DESCR("distance between");
-DATA(insert OID = 371 (  dist_ppath               PGUID 11 f t t 2 f 701 "600 602" 100 0 1 0 dist_ppath - ));
-DESCR("distance between");
+DATA(insert OID = 369 (  on_ps                    PGUID 11 f t t 2 f 16 "600 601" 100 0 0 100  on_ps - ));
+DESCR("point contained in segment");
+DATA(insert OID = 370 (  path_distance    PGUID 11 f t t 2 f 701 "602 602" 100 0 1 0  path_distance - ));
+DESCR("distance between paths");
+DATA(insert OID = 371 (  dist_ppath               PGUID 11 f t t 2 f 701 "600 602" 100 0 1 0  dist_ppath - ));
+DESCR("distance between point and patch");
 DATA(insert OID = 372 (  on_sb                    PGUID 11 f t t 2 f 16 "601 603" 100 0 0 100  on_sb - ));
 DESCR("contained in");
 DATA(insert OID = 373 (  inter_sb                 PGUID 11 f t t 2 f 16 "601 603" 100 0 0 100  inter_sb - ));
-DESCR("");
+DESCR("intersects?");
 
 /* OIDS 400 - 499 */
 
-DATA(insert OID =  406 (  name_text               PGUID 11 f t t 1 f   25 "19" 100 0 0 100 name_text - ));
+DATA(insert OID =  406 (  text                    PGUID 11 f t t 1 f   25 "19" 100 0 0 100 name_text - ));
 DESCR("convert name to text");
-DATA(insert OID =  407 (  text_name               PGUID 11 f t t 1 f   19 "25" 100 0 0 100 text_name - ));
+DATA(insert OID =  407 (  name                    PGUID 11 f t t 1 f   19 "25" 100 0 0 100 text_name - ));
 DESCR("convert text to name");
-DATA(insert OID =  408 (  name_bpchar     PGUID 11 f t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
+DATA(insert OID =  408 (  bpchar                  PGUID 11 f t t 1 f 1042 "19" 100 0 0 100 name_bpchar - ));
 DESCR("convert name to char()");
-DATA(insert OID =  409 (  bpchar_name     PGUID 11 f t t 1 f   19 "1042" 100 0 0 100   bpchar_name - ));
+DATA(insert OID =  409 (  name                    PGUID 11 f t t 1 f   19 "1042" 100 0 0 100   bpchar_name - ));
 DESCR("convert char() to name");
 
 DATA(insert OID =  438 (  hashcostestimate PGUID 11 f t f 7 f 0 "0 0 0 0 0 0 0" 100 0 0 100  hashcostestimate - ));
@@ -882,13 +882,13 @@ DESCR("less-than-or-equal");
 DATA(insert OID = 479 (  int84ge                  PGUID 11 f t t 2 f 16 "20 23" 100 0 0 100  int84ge - ));
 DESCR("greater-than-or-equal");
 
-DATA(insert OID = 480 (  int84                    PGUID 11 f t t 1 f  23 "20" 100 0 0 100      int84 - ));
+DATA(insert OID = 480 (  int                    PGUID 11 f t t 1 f  23 "20" 100 0 0 100      int84 - ));
 DESCR("convert int8 to int4");
-DATA(insert OID = 481 (  int48                    PGUID 11 f t t 1 f  20 "23" 100 0 0 100      int48 - ));
+DATA(insert OID = 481 (  int                    PGUID 11 f t t 1 f  20 "23" 100 0 0 100      int48 - ));
 DESCR("convert int4 to int8");
-DATA(insert OID = 482 (  i8tod                    PGUID 11 f t t 1 f 701 "20" 100 0 0 100      i8tod - ));
+DATA(insert OID = 482 (  float8                           PGUID 11 f t t 1 f 701 "20" 100 0 0 100      i8tod - ));
 DESCR("convert int8 to float8");
-DATA(insert OID = 483 (  dtoi8                    PGUID 11 f t t 1 f  20 "701" 100 0 0 100  dtoi8 - ));
+DATA(insert OID = 483 (  int8                     PGUID 11 f t t 1 f  20 "701" 100 0 0 100  dtoi8 - ));
 DESCR("convert float8 to int8");
 
 /* OIDS 500 - 599 */
@@ -960,11 +960,11 @@ DATA(insert OID = 724 (  byteaSetBit         PGUID 11 f t t 3 f 17 "17 23 23" 100 0 0
 DESCR("");
 
 DATA(insert OID = 725 (  dist_pl                  PGUID 11 f t t 2 f 701 "600 628" 100 0 0 100  dist_pl - ));
-DESCR("distance between");
+DESCR("distance between point and line");
 DATA(insert OID = 726 (  dist_lb                  PGUID 11 f t t 2 f 701 "628 603" 100 0 0 100  dist_lb - ));
-DESCR("distance between");
+DESCR("distance between line and box");
 DATA(insert OID = 727 (  dist_sl                  PGUID 11 f t t 2 f 701 "601 628" 100 0 0 100  dist_sl - ));
-DESCR("distance between");
+DESCR("distance between lseg and line");
 DATA(insert OID = 728 (  dist_cpoly               PGUID 11 f t t 2 f 701 "718 604" 100 0 0 100  dist_cpoly - ));
 DESCR("distance between");
 DATA(insert OID = 729 (  poly_distance    PGUID 11 f t t 2 f 701 "604 604" 100 0 0 100  poly_distance - ));
@@ -1067,20 +1067,20 @@ DESCR("greater-than-or-equal");
 
 /* OIDS 800 - 899 */
 
-DATA(insert OID = 817 (  text_oid                 PGUID 11 f t t 1 f 26 "25" 100 0 0 100  text_oid -));
+DATA(insert OID = 817 (  oid                      PGUID 11 f t t 1 f 26 "25" 100 0 0 100  text_oid -));
 DESCR("convert text to oid");
-DATA(insert OID = 818 (  text_int2                PGUID 11 f t t 1 f 21 "25" 100 0 0 100  text_int2 -));
+DATA(insert OID = 818 (  int2                     PGUID 11 f t t 1 f 21 "25" 100 0 0 100  text_int2 -));
 DESCR("convert text to int2");
-DATA(insert OID = 819 (  text_int4                PGUID 11 f t t 1 f 23 "25" 100 0 0 100  text_int4 -));
+DATA(insert OID = 819 (  int4                     PGUID 11 f t t 1 f 23 "25" 100 0 0 100  text_int4 -));
 DESCR("convert text to int4");
 
-DATA(insert OID = 838 (  text_float8      PGUID 11 f t t 1 f 701 "25" 100 0 0 100      text_float8 -));
+DATA(insert OID = 838 (  float8                           PGUID 11 f t t 1 f 701 "25" 100 0 0 100      text_float8 -));
 DESCR("convert text to float8");
-DATA(insert OID = 839 (  text_float4      PGUID 11 f t t 1 f 700 "25" 100 0 0 100      text_float4 -));
+DATA(insert OID = 839 (  float4                           PGUID 11 f t t 1 f 700 "25" 100 0 0 100      text_float4 -));
 DESCR("convert text to float4");
-DATA(insert OID = 840 (  float8_text      PGUID 11 f t t 1 f  25 "701" 100 0 0 100  float8_text -));
+DATA(insert OID = 840 (  text                     PGUID 11 f t t 1 f  25 "701" 100 0 0 100  float8_text -));
 DESCR("convert float8 to text");
-DATA(insert OID = 841 (  float4_text      PGUID 11 f t t 1 f  25 "700" 100 0 0 100  float4_text -));
+DATA(insert OID = 841 (  text                     PGUID 11 f t t 1 f  25 "700" 100 0 0 100  float4_text -));
 DESCR("convert float4 to text");
 
 DATA(insert OID =  846 (  cash_mul_flt4    PGUID 11 f t t 2 f 790 "790 700" 100 0 0 100  cash_mul_flt4 - ));
@@ -1090,7 +1090,7 @@ DESCR("divide");
 DATA(insert OID =  848 (  flt4_mul_cash    PGUID 11 f t t 2 f 790 "700 790" 100 0 0 100  flt4_mul_cash - ));
 DESCR("multiply");
 
-DATA(insert OID =  849 (  textpos                 PGUID 11 f t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
+DATA(insert OID =  849 (  position                PGUID 11 f t t 2 f 23 "25 25" 100 0 1 0 textpos - ));
 DESCR("return position of substring");
 DATA(insert OID =  850 (  textlike                PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0 textlike - ));
 DESCR("matches LIKE expression");
@@ -1115,9 +1115,9 @@ DESCR("matches LIKE expression");
 DATA(insert OID =  859 (  namenlike               PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
 DESCR("does not match LIKE expression");
 
-DATA(insert OID =  860 (  char_bpchar     PGUID 11 f t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
+DATA(insert OID =  860 (  bpchar                  PGUID 11 f t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
 DESCR("convert char to char()");
-DATA(insert OID =  861 (  bpchar_char     PGUID 11 f t t 1 f   18 "1042" 100 0 0 100  bpchar_char - ));
+DATA(insert OID =  861 (  char                    PGUID 11 f t t 1 f   18 "1042" 100 0 0 100  bpchar_char - ));
 DESCR("convert char() to char");
 
 DATA(insert OID =  862 (  int4_mul_cash                   PGUID 11 f t t 2 f 790 "23 790" 100 0 0 100  int4_mul_cash - ));
@@ -1179,18 +1179,26 @@ DESCR("");
 DATA(insert OID = 939 (  revertpoly               PGUID 11 f t f 1 f 604 "604" 100 0 0 100  revertpoly - ));
 DESCR("");
 
-DATA(insert OID = 942 (  char_text                PGUID 11 f t t 1 f 25 "18" 100 0 0 100  char_text - ));
-DESCR("convert char to text");
-DATA(insert OID = 943 (  text_char                PGUID 11 f t t 1 f 18 "25" 100 0 0 100  text_char - ));
-DESCR("convert text to char");
+DATA(insert OID = 940 (  mod                      PGUID 11 f t t 2 f 21 "21 21" 100 0 0 100  int2mod - ));
+DESCR("modulus");
+DATA(insert OID = 941 (  mod                      PGUID 11 f t t 2 f 23 "23 23" 100 0 0 100  int4mod - ));
+DESCR("modulus");
+DATA(insert OID = 942 (  mod                      PGUID 11 f t t 2 f 23 "21 23" 100 0 0 100  int24mod - ));
+DESCR("modulus");
+DATA(insert OID = 943 (  mod                      PGUID 11 f t t 2 f 23 "23 21" 100 0 0 100  int42mod - ));
+DESCR("modulus");
+
+DATA(insert OID = 945 (  int8mod                  PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DESCR("modulus");
+DATA(insert OID = 947 (  mod                      PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8mod - ));
+DESCR("modulus");
+
 DATA(insert OID = 944 (  char                     PGUID 11 f t t 1 f 18 "25" 100 0 0 100  text_char - ));
-DESCR("convert text to char()");
+DESCR("convert text to char");
 DATA(insert OID = 946 (  text                     PGUID 11 f t t 1 f 25 "18" 100 0 0 100  char_text - ));
 DESCR("convert char to text");
-DATA(insert OID = 947 (  char                     PGUID 11 f t t 1 f 18 "1042" 100 0 0 100  bpchar_char - ));
-DESCR("convert char() to char");
 DATA(insert OID = 948 (  varchar                  PGUID 11 f t t 1 f 25 "1043" 100 0 0 100  bpchar_char - ));
-DESCR("convert char to text");
+DESCR("convert varchar() to text");
 
 DATA(insert OID = 950 (  istrue                           PGUID 11 f t t 1 f 16 "16" 100 0 0 100  istrue - ));
 DESCR("");
@@ -1213,9 +1221,9 @@ DATA(insert OID = 958 (  lo_tell             PGUID 11 f t f 1 f 23 "23" 100 0 0 100  lo_
 DESCR("large object position");
 
 DATA(insert OID = 959 (  on_pl                    PGUID 11 f t t 2 f  16 "600 628" 100 0 10 100  on_pl - ));
-DESCR("contained in");
+DESCR("point on line?");
 DATA(insert OID = 960 (  on_sl                    PGUID 11 f t t 2 f  16 "601 628" 100 0 10 100  on_sl - ));
-DESCR("contained in");
+DESCR("lseg on line?");
 DATA(insert OID = 961 (  close_pl                 PGUID 11 f t t 2 f 600 "600 628" 100 0 10 100  close_pl - ));
 DESCR("closest point on line");
 DATA(insert OID = 962 (  close_sl                 PGUID 11 f t t 2 f 600 "601 628" 100 0 10 100  close_sl - ));
@@ -1229,18 +1237,18 @@ DATA(insert OID = 972 (  regproctooid      PGUID 11 f t t 1 f  26 "24" 100 0 0 100
 DESCR("get oid for regproc");
 
 DATA(insert OID = 973 (  path_inter               PGUID 11 f t t 2 f  16 "602 602" 100 0 10 100  path_inter - ));
-DESCR("");
-DATA(insert OID = 975 (  box_area                 PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_area - ));
+DESCR("paths intersect?");
+DATA(insert OID = 975 (  area                     PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_area - ));
 DESCR("box area");
-DATA(insert OID = 976 (  box_width                PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_width - ));
+DATA(insert OID = 976 (  width                    PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_width - ));
 DESCR("box width");
-DATA(insert OID = 977 (  box_height               PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_height - ));
+DATA(insert OID = 977 (  height                           PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_height - ));
 DESCR("box height");
 DATA(insert OID = 978 (  box_distance     PGUID 11 f t t 2 f 701 "603 603" 100 0 0 100  box_distance - ));
-DESCR("distance between");
+DESCR("distance between boxes");
 DATA(insert OID = 980 (  box_intersect    PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  box_intersect - ));
-DESCR("intersects");
-DATA(insert OID = 981 (  box_diagonal     PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
+DESCR("box intersection (another box)");
+DATA(insert OID = 981 (  diagonal                 PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("box diagonal");
 DATA(insert OID = 982 (  path_n_lt                PGUID 11 f t t 2 f 16 "602 602" 100 0 0 100  path_n_lt - ));
 DESCR("less-than");
@@ -1257,25 +1265,25 @@ DESCR("sum of path segments");
 DATA(insert OID = 988 (  point_ne                 PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_ne - ));
 DESCR("not equal");
 DATA(insert OID = 989 (  point_vert               PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_vert - ));
-DESCR("is vertical");
+DESCR("vertical?");
 DATA(insert OID = 990 (  point_horiz      PGUID 11 f t t 2 f 16 "600 600" 100 0 0 100  point_horiz - ));
-DESCR("is horizontal");
-DATA(insert OID = 991 (  point_distance    PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_distance - ));
+DESCR("horizontal?");
+DATA(insert OID = 991 (  point_distance           PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_distance - ));
 DESCR("distance between");
-DATA(insert OID = 992 (  point_slope      PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_slope - ));
+DATA(insert OID = 992 (  slope                    PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_slope - ));
 DESCR("slope between points");
-DATA(insert OID = 993 (  lseg_construct    PGUID 11 f t t 2 f 601 "600 600" 100 0 0 100  lseg_construct - ));
+DATA(insert OID = 993 (  lseg                     PGUID 11 f t t 2 f 601 "600 600" 100 0 0 100  lseg_construct - ));
 DESCR("convert points to line segment");
-DATA(insert OID = 994 (  lseg_intersect    PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100 lseg_intersect - ));
-DESCR("intersects");
+DATA(insert OID = 994 (  lseg_intersect           PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_intersect - ));
+DESCR("intersects?");
 DATA(insert OID = 995 (  lseg_parallel    PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_parallel - ));
-DESCR("is parallel to");
+DESCR("parallel?");
 DATA(insert OID = 996 (  lseg_perp                PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_perp - ));
-DESCR("is perpendicular to");
+DESCR("perpendicular?");
 DATA(insert OID = 997 (  lseg_vertical    PGUID 11 f t t 1 f 16 "601" 100 0 0 100      lseg_vertical - ));
-DESCR("is vertical");
+DESCR("vertical?");
 DATA(insert OID = 998 (  lseg_horizontal   PGUID 11 f t t 1 f 16 "601" 100 0 0 100     lseg_horizontal - ));
-DESCR("is horizontal");
+DESCR("horizontal?");
 DATA(insert OID = 999 (  lseg_eq                  PGUID 11 f t t 2 f 16 "601 601" 100 0 0 100  lseg_eq - ));
 DESCR("equal");
 
@@ -1413,10 +1421,8 @@ DATA(insert OID = 1156 (  timestamp_ge      PGUID 11 f t f 2 f   16 "1184 1184" 100
 DESCR("greater-than-or-equal");
 DATA(insert OID = 1157 (  timestamp_gt    PGUID 11 f t f 2 f   16 "1184 1184" 100 0 0 100      timestamp_gt - ));
 DESCR("greater-than");
-DATA(insert OID = 1158 (  timestamp_finite  PGUID 11 f t f 1 f 16 "1184" 100 0 0 100  timestamp_finite - ));
-DESCR("");
-DATA(insert OID = 1159 (  timestamp_zone    PGUID 11 f t f 2 f 25 "25 1184" 100 0 0 100  timestamp_zone - ));
-DESCR("");
+DATA(insert OID = 1159 (  timezone                PGUID 11 f t f 2 f   25 "25 1184" 100 0 0 100  timestamp_zone - ));
+DESCR("time zone");
 
 DATA(insert OID = 1160 (  interval_in     PGUID 11 f t f 1 f 1186 "0" 100 0 0 100      interval_in - ));
 DESCR("(internal)");
@@ -1436,28 +1442,28 @@ DATA(insert OID = 1167 (  interval_gt      PGUID 11 f t f 2 f 16 "1186 1186" 100 0
 DESCR("greater-than");
 DATA(insert OID = 1168 (  interval_um     PGUID 11 f t f 1 f 1186 "1186" 100 0 0 100  interval_um - ));
 DESCR("subtract");
-DATA(insert OID = 1169 (  interval_pl    PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_pl - ));
+DATA(insert OID = 1169 (  interval_pl     PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_pl - ));
 DESCR("addition");
-DATA(insert OID = 1170 (  interval_mi    PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_mi - ));
+DATA(insert OID = 1170 (  interval_mi     PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_mi - ));
 DESCR("subtract");
-DATA(insert OID = 1171 (  timestamp_part    PGUID 11 f t f 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
+DATA(insert OID = 1171 (  date_part               PGUID 11 f t f 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
 DESCR("extract field from timestamp");
-DATA(insert OID = 1172 (  interval_part    PGUID 11 f t f 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
+DATA(insert OID = 1172 (  date_part               PGUID 11 f t f 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
 DESCR("extract field from interval");
 
-DATA(insert OID = 1173 (  abstime_timestamp     PGUID 11 f t f 1 f 1184  "702" 100 0 0 100  abstime_timestamp - ));
+DATA(insert OID = 1173 (  timestamp               PGUID 11 f t f 1 f 1184  "702" 100 0 0 100  abstime_timestamp - ));
 DESCR("convert abstime to timestamp");
-DATA(insert OID = 1174 (  date_timestamp                PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
+DATA(insert OID = 1174 (  timestamp               PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
 DESCR("convert date to timestamp");
-DATA(insert OID = 1176 (  datetime_timestamp  PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
+DATA(insert OID = 1176 (  timestamp               PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
 DESCR("convert date and time to timestamp");
-DATA(insert OID = 1177 (  reltime_interval      PGUID 11 f t f 1 f 1186  "703" 100 0 0 100  reltime_interval - ));
+DATA(insert OID = 1177 (  interval                PGUID 11 f t f 1 f 1186  "703" 100 0 0 100  reltime_interval - ));
 DESCR("convert reltime to interval");
-DATA(insert OID = 1178 (  timestamp_date                PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
+DATA(insert OID = 1178 (  date                    PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
 DESCR("convert timestamp to date");
-DATA(insert OID = 1179 (  abstime_date          PGUID 11 f t f 1 f 1082  "702" 100 0 0 100  abstime_date - ));
+DATA(insert OID = 1179 (  date                    PGUID 11 f t f 1 f 1082  "702" 100 0 0 100  abstime_date - ));
 DESCR("convert abstime to date");
-DATA(insert OID = 1180 (  timestamp_abstime     PGUID 11 f t f 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
+DATA(insert OID = 1180 (  abstime                 PGUID 11 f t f 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
 DESCR("convert timestamp to abstime");
 
 DATA(insert OID = 1188 (  timestamp_mi         PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_mi - ));
@@ -1466,37 +1472,37 @@ DATA(insert OID = 1189 (  timestamp_pl_span     PGUID 11 f t f 2 f 1184 "1184 1186"
 DESCR("plus");
 DATA(insert OID = 1190 (  timestamp_mi_span    PGUID 11 f t f 2 f 1184 "1184 1186" 100 0 0 100  timestamp_mi_span - ));
 DESCR("minus");
-DATA(insert OID = 1191 (  text_timestamp                PGUID 11 f t f 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
+DATA(insert OID = 1191 (  timestamp                    PGUID 11 f t f 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
 DESCR("convert text to timestamp");
-DATA(insert OID = 1192 (  timestamp_text                PGUID 11 f t f 1 f   25 "1184" 100 0 0 100  timestamp_text - ));
+DATA(insert OID = 1192 (  text                         PGUID 11 f t f 1 f   25 "1184" 100 0 0 100  timestamp_text - ));
 DESCR("convert timestamp to text");
-DATA(insert OID = 1193 (  interval_text                 PGUID 11 f t f 1 f   25 "1186" 100 0 0 100  interval_text - ));
+DATA(insert OID = 1193 (  text                         PGUID 11 f t f 1 f   25 "1186" 100 0 0 100  interval_text - ));
 DESCR("convert interval to text");
-DATA(insert OID = 1194 (  interval_reltime      PGUID 11 f t f 1 f  703 "1186" 100 0 0 100  interval_reltime - ));
+DATA(insert OID = 1194 (  reltime                      PGUID 11 f t f 1 f  703 "1186" 100 0 0 100  interval_reltime - ));
 DESCR("convert interval to reltime");
-DATA(insert OID = 1195 (  timestamp_smaller     PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
+DATA(insert OID = 1195 (  timestamp_smaller    PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1196 (  timestamp_larger      PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
+DATA(insert OID = 1196 (  timestamp_larger     PGUID 11 f t f 2 f 1184 "1184 1184" 100 0 0 100  timestamp_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1197 (  interval_smaller      PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
+DATA(insert OID = 1197 (  interval_smaller     PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_smaller - ));
 DESCR("smaller of two");
-DATA(insert OID = 1198 (  interval_larger       PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
+DATA(insert OID = 1198 (  interval_larger   PGUID 11 f t f 2 f 1186 "1186 1186" 100 0 0 100  interval_larger - ));
 DESCR("larger of two");
-DATA(insert OID = 1199 (  timestamp_age                 PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_age - ));
+DATA(insert OID = 1199 (  age                      PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100  timestamp_age - ));
 DESCR("date difference preserving months and years");
 
 /* OIDS 1200 - 1299 */
 
-DATA(insert OID = 1200 (  int4reltime     PGUID 11 f t t 1 f  703 "23" 100 0 0 100  int4reltime - ));
+DATA(insert OID = 1200 (  reltime                 PGUID 11 f t t 1 f  703 "23" 100 0 0 100  int4reltime - ));
 DESCR("convert int4 to reltime");
 
-DATA(insert OID = 1217 (  timestamp_trunc   PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
+DATA(insert OID = 1217 (  date_trunc      PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
 DESCR("truncate timestamp to specified units");
-DATA(insert OID = 1218 (  interval_trunc   PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
+DATA(insert OID = 1218 (  date_trunc      PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
 DESCR("truncate interval to specified units");
 
-DATA(insert OID = 1230 (  bpchar                  PGUID 11 f t t 1 f 1042 "18" 100 0 0 100  char_bpchar - ));
-DESCR("convert char to char()");
+DATA(insert OID = 1230 (  int8abs                 PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
+DESCR("absolute value");
 
 DATA(insert OID = 1236 (  int8larger      PGUID 11 f t t 2 f 20 "20 20" 100 0 0 100  int8larger - ));
 DESCR("larger of two");
@@ -1512,19 +1518,18 @@ DESCR("matches regex., case-insensitive");
 DATA(insert OID = 1241 (  nameicregexne    PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  nameicregexne - ));
 DESCR("does not match regex., case-insensitive");
 
-DATA(insert OID = 1251 (  bpcharlen               PGUID 11 f t t 1 f 23 "1042" 100 0 0 100  bpcharlen - ));
-DESCR("octet length");
-DATA(insert OID = 1378 (  bpcharoctetlen   PGUID 11 f t t 1 f 23 "1042" 100 0 0 100  bpcharoctetlen - ));
-DESCR("octet length");
-DATA(insert OID = 1253 (  varcharlen      PGUID 11 f t t 1 f 23 "1043" 100 0 0 100  varcharlen - ));
-DESCR("character length");
-DATA(insert OID = 1379 (  varcharoctetlen  PGUID 11 f t t 1 f 23 "1043" 100 0 0 100  varcharoctetlen - ));
-DESCR("octet length");
+DATA(insert OID = 1251 (  int4abs                 PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
+DESCR("absolute value");
+DATA(insert OID = 1253 (  int2abs                 PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
+DESCR("absolute value");
 
-DATA(insert OID = 1263 (  text_interval    PGUID 11 f t f 1 f 1186 "25" 100 0 0 100  text_interval - ));
+DATA(insert OID = 1263 (  interval                PGUID 11 f t f 1 f 1186 "25" 100 0 0 100  text_interval - ));
 DESCR("convert text to interval");
-DATA(insert OID = 1271 (  interval_finite  PGUID 11 f t f 1 f  16 "1186" 100 0 0 100  interval_finite - ));
-DESCR("boolean test");
+
+DATA(insert OID = 1271 (  overlaps                PGUID 11 f t t 4 f 16 "1266 1266 1266 1266" 100 0 1 0  overlaps_timetz - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1272 (  datetime_pl     PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
+DESCR("convert date and time to timestamp");
 
 DATA(insert OID = 1274 (  int84pl                 PGUID 11 f t t 2 f 20 "20 23" 100 0 0 100  int84pl - ));
 DESCR("addition");
@@ -1543,9 +1548,9 @@ DESCR("multiply");
 DATA(insert OID = 1281 (  int48div                PGUID 11 f t t 2 f 20 "23 20" 100 0 0 100  int48div - ));
 DESCR("divide");
 
-DATA(insert OID = 1288 (  int8_text               PGUID 11 f t t 1 f 25 "20" 100 0 0 100  int8_text - ));
+DATA(insert OID = 1288 (  text                    PGUID 11 f t t 1 f 25 "20" 100 0 0 100  int8_text - ));
 DESCR("convert int8 to text");
-DATA(insert OID = 1289 (  text_int8               PGUID 11 f t t 1 f 20 "25" 100 0 0 100  text_int8 - ));
+DATA(insert OID = 1289 (  int8                    PGUID 11 f t t 1 f 20 "25" 100 0 0 100  text_int8 - ));
 DESCR("convert text to int8");
 
 DATA(insert OID = 1290 (  _bpchar                 PGUID 11 f t t 2 f 1014 "1014 23" 100 0 0 100  _bpchar - ));
@@ -1560,6 +1565,12 @@ DESCR("latest tid of a tuple");
 DATA(insert OID = 1294 ( currtid2                 PGUID 11 f t f 2 f 27 "25 27" 100 0 0 100  currtid_byrelname - ));
 DESCR("latest tid of a tuple");
 
+DATA(insert OID = 1296 (  timedate_pl     PGUID 14 f t f 2 f 1184 "1083 1082" 100 0 0 100  "select datetime_pl($2, $1)" - ));
+DESCR("convert time and date to timestamp");
+DATA(insert OID = 1297 (  datetimetz_pl           PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100  datetimetz_timestamp - ));
+DESCR("convert date and time with time zone to timestamp");
+DATA(insert OID = 1298 (  timetzdate_pl           PGUID 14 f t f 2 f 1184 "1266 1082" 100 0 0 100  "select datetimetz_pl($2, $1)" - ));
+DESCR("convert time with time zone and date to timestamp");
 DATA(insert OID = 1299 (  now                     PGUID 11 f t f 0 f 1184 "0" 100 0 0 100      now - ));
 DESCR("current transaction time");
 
@@ -1574,79 +1585,106 @@ DESCR("restriction selectivity for containment comparison operators");
 DATA(insert OID = 1303 (  contjoinsel     PGUID 11 f t f 5 f 701 "26 26 21 26 21" 100 0 0 100  contjoinsel - ));
 DESCR("join selectivity for containment comparison operators");
 
+DATA(insert OID = 1304 ( overlaps                       PGUID 11 f t t 4 f 16 "1184 1184 1184 1184" 100 0 1 0  overlaps_timestamp - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1305 ( overlaps                       PGUID 14 f t t 4 f 16 "1184 1186 1184 1186" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1306 ( overlaps                       PGUID 14 f t t 4 f 16 "1184 1184 1184 1186" 100 0 1 0  "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1307 ( overlaps                       PGUID 14 f t t 4 f 16 "1184 1186 1184 1184" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DESCR("SQL92 interval comparison");
+
+DATA(insert OID = 1308 ( overlaps                       PGUID 11 f t t 4 f 16 "1083 1083 1083 1083" 100 0 1 0  overlaps_time - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1309 ( overlaps                       PGUID 14 f t t 4 f 16 "1083 1186 1083 1186" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1310 ( overlaps                       PGUID 14 f t t 4 f 16 "1083 1083 1083 1186" 100 0 1 0  "select overlaps($1, $2, $3, ($3 + $4))" - ));
+DESCR("SQL92 interval comparison");
+DATA(insert OID = 1311 ( overlaps                       PGUID 14 f t t 4 f 16 "1083 1186 1083 1083" 100 0 1 0  "select overlaps($1, ($1 + $2), $3, $4)" - ));
+DESCR("SQL92 interval comparison");
+
 DATA(insert OID = 1314 (  timestamp_cmp                 PGUID 11 f t f 2 f   23 "1184 1184" 100 0 0 100  timestamp_cmp - ));
 DESCR("less-equal-greater");
 DATA(insert OID = 1315 (  interval_cmp          PGUID 11 f t f 2 f   23 "1186 1186" 100 0 0 100  interval_cmp - ));
 DESCR("less-equal-greater");
-DATA(insert OID = 1316 (  timestamp_time                PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
+DATA(insert OID = 1316 (  time                          PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
 DESCR("convert timestamp to time");
+
+DATA(insert OID = 1317 (  length                        PGUID 11 f t t 1 f   23 "25" 100 0 1 0  textlen - ));
+DESCR("length");
+DATA(insert OID = 1318 (  length                        PGUID 11 f t t 1 f   23 "1042" 100 0 0 100  bpcharlen - ));
+DESCR("character length");
+DATA(insert OID = 1319 (  length                        PGUID 11 f t t 1 f   23 "1043" 100 0 0 100  varcharlen - ));
+DESCR("character length");
+
 DATA(insert OID = 1326 (  interval_div          PGUID 11 f t f 2 f 1186 "1186 701" 100 0 0 100  interval_div - ));
 DESCR("divide");
 
-DATA(insert OID = 1339 (  date_zone                     PGUID 11 f t f 2 f   25 "25 1184" 100 0 0 100  timestamp_zone - ));
-DESCR("");
-DATA(insert OID = 1340 (  text                          PGUID 11 f t f 1 f   25 "1184" 100 0 0 100  timestamp_text - ));
-DESCR("convert timestamp to text");
-DATA(insert OID = 1341 (  text                          PGUID 11 f t f 1 f   25 "1186" 100 0 0 100  interval_text - ));
-DESCR("convert interval to text");
-DATA(insert OID = 1342 (  text                          PGUID 11 f t t 1 f   25 "23" 100 0 0 100  int4_text - ));
-DESCR("convert int4 to text");
-DATA(insert OID = 1343 (  text                          PGUID 11 f t t 1 f   25 "21" 100 0 0 100  int2_text - ));
-DESCR("convert int2 to text");
-DATA(insert OID = 1344 (  text                          PGUID 11 f t t 1 f   25 "26" 100 0 0 100  oid_text - ));
-DESCR("convert oid to text");
-DATA(insert OID = 1345 (  oid                           PGUID 11 f t t 1 f   26 "25" 100 0 0 100  text_oid - ));
-DESCR("convert text to oid");
-DATA(insert OID = 1346 (  int2                          PGUID 11 f t t 1 f   21 "25" 100 0 0 100  text_int2 - ));
-DESCR("convert text to int2");
-DATA(insert OID = 1347 (  int4                          PGUID 11 f t t 1 f   23 "25" 100 0 0 100  text_int4 - ));
-DESCR("convert text to int4");
+DATA(insert OID = 1339 (  dlog10                        PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
+DESCR("base 10 logarithm");
+DATA(insert OID = 1340 (  log                           PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog10 - ));
+DESCR("base 10 logarithm");
+DATA(insert OID = 1341 (  ln                            PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dlog1 - ));
+DESCR("base 10 logarithm");
+DATA(insert OID = 1342 (  round                                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dround - ));
+DESCR("round to integral part");
+DATA(insert OID = 1343 (  trunc                                 PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dtrunc - ));
+DESCR("truncate to integral part");
+DATA(insert OID = 1344 (  sqrt                          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dsqrt - ));
+DESCR("square root");
+DATA(insert OID = 1345 (  cbrt                          PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dcbrt - ));
+DESCR("cube root");
+DATA(insert OID = 1346 (  pow                           PGUID 11 f t t 2 f 701 "701 701" 100 0 0 100  dpow - ));
+DESCR("exponentiation");
+DATA(insert OID = 1347 (  exp                           PGUID 11 f t t 1 f 701 "701" 100 0 0 100  dexp - ));
+DESCR("exponential");
+
 DATA(insert OID = 1348 (  obj_description       PGUID 14 f t f 1 f   25 "26" 100 0 0 100  "select description from pg_description where objoid = $1" - ));
 DESCR("get description for object id");
 DATA(insert OID = 1349 (  oidvectortypes        PGUID 11 f t f 1 f   25 "30" 100 0 0 100  oidvectortypes - ));
 DESCR("print type names of oidvector field");
 
-DATA(insert OID = 1350 (  timestamp                     PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
-DESCR("convert (noop)");
-DATA(insert OID = 1351 (  timestamp                     PGUID 11 f t f 1 f 1184 "25" 100 0 0 100  text_timestamp - ));
-DESCR("convert text to timestamp");
-DATA(insert OID = 1352 (  timestamp                     PGUID 11 f t f 1 f 1184 "702" 100 0 0 100      abstime_timestamp - ));
-DESCR("convert abstime to timestamp");
-DATA(insert OID = 1353 (  timestamp                     PGUID 11 f t f 1 f 1184 "1082" 100 0 0 100  date_timestamp - ));
-DESCR("convert date to timestamp");
-DATA(insert OID = 1355 (  timestamp                     PGUID 11 f t f 2 f 1184 "1082 1083" 100 0 0 100  datetime_timestamp - ));
-DESCR("convert date and time to timestamp");
-DATA(insert OID = 1356 (  interval                      PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100  "select $1" - ));
-DESCR("convert (noop)");
-DATA(insert OID = 1357 (  interval                      PGUID 11 f t f 1 f 1186 "703" 100 0 0 100      reltime_interval - ));
-DESCR("convert reltime to interval");
-DATA(insert OID = 1358 (  interval                      PGUID 14 f t f 1 f 1186 "1083" 100 0 0 100  "select time_interval($1)" - ));
-DESCR("convert time to interval");
-DATA(insert OID = 1359 (  date                          PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
-DESCR("convert (noop)");
-DATA(insert OID = 1360 (  date                          PGUID 11 f t f 1 f 1082 "1184" 100 0 0 100  timestamp_date - ));
-DESCR("convert timestamp to date");
-DATA(insert OID = 1361 (  date                          PGUID 11 f t f 1 f 1082 "702" 100 0 0 100      abstime_date - ));
-DESCR("convert abstime to date");
+
+DATA(insert OID = 1350 (  timetz_in               PGUID 11 f t f 1 f 1266 "0" 100 0 0 100      timetz_in - ));
+DESCR("(internal)");
+DATA(insert OID = 1351 (  timetz_out      PGUID 11 f t f 1 f 23 "0" 100 0 0 100  timetz_out - ));
+DESCR("(internal)");
+DATA(insert OID = 1352 (  timetz_eq               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_eq - ));
+DESCR("equal");
+DATA(insert OID = 1353 (  timetz_ne               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ne - ));
+DESCR("not equal");
+DATA(insert OID = 1354 (  timetz_lt               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_lt - ));
+DESCR("less-than");
+DATA(insert OID = 1355 (  timetz_le               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_le - ));
+DESCR("less-than-or-equal");
+DATA(insert OID = 1356 (  timetz_ge               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_ge - ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 1357 (  timetz_gt               PGUID 11 f t t 2 f 16 "1266 1266" 100 0 0 100  timetz_gt - ));
+DESCR("greater-than");
+DATA(insert OID = 1358 (  timetz_cmp      PGUID 11 f t t 2 f 23 "1266 1266" 100 0 0 100  timetz_cmp - ));
+DESCR("less-equal-greater");
+DATA(insert OID = 1359 (  timestamp               PGUID 11 f t f 2 f 1184 "1082 1266" 100 0 0 100  datetimetz_timestamp - ));
+DESCR("convert date and time with time zone to timestamp");
+
 DATA(insert OID = 1362 (  time                          PGUID 14 f t t 1 f 1083 "1083" 100 0 0 100  "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1363 (  time                          PGUID 11 f t f 1 f 1083 "1184" 100 0 0 100  timestamp_time - ));
-DESCR("convert timestamp to time");
 DATA(insert OID = 1364 (  time                          PGUID 14 f t f 1 f 1083 "702" 100 0 0 100      "select time(timestamp($1))" - ));
 DESCR("convert abstime to time");
 DATA(insert OID = 1365 (  abstime                       PGUID 14 f t f 1 f  702 "702" 100 0 0 100      "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1366 (  abstime                       PGUID 11 f t f 1 f  702 "1184" 100 0 0 100  timestamp_abstime - ));
-DESCR("convert timestamp to abstime");
 DATA(insert OID = 1367 (  reltime                       PGUID 14 f t t 1 f  703 "703" 100 0 0 100      "select $1" - ));
 DESCR("convert (noop)");
-DATA(insert OID = 1368 (  reltime                       PGUID 11 f t f 1 f  703 "1186" 100 0 0 100  interval_reltime - ));
-DESCR("convert interval to reltime");
-DATA(insert OID = 1371 (  length                        PGUID 11 f t t 1 f   23   "25" 100 0 0 100  textlen - ));
-DESCR("character length");
-DATA(insert OID = 1372 (  length                        PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharlen - ));
+DATA(insert OID = 1368 (  timestamp                     PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100  "select $1" - ));
+DESCR("convert (noop)");
+DATA(insert OID = 1369 (  interval                      PGUID 14 f t t 1 f 1186 "1186" 100 0 0 100  "select $1" - ));
+DESCR("convert (noop)");
+DATA(insert OID = 1370 (  interval                      PGUID 11 f t f 1 f 1186 "1083" 100 0 0 100  time_interval - ));
+DESCR("convert time to interval");
+DATA(insert OID = 1371 (  date                          PGUID 14 f t t 1 f 1082 "1082" 100 0 0 100  "select $1" - ));
+DESCR("convert (noop)");
+DATA(insert OID = 1372 (  char_length           PGUID 11 f t t 1 f   23   "1042" 100 0 0 100  bpcharlen - ));
 DESCR("character length");
-DATA(insert OID = 1373 (  length                        PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharlen - ));
+DATA(insert OID = 1373 (  char_length           PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharlen - ));
 DESCR("character length");
 
 DATA(insert OID = 1374 (  octet_length                  PGUID 11 f t t 1 f   23   "25" 100 0 0 100  textoctetlen - ));
@@ -1656,90 +1694,95 @@ DESCR("octet length");
 DATA(insert OID = 1376 (  octet_length                  PGUID 11 f t t 1 f   23   "1043" 100 0 0 100  varcharoctetlen - ));
 DESCR("octet length");
 
-DATA(insert OID = 1380 (  date_part    PGUID 11 f t f 2 f  701 "25 1184" 100 0 0 100  timestamp_part - ));
-DESCR("extract field from timestamp");
-DATA(insert OID = 1381 (  date_part    PGUID 11 f t f 2 f  701 "25 1186" 100 0 0 100  interval_part - ));
-DESCR("extract field from interval");
-DATA(insert OID = 1382 (  date_part    PGUID 14 f t f 2 f  701 "25 702" 100 0 0 100  "select timestamp_part($1, timestamp($2))" - ));
+DATA(insert OID = 1377 (  time_larger     PGUID 11 f t t 2 f 1083 "1083 1083" 100 0 0 100      time_larger - ));
+DESCR("larger of two");
+DATA(insert OID = 1378 (  time_smaller    PGUID 11 f t t 2 f 1083 "1083 1083" 100 0 0 100      time_smaller - ));
+DESCR("smaller of two");
+DATA(insert OID = 1379 (  timetz_larger           PGUID 11 f t t 2 f 1083 "1266 1266" 100 0 0 100      timetz_larger - ));
+DESCR("larger of two");
+DATA(insert OID = 1380 (  timetz_smaller   PGUID 11 f t t 2 f 1083 "1266 1266" 100 0 0 100     timetz_smaller - ));
+DESCR("smaller of two");
+
+DATA(insert OID = 1381 (  char_length     PGUID 11 f t t 1 f 23 "25" 100 0 1 0  textlen - ));
+DESCR("length");
+
+DATA(insert OID = 1382 (  date_part    PGUID 14 f t f 2 f  701 "25 702" 100 0 0 100  "select date_part($1, timestamp($2))" - ));
 DESCR("extract field from abstime");
-DATA(insert OID = 1383 (  date_part    PGUID 14 f t f 2 f  701 "25 703" 100 0 0 100  "select interval_part($1, interval($2))" - ));
+DATA(insert OID = 1383 (  date_part    PGUID 14 f t f 2 f  701 "25 703" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from reltime");
-DATA(insert OID = 1384 (  date_part    PGUID 14 f t f 2 f  701 "25 1082" 100 0 0 100  "select timestamp_part($1, timestamp($2))" - ));
+DATA(insert OID = 1384 (  date_part    PGUID 14 f t f 2 f  701 "25 1082" 100 0 0 100  "select date_part($1, timestamp($2))" - ));
 DESCR("extract field from date");
-DATA(insert OID = 1385 (  date_part    PGUID 14 f t f 2 f  701 "25 1083" 100 0 0 100  "select interval_part($1, interval($2))" - ));
+DATA(insert OID = 1385 (  date_part    PGUID 14 f t f 2 f  701 "25 1083" 100 0 0 100  "select date_part($1, interval($2))" - ));
 DESCR("extract field from time");
-DATA(insert OID = 1386 (  date_trunc   PGUID 11 f t f 2 f 1184 "25 1184" 100 0 0 100  timestamp_trunc - ));
-DESCR("truncate timestamp to field");
-DATA(insert OID = 1387 (  date_trunc   PGUID 11 f t f 2 f 1186 "25 1186" 100 0 0 100  interval_trunc - ));
-DESCR("truncate interval to field");
-DATA(insert OID = 1388 (  age             PGUID 11 f t f 2 f 1186 "1184 1184" 100 0 0 100      timestamp_age - ));
-DESCR("difference between timestamps but leave years and months unresolved");
-DATA(insert OID = 1389 (  age             PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100  "select timestamp_age(\'today\', $1)" - ));
-DESCR("difference between timestamp and today but leave years and months unresolved");
-
-DATA(insert OID = 1390 (  isfinite        PGUID 11 f t f 1 f   16 "1184" 100 0 0 100  timestamp_finite - ));
-DESCR("boolean test");
-DATA(insert OID = 1391 (  isfinite        PGUID 11 f t f 1 f   16 "1186" 100 0 0 100  interval_finite - ));
+DATA(insert OID = 1386 (  age             PGUID 14 f t f 1 f 1186 "1184" 100 0 0 100  "select age(\'today\', $1)" - ));
+DESCR("date difference from today preserving months and years");
+
+DATA(insert OID = 1387 (  timetz                  PGUID 14 f t f 1 f 1266 "1266" 100 0 0 100  "select $1" - ));
+DESCR("noop conversion");
+DATA(insert OID = 1388 (  timetz                  PGUID 11 f t f 1 f 1266 "1184" 100 0 0 100  timestamp_timetz - ));
+DESCR("convert timestamp to time");
+
+DATA(insert OID = 1389 (  isfinite        PGUID 11 f t f 1 f   16 "1184" 100 0 0 100  timestamp_finite - ));
 DESCR("boolean test");
-DATA(insert OID = 1392 (  isfinite        PGUID 11 f t f 1 f   16 "702" 100 0 0 100  abstime_finite - ));
+DATA(insert OID = 1390 (  isfinite        PGUID 11 f t f 1 f   16 "1186" 100 0 0 100  interval_finite - ));
 DESCR("boolean test");
 
-DATA(insert OID = 1393 (  interval        PGUID 11 f t f 1 f 1186 "25" 100 0 0 100  text_interval - ));
-DESCR("convert text to interval");
 
-DATA(insert OID = 1394 (  name            PGUID 11 f t t 1 f   19 "25" 100 0 0 100  text_name - ));
-DESCR("convert text to name");
-DATA(insert OID = 1395 (  text            PGUID 11 f t t 1 f   25 "19" 100 0 0 100  name_text - ));
-DESCR("convert name to text");
-DATA(insert OID = 1396 (  name            PGUID 11 f t t 1 f   19 "1042" 100 0 0 100  bpchar_name - ));
-DESCR("convert char() to name");
-DATA(insert OID = 1397 (  bpchar          PGUID 11 f t t 1 f 1042 "19" 100 0 0 100  name_bpchar - ));
-DESCR("convert name to char()");
-DATA(insert OID = 1398 (  name            PGUID 11 f t t 1 f   19 "1043" 100 0 0 100  text_name - ));
-DESCR("convert varchar to name");
-DATA(insert OID = 1399 (  varchar         PGUID 11 f t t 1 f 1043 "19" 100 0 0 100  name_text - ));
-DESCR("convert convert name to varchar");
+DATA(insert OID = 1391 (  factorial               PGUID 11 f t t 1 f 23 "21" 100 0 0 100  int2fac - ));
+DESCR("factorial");
+DATA(insert OID = 1392 (  factorial               PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4fac - ));
+DESCR("factorial");
+DATA(insert OID = 1393 (  factorial               PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8fac - ));
+DESCR("factorial");
+DATA(insert OID = 1394 (  abs                     PGUID 11 f t t 1 f 700 "700" 100 0 0 100  float4abs - ));
+DESCR("absolute value");
+DATA(insert OID = 1395 (  abs                     PGUID 11 f t t 1 f 701 "701" 100 0 0 100  float8abs - ));
+DESCR("absolute value");
+DATA(insert OID = 1396 (  abs                     PGUID 11 f t t 1 f 20 "20" 100 0 0 100  int8abs - ));
+DESCR("absolute value");
+DATA(insert OID = 1397 (  abs                     PGUID 11 f t t 1 f 23 "23" 100 0 0 100  int4abs - ));
+DESCR("absolute value");
+DATA(insert OID = 1398 (  abs                     PGUID 11 f t t 1 f 21 "21" 100 0 0 100  int2abs - ));
+DESCR("absolute value");
 
 /* OIDS 1400 - 1499 */
 
-DATA(insert OID = 1400 (  float                   PGUID 14 f t t 1 f  701      "701" 100 0 0 100  "select $1" - ));
-DESCR("convert float8 to float8 (no-op)");
-DATA(insert OID = 1401 (  float                   PGUID 11 f t t 1 f  701      "700" 100 0 0 100  ftod - ));
-DESCR("convert float4 to float8");
+DATA(insert OID = 1400 (  name            PGUID 11 f t t 1 f   19 "1043" 100 0 0 100  text_name - ));
+DESCR("convert varchar to name");
+DATA(insert OID = 1401 (  varchar         PGUID 11 f t t 1 f 1043 "19" 100 0 0 100  name_text - ));
+DESCR("convert convert name to varchar");
+
 DATA(insert OID = 1402 (  float4          PGUID 14 f t t 1 f  700      "700" 100 0 0 100  "select $1" - ));
 DESCR("convert float4 to float4 (no-op)");
-DATA(insert OID = 1403 (  float4          PGUID 11 f t t 1 f  700      "701" 100 0 0 100  dtof - ));
-DESCR("convert float8 to float4");
-DATA(insert OID = 1404 (  int             PGUID 14 f t t 1 f   23       "23" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1403 (  int2            PGUID 14 f t t 1 f   21       "21" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
-DATA(insert OID = 1405 (  int2            PGUID 14 f t t 1 f   21       "21" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1404 (  float8          PGUID 14 f t t 1 f  701      "701" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
-DATA(insert OID = 1406 (  float8          PGUID 14 f t t 1 f  701      "701" 100 0 0 100  "select $1" - ));
-DESCR("convert (no-op)");
-DATA(insert OID = 1407 (  float8          PGUID 11 f t t 1 f  701      "700" 100 0 0 100  ftod - ));
-DESCR("convert float4 to float8");
-DATA(insert OID = 1408 (  float8          PGUID 11 f t t 1 f  701       "23" 100 0 0 100  i4tod - ));
-DESCR("convert int4 to float8");
-DATA(insert OID = 1409 (  float8          PGUID 11 f t t 1 f  701       "21" 100 0 0 100  i2tod - ));
-DESCR("convert int2 to float8");
-DATA(insert OID = 1410 (  float4          PGUID 11 f t t 1 f  700       "23" 100 0 0 100  i4tof - ));
-DESCR("convert int4 to float4");
-DATA(insert OID = 1411 (  float4          PGUID 11 f t t 1 f  700       "21" 100 0 0 100  i2tof - ));
-DESCR("convert int2 to float4");
-DATA(insert OID = 1412 (  int4            PGUID 14 f t t 1 f   23       "23" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1405 (  int4            PGUID 14 f t t 1 f   23       "23" 100 0 0 100  "select $1" - ));
 DESCR("convert (no-op)");
-DATA(insert OID = 1413 (  int4            PGUID 11 f t t 1 f   23      "701" 100 0 0 100  dtoi4 - ));
-DESCR("convert float8 to int4");
-DATA(insert OID = 1414 (  int4            PGUID 11 f t t 1 f   23       "21" 100 0 0 100  i2toi4 - ));
-DESCR("convert int2 to int4");
-DATA(insert OID = 1415 (  int4            PGUID 11 f t t 1 f   23      "700" 100 0 0 100  ftoi4 - ));
-DESCR("convert float4 to int4");
-DATA(insert OID = 1417 (  int2            PGUID 11 f t t 1 f   21       "23" 100 0 0 100  i4toi2 - ));
-DESCR("convert int4 to int2");
-DATA(insert OID = 1418 (  int2            PGUID 11 f t t 1 f   21      "701" 100 0 0 100  dtoi2 - ));
-DESCR("convert float8 to int2");
-DATA(insert OID = 1419 (  int2            PGUID 11 f t t 1 f   21      "700" 100 0 0 100  ftoi2 - ));
-DESCR("convert float4 to int2");
+
+DATA(insert OID = 1406 (  isvertical           PGUID 11 f t t 2 f  16 "600 600" 100 0 0 100    point_vert - ));
+DESCR("vertical?");
+DATA(insert OID = 1407 (  ishorizontal         PGUID 11 f t t 2 f  16 "600 600" 100 0 0 100    point_horiz - ));
+DESCR("horizontal?");
+DATA(insert OID = 1408 (  isparallel           PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100    lseg_parallel - ));
+DESCR("parallel?");
+DATA(insert OID = 1409 (  isperp                       PGUID 11 f t t 2 f  16 "601 601" 100 0 0 100    lseg_perp - ));
+DESCR("perpendicular?");
+DATA(insert OID = 1410 (  isvertical           PGUID 11 f t t 1 f  16 "601" 100 0 0 100        lseg_vertical - ));
+DESCR("vertical?");
+DATA(insert OID = 1411 (  ishorizontal         PGUID 11 f t t 1 f  16 "601" 100 0 0 100        lseg_horizontal - ));
+DESCR("horizontal?");
+DATA(insert OID = 1412 (  isparallel           PGUID 11 f t t 2 f      16 "628 628" 100 0 0 100  line_parallel - ));
+DESCR("lines parallel?");
+DATA(insert OID = 1413 (  isperp                       PGUID 11 f t t 2 f      16 "628 628" 100 0 0 100  line_perp - ));
+DESCR("lines perpendicular?");
+DATA(insert OID = 1414 (  isvertical           PGUID 11 f t t 1 f      16 "628" 100 0 0 100  line_vertical - ));
+DESCR("lines vertical?");
+DATA(insert OID = 1415 (  ishorizontal         PGUID 11 f t t 1 f      16 "628" 100 0 0 100  line_horizontal - ));
+DESCR("lines horizontal?");
+DATA(insert OID = 1416 (  point                                PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
+DESCR("center of");
 
 DATA(insert OID = 1421 (  box                          PGUID 11 f t t 2 f 603 "600 600" 100 0 0 100  box - ));
 DESCR("convert points to box");
@@ -1751,25 +1794,28 @@ DATA(insert OID = 1424 (  box_mul                       PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100
 DESCR("multiply box by point (scale)");
 DATA(insert OID = 1425 (  box_div                      PGUID 11 f t t 2 f 603 "603 600" 100 0 0 100  box_div - ));
 DESCR("divide box by point (scale)");
-DATA(insert OID = 1426 (  path_contain_pt      PGUID 11 f t t 2 f      16 "602 600" 100 0 0 100  path_contain_pt - ));
+DATA(insert OID = 1426 (  path_contain_pt      PGUID 14 f t t 2 f      16 "602 600" 100 0 0 100  "select on_ppath($2, $1)" - ));
 DESCR("path contains point?");
-DATA(insert OID = 1427 (  pt_contained_path PGUID 11 f t t 2 f 16 "600 602" 100 0 0 100  pt_contained_path - ));
-DESCR("point contained in path?");
 DATA(insert OID = 1428 (  poly_contain_pt      PGUID 11 f t t 2 f      16 "604 600" 100 0 0 100  poly_contain_pt - ));
 DESCR("polygon contains point?");
-DATA(insert OID = 1429 (  pt_contained_poly PGUID 11 f t t 2 f 16 "600 604" 100 0 0 100  pt_contained_poly - ));
+DATA(insert OID = 1429 (  pt_contained_poly    PGUID 11 f t t 2 f      16 "600 604" 100 0 0 100  pt_contained_poly - ));
 DESCR("point contained by polygon?");
 
-DATA(insert OID = 1430 (  path_isclosed                PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isclosed - ));
-DESCR("");
-DATA(insert OID = 1431 (  path_isopen          PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isopen - ));
-DESCR("");
+DATA(insert OID = 1430 (  isclosed                     PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isclosed - ));
+DESCR("path closed?");
+DATA(insert OID = 1431 (  isopen                       PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isopen - ));
+DESCR("path open?");
 DATA(insert OID = 1432 (  path_npoints         PGUID 11 f t t 1 f      23 "602" 100 0 0 100  path_npoints - ));
-DESCR("");
-DATA(insert OID = 1433 (  path_close           PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_close - ));
-DESCR("");
-DATA(insert OID = 1434 (  path_open                    PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_open - ));
-DESCR("");
+DESCR("# points in path");
+
+/* pclose and popen might better be named close and open, but that crashes initdb.
+ * - thomas 97/04/20
+ */
+
+DATA(insert OID = 1433 (  pclose                       PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_close - ));
+DESCR("close path");
+DATA(insert OID = 1434 (  popen                                PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_open - ));
+DESCR("open path");
 DATA(insert OID = 1435 (  path_add                     PGUID 11 f t t 2 f 602 "602 602" 100 0 0 100  path_add - ));
 DESCR("addition");
 DATA(insert OID = 1436 (  path_add_pt          PGUID 11 f t t 2 f 602 "602 600" 100 0 0 100  path_add_pt - ));
@@ -1794,13 +1840,13 @@ DESCR("divide points (scale/rotate)");
 
 DATA(insert OID = 1445 (  poly_npoints         PGUID 11 f t t 1 f      23 "604" 100 0 0 100  poly_npoints - ));
 DESCR("number of points in polygon");
-DATA(insert OID = 1446 (  poly_box                     PGUID 11 f t t 1 f 603 "604" 100 0 0 100  poly_box - ));
+DATA(insert OID = 1446 (  box                          PGUID 11 f t t 1 f 603 "604" 100 0 0 100  poly_box - ));
 DESCR("convert polygon to bounding box");
-DATA(insert OID = 1447 (  poly_path                    PGUID 11 f t t 1 f 602 "604" 100 0 0 100  poly_path - ));
+DATA(insert OID = 1447 (  path                         PGUID 11 f t t 1 f 602 "604" 100 0 0 100  poly_path - ));
 DESCR("convert polygon to path");
-DATA(insert OID = 1448 (  box_poly                     PGUID 11 f t t 1 f 604 "603" 100 0 0 100  box_poly - ));
+DATA(insert OID = 1448 (  polygon                      PGUID 11 f t t 1 f 604 "603" 100 0 0 100  box_poly - ));
 DESCR("convert box to polygon");
-DATA(insert OID = 1449 (  path_poly                    PGUID 11 f t t 1 f 604 "602" 100 0 0 100  path_poly - ));
+DATA(insert OID = 1449 (  polygon                      PGUID 11 f t t 1 f 604 "602" 100 0 0 100  path_poly - ));
 DESCR("convert path to polygon");
 
 DATA(insert OID = 1450 (  circle_in                    PGUID 11 f t t 1 f 718 "0" 100 0 1 0  circle_in - ));
@@ -1839,35 +1885,34 @@ DATA(insert OID = 1466 (  circle_le                     PGUID 11 f t t 2 f      16 "718 718" 100 0 1 0
 DESCR("less-than-or-equal");
 DATA(insert OID = 1467 (  circle_ge                    PGUID 11 f t t 2 f      16 "718 718" 100 0 1 0  circle_ge - ));
 DESCR("greater-than-or-equal");
-DATA(insert OID = 1468 (  circle_area          PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_area - ));
-DESCR("area");
-DATA(insert OID = 1469 (  circle_diameter      PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_diameter - ));
-DESCR("diameter");
-DATA(insert OID = 1470 (  circle_radius                PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_radius - ));
-DESCR("radius");
+DATA(insert OID = 1468 (  area                         PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_area - ));
+DESCR("area of circle");
+DATA(insert OID = 1469 (  diameter                     PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_diameter - ));
+DESCR("diameter of circle");
+DATA(insert OID = 1470 (  radius                       PGUID 11 f t t 1 f 701 "718" 100 0 1 0  circle_radius - ));
+DESCR("radius of circle");
 DATA(insert OID = 1471 (  circle_distance      PGUID 11 f t t 2 f 701 "718 718" 100 0 1 0      circle_distance - ));
 DESCR("distance between");
 DATA(insert OID = 1472 (  circle_center                PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
 DESCR("center of");
 DATA(insert OID = 1473 (  circle                       PGUID 11 f t t 2 f 718 "600 701" 100 0 1 0      circle - ));
 DESCR("convert point and radius to circle");
-DATA(insert OID = 1474 (  poly_circle          PGUID 11 f t t 1 f 718 "604" 100 0 1 0  poly_circle - ));
+DATA(insert OID = 1474 (  circle                       PGUID 11 f t t 1 f 718 "604" 100 0 1 0  poly_circle - ));
 DESCR("convert polygon to circle");
-DATA(insert OID = 1475 (  circle_poly          PGUID 11 f t t 2 f 604 "23 718" 100 0 1 0  circle_poly - ));
+DATA(insert OID = 1475 (  polygon                      PGUID 11 f t t 2 f 604 "23 718" 100 0 1 0  circle_poly - ));
 DESCR("convert vertex count and circle to polygon");
 DATA(insert OID = 1476 (  dist_pc                      PGUID 11 f t t 2 f 701 "600 718" 100 0 1 0      dist_pc - ));
-DESCR("distance between");
-DATA(insert OID = 1477 (  circle_contain_pt   PGUID 11 f t t 2 f  16 "718 600" 100 0 0 100     circle_contain_pt - ));
-DESCR("");
-DATA(insert OID = 1478 (  pt_contained_circle PGUID 11 f t t 2 f  16 "600 718" 100 0 0 100     pt_contained_circle - ));
-DESCR("");
-DATA(insert OID = 1479 (  box_circle           PGUID 11 f t t 1 f 718 "603" 100 0 1 0  box_circle - ));
+DESCR("distance between point and circle");
+DATA(insert OID = 1477 (  circle_contain_pt    PGUID 11 f t t 2 f  16 "718 600" 100 0 0 100  circle_contain_pt - ));
+DESCR("circle contains point?");
+DATA(insert OID = 1478 (  pt_contained_circle  PGUID 11 f t t 2 f  16 "600 718" 100 0 0 100  pt_contained_circle - ));
+DESCR("point inside circle?");
+DATA(insert OID = 1479 (  circle                       PGUID 11 f t t 1 f 718 "603" 100 0 1 0  box_circle - ));
 DESCR("convert box to circle");
-DATA(insert OID = 1480 (  circle_box           PGUID 11 f t t 1 f 603 "718" 100 0 1 0  circle_box - ));
+DATA(insert OID = 1480 (  box                          PGUID 11 f t t 1 f 603 "718" 100 0 1 0  circle_box - ));
 DESCR("convert circle to box");
-
-DATA(insert OID = 1481 (  text_substr          PGUID 11 f t t 3 f 25 "25 23 23" 100 0 0 100  text_substr - ));
-DESCR("return portion of string");
+DATA(insert OID = 1481 (  tinterval                     PGUID 11 f t f 2 f 704 "702 702" 100 0 0 100 mktinterval - ));
+DESCR("convert to tinterval");
 
 DATA(insert OID = 1482 (  lseg_ne                      PGUID 11 f t t 2 f      16 "601 601" 100 0 0 100  lseg_ne - ));
 DESCR("not equal");
@@ -1892,7 +1937,7 @@ DATA(insert OID = 1491 (  line_out                        PGUID 11 f t t 1 f 23  "0" 100 0 0 100  line
 DESCR("(internal)");
 DATA(insert OID = 1492 (  line_eq                      PGUID 11 f t t 2 f      16 "628 628" 100 0 0 100  line_eq - ));
 DESCR("lines equal?");
-DATA(insert OID = 1493 (  line_construct_pp PGUID 11 f t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
+DATA(insert OID = 1493 (  line                         PGUID 11 f t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
 DESCR("line from points");
 DATA(insert OID = 1494 (  line_interpt         PGUID 11 f t t 2 f 600 "628 628" 100 0 0 100  line_interpt - ));
 DESCR("intersection point");
@@ -1909,135 +1954,90 @@ DESCR("lines horizontal?");
 
 /* OIDS 1500 - 1599 */
 
-DATA(insert OID = 1530 (  point                                PGUID 11 f t t 2 f 600 "601 601" 100 0 0 100  lseg_interpt - ));
-DESCR("convert two line segments to point (intersection)");
-DATA(insert OID = 1531 (  point                                PGUID 11 f t t 1 f 600 "718" 100 0 0 100  circle_center - ));
-DESCR("convert circle to point (center)");
-DATA(insert OID = 1532 (  isvertical           PGUID 11 f t t 2 f      16 "600 600" 100 0 0 100  point_vert - ));
-DESCR("");
-DATA(insert OID = 1533 (  ishorizontal         PGUID 11 f t t 2 f      16 "600 600" 100 0 0 100  point_horiz - ));
-DESCR("");
-DATA(insert OID = 1534 (  slope                                PGUID 11 f t t 2 f 701 "600 600" 100 0 0 100  point_slope - ));
-DESCR("");
-
-DATA(insert OID = 1540 (  lseg                         PGUID 11 f t t 2 f 601 "600 600" 100 0 0 100  lseg_construct - ));
-DESCR("");
-DATA(insert OID = 1541 (  lseg                         PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
-DESCR("");
-DATA(insert OID = 1542 (  isparallel           PGUID 11 f t t 2 f      16 "601 601" 100 0 0 100  lseg_parallel - ));
-DESCR("");
-DATA(insert OID = 1543 (  isperpendicular      PGUID 11 f t t 2 f      16 "601 601" 100 0 0 100  lseg_perp - ));
-DESCR("");
-DATA(insert OID = 1544 (  isvertical           PGUID 11 f t t 1 f      16 "601" 100 0 0 100  lseg_vertical - ));
-DESCR("");
-DATA(insert OID = 1545 (  ishorizontal         PGUID 11 f t t 1 f      16 "601" 100 0 0 100  lseg_horizontal - ));
-DESCR("");
+DATA(insert OID = 1530 (  length                       PGUID 11 f t t 1 f 701 "601" 100 0 1 0  lseg_length - ));
+DESCR("distance between endpoints");
+DATA(insert OID = 1531 (  length                       PGUID 11 f t t 1 f 701 "602" 100 0 1 0  path_length - ));
+DESCR("sum of path segments");
 
-/* pclose and popen might better be named close and open, but that crashes initdb.
- * - tgl 97/04/20
- */
 
-DATA(insert OID = 1550 (  path                         PGUID 11 f t t 1 f 602 "604" 100 0 0 100  poly_path - ));
-DESCR("");
-DATA(insert OID = 1551 (  length                       PGUID 11 f t t 1 f 701 "602" 100 0 1 0  path_length - ));
-DESCR("sum of lengths of path segments");
-DATA(insert OID = 1552 (  points                       PGUID 11 f t t 1 f      23 "602" 100 0 0 100  path_npoints - ));
-DESCR("");
-DATA(insert OID = 1553 (  pclose                       PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_close - ));
-DESCR("");
-DATA(insert OID = 1554 (  popen                                PGUID 11 f t t 1 f 602 "602" 100 0 0 100  path_open - ));
-DESCR("");
-DATA(insert OID = 1555 (  isopen                       PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isopen - ));
-DESCR("");
-DATA(insert OID = 1556 (  isclosed                     PGUID 11 f t t 1 f      16 "602" 100 0 0 100  path_isclosed - ));
+DATA(insert OID = 1532 (  point                                PGUID 11 f t t 1 f 600 "601" 100 0 0 100  lseg_center - ));
+DESCR("center of");
+DATA(insert OID = 1533 (  point                                PGUID 11 f t t 1 f 600 "602" 100 0 0 100  path_center - ));
+DESCR("center of");
+DATA(insert OID = 1534 (  point                                PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
+DESCR("center of");
+DATA(insert OID = 1540 (  point                                PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
+DESCR("center of");
+DATA(insert OID = 1541 (  lseg                         PGUID 11 f t t 1 f 601 "603" 100 0 0 100  box_diagonal - ));
 DESCR("");
-
-DATA(insert OID = 1560 (  box                          PGUID 11 f t t 2 f 603 "603 603" 100 0 0 100  box_intersect - ));
-DESCR("convert boxes to box (intersection)");
-DATA(insert OID = 1561 (  box                          PGUID 11 f t t 1 f 603 "604" 100 0 0 100  poly_box - ));
-DESCR("convert polygon to box");
-DATA(insert OID = 1562 (  width                                PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_width - ));
-DESCR("box width");
-DATA(insert OID = 1563 (  height                       PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_height - ));
-DESCR("box height");
-DATA(insert OID = 1564 (  center                       PGUID 11 f t t 1 f 600 "603" 100 0 0 100  box_center - ));
-DESCR("box center");
-DATA(insert OID = 1565 (  area                         PGUID 11 f t t 1 f 701 "603" 100 0 0 100  box_area - ));
-DESCR("box area");
-DATA(insert OID = 1569 (  box                          PGUID 11 f t t 1 f 603 "718" 100 0 0 100  circle_box - ));
-DESCR("convert circle to box");
-
-DATA(insert OID = 1570 (  polygon                      PGUID 11 f t t 1 f 604 "602" 100 0 0 100  path_poly - ));
-DESCR("convert path to polygon");
-DATA(insert OID = 1571 (  polygon                      PGUID 11 f t t 1 f 604 "603" 100 0 0 100  box_poly - ));
-DESCR("convert box to polygon");
-DATA(insert OID = 1572 (  polygon                      PGUID 11 f t t 2 f 604 "23 718" 100 0 0 100  circle_poly - ));
-DESCR("convert circle to polygon");
-DATA(insert OID = 1573 (  polygon                      PGUID 14 f t t 1 f 604 "718" 100 0 0 100  "select circle_poly(12, $1)" - ));
+DATA(insert OID = 1542 (  center                       PGUID 11 f t t 1 f 600 "603" 100 1 0 100  box_center - ));
+DESCR("center of");
+DATA(insert OID = 1543 (  center                       PGUID 11 f t t 1 f 600 "718" 100 0 1 0  circle_center - ));
+DESCR("center of");
+DATA(insert OID = 1544 (  polygon                      PGUID 14 f t t 1 f 604 "718" 100 0 0 100  "select polygon(12, $1)" - ));
 DESCR("convert circle to 12-vertex polygon");
-DATA(insert OID = 1574 (  points                       PGUID 11 f t t 1 f      23 "604" 100 0 0 100  poly_npoints - ));
-DESCR("");
-DATA(insert OID = 1575 (  center                       PGUID 11 f t t 1 f 600 "604" 100 0 0 100  poly_center - ));
-DESCR("");
-DATA(insert OID = 1576 (  length                       PGUID 11 f t t 1 f 701 "601" 100 0 1 0  lseg_length - ));
-DESCR("distance between endpoints");
-
-DATA(insert OID = 1579 (  circle                       PGUID 11 f t t 1 f 718 "603" 100 0 0 100  box_circle - ));
-DESCR("convert box to circle");
-DATA(insert OID = 1580 (  circle                       PGUID 11 f t t 1 f 718 "604" 100 0 0 100  poly_circle - ));
-DESCR("convert polygon to circle");
-DATA(insert OID = 1581 (  center                       PGUID 11 f t t 1 f 600 "718" 100 0 0 100  circle_center - ));
-DESCR("center of circle");
-DATA(insert OID = 1582 (  radius                       PGUID 11 f t t 1 f 701 "718" 100 0 0 100  circle_radius - ));
-DESCR("radius of circle");
-DATA(insert OID = 1583 (  diameter                     PGUID 11 f t t 1 f 701 "718" 100 0 0 100  circle_diameter - ));
-DESCR("diameter of circle");
-DATA(insert OID = 1584 (  area                         PGUID 11 f t t 1 f 701 "718" 100 0 0 100  circle_area - ));
-DESCR("area of circle");
-
-DATA(insert OID = 1592 (  int8                         PGUID 14 f t t 1 f      20 "20" 100 0 0 100  "select $1" - ));
+DATA(insert OID = 1545 (  npoints                      PGUID 11 f t t 1 f      23 "602" 100 0 0 100  path_npoints - ));
+DESCR("# points in path");
+DATA(insert OID = 1556 (  npoints                      PGUID 11 f t t 1 f      23 "604" 100 0 0 100  poly_npoints - ));
+DESCR("number of points in polygon");
+DATA(insert OID = 1573 (  int8                         PGUID 14 f t t 1 f      20 "20" 100 0 0 100  "select $1" - ));
 DESCR("convert int8 to int8 (no-op)");
-DATA(insert OID = 1593 (  int8                         PGUID 11 f t t 1 f      20 "23" 100 0 0 100  int48 - ));
-DESCR("convert int4 to int8");
-DATA(insert OID = 1594 (  int8                         PGUID 11 f t t 1 f      20 "701" 100 0 0 100  dtoi8 - ));
-DESCR("convert float8 to int8");
-DATA(insert OID = 1595 (  int4                         PGUID 11 f t t 1 f      23 "20" 100 0 0 100  int84 - ));
-DESCR("convert int8 to int4");
-DATA(insert OID = 1596 (  float8                       PGUID 11 f t t 1 f 701 "20" 100 0 0 100  i8tod - ));
-DESCR("convert int8 to float8");
 
-/* OIDS 1600 - 1699 */
+DATA(insert OID = 1569 (  like                         PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textlike - ));
+DESCR("matches LIKE expression");
+DATA(insert OID = 1570 (  notlike                      PGUID 11 f t t 2 f 16 "25 25" 100 0 1 0  textnlike - ));
+DESCR("does not match LIKE expression");
+DATA(insert OID = 1571 (  like                         PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namelike - ));
+DESCR("matches LIKE expression");
+DATA(insert OID = 1572 (  notlike                      PGUID 11 f t t 2 f 16 "19 25" 100 0 0 100  namenlike - ));
+DESCR("does not match LIKE expression");
 
-DATA(insert OID = 1600 (  line                         PGUID 11 f t t 2 f 628 "600 600" 100 0 0 100  line_construct_pp - ));
-DESCR("points to line");
-DATA(insert OID = 1601 (  ishorizontal         PGUID 11 f t t 1 f      16 "628" 100 0 0 100  line_horizontal - ));
-DESCR("is line horizontal?");
-DATA(insert OID = 1602 (  isvertical           PGUID 11 f t t 1 f      16 "628" 100 0 0 100  line_vertical - ));
-DESCR("is line vertical?");
-DATA(insert OID = 1603 (  isparallel           PGUID 11 f t t 2 f      16 "628 628" 100 0 0 100  line_parallel - ));
-DESCR("are lines parallel?");
+/* SEQUENCEs nextval & currval functions */
+DATA(insert OID =  1574 (  nextval                     PGUID 11 f t f 1 f 23 "25" 100 0 0 100  nextval - ));
+DESCR("sequence next value");
+DATA(insert OID =  1575 (  currval                     PGUID 11 f t f 1 f 23 "25" 100 0 0 100  currval - ));
+DESCR("sequence current value");
+DATA(insert OID =  1576 (  setval                      PGUID 11 f t f 2 f 23 "25 23" 100 0 0 100  setval - ));
+DESCR("sequence set value");
 
-DATA(insert OID = 1604 (  float8          PGUID 11 f t t 1 f 701 "25" 100 0 0 100      text_float8 - ));
-DESCR("convert text to float8");
-DATA(insert OID = 1605 (  float4          PGUID 11 f t t 1 f 700 "25" 100 0 0 100      text_float4 - ));
-DESCR("convert text to float4");
-DATA(insert OID = 1606 (  text            PGUID 11 f t t 1 f  25 "701" 100 0 0 100  float8_text - ));
-DESCR("convert float8 to text");
-DATA(insert OID = 1607 (  text            PGUID 11 f t t 1 f  25 "700" 100 0 0 100  float4_text - ));
-DESCR("convert float4 to text");
+/* OIDS 1600 - 1699 */
 
 DATA(insert OID = 1619 (  varchar         PGUID 11 f t t 1 f 1043 "23" 100 0 0 100  int4_text - ));
 DESCR("convert int4 to varchar");
-DATA(insert OID = 1620 (  int4            PGUID 11 f t t 1 f   23 "1043" 100 0 0 100  text_int4 - ));
-DESCR("convert varchar to int4");
-DATA(insert OID = 1621 (  text            PGUID 11 f t t 1 f  25 "20" 100 0 0 100      int8_text - ));
-DESCR("convert int8 to text");
-DATA(insert OID = 1622 (  int8            PGUID 11 f t t 1 f  20 "25" 100 0 0 100      text_int8 - ));
-DESCR("convert text to int8");
 DATA(insert OID = 1623 (  varchar         PGUID 11 f t t 1 f 1043 "20" 100 0 0 100  int8_text - ));
 DESCR("convert int8 to varchar");
-DATA(insert OID = 1624 (  int8            PGUID 11 f t t 1 f  20 "1043" 100 0 0 100  text_int8 - ));
-DESCR("convert varchar to int8");
+
+/* OID's 1625 - 1639 LZTEXT data type */
+DATA(insert OID = 1626 ( lztextin             PGUID 11 f t t 1 f 1625 "0" 100 0 0 100  lztextin - ));
+DESCR("(internal)");
+DATA(insert OID = 1627 ( lztextout            PGUID 11 f t t 1 f 23 "0" 100 0 0 100  lztextout - ));
+DESCR("(internal)");
+DATA(insert OID = 1629 ( text                 PGUID 11 f t t 1 f 25 "1625" 100 0 0 100  lztext_text -));
+DESCR("convert lztext to text");
+DATA(insert OID = 1631 ( lztext               PGUID 11 f t t 1 f 1625 "25" 100 0 0 100  text_lztext -));
+DESCR("convert text to lztext");
+DATA(insert OID = 1632 ( lztext               PGUID 14 f t t 1 f 1625 "1625" 100 0 0 100  "select $1" -));
+DESCR("convert text to lztext");
+DATA(insert OID = 1633 ( char_length          PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
+DESCR("length");
+DATA(insert OID = 1634 ( length               PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
+DESCR("length");
+DATA(insert OID = 1635 ( octet_length         PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextoctetlen - ));
+DESCR("octet length");
+DATA(insert OID = 1636 ( lztext_cmp           PGUID 11 f t t 2 f 23 "1625 1625" 100 0 1 0  lztext_cmp - ));
+DESCR("compare lztext");
+DATA(insert OID = 1637 ( lztext_eq            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_eq - ));
+DESCR("equal");
+DATA(insert OID = 1638 ( lztext_ne            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ne - ));
+DESCR("not equal");
+DATA(insert OID = 1639 ( lztext_gt            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_gt - ));
+DESCR("greater-than");
+DATA(insert OID = 1664 ( lztext_ge            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ge - ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 1665 ( lztext_lt            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_lt - ));
+DESCR("less-than");
+DATA(insert OID = 1656 ( lztext_le            PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_le - ));
+DESCR("less-than-or-equal");
 
 /* Oracle Compatibility Related Functions - By Edmund Mergl <E.Mergl@bawue.de> */
 DATA(insert OID =  868 (  strpos          PGUID 11 f t t 2 f 23 "25 25" 100 0 0 100  textpos - ));
@@ -2058,7 +2058,7 @@ DATA(insert OID =  876 (  rtrim              PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  r
 DESCR("right-pad string to length");
 DATA(insert OID =  877 (  substr          PGUID 11 f t t 3 f 25 "25 23 23" 100 0 0 100  text_substr - ));
 DESCR("return portion of string");
-DATA(insert OID =  878 (  translate    PGUID 11 f t t 3 f 25 "25 18 18" 100 0 0 100  translate - ));
+DATA(insert OID =  878 (  translate    PGUID 11 f t t 3 f 25 "25 25 25" 100 0 0 100  translate - ));
 DESCR("modify string by substring replacement");
 DATA(insert OID =  879 (  lpad            PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100  "select lpad($1, $2, \' \')" - ));
 DESCR("left-pad string to length");
@@ -2068,22 +2068,13 @@ DATA(insert OID =  881 (  ltrim            PGUID 14 f t t 1 f 25 "25" 100 0 0 100  "sel
 DESCR("remove initial characters from string");
 DATA(insert OID =  882 (  rtrim                   PGUID 14 f t t 1 f 25 "25" 100 0 0 100  "select rtrim($1, \' \')" - ));
 DESCR("remove trailing characters from string");
-DATA(insert OID =  883 (  substr          PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100  "select text_substr($1, $2, -1)" - ));
+DATA(insert OID =  883 (  substr          PGUID 14 f t t 2 f 25 "25 23" 100 0 0 100  "select substr($1, $2, -1)" - ));
 DESCR("return portion of string");
 DATA(insert OID =  884 (  btrim                   PGUID 11 f t t 2 f 25 "25 25" 100 0 0 100  btrim - ));
 DESCR("trim both ends of string");
 DATA(insert OID =  885 (  btrim                   PGUID 14 f t t 1 f 25 "25" 100 0 0 100  "select btrim($1, \' \')" - ));
 DESCR("trim both ends of string");
 
-
-/* SEQUENCEs nextval & currval functions */
-DATA(insert OID =  1317 (  nextval        PGUID 11 f t f 1 f 23 "25" 100 0 0 100  nextval - ));
-DESCR("sequence next value");
-DATA(insert OID =  1319 (  currval        PGUID 11 f t f 1 f 23 "25" 100 0 0 100  currval - ));
-DESCR("sequence current value");
-DATA(insert OID =  1618 (  setval         PGUID 11 f t f 2 f 23 "25 23" 100 0 0 100  setval - ));
-DESCR("sequence set value");
-
 /* for multi-byte support */
 DATA(insert OID = 1039 (  getdatabaseencoding     PGUID 11 f t f 0 f 19 "0" 100 0 0 100  getdatabaseencoding - ));
 DESCR("encoding name of current database");
@@ -2162,7 +2153,7 @@ DESCR("(internal)");
 /* for cidr type support */
 DATA(insert OID = 1267 (  cidr_in                      PGUID 11 f t t 1 f 650 "0" 100 0 0 100  cidr_in - ));
 DESCR("(internal)");
-DATA(insert OID = 1416 (  cidr_out                     PGUID 11 f t t 1 f 23 "0" 100 0 0 100  cidr_out - ));
+DATA(insert OID = 1427 (  cidr_out                     PGUID 11 f t t 1 f 23 "0" 100 0 0 100  cidr_out - ));
 DESCR("(internal)");
 
 /* these are used for both inet and cidr */
@@ -2190,18 +2181,6 @@ DATA(insert OID = 930 (  network_supeq              PGUID 11 f t t 2 f 16 "869 869" 100 0
 DESCR("is-supernet-or-equal");
 
 /* inet/cidr versions */
-DATA(insert OID = 940 (  network_netmask               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_netmask - ));
-DESCR("netmask of address");
-DATA(insert OID = 941 (  network_masklen               PGUID 11 f t t 1 f 23 "869" 100 0 0 100  network_masklen - ));
-DESCR("netmask length");
-DATA(insert OID = 945 (  network_broadcast             PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_broadcast - ));
-DESCR("broadcast address");
-DATA(insert OID = 682 (  network_host                  PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_host - ));
-DESCR("host address");
-DATA(insert OID = 473 (  network_network               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_network - ));
-DESCR("network address");
-
-/* shortcut names */
 DATA(insert OID = 696 (  netmask                               PGUID 11 f t t 1 f 25 "869" 100 0 0 100  network_netmask - ));
 DESCR("netmask of address");
 DATA(insert OID = 697 (  masklen                               PGUID 11 f t t 1 f 23 "869" 100 0 0 100  network_masklen - ));
@@ -2231,29 +2210,19 @@ DATA(insert OID = 1704 ( numeric_abs                    PGUID 11 f t t 1 f 1700 "1700" 100 0 0 10
 DESCR("absolute value");
 DATA(insert OID = 1705 ( abs                                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_abs - ));
 DESCR("absolute value");
-DATA(insert OID = 1706 ( numeric_sign                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sign - ));
+DATA(insert OID = 1706 ( sign                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sign - ));
 DESCR("sign of value");
-DATA(insert OID = 1707 ( sign                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sign - ));
-DESCR("sign of value");
-DATA(insert OID = 1708 ( numeric_round                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_round - ));
-DESCR("value rounded to 'scale'");
-DATA(insert OID = 1709 ( round                                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_round - ));
+DATA(insert OID = 1707 ( round                                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_round - ));
 DESCR("value rounded to 'scale'");
-DATA(insert OID = 1710 ( round                                 PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100      "select numeric_round($1,0)" - ));
+DATA(insert OID = 1708 ( round                                 PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100      "select numeric_round($1,0)" - ));
 DESCR("value rounded to 'scale' of zero");
-DATA(insert OID = 1711 ( numeric_trunc                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_trunc - ));
+DATA(insert OID = 1709 ( trunc                                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_trunc - ));
 DESCR("value truncated to 'scale'");
-DATA(insert OID = 1712 ( trunc                                 PGUID 11 f t t 2 f 1700 "1700 23" 100 0 0 100  numeric_trunc - ));
-DESCR("value truncated to 'scale'");
-DATA(insert OID = 1713 ( trunc                                 PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100      "select numeric_trunc($1,0)" - ));
+DATA(insert OID = 1710 ( trunc                                 PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100      "select numeric_trunc($1,0)" - ));
 DESCR("value truncated to 'scale' of zero");
-DATA(insert OID = 1714 ( numeric_ceil                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ceil - ));
-DESCR("smallest integer >= value");
-DATA(insert OID = 1715 ( ceil                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ceil - ));
+DATA(insert OID = 1711 ( ceil                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ceil - ));
 DESCR("smallest integer >= value");
-DATA(insert OID = 1716 ( numeric_floor                 PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_floor - ));
-DESCR("largest integer <= value");
-DATA(insert OID = 1717 ( floor                                 PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_floor - ));
+DATA(insert OID = 1712 ( floor                                 PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_floor - ));
 DESCR("largest integer <= value");
 DATA(insert OID = 1718 ( numeric_eq                            PGUID 11 f t t 2 f 16 "1700 1700" 100 0 0 100  numeric_eq - ));
 DESCR("equal");
@@ -2275,53 +2244,43 @@ DATA(insert OID = 1726 ( numeric_mul                    PGUID 11 f t t 2 f 1700 "1700 1700" 100 0
 DESCR("multiply");
 DATA(insert OID = 1727 ( numeric_div                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_div - ));
 DESCR("divide");
-DATA(insert OID = 1728 ( numeric_mod                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
+DATA(insert OID = 1728 ( mod                                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
 DESCR("modulus");
-DATA(insert OID = 1729 ( mod                                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
+DATA(insert OID = 1729 ( numeric_mod                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_mod - ));
 DESCR("modulus");
-DATA(insert OID = 1730 ( numeric_sqrt                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sqrt - ));
+DATA(insert OID = 1730 ( sqrt                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1731 ( sqrt                                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sqrt - ));
+DATA(insert OID = 1731 ( numeric_sqrt                  PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_sqrt - ));
 DESCR("square root");
-DATA(insert OID = 1732 ( numeric_exp                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_exp - ));
+DATA(insert OID = 1732 ( exp                                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_exp - ));
 DESCR("e raised to the power of n");
-DATA(insert OID = 1733 ( exp                                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_exp - ));
+DATA(insert OID = 1733 ( numeric_exp                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_exp - ));
 DESCR("e raised to the power of n");
-DATA(insert OID = 1734 ( numeric_ln                            PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ln - ));
+DATA(insert OID = 1734 ( ln                                            PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ln - ));
 DESCR("natural logarithm of n");
-DATA(insert OID = 1735 ( ln                                            PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ln - ));
+DATA(insert OID = 1735 ( numeric_ln                            PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_ln - ));
 DESCR("natural logarithm of n");
-DATA(insert OID = 1736 ( numeric_log                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
+DATA(insert OID = 1736 ( log                                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
 DESCR("logarithm base m of n");
-DATA(insert OID = 1737 ( log                                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
+DATA(insert OID = 1737 ( numeric_log                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_log - ));
 DESCR("logarithm base m of n");
-DATA(insert OID = 1738 ( numeric_power                 PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
+DATA(insert OID = 1738 ( pow                                   PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
 DESCR("m raised to the power of n");
-DATA(insert OID = 1739 ( power                                 PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
+DATA(insert OID = 1739 ( numeric_power                 PGUID 11 f t t 2 f 1700 "1700 1700" 100 0 0 100  numeric_power - ));
 DESCR("m raised to the power of n");
-DATA(insert OID = 1740 ( int4_numeric                  PGUID 11 f t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1741 ( numeric                               PGUID 11 f t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1742 ( float4_numeric                        PGUID 11 f t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1743 ( numeric                               PGUID 11 f t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1744 ( float8_numeric                        PGUID 11 f t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1745 ( numeric                               PGUID 11 f t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1746 ( numeric_int4                  PGUID 11 f t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
+DATA(insert OID = 1740 ( numeric                               PGUID 11 f t t 1 f 1700 "23" 100 0 0 100  int4_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1747 ( int4                                  PGUID 11 f t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
+DATA(insert OID = 1741 ( log                                   PGUID 14 f t t 1 f 1700 "1700" 100 0 0 100  "select(10, $1)" - ));
+DESCR("logarithm base m of n");
+DATA(insert OID = 1742 ( numeric                               PGUID 11 f t t 1 f 1700 "700" 100 0 0 100  float4_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1748 ( numeric_float4                        PGUID 11 f t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
+DATA(insert OID = 1743 ( numeric                               PGUID 11 f t t 1 f 1700 "701" 100 0 0 100  float8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1749 ( float4                                        PGUID 11 f t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
+DATA(insert OID = 1744 ( int4                                  PGUID 11 f t t 1 f 23 "1700" 100 0 0 100  numeric_int4 - ));
 DESCR("(internal)");
-DATA(insert OID = 1750 ( numeric_float8                        PGUID 11 f t t 1 f 701 "1700" 100 0 0 100  numeric_float8 - ));
+DATA(insert OID = 1745 ( float4                                        PGUID 11 f t t 1 f 700 "1700" 100 0 0 100  numeric_float4 - ));
 DESCR("(internal)");
-DATA(insert OID = 1751 ( float8                                        PGUID 11 f t t 1 f 701 "1700" 100 0 0 100  numeric_float8 - ));
+DATA(insert OID = 1746 ( float8                                        PGUID 11 f t t 1 f 701 "1700" 100 0 0 100  numeric_float8 - ));
 DESCR("(internal)");
 DATA(insert OID = 1764 ( numeric_inc                   PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_inc - ));
 DESCR("increment by one");
@@ -2335,72 +2294,28 @@ DATA(insert OID = 1769 ( numeric_cmp                    PGUID 11 f t t 2 f 23 "1700 1700" 100 0 0
 DESCR("compare two numbers");
 DATA(insert OID = 1771 ( numeric_uminus                        PGUID 11 f t t 1 f 1700 "1700" 100 0 0 100      numeric_uminus - ));
 DESCR("negate");
-DATA(insert OID = 1779 ( int8_numeric                  PGUID 11 f t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
+DATA(insert OID = 1779 ( int8                                  PGUID 11 f t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
 DESCR("(internal)");
 DATA(insert OID = 1781 ( numeric                               PGUID 11 f t t 1 f 1700 "20" 100 0 0 100  int8_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1782 ( numeric_int8                  PGUID 11 f t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
-DESCR("(internal)");
-DATA(insert OID = 1783 ( int8                                  PGUID 11 f t t 1 f 20 "1700" 100 0 0 100  numeric_int8 - ));
-DESCR("(internal)");
-DATA(insert OID = 1784 ( int2_numeric                  PGUID 11 f t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1785 ( numeric                               PGUID 11 f t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
-DESCR("(internal)");
-DATA(insert OID = 1786 ( numeric_int2                  PGUID 11 f t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
-DESCR("(internal)");
-DATA(insert OID = 1787 ( int2                                  PGUID 11 f t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
-DESCR("(internal)");
-
-/* OID's 1625 - 1639 LZTEXT data type */
-DATA(insert OID = 1626 ( lztextin             PGUID 11 f t t 1 f 1625 "0" 100 0 0 100  lztextin - ));
+DATA(insert OID = 1782 ( numeric                               PGUID 11 f t t 1 f 1700 "21" 100 0 0 100  int2_numeric - ));
 DESCR("(internal)");
-DATA(insert OID = 1627 ( lztextout                PGUID 11 f t t 1 f 23 "0" 100 0 0 100  lztextout - ));
+DATA(insert OID = 1783 ( int2                                  PGUID 11 f t t 1 f 21 "1700" 100 0 0 100  numeric_int2 - ));
 DESCR("(internal)");
-DATA(insert OID = 1628 ( lztext_text          PGUID 11 f t t 1 f 25 "1625" 100 0 0 100  lztext_text -));
-DESCR("convert lztext to text");
-DATA(insert OID = 1629 ( text                 PGUID 11 f t t 1 f 25 "1625" 100 0 0 100  lztext_text -));
-DESCR("convert lztext to text");
-DATA(insert OID = 1630 ( text_lztext          PGUID 11 f t t 1 f 1625 "25" 100 0 0 100  text_lztext -));
-DESCR("convert text to lztext");
-DATA(insert OID = 1631 ( lztext                   PGUID 11 f t t 1 f 1625 "25" 100 0 0 100  text_lztext -));
-DESCR("convert text to lztext");
-DATA(insert OID = 1632 ( lztextlen                PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
-DESCR("length");
-DATA(insert OID = 1633 ( length                   PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextlen - ));
-DESCR("length");
-DATA(insert OID = 1634 ( lztextoctetlen           PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextoctetlen - ));
-DESCR("octet length");
-DATA(insert OID = 1635 ( octet_length         PGUID 11 f t t 1 f 23 "1625" 100 0 1 0  lztextoctetlen - ));
-DESCR("octet length");
-DATA(insert OID = 1636 ( lztext_cmp               PGUID 11 f t t 2 f 23 "1625 1625" 100 0 1 0  lztext_cmp - ));
-DESCR("compare lztext vs. lztext");
-DATA(insert OID = 1637 ( lztext_eq                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_eq - ));
-DESCR("equal");
-DATA(insert OID = 1638 ( lztext_ne                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ne - ));
-DESCR("not equal");
-DATA(insert OID = 1639 ( lztext_gt                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_gt - ));
-DESCR("greater-than");
-DATA(insert OID = 1664 ( lztext_ge                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_ge - ));
-DESCR("greater-than-or-equal");
-DATA(insert OID = 1665 ( lztext_lt                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_lt - ));
-DESCR("lower-than");
-DATA(insert OID = 1656 ( lztext_le                PGUID 11 f t t 2 f 16 "1625 1625" 100 0 1 0  lztext_le - ));
-DESCR("lower-than-or-equal");
 
 /* formatting */
 DATA(insert OID = 1770 ( to_char                       PGUID 11 f t f 2 f  25 "1184 25" 100 0 0 100  timestamp_to_char - ));
-DESCR("convert / formatting timestamp to text");
+DESCR("format timestamp to text");
 DATA(insert OID = 1772 ( to_char                       PGUID 11 f t f 2 f  25 "1700 25" 100 0 0 100  numeric_to_char - ));
-DESCR("convert / formatting numeric to text");
+DESCR("format numeric to text");
 DATA(insert OID = 1773 ( to_char                       PGUID 11 f t f 2 f  25 "23 25" 100 0 0 100  int4_to_char - ));
-DESCR("convert / formatting int4 to text");
+DESCR("format int4 to text");
 DATA(insert OID = 1774 ( to_char                       PGUID 11 f t f 2 f  25 "20 25" 100 0 0 100  int8_to_char - ));
-DESCR("convert / formatting int8 to text");
+DESCR("format int8 to text");
 DATA(insert OID = 1775 ( to_char                       PGUID 11 f t f 2 f  25 "700 25" 100 0 0 100  float4_to_char - ));
-DESCR("convert / formatting float4 to text");
+DESCR("format float4 to text");
 DATA(insert OID = 1776 ( to_char                       PGUID 11 f t f 2 f  25 "701 25" 100 0 0 100  float8_to_char - ));
-DESCR("convert / formatting float8 to text");
+DESCR("format float8 to text");
 DATA(insert OID = 1777 ( to_number                     PGUID 11 f t f 2 f  1700 "25 25" 100 0 0 100  numeric_to_number - ));
 DESCR("convert text to numeric");
 DATA(insert OID = 1778 ( to_timestamp          PGUID 11 f t f 2 f  1184 "25 25" 100 0 0 100  to_timestamp - ));
@@ -2429,3 +2344,4 @@ extern Oid ProcedureCreate(char *procedureName,
 
 
 #endif  /* PG_PROC_H */
+
index ae945a0f9bc64ecac0d89a62464607ee1900f0af..001f9070c9ad66d85e5353708c715b9c350080e4 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.84 2000/02/27 12:02:34 wieck Exp $
+ * $Id: pg_type.h,v 1.85 2000/03/14 23:06:45 thomas Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -377,6 +377,10 @@ DATA(insert OID = 1187 ( _interval  PGUID  -1 -1 f b t \054 0      1186 array_in array
 
 /* OIDS 1200 - 1299 */
 DATA(insert OID = 1231 (  _numeric   PGUID -1  -1 f b t \054 0  1700 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1266 ( timetz                 PGUID 12  22 f b t \054 0      0 timetz_in timetz_out timetz_in timetz_out d _null_ ));
+DESCR("hh:mm:ss, ANSI SQL time");
+#define TIMETZOID              1266
+DATA(insert OID = 1270 ( _timetz        PGUID  -1 -1 f b t \054 0      1266 array_in array_out array_in array_out d _null_ ));
 
 /* OIDS 1700 - 1799 */
 DATA(insert OID = 1700 ( numeric          PGUID -1  -1 f b t \054 0  0 numeric_in numeric_out numeric_in numeric_out i _null_ ));
index e90b42c01e8e9edd1bff43135c1b625ed36e4ebc..969d0c3bc6cd50e692f9596f6134cfb0820b250e 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parsenodes.h,v 1.101 2000/03/01 05:18:18 tgl Exp $
+ * $Id: parsenodes.h,v 1.102 2000/03/14 23:06:47 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -614,6 +614,7 @@ typedef struct ViewStmt
 {
        NodeTag         type;
        char       *viewname;           /* name of the view */
+       List       *aliases;            /* target column names */
        Query      *query;                      /* the SQL statement */
 } ViewStmt;
 
@@ -1131,6 +1132,12 @@ typedef struct TargetEntry
  *       Some of the following are only used in one of
  *       the parsing, optimizing, execution stages.
  *
+ *       eref is the expanded table name and columns for the underlying
+ *       relation. Note that for outer join syntax, allowed reference names
+ *       could be modified as one evaluates the nested clauses (e.g.
+ *       "SELECT ... FROM t1 NATURAL JOIN t2 WHERE ..." forbids explicit mention
+ *       of a table name in any reference to the join column.
+ *
  *       inFromCl marks those range variables that are listed in the FROM clause.
  *       In SQL, the query can only refer to range variables listed in the
  *       FROM clause, but POSTQUEL allows you to refer to tables not listed,
@@ -1157,9 +1164,8 @@ typedef struct RangeTblEntry
 {
        NodeTag         type;
        char       *relname;            /* real name of the relation */
-#ifndef DISABLE_JOIN_SYNTAX
        Attr       *ref;                        /* reference names (given in FROM clause) */
-#endif
+       Attr       *eref;                       /* expanded reference names */
        Oid                     relid;                  /* OID of the relation */
        bool            inh;                    /* inheritance requested? */
        bool            inFromCl;               /* present in FROM clause */
index 54107ef3b80c1082aa3d275078f4d5b486bf7841..d0acd944e116df7b87646a4d3cc4f9d39b2caf38 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: parse_coerce.h,v 1.18 2000/02/16 17:26:16 thomas Exp $
+ * $Id: parse_coerce.h,v 1.19 2000/03/14 23:06:48 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,9 @@ typedef enum CATEGORY
                || ((t) == INTERVALOID) \
                || ((t) == ABSTIMEOID) \
                || ((t) == RELTIMEOID) \
+               || ((t) == DATEOID) \
+               || ((t) == TIMEOID) \
+               || ((t) == TIMETZOID) \
                || ((t) == CHAROID) \
                || ((t) == NAMEOID) \
                || ((t) == CASHOID) \
index ec3eda8629f59546379bf41348bb4d77015afe99..7e4ee5a560d2e80c9db65e551f4370f9647f94c3 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.105 2000/02/27 12:02:34 wieck Exp $
+ * $Id: builtins.h,v 1.106 2000/03/14 23:06:50 thomas Exp $
  *
  * NOTES
  *       This should normally only be included by fmgr.h.
@@ -116,12 +116,14 @@ extern int32 int4pl(int32 arg1, int32 arg2);
 extern int32 int4mi(int32 arg1, int32 arg2);
 extern int32 int4mul(int32 arg1, int32 arg2);
 extern int32 int4div(int32 arg1, int32 arg2);
+extern int32 int4abs(int32 arg);
 extern int32 int4inc(int32 arg);
 extern int16 int2um(int16 arg);
 extern int16 int2pl(int16 arg1, int16 arg2);
 extern int16 int2mi(int16 arg1, int16 arg2);
 extern int16 int2mul(int16 arg1, int16 arg2);
 extern int16 int2div(int16 arg1, int16 arg2);
+extern int16 int2abs(int16 arg);
 extern int16 int2inc(int16 arg);
 extern int32 int24pl(int32 arg1, int32 arg2);
 extern int32 int24mi(int32 arg1, int32 arg2);
@@ -268,6 +270,7 @@ extern float64 dcbrt(float64 arg1);
 extern float64 dpow(float64 arg1, float64 arg2);
 extern float64 dexp(float64 arg1);
 extern float64 dlog1(float64 arg1);
+extern float64 dlog10(float64 arg1);
 extern float64 float48pl(float32 arg1, float64 arg2);
 extern float64 float48mi(float32 arg1, float64 arg2);
 extern float64 float48mul(float32 arg1, float64 arg2);
@@ -468,9 +471,11 @@ extern text *upper(text *string);
 extern text *initcap(text *string);
 extern text *lpad(text *string1, int4 len, text *string2);
 extern text *rpad(text *string1, int4 len, text *string2);
+extern text *btrim(text *string, text *set);
 extern text *ltrim(text *string, text *set);
 extern text *rtrim(text *string, text *set);
-extern text *translate(text *string, char from, char to);
+extern text    *substr(text *string, int4 m, int4 n);
+extern text *translate(text *string, text *from, text *to);
 
 /* acl.c */
 
index 003ee2e026538ab570c324c7d0b472f0e98c6426..b474634a384041adcc27613a10206d4390bffab1 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: date.h,v 1.1 2000/02/16 17:26:26 thomas Exp $
+ * $Id: date.h,v 1.2 2000/03/14 23:06:50 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,6 +18,12 @@ typedef int32 DateADT;
 
 typedef float8 TimeADT;
 
+typedef struct
+{
+       double          time;   /* all time units other than months and years */
+       int4            zone;   /* numeric time zone, in seconds */
+} TimeTzADT;
+
 /* date.c */
 extern DateADT date_in(char *datestr);
 extern char *date_out(DateADT dateVal);
@@ -46,7 +52,31 @@ extern bool time_lt(TimeADT *time1, TimeADT *time2);
 extern bool time_le(TimeADT *time1, TimeADT *time2);
 extern bool time_gt(TimeADT *time1, TimeADT *time2);
 extern bool time_ge(TimeADT *time1, TimeADT *time2);
-extern int     time_cmp(TimeADT *time1, TimeADT *time2);
+extern int time_cmp(TimeADT *time1, TimeADT *time2);
+extern bool overlaps_time(TimeADT *time1, TimeADT *time2,
+                                                 TimeADT *time3, TimeADT *time4);
+extern TimeADT *time_larger(TimeADT *time1, TimeADT *time2);
+extern TimeADT *time_smaller(TimeADT *time1, TimeADT *time2);
 extern TimeADT *timestamp_time(Timestamp *timestamp);
+extern Interval *time_interval(TimeADT *time);
+
+extern TimeTzADT *timetz_in(char *timestr);
+extern char *timetz_out(TimeTzADT *time);
+extern bool timetz_eq(TimeTzADT *time1, TimeTzADT *time2);
+extern bool timetz_ne(TimeTzADT *time1, TimeTzADT *time2);
+extern bool timetz_lt(TimeTzADT *time1, TimeTzADT *time2);
+extern bool timetz_le(TimeTzADT *time1, TimeTzADT *time2);
+extern bool timetz_gt(TimeTzADT *time1, TimeTzADT *time2);
+extern bool timetz_ge(TimeTzADT *time1, TimeTzADT *time2);
+extern int timetz_cmp(TimeTzADT *time1, TimeTzADT *time2);
+extern bool overlaps_timetz(TimeTzADT *time1, TimeTzADT *time2,
+                                                       TimeTzADT *time3, TimeTzADT *time4);
+extern TimeTzADT *timetz_larger(TimeTzADT *time1, TimeTzADT *time2);
+extern TimeTzADT *timetz_smaller(TimeTzADT *time1, TimeTzADT *time2);
+extern TimeTzADT *timestamp_timetz(Timestamp *timestamp);
+extern Timestamp *datetimetz_timestamp(DateADT date, TimeTzADT *time);
 
 #endif  /* DATE_H */
+
+
+
index 3df9ddf19f0db468be6ab241606fddada3db7a9d..e6469d46de50dfe6817a2d4bfe7fe21cd5f676ea 100644 (file)
@@ -9,7 +9,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: datetime.h,v 1.10 2000/02/16 17:26:26 thomas Exp $
+ * $Id: datetime.h,v 1.11 2000/03/14 23:06:50 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include <limits.h>
 #include "utils/timestamp.h"
 
-#if 0
-
-
-/*
- * Timestamp represents absolute time.
- * TimeSpan represents delta time. Keep track of months (and years)
- *     separately since the elapsed time spanned is unknown until instantiated
- *     relative to an absolute time.
- *
- * Note that Postgres uses "time interval" to mean a bounded interval,
- *     consisting of a beginning and ending time, not a time span - thomas 97/03/20
- */
-
-typedef double Timestamp;
-
-typedef struct
-{
-       double          time;                   /* all time units other than months and
-                                                                * years */
-       int4            month;                  /* months and years, after time for
-                                                                * alignment */
-} TimeSpan;
-
-
-#endif
-
 
 /* ----------------------------------------------------------------
  *                             time types + support macros
@@ -209,74 +183,6 @@ typedef struct
 } datetkn;
 
 
-#if 0
-
-
-#ifdef NAN
-#define TIMESTAMP_INVALID              (NAN)
-#else
-#define TIMESTAMP_INVALID              (DBL_MIN+DBL_MIN)
-#endif
-#ifdef HUGE_VAL
-#define TIMESTAMP_NOBEGIN              (-HUGE_VAL)
-#define TIMESTAMP_NOEND                (HUGE_VAL)
-#else
-#define TIMESTAMP_NOBEGIN              (-DBL_MAX)
-#define TIMESTAMP_NOEND                (DBL_MAX)
-#endif
-#define TIMESTAMP_CURRENT              (DBL_MIN)
-#define TIMESTAMP_EPOCH                (-DBL_MIN)
-
-#define TIMESTAMP_INVALID(j)           {j = TIMESTAMP_INVALID;}
-#ifdef NAN
-#define TIMESTAMP_IS_INVALID(j)        (isnan(j))
-#else
-#define TIMESTAMP_IS_INVALID(j)        (j == TIMESTAMP_INVALID)
-#endif
-
-#define TIMESTAMP_NOBEGIN(j)           {j = DT_NOBEGIN;}
-#define TIMESTAMP_IS_NOBEGIN(j)        (j == TIMESTAMP_NOBEGIN)
-
-#define TIMESTAMP_NOEND(j)             {j = TIMESTAMP_NOEND;}
-#define TIMESTAMP_IS_NOEND(j)  (j == TIMESTAMP_NOEND)
-
-#define TIMESTAMP_CURRENT(j)           {j = TIMESTAMP_CURRENT;}
-#if defined(linux) && defined(__powerpc__)
-extern int     timestamp_is_current(double j);
-
-#define TIMESTAMP_IS_CURRENT(j)        timestamp_is_current(j)
-#else
-#define TIMESTAMP_IS_CURRENT(j)        (j == TIMESTAMP_CURRENT)
-#endif
-
-#define TIMESTAMP_EPOCH(j)             {j = TIMESTAMP_EPOCH;}
-#if defined(linux) && defined(__powerpc__)
-extern int     timestamp_is_epoch(double j);
-
-#define TIMESTAMP_IS_EPOCH(j)  timestamp_is_epoch(j)
-#else
-#define TIMESTAMP_IS_EPOCH(j)  (j == TIMESTAMP_EPOCH)
-#endif
-
-#define TIMESTAMP_IS_RELATIVE(j) (TIMESTAMP_IS_CURRENT(j) || TIMESTAMP_IS_EPOCH(j))
-#define TIMESTAMP_NOT_FINITE(j)        (TIMESTAMP_IS_INVALID(j) \
-                                                               || TIMESTAMP_IS_NOBEGIN(j) || TIMESTAMP_IS_NOEND(j))
-#define TIMESTAMP_IS_RESERVED(j) (TIMESTAMP_IS_RELATIVE(j) || TIMESTAMP_NOT_FINITE(j))
-
-#define TIMESPAN_INVALID(j)            {(j).time = DT_INVALID;}
-#ifdef NAN
-#define TIMESPAN_IS_INVALID(j) (isnan((j).time))
-#else
-#define TIMESPAN_IS_INVALID(j) ((j).time == DATETIME_INVALID)
-#endif
-#define TIMESPAN_NOT_FINITE(j) TIMESPAN_IS_INVALID(j)
-
-#define TIME_PREC_INV 1000000.0
-#define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
-
-
-#endif
-
 /* TMODULO()
  * Macro to replace modf(), which is broken on some platforms.
  */
@@ -325,63 +231,6 @@ extern int day_tab[2][13];
   || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
 
 
-#if 0
-
-
-/*
- * datetime.c prototypes
- */
-
-extern DateTime *datetime_in(char *str);
-extern char *datetime_out(DateTime *dt);
-extern bool datetime_eq(DateTime *dt1, DateTime *dt2);
-extern bool datetime_ne(DateTime *dt1, DateTime *dt2);
-extern bool datetime_lt(DateTime *dt1, DateTime *dt2);
-extern bool datetime_le(DateTime *dt1, DateTime *dt2);
-extern bool datetime_ge(DateTime *dt1, DateTime *dt2);
-extern bool datetime_gt(DateTime *dt1, DateTime *dt2);
-extern bool datetime_finite(DateTime *datetime);
-extern int     datetime_cmp(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_smaller(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_larger(DateTime *dt1, DateTime *dt2);
-
-extern TimeSpan *timespan_in(char *str);
-extern char *timespan_out(TimeSpan *span);
-extern bool timespan_eq(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_ne(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_lt(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_le(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_ge(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_gt(TimeSpan *span1, TimeSpan *span2);
-extern bool timespan_finite(TimeSpan *span);
-extern int     timespan_cmp(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_smaller(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_larger(TimeSpan *span1, TimeSpan *span2);
-
-extern text *datetime_text(DateTime *datetime);
-extern DateTime *text_datetime(text *str);
-extern text *timespan_text(TimeSpan *timespan);
-extern TimeSpan *text_timespan(text *str);
-extern DateTime *datetime_trunc(text *units, DateTime *datetime);
-extern TimeSpan *timespan_trunc(text *units, TimeSpan *timespan);
-extern float64 datetime_part(text *units, DateTime *datetime);
-extern float64 timespan_part(text *units, TimeSpan *timespan);
-extern text *datetime_zone(text *zone, DateTime *datetime);
-
-extern TimeSpan *timespan_um(TimeSpan *span);
-extern TimeSpan *timespan_pl(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_mi(TimeSpan *span1, TimeSpan *span2);
-extern TimeSpan *timespan_div(TimeSpan *span1, float8 *arg2);
-
-extern TimeSpan *datetime_mi(DateTime *dt1, DateTime *dt2);
-extern DateTime *datetime_pl_span(DateTime *dt, TimeSpan *span);
-extern DateTime *datetime_mi_span(DateTime *dt, TimeSpan *span);
-extern TimeSpan *datetime_age(DateTime *dt1, DateTime *dt2);
-
-
-#endif
-
-
 extern void GetCurrentTime(struct tm * tm);
 extern void j2date(int jd, int *year, int *month, int *day);
 extern int     date2j(int year, int month, int day);
@@ -393,15 +242,16 @@ extern int DecodeDateTime(char **field, int *ftype,
                                                  int nf, int *dtype,
                                                  struct tm * tm, double *fsec, int *tzp);
 
-extern int DecodeTimeOnly(char **field, int *ftype, int nf,
-                                                 int *dtype, struct tm * tm, double *fsec);
+extern int DecodeTimeOnly(char **field, int *ftype,
+                                                 int nf, int *dtype,
+                                                 struct tm * tm, double *fsec, int *tzp);
 
 extern int DecodeDateDelta(char **field, int *ftype,
                                                   int nf, int *dtype,
                                                   struct tm * tm, double *fsec);
 
 extern int EncodeDateOnly(struct tm * tm, int style, char *str);
-extern int EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str);
+extern int EncodeTimeOnly(struct tm * tm, double fsec, int *tzp, int style, char *str);
 extern int EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str);
 extern int EncodeTimeSpan(struct tm * tm, double fsec, int style, char *str);
 
@@ -421,18 +271,4 @@ extern datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
 
 extern int j2day(int jd);
 
-
-#if 0
-
-
-static int EncodeSpecialTimestamp(Timestamp dt, char *str);
-static Timestamp dt2local(Timestamp dt, int timezone);
-static void dt2time(Timestamp dt, int *hour, int *min, double *sec);
-static int     timespan2tm(TimeSpan span, struct tm * tm, float8 *fsec);
-static int     tm2timespan(struct tm * tm, double fsec, TimeSpan *span);
-
-
-#endif
-
-
 #endif  /* DATETIME_H */
index 50745f9008be932010800d20a0fa7b174744b7a1..6d8869802c0420ab2b8ad84532e2aac97dce961e 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: geo_decls.h,v 1.25 2000/02/17 03:39:51 tgl Exp $
+ * $Id: geo_decls.h,v 1.26 2000/03/14 23:06:50 thomas Exp $
  *
  * NOTE
  *       These routines do *not* use the float types from adt/.
@@ -284,8 +284,6 @@ extern PATH *path_add_pt(PATH *path, Point *point);
 extern PATH *path_sub_pt(PATH *path, Point *point);
 extern PATH *path_mul_pt(PATH *path, Point *point);
 extern PATH *path_div_pt(PATH *path, Point *point);
-extern bool path_contain_pt(PATH *path, Point *p);
-extern bool pt_contained_path(Point *p, PATH *path);
 
 extern Point *path_center(PATH *path);
 extern POLYGON *path_poly(PATH *path);
index e4e4f04b19cab3bf78f0ea56532f51949d19773c..02053d6c393a6da453dcba0c015d522819f6abed 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: int8.h,v 1.18 2000/02/21 03:36:59 tgl Exp $
+ * $Id: int8.h,v 1.19 2000/03/14 23:06:50 thomas Exp $
  *
  * NOTES
  * These data types are supported on all 64-bit architectures, and may
@@ -76,6 +76,9 @@ extern int64 *int8pl(int64 *val1, int64 *val2);
 extern int64 *int8mi(int64 *val1, int64 *val2);
 extern int64 *int8mul(int64 *val1, int64 *val2);
 extern int64 *int8div(int64 *val1, int64 *val2);
+extern int64 *int8abs(int64 *val1);
+extern int64 *int8fac(int64 *val1);
+extern int64 *int8mod(int64 *val1, int64 *val2);
 extern int64 *int8larger(int64 *val1, int64 *val2);
 extern int64 *int8smaller(int64 *val1, int64 *val2);
 
index 27a5288cf39d4ac0862b9a596d185b08b5749cf5..22f304dff240f75e7801e6df58ee22d0121991b2 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: timestamp.h,v 1.1 2000/02/16 17:26:26 thomas Exp $
+ * $Id: timestamp.h,v 1.2 2000/03/14 23:06:51 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,10 +31,8 @@ typedef double Timestamp;
 
 typedef struct
 {
-       double          time;                   /* all time units other than months and
-                                                                * years */
-       int4            month;                  /* months and years, after time for
-                                                                * alignment */
+       double          time;   /* all time units other than months and years */
+       int4            month;  /* months and years, after time for alignment */
 } Interval;
 
 
@@ -101,49 +99,6 @@ extern int  timestamp_is_epoch(double j);
 #define JROUND(j) (rint(((double) (j))*TIME_PREC_INV)/TIME_PREC_INV)
 
 
-#if 0
-
-
-/*
- * Date/time validation
- * Include check for leap year.
- */
-
-extern int     day_tab[2][13];
-
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
-
-/* Julian date support for date2j() and j2date()
- * Set the minimum year to one greater than the year of the first valid day
- *     to avoid having to check year and day both. - tgl 97/05/08
- */
-
-#define JULIAN_MINYEAR (-4713)
-#define JULIAN_MINMONTH (11)
-#define JULIAN_MINDAY (23)
-
-#define IS_VALID_JULIAN(y,m,d) ((y > JULIAN_MINYEAR) \
- || ((y == JULIAN_MINYEAR) && ((m > JULIAN_MINMONTH) \
-  || ((m == JULIAN_MINMONTH) && (d >= JULIAN_MINDAY)))))
-
-#define UTIME_MINYEAR (1901)
-#define UTIME_MINMONTH (12)
-#define UTIME_MINDAY (14)
-#define UTIME_MAXYEAR (2038)
-#define UTIME_MAXMONTH (01)
-#define UTIME_MAXDAY (18)
-
-#define IS_VALID_UTIME(y,m,d) (((y > UTIME_MINYEAR) \
- || ((y == UTIME_MINYEAR) && ((m > UTIME_MINMONTH) \
-  || ((m == UTIME_MINMONTH) && (d >= UTIME_MINDAY))))) \
- && ((y < UTIME_MAXYEAR) \
- || ((y == UTIME_MAXYEAR) && ((m < UTIME_MAXMONTH) \
-  || ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
-
-
-#endif
-
-
 /*
  * timestamp.c prototypes
  */
@@ -193,9 +148,10 @@ extern Interval *timestamp_mi(Timestamp *dt1, Timestamp *dt2);
 extern Timestamp *timestamp_pl_span(Timestamp *dt, Interval *span);
 extern Timestamp *timestamp_mi_span(Timestamp *dt, Interval *span);
 extern Interval *timestamp_age(Timestamp *dt1, Timestamp *dt2);
+extern bool overlaps_timestamp(Timestamp *dt1, Timestamp *dt2, Timestamp *dt3, Timestamp *dt4);
 
-extern int     tm2timestamp(struct tm * tm, double fsec, int *tzp, Timestamp *dt);
-extern int     timestamp2tm(Timestamp dt, int *tzp, struct tm * tm, double *fsec, char **tzn);
+extern int tm2timestamp(struct tm * tm, double fsec, int *tzp, Timestamp *dt);
+extern int timestamp2tm(Timestamp dt, int *tzp, struct tm * tm, double *fsec, char **tzn);
 
 extern Timestamp SetTimestamp(Timestamp timestamp);
 extern Timestamp dt2local(Timestamp dt, int timezone);
index 6ef19f56cf66cb044a6f8d148b84cb2c89ac92d7..80010b965bd1cc8299bac9f2e43716ada36a056e 100644 (file)
@@ -291,5 +291,7 @@ DELETE FROM tmp3 where a=5;
 -- Try (and succeed)
 ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
 NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for FOREIGN KEY check(s)
-DROP TABLE tmp3
-DROP TABLE tmp2
+DROP TABLE tmp3;
+NOTICE:  DROP TABLE implicitly drops referential integrity trigger from table "tmp2"
+NOTICE:  DROP TABLE implicitly drops referential integrity trigger from table "tmp2"
+DROP TABLE tmp2;
index 6631da3ccea60004b65f481321b7604fac8522d9..e0276d6f69f973a926934c2a476a3501e15ebd68 100644 (file)
@@ -36,7 +36,7 @@ SELECT '' AS four, BOX_TBL.*;
       | (3,3),(3,3)
 (4 rows)
 
-SELECT '' AS four, b.*, box_area(b.f1) as barea
+SELECT '' AS four, b.*, area(b.f1) as barea
    FROM BOX_TBL b;
  four |         f1          | barea 
 ------+---------------------+-------
index 16771a4530c57e7c42ce37285439995174d72d74..8332d4d89499e43bd63e56e2ce6a4e0678243fc3 100644 (file)
@@ -40,7 +40,7 @@ ERROR:  Attribute 'foobar' not found
  
 -- missing relation name (this had better not wildcard!) 
 delete from;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- no such relation 
 delete from nonesuch;
 ERROR:  Relation 'nonesuch' does not exist
@@ -49,7 +49,7 @@ ERROR:  Relation 'nonesuch' does not exist
  
 -- missing relation name (this had better not wildcard!) 
 drop table;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- no such relation 
 drop table nonesuch;
 ERROR:  Relation 'nonesuch' does not exist
@@ -59,7 +59,7 @@ ERROR:  Relation 'nonesuch' does not exist
 -- relation renaming 
 -- missing relation name 
 alter table rename;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- no such relation 
 alter table nonesuch rename to newnonesuch;
 ERROR:  Relation 'nonesuch' does not exist
@@ -144,7 +144,7 @@ ERROR:  AggregateCreate: transition function 2 MUST have an initial value
  
 -- missing index name 
 drop index;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad index name 
 drop index 314159;
 ERROR:  parser: parse error at or near "314159"
@@ -156,16 +156,16 @@ ERROR:  index "nonesuch" nonexistent
  
 -- missing aggregate name 
 drop aggregate;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad aggregate name 
 drop aggregate 314159;
 ERROR:  parser: parse error at or near "314159"
 -- no such aggregate 
 drop aggregate nonesuch;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- missing aggregate type
 drop aggregate newcnt1;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad aggregate type
 drop aggregate newcnt nonesuch;
 ERROR:  RemoveAggregate: type 'nonesuch' does not exist
@@ -189,7 +189,7 @@ ERROR:  RemoveFunction: function 'nonesuch()' does not exist
  
 -- missing type name 
 drop type;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad type name 
 drop type 314159;
 ERROR:  parser: parse error at or near "314159"
@@ -201,13 +201,13 @@ ERROR:  RemoveType: type 'nonesuch' does not exist
  
 -- missing everything 
 drop operator;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad operator name 
 drop operator equals;
 ERROR:  parser: parse error at or near "equals"
 -- missing type list 
 drop operator ===;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- missing parentheses 
 drop operator int4, int4;
 ERROR:  parser: parse error at or near "int4"
@@ -243,7 +243,7 @@ ERROR:  parser: parse error at or near ")"
  
 -- missing rule name 
 drop rule;
-ERROR:  parser: parse error at or near ""
+ERROR:  parser: parse error at or near ";"
 -- bad rule name 
 drop rule 314159;
 ERROR:  parser: parse error at or near "314159"
index fc7b3779d70437fa8230e7e0dd5cd7e616674780..d4679d663ae869f08c93e5030c06dd3978278eba 100644 (file)
@@ -149,7 +149,19 @@ SELECT '' AS five, f.f1, f.f1 % AS round_f1
       | 1.2345678901234e-200 |                    0
 (5 rows)
 
+SELECT sqrt(float8 '64') AS eight;
+ eight 
+-------
+     8
+(1 row)
+
 -- square root 
+SELECT |/ float8 '64' AS eight;
+ eight 
+-------
+     8
+(1 row)
+
 SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
    FROM FLOAT8_TBL f
    WHERE f.f1 > '0.0';
@@ -172,6 +184,12 @@ SELECT '' AS three, f.f1, : ( ; f.f1) AS exp_ln_f1
 (3 rows)
 
 -- cube root 
+SELECT ||/ float8 '27' AS three;
+ three 
+-------
+     3
+(1 row)
+
 SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
  five |          f1          |       cbrt_f1        
 ------+----------------------+----------------------
@@ -217,7 +235,7 @@ SELECT '' AS five, FLOAT8_TBL.*;
       | -1.2345678901234e-200
 (5 rows)
 
--- test for over and under flow 
+-- test for over- and underflow 
 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
 ERROR:  Input '10e400' is out of range for float8
 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
index 2ca15d313173045c659c0de9e9cf7b1037d515da..6fe945f913b085999bbf0fd93bb17422fd916f93 100644 (file)
@@ -150,11 +150,11 @@ SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL;
  six |                                    box                                     
 -----+----------------------------------------------------------------------------
      | (2.12132034355964,2.12132034355964),(-2.12132034355964,-2.12132034355964)
-     | (71.7106781186547,72.7106781186547),(-69.7106781186547,-68.7106781186547)
-     | (4.53553390593274,6.53553390593274),(-2.53553390593274,-0.535533905932737)
+     | (71.7106781186548,72.7106781186548),(-69.7106781186548,-68.7106781186548)
+     | (4.53553390593274,6.53553390593274),(-2.53553390593274,-0.535533905932738)
      | (3.12132034355964,4.12132034355964),(-1.12132034355964,-0.121320343559642)
      | (107.071067811865,207.071067811865),(92.9289321881345,192.928932188135)
-     | (170.710678118655,70.7106781186547),(29.2893218813453,-70.7106781186547)
+     | (170.710678118655,70.7106781186548),(29.2893218813452,-70.7106781186548)
 (6 rows)
 
 -- translation
@@ -280,7 +280,7 @@ SELECT '' AS twenty, b.f1 / p.f1 AS rotation
 -- Paths
 --
 SET geqo TO 'off';
-SELECT '' AS eight, points(f1) AS npoints, f1 AS path FROM PATH_TBL;
+SELECT '' AS eight, npoints(f1) AS npoints, f1 AS path FROM PATH_TBL;
  eight | npoints |           path            
 -------+---------+---------------------------
        |       2 | [(1,2),(3,4)]
@@ -397,7 +397,7 @@ SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
             | (10,10)    | ((0,1),(0,1))       | f
 (24 rows)
 
-SELECT '' AS four, points(f1) AS npoints, f1 AS polygon
+SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon
    FROM POLYGON_TBL;
  four | npoints |       polygon       
 ------+---------+---------------------
@@ -502,31 +502,31 @@ SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS d
    FROM CIRCLE_TBL c1, POINT_TBL p1
    WHERE (p1.f1 <-> c1.f1) > 0
    ORDER BY distance, circle, point using <<;
- twentyfour |     circle     |   point    |     distance     
-------------+----------------+------------+------------------
-            | <(100,0),100>  | (5.1,34.5) | 0.97653192697797
-            | <(1,2),3>      | (-3,4)     | 1.47213595499958
-            | <(0,0),3>      | (-3,4)     |                2
-            | <(100,0),100>  | (-3,4)     | 3.07764064044152
-            | <(100,0),100>  | (-5,-12)   | 5.68348972285122
-            | <(1,3),5>      | (-10,0)    | 6.40175425099138
-            | <(1,3),5>      | (10,10)    | 6.40175425099138
-            | <(0,0),3>      | (-10,0)    |                7
-            | <(1,2),3>      | (-10,0)    | 8.18033988749895
-            | <(1,2),3>      | (10,10)    |  9.0415945787923
-            | <(0,0),3>      | (-5,-12)   |               10
-            | <(100,0),100>  | (-10,0)    |               10
-            | <(0,0),3>      | (10,10)    |  11.142135623731
-            | <(1,3),5>      | (-5,-12)   | 11.1554944214035
-            | <(1,2),3>      | (-5,-12)   | 12.2315462117278
-            | <(1,3),5>      | (5.1,34.5) | 26.7657047773223
-            | <(1,2),3>      | (5.1,34.5) |  29.757594539282
-            | <(0,0),3>      | (5.1,34.5) | 31.8749193547455
-            | <(100,200),10> | (5.1,34.5) | 180.778038568384
-            | <(100,200),10> | (10,10)    | 200.237960416286
-            | <(100,200),10> | (-3,4)     | 211.415898254845
-            | <(100,200),10> | (0,0)      | 213.606797749979
-            | <(100,200),10> | (-10,0)    | 218.254244210267
-            | <(100,200),10> | (-5,-12)   | 226.577682802077
+ twentyfour |     circle     |   point    |     distance      
+------------+----------------+------------+-------------------
+            | <(100,0),100>  | (5.1,34.5) | 0.976531926977965
+            | <(1,2),3>      | (-3,4)     |  1.47213595499958
+            | <(0,0),3>      | (-3,4)     |                 2
+            | <(100,0),100>  | (-3,4)     |  3.07764064044151
+            | <(100,0),100>  | (-5,-12)   |  5.68348972285122
+            | <(1,3),5>      | (-10,0)    |  6.40175425099138
+            | <(1,3),5>      | (10,10)    |  6.40175425099138
+            | <(0,0),3>      | (-10,0)    |                 7
+            | <(1,2),3>      | (-10,0)    |  8.18033988749895
+            | <(1,2),3>      | (10,10)    |   9.0415945787923
+            | <(0,0),3>      | (-5,-12)   |                10
+            | <(100,0),100>  | (-10,0)    |                10
+            | <(0,0),3>      | (10,10)    |   11.142135623731
+            | <(1,3),5>      | (-5,-12)   |  11.1554944214035
+            | <(1,2),3>      | (-5,-12)   |  12.2315462117278
+            | <(1,3),5>      | (5.1,34.5) |  26.7657047773223
+            | <(1,2),3>      | (5.1,34.5) |   29.757594539282
+            | <(0,0),3>      | (5.1,34.5) |  31.8749193547455
+            | <(100,200),10> | (5.1,34.5) |  180.778038568384
+            | <(100,200),10> | (10,10)    |  200.237960416286
+            | <(100,200),10> | (-3,4)     |  211.415898254845
+            | <(100,200),10> | (0,0)      |  213.606797749979
+            | <(100,200),10> | (-10,0)    |  218.254244210267
+            | <(100,200),10> | (-5,-12)   |  226.577682802077
 (24 rows)
 
index 9a0205b54080bb36d27a348f5f8afbaea92bd5f3..99522ab188eeae0e19c2970218eced9aaa03189e 100644 (file)
@@ -295,21 +295,3 @@ SELECT (2 + 2) / 2 AS two;
    2
 (1 row)
 
-SELECT dsqrt(float8 '64') AS eight;
- eight 
--------
-     8
-(1 row)
-
-SELECT |/float8 '64' AS eight;
- eight 
--------
-     8
-(1 row)
-
-SELECT ||/float8 '27' AS three;
- three 
--------
-     3
-(1 row)
-
index 35ec4557548e2608d38d093b3228c274b1097588..825a0fcafe4e78f70ff7b769110acfb97be676a5 100644 (file)
@@ -646,10 +646,10 @@ SELECT t1.id1, t1.result, t2.expected
 (0 rows)
 
 -- ******************************
--- * POWER(10, LN(value)) check
+-- * POW(10, LN(value)) check
 -- ******************************
 DELETE FROM num_result;
-INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
+INSERT INTO num_result SELECT id, 0, POW(numeric '10', LN(ABS(round(val,200))))
     FROM num_data
     WHERE val != '0.0';
 SELECT t1.id1, t1.result, t2.expected
index ac20f3ee777766487a8b62fdd9d9eba3d1f94348..ab332b49e68a079e0684c029e3309b18ff2339e0 100644 (file)
@@ -1147,27 +1147,27 @@ SELECT * FROM shoelace ORDER BY sl_name;
 -- Check that ruleutils are working
 --
 SELECT viewname, definition FROM pg_views ORDER BY viewname;
-      viewname      |                                                                                                                                                                                                                                                                                                                                                                              definition                                                                                                                                                                                                                                                                                                                                                                              
---------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- iexit              | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih (name, thepath), ramp r (name, thepath) WHERE (ih.thepath ## r.thepath);
- pg_indexes         | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x (indexrelid, indrelid, indproc, indkey, indclass, indisclustered, indislossy, indhaskeytype, indisunique, indisprimary, indreference, indpred), pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl), pg_class i (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE ((c.oid = x.indrelid) AND (i.oid = x.indexrelid));
- pg_rules           | SELECT c.relname AS tablename, r.rulename, pg_get_ruledef(r.rulename) AS definition FROM pg_rewrite r (rulename, ev_type, ev_class, ev_attr, is_instead, ev_qual, ev_action), pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE ((r.rulename !~ '^_RET'::text) AND (c.oid = r.ev_class));
- pg_tables          | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char"))))));
+      viewname      |                                                                                                                                                                                             definition                                                                                                                                                                                              
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ iexit              | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih, ramp r WHERE (ih.thepath ## r.thepath);
+ pg_indexes         | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x, pg_class c, pg_class i WHERE ((c.oid = x.indrelid) AND (i.oid = x.indexrelid));
+ pg_rules           | SELECT c.relname AS tablename, r.rulename, pg_get_ruledef(r.rulename) AS definition FROM pg_rewrite r, pg_class c WHERE ((r.rulename !~ '^_RET'::text) AND (c.oid = r.ev_class));
+ pg_tables          | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char"))))));
  pg_user            | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil FROM pg_shadow;
- pg_views           | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c (relname, reltype, relowner, relam, relpages, reltuples, rellongrelid, relhasindex, relisshared, relkind, relnatts, relchecks, reltriggers, relukeys, relfkeys, relrefs, relhaspkey, relhasrules, relacl) WHERE (c.relhasrules AND (EXISTS (SELECT r.rulename FROM pg_rewrite r (rulename, ev_type, ev_class, ev_attr, is_instead, ev_qual, ev_action) WHERE ((r.ev_class = c.oid) AND (r.ev_type = '1'::"char")))));
+ pg_views           | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c WHERE (c.relhasrules AND (EXISTS (SELECT r.rulename FROM pg_rewrite r WHERE ((r.ev_class = c.oid) AND (r.ev_type = '1'::"char")))));
  rtest_v1           | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1;
- rtest_vcomp        | SELECT x.part, (x.size * y.factor) AS size_in_cm FROM rtest_comp x (part, unit, size), rtest_unitfact y (unit, factor) WHERE (x.unit = y.unit);
- rtest_vview1       | SELECT x.a, x.b FROM rtest_view1 x (a, b, v) WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y (a) WHERE (y.a = x.a)));
+ rtest_vcomp        | SELECT x.part, (x.size * y.factor) AS size_in_cm FROM rtest_comp x, rtest_unitfact y WHERE (x.unit = y.unit);
+ rtest_vview1       | SELECT x.a, x.b FROM rtest_view1 x WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y WHERE (y.a = x.a)));
  rtest_vview2       | SELECT rtest_view1.a, rtest_view1.b FROM rtest_view1 WHERE rtest_view1.v;
- rtest_vview3       | SELECT x.a, x.b FROM rtest_vview2 x (a, b) WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y (a) WHERE (y.a = x.a)));
- rtest_vview4       | SELECT x.a, x.b, count(y.a) AS refcount FROM rtest_view1 x (a, b, v), rtest_view2 y (a) WHERE (x.a = y.a) GROUP BY x.a, x.b;
+ rtest_vview3       | SELECT x.a, x.b FROM rtest_vview2 x WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y WHERE (y.a = x.a)));
+ rtest_vview4       | SELECT x.a, x.b, count(y.a) AS refcount FROM rtest_view1 x, rtest_view2 y WHERE (x.a = y.a) GROUP BY x.a, x.b;
  rtest_vview5       | SELECT rtest_view1.a, rtest_view1.b, rtest_viewfunc1(rtest_view1.a) AS refcount FROM rtest_view1;
- shoe               | SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, (sh.slminlen * un.un_fact) AS slminlen_cm, sh.slmaxlen, (sh.slmaxlen * un.un_fact) AS slmaxlen_cm, sh.slunit FROM shoe_data sh (shoename, sh_avail, slcolor, slminlen, slmaxlen, slunit), unit un (un_name, un_fact) WHERE (sh.slunit = un.un_name);
- shoe_ready         | SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, int4smaller(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh (shoename, sh_avail, slcolor, slminlen, slminlen_cm, slmaxlen, slmaxlen_cm, slunit), shoelace rsl (sl_name, sl_avail, sl_color, sl_len, sl_unit, sl_len_cm) WHERE (((rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)) AND (rsl.sl_len_cm <= rsh.slmaxlen_cm));
- shoelace           | SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, (s.sl_len * u.un_fact) AS sl_len_cm FROM shoelace_data s (sl_name, sl_avail, sl_color, sl_len, sl_unit), unit u (un_name, un_fact) WHERE (s.sl_unit = u.un_name);
+ shoe               | SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, (sh.slminlen * un.un_fact) AS slminlen_cm, sh.slmaxlen, (sh.slmaxlen * un.un_fact) AS slmaxlen_cm, sh.slunit FROM shoe_data sh, unit un WHERE (sh.slunit = un.un_name);
+ shoe_ready         | SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, int4smaller(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh, shoelace rsl WHERE (((rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)) AND (rsl.sl_len_cm <= rsh.slmaxlen_cm));
+ shoelace           | SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, (s.sl_len * u.un_fact) AS sl_len_cm FROM shoelace_data s, unit u WHERE (s.sl_unit = u.un_name);
  shoelace_candelete | SELECT shoelace_obsolete.sl_name, shoelace_obsolete.sl_avail, shoelace_obsolete.sl_color, shoelace_obsolete.sl_len, shoelace_obsolete.sl_unit, shoelace_obsolete.sl_len_cm FROM shoelace_obsolete WHERE (shoelace_obsolete.sl_avail = 0);
  shoelace_obsolete  | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color))));
- street             | SELECT r.name, r.thepath, c.cname FROM road r (name, thepath), real_city c (pop, cname, outline) WHERE (c.outline ## r.thepath);
+ street             | SELECT r.name, r.thepath, c.cname FROM road r, real_city c WHERE (c.outline ## r.thepath);
  toyemp             | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp;
 (20 rows)
 
index efe704a56982ea5a974b26f82dba75e595f6c25f..8ac97f1cb5d3c9f25fbb3e74431e11f8531c11a9 100644 (file)
@@ -3,7 +3,7 @@
 --
 -- Shorthand values
 -- Not directly usable for regression testing since these are not constants.
--- So, just try to test parser and hope for the best - tgl 97/04/26
+-- So, just try to test parser and hope for the best - thomas 97/04/26
 SELECT (timestamp 'today' = (timestamp 'yesterday' + interval '1 day')) as "True";
  True 
 ------
@@ -34,13 +34,25 @@ SELECT (timestamp 'now' - 'current') AS "ZeroSecs";
  @ 0
 (1 row)
 
-SET DateStyle = 'Postgres,noneuropean';
-SELECT timestamp('1994-01-01', '11:00') AS "Jan_01_1994_11am";
+SET DateStyle = 'Postgres,NonEuropean';
+SELECT timestamp(date '1994-01-01', time '11:00') AS "Jan_01_1994_11am";
        Jan_01_1994_11am       
 ------------------------------
  Sat Jan 01 11:00:00 1994 PST
 (1 row)
 
+SELECT timestamp(date '1994-01-01', time '10:00') AS "Jan_01_1994_10am";
+       Jan_01_1994_10am       
+------------------------------
+ Sat Jan 01 10:00:00 1994 PST
+(1 row)
+
+SELECT timestamp(date '1994-01-01', time with time zone '11:00-5') AS "Jan_01_1994_8am";
+       Jan_01_1994_8am        
+------------------------------
+ Sat Jan 01 08:00:00 1994 PST
+(1 row)
+
 CREATE TABLE TIMESTAMP_TBL ( d1 timestamp);
 INSERT INTO TIMESTAMP_TBL VALUES ('current');
 INSERT INTO TIMESTAMP_TBL VALUES ('today');
index 3e422be9c5f035ecc7130dcdb714e7264c1c8f47..cf5dc2409cdb68943a6e7ca2228f8363ce777c4c 100755 (executable)
@@ -1,8 +1,7 @@
 #!/bin/sh
-# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.43 2000/03/01 21:10:04 petere Exp $
+# $Header: /cvsroot/pgsql/src/test/regress/Attic/regress.sh,v 1.44 2000/03/14 23:06:55 thomas Exp $
 #
-if [ $# -eq 0 ]
-then
+if [ $# -eq 0 ]; then
        echo "Syntax: $0 <hostname> [extra-tests]"
        exit 1
 fi
@@ -11,8 +10,7 @@ hostname=$1
 shift
 extratests="$*"
 
-if [ "x$hostname" = "xwin" -o "x$hostname" = "xi386-pc-qnx4" ]
-then
+if [ "x$hostname" = "xwin" -o "x$hostname" = "xi386-pc-qnx4" ]; then
        HOSTLOC="-h localhost"
 else
        HOSTLOC=""
@@ -81,21 +79,22 @@ if [ $? -ne 0 ]; then
      exit 1
 fi
 
-if [ "x$hostname" != "xi386-pc-qnx4" ]
-then
-echo "=============== installing PL/pgSQL...                ================="
+if [ "x$hostname" != "xi386-pc-qnx4" ]; then
+echo "=============== installing languages...                ================="
+$ECHO_N "installing PL/pgSQL .. " $ECHO_C
 createlang $HOSTLOC plpgsql regression
 if [ $? -ne 0 -a $? -ne 2 ]; then
-     echo createlang failed
+     echo failed
      exit 1
+else
+       echo ok
 fi
 fi
 
 echo "=============== running regression queries...         ================="
 echo "" > regression.diffs
 
-if [ "x$hostname" = "xi386-pc-qnx4" ]
-then
+if [ "x$hostname" = "xi386-pc-qnx4" ]; then
        DIFFOPT="-b"
 else
        DIFFOPT="-w"
@@ -126,8 +125,7 @@ do
                fi
        done
 
-       if [ `diff ${DIFFOPT} ${EXPECTED} results/${tst}.out | wc -l` -ne 0 ]
-       then
+       if [ `diff ${DIFFOPT} ${EXPECTED} results/${tst}.out | wc -l` -ne 0 ]; then
                ( diff ${DIFFOPT} -C3 ${EXPECTED} results/${tst}.out; \
                echo "";  \
                echo "----------------------"; \
@@ -147,24 +145,23 @@ $FRONTEND regression < errors.sql
 #set this to 1 to avoid clearing the database
 debug=0
 
-if test "$debug" -eq 1
-then
-echo Skipping clearing and deletion of the regression database
+if [ test "$debug" -eq 1 ]; then
+       echo Skipping clearing and deletion of the regression database
 else
-echo "=============== clearing regression database...       ================="
-$FRONTEND regression < drop.sql
-if [ $? -ne 0 ]; then
-     echo the drop script has an error
-     exit 1
-fi
+       echo "=============== clearing regression database...       ================="
+       $FRONTEND regression < drop.sql
+       if [ $? -ne 0 ]; then
+               echo the drop script has an error
+               exit 1
+       fi
 
-exit 0
-echo "=============== dropping regression database...       ================="
-dropdb regression
-if [ $? -ne 0 ]; then
-     echo dropdb failed
-     exit 1
-fi
+       exit 0
+       echo "=============== dropping regression database...       ================="
+       dropdb regression
+       if [ $? -ne 0 ]; then
+               echo dropdb failed
+               exit 1
+       fi
 
-exit 0
+       exit 0
 fi
index 512b74d49c33a6acc6b1ba49fd879fcf857a1dbe..0642e96ba19d52dce855de5112338b52c66b470e 100644 (file)
@@ -189,7 +189,7 @@ DELETE FROM tmp3 where a=5;
 -- Try (and succeed)
 ALTER TABLE tmp3 add constraint tmpconstr foreign key (a) references tmp2 match full;
 
-DROP TABLE tmp3
+DROP TABLE tmp3;
 
-DROP TABLE tmp2
+DROP TABLE tmp2;
 
index bd28243c7ce4fb6497488bf25f433fada7600221..68dbe138223ec0f9f10d95e935983592a5ff72f3 100644 (file)
@@ -39,7 +39,7 @@ INSERT INTO BOX_TBL (f1) VALUES ('asdfasdf(ad');
 
 SELECT '' AS four, BOX_TBL.*;
 
-SELECT '' AS four, b.*, box_area(b.f1) as barea
+SELECT '' AS four, b.*, area(b.f1) as barea
    FROM BOX_TBL b;
 
 -- overlap 
index 8fc7a7baf429d11f12ce3dc9cc5f3070480e413a..e3bbb9d21cb9ff53f3d9aee0fecc41edfdaabf70 100644 (file)
@@ -60,7 +60,11 @@ SELECT '' AS five, f.f1, %f.f1 AS trunc_f1
 SELECT '' AS five, f.f1, f.f1 % AS round_f1
    FROM FLOAT8_TBL f;
 
+SELECT sqrt(float8 '64') AS eight;
+
 -- square root 
+SELECT |/ float8 '64' AS eight;
+
 SELECT '' AS three, f.f1, |/f.f1 AS sqrt_f1
    FROM FLOAT8_TBL f
    WHERE f.f1 > '0.0';
@@ -71,6 +75,8 @@ SELECT '' AS three, f.f1, : ( ; f.f1) AS exp_ln_f1
    WHERE f.f1 > '0.0';
 
 -- cube root 
+SELECT ||/ float8 '27' AS three;
+
 SELECT '' AS five, f.f1, ||/f.f1 AS cbrt_f1 FROM FLOAT8_TBL f;
 
 
@@ -94,7 +100,7 @@ SELECT '' AS bad, f.f1 / '0.0' from FLOAT8_TBL f;
 
 SELECT '' AS five, FLOAT8_TBL.*;
 
--- test for over and under flow 
+-- test for over- and underflow 
 INSERT INTO FLOAT8_TBL(f1) VALUES ('10e400');
 
 INSERT INTO FLOAT8_TBL(f1) VALUES ('-10e400');
index a19b7883abe4132a4940deb5fed62d8ab609d3b2..d2694663e3962fc57065235f4da82f703a98fbdc 100644 (file)
@@ -85,7 +85,7 @@ SELECT '' AS twenty, b.f1 / p.f1 AS rotation
 
 SET geqo TO 'off';
 
-SELECT '' AS eight, points(f1) AS npoints, f1 AS path FROM PATH_TBL;
+SELECT '' AS eight, npoints(f1) AS npoints, f1 AS path FROM PATH_TBL;
 
 SELECT '' AS four, path(f1) FROM POLYGON_TBL;
 
@@ -110,7 +110,7 @@ SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 ~ p.f1 AS contains
 SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 @ poly.f1 AS contained
    FROM POLYGON_TBL poly, POINT_TBL p;
 
-SELECT '' AS four, points(f1) AS npoints, f1 AS polygon
+SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon
    FROM POLYGON_TBL;
 
 SELECT '' AS four, polygon(f1)
index 96e947eebaaceaee6aa4a2b9e8f482c0d60e0fef..8663e284fbf9b8317b58795a1bd9e5da3dd75181 100644 (file)
@@ -103,10 +103,3 @@ SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten;
 SELECT 2 + 2 / 2 AS three;
 
 SELECT (2 + 2) / 2 AS two;
-
-SELECT dsqrt(float8 '64') AS eight;
-
-SELECT |/float8 '64' AS eight;
-
-SELECT ||/float8 '27' AS three;
-
index 2f4e4adefd44c7520fe91642bd1bfd04c41687cc..3097cc5af7f423a9283018219aa3fa1dc56f2ec8 100644 (file)
@@ -623,10 +623,10 @@ SELECT t1.id1, t1.result, t2.expected
     AND t1.result != t2.expected;
 
 -- ******************************
--- * POWER(10, LN(value)) check
+-- * POW(10, LN(value)) check
 -- ******************************
 DELETE FROM num_result;
-INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
+INSERT INTO num_result SELECT id, 0, POW(numeric '10', LN(ABS(round(val,200))))
     FROM num_data
     WHERE val != '0.0';
 SELECT t1.id1, t1.result, t2.expected
index 5fc46066062c9493bdfad6b6931e2ab298b6c742..984b5c79c6ed638ba00cd10ae2a33ee017a26e75 100644 (file)
@@ -4,7 +4,7 @@
 
 -- Shorthand values
 -- Not directly usable for regression testing since these are not constants.
--- So, just try to test parser and hope for the best - tgl 97/04/26
+-- So, just try to test parser and hope for the best - thomas 97/04/26
 
 SELECT (timestamp 'today' = (timestamp 'yesterday' + interval '1 day')) as "True";
 SELECT (timestamp 'today' = (timestamp 'tomorrow' - interval '1 day')) as "True";
@@ -12,8 +12,10 @@ SELECT (timestamp 'tomorrow' = (timestamp 'yesterday' + interval '2 days')) as "
 SELECT (timestamp 'current' = 'now') as "True";
 SELECT (timestamp 'now' - 'current') AS "ZeroSecs";
 
-SET DateStyle = 'Postgres,noneuropean';
-SELECT timestamp('1994-01-01', '11:00') AS "Jan_01_1994_11am";
+SET DateStyle = 'Postgres,NonEuropean';
+SELECT timestamp(date '1994-01-01', time '11:00') AS "Jan_01_1994_11am";
+SELECT timestamp(date '1994-01-01', time '10:00') AS "Jan_01_1994_10am";
+SELECT timestamp(date '1994-01-01', time with time zone '11:00-5') AS "Jan_01_1994_8am";
 
 CREATE TABLE TIMESTAMP_TBL ( d1 timestamp);