On 2017-03-29 13:40:29 -0400, Peter Eisentraut wrote:
> On 3/24/17 05:29, Vitaly Burovoy wrote:
> > It would be great if "DROP IDENTITY IF EXISTS" is in the current patch
> > since we don't have any disagreements about "DROP IDENTITY" behavior
> > and easiness of implementation of "IF EXISTS" there.
> 
> Here is an updated patch that adds DROP IDENTITY IF EXISTS.
> 
> Unfortunately, implementing ADD IF NOT EXISTS is much harder, so I
> haven't done that here.
> 
> Additionally, this patch fixes a few minor issues that you had pointed
> out, and merges with the new expression evaluation system in the executor.

Your attachment has a mimetype of invalid/octet-stream - that's a first
for me ;)


Are you going to try to merge this soon, or are you pushing this to 11?
Feels a bit large for 10 at this point.


> +             case T_NextValueExpr:
> +                     {
> +                             NextValueExpr *nve = (NextValueExpr *) node;
> +
> +                             scratch.opcode = EEOP_NEXTVALUEEXPR;
> +                             scratch.d.nextvalueexpr.seqid = nve->seqid;
> +
> +                             ExprEvalPushStep(state, &scratch);
> +                             break;
> +                     }

Hm - that's probably been answered somewhere, but why do we need a
special expression type for this?


>               default:
>                       elog(ERROR, "unrecognized node type: %d",
>                                (int) nodeTag(node));
> diff --git a/src/backend/executor/execExprInterp.c 
> b/src/backend/executor/execExprInterp.c
> index 4fbb5c1e74..5935b9ef75 100644
> --- a/src/backend/executor/execExprInterp.c
> +++ b/src/backend/executor/execExprInterp.c
> @@ -60,6 +60,7 @@
>  
>  #include "access/tuptoaster.h"
>  #include "catalog/pg_type.h"
> +#include "commands/sequence.h"
>  #include "executor/execExpr.h"
>  #include "executor/nodeSubplan.h"
>  #include "funcapi.h"
> @@ -337,6 +338,7 @@ ExecInterpExpr(ExprState *state, ExprContext *econtext, 
> bool *isnull)
>               &&CASE_EEOP_NULLIF,
>               &&CASE_EEOP_SQLVALUEFUNCTION,
>               &&CASE_EEOP_CURRENTOFEXPR,
> +             &&CASE_EEOP_NEXTVALUEEXPR,
>               &&CASE_EEOP_ARRAYEXPR,
>               &&CASE_EEOP_ARRAYCOERCE,
>               &&CASE_EEOP_ROW,
> @@ -1228,6 +1230,14 @@ ExecInterpExpr(ExprState *state, ExprContext 
> *econtext, bool *isnull)
>                       EEO_NEXT();
>               }
>  
> +             EEO_CASE(EEOP_NEXTVALUEEXPR)
> +             {
> +                     *op->resvalue = 
> Int64GetDatum(nextval_internal(op->d.nextvalueexpr.seqid, false));
> +                     *op->resnull = false;
> +
> +                     EEO_NEXT();
> +             }

Is it guaranteed that the caller expects an int64?  I saw that
nextvalueexpr's have a typeid field.

Greetings,

Andres Freund


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to