PostgreSQL Source Code: src/backend/utils/adt/array_expanded.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

16

21

22

23

26 void *result, Size allocated_size);

27

29{

32};

33

34

37

38

39

40

41

42

43

44

45

46

47

48

52{

58

59

60

61

62

63

65 "expanded array",

67

68

71

74

75

77 {

79

81

82

83

84

85

86

87

88

89 if (metacache == NULL)

90 metacache = &fakecache;

95

96

97

98

99

100

101

103 {

105

107 }

108

109

110

111

112

113

114

115

116

117

118

119 }

120

121

122

123

124

125

126

127

128

129

133

135

138

139

142 {

143

147 }

148 else

149 {

150

155

156 if (metacache)

157 {

162 }

163 }

164

165

171

172

176

177

179}

180

181

182

183

184static void

187{

189 int ndims = oldeah->ndims;

191

192

193 eah->ndims = ndims;

194

197

198 memcpy(eah->dims, oldeah->dims, ndims * sizeof(int));

199 memcpy(eah->lbound, oldeah->lbound, ndims * sizeof(int));

200

201

206

207

209 dvalueslen * sizeof(Datum));

212 {

214 dvalueslen * sizeof(bool));

215 memcpy(eah->dnulls, oldeah->dnulls, dvalueslen * sizeof(bool));

216 }

217 else

222

223

227}

228

229

230

231

234{

236 int nelems;

237 int ndims;

239 bool *dnulls;

241 int i;

242

244

245

248

249

252

253

254

255

256

257

258 nelems = eah->nelems;

259 ndims = eah->ndims;

262 dnulls = eah->dnulls;

263 nbytes = 0;

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

265 {

266 if (dnulls && dnulls[i])

267 continue;

270

273 (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),

274 errmsg("array size exceeds the maximum allowed (%d)",

276 }

277

278 if (dnulls)

280 else

282

283

285

286 return nbytes;

287}

288

289

290

291

292static void

294 void *result, Size allocated_size)

295{

298 int nelems;

299 int ndims;

300 int32 dataoffset;

301

303

304

306 {

308 memcpy(result, eah->fvalue, allocated_size);

309 return;

310 }

311

312

314

315

316 nelems = eah->nelems;

317 ndims = eah->ndims;

318

321 else

322 dataoffset = 0;

323

324

325 memset(aresult, 0, allocated_size);

326

328 aresult->ndim = ndims;

331 memcpy(ARR_DIMS(aresult), eah->dims, ndims * sizeof(int));

332 memcpy(ARR_LBOUND(aresult), eah->lbound, ndims * sizeof(int));

333

337 false);

338}

339

340

341

342

343

344

345

346

347

348

349

350

353{

354

356 {

358

360 return eah;

361 }

362

363

366}

367

368

369

370

373{

374

376 {

378

380

381 if (metacache)

382 {

387 }

388 return eah;

389 }

390

391

394}

395

396

397

398

399

402{

404

405

406

407

409 {

413 }

414

415

417}

418

419

420

421

422

423void

425{

426 if (eah->dvalues == NULL)

427 {

430 bool *dnulls;

431 int nelems;

432

433 dnulls = NULL;

437 &dvalues,

439 &nelems);

440

441

442

443

444

445

446

447

449 eah->dnulls = dnulls;

452 }

453}

#define DatumGetArrayTypePCopy(X)

#define ARR_OVERHEAD_WITHNULLS(ndims, nitems)

#define ARR_OVERHEAD_NONULLS(ndims)

static void copy_byval_expanded_array(ExpandedArrayHeader *eah, ExpandedArrayHeader *oldeah)

ExpandedArrayHeader * DatumGetExpandedArrayX(Datum d, ArrayMetaState *metacache)

Datum expand_array(Datum arraydatum, MemoryContext parentcontext, ArrayMetaState *metacache)

void deconstruct_expanded_array(ExpandedArrayHeader *eah)

static Size EA_get_flat_size(ExpandedObjectHeader *eohptr)

ExpandedArrayHeader * DatumGetExpandedArray(Datum d)

AnyArrayType * DatumGetAnyArrayP(Datum d)

static void EA_flatten_into(ExpandedObjectHeader *eohptr, void *result, Size allocated_size)

static const ExpandedObjectMethods EA_methods

void CopyArrayEls(ArrayType *array, Datum *values, bool *nulls, int nitems, int typlen, bool typbyval, char typalign, bool freedata)

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

int ArrayGetNItems(int ndim, const int *dims)

int errcode(int sqlerrcode)

int errmsg(const char *fmt,...)

#define ereport(elevel,...)

ExpandedObjectHeader * DatumGetEOHP(Datum d)

void EOH_init_header(ExpandedObjectHeader *eohptr, const ExpandedObjectMethods *methods, MemoryContext obj_context)

static Datum EOHPGetRWDatum(const struct ExpandedObjectHeader *eohptr)

#define PG_DETOAST_DATUM(datum)

Assert(PointerIsAligned(start, uint64))

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

void * MemoryContextAlloc(MemoryContext context, Size size)

MemoryContext CurrentMemoryContext

#define AllocSetContextCreate

#define ALLOCSET_START_SMALL_SIZES

#define AllocSizeIsValid(size)

static MemoryContext MemoryContextSwitchTo(MemoryContext context)

static Pointer DatumGetPointer(Datum X)

MemoryContext eoh_context

#define att_align_nominal(cur_offset, attalign)

#define att_addlength_datum(cur_offset, attlen, attdatum)

#define VARATT_IS_EXTERNAL_EXPANDED(PTR)

#define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR)

#define SET_VARSIZE(PTR, len)