PostgreSQL Source Code: src/backend/access/gin/ginarrayproc.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

15

19#include "utils/fmgrprotos.h"

21

22

23#define GinOverlapStrategy 1

24#define GinContainsStrategy 2

25#define GinContainedStrategy 3

26#define GinEqualStrategy 4

27

28

29

30

31

34{

35

40 bool elmbyval;

41 char elmalign;

43 bool *nulls;

44 int nelems;

45

47 &elmlen, &elmbyval, &elmalign);

48

51 elmlen, elmbyval, elmalign,

52 &elems, &nulls, &nelems);

53

54 *nkeys = nelems;

55 *nullFlags = nulls;

56

57

59}

60

61

62

63

64

65

66

69{

70 if (PG_NARGS() < 3)

71 elog(ERROR, "ginarrayextract requires three arguments");

73}

74

75

76

77

80{

81

85

86

87

91 bool elmbyval;

92 char elmalign;

94 bool *nulls;

95 int nelems;

96

98 &elmlen, &elmbyval, &elmalign);

99

102 elmlen, elmbyval, elmalign,

103 &elems, &nulls, &nelems);

104

105 *nkeys = nelems;

106 *nullFlags = nulls;

107

108 switch (strategy)

109 {

112 break;

114 if (nelems > 0)

116 else

118 break;

120

122 break;

124 if (nelems > 0)

126 else

128 break;

129 default:

130 elog(ERROR, "ginqueryarrayextract: unknown strategy number: %d",

131 strategy);

132 }

133

134

136}

137

138

139

140

143{

146

147

149

150

152

153

155 bool res;

157

158 switch (strategy)

159 {

161

162 *recheck = false;

163

164 res = false;

165 for (i = 0; i < nkeys; i++)

166 {

167 if (check[i] && !nullFlags[i])

168 {

169 res = true;

170 break;

171 }

172 }

173 break;

175

176 *recheck = false;

177

178 res = true;

179 for (i = 0; i < nkeys; i++)

180 {

181 if (!check[i] || nullFlags[i])

182 {

183 res = false;

184 break;

185 }

186 }

187 break;

189

190 *recheck = true;

191

192 res = true;

193 break;

195

196 *recheck = true;

197

198

199

200

201

202

203 res = true;

204 for (i = 0; i < nkeys; i++)

205 {

206 if (!check[i])

207 {

208 res = false;

209 break;

210 }

211 }

212 break;

213 default:

214 elog(ERROR, "ginarrayconsistent: unknown strategy number: %d",

215 strategy);

216 res = false;

217 }

218

220}

221

222

223

224

227{

230

231

233

234

235

239

240 switch (strategy)

241 {

243

245 for (i = 0; i < nkeys; i++)

246 {

247 if (!nullFlags[i])

248 {

250 {

252 break;

253 }

255 {

257 }

258 }

259 }

260 break;

262

264 for (i = 0; i < nkeys; i++)

265 {

266 if (check[i] == GIN_FALSE || nullFlags[i])

267 {

269 break;

270 }

272 {

274 }

275 }

276 break;

278

280 break;

282

283

284

285

286

287

289 for (i = 0; i < nkeys; i++)

290 {

292 {

294 break;

295 }

296 }

297 break;

298 default:

299 elog(ERROR, "ginarrayconsistent: unknown strategy number: %d",

300 strategy);

301 res = false;

302 }

303

305}

#define PG_GETARG_ARRAYTYPE_P_COPY(n)

void deconstruct_array(ArrayType *array, Oid elmtype, int elmlen, bool elmbyval, char elmalign, Datum **elemsp, bool **nullsp, int *nelemsp)

#define PG_GETARG_POINTER(n)

#define PG_GETARG_UINT16(n)

#define PG_GETARG_INT32(n)

#define PG_RETURN_POINTER(x)

#define PG_RETURN_BOOL(x)

#define PG_RETURN_GIN_TERNARY_VALUE(x)

#define GIN_SEARCH_MODE_ALL

#define GIN_SEARCH_MODE_DEFAULT

#define GIN_SEARCH_MODE_INCLUDE_EMPTY

Datum ginarraytriconsistent(PG_FUNCTION_ARGS)

Datum ginarrayextract_2args(PG_FUNCTION_ARGS)

Datum ginarrayextract(PG_FUNCTION_ARGS)

Datum ginarrayconsistent(PG_FUNCTION_ARGS)

#define GinOverlapStrategy

#define GinContainedStrategy

#define GinContainsStrategy

Datum ginqueryarrayextract(PG_FUNCTION_ARGS)

void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval, char *typalign)