mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-30 00:04:49 -04:00 
			
		
		
		
	Rename IndexInfo.ii_KeyAttrNumbers array
Rename ii_KeyAttrNumbers to ii_IndexAttrNumbers to prevent confusion with ii_NumIndexAttrs/ii_NumIndexKeyAttrs. ii_IndexAttrNumbers contains all attributes including "including" columns, not only key attribute. Discussion: https://www.postgresql.org/message-id/13123421-1d52-d0e4-c95c-6d69011e0595%40sigaev.ru
This commit is contained in:
		
							parent
							
								
									9e9befac4a
								
							
						
					
					
						commit
						c9c875a28f
					
				| @ -239,7 +239,7 @@ index_check_primary_key(Relation heapRel, | ||||
| 	cmds = NIL; | ||||
| 	for (i = 0; i < indexInfo->ii_NumIndexKeyAttrs; i++) | ||||
| 	{ | ||||
| 		AttrNumber	attnum = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 		AttrNumber	attnum = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 		HeapTuple	atttuple; | ||||
| 		Form_pg_attribute attform; | ||||
| 
 | ||||
| @ -324,7 +324,7 @@ ConstructTupleDescriptor(Relation heapRelation, | ||||
| 	 */ | ||||
| 	for (i = 0; i < numatts; i++) | ||||
| 	{ | ||||
| 		AttrNumber	atnum = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 		AttrNumber	atnum = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 		Form_pg_attribute to = TupleDescAttr(indexTupDesc, i); | ||||
| 		HeapTuple	tuple; | ||||
| 		Form_pg_type typeTup; | ||||
| @ -607,7 +607,7 @@ UpdateIndexRelation(Oid indexoid, | ||||
| 	 */ | ||||
| 	indkey = buildint2vector(NULL, indexInfo->ii_NumIndexAttrs); | ||||
| 	for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 		indkey->values[i] = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 		indkey->values[i] = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 	indcollation = buildoidvector(collationOids, indexInfo->ii_NumIndexAttrs); | ||||
| 	indclass = buildoidvector(classOids, indexInfo->ii_NumIndexKeyAttrs); | ||||
| 	indoption = buildint2vector(coloptions, indexInfo->ii_NumIndexAttrs); | ||||
| @ -1041,11 +1041,11 @@ index_create(Relation heapRelation, | ||||
| 			/* Create auto dependencies on simply-referenced columns */ | ||||
| 			for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 			{ | ||||
| 				if (indexInfo->ii_KeyAttrNumbers[i] != 0) | ||||
| 				if (indexInfo->ii_IndexAttrNumbers[i] != 0) | ||||
| 				{ | ||||
| 					referenced.classId = RelationRelationId; | ||||
| 					referenced.objectId = heapRelationId; | ||||
| 					referenced.objectSubId = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 					referenced.objectSubId = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 
 | ||||
| 					recordDependencyOn(&myself, &referenced, deptype); | ||||
| 
 | ||||
| @ -1297,7 +1297,7 @@ index_constraint_create(Relation heapRelation, | ||||
| 								   true, | ||||
| 								   parentConstraintId, | ||||
| 								   RelationGetRelid(heapRelation), | ||||
| 								   indexInfo->ii_KeyAttrNumbers, | ||||
| 								   indexInfo->ii_IndexAttrNumbers, | ||||
| 								   indexInfo->ii_NumIndexKeyAttrs, | ||||
| 								   indexInfo->ii_NumIndexAttrs, | ||||
| 								   InvalidOid,	/* no domain */ | ||||
| @ -1757,7 +1757,7 @@ BuildIndexInfo(Relation index) | ||||
| 	Assert(ii->ii_NumIndexKeyAttrs <= ii->ii_NumIndexAttrs); | ||||
| 
 | ||||
| 	for (i = 0; i < numAtts; i++) | ||||
| 		ii->ii_KeyAttrNumbers[i] = indexStruct->indkey.values[i]; | ||||
| 		ii->ii_IndexAttrNumbers[i] = indexStruct->indkey.values[i]; | ||||
| 
 | ||||
| 	/* fetch any expressions needed for expressional indexes */ | ||||
| 	ii->ii_Expressions = RelationGetIndexExpressions(index); | ||||
| @ -1840,13 +1840,13 @@ CompareIndexInfo(IndexInfo *info1, IndexInfo *info2, | ||||
| 	 */ | ||||
| 	for (i = 0; i < info1->ii_NumIndexAttrs; i++) | ||||
| 	{ | ||||
| 		if (maplen < info2->ii_KeyAttrNumbers[i]) | ||||
| 		if (maplen < info2->ii_IndexAttrNumbers[i]) | ||||
| 			elog(ERROR, "incorrect attribute map"); | ||||
| 
 | ||||
| 		/* ignore expressions at this stage */ | ||||
| 		if ((info1->ii_KeyAttrNumbers[i] != InvalidAttrNumber) && | ||||
| 			(attmap[info2->ii_KeyAttrNumbers[i] - 1] != | ||||
| 			info1->ii_KeyAttrNumbers[i])) | ||||
| 		if ((info1->ii_IndexAttrNumbers[i] != InvalidAttrNumber) && | ||||
| 			(attmap[info2->ii_IndexAttrNumbers[i] - 1] != | ||||
| 			info1->ii_IndexAttrNumbers[i])) | ||||
| 			return false; | ||||
| 
 | ||||
| 		if (collations1[i] != collations2[i]) | ||||
| @ -2007,7 +2007,7 @@ FormIndexDatum(IndexInfo *indexInfo, | ||||
| 
 | ||||
| 	for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 	{ | ||||
| 		int			keycol = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 		int			keycol = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 		Datum		iDatum; | ||||
| 		bool		isNull; | ||||
| 
 | ||||
|  | ||||
| @ -304,8 +304,8 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, | ||||
| 	indexInfo = makeNode(IndexInfo); | ||||
| 	indexInfo->ii_NumIndexAttrs = 2; | ||||
| 	indexInfo->ii_NumIndexKeyAttrs = 2; | ||||
| 	indexInfo->ii_KeyAttrNumbers[0] = 1; | ||||
| 	indexInfo->ii_KeyAttrNumbers[1] = 2; | ||||
| 	indexInfo->ii_IndexAttrNumbers[0] = 1; | ||||
| 	indexInfo->ii_IndexAttrNumbers[1] = 2; | ||||
| 	indexInfo->ii_Expressions = NIL; | ||||
| 	indexInfo->ii_ExpressionsState = NIL; | ||||
| 	indexInfo->ii_Predicate = NIL; | ||||
|  | ||||
| @ -495,7 +495,7 @@ do_analyze_rel(Relation onerel, int options, VacuumParams *params, | ||||
| 				tcnt = 0; | ||||
| 				for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 				{ | ||||
| 					int			keycol = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 					int			keycol = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 
 | ||||
| 					if (keycol == 0) | ||||
| 					{ | ||||
|  | ||||
| @ -724,7 +724,7 @@ DefineIndex(Oid relationId, | ||||
| 
 | ||||
| 			for (j = 0; j < indexInfo->ii_NumIndexAttrs; j++) | ||||
| 			{ | ||||
| 				if (key->partattrs[i] == indexInfo->ii_KeyAttrNumbers[j]) | ||||
| 				if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j]) | ||||
| 				{ | ||||
| 					found = true; | ||||
| 					break; | ||||
| @ -753,7 +753,7 @@ DefineIndex(Oid relationId, | ||||
| 	 */ | ||||
| 	for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 	{ | ||||
| 		AttrNumber	attno = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 		AttrNumber	attno = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 
 | ||||
| 		if (attno < 0 && attno != ObjectIdAttributeNumber) | ||||
| 			ereport(ERROR, | ||||
| @ -1428,7 +1428,7 @@ ComputeIndexAttrs(IndexInfo *indexInfo, | ||||
| 									attribute->name))); | ||||
| 			} | ||||
| 			attform = (Form_pg_attribute) GETSTRUCT(atttuple); | ||||
| 			indexInfo->ii_KeyAttrNumbers[attn] = attform->attnum; | ||||
| 			indexInfo->ii_IndexAttrNumbers[attn] = attform->attnum; | ||||
| 			atttype = attform->atttypid; | ||||
| 			attcollation = attform->attcollation; | ||||
| 			ReleaseSysCache(atttuple); | ||||
| @ -1461,11 +1461,11 @@ ComputeIndexAttrs(IndexInfo *indexInfo, | ||||
| 				 * User wrote "(column)" or "(column COLLATE something)". | ||||
| 				 * Treat it like simple attribute anyway. | ||||
| 				 */ | ||||
| 				indexInfo->ii_KeyAttrNumbers[attn] = ((Var *) expr)->varattno; | ||||
| 				indexInfo->ii_IndexAttrNumbers[attn] = ((Var *) expr)->varattno; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				indexInfo->ii_KeyAttrNumbers[attn] = 0; /* marks expression */ | ||||
| 				indexInfo->ii_IndexAttrNumbers[attn] = 0; /* marks expression */ | ||||
| 				indexInfo->ii_Expressions = lappend(indexInfo->ii_Expressions, | ||||
| 													expr); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								src/backend/utils/cache/relcache.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								src/backend/utils/cache/relcache.c
									
									
									
									
										vendored
									
									
								
							| @ -5065,7 +5065,7 @@ restart: | ||||
| 		/* Collect simple attribute references */ | ||||
| 		for (i = 0; i < indexInfo->ii_NumIndexAttrs; i++) | ||||
| 		{ | ||||
| 			int			attrnum = indexInfo->ii_KeyAttrNumbers[i]; | ||||
| 			int			attrnum = indexInfo->ii_IndexAttrNumbers[i]; | ||||
| 
 | ||||
| 			/*
 | ||||
| 			 * Since we have covering indexes with non-key columns, we must | ||||
|  | ||||
| @ -3718,7 +3718,7 @@ comparetup_cluster(const SortTuple *a, const SortTuple *b, | ||||
| 				datum2; | ||||
| 	bool		isnull1, | ||||
| 				isnull2; | ||||
| 	AttrNumber	leading = state->indexInfo->ii_KeyAttrNumbers[0]; | ||||
| 	AttrNumber	leading = state->indexInfo->ii_IndexAttrNumbers[0]; | ||||
| 
 | ||||
| 	/* Be prepared to compare additional sort keys */ | ||||
| 	ltup = (HeapTuple) a->tuple; | ||||
| @ -3761,7 +3761,7 @@ comparetup_cluster(const SortTuple *a, const SortTuple *b, | ||||
| 
 | ||||
| 		for (; nkey < state->nKeys; nkey++, sortKey++) | ||||
| 		{ | ||||
| 			AttrNumber	attno = state->indexInfo->ii_KeyAttrNumbers[nkey]; | ||||
| 			AttrNumber	attno = state->indexInfo->ii_IndexAttrNumbers[nkey]; | ||||
| 
 | ||||
| 			datum1 = heap_getattr(ltup, attno, tupDesc, &isnull1); | ||||
| 			datum2 = heap_getattr(rtup, attno, tupDesc, &isnull2); | ||||
| @ -3833,11 +3833,11 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup) | ||||
| 	 * set up first-column key value, and potentially abbreviate, if it's a | ||||
| 	 * simple column | ||||
| 	 */ | ||||
| 	if (state->indexInfo->ii_KeyAttrNumbers[0] == 0) | ||||
| 	if (state->indexInfo->ii_IndexAttrNumbers[0] == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	original = heap_getattr(tuple, | ||||
| 							state->indexInfo->ii_KeyAttrNumbers[0], | ||||
| 							state->indexInfo->ii_IndexAttrNumbers[0], | ||||
| 							state->tupDesc, | ||||
| 							&stup->isnull1); | ||||
| 
 | ||||
| @ -3881,7 +3881,7 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup) | ||||
| 
 | ||||
| 			tuple = (HeapTuple) mtup->tuple; | ||||
| 			mtup->datum1 = heap_getattr(tuple, | ||||
| 										state->indexInfo->ii_KeyAttrNumbers[0], | ||||
| 										state->indexInfo->ii_IndexAttrNumbers[0], | ||||
| 										state->tupDesc, | ||||
| 										&mtup->isnull1); | ||||
| 		} | ||||
| @ -3935,9 +3935,9 @@ readtup_cluster(Tuplesortstate *state, SortTuple *stup, | ||||
| 							 &tuplen, sizeof(tuplen)); | ||||
| 	stup->tuple = (void *) tuple; | ||||
| 	/* set up first-column key value, if it's a simple column */ | ||||
| 	if (state->indexInfo->ii_KeyAttrNumbers[0] != 0) | ||||
| 	if (state->indexInfo->ii_IndexAttrNumbers[0] != 0) | ||||
| 		stup->datum1 = heap_getattr(tuple, | ||||
| 									state->indexInfo->ii_KeyAttrNumbers[0], | ||||
| 									state->indexInfo->ii_IndexAttrNumbers[0], | ||||
| 									state->tupDesc, | ||||
| 									&stup->isnull1); | ||||
| } | ||||
|  | ||||
| @ -150,7 +150,7 @@ typedef struct IndexInfo | ||||
| 	NodeTag		type; | ||||
| 	int			ii_NumIndexAttrs;	/* total number of columns in index */ | ||||
| 	int			ii_NumIndexKeyAttrs;	/* number of key columns in index */ | ||||
| 	AttrNumber	ii_KeyAttrNumbers[INDEX_MAX_KEYS]; | ||||
| 	AttrNumber	ii_IndexAttrNumbers[INDEX_MAX_KEYS]; | ||||
| 	List	   *ii_Expressions; /* list of Expr */ | ||||
| 	List	   *ii_ExpressionsState;	/* list of ExprState */ | ||||
| 	List	   *ii_Predicate;	/* list of Expr */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user