• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/ap/gpl/timemachine/db-4.7.25.NC/java/src/com/sleepycat/compat/
1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2000,2008 Oracle.  All rights reserved.
5 *
6 * $Id: DbCompat.java,v 12.12 2008/02/07 17:12:18 mark Exp $
7 */
8
9package com.sleepycat.compat;
10
11import java.io.FileNotFoundException;
12import java.util.Comparator;
13
14import com.sleepycat.db.Cursor;
15import com.sleepycat.db.CursorConfig;
16import com.sleepycat.db.Database;
17import com.sleepycat.db.DatabaseConfig;
18import com.sleepycat.db.DatabaseEntry;
19import com.sleepycat.db.DatabaseException;
20import com.sleepycat.db.DatabaseType;
21import com.sleepycat.db.Environment;
22import com.sleepycat.db.EnvironmentConfig;
23import com.sleepycat.db.LockDetectMode;
24import com.sleepycat.db.LockMode;
25import com.sleepycat.db.OperationStatus;
26import com.sleepycat.db.SecondaryConfig;
27import com.sleepycat.db.SecondaryCursor;
28import com.sleepycat.db.SecondaryDatabase;
29import com.sleepycat.db.Transaction;
30import com.sleepycat.db.TransactionConfig;
31
32/**
33 * A minimal set of DB-JE compatibility methods for internal use only.
34 * Two versions are maintained in parallel in the DB and JE source trees.
35 * Used by the collections package.
36 */
37public class DbCompat {
38
39    /* Capabilities */
40
41    public static final boolean CDB = true;
42    public static final boolean JOIN = true;
43    public static final boolean NESTED_TRANSACTIONS = true;
44    public static final boolean INSERTION_ORDERED_DUPLICATES = true;
45    public static final boolean SEPARATE_DATABASE_FILES = true;
46    public static final boolean MEMORY_SUBSYSTEM = true;
47    public static final boolean LOCK_SUBSYSTEM = true;
48    public static final boolean HASH_METHOD = true;
49    public static final boolean RECNO_METHOD = true;
50    public static final boolean QUEUE_METHOD = true;
51    public static final boolean BTREE_RECNUM_METHOD = true;
52    public static final boolean OPTIONAL_READ_UNCOMMITTED = true;
53    public static final boolean SECONDARIES = true;
54    public static boolean TRANSACTION_RUNNER_PRINT_STACK_TRACES = true;
55    public static final boolean DATABASE_COUNT = false;
56
57    /* Methods used by the collections package. */
58
59    public static boolean getInitializeCache(EnvironmentConfig config) {
60        return config.getInitializeCache();
61    }
62
63    public static boolean getInitializeLocking(EnvironmentConfig config) {
64        return config.getInitializeLocking();
65    }
66
67    public static boolean getInitializeCDB(EnvironmentConfig config) {
68        return config.getInitializeCDB();
69    }
70
71    public static boolean isTypeBtree(DatabaseConfig dbConfig) {
72        return dbConfig.getType() == DatabaseType.BTREE;
73    }
74
75    public static boolean isTypeHash(DatabaseConfig dbConfig) {
76        return dbConfig.getType() == DatabaseType.HASH;
77    }
78
79    public static boolean isTypeQueue(DatabaseConfig dbConfig) {
80        return dbConfig.getType() == DatabaseType.QUEUE;
81    }
82
83    public static boolean isTypeRecno(DatabaseConfig dbConfig) {
84        return dbConfig.getType() == DatabaseType.RECNO;
85    }
86
87    public static boolean getBtreeRecordNumbers(DatabaseConfig dbConfig) {
88        return dbConfig.getBtreeRecordNumbers();
89    }
90
91    public static boolean getReadUncommitted(DatabaseConfig dbConfig) {
92        return dbConfig.getReadUncommitted();
93    }
94
95    public static boolean getRenumbering(DatabaseConfig dbConfig) {
96        return dbConfig.getRenumbering();
97    }
98
99    public static boolean getSortedDuplicates(DatabaseConfig dbConfig) {
100        return dbConfig.getSortedDuplicates();
101    }
102
103    public static boolean getUnsortedDuplicates(DatabaseConfig dbConfig) {
104        return dbConfig.getUnsortedDuplicates();
105    }
106
107    public static boolean getDeferredWrite(DatabaseConfig dbConfig) {
108        return false;
109    }
110
111    // XXX Remove this when DB and JE support CursorConfig.cloneConfig
112    public static CursorConfig cloneCursorConfig(CursorConfig config) {
113        CursorConfig newConfig = new CursorConfig();
114        newConfig.setReadCommitted(config.getReadCommitted());
115        newConfig.setReadUncommitted(config.getReadUncommitted());
116        newConfig.setWriteCursor(config.getWriteCursor());
117        return newConfig;
118    }
119
120    public static boolean getWriteCursor(CursorConfig config) {
121        return config.getWriteCursor();
122    }
123
124    public static void setWriteCursor(CursorConfig config, boolean val) {
125        config.setWriteCursor(val);
126    }
127
128    public static void setRecordNumber(DatabaseEntry entry, int recNum) {
129        entry.setRecordNumber(recNum);
130    }
131
132    public static int getRecordNumber(DatabaseEntry entry) {
133        return entry.getRecordNumber();
134    }
135
136    public static String getDatabaseFile(Database db)
137        throws DatabaseException {
138        return db.getDatabaseFile();
139    }
140
141    public static long getDatabaseCount(Database db)
142        throws DatabaseException {
143
144        throw new UnsupportedOperationException();
145    }
146
147    public static void syncDeferredWrite(Database db, boolean flushLog)
148        throws DatabaseException {
149    }
150
151    public static OperationStatus getCurrentRecordNumber(Cursor cursor,
152                                                         DatabaseEntry key,
153                                                         LockMode lockMode)
154        throws DatabaseException {
155        return cursor.getRecordNumber(key, lockMode);
156    }
157
158    public static OperationStatus getSearchRecordNumber(Cursor cursor,
159                                                        DatabaseEntry key,
160                                                        DatabaseEntry data,
161                                                        LockMode lockMode)
162        throws DatabaseException {
163        return cursor.getSearchRecordNumber(key, data, lockMode);
164    }
165
166    public static OperationStatus getSearchRecordNumber(SecondaryCursor cursor,
167                                                        DatabaseEntry key,
168                                                        DatabaseEntry pKey,
169                                                        DatabaseEntry data,
170                                                        LockMode lockMode)
171        throws DatabaseException {
172        return cursor.getSearchRecordNumber(key, pKey, data, lockMode);
173    }
174
175    public static OperationStatus putAfter(Cursor cursor,
176                                           DatabaseEntry key,
177                                           DatabaseEntry data)
178        throws DatabaseException {
179        return cursor.putAfter(key, data);
180    }
181
182    public static OperationStatus putBefore(Cursor cursor,
183                                            DatabaseEntry key,
184                                            DatabaseEntry data)
185        throws DatabaseException {
186        return cursor.putBefore(key, data);
187    }
188
189    public static OperationStatus append(Database db,
190                                         Transaction txn,
191                                         DatabaseEntry key,
192                                         DatabaseEntry data)
193        throws DatabaseException {
194        return db.append(txn, key, data);
195    }
196
197    public static Transaction getThreadTransaction(Environment env)
198	throws DatabaseException {
199        return null;
200    }
201
202    /* Methods used by the collections tests. */
203
204    public static void setInitializeCache(EnvironmentConfig config,
205                                          boolean val) {
206        config.setInitializeCache(val);
207    }
208
209    public static void setInitializeLocking(EnvironmentConfig config,
210                                            boolean val) {
211        config.setInitializeLocking(val);
212    }
213
214    public static void setInitializeCDB(EnvironmentConfig config,
215                                        boolean val) {
216        config.setInitializeCDB(val);
217    }
218
219    public static void setLockDetectModeOldest(EnvironmentConfig config) {
220
221        config.setLockDetectMode(LockDetectMode.OLDEST);
222    }
223
224    public static void setBtreeComparator(DatabaseConfig dbConfig,
225                                          Comparator comparator) {
226        dbConfig.setBtreeComparator(comparator);
227    }
228
229    public static void setTypeBtree(DatabaseConfig dbConfig) {
230        dbConfig.setType(DatabaseType.BTREE);
231    }
232
233    public static void setTypeHash(DatabaseConfig dbConfig) {
234        dbConfig.setType(DatabaseType.HASH);
235    }
236
237    public static void setTypeRecno(DatabaseConfig dbConfig) {
238        dbConfig.setType(DatabaseType.RECNO);
239    }
240
241    public static void setTypeQueue(DatabaseConfig dbConfig) {
242        dbConfig.setType(DatabaseType.QUEUE);
243    }
244
245    public static void setBtreeRecordNumbers(DatabaseConfig dbConfig,
246                                             boolean val) {
247        dbConfig.setBtreeRecordNumbers(val);
248    }
249
250    public static void setReadUncommitted(DatabaseConfig dbConfig,
251                                          boolean val) {
252        dbConfig.setReadUncommitted(val);
253    }
254
255    public static void setRenumbering(DatabaseConfig dbConfig,
256                                      boolean val) {
257        dbConfig.setRenumbering(val);
258    }
259
260    public static void setSortedDuplicates(DatabaseConfig dbConfig,
261                                           boolean val) {
262        dbConfig.setSortedDuplicates(val);
263    }
264
265    public static void setUnsortedDuplicates(DatabaseConfig dbConfig,
266                                             boolean val) {
267        dbConfig.setUnsortedDuplicates(val);
268    }
269
270    public static void setDeferredWrite(DatabaseConfig dbConfig, boolean val) {
271    }
272
273    public static void setRecordLength(DatabaseConfig dbConfig, int val) {
274        dbConfig.setRecordLength(val);
275    }
276
277    public static void setRecordPad(DatabaseConfig dbConfig, int val) {
278        dbConfig.setRecordPad(val);
279    }
280
281    public static Database openDatabase(Environment env,
282                                        Transaction txn,
283                                        String fileName,
284                                        String dbName,
285                                        DatabaseConfig config)
286        throws DatabaseException, FileNotFoundException {
287
288        assert fileName != null;
289        return env.openDatabase(txn, fileName, dbName, config);
290    }
291
292    public static SecondaryDatabase openSecondaryDatabase(
293                                        Environment env,
294                                        Transaction txn,
295                                        String fileName,
296                                        String dbName,
297                                        Database primaryDatabase,
298                                        SecondaryConfig config)
299        throws DatabaseException, FileNotFoundException {
300
301        assert fileName != null;
302        return env.openSecondaryDatabase
303            (txn, fileName, dbName, primaryDatabase, config);
304    }
305
306    public static long truncateDatabase(Environment env,
307                                        Transaction txn,
308                                        String fileName,
309                                        String dbName,
310                                        boolean returnCount)
311        throws DatabaseException, FileNotFoundException {
312
313        assert fileName != null;
314        Database db = env.openDatabase(txn, fileName, dbName, null);
315        try {
316            return db.truncate(txn, returnCount);
317        } finally {
318            db.close();
319        }
320    }
321
322    public static void removeDatabase(Environment env,
323                                      Transaction txn,
324                                      String fileName,
325                                      String dbName)
326        throws DatabaseException, FileNotFoundException {
327
328        assert fileName != null;
329        env.removeDatabase(txn, fileName, dbName);
330    }
331
332    public static void renameDatabase(Environment env,
333                                      Transaction txn,
334                                      String oldFileName,
335                                      String oldDbName,
336                                      String newFileName,
337                                      String newDbName)
338        throws DatabaseException, FileNotFoundException {
339
340        assert oldFileName != null;
341        assert newFileName != null;
342        if (!oldFileName.equals(newFileName)) {
343            env.renameDatabase(txn, oldFileName, null, newFileName);
344        }
345        if (oldDbName != null && !oldDbName.equals(newDbName)) {
346            env.renameDatabase(txn, newFileName, oldDbName, newDbName);
347        }
348    }
349
350    public static Database testOpenDatabase(Environment env,
351                                            Transaction txn,
352                                            String file,
353                                            String name,
354                                            DatabaseConfig config)
355        throws DatabaseException, FileNotFoundException {
356        return env.openDatabase(txn, file, name, config);
357    }
358
359    public static SecondaryDatabase
360                  testOpenSecondaryDatabase(Environment env,
361                                            Transaction txn,
362                                            String file,
363                                            String name,
364                                            Database primary,
365                                            SecondaryConfig config)
366        throws DatabaseException, FileNotFoundException {
367        return env.openSecondaryDatabase(txn, file, name, primary, config);
368    }
369}
370