Commit | Line | Data |
a0d0e21e |
1 | # DB_File.pm -- Perl 5 interface to Berkeley DB |
2 | # |
3 | # written by Paul Marquess (pmarquess@bfsec.bt.co.uk) |
4 | # last modified 23rd June 1994 |
5 | # version 0.1 |
6 | |
7 | package DB_File::HASHINFO ; |
8 | use Carp; |
9 | |
10 | sub TIEHASH |
11 | { |
12 | bless {} ; |
13 | } |
14 | |
15 | %elements = ( 'bsize' => 0, |
16 | 'ffactor' => 0, |
17 | 'nelem' => 0, |
18 | 'cachesize' => 0, |
19 | 'hash' => 0, |
20 | 'lorder' => 0 |
21 | ) ; |
22 | |
23 | sub FETCH |
24 | { |
25 | return $_[0]{$_[1]} if defined $elements{$_[1]} ; |
26 | |
27 | croak "DB_File::HASHINFO::FETCH - Unknown element '$_[1]'" ; |
28 | } |
29 | |
30 | |
31 | sub STORE |
32 | { |
33 | if ( defined $elements{$_[1]} ) |
34 | { |
35 | $_[0]{$_[1]} = $_[2] ; |
36 | return ; |
37 | } |
38 | |
39 | croak "DB_File::HASHINFO::STORE - Unknown element '$_[1]'" ; |
40 | } |
41 | |
42 | sub DELETE |
43 | { |
44 | if ( defined $elements{$_[1]} ) |
45 | { |
46 | delete ${$_[0]}{$_[1]} ; |
47 | return ; |
48 | } |
49 | |
50 | croak "DB_File::HASHINFO::DELETE - Unknown element '$_[1]'" ; |
51 | } |
52 | |
53 | |
54 | sub DESTROY {undef %{$_[0]} } |
55 | sub FIRSTKEY { croak "DB_File::HASHINFO::FIRSTKEY is not implemented" } |
56 | sub NEXTKEY { croak "DB_File::HASHINFO::NEXTKEY is not implemented" } |
57 | sub EXISTS { croak "DB_File::HASHINFO::EXISTS is not implemented" } |
58 | sub CLEAR { croak "DB_File::HASHINFO::CLEAR is not implemented" } |
59 | |
60 | package DB_File::BTREEINFO ; |
61 | use Carp; |
62 | |
63 | sub TIEHASH |
64 | { |
65 | bless {} ; |
66 | } |
67 | |
68 | %elements = ( 'flags' => 0, |
69 | 'cachesize' => 0, |
70 | 'maxkeypage' => 0, |
71 | 'minkeypage' => 0, |
72 | 'psize' => 0, |
73 | 'compare' => 0, |
74 | 'prefix' => 0, |
75 | 'lorder' => 0 |
76 | ) ; |
77 | |
78 | sub FETCH |
79 | { |
80 | return $_[0]{$_[1]} if defined $elements{$_[1]} ; |
81 | |
82 | croak "DB_File::BTREEINFO::FETCH - Unknown element '$_[1]'" ; |
83 | } |
84 | |
85 | |
86 | sub STORE |
87 | { |
88 | if ( defined $elements{$_[1]} ) |
89 | { |
90 | $_[0]{$_[1]} = $_[2] ; |
91 | return ; |
92 | } |
93 | |
94 | croak "DB_File::BTREEINFO::STORE - Unknown element '$_[1]'" ; |
95 | } |
96 | |
97 | sub DELETE |
98 | { |
99 | if ( defined $elements{$_[1]} ) |
100 | { |
101 | delete ${$_[0]}{$_[1]} ; |
102 | return ; |
103 | } |
104 | |
105 | croak "DB_File::BTREEINFO::DELETE - Unknown element '$_[1]'" ; |
106 | } |
107 | |
108 | |
109 | sub DESTROY {undef %{$_[0]} } |
110 | sub FIRSTKEY { croak "DB_File::BTREEINFO::FIRSTKEY is not implemented" } |
111 | sub NEXTKEY { croak "DB_File::BTREEINFO::NEXTKEY is not implemented" } |
112 | sub EXISTS { croak "DB_File::BTREEINFO::EXISTS is not implemented" } |
113 | sub CLEAR { croak "DB_File::BTREEINFO::CLEAR is not implemented" } |
114 | |
115 | package DB_File::RECNOINFO ; |
116 | use Carp; |
117 | |
118 | sub TIEHASH |
119 | { |
120 | bless {} ; |
121 | } |
122 | |
123 | %elements = ( 'bval' => 0, |
124 | 'cachesize' => 0, |
125 | 'psize' => 0, |
126 | 'flags' => 0, |
127 | 'lorder' => 0, |
128 | 'reclen' => 0, |
129 | 'bfname' => 0 |
130 | ) ; |
131 | sub FETCH |
132 | { |
133 | return $_[0]{$_[1]} if defined $elements{$_[1]} ; |
134 | |
135 | croak "DB_File::RECNOINFO::FETCH - Unknown element '$_[1]'" ; |
136 | } |
137 | |
138 | |
139 | sub STORE |
140 | { |
141 | if ( defined $elements{$_[1]} ) |
142 | { |
143 | $_[0]{$_[1]} = $_[2] ; |
144 | return ; |
145 | } |
146 | |
147 | croak "DB_File::RECNOINFO::STORE - Unknown element '$_[1]'" ; |
148 | } |
149 | |
150 | sub DELETE |
151 | { |
152 | if ( defined $elements{$_[1]} ) |
153 | { |
154 | delete ${$_[0]}{$_[1]} ; |
155 | return ; |
156 | } |
157 | |
158 | croak "DB_File::RECNOINFO::DELETE - Unknown element '$_[1]'" ; |
159 | } |
160 | |
161 | |
162 | sub DESTROY {undef %{$_[0]} } |
163 | sub FIRSTKEY { croak "DB_File::RECNOINFO::FIRSTKEY is not implemented" } |
164 | sub NEXTKEY { croak "DB_File::RECNOINFO::NEXTKEY is not implemented" } |
165 | sub EXISTS { croak "DB_File::BTREEINFO::EXISTS is not implemented" } |
166 | sub CLEAR { croak "DB_File::BTREEINFO::CLEAR is not implemented" } |
167 | |
168 | |
169 | |
170 | package DB_File ; |
171 | use Carp; |
172 | |
173 | #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; |
174 | $DB_BTREE = TIEHASH DB_File::BTREEINFO ; |
175 | $DB_HASH = TIEHASH DB_File::HASHINFO ; |
176 | $DB_RECNO = TIEHASH DB_File::RECNOINFO ; |
177 | |
178 | require TieHash; |
179 | require Exporter; |
180 | require AutoLoader; |
181 | require DynaLoader; |
fec02dd3 |
182 | @ISA = qw(TieHash Exporter DynaLoader); |
a0d0e21e |
183 | @EXPORT = qw( |
184 | $DB_BTREE $DB_HASH $DB_RECNO |
185 | BTREEMAGIC |
186 | BTREEVERSION |
187 | DB_LOCK |
188 | DB_SHMEM |
189 | DB_TXN |
190 | HASHMAGIC |
191 | HASHVERSION |
192 | MAX_PAGE_NUMBER |
193 | MAX_PAGE_OFFSET |
194 | MAX_REC_NUMBER |
195 | RET_ERROR |
196 | RET_SPECIAL |
197 | RET_SUCCESS |
198 | R_CURSOR |
199 | R_DUP |
200 | R_FIRST |
201 | R_FIXEDLEN |
202 | R_IAFTER |
203 | R_IBEFORE |
204 | R_LAST |
205 | R_NEXT |
206 | R_NOKEY |
207 | R_NOOVERWRITE |
208 | R_PREV |
209 | R_RECNOSYNC |
210 | R_SETCURSOR |
211 | R_SNAPSHOT |
212 | __R_UNUSED |
213 | ); |
214 | |
215 | sub AUTOLOAD { |
a0d0e21e |
216 | local($constname); |
217 | ($constname = $AUTOLOAD) =~ s/.*:://; |
218 | $val = constant($constname, @_ ? $_[0] : 0); |
219 | if ($! != 0) { |
220 | if ($! =~ /Invalid/) { |
221 | $AutoLoader::AUTOLOAD = $AUTOLOAD; |
222 | goto &AutoLoader::AUTOLOAD; |
223 | } |
224 | else { |
225 | ($pack,$file,$line) = caller; |
226 | croak "Your vendor has not defined DB macro $constname, used at $file line $line. |
227 | "; |
228 | } |
229 | } |
230 | eval "sub $AUTOLOAD { $val }"; |
231 | goto &$AUTOLOAD; |
232 | } |
233 | |
234 | @liblist = (); |
235 | @liblist = split ' ', $Config::Config{"DB_File_loadlibs"} |
236 | if defined $Config::Config{"DB_File_loadlibs"}; |
237 | |
238 | bootstrap DB_File @liblist; |
239 | |
240 | # Preloaded methods go here. Autoload methods go after __END__, and are |
241 | # processed by the autosplit program. |
242 | |
243 | 1; |
244 | __END__ |