Bruce Momjian wrote:

>> Agreed. Feel free to add whitespace before every /> of simple xml elements.
> 
> Uh, was this done?
> 
Nope. Attached is a patch that does it. I'm attaching another cosmetic
patch that replaces the use of some single quotes with double quotes in
the XML attributes output.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/
*** ./src/backend/utils/adt/xml.c.orig	2007-11-23 01:55:00.000000000 -0200
--- ./src/backend/utils/adt/xml.c	2007-11-23 02:01:24.000000000 -0200
***************
*** 2641,2658 ****
  		appendStringInfo(&result,
  						 "<xsd:complexType name=\"%s\">\n"
  						 "  <xsd:sequence>\n"
! 						 "    <xsd:element name=\"row\" type=\"%s\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
  						 "  </xsd:sequence>\n"
  						 "</xsd:complexType>\n\n",
  						 tabletypename, rowtypename);
  
  		appendStringInfo(&result,
! 						 "<xsd:element name=\"%s\" type=\"%s\"/>\n\n",
  						 xmltn, tabletypename);
  	}
  	else
  		appendStringInfo(&result,
! 						 "<xsd:element name=\"%s\" type=\"%s\"/>\n\n",
  						 xmltn, rowtypename);
  
  	xsd_schema_element_end(&result);
--- 2641,2658 ----
  		appendStringInfo(&result,
  						 "<xsd:complexType name=\"%s\">\n"
  						 "  <xsd:sequence>\n"
! 						 "    <xsd:element name=\"row\" type=\"%s\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
  						 "  </xsd:sequence>\n"
  						 "</xsd:complexType>\n\n",
  						 tabletypename, rowtypename);
  
  		appendStringInfo(&result,
! 						 "<xsd:element name=\"%s\" type=\"%s\" />\n\n",
  						 xmltn, tabletypename);
  	}
  	else
  		appendStringInfo(&result,
! 						 "<xsd:element name=\"%s\" type=\"%s\" />\n\n",
  						 xmltn, rowtypename);
  
  	xsd_schema_element_end(&result);
***************
*** 2709,2719 ****
  
  		if (!tableforest)
  			appendStringInfo(&result,
! 							 "    <xsd:element name=\"%s\" type=\"%s\"/>\n",
  							 xmltn, tabletypename);
  		else
  			appendStringInfo(&result,
! 							 "    <xsd:element name=\"%s\" type=\"%s\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n",
  							 xmltn, tabletypename);
  	}
  
--- 2709,2719 ----
  
  		if (!tableforest)
  			appendStringInfo(&result,
! 							 "    <xsd:element name=\"%s\" type=\"%s\" />\n",
  							 xmltn, tabletypename);
  		else
  			appendStringInfo(&result,
! 							 "    <xsd:element name=\"%s\" type=\"%s\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n",
  							 xmltn, tabletypename);
  	}
  
***************
*** 2727,2733 ****
  						   "</xsd:complexType>\n\n");
  
  	appendStringInfo(&result,
! 					 "<xsd:element name=\"%s\" type=\"%s\"/>\n\n",
  					 xmlsn, schematypename);
  
  	return result.data;
--- 2727,2733 ----
  						   "</xsd:complexType>\n\n");
  
  	appendStringInfo(&result,
! 					 "<xsd:element name=\"%s\" type=\"%s\" />\n\n",
  					 xmlsn, schematypename);
  
  	return result.data;
***************
*** 2775,2781 ****
  																	   NULL);
  
  		appendStringInfo(&result,
! 						 "    <xsd:element name=\"%s\" type=\"%s\"/>\n",
  						 xmlsn, schematypename);
  	}
  
--- 2775,2781 ----
  																	   NULL);
  
  		appendStringInfo(&result,
! 						 "    <xsd:element name=\"%s\" type=\"%s\" />\n",
  						 xmlsn, schematypename);
  	}
  
***************
*** 2785,2791 ****
  						   "</xsd:complexType>\n\n");
  
  	appendStringInfo(&result,
! 					 "<xsd:element name=\"%s\" type=\"%s\"/>\n\n",
  					 xmlcn, catalogtypename);
  
  	return result.data;
--- 2785,2791 ----
  						   "</xsd:complexType>\n\n");
  
  	appendStringInfo(&result,
! 					 "<xsd:element name=\"%s\" type=\"%s\" />\n\n",
  					 xmlcn, catalogtypename);
  
  	return result.data;
***************
*** 2969,2975 ****
  		appendStringInfo(&result,
  						 "<xsd:complexType mixed=\"true\">\n"
  						 "  <xsd:sequence>\n"
! 						 "    <xsd:any name=\"element\" minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\"/>\n"
  						 "  </xsd:sequence>\n"
  						 "</xsd:complexType>\n");
  	}
--- 2969,2975 ----
  		appendStringInfo(&result,
  						 "<xsd:complexType mixed=\"true\">\n"
  						 "  <xsd:sequence>\n"
! 						 "    <xsd:any name=\"element\" minOccurs=\"0\" maxOccurs=\"unbounded\" processContents=\"skip\" />\n"
  						 "  </xsd:sequence>\n"
  						 "</xsd:complexType>\n");
  	}
***************
*** 2986,2992 ****
  				if (typmod != -1)
  					appendStringInfo(&result,
  								  "  <xsd:restriction base=\"xsd:string\">\n"
! 									 "    <xsd:maxLength value=\"%d\"/>\n"
  									 "  </xsd:restriction>\n",
  									 typmod - VARHDRSZ);
  				break;
--- 2986,2992 ----
  				if (typmod != -1)
  					appendStringInfo(&result,
  								  "  <xsd:restriction base=\"xsd:string\">\n"
! 									 "    <xsd:maxLength value=\"%d\" />\n"
  									 "  </xsd:restriction>\n",
  									 typmod - VARHDRSZ);
  				break;
***************
*** 3001,3008 ****
  				if (typmod != -1)
  					appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:decimal\">\n"
! 									 "    <xsd:totalDigits value=\"%d\"/>\n"
! 								   "    <xsd:fractionDigits value=\"%d\"/>\n"
  									 "  </xsd:restriction>\n",
  									 ((typmod - VARHDRSZ) >> 16) & 0xffff,
  									 (typmod - VARHDRSZ) & 0xffff);
--- 3001,3008 ----
  				if (typmod != -1)
  					appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:decimal\">\n"
! 									 "    <xsd:totalDigits value=\"%d\" />\n"
! 								   "    <xsd:fractionDigits value=\"%d\" />\n"
  									 "  </xsd:restriction>\n",
  									 ((typmod - VARHDRSZ) >> 16) & 0xffff,
  									 (typmod - VARHDRSZ) & 0xffff);
***************
*** 3011,3018 ****
  			case INT2OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:short\">\n"
! 								 "    <xsd:maxInclusive value=\"%d\"/>\n"
! 								 "    <xsd:minInclusive value=\"%d\"/>\n"
  								 "  </xsd:restriction>\n",
  								 SHRT_MAX, SHRT_MIN);
  				break;
--- 3011,3018 ----
  			case INT2OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:short\">\n"
! 								 "    <xsd:maxInclusive value=\"%d\" />\n"
! 								 "    <xsd:minInclusive value=\"%d\" />\n"
  								 "  </xsd:restriction>\n",
  								 SHRT_MAX, SHRT_MIN);
  				break;
***************
*** 3020,3027 ****
  			case INT4OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base='xsd:int'>\n"
! 								 "    <xsd:maxInclusive value=\"%d\"/>\n"
! 								 "    <xsd:minInclusive value=\"%d\"/>\n"
  								 "  </xsd:restriction>\n",
  								 INT_MAX, INT_MIN);
  				break;
--- 3020,3027 ----
  			case INT4OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base='xsd:int'>\n"
! 								 "    <xsd:maxInclusive value=\"%d\" />\n"
! 								 "    <xsd:minInclusive value=\"%d\" />\n"
  								 "  </xsd:restriction>\n",
  								 INT_MAX, INT_MIN);
  				break;
***************
*** 3029,3036 ****
  			case INT8OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:long\">\n"
! 					   "    <xsd:maxInclusive value=\"" INT64_FORMAT "\"/>\n"
! 					   "    <xsd:minInclusive value=\"" INT64_FORMAT "\"/>\n"
  								 "  </xsd:restriction>\n",
  							   (((uint64) 1) << (sizeof(int64) * 8 - 1)) - 1,
  								 (((uint64) 1) << (sizeof(int64) * 8 - 1)));
--- 3029,3036 ----
  			case INT8OID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:long\">\n"
! 					   "    <xsd:maxInclusive value=\"" INT64_FORMAT "\" />\n"
! 					   "    <xsd:minInclusive value=\"" INT64_FORMAT "\" />\n"
  								 "  </xsd:restriction>\n",
  							   (((uint64) 1) << (sizeof(int64) * 8 - 1)) - 1,
  								 (((uint64) 1) << (sizeof(int64) * 8 - 1)));
***************
*** 3059,3075 ****
  					if (typmod == -1)
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}(.\\p{Nd}+)?%s\"/>\n"
  										 "  </xsd:restriction>\n", tz);
  					else if (typmod == 0)
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}%s\"/>\n"
  										 "  </xsd:restriction>\n", tz);
  					else
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}.\\p{Nd}{%d}%s\"/>\n"
  							"  </xsd:restriction>\n", typmod - VARHDRSZ, tz);
  					break;
  				}
--- 3059,3075 ----
  					if (typmod == -1)
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}(.\\p{Nd}+)?%s\" />\n"
  										 "  </xsd:restriction>\n", tz);
  					else if (typmod == 0)
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}%s\" />\n"
  										 "  </xsd:restriction>\n", tz);
  					else
  						appendStringInfo(&result,
  									"  <xsd:restriction base=\"xsd:time\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}.\\p{Nd}{%d}%s\" />\n"
  							"  </xsd:restriction>\n", typmod - VARHDRSZ, tz);
  					break;
  				}
***************
*** 3082,3098 ****
  					if (typmod == -1)
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}(.\\p{Nd}+)?%s\"/>\n"
  										 "  </xsd:restriction>\n", tz);
  					else if (typmod == 0)
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}%s\"/>\n"
  										 "  </xsd:restriction>\n", tz);
  					else
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}.\\p{Nd}{%d}%s\"/>\n"
  							"  </xsd:restriction>\n", typmod - VARHDRSZ, tz);
  					break;
  				}
--- 3082,3098 ----
  					if (typmod == -1)
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}(.\\p{Nd}+)?%s\" />\n"
  										 "  </xsd:restriction>\n", tz);
  					else if (typmod == 0)
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}%s\" />\n"
  										 "  </xsd:restriction>\n", tz);
  					else
  						appendStringInfo(&result,
  								"  <xsd:restriction base=\"xsd:dateTime\">\n"
! 										 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}T\\p{Nd}{2}:\\p{Nd}{2}:\\p{Nd}{2}.\\p{Nd}{%d}%s\" />\n"
  							"  </xsd:restriction>\n", typmod - VARHDRSZ, tz);
  					break;
  				}
***************
*** 3100,3106 ****
  			case DATEOID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:date\">\n"
! 								 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}\"/>\n"
  								 "  </xsd:restriction>\n");
  				break;
  
--- 3100,3106 ----
  			case DATEOID:
  				appendStringInfo(&result,
  								 "  <xsd:restriction base=\"xsd:date\">\n"
! 								 "    <xsd:pattern value=\"\\p{Nd}{4}-\\p{Nd}{2}-\\p{Nd}{2}\" />\n"
  								 "  </xsd:restriction>\n");
  				break;
  
***************
*** 3113,3119 ****
  					base_typeoid = getBaseTypeAndTypmod(typeoid, &base_typmod);
  
  					appendStringInfo(&result,
! 									 "  <xsd:restriction base=\"%s\"/>\n",
  						map_sql_type_to_xml_name(base_typeoid, base_typmod));
  				}
  				break;
--- 3113,3119 ----
  					base_typeoid = getBaseTypeAndTypmod(typeoid, &base_typmod);
  
  					appendStringInfo(&result,
! 									 "  <xsd:restriction base=\"%s\" />\n",
  						map_sql_type_to_xml_name(base_typeoid, base_typmod));
  				}
  				break;
***************
*** 3168,3174 ****
  		if (isnull)
  		{
  			if (nulls)
! 				appendStringInfo(result, "  <%s xsi:nil='true'/>\n", colname);
  		}
  		else
  			appendStringInfo(result, "  <%s>%s</%s>\n",
--- 3168,3174 ----
  		if (isnull)
  		{
  			if (nulls)
! 				appendStringInfo(result, "  <%s xsi:nil='true' />\n", colname);
  		}
  		else
  			appendStringInfo(result, "  <%s>%s</%s>\n",
*** ./src/backend/utils/adt/xml.c.orig	2007-11-23 02:17:55.000000000 -0200
--- ./src/backend/utils/adt/xml.c	2007-11-23 02:21:31.000000000 -0200
***************
*** 3019,3025 ****
  
  			case INT4OID:
  				appendStringInfo(&result,
! 								 "  <xsd:restriction base='xsd:int'>\n"
  								 "    <xsd:maxInclusive value=\"%d\" />\n"
  								 "    <xsd:minInclusive value=\"%d\" />\n"
  								 "  </xsd:restriction>\n",
--- 3019,3025 ----
  
  			case INT4OID:
  				appendStringInfo(&result,
! 								 "  <xsd:restriction base=\"xsd:int\">\n"
  								 "    <xsd:maxInclusive value=\"%d\" />\n"
  								 "    <xsd:minInclusive value=\"%d\" />\n"
  								 "  </xsd:restriction>\n",
***************
*** 3168,3174 ****
  		if (isnull)
  		{
  			if (nulls)
! 				appendStringInfo(result, "  <%s xsi:nil='true' />\n", colname);
  		}
  		else
  			appendStringInfo(result, "  <%s>%s</%s>\n",
--- 3168,3174 ----
  		if (isnull)
  		{
  			if (nulls)
! 				appendStringInfo(result, "  <%s xsi:nil=\"true\" />\n", colname);
  		}
  		else
  			appendStringInfo(result, "  <%s>%s</%s>\n",
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to