]> granicus.if.org Git - postgresql/blobdiff - src/include/utils/sampling.h
TABLESAMPLE, SQL Standard and extensible
[postgresql] / src / include / utils / sampling.h
index e3e7f9cf6ae8f3912d450c0e6a7724cdc31e62a7..4ac208dc3645ae18586d28b34a90254a10990263 100644 (file)
 
 #include "storage/bufmgr.h"
 
-extern double sampler_random_fract(void);
+/* Random generator for sampling code */
+typedef unsigned short SamplerRandomState[3];
+
+extern void sampler_random_init_state(long seed,
+                                                                         SamplerRandomState randstate);
+extern double sampler_random_fract(SamplerRandomState randstate);
 
 /* Block sampling methods */
 /* Data structure for Algorithm S from Knuth 3.4.2 */
@@ -25,6 +30,7 @@ typedef struct
        int                     n;                              /* desired sample size */
        BlockNumber t;                          /* current block number */
        int                     m;                              /* blocks selected so far */
+       SamplerRandomState randstate; /* random generator state */
 } BlockSamplerData;
 
 typedef BlockSamplerData *BlockSampler;
@@ -35,7 +41,12 @@ extern bool BlockSampler_HasMore(BlockSampler bs);
 extern BlockNumber BlockSampler_Next(BlockSampler bs);
 
 /* Reservoid sampling methods */
-typedef double ReservoirStateData;
+typedef struct
+{
+       double  W;
+       SamplerRandomState randstate; /* random generator state */
+} ReservoirStateData;
+
 typedef ReservoirStateData *ReservoirState;
 
 extern void reservoir_init_selection_state(ReservoirState rs, int n);