aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2012-01-26 08:21:31 -0500
committerRobert Haas <rhaas@postgresql.org>2012-01-26 08:21:31 -0500
commit9d35116611e6a1fc10f2298944fbf0e4e1a826be (patch)
treee46a81e56c6ff83d1e4fd3d447823f4919f9ac43 /src
parent9f9135d129e915e72c8a2f770689fd72619ead49 (diff)
downloadpostgresql-9d35116611e6a1fc10f2298944fbf0e4e1a826be.tar.gz
postgresql-9d35116611e6a1fc10f2298944fbf0e4e1a826be.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/indexcmds.c34
-rw-r--r--src/test/regress/expected/alter_table.out9
-rw-r--r--src/test/regress/sql/alter_table.sql8
3 files changed, 25 insertions, 26 deletions
diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 1bf1de56f31..6c909298b7d 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -214,11 +214,20 @@ CheckIndexCompatible(Oid oldId,
ReleaseSysCache(tuple);
+ if (!ret)
+ return false;
+
/* For polymorphic opcintype, column type changes break compatibility. */
irel = index_open(oldId, AccessShareLock); /* caller probably has a lock */
- for (i = 0; i < old_natts && ret; i++)
- ret = (!IsPolymorphicType(get_opclass_input_type(classObjectId[i])) ||
- irel->rd_att->attrs[i]->atttypid == typeObjectId[i]);
+ for (i = 0; i < old_natts; 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. */
if (ret && indexInfo->ii_ExclusionOps != NULL)
@@ -231,14 +240,21 @@ CheckIndexCompatible(Oid oldId,
old_natts * sizeof(Oid)) == 0;
/* Require an exact input type match for polymorphic operators. */
- for (i = 0; i < old_natts && ret; i++)
+ if (ret)
{
- Oid left,
- right;
+ for (i = 0; i < old_natts && ret; i++)
+ {
+ Oid left,
+ right;
- op_input_types(indexInfo->ii_ExclusionOps[i], &left, &right);
- ret = (!(IsPolymorphicType(left) || IsPolymorphicType(right)) ||
- irel->rd_att->attrs[i]->atttypid == typeObjectId[i]);
+ op_input_types(indexInfo->ii_ExclusionOps[i], &left, &right);
+ if ((IsPolymorphicType(left) || IsPolymorphicType(right)) &&
+ irel->rd_att->attrs[i]->atttypid != typeObjectId[i])
+ {
+ ret = false;
+ break;
+ }
+ }
}
}
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 41bfa857ddd..e9925495042 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -1665,15 +1665,6 @@ where oid = 'test_storage'::regclass;
t
(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
--
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
index 494c1504d78..d9bf08d6d50 100644
--- a/src/test/regress/sql/alter_table.sql
+++ b/src/test/regress/sql/alter_table.sql
@@ -1197,14 +1197,6 @@ select reltoastrelid <> 0 as has_toast_table
from pg_class
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
--