# Module db_ets

- Description
- Data Types
- Function Index
- Function Details

DB back-end using ets.

Copyright © 2013-2014 Zuse Institute Berlin,

Version: $Id$

Behaviours: `db_backend_beh`.

Authors: Jan Fajerski (`fajerski@zib.de`).

## Description

DB back-end using ets. Two keys K and L are considered equal if K == L yields true.

## Data Types

### db()

    db() = ets:tab()

### entry()

    entry() = db_backend_beh:entry()

### key()

    key() = db_backend_beh:key()

'$end_of_table' is not allowed as key() or else iterations won't work!

## Function Index

close/1 | Closes and deletes the DB named DBName.
close_and_delete/1 | Closes and deletes the DB named DBName.
delete/2 | Deletes the tuple saved under Key and returns the new DB.
foldl/3 | Is equivalent to ets:foldl(Fun, Acc0, DB).
foldl/4 | Is equivalent to foldl(DB, Fun, Acc0, Interval, get_load(DB)).
foldl/5 | foldl iterates over DB and applies Fun(Entry, AccIn) to every element encountered in Interval.
foldl_unordered/3 | Works similar to foldl/3 but uses ets:foldl instead of our own implementation.
foldr/3 | Is equivalent to ets:foldr(Fun, Acc0, DB).
foldr/4 | Is equivalent to foldr(DB, Fun, Acc0, Interval, get_load(DB)).
foldr/5 | Behaves like foldl/5 with the difference that it starts at the end of Interval and iterates towards the start of Interval.
get/2 | Returns the entry that corresponds to Key or {} if no such tuple exists.
get_load/1 | Returns the current load (i.e.
get_name/1 | Returns the name of the DB specified in new/1.
get_persisted_tables/0 | Gets a list of persisted tables (none with ets!).
is_available/0 | Checks for modules required for this DB backend.
new/1 | Creates new DB handle named DBName.
new/2 | Creates new DB handle named DBName with possibility to pass Options.
open/1 | Open a previously existing database.
put/2 | Saves arbitrary tuple Entry or list of tuples Entries in DB DBName and returns the new DB.
supports_feature/1 | Returns true if the DB support a specific feature (e.g.
tab2list/1 | Returns a list of all objects in the table Table_name.

## Function Details

### new/1

    new(DBName :: nonempty_string()) -> db()

Creates new DB handle named DBName.

### new/2

    new(DBName :: nonempty_string(), Options :: [term()]) -> db()

Creates new DB handle named DBName with possibility to pass Options.

### open/1

    open(DBName :: nonempty_string()) -> no_return()

Open a previously existing database. Not supported by ets. A new database is created

### close/1

    close(DBName :: db()) -> true

Closes and deletes the DB named DBName

### close_and_delete/1

    close_and_delete(DBName :: db()) -> true

Closes and deletes the DB named DBName

### put/2

    put(DBName :: db(), Entry :: entry() | [Entries :: entry()]) ->
           db()

Saves arbitrary tuple Entry or list of tuples Entries in DB DBName and returns the new DB. The key is expected to be the first element of Entry.

### get/2

    get(DBName :: db(), Key :: key()) -> entry() | {}

Returns the entry that corresponds to Key or {} if no such tuple exists.

### delete/2

    delete(DBName :: db(), Key :: key()) -> db()

Deletes the tuple saved under Key and returns the new DB. If such a tuple does not exists nothing is changed.

### get_persisted_tables/0

    get_persisted_tables() -> [nonempty_string()]

Gets a list of persisted tables (none with ets!).

### get_name/1

    get_name(DB :: db()) -> nonempty_string()

Returns the name of the DB specified in new/1.

### is_available/0

    is_available() -> boolean() | [atom()]

Checks for modules required for this DB backend. Returns true if no modules are missing, or else a list of missing modules

### supports_feature/1

    supports_feature(Feature :: atom()) -> boolean()

Returns true if the DB support a specific feature (e.g. recovery), false otherwise.

### get_load/1

    get_load(DB :: db()) -> non_neg_integer()

Returns the current load (i.e. number of stored tuples) of the DB.

### foldl/3

    foldl(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A) ->
             Acc1 :: A

Is equivalent to ets:foldl(Fun, Acc0, DB).

### foldl/4

    foldl(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A,
          Interval :: db_backend_beh:interval()) ->
             Acc1 :: A

Is equivalent to foldl(DB, Fun, Acc0, Interval, get_load(DB)).

### foldl/5

    foldl(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A,
          Intervall :: db_backend_beh:interval(),
          MaxNum :: non_neg_integer()) ->
             Acc1 :: A

foldl iterates over DB and applies Fun(Entry, AccIn) to every element encountered in Interval. On the first call AccIn == Acc0. The iteration stops as soon as MaxNum elements have been encountered.

### foldr/3

    foldr(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A) ->
             Acc1 :: A

Is equivalent to ets:foldr(Fun, Acc0, DB).

### foldr/4

    foldr(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A,
          Interval :: db_backend_beh:interval()) ->
             Acc1 :: A

Is equivalent to foldr(DB, Fun, Acc0, Interval, get_load(DB)).

### foldr/5

    foldr(DB :: db(),
          Fun :: fun((Key :: key(), AccIn :: A) -> AccOut :: A),
          Acc0 :: A,
          Interval :: db_backend_beh:interval(),
          MaxNum :: non_neg_integer()) ->
             Acc1 :: A

Behaves like foldl/5 with the difference that it starts at the end of Interval and iterates towards the start of Interval.

### foldl_unordered/3

    foldl_unordered(DB :: db(),
                    Fun ::
                        fun((Entry :: entry(), AccIn :: A) ->
                                AccOut :: A),
                    Acc0 :: A) ->
                       Acc1 :: A

Works similar to foldl/3 but uses ets:foldl instead of our own implementation. The order in which will be iterated over is unspecified, but using this fuction might be faster than foldl/3 if it does not matter.

### tab2list/1

    tab2list(Table_name :: db()) -> [Entries :: entry()]

Returns a list of all objects in the table Table_name.

Generated by EDoc, Feb 29 2016, 16:12:19.