From be20eb23c85a5e53d7406a21a1e0ca5c5006c2ea Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 12 Mar 2020 18:29:52 -0300
Subject: [PATCH 6/8] use castNode() instead of Assert(IsA) plus cast

---
 src/backend/executor/nodeIncrementalSort.c | 26 ++++++++--------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/src/backend/executor/nodeIncrementalSort.c b/src/backend/executor/nodeIncrementalSort.c
index bbb3f35640..be1afbb169 100644
--- a/src/backend/executor/nodeIncrementalSort.c
+++ b/src/backend/executor/nodeIncrementalSort.c
@@ -115,18 +115,14 @@ instrumentSortedGroup(PlanState *pstate, IncrementalSortGroupInfo *groupInfo,
 static void
 preparePresortedCols(IncrementalSortState *node)
 {
-	IncrementalSort *plannode = (IncrementalSort *) node->ss.ps.plan;
-	int			presortedCols,
-				i;
+	IncrementalSort *plannode = castNode(IncrementalSort, node->ss.ps.plan);
 
-	Assert(IsA(plannode, IncrementalSort));
-	presortedCols = plannode->presortedCols;
-
-	node->presorted_keys = (PresortedKeyData *) palloc(presortedCols *
-													   sizeof(PresortedKeyData));
+	node->presorted_keys =
+		(PresortedKeyData *) palloc(plannode->presortedCols *
+									sizeof(PresortedKeyData));
 
 	/* Pre-cache comparison functions for each pre-sorted key. */
-	for (i = 0; i < presortedCols; i++)
+	for (int i = 0; i < plannode->presortedCols; i++)
 	{
 		Oid			equalityOp,
 					equalityFunc;
@@ -162,17 +158,13 @@ preparePresortedCols(IncrementalSortState *node)
  *
  * We do this by comparing its first 'presortedCols' column values to
  * the pivot tuple of the current group.
- *
  */
 static bool
 isCurrentGroup(IncrementalSortState *node, TupleTableSlot *pivot, TupleTableSlot *tuple)
 {
-	int			presortedCols,
-				i;
+	int			presortedCols;
 
-	Assert(IsA(node->ss.ps.plan, IncrementalSort));
-
-	presortedCols = ((IncrementalSort *) node->ss.ps.plan)->presortedCols;
+	presortedCols = castNode(IncrementalSort, node->ss.ps.plan)->presortedCols;
 
 	/*
 	 * That the input is sorted by keys * (0, ... n) implies that the tail
@@ -180,7 +172,7 @@ isCurrentGroup(IncrementalSortState *node, TupleTableSlot *pivot, TupleTableSlot
 	 * from the last pre-sorted column to optimize for early detection of
 	 * inequality and minimizing the number of function calls..
 	 */
-	for (i = presortedCols - 1; i >= 0; i--)
+	for (int i = presortedCols - 1; i >= 0; i--)
 	{
 		Datum		datumA,
 					datumB,
@@ -250,7 +242,7 @@ switchToPresortedPrefixMode(PlanState *pstate)
 	bool		firstTuple = true;
 	TupleDesc	tupDesc;
 	PlanState  *outerNode;
-	IncrementalSort *plannode = (IncrementalSort *) node->ss.ps.plan;
+	IncrementalSort *plannode = castNode(IncrementalSort, node->ss.ps.plan);
 
 	dir = node->ss.ps.state->es_direction;
 	outerNode = outerPlanState(node);
-- 
2.20.1

