Line data Source code
1 : /*
2 : * SPDX-License-Identifier: MPL-2.0
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * Copyright 2024 MonetDB Foundation;
9 : * Copyright August 2008 - 2023 MonetDB B.V.;
10 : * Copyright 1997 - July 2008 CWI.
11 : */
12 :
13 : #include "monetdb_config.h"
14 : #include "bat_utils.h"
15 :
16 : int
17 0 : bat_fix(BAT *b)
18 : {
19 0 : if (b)
20 0 : return BBPfix(b->batCacheid);
21 : return 0;
22 : }
23 :
24 : void
25 44725098 : bat_destroy(BAT *b)
26 : {
27 44725098 : BBPreclaim(b);
28 44722430 : }
29 :
30 : BAT *
31 313135 : bat_new(int tt, BUN size, role_t role)
32 : {
33 313135 : BAT *bn = COLnew(0, tt, size, role);
34 313197 : if (bn)
35 313197 : BBP_pid(bn->batCacheid) = 0;
36 313197 : return bn;
37 : }
38 :
39 : void
40 0 : bat_clear(BAT *b)
41 : {
42 0 : bat_set_access(b,BAT_WRITE);
43 0 : BATclear(b,true);
44 0 : bat_set_access(b,BAT_READ);
45 0 : }
46 :
47 : BAT *
48 35801070 : temp_descriptor(log_bid b)
49 : {
50 35801070 : return BATdescriptor((bat) b);
51 : }
52 :
53 : BAT *
54 431489 : quick_descriptor(log_bid b)
55 : {
56 431489 : return BBPquickdesc((bat) b);
57 : }
58 :
59 : void
60 863170 : temp_destroy(log_bid b)
61 : {
62 863170 : if (b)
63 863171 : BBPrelease(b);
64 863164 : }
65 :
66 : log_bid
67 1417081 : temp_dup(log_bid b)
68 : {
69 1417081 : if (b)
70 1417073 : BBPretain(b);
71 1417099 : return b;
72 : }
73 :
74 : log_bid
75 1255722 : temp_create(BAT *b)
76 : {
77 1255722 : temp_dup(b->batCacheid);
78 1255691 : return b->batCacheid;
79 : }
80 :
81 : log_bid
82 156331 : temp_copy(log_bid b, bool renew, bool temp)
83 : {
84 : /* make a copy of b, if temp is set only create a empty bat */
85 156331 : BAT *o, *c = NULL;
86 156331 : log_bid r;
87 :
88 156331 : if (!renew) {
89 0 : if (!(o = temp_descriptor(b)))
90 : return BID_NIL;
91 0 : c = COLcopy(o, o->ttype, true, PERSISTENT);
92 0 : bat_destroy(o);
93 0 : if (!c)
94 : return BID_NIL;
95 0 : BATcommit(c, BUN_NONE);
96 : } else {
97 156331 : if (!(o = quick_descriptor(b)))
98 : return BID_NIL;
99 156285 : if (!(c = bat_new(o->ttype, COLSIZE, PERSISTENT)))
100 : return BID_NIL;
101 : }
102 156351 : if (!temp)
103 155562 : bat_set_access(c, BAT_READ);
104 156351 : r = temp_create(c);
105 156316 : bat_destroy(c);
106 156316 : return r;
107 : }
108 :
109 : BAT *ebats[MAXATOMS] = { NULL };
110 :
111 : log_bid
112 940294 : e_bat(int type)
113 : {
114 940294 : if (ebats[type] == NULL &&
115 0 : (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
116 : return BID_NIL;
117 940294 : return temp_create(ebats[type]);
118 : }
119 :
120 : BAT *
121 12886875 : e_BAT(int type)
122 : {
123 12886875 : if (ebats[type] == NULL &&
124 0 : (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
125 : return NULL;
126 12886875 : return temp_descriptor(ebats[type]->batCacheid);
127 : }
128 :
129 : int
130 336 : bat_utils_init(void)
131 : {
132 336 : int t;
133 336 : char name[32];
134 :
135 10380 : for (t=1; t<GDKatomcnt; t++) {
136 10044 : if (t != TYPE_bat && BATatoms[t].name[0]) {
137 9708 : ebats[t] = bat_new(t, 0, SYSTRANS);
138 9708 : if(ebats[t] == NULL) {
139 0 : for (t = t - 1; t >= 1; t--)
140 0 : bat_destroy(ebats[t]);
141 : return -1;
142 : }
143 9708 : bat_set_access(ebats[t], BAT_READ);
144 : /* give it a name for debugging purposes */
145 9708 : snprintf(name, sizeof(name), "sql_empty_%s_bat",
146 : ATOMname(t));
147 9708 : BBPrename(ebats[t], name);
148 : }
149 : }
150 : return 0;
151 : }
|