mirror of https://github.com/citusdata/citus.git
optimize list_reverse for pg < 13 since we might backport the fix to older versions
parent
9f27c202e8
commit
af529d3b55
|
@ -17,10 +17,10 @@
|
||||||
#include "lib/stringinfo.h"
|
#include "lib/stringinfo.h"
|
||||||
#include "distributed/citus_safe_lib.h"
|
#include "distributed/citus_safe_lib.h"
|
||||||
#include "distributed/listutils.h"
|
#include "distributed/listutils.h"
|
||||||
|
#include "distributed/pg_version_constants.h"
|
||||||
#include "nodes/pg_list.h"
|
#include "nodes/pg_list.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SortList takes in a list of void pointers, and sorts these pointers (and the
|
* SortList takes in a list of void pointers, and sorts these pointers (and the
|
||||||
* values they point to) by applying the given comparison function. The function
|
* values they point to) by applying the given comparison function. The function
|
||||||
|
@ -273,6 +273,7 @@ GenerateListFromElement(void *listElement, int listLength)
|
||||||
List *
|
List *
|
||||||
list_reverse(const List *list)
|
list_reverse(const List *list)
|
||||||
{
|
{
|
||||||
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
List *newList = NIL;
|
List *newList = NIL;
|
||||||
for (int i = list_length(list) - 1; i >= 0; i--)
|
for (int i = list_length(list) - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
|
@ -280,4 +281,29 @@ list_reverse(const List *list)
|
||||||
}
|
}
|
||||||
|
|
||||||
return newList;
|
return newList;
|
||||||
|
#else
|
||||||
|
int nelements = list_length(list);
|
||||||
|
if (nelements == 0)
|
||||||
|
{
|
||||||
|
return NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void **listElements = palloc0(sizeof(void *) * nelements);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
void *listElement = NULL;
|
||||||
|
foreach_ptr(listElement, list)
|
||||||
|
{
|
||||||
|
listElements[i++] = listElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
List *newList = NIL;
|
||||||
|
|
||||||
|
for (i = nelements - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
newList = lappend(newList, listElements[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newList;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue