/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2009 Oracle. All rights reserved. * */ using System; using System.Collections.Generic; using System.Text; namespace BerkeleyDB { /// /// A class representing configuration parameters for /// /// public class SecondaryHashDatabaseConfig : SecondaryDatabaseConfig { /* Fields for db->set_flags() */ /// /// Policy for duplicate data items in the database; that is, insertion /// when the key of the key/data pair being inserted already exists in /// the database will be successful. /// /// /// /// The ordering of duplicates in the database for /// is determined by the order /// of insertion, unless the ordering is otherwise specified by use of a /// cursor operation or a duplicate sort function. The ordering of /// duplicates in the database for /// is determined by the /// duplicate comparison function. If the application does not specify a /// comparison function using /// , a default lexical /// comparison will be used. /// /// /// is preferred to /// for performance reasons. /// should only be used by /// applications wanting to order duplicate data items manually. /// /// /// If the database already exists, the value of Duplicates must be the /// same as the existing database or an error will be returned. /// /// public DuplicatesPolicy Duplicates; internal new uint flags { get { uint ret = base.flags; ret |= (uint)Duplicates; return ret; } } /// /// The policy for how to handle database creation. /// /// /// If the database does not already exist and /// is set, /// will fail. /// public CreatePolicy Creation; internal new uint openFlags { get { uint flags = base.openFlags; flags |= (uint)Creation; return flags; } } /// /// The Secondary Hash key comparison function. /// /// /// /// The comparison function is called whenever it is necessary to /// compare a key specified by the application with a key currently /// stored in the tree. /// /// /// If no comparison function is specified, the keys are compared /// lexically, with shorter keys collating before longer keys. /// /// /// If the database already exists, the comparison function must be the /// same as that historically used to create the database or corruption /// can occur. /// /// public EntryComparisonDelegate Compare; internal bool fillFactorIsSet; private uint ffactor; /// /// The desired density within the hash table. If no value is specified, /// the fill factor will be selected dynamically as pages are filled. /// /// /// /// The density is an approximation of the number of keys allowed to /// accumulate in any one bucket, determining when the hash table grows /// or shrinks. If you know the average sizes of the keys and data in /// your data set, setting the fill factor can enhance performance. A /// reasonable rule computing fill factor is to set it to the following: /// /// /// (pagesize - 32) / (average_key_size + average_data_size + 8) /// /// /// If the database already exists, this setting will be ignored. /// /// public uint FillFactor { get { return ffactor; } set { fillFactorIsSet = true; ffactor = value; } } /// /// A user-defined hash function; if no hash function is specified, a /// default hash function is used. /// /// /// /// Because no hash function performs equally well on all possible data, /// the user may find that the built-in hash function performs poorly /// with a particular data set. /// /// /// If the database already exists, HashFunction must be the same as /// that historically used to create the database or corruption can /// occur. /// /// public HashFunctionDelegate HashFunction; /// /// The duplicate data item comparison function. /// /// /// /// The comparison function is called whenever it is necessary to /// compare a data item specified by the application with a data item /// currently stored in the database. Setting DuplicateCompare implies /// setting to /// . /// /// /// If no comparison function is specified, the data items are compared /// lexically, with shorter data items collating before longer data /// items. /// /// /// If the database already exists when /// is called, the delegate /// must be the same as that historically used to create the database or /// corruption can occur. /// /// public EntryComparisonDelegate DuplicateCompare; internal bool nelemIsSet; private uint nelems; /// /// An estimate of the final size of the hash table. /// /// /// /// In order for the estimate to be used when creating the database, /// must also be set. If the estimate or fill /// factor are not set or are set too low, hash tables will still expand /// gracefully as keys are entered, although a slight performance /// degradation may be noticed. /// /// /// If the database already exists, this setting will be ignored. /// /// public uint TableSize { get { return nelems; } set { nelemIsSet = true; nelems = value; } } /// /// Instantiate a new SecondaryHashDatabaseConfig object /// public SecondaryHashDatabaseConfig( Database PrimaryDB, SecondaryKeyGenDelegate KeyGenFunc) : base(PrimaryDB, KeyGenFunc) { Duplicates = DuplicatesPolicy.NONE; Compare = null; fillFactorIsSet = false; nelemIsSet = false; DbType = DatabaseType.HASH; } } }