Package com.sleepycat.je.util

Source Code of com.sleepycat.je.util.RecordSearch

/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002-2005
*      Sleepycat Software.  All rights reserved.
*
* $Id: RecordSearch.java,v 1.21 2005/01/28 17:43:09 mark Exp $
*/

package com.sleepycat.je.util;

import java.io.File;
import java.util.logging.Level;

import com.sleepycat.je.Cursor;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
import com.sleepycat.je.config.EnvironmentParams;
import com.sleepycat.je.utilint.CmdUtil;

/**
* KeySearch is a debugging aid that searches the database for a given
* record.
*/
public class RecordSearch {

    public static void main(String [] argv) {
        try {
            int whichArg = 0;
            DatabaseEntry searchKey = null;
            String dbName = null;
            String keyVal = null;
            String levelVal = "SEVERE";
            boolean dumpAll = false;
      boolean searchKeyRange = false;

            /*
             * Usage: -h  <envHomeDir> (optional
             *        -db <db name>
             *        -ks <key to search for, as a string>
             *        -ksr <key to range search for, as a string>
             *        -a  <if true, dump the whole db>
             *        -l  <logging level>
             */
            String envHome = "."; // default to current directory
            while (whichArg < argv.length) {
                String nextArg = argv[whichArg];

                if (nextArg.equals("-h")) {
                    whichArg++;
                    envHome = CmdUtil.getArg(argv, whichArg);
                } else if (nextArg.equals("-db")) {
                    whichArg++;
                    dbName = CmdUtil.getArg(argv, whichArg);
                } else if (nextArg.equals("-ks")) {
                    whichArg++;
                    keyVal = CmdUtil.getArg(argv, whichArg);
                    searchKey = new DatabaseEntry(keyVal.getBytes());
                } else if (nextArg.equals("-ksr")) {
                    whichArg++;
                    keyVal = CmdUtil.getArg(argv, whichArg);
                    searchKey = new DatabaseEntry(keyVal.getBytes());
        searchKeyRange = true;
                } else if (nextArg.equals("-l")) {
                    whichArg++;
                    levelVal = CmdUtil.getArg(argv, whichArg);
                    Level.parse(levelVal); // sanity check level
                } else if (nextArg.equals("-a")) {
                    whichArg++;
                    String dumpVal = CmdUtil.getArg(argv, whichArg);
                    dumpAll = Boolean.valueOf(dumpVal).booleanValue();
                } else {
                    throw new IllegalArgumentException
                        (nextArg + " is not a supported option.");
                }
                whichArg++;
            }

            if (dbName == null) {
                usage();
                System.exit(1);
            }

            /* Make a read only environment */
            EnvironmentConfig envConfig = TestUtils.initEnvConfig();

            // Don't debug log to the database log.
            envConfig.setConfigParam
                (EnvironmentParams.JE_LOGGING_DBLOG.getName(), "false");

            // Do debug log to the console
            envConfig.setConfigParam
                (EnvironmentParams.JE_LOGGING_CONSOLE.getName(), "true");

            // Set logging level to only show errors
            envConfig.setConfigParam
                (EnvironmentParams.JE_LOGGING_LEVEL.getName(), levelVal);

            envConfig.setReadOnly(true);

            Environment envHandle = new Environment(new File(envHome),
                envConfig);

            /* Open the db. */
            DatabaseConfig dbConfig = new DatabaseConfig();
            dbConfig.setReadOnly(true);
            DbInternal.setUseExistingConfig(dbConfig, true);
            Database db = envHandle.openDatabase(null, dbName, dbConfig);

            DatabaseEntry foundData = new DatabaseEntry();
            if (dumpAll) {
                Cursor cursor = db.openCursor(null, null);
                DatabaseEntry foundKey = new DatabaseEntry();
                int i = 0;
                while (cursor.getNext(foundKey, foundData,
                                      LockMode.DEFAULT) == OperationStatus.SUCCESS) {
                    System.out.println(i + ":key=" +
                                       new String(foundKey.getData()));
                    i++;
                }
    cursor.close();
            } else if (searchKeyRange) {
                /* Range Search for the key. */
    Cursor cursor = db.openCursor(null, null);
    OperationStatus status = cursor.getSearchKeyRange(searchKey,
                  foundData,
                  LockMode.DEFAULT);
    cursor.close();
                System.out.println("Range Search for key " + keyVal +
                                   " status = " + status + " => " +
           new String(searchKey.getData()));
            } else {
                /* Search for the key. */
                OperationStatus status = db.get(null, searchKey, foundData,
            LockMode.DEFAULT);
                System.out.println("Search for key " + keyVal +
                                   " status = " + status);
      }
            db.close();
            envHandle.close();

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
            usage();
            System.exit(1);
        }
    }

    private static void usage() {
        System.out.println("Usage: RecordSearch");
  System.out.println("  -h <environment home> ");
        System.out.println("  -a <true if dump all>");
        System.out.println("  -db <db name>");
        System.out.println("  -l logging level");
        System.out.println("  -ks <key to search for, as a string");
        System.out.println("  -ksr <key to range search for, as a string");
    }
}
TOP

Related Classes of com.sleepycat.je.util.RecordSearch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.