Refactor BuildIndexInfo() with the new makeIndexInfo()
authorMichael Paquier <michael@paquier.xyz>
Sun, 4 Aug 2019 02:18:57 +0000 (11:18 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sun, 4 Aug 2019 02:18:57 +0000 (11:18 +0900)
This portion of the code got forgotten in 7cce159 which has introduced a
new routine to build this node, and this finishes the unification of the
places where IndexInfo is initialized.

Author: Michael Paquier
Discussion: https://postgr.es/m/20190801041322.GA3435@paquier.xyz

src/backend/catalog/index.c

index 99ae159f98a219531fb34ec1c490e9e308767752..3e1d40662d13677370d253fbe2eb896310442613 100644 (file)
@@ -2229,7 +2229,7 @@ index_drop(Oid indexId, bool concurrent, bool concurrent_lock_mode)
 IndexInfo *
 BuildIndexInfo(Relation index)
 {
-       IndexInfo  *ii = makeNode(IndexInfo);
+       IndexInfo  *ii;
        Form_pg_index indexStruct = index->rd_index;
        int                     i;
        int                     numAtts;
@@ -2239,22 +2239,24 @@ BuildIndexInfo(Relation index)
        if (numAtts < 1 || numAtts > INDEX_MAX_KEYS)
                elog(ERROR, "invalid indnatts %d for index %u",
                         numAtts, RelationGetRelid(index));
-       ii->ii_NumIndexAttrs = numAtts;
-       ii->ii_NumIndexKeyAttrs = indexStruct->indnkeyatts;
-       Assert(ii->ii_NumIndexKeyAttrs != 0);
-       Assert(ii->ii_NumIndexKeyAttrs <= ii->ii_NumIndexAttrs);
 
+       /*
+        * Create the node, fetching any expressions needed for expressional
+        * indexes and index predicate if any.
+        */
+       ii = makeIndexInfo(indexStruct->indnatts,
+                                          indexStruct->indnkeyatts,
+                                          index->rd_rel->relam,
+                                          RelationGetIndexExpressions(index),
+                                          RelationGetIndexPredicate(index),
+                                          indexStruct->indisunique,
+                                          indexStruct->indisready,
+                                          false);
+
+       /* fill in attribute numbers */
        for (i = 0; i < numAtts; i++)
                ii->ii_IndexAttrNumbers[i] = indexStruct->indkey.values[i];
 
-       /* fetch any expressions needed for expressional indexes */
-       ii->ii_Expressions = RelationGetIndexExpressions(index);
-       ii->ii_ExpressionsState = NIL;
-
-       /* fetch index predicate if any */
-       ii->ii_Predicate = RelationGetIndexPredicate(index);
-       ii->ii_PredicateState = NULL;
-
        /* fetch exclusion constraint info if any */
        if (indexStruct->indisexclusion)
        {
@@ -2263,30 +2265,6 @@ BuildIndexInfo(Relation index)
                                                                 &ii->ii_ExclusionProcs,
                                                                 &ii->ii_ExclusionStrats);
        }
-       else
-       {
-               ii->ii_ExclusionOps = NULL;
-               ii->ii_ExclusionProcs = NULL;
-               ii->ii_ExclusionStrats = NULL;
-       }
-
-       /* other info */
-       ii->ii_Unique = indexStruct->indisunique;
-       ii->ii_ReadyForInserts = indexStruct->indisready;
-       /* assume not doing speculative insertion for now */
-       ii->ii_UniqueOps = NULL;
-       ii->ii_UniqueProcs = NULL;
-       ii->ii_UniqueStrats = NULL;
-
-       /* initialize index-build state to default */
-       ii->ii_Concurrent = false;
-       ii->ii_BrokenHotChain = false;
-       ii->ii_ParallelWorkers = 0;
-
-       /* set up for possible use by index AM */
-       ii->ii_Am = index->rd_rel->relam;
-       ii->ii_AmCache = NULL;
-       ii->ii_Context = CurrentMemoryContext;
 
        return ii;
 }