codekingpro/portable-devtools
116k
1/*-------------------------------------------------------------------------2 *3 * sampling.h4 * definitions for sampling functions5 *6 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group7 * Portions Copyright (c) 1994, Regents of the University of California8 *9 * src/include/utils/sampling.h10 *11 *-------------------------------------------------------------------------12 */13#ifndef SAMPLING_H14#define SAMPLING_H15 16#include "common/pg_prng.h"17#include "storage/block.h" /* for typedef BlockNumber */18 19 20/* Random generator for sampling code */21extern void sampler_random_init_state(uint32 seed,22 pg_prng_state *randstate);23extern double sampler_random_fract(pg_prng_state *randstate);24 25/* Block sampling methods */26 27/* Data structure for Algorithm S from Knuth 3.4.2 */28typedef struct29{30 BlockNumber N; /* number of blocks, known in advance */31 int n; /* desired sample size */32 BlockNumber t; /* current block number */33 int m; /* blocks selected so far */34 pg_prng_state randstate; /* random generator state */35} BlockSamplerData;36 37typedef BlockSamplerData *BlockSampler;38 39extern BlockNumber BlockSampler_Init(BlockSampler bs, BlockNumber nblocks,40 int samplesize, uint32 randseed);41extern bool BlockSampler_HasMore(BlockSampler bs);42extern BlockNumber BlockSampler_Next(BlockSampler bs);43 44/* Reservoir sampling methods */45 46typedef struct47{48 double W;49 pg_prng_state randstate; /* random generator state */50} ReservoirStateData;51 52typedef ReservoirStateData *ReservoirState;53 54extern void reservoir_init_selection_state(ReservoirState rs, int n);55extern double reservoir_get_next_S(ReservoirState rs, double t, int n);56 57/* Old API, still in use by assorted FDWs */58/* For backwards compatibility, these declarations are duplicated in vacuum.h */59 60extern double anl_random_fract(void);61extern double anl_init_selection_state(int n);62extern double anl_get_next_S(double t, int n, double *stateptr);63 64#endif /* SAMPLING_H */65 