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 57486147 : bat_destroy(BAT *b)
26 : {
27 57486147 : BBPreclaim(b);
28 57529811 : }
29 :
30 : BAT *
31 319004 : bat_new(int tt, BUN size, role_t role)
32 : {
33 319004 : BAT *bn = COLnew(0, tt, size, role);
34 319128 : if (bn)
35 319128 : BBP_pid(bn->batCacheid) = 0;
36 319128 : 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 45246275 : temp_descriptor(log_bid b)
49 : {
50 45246275 : return BATdescriptor((bat) b);
51 : }
52 :
53 : BAT *
54 476452 : quick_descriptor(log_bid b)
55 : {
56 476452 : return BBPquickdesc((bat) b);
57 : }
58 :
59 : void
60 1013019 : temp_destroy(log_bid b)
61 : {
62 1013019 : if (b)
63 1013072 : BBPrelease(b);
64 1013230 : }
65 :
66 : log_bid
67 1926447 : temp_dup(log_bid b)
68 : {
69 1926447 : if (b)
70 1926756 : BBPretain(b);
71 1931694 : return b;
72 : }
73 :
74 : log_bid
75 1761830 : temp_create(BAT *b)
76 : {
77 1761830 : temp_dup(b->batCacheid);
78 1766743 : return b->batCacheid;
79 : }
80 :
81 : log_bid
82 156271 : 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 156271 : BAT *o, *c = NULL;
86 156271 : log_bid r;
87 :
88 156271 : 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 156271 : if (!(o = quick_descriptor(b)))
98 : return BID_NIL;
99 156195 : if (!(c = bat_new(o->ttype, COLSIZE, PERSISTENT)))
100 : return BID_NIL;
101 : }
102 156315 : if (!temp)
103 155531 : bat_set_access(c, BAT_READ);
104 156315 : r = temp_create(c);
105 156357 : bat_destroy(c);
106 156357 : return r;
107 : }
108 :
109 : BAT *ebats[MAXATOMS] = { NULL };
110 :
111 : log_bid
112 1440680 : e_bat(int type)
113 : {
114 1440680 : if (ebats[type] == NULL &&
115 0 : (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
116 : return BID_NIL;
117 1440680 : return temp_create(ebats[type]);
118 : }
119 :
120 : BAT *
121 14843576 : e_BAT(int type)
122 : {
123 14843576 : if (ebats[type] == NULL &&
124 0 : (ebats[type] = bat_new(type, 0, SYSTRANS)) == NULL)
125 : return NULL;
126 14843576 : return temp_descriptor(ebats[type]->batCacheid);
127 : }
128 :
129 : int
130 352 : bat_utils_init(void)
131 : {
132 352 : int t;
133 352 : char name[32];
134 :
135 9480 : for (t=1; t<GDKatomcnt; t++) {
136 9128 : if (BATatoms[t].name[0]) {
137 9128 : ebats[t] = bat_new(t, 0, SYSTRANS);
138 9128 : if(ebats[t] == NULL) {
139 0 : for (t = t - 1; t >= 1; t--)
140 0 : bat_destroy(ebats[t]);
141 : return -1;
142 : }
143 9128 : bat_set_access(ebats[t], BAT_READ);
144 : /* give it a name for debugging purposes */
145 9128 : snprintf(name, sizeof(name), "sql_empty_%s_bat",
146 : ATOMname(t));
147 9128 : BBPrename(ebats[t], name);
148 : }
149 : }
150 : return 0;
151 : }
|