23#include "utils/fmgrprotos.h"
30#define DEFAULT_CONTAIN_SEL 0.005
33#define DEFAULT_OVERLAP_SEL 0.01
36#define DEFAULT_SEL(operator) \
37 ((operator) == OID_ARRAY_OVERLAP_OP ? \
38 DEFAULT_OVERLAP_SEL : DEFAULT_CONTAIN_SEL)
41 Oid elemtype,
Oid operator);
45 const float4 *numbers,
int nnumbers,
49 const float4 *numbers,
int nnumbers,
53 const float4 *numbers,
int nnumbers,
203 selec *= (1.0 - stats->stanullfrac);
338 Oid elemtype,
Oid operator)
402 selec *= (1.0 - stats->stanullfrac);
430 const float4 *numbers,
int nnumbers,
451 &elem_values, &elem_nulls, &num_elems);
456 for (
i = 0;
i < num_elems;
i++)
493 elog(
ERROR,
"arraycontsel called for unrecognized operator %u",
522 const float4 *numbers,
int nnumbers,
618 if (match && numbers)
703 const float4 *numbers,
int nnumbers,
948 for (k = 0; k <= n; k++)
1036 for (
i = 1;
i <= n;
i++)
1046 for (
j = 0;
j <=
i &&
j <= m;
j++)
1072 for (
i = 0;
i <= m;
i++)
1082 for (
i = 0;
i <= m;
i++)
1084 for (
j = 0;
j <= m -
i;
j++)
1192 float d1 = *((
const float *)
key1);
1193 float d2 = *((
const float *)
key2);
#define DatumGetArrayTypeP(X)
Selectivity scalararraysel_containment(PlannerInfo *root, Node *leftop, Node *rightop, Oid elemtype, bool isEquality, bool useOr, int varRelid)
static int float_compare_desc(const void *key1, const void *key2)
#define DEFAULT_CONTAIN_SEL
static Selectivity calc_arraycontsel(VariableStatData *vardata, Datum constval, Oid elemtype, Oid operator)
static int floor_log2(uint32 n)
static float * calc_hist(const float4 *hist, int nhist, int n)
static Selectivity mcelem_array_contained_selec(const Datum *mcelem, int nmcelem, const float4 *numbers, int nnumbers, const Datum *array_data, int nitems, const float4 *hist, int nhist, Oid operator, TypeCacheEntry *typentry)
static int element_compare(const void *key1, const void *key2, void *arg)
static Selectivity mcelem_array_contain_overlap_selec(const Datum *mcelem, int nmcelem, const float4 *numbers, int nnumbers, const Datum *array_data, int nitems, Oid operator, TypeCacheEntry *typentry)
static bool find_next_mcelem(const Datum *mcelem, int nmcelem, Datum value, int *index, TypeCacheEntry *typentry)
static float * calc_distr(const float *p, int n, int m, float rest)
Datum arraycontsel(PG_FUNCTION_ARGS)
Datum arraycontjoinsel(PG_FUNCTION_ARGS)
#define DEFAULT_SEL(operator)
static Selectivity mcelem_array_selec(const ArrayType *array, TypeCacheEntry *typentry, const Datum *mcelem, int nmcelem, const float4 *numbers, int nnumbers, const float4 *hist, int nhist, Oid operator)
void deconstruct_array(const ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)
#define OidIsValid(objectId)
#define palloc_array(type, count)
Datum FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2)
#define PG_RETURN_FLOAT8(x)
#define PG_GETARG_POINTER(n)
#define PG_GETARG_INT32(n)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
void free_attstatsslot(AttStatsSlot *sslot)
Oid get_base_element_type(Oid typid)
bool get_attstatsslot(AttStatsSlot *sslot, HeapTuple statstuple, int reqkind, Oid reqop, int flags)
#define ATTSTATSSLOT_NUMBERS
#define ATTSTATSSLOT_VALUES
void pfree(void *pointer)
#define IsA(nodeptr, _type_)
FormData_pg_statistic * Form_pg_statistic
void qsort_arg(void *base, size_t nel, size_t elsize, qsort_arg_comparator cmp, void *arg)
#define qsort(a, b, c, d)
static Datum PointerGetDatum(const void *X)
static int32 DatumGetInt32(Datum X)
static int cmp(const chr *x, const chr *y, size_t len)
bool get_restriction_variable(PlannerInfo *root, List *args, int varRelid, VariableStatData *vardata, Node **other, bool *varonleft)
void examine_variable(PlannerInfo *root, Node *node, int varRelid, VariableStatData *vardata)
bool statistic_proc_security_check(VariableStatData *vardata, Oid func_oid)
#define ReleaseVariableStats(vardata)
#define CLAMP_PROBABILITY(p)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
#define TYPECACHE_CMP_PROC_FINFO