⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pg_dump_sort.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
📖 第 1 页 / 共 3 页
字号:
	/* mark attrdef as needing its own dump */	((AttrDefInfo *) attrdefobj)->separate = true;	/* put back attrdef's dependency on table */	addObjectDependency(attrdefobj, tableobj->dumpId);}/* * CHECK constraints on domains work just like those on tables ... */static voidrepairDomainConstraintLoop(DumpableObject *domainobj,						   DumpableObject *constraintobj){	/* remove constraint's dependency on domain */	removeObjectDependency(constraintobj, domainobj->dumpId);}static voidrepairDomainConstraintMultiLoop(DumpableObject *domainobj,								DumpableObject *constraintobj){	/* remove domain's dependency on constraint */	removeObjectDependency(domainobj, constraintobj->dumpId);	/* mark constraint as needing its own dump */	((ConstraintInfo *) constraintobj)->separate = true;	/* put back constraint's dependency on domain */	addObjectDependency(constraintobj, domainobj->dumpId);}/* * Fix a dependency loop, or die trying ... * * This routine is mainly concerned with reducing the multiple ways that * a loop might appear to common cases, which it passes off to the * "fixer" routines above. */static voidrepairDependencyLoop(DumpableObject **loop,					 int nLoop){	int			i,				j;	/* Datatype and one of its I/O functions */	if (nLoop == 2 &&		loop[0]->objType == DO_TYPE &&		loop[1]->objType == DO_FUNC)	{		repairTypeFuncLoop(loop[0], loop[1]);		return;	}	if (nLoop == 2 &&		loop[1]->objType == DO_TYPE &&		loop[0]->objType == DO_FUNC)	{		repairTypeFuncLoop(loop[1], loop[0]);		return;	}	/* View and its ON SELECT rule */	if (nLoop == 2 &&		loop[0]->objType == DO_TABLE &&		loop[1]->objType == DO_RULE &&		((RuleInfo *) loop[1])->ev_type == '1' &&		((RuleInfo *) loop[1])->is_instead &&		((RuleInfo *) loop[1])->ruletable == (TableInfo *) loop[0])	{		repairViewRuleLoop(loop[0], loop[1]);		return;	}	if (nLoop == 2 &&		loop[1]->objType == DO_TABLE &&		loop[0]->objType == DO_RULE &&		((RuleInfo *) loop[0])->ev_type == '1' &&		((RuleInfo *) loop[0])->is_instead &&		((RuleInfo *) loop[0])->ruletable == (TableInfo *) loop[1])	{		repairViewRuleLoop(loop[1], loop[0]);		return;	}	/* Indirect loop involving view and ON SELECT rule */	if (nLoop > 2)	{		for (i = 0; i < nLoop; i++)		{			if (loop[i]->objType == DO_TABLE)			{				for (j = 0; j < nLoop; j++)				{					if (loop[j]->objType == DO_RULE &&						((RuleInfo *) loop[j])->ev_type == '1' &&						((RuleInfo *) loop[j])->is_instead &&						((RuleInfo *) loop[j])->ruletable == (TableInfo *) loop[i])					{						repairViewRuleMultiLoop(loop[i], loop[j]);						return;					}				}			}		}	}	/* Table and CHECK constraint */	if (nLoop == 2 &&		loop[0]->objType == DO_TABLE &&		loop[1]->objType == DO_CONSTRAINT &&		((ConstraintInfo *) loop[1])->contype == 'c' &&		((ConstraintInfo *) loop[1])->contable == (TableInfo *) loop[0])	{		repairTableConstraintLoop(loop[0], loop[1]);		return;	}	if (nLoop == 2 &&		loop[1]->objType == DO_TABLE &&		loop[0]->objType == DO_CONSTRAINT &&		((ConstraintInfo *) loop[0])->contype == 'c' &&		((ConstraintInfo *) loop[0])->contable == (TableInfo *) loop[1])	{		repairTableConstraintLoop(loop[1], loop[0]);		return;	}	/* Indirect loop involving table and CHECK constraint */	if (nLoop > 2)	{		for (i = 0; i < nLoop; i++)		{			if (loop[i]->objType == DO_TABLE)			{				for (j = 0; j < nLoop; j++)				{					if (loop[j]->objType == DO_CONSTRAINT &&						((ConstraintInfo *) loop[j])->contype == 'c' &&						((ConstraintInfo *) loop[j])->contable == (TableInfo *) loop[i])					{						repairTableConstraintMultiLoop(loop[i], loop[j]);						return;					}				}			}		}	}	/* Table and attribute default */	if (nLoop == 2 &&		loop[0]->objType == DO_TABLE &&		loop[1]->objType == DO_ATTRDEF &&		((AttrDefInfo *) loop[1])->adtable == (TableInfo *) loop[0])	{		repairTableAttrDefLoop(loop[0], loop[1]);		return;	}	if (nLoop == 2 &&		loop[1]->objType == DO_TABLE &&		loop[0]->objType == DO_ATTRDEF &&		((AttrDefInfo *) loop[0])->adtable == (TableInfo *) loop[1])	{		repairTableAttrDefLoop(loop[1], loop[0]);		return;	}	/* Indirect loop involving table and attribute default */	if (nLoop > 2)	{		for (i = 0; i < nLoop; i++)		{			if (loop[i]->objType == DO_TABLE)			{				for (j = 0; j < nLoop; j++)				{					if (loop[j]->objType == DO_ATTRDEF &&						((AttrDefInfo *) loop[j])->adtable == (TableInfo *) loop[i])					{						repairTableAttrDefMultiLoop(loop[i], loop[j]);						return;					}				}			}		}	}	/* Domain and CHECK constraint */	if (nLoop == 2 &&		loop[0]->objType == DO_TYPE &&		loop[1]->objType == DO_CONSTRAINT &&		((ConstraintInfo *) loop[1])->contype == 'c' &&		((ConstraintInfo *) loop[1])->condomain == (TypeInfo *) loop[0])	{		repairDomainConstraintLoop(loop[0], loop[1]);		return;	}	if (nLoop == 2 &&		loop[1]->objType == DO_TYPE &&		loop[0]->objType == DO_CONSTRAINT &&		((ConstraintInfo *) loop[0])->contype == 'c' &&		((ConstraintInfo *) loop[0])->condomain == (TypeInfo *) loop[1])	{		repairDomainConstraintLoop(loop[1], loop[0]);		return;	}	/* Indirect loop involving domain and CHECK constraint */	if (nLoop > 2)	{		for (i = 0; i < nLoop; i++)		{			if (loop[i]->objType == DO_TYPE)			{				for (j = 0; j < nLoop; j++)				{					if (loop[j]->objType == DO_CONSTRAINT &&						((ConstraintInfo *) loop[j])->contype == 'c' &&						((ConstraintInfo *) loop[j])->condomain == (TypeInfo *) loop[i])					{						repairDomainConstraintMultiLoop(loop[i], loop[j]);						return;					}				}			}		}	}	/*	 * If we can't find a principled way to break the loop, complain and break	 * it in an arbitrary fashion.	 */	write_msg(modulename, "WARNING: could not resolve dependency loop among these items:\n");	for (i = 0; i < nLoop; i++)	{		char		buf[1024];		describeDumpableObject(loop[i], buf, sizeof(buf));		write_msg(modulename, "  %s\n", buf);	}	removeObjectDependency(loop[0], loop[1]->dumpId);}/* * Describe a dumpable object usefully for errors * * This should probably go somewhere else... */static voiddescribeDumpableObject(DumpableObject *obj, char *buf, int bufsize){	switch (obj->objType)	{		case DO_NAMESPACE:			snprintf(buf, bufsize,					 "SCHEMA %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_TYPE:			snprintf(buf, bufsize,					 "TYPE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_FUNC:			snprintf(buf, bufsize,					 "FUNCTION %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_AGG:			snprintf(buf, bufsize,					 "AGGREGATE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_OPERATOR:			snprintf(buf, bufsize,					 "OPERATOR %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_OPCLASS:			snprintf(buf, bufsize,					 "OPERATOR CLASS %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_CONVERSION:			snprintf(buf, bufsize,					 "CONVERSION %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_TABLE:			snprintf(buf, bufsize,					 "TABLE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_ATTRDEF:			snprintf(buf, bufsize,					 "ATTRDEF %s.%s  (ID %d OID %u)",					 ((AttrDefInfo *) obj)->adtable->dobj.name,					 ((AttrDefInfo *) obj)->adtable->attnames[((AttrDefInfo *) obj)->adnum - 1],					 obj->dumpId, obj->catId.oid);			return;		case DO_INDEX:			snprintf(buf, bufsize,					 "INDEX %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_RULE:			snprintf(buf, bufsize,					 "RULE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_TRIGGER:			snprintf(buf, bufsize,					 "TRIGGER %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_CONSTRAINT:			snprintf(buf, bufsize,					 "CONSTRAINT %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_FK_CONSTRAINT:			snprintf(buf, bufsize,					 "FK CONSTRAINT %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_PROCLANG:			snprintf(buf, bufsize,					 "PROCEDURAL LANGUAGE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_CAST:			snprintf(buf, bufsize,					 "CAST %u to %u  (ID %d OID %u)",					 ((CastInfo *) obj)->castsource,					 ((CastInfo *) obj)->casttarget,					 obj->dumpId, obj->catId.oid);			return;		case DO_TABLE_DATA:			snprintf(buf, bufsize,					 "TABLE DATA %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_TABLE_TYPE:			snprintf(buf, bufsize,					 "TABLE TYPE %s  (ID %d OID %u)",					 obj->name, obj->dumpId, obj->catId.oid);			return;		case DO_BLOBS:			snprintf(buf, bufsize,					 "BLOBS  (ID %d)",					 obj->dumpId);			return;		case DO_BLOB_COMMENTS:			snprintf(buf, bufsize,					 "BLOB COMMENTS  (ID %d)",					 obj->dumpId);			return;	}	/* shouldn't get here */	snprintf(buf, bufsize,			 "object type %d  (ID %d OID %u)",			 (int) obj->objType,			 obj->dumpId, obj->catId.oid);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -