root/libdb/bt_get.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __bt_get

   1 /*-
   2  * Copyright (c) 1990, 1993, 1994
   3  *      The Regents of the University of California.  All rights reserved.
   4  *
   5  * This code is derived from software contributed to Berkeley by
   6  * Mike Olson.
   7  *
   8  * Redistribution and use in source and binary forms, with or without
   9  * modification, are permitted provided that the following conditions
  10  * are met:
  11  * 1. Redistributions of source code must retain the above copyright
  12  *    notice, this list of conditions and the following disclaimer.
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  * 3. Neither the name of the University nor the names of its contributors
  17  *    may be used to endorse or promote products derived from this software
  18  *    without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30  * SUCH DAMAGE.
  31  */
  32 
  33 #if defined(LIBC_SCCS) && !defined(lint)
  34 static char sccsid[] = "@(#)bt_get.c    8.6 (Berkeley) 7/20/94";
  35 #endif /* LIBC_SCCS and not lint */
  36 
  37 #ifdef HAVE_CONFIG_H
  38 #include <config.h>
  39 #endif
  40 #include <sys/types.h>
  41 
  42 #include <errno.h>
  43 #include <stddef.h>
  44 #include <stdio.h>
  45 
  46 #include "db.h"
  47 #include "btree.h"
  48 
  49 /**
  50  * __BT_GET -- Get a record from the btree.
  51  *
  52  *      @param dbp      pointer to access method
  53  *      @param key      key to find
  54  *      @param data     data to return
  55  *      @param flags    currently unused
  56  *
  57  * @return #RET_ERROR, #RET_SUCCESS and #RET_SPECIAL if the key not found.
  58  */
  59 int
  60 __bt_get(dbp, key, data, flags)
  61         const DB *dbp;
  62         const DBT *key;
  63         DBT *data;
  64         u_int flags;
  65 {
  66         BTREE *t;
  67         EPG *e;
  68         int exact, status;
  69 
  70         t = dbp->internal;
  71 
  72         /* Toss any page pinned across calls. */
  73         if (t->bt_pinned != NULL) {
  74                 mpool_put(t->bt_mp, t->bt_pinned, 0);
  75                 t->bt_pinned = NULL;
  76         }
  77 
  78         /* Get currently doesn't take any flags. */
  79         if (flags) {
  80                 errno = EINVAL;
  81                 return (RET_ERROR);
  82         }
  83 
  84         if ((e = __bt_search(t, key, &exact)) == NULL)
  85                 return (RET_ERROR);
  86         if (!exact) {
  87                 mpool_put(t->bt_mp, e->page, 0);
  88                 return (RET_SPECIAL);
  89         }
  90 
  91         status = __bt_ret(t, e, NULL, NULL, data, &t->bt_rdata, 0);
  92 
  93         /*
  94          * If the user is doing concurrent access, we copied the
  95          * key/data, toss the page.
  96          */
  97         if (F_ISSET(t, B_DB_LOCK))
  98                 mpool_put(t->bt_mp, e->page, 0);
  99         else
 100                 t->bt_pinned = e->page;
 101         return (status);
 102 }

/* [previous][next][first][last][top][bottom][index][help] */