WRITE_LOCATION_FIELD(location);
}
+static void
+_outNextValueExpr(StringInfo str, const NextValueExpr *node)
+{
+ WRITE_NODE_TYPE("NEXTVALUEEXPR");
+
+ if (portable_output)
+ {
+ WRITE_RELID_FIELD(seqid);
+ WRITE_TYPID_FIELD(typeId);
+ }
+ else
+ {
+ WRITE_OID_FIELD(seqid);
+ WRITE_OID_FIELD(typeId);
+ }
+}
static void
_outXmlExpr(StringInfo str, const XmlExpr *node)
{
case T_SQLValueFunction:
_outSQLValueFunction(str, obj);
break;
+ case T_NextValueExpr:
+ _outNextValueExpr(str, obj);
+ break;
case T_XmlExpr:
_outXmlExpr(str, obj);
break;
READ_DONE();
}
+/*
+ * _readNextValueExpr
+ */
+static NextValueExpr *
+_readNextValueExpr(void)
+{
+ READ_LOCALS(NextValueExpr);
+
+ if (portable_input)
+ {
+ READ_RELID_FIELD(seqid);
+ READ_TYPID_FIELD(typeId);
+ }
+ else
+ {
+ READ_OID_FIELD(seqid);
+ READ_OID_FIELD(typeId);
+ }
+ READ_DONE();
+}
+
/*
* _readXmlExpr
*/
return_value = _readMinMaxExpr();
else if (MATCH("SQLVALUEFUNCTION", 16))
return_value = _readSQLValueFunction();
+ else if (MATCH("NEXTVALUEEXPR", 13))
+ return_value = _readNextValueExpr();
else if (MATCH("XMLEXPR", 7))
return_value = _readXmlExpr();
else if (MATCH("NULLTEST", 8))
pgxc_set_exprtype_shippability(exprType(node), sc_context);
break;
+ case T_NextValueExpr:
+ /*
+ * XXX PG10MERGE: Is it Ok to ship nextval when it's used for
+ * replica identity?
+ */
+ pgxc_set_exprtype_shippability(exprType(node), sc_context);
+ break;
+
case T_Aggref:
{
Aggref *aggref = (Aggref *)node;
}
break;
+ case T_NextValueExpr:
+ {
+ /*
+ * This gets invoked by Fast Query Shipping code to deparse a
+ * query. It seems enough to just generate a "DEFAULT" clause
+ * and let the remote datanode handle finding the correct
+ * sequence for replica identity.
+ *
+ * XXX PG10MERGE: If we do see issues with this, it might be
+ * worthwhile to consider generating an expression such as,
+ * nextval('sequence_name'::regclass)
+ */
+ appendStringInfoString(buf, "DEFAULT");
+ }
+ break;
+
case T_XmlExpr:
{
XmlExpr *xexpr = (XmlExpr *) node;