Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdae887a

Browse files
committed
Remove now-dead code for processing CONSTR_UNIQUE nodes in
AlterTableAddConstraint. Earlier reorganization of the parser'sprocessing of ALTER TABLE means that these node types no longer get here.
1 parentfb17004 commitdae887a

File tree

1 file changed

+7
-173
lines changed

1 file changed

+7
-173
lines changed

‎src/backend/commands/command.c

Lines changed: 7 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.150 2001/11/05 17:46:24 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.151 2001/12/04 17:19:48 tgl Exp $
1212
*
1313
* NOTES
1414
* The PerformAddAttribute() code, like most of the relation
@@ -1246,6 +1246,12 @@ AlterTableAddConstraint(char *relationName,
12461246
{
12471247
Constraint*constr= (Constraint*)newConstraint;
12481248

1249+
/*
1250+
* Currently, we only expect to see CONSTR_CHECK nodes
1251+
* arriving here (see the preprocessing done in
1252+
* parser/analyze.c). Use a switch anyway to make it
1253+
* easier to add more code later.
1254+
*/
12491255
switch (constr->contype)
12501256
{
12511257
caseCONSTR_CHECK:
@@ -1351,178 +1357,6 @@ AlterTableAddConstraint(char *relationName,
13511357
AddRelationRawConstraints(rel,NIL,
13521358
makeList1(constr));
13531359

1354-
break;
1355-
}
1356-
caseCONSTR_UNIQUE:
1357-
{
1358-
char*iname=constr->name;
1359-
boolistemp=is_temp_rel_name(relationName);
1360-
List*indexoidlist;
1361-
List*indexoidscan;
1362-
intnum_keys;
1363-
boolindex_found= false;
1364-
boolindex_found_unique= false;
1365-
boolindex_found_primary= false;
1366-
1367-
/*
1368-
* If the constraint name is not
1369-
* specified, generate a name
1370-
*/
1371-
if (iname==NULL)
1372-
{
1373-
Oidindoid;
1374-
intpass=0;
1375-
char*typename=palloc(NAMEDATALEN);
1376-
Ident*key;
1377-
1378-
/*
1379-
* Assume that the length of the attr
1380-
* list is already > 0
1381-
*/
1382-
1383-
/*
1384-
* Get the first attribute so we can
1385-
* use its name
1386-
*/
1387-
key= (Ident*)lfirst(constr->keys);
1388-
1389-
/* Initialise typename to 'key' */
1390-
snprintf(typename,NAMEDATALEN,"key");
1391-
1392-
for (;;)
1393-
{
1394-
iname=makeObjectName(relationName,key->name,typename);
1395-
1396-
/* Check for a conflict */
1397-
indoid=RelnameFindRelid(iname);
1398-
1399-
/*
1400-
* If the oid was not found, then
1401-
* we have a safe name
1402-
*/
1403-
if ((!istemp&& !OidIsValid(indoid))||
1404-
(istemp&& !is_temp_rel_name(iname)))
1405-
break;
1406-
1407-
/*
1408-
* Found a conflict, so try a new
1409-
* name component
1410-
*/
1411-
pfree(iname);
1412-
snprintf(typename,NAMEDATALEN,"key%d",++pass);
1413-
}
1414-
}
1415-
1416-
/*
1417-
* Need to check for unique key already on
1418-
* field(s)
1419-
*/
1420-
1421-
/*
1422-
* First we check for limited correctness
1423-
* of the constraint
1424-
*/
1425-
1426-
/* Loop over all indices on the relation */
1427-
indexoidlist=RelationGetIndexList(rel);
1428-
1429-
foreach(indexoidscan,indexoidlist)
1430-
{
1431-
Oidindexoid=lfirsti(indexoidscan);
1432-
HeapTupleindexTuple;
1433-
Form_pg_indexindexStruct;
1434-
List*keyl;
1435-
inti;
1436-
1437-
indexTuple=SearchSysCache(INDEXRELID,
1438-
ObjectIdGetDatum(indexoid),
1439-
0,0,0);
1440-
1441-
if (!HeapTupleIsValid(indexTuple))
1442-
elog(ERROR,"ALTER TABLE / ADD CONSTRAINT: Index \"%u\" not found",
1443-
indexoid);
1444-
indexStruct= (Form_pg_index)GETSTRUCT(indexTuple);
1445-
1446-
/*
1447-
* Make sure this index has the same
1448-
* number of keys as the constraint --
1449-
* It obviously won't match otherwise.
1450-
*/
1451-
for (i=0;i<INDEX_MAX_KEYS&&indexStruct->indkey[i]!=0;i++)
1452-
;
1453-
num_keys=length(constr->keys);
1454-
1455-
if (i==num_keys)
1456-
{
1457-
/*
1458-
* Loop over each key in the
1459-
* constraint and check that there
1460-
* is a corresponding key in the
1461-
* index.
1462-
*/
1463-
intkeys_matched=0;
1464-
1465-
i=0;
1466-
foreach(keyl,constr->keys)
1467-
{
1468-
Ident*key=lfirst(keyl);
1469-
intkeyno=indexStruct->indkey[i];
1470-
1471-
/*
1472-
* Look at key[i] in the index
1473-
* and check that it is over
1474-
* the same column as key[i]
1475-
* in the constraint. This is
1476-
* to differentiate between
1477-
* (a,b) and (b,a)
1478-
*/
1479-
if (namestrcmp(attnumAttName(rel,keyno),
1480-
key->name)==0)
1481-
keys_matched++;
1482-
else
1483-
break;
1484-
i++;
1485-
}
1486-
if (keys_matched==num_keys)
1487-
{
1488-
index_found= true;
1489-
index_found_unique=indexStruct->indisunique;
1490-
index_found_primary=indexStruct->indisprimary;
1491-
}
1492-
}
1493-
ReleaseSysCache(indexTuple);
1494-
if (index_found_unique||index_found_primary)
1495-
break;
1496-
}
1497-
1498-
freeList(indexoidlist);
1499-
1500-
if (index_found_primary)
1501-
elog(ERROR,"Unique primary key already defined on relation \"%s\"",relationName);
1502-
elseif (index_found_unique)
1503-
elog(ERROR,"Unique constraint already defined on the specified attributes in relation \"%s\"",relationName);
1504-
1505-
/*
1506-
* If everything is ok, create the new
1507-
* index (constraint)
1508-
*/
1509-
DefineIndex(
1510-
relationName,
1511-
iname,
1512-
"btree",
1513-
constr->keys,
1514-
true,
1515-
false,
1516-
NULL,
1517-
NIL);
1518-
1519-
/* Issue notice */
1520-
elog(NOTICE,"ALTER TABLE / ADD UNIQUE will create implicit index '%s' for table '%s'",
1521-
iname,relationName);
1522-
if (index_found)
1523-
elog(NOTICE,"Unique constraint supercedes existing index on relation \"%s\". Drop the existing index to remove redundancy.",relationName);
1524-
pfree(iname);
1525-
15261360
break;
15271361
}
15281362
default:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp