@ -1275,7 +1275,6 @@ array_position_common(FunctionCallInfo fcinfo)
PG_RETURN_NULL ( ) ;
array = PG_GETARG_ARRAYTYPE_P ( 0 ) ;
element_type = ARR_ELEMTYPE ( array ) ;
/*
* We refuse to search for elements in multi - dimensional arrays , since we
@ -1286,6 +1285,10 @@ array_position_common(FunctionCallInfo fcinfo)
( errcode ( ERRCODE_FEATURE_NOT_SUPPORTED ) ,
errmsg ( " searching for elements in multidimensional arrays is not supported " ) ) ) ;
/* Searching in an empty array is well-defined, though: it always fails */
if ( ARR_NDIM ( array ) < 1 )
PG_RETURN_NULL ( ) ;
if ( PG_ARGISNULL ( 1 ) )
{
/* fast return when the array doesn't have nulls */
@ -1300,6 +1303,7 @@ array_position_common(FunctionCallInfo fcinfo)
null_search = false ;
}
element_type = ARR_ELEMTYPE ( array ) ;
position = ( ARR_LBOUND ( array ) ) [ 0 ] - 1 ;
/* figure out where to start */
@ -1425,9 +1429,6 @@ array_positions(PG_FUNCTION_ARGS)
PG_RETURN_NULL ( ) ;
array = PG_GETARG_ARRAYTYPE_P ( 0 ) ;
element_type = ARR_ELEMTYPE ( array ) ;
position = ( ARR_LBOUND ( array ) ) [ 0 ] - 1 ;
/*
* We refuse to search for elements in multi - dimensional arrays , since we
@ -1440,6 +1441,10 @@ array_positions(PG_FUNCTION_ARGS)
astate = initArrayResult ( INT4OID , CurrentMemoryContext , false ) ;
/* Searching in an empty array is well-defined, though: it always fails */
if ( ARR_NDIM ( array ) < 1 )
PG_RETURN_DATUM ( makeArrayResult ( astate , CurrentMemoryContext ) ) ;
if ( PG_ARGISNULL ( 1 ) )
{
/* fast return when the array doesn't have nulls */
@ -1454,6 +1459,9 @@ array_positions(PG_FUNCTION_ARGS)
null_search = false ;
}
element_type = ARR_ELEMTYPE ( array ) ;
position = ( ARR_LBOUND ( array ) ) [ 0 ] - 1 ;
/*
* We arrange to look up type info for array_create_iterator only once per
* series of calls , assuming the element type doesn ' t change underneath