8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-01 20:00:38 +01:00
firebird-mirror/src/common/config/config.h

281 lines
8.1 KiB
C
Raw Normal View History

2002-11-03 17:26:12 +01:00
/*
* The contents of this file are subject to the Initial
* Developer's Public License Version 1.0 (the "License");
* you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
* http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
2002-11-03 17:26:12 +01:00
*
* Software distributed under the License is distributed AS IS,
* WITHOUT WARRANTY OF ANY KIND, either express or implied.
* See the License for the specific language governing rights
* and limitations under the License.
2002-11-03 17:26:12 +01:00
*
* The Original Code was created by Dmitry Yemanov
* for the Firebird Open Source RDBMS project.
2002-11-03 17:26:12 +01:00
*
* Copyright (c) 2002 Dmitry Yemanov <dimitr@users.sf.net>
* and all contributors signed below.
2002-11-03 17:26:12 +01:00
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
2002-11-03 17:26:12 +01:00
*/
#ifndef COMMON_CONFIG_H
#define COMMON_CONFIG_H
2002-11-03 17:26:12 +01:00
#include "../common/classes/fb_string.h"
2004-03-14 14:14:58 +01:00
#include "../jrd/os/path_utils.h"
2002-11-03 17:26:12 +01:00
/**
Since the original (isc.cpp) code wasn't able to provide powerful and
easy-to-use abilities to work with complex configurations, a decision
has been made to create a completely new one.
This class is a public interface for our generic configuration manager
and allows to access all configuration values by its getXXX() member
functions. Each of these functions corresponds to one and only one key
2008-12-05 01:56:15 +01:00
and has one input argument - default value, which is used when the
2002-11-03 17:26:12 +01:00
requested key is missing or the configuration file is not found. Supported
value datatypes are "const char*", "int" and "bool". Usual default values for
2002-11-03 17:26:12 +01:00
these datatypes are empty string, zero and false respectively. There are
two types of member functions - scalar and vector. The former ones return
single value of the given type. The latter ones return vector which
contains an ordered array of values.
There's one exception - getRootDirectory() member function, which returns
root pathname of the current installation. This value isn't stored in the
configuration file, but is managed by the code itself. But there's a way
to override this value via the configuration file as well.
2002-11-03 17:26:12 +01:00
To add new configuration item, you have to take the following steps:
1. Add key description to ConfigImpl::entries[] array (config.cpp)
2. Add logical key to Config::ConfigKey enumeration (config.h)
2002-11-03 17:26:12 +01:00
(note: both physical and logical keys MUST have the same ordinal
position within appropriate structures)
3. Add member function to Config class (config.h) and implement it
in config.cpp module.
**/
extern const char* GCPolicyCooperative;
extern const char* GCPolicyBackground;
extern const char* GCPolicyCombined;
extern const char* GCPolicyDefault;
extern const char* AmNative;
extern const char* AmTrusted;
extern const char* AmMixed;
enum AmCache {AM_UNKNOWN, AM_DISABLED, AM_ENABLED};
2002-11-03 17:26:12 +01:00
class Config
{
enum ConfigKey
{
KEY_ROOT_DIRECTORY, // 0
KEY_TEMP_BLOCK_SIZE, // 1
KEY_TEMP_CACHE_LIMIT, // 2
KEY_REMOTE_FILE_OPEN_ABILITY, // 3
KEY_GUARDIAN_OPTION, // 4
KEY_CPU_AFFINITY_MASK, // 5
2008-03-25 17:42:10 +01:00
KEY_TCP_REMOTE_BUFFER_SIZE, // 6
KEY_TCP_NO_NAGLE, // 7
KEY_DEFAULT_DB_CACHE_PAGES, // 8
KEY_CONNECTION_TIMEOUT, // 9
KEY_DUMMY_PACKET_INTERVAL, // 10
KEY_LOCK_MEM_SIZE, // 11
KEY_LOCK_GRANT_ORDER, // 12
KEY_LOCK_HASH_SLOTS, // 13
KEY_LOCK_ACQUIRE_SPINS, // 14
KEY_EVENT_MEM_SIZE, // 15
KEY_DEADLOCK_TIMEOUT, // 16
KEY_PRIORITY_SWITCH_DELAY, // 17
KEY_USE_PRIORITY_SCHEDULER, // 18
KEY_PRIORITY_BOOST, // 19
KEY_REMOTE_SERVICE_NAME, // 20
KEY_REMOTE_SERVICE_PORT, // 21
KEY_REMOTE_PIPE_NAME, // 22
KEY_IPC_NAME, // 23
KEY_MAX_UNFLUSHED_WRITES, // 24
KEY_MAX_UNFLUSHED_WRITE_TIME, // 25
KEY_PROCESS_PRIORITY_LEVEL, // 26
KEY_COMPLETE_BOOLEAN_EVALUATION, // 27
KEY_REMOTE_AUX_PORT, // 28
KEY_REMOTE_BIND_ADDRESS, // 29
KEY_EXTERNAL_FILE_ACCESS, // 30
KEY_DATABASE_ACCESS, // 31
KEY_UDF_ACCESS, // 32
KEY_TEMP_DIRECTORIES, // 33
KEY_BUGCHECK_ABORT, // 34
KEY_LEGACY_HASH, // 35
KEY_GC_POLICY, // 36
KEY_REDIRECTION, // 37
KEY_OLD_COLUMN_NAMING, // 38
KEY_AUTH_METHOD, // 39
KEY_DATABASE_GROWTH_INCREMENT, // 40
KEY_MAX_FILESYSTEM_CACHE, // 41
KEY_RELAXED_ALIAS_CHECKING, // 42
2009-02-01 23:10:12 +01:00
KEY_OLD_SET_CLAUSE_SEMANTICS, // 43
KEY_TRACE_CONFIG, // 44
KEY_MAX_TRACELOG_SIZE // 45
};
2002-11-03 17:26:12 +01:00
public:
2009-04-17 16:10:11 +02:00
// Interface to support command line root specification.
// This ugly solution was required to make it possible to specify root
// in command line to load firebird.conf from that root, though in other
// cases firebird.conf may be also used to specify root.
static void setRootDirectoryFromCommandLine(const Firebird::PathName& newRoot);
static const Firebird::PathName* getCommandLineRootDirectory();
2009-04-17 16:10:11 +02:00
// Installation directory
2005-05-28 00:45:31 +02:00
static const char* getInstallDirectory();
2009-04-17 16:10:11 +02:00
// Root directory of current installation
static const char* getRootDirectory();
2002-11-03 17:26:12 +01:00
2009-04-17 16:10:11 +02:00
// Allocation chunk for the temporary spaces
static int getTempBlockSize();
2002-11-03 17:26:12 +01:00
2009-04-17 16:10:11 +02:00
// Caching limit for the temporary data
static int getTempCacheLimit();
2002-11-03 17:26:12 +01:00
2009-04-17 16:10:11 +02:00
// Whether remote (NFS) files can be opened
static bool getRemoteFileOpenAbility();
2002-11-03 17:26:12 +01:00
2009-04-17 16:10:11 +02:00
// Startup option for the guardian
static int getGuardianOption();
2009-04-17 16:10:11 +02:00
// CPU affinity mask
static int getCpuAffinityMask();
2009-04-17 16:10:11 +02:00
// XDR buffer size
2002-12-06 13:34:43 +01:00
static int getTcpRemoteBufferSize();
2009-04-17 16:10:11 +02:00
// Disable Nagle algorithm
2002-12-06 13:34:43 +01:00
static bool getTcpNoNagle();
2002-12-06 22:12:59 +01:00
2009-04-17 16:10:11 +02:00
// Default database cache size
2002-12-06 22:12:59 +01:00
static int getDefaultDbCachePages();
2009-04-17 16:10:11 +02:00
// Connection timeout
2002-12-06 22:12:59 +01:00
static int getConnectionTimeout();
2009-04-17 16:10:11 +02:00
// Dummy packet interval
2002-12-06 22:12:59 +01:00
static int getDummyPacketInterval();
2002-12-07 14:27:12 +01:00
2009-04-17 16:10:11 +02:00
// Lock manager memory size
2002-12-07 14:27:12 +01:00
static int getLockMemSize();
2009-04-17 16:10:11 +02:00
// Lock manager grant order
2002-12-07 14:27:12 +01:00
static bool getLockGrantOrder();
2009-04-17 16:10:11 +02:00
// Lock manager hash slots
2002-12-07 14:27:12 +01:00
static int getLockHashSlots();
2009-04-17 16:10:11 +02:00
// Lock manager acquire spins
2003-06-19 20:13:26 +02:00
static int getLockAcquireSpins();
2002-12-07 14:27:12 +01:00
2009-04-17 16:10:11 +02:00
// Event manager memory size
2002-12-07 14:27:12 +01:00
static int getEventMemSize();
2009-04-17 16:10:11 +02:00
// Deadlock timeout
2002-12-07 14:27:12 +01:00
static int getDeadlockTimeout();
2009-04-17 16:10:11 +02:00
// Priority switch delay
static int getPrioritySwitchDelay();
2009-04-17 16:10:11 +02:00
// Use priority scheduler
static bool getUsePriorityScheduler();
2009-04-17 16:10:11 +02:00
// Priority boost
static int getPriorityBoost();
2003-01-15 15:10:07 +01:00
2009-04-17 16:10:11 +02:00
// Service name for remote protocols
2003-01-15 15:10:07 +01:00
static const char *getRemoteServiceName();
2009-04-17 16:10:11 +02:00
// Service port for INET
2004-01-13 14:38:36 +01:00
static unsigned short getRemoteServicePort();
2003-01-15 15:10:07 +01:00
2009-04-17 16:10:11 +02:00
// Pipe name for WNET
static const char *getRemotePipeName();
2003-01-15 15:10:07 +01:00
2009-04-17 16:10:11 +02:00
// Name for IPC-related objects
static const char *getIpcName();
2009-04-17 16:10:11 +02:00
// Unflushed writes number
static int getMaxUnflushedWrites();
2009-04-17 16:10:11 +02:00
// Unflushed write time
static int getMaxUnflushedWriteTime();
2003-02-16 19:58:56 +01:00
2009-04-17 16:10:11 +02:00
// Process priority level
2003-02-16 19:58:56 +01:00
static int getProcessPriorityLevel();
2009-04-17 16:10:11 +02:00
// Complete boolean evaluation
static bool getCompleteBooleanEvaluation();
2003-03-11 15:57:08 +01:00
2009-04-17 16:10:11 +02:00
// Port for event processing
2003-03-11 15:57:08 +01:00
static int getRemoteAuxPort();
2009-04-17 16:10:11 +02:00
// Server binding NIC address
2003-03-11 15:57:08 +01:00
static const char *getRemoteBindAddress();
2003-03-15 21:02:39 +01:00
2009-04-17 16:10:11 +02:00
// Directory list for external tables
static const char *getExternalFileAccess();
2009-04-17 16:10:11 +02:00
// Directory list for databases
static const char *getDatabaseAccess();
2003-05-01 13:35:15 +02:00
2009-04-17 16:10:11 +02:00
// Directory list for UDF libraries
static const char *getUdfAccess();
2003-05-01 13:35:15 +02:00
2009-04-17 16:10:11 +02:00
// Temporary directories list
2003-05-01 13:35:15 +02:00
static const char *getTempDirectories();
2009-04-17 16:10:11 +02:00
// Abort on BUGCHECK and structured exceptions
static bool getBugcheckAbort();
2009-04-17 16:10:11 +02:00
// Let use of des hash to verify passwords
static bool getLegacyHash();
2009-04-17 16:10:11 +02:00
// GC policy
static const char *getGCPolicy();
2009-04-17 16:10:11 +02:00
// Redirection
static bool getRedirection();
2009-04-17 16:10:11 +02:00
// Use old column naming rules (does not conform to SQL standard)
static bool getOldColumnNaming();
2009-04-17 16:10:11 +02:00
// Use native, trusted or mixed authentication
static const char *getAuthMethod();
static int getDatabaseGrowthIncrement();
static int getMaxFileSystemCache();
static bool getRelaxedAliasChecking();
static bool getOldSetClauseSemantics();
2009-02-01 23:10:12 +01:00
static const char *getAuditTraceConfigFile();
static int getMaxUserTraceLogSize();
2002-11-03 17:26:12 +01:00
};
2004-03-14 14:14:58 +01:00
namespace Firebird {
// Add appropriate file prefix.
inline void Prefix(PathName& result, const PathName& file)
{
PathUtils::concatPath(result, Config::getRootDirectory(), file);
}
} //namespace Firebird
#endif // COMMON_CONFIG_H