mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	arrays: tighten checks for multi-dimensional input
Previously an input array string that started with a single-element array dimension would then later accept a multi-dimensional segment. BACKWARD INCOMPATIBILITY
This commit is contained in:
		@@ -425,8 +425,8 @@ ArrayCount(const char *str, int *dim, char typdelim)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (i = 0; i < MAXDIM; ++i)
 | 
						for (i = 0; i < MAXDIM; ++i)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		temp[i] = dim[i] = 0;
 | 
							temp[i] = dim[i] = nelems_last[i] = 0;
 | 
				
			||||||
		nelems_last[i] = nelems[i] = 1;
 | 
							nelems[i] = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ptr = str;
 | 
						ptr = str;
 | 
				
			||||||
@@ -540,8 +540,8 @@ ArrayCount(const char *str, int *dim, char typdelim)
 | 
				
			|||||||
							errmsg("malformed array literal: \"%s\"", str)));
 | 
												errmsg("malformed array literal: \"%s\"", str)));
 | 
				
			||||||
						nest_level--;
 | 
											nest_level--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						if ((nelems_last[nest_level] != 1) &&
 | 
											if (nelems_last[nest_level] != 0 &&
 | 
				
			||||||
							(nelems[nest_level] != nelems_last[nest_level]))
 | 
												nelems[nest_level] != nelems_last[nest_level])
 | 
				
			||||||
							ereport(ERROR,
 | 
												ereport(ERROR,
 | 
				
			||||||
							   (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
 | 
												   (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
 | 
				
			||||||
								errmsg("multidimensional arrays must have "
 | 
													errmsg("multidimensional arrays must have "
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1491,7 +1491,7 @@ select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
 | 
				
			|||||||
           6
 | 
					           6
 | 
				
			||||||
(1 row)
 | 
					(1 row)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
 | 
					select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
 | 
				
			||||||
 cardinality 
 | 
					 cardinality 
 | 
				
			||||||
-------------
 | 
					-------------
 | 
				
			||||||
           8
 | 
					           8
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -425,7 +425,7 @@ select cardinality(array[1,2,3]);
 | 
				
			|||||||
select cardinality('[2:4]={5,6,7}'::int[]);
 | 
					select cardinality('[2:4]={5,6,7}'::int[]);
 | 
				
			||||||
select cardinality('{{1,2}}'::int[]);
 | 
					select cardinality('{{1,2}}'::int[]);
 | 
				
			||||||
select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
 | 
					select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
 | 
				
			||||||
select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
 | 
					select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
select array_agg(unique1) from (select unique1 from tenk1 where unique1 < 15 order by unique1) ss;
 | 
					select array_agg(unique1) from (select unique1 from tenk1 where unique1 < 15 order by unique1) ss;
 | 
				
			||||||
select array_agg(ten) from (select ten from tenk1 where unique1 < 15 order by unique1) ss;
 | 
					select array_agg(ten) from (select ten from tenk1 where unique1 < 15 order by unique1) ss;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user