diff options
| author | Thomas G. Lockhart <lockhart@fourpalms.org> | 2002-07-04 15:24:11 +0000 |
|---|---|---|
| committer | Thomas G. Lockhart <lockhart@fourpalms.org> | 2002-07-04 15:24:11 +0000 |
| commit | 68d9fbeb5511d846ce3a6f66b8955d3ca55a4b76 (patch) | |
| tree | 2c916fdd1c617a90fdd143e6f68ea9c48d19f296 /src/backend/nodes/readfuncs.c | |
| parent | c7eea66c392cd3f5c914ed135d01a2e20ecb1f92 (diff) | |
| download | postgresql-68d9fbeb5511d846ce3a6f66b8955d3ca55a4b76.tar.gz | |
Implement the IS DISTINCT FROM operator per SQL99.
Reused the Expr node to hold DISTINCT which strongly resembles
the existing OP info. Define DISTINCT_EXPR which strongly resembles
the existing OPER_EXPR opType, but with handling for NULLs required
by SQL99.
We have explicit support for single-element DISTINCT comparisons
all the way through to the executor. But, multi-element DISTINCTs
are handled by expanding into a comparison tree in gram.y as is done for
other row comparisons. Per discussions, it might be desirable to move
this into one or more purpose-built nodes to be handled in the backend.
Define the optional ROW keyword and token per SQL99.
This allows single-element row constructs, which were formerly disallowed
due to shift/reduce conflicts with parenthesized a_expr clauses.
Define the SQL99 TREAT() function. Currently, use as a synonym for CAST().
Diffstat (limited to 'src/backend/nodes/readfuncs.c')
| -rw-r--r-- | src/backend/nodes/readfuncs.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 92d5f2474d..0a22194e47 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.123 2002/06/20 20:29:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.124 2002/07/04 15:23:54 thomas Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -804,6 +804,8 @@ _readExpr(void) token = pg_strtok(&length); /* get opType */ if (strncmp(token, "op", 2) == 0) local_node->opType = OP_EXPR; + else if (strncmp(token, "distinct", 8) == 0) + local_node->opType = DISTINCT_EXPR; else if (strncmp(token, "func", 4) == 0) local_node->opType = FUNC_EXPR; else if (strncmp(token, "or", 2) == 0) |
