Damage control for yesterday's CheckIndexCompatible changes.
Rip out a regression test that doesn't play well with settings put in place by the build farm, and rewrite the code in CheckIndexCompatible in a hopefully more transparent style.
This commit is contained in:
parent
9f9135d129
commit
9d35116611
|
@ -214,11 +214,20 @@ CheckIndexCompatible(Oid oldId,
|
||||||
|
|
||||||
ReleaseSysCache(tuple);
|
ReleaseSysCache(tuple);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
return false;
|
||||||
|
|
||||||
/* For polymorphic opcintype, column type changes break compatibility. */
|
/* For polymorphic opcintype, column type changes break compatibility. */
|
||||||
irel = index_open(oldId, AccessShareLock); /* caller probably has a lock */
|
irel = index_open(oldId, AccessShareLock); /* caller probably has a lock */
|
||||||
for (i = 0; i < old_natts && ret; i++)
|
for (i = 0; i < old_natts; i++)
|
||||||
ret = (!IsPolymorphicType(get_opclass_input_type(classObjectId[i])) ||
|
{
|
||||||
irel->rd_att->attrs[i]->atttypid == typeObjectId[i]);
|
if (IsPolymorphicType(get_opclass_input_type(classObjectId[i])) &&
|
||||||
|
irel->rd_att->attrs[i]->atttypid != typeObjectId[i])
|
||||||
|
{
|
||||||
|
ret = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Any change in exclusion operator selections breaks compatibility. */
|
/* Any change in exclusion operator selections breaks compatibility. */
|
||||||
if (ret && indexInfo->ii_ExclusionOps != NULL)
|
if (ret && indexInfo->ii_ExclusionOps != NULL)
|
||||||
|
@ -231,14 +240,21 @@ CheckIndexCompatible(Oid oldId,
|
||||||
old_natts * sizeof(Oid)) == 0;
|
old_natts * sizeof(Oid)) == 0;
|
||||||
|
|
||||||
/* Require an exact input type match for polymorphic operators. */
|
/* Require an exact input type match for polymorphic operators. */
|
||||||
for (i = 0; i < old_natts && ret; i++)
|
if (ret)
|
||||||
{
|
{
|
||||||
Oid left,
|
for (i = 0; i < old_natts && ret; i++)
|
||||||
right;
|
{
|
||||||
|
Oid left,
|
||||||
|
right;
|
||||||
|
|
||||||
op_input_types(indexInfo->ii_ExclusionOps[i], &left, &right);
|
op_input_types(indexInfo->ii_ExclusionOps[i], &left, &right);
|
||||||
ret = (!(IsPolymorphicType(left) || IsPolymorphicType(right)) ||
|
if ((IsPolymorphicType(left) || IsPolymorphicType(right)) &&
|
||||||
irel->rd_att->attrs[i]->atttypid == typeObjectId[i]);
|
irel->rd_att->attrs[i]->atttypid != typeObjectId[i])
|
||||||
|
{
|
||||||
|
ret = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1665,15 +1665,6 @@ where oid = 'test_storage'::regclass;
|
||||||
t
|
t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- SET DATA TYPE without a rewrite
|
|
||||||
CREATE DOMAIN other_textarr AS text[];
|
|
||||||
CREATE TABLE norewrite_array(c text[] PRIMARY KEY);
|
|
||||||
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "norewrite_array_pkey" for table "norewrite_array"
|
|
||||||
SET client_min_messages = debug1;
|
|
||||||
ALTER TABLE norewrite_array ALTER c TYPE text[]; -- no work
|
|
||||||
ALTER TABLE norewrite_array ALTER c TYPE other_textarr; -- rebuild index
|
|
||||||
DEBUG: building index "norewrite_array_pkey" on table "norewrite_array"
|
|
||||||
RESET client_min_messages;
|
|
||||||
--
|
--
|
||||||
-- lock levels
|
-- lock levels
|
||||||
--
|
--
|
||||||
|
|
|
@ -1197,14 +1197,6 @@ select reltoastrelid <> 0 as has_toast_table
|
||||||
from pg_class
|
from pg_class
|
||||||
where oid = 'test_storage'::regclass;
|
where oid = 'test_storage'::regclass;
|
||||||
|
|
||||||
-- SET DATA TYPE without a rewrite
|
|
||||||
CREATE DOMAIN other_textarr AS text[];
|
|
||||||
CREATE TABLE norewrite_array(c text[] PRIMARY KEY);
|
|
||||||
SET client_min_messages = debug1;
|
|
||||||
ALTER TABLE norewrite_array ALTER c TYPE text[]; -- no work
|
|
||||||
ALTER TABLE norewrite_array ALTER c TYPE other_textarr; -- rebuild index
|
|
||||||
RESET client_min_messages;
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- lock levels
|
-- lock levels
|
||||||
--
|
--
|
||||||
|
|
Loading…
Reference in New Issue