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

Commit9ee4891

Browse files
committed
Some quick fixes for ALTER DOMAIN patch. It still needs a lot of work,
but at least it doesn't generate gcc warnings.
1 parent4ed6be5 commit9ee4891

File tree

1 file changed

+76
-96
lines changed

1 file changed

+76
-96
lines changed

‎src/backend/commands/typecmds.c

Lines changed: 76 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/commands/typecmds.c,v 1.20 2002/12/06 05:00:11 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/commands/typecmds.c,v 1.21 2002/12/09 20:31:05 tgl Exp $
1212
*
1313
* DESCRIPTION
1414
* The "DefineFoo" routines take the parse tree and pick out the
@@ -63,7 +63,6 @@
6363
staticOidfindTypeIOFunction(List*procname,OidtypeOid,boolisOutput);
6464
staticList*get_rels_with_domain(OiddomainOid);
6565
staticvoiddomainPermissionCheck(HeapTupletup,TypeName*typename);
66-
staticvoiddomainCheckForUnsupportedConstraints(Node*newConstraint);
6766
staticchar*domainAddConstraint(OiddomainOid,OiddomainNamespace,
6867
OidbaseTypeOid,
6968
inttypMod,Constraint*constr,
@@ -519,24 +518,23 @@ DefineDomain(CreateDomainStmt *stmt)
519518
Constraint*colDef;
520519
ParseState*pstate;
521520

522-
/*
523-
* Check for constraint types which are not supported by
524-
* domains. Throws an error if it finds one.
525-
*/
526-
domainCheckForUnsupportedConstraints(newConstraint);
521+
/* Check for unsupported constraint types */
522+
if (IsA(newConstraint,FkConstraint))
523+
elog(ERROR,"CREATE DOMAIN / FOREIGN KEY constraints not supported");
524+
525+
/* this case should not happen */
526+
if (!IsA(newConstraint,Constraint))
527+
elog(ERROR,"DefineDomain: unexpected constraint node type");
527528

528-
/* Assume its a CHECK, DEFAULT, NULL or NOT NULL constraint */
529529
colDef= (Constraint*)newConstraint;
530+
530531
switch (colDef->contype)
531532
{
533+
caseCONSTR_DEFAULT:
532534
/*
533535
* The inherited default value may be overridden by the
534536
* user with the DEFAULT <expr> statement.
535-
*
536-
* We have to search the entire constraint tree returned as
537-
* we don't want to cook or fiddle too much.
538537
*/
539-
caseCONSTR_DEFAULT:
540538
if (defaultExpr)
541539
elog(ERROR,"CREATE DOMAIN has multiple DEFAULT expressions");
542540
/* Create a dummy ParseState for transformExpr */
@@ -563,9 +561,6 @@ DefineDomain(CreateDomainStmt *stmt)
563561
defaultValueBin=nodeToString(defaultExpr);
564562
break;
565563

566-
/*
567-
* Find the NULL constraint.
568-
*/
569564
caseCONSTR_NOTNULL:
570565
if (nullDefined)
571566
elog(ERROR,"CREATE DOMAIN has conflicting NULL / NOT NULL constraint");
@@ -580,19 +575,34 @@ DefineDomain(CreateDomainStmt *stmt)
580575
nullDefined= true;
581576
break;
582577

583-
/*
584-
* Check constraints are handled after domain creation, as they require
585-
* the Oid of the domain
586-
*/
587578
caseCONSTR_CHECK:
579+
/*
580+
* Check constraints are handled after domain creation, as they
581+
* require the Oid of the domain
582+
*/
583+
break;
584+
585+
/*
586+
* All else are error cases
587+
*/
588+
caseCONSTR_UNIQUE:
589+
elog(ERROR,"CREATE DOMAIN / UNIQUE not supported");
590+
break;
591+
592+
caseCONSTR_PRIMARY:
593+
elog(ERROR,"CREATE DOMAIN / PRIMARY KEY not supported");
594+
break;
595+
596+
caseCONSTR_ATTR_DEFERRABLE:
597+
caseCONSTR_ATTR_NOT_DEFERRABLE:
598+
caseCONSTR_ATTR_DEFERRED:
599+
caseCONSTR_ATTR_IMMEDIATE:
600+
elog(ERROR,"CREATE DOMAIN: DEFERRABLE, NON DEFERRABLE, DEFERRED"
601+
" and IMMEDIATE not supported");
588602
break;
589603

590-
/*
591-
* If we reach this, then domainCheckForUnsupportedConstraints()
592-
* doesn't have a complete list of unsupported domain constraints
593-
*/
594604
default:
595-
elog(ERROR,"DefineDomain: unrecognized constraintnode type");
605+
elog(ERROR,"DefineDomain: unrecognized constraintsubtype");
596606
break;
597607
}
598608
}
@@ -629,6 +639,8 @@ DefineDomain(CreateDomainStmt *stmt)
629639
{
630640
Constraint*constr=lfirst(listptr);
631641

642+
/* it must be a Constraint, per check above */
643+
632644
switch (constr->contype)
633645
{
634646
caseCONSTR_CHECK:
@@ -642,7 +654,8 @@ DefineDomain(CreateDomainStmt *stmt)
642654
}
643655
break;
644656

645-
/* Errors for other constraints are taken care of prior to domain creation */
657+
/* Other constraint types were fully processed above */
658+
646659
default:
647660
break;
648661
}
@@ -1262,21 +1275,21 @@ AlterDomainAddConstraint(List *names, Node *newConstraint)
12621275
elog(ERROR,"AlterDomain: type \"%s\" does not exist",
12631276
TypeNameToString(typename));
12641277

1278+
typTup= (Form_pg_type)GETSTRUCT(tup);
12651279

12661280
/* Doesn't return if user isn't allowed to alter the domain */
12671281
domainPermissionCheck(tup,typename);
12681282

1269-
typTup= (Form_pg_type)GETSTRUCT(tup);
1270-
1283+
/* Check for unsupported constraint types */
1284+
if (IsA(newConstraint,FkConstraint))
1285+
elog(ERROR,"ALTER DOMAIN / FOREIGN KEY constraints not supported");
12711286

1272-
/*
1273-
* Check for constraint types which are not supported by
1274-
* domains. Throws an error if it finds one.
1275-
*/
1276-
domainCheckForUnsupportedConstraints(newConstraint);
1287+
/* this case should not happen */
1288+
if (!IsA(newConstraint,Constraint))
1289+
elog(ERROR,"AlterDomainAddConstraint: unexpected constraint node type");
12771290

1278-
/* Assume its a CHECK, DEFAULT, NULL or NOT NULL constraint */
12791291
constr= (Constraint*)newConstraint;
1292+
12801293
switch (constr->contype)
12811294
{
12821295
caseCONSTR_DEFAULT:
@@ -1288,32 +1301,42 @@ AlterDomainAddConstraint(List *names, Node *newConstraint)
12881301
elog(ERROR,"Use ALTER DOMAIN .. [ SET | DROP ] NOT NULL instead");
12891302
break;
12901303

1291-
/*
1292-
* Check constraints are handled after domain creation, as they require
1293-
* the Oid of the domain
1294-
*/
12951304
caseCONSTR_CHECK:
1296-
{
1297-
/* Returns the cooked constraint which is not needed during creation */
1298-
ccbin=domainAddConstraint(HeapTupleGetOid(tup),typTup->typnamespace,
1299-
typTup->typbasetype,typTup->typtypmod,
1300-
constr,&counter,NameStr(typTup->typname));
1301-
}
1305+
/* processed below */
13021306
break;
13031307

1304-
/*
1305-
* If we reach this, then domainCheckForUnsupportedConstraints()
1306-
* doesn't have a complete list of unsupported domain constraints
1307-
*/
1308+
caseCONSTR_UNIQUE:
1309+
elog(ERROR,"ALTER DOMAIN / UNIQUE indexes not supported");
1310+
break;
1311+
1312+
caseCONSTR_PRIMARY:
1313+
elog(ERROR,"ALTER DOMAIN / PRIMARY KEY indexes not supported");
1314+
break;
1315+
1316+
caseCONSTR_ATTR_DEFERRABLE:
1317+
caseCONSTR_ATTR_NOT_DEFERRABLE:
1318+
caseCONSTR_ATTR_DEFERRED:
1319+
caseCONSTR_ATTR_IMMEDIATE:
1320+
elog(ERROR,"ALTER DOMAIN: DEFERRABLE, NON DEFERRABLE, DEFERRED"
1321+
" and IMMEDIATE not supported");
1322+
break;
1323+
13081324
default:
1309-
elog(ERROR,"DefineDomain: unrecognized constraint node type");
1325+
elog(ERROR,"AlterDomainAddConstraint: unrecognized constraint node type");
13101326
break;
13111327
}
13121328

13131329
/*
13141330
* Since all other constraint types throw errors, this must be
1315-
* a check constraint, and ccbin must be set.
1316-
*
1331+
* a check constraint.
1332+
*/
1333+
1334+
/* Returns the cooked constraint which is not needed during creation */
1335+
ccbin=domainAddConstraint(HeapTupleGetOid(tup),typTup->typnamespace,
1336+
typTup->typbasetype,typTup->typtypmod,
1337+
constr,&counter,NameStr(typTup->typname));
1338+
1339+
/*
13171340
* Test all values stored in the attributes based on the domain
13181341
* the constraint is being added to.
13191342
*/
@@ -1424,7 +1447,7 @@ get_rels_with_domain(Oid domainOid)
14241447
/* Scan through pg_class for tables */
14251448
while ((classTup=heap_getnext(classScan,ForwardScanDirection))!=NULL)
14261449
{
1427-
booladdToList= true;
1450+
relToCheck*rtc=NULL;
14281451
intnkeys=0;
14291452
HeapTupleattTup;
14301453
HeapScanDescattScan;
@@ -1447,13 +1470,9 @@ get_rels_with_domain(Oid domainOid)
14471470
/* Scan through pg_attribute for attributes based on the domain */
14481471
while ((attTup=heap_getnext(attScan,ForwardScanDirection))!=NULL)
14491472
{
1450-
relToCheck*rtc;
1451-
1452-
/* Make the list entries for the relation */
1453-
if (addToList)
1473+
if (rtc==NULL)
14541474
{
1455-
addToList= false;
1456-
1475+
/* First one found for this rel */
14571476
rtc= (relToCheck*)palloc(sizeof(relToCheck));
14581477
rtc->atts= (int*)palloc(sizeof(int)*pg_class->relnatts);
14591478
rtc->relOid=HeapTupleGetOid(classTup);
@@ -1625,42 +1644,3 @@ domainAddConstraint(Oid domainOid, Oid domainNamespace, Oid baseTypeOid,
16251644
*/
16261645
returnccbin;
16271646
}
1628-
1629-
/*
1630-
* domainCheckForUnsupportedConstraints
1631-
*
1632-
* Throws an error on constraints that are unsupported by the
1633-
* domains.
1634-
*/
1635-
void
1636-
domainCheckForUnsupportedConstraints(Node*newConstraint)
1637-
{
1638-
Constraint*colDef;
1639-
1640-
if (nodeTag(newConstraint)==T_FkConstraint)
1641-
elog(ERROR,"CREATE DOMAIN / FOREIGN KEY constraints not supported");
1642-
1643-
colDef= (Constraint*)newConstraint;
1644-
1645-
switch (colDef->contype)
1646-
{
1647-
caseCONSTR_UNIQUE:
1648-
elog(ERROR,"CREATE DOMAIN / UNIQUE indexes not supported");
1649-
break;
1650-
1651-
caseCONSTR_PRIMARY:
1652-
elog(ERROR,"CREATE DOMAIN / PRIMARY KEY indexes not supported");
1653-
break;
1654-
1655-
caseCONSTR_ATTR_DEFERRABLE:
1656-
caseCONSTR_ATTR_NOT_DEFERRABLE:
1657-
caseCONSTR_ATTR_DEFERRED:
1658-
caseCONSTR_ATTR_IMMEDIATE:
1659-
elog(ERROR,"DefineDomain: DEFERRABLE, NON DEFERRABLE, DEFERRED"
1660-
" and IMMEDIATE not supported");
1661-
break;
1662-
1663-
default:
1664-
break;
1665-
}
1666-
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp