File system_parameter.c¶
File List > base > system_parameter.c
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* system_parameter.c - system parameters
*/
#ident "$Id$"
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#include <errno.h>
#include <time.h>
#if defined (WINDOWS)
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif /* !WINDOWS */
#include <sys/types.h>
#include <sys/stat.h>
#if !defined(WINDOWS)
#include <sys/param.h>
#endif
#include <assert.h>
#include <ctype.h>
#include "porting.h"
#include "chartype.h"
#include "deduplicate_key.h"
#include "misc_string.h"
#include "error_manager.h"
#include "storage_common.h"
#include "system_parameter.h"
#include "util_func.h"
#include "log_comm.h"
#include "memory_alloc.h"
#include "object_representation.h"
#include "environment_variable.h"
#include "intl_support.h"
#include "message_catalog.h"
#include "language_support.h"
#include "connection_defs.h"
#if defined (SERVER_MODE) || defined (SA_MODE)
#include "server_support.h"
#include "boot_sr.h"
#include "page_buffer.h"
#include "session.h"
#include "vacuum.h"
#include "log_manager.h"
#include "xserver_interface.h"
#include "double_write_buffer.hpp"
#endif /* SERVER_MODE */
#if defined (LINUX)
#include "stack_dump.h"
#endif
#include "ini_parser.h"
#if defined(WINDOWS)
#include "wintcp.h"
#else /* WINDOWS */
#include "tcp.h"
#endif /* WINDOWS */
#include "heartbeat.h"
#include "log_applier.h"
#include "utility.h"
#include "tz_support.h"
#include "perf_monitor.h"
#include "fault_injection.h"
#include "tde.h"
#if defined (SERVER_MODE)
#include "thread_worker_pool.hpp" // for cubthread::system_core_count
#include "thread_manager.hpp" // for thread_get_thread_entry_info
#endif // SERVER_MODE
#include "string_regex.hpp"
#if !defined (SERVER_MODE)
#include "optimizer.h"
#endif
#include "host_lookup.h"
// XXX: SHOULD BE THE LAST INCLUDE HEADER
#include "memory_wrapper.hpp"
#if defined (SUPPRESS_STRLEN_WARNING)
#define strlen(s1) ((int) strlen(s1))
#endif /* defined (SUPPRESS_STRLEN_WARNING) */
#define ER_LOG_FILE_DIR "server"
#if !defined (CS_MODE)
static const char sysprm_error_log_file[] = "cub_server.err";
#else /* CS_MODE */
static const char sysprm_error_log_file[] = "cub_client.err";
#endif /* CS_MODE */
static const char sysprm_conf_file_name[] = "cubrid.conf";
static const char sysprm_ha_conf_file_name[] = "cubrid_ha.conf";
/*
* System variable names
*/
// #region PRM_NAME_DEFINE
#define PRM_NAME_ER_LOG_DEBUG "er_log_debug"
#define PRM_NAME_ER_BTREE_DEBUG "er_btree_debug"
#define PRM_NAME_ER_LOG_LEVEL "error_log_level"
#define PRM_NAME_ER_LOG_WARNING "error_log_warning"
#define PRM_NAME_ER_EXIT_ASK "inquire_on_exit"
#define PRM_NAME_ER_LOG_SIZE "error_log_size"
#define PRM_NAME_ER_LOG_FILE "error_log"
#define PRM_NAME_IO_LOCKF_ENABLE "file_lock"
#define PRM_NAME_SR_NBUFFERS "sort_buffer_pages"
#define PRM_NAME_SORT_BUFFER_SIZE "sort_buffer_size"
#define PRM_NAME_PB_NBUFFERS "data_buffer_pages"
#define PRM_NAME_PAGE_BUFFER_SIZE "data_buffer_size"
#define PRM_NAME_PB_BUFFER_FLUSH_RATIO "data_buffer_flush_ratio"
#define PRM_NAME_HF_UNFILL_FACTOR "unfill_factor"
#define PRM_NAME_HF_MAX_BESTSPACE_ENTRIES "max_bestspace_entries"
#define PRM_NAME_BT_UNFILL_FACTOR "index_unfill_factor"
#define PRM_NAME_BT_OID_NBUFFERS "index_scan_oid_buffer_pages"
#define PRM_NAME_BT_OID_BUFFER_SIZE "index_scan_oid_buffer_size"
#define PRM_NAME_BT_INDEX_SCAN_OID_ORDER "index_scan_in_oid_order"
#define PRM_NAME_BOSR_MAXTMP_PAGES "temp_file_max_size_in_pages"
#define PRM_NAME_LK_TIMEOUT_MESSAGE_DUMP_LEVEL "lock_timeout_message_type"
#define PRM_NAME_LK_ESCALATION_AT "lock_escalation"
#define PRM_NAME_LK_ROLLBACK_ON_LOCK_ESCALATION "rollback_on_lock_escalation"
#define PRM_NAME_LK_TIMEOUT_SECS "lock_timeout_in_secs"
#define PRM_NAME_LK_TIMEOUT "lock_timeout"
#define PRM_NAME_LK_RUN_DEADLOCK_INTERVAL "deadlock_detection_interval_in_secs"
#define PRM_NAME_LOG_NBUFFERS "log_buffer_pages"
#define PRM_NAME_LOG_BUFFER_SIZE "log_buffer_size"
#define PRM_NAME_LOG_CHECKPOINT_NPAGES "checkpoint_every_npages"
#define PRM_NAME_LOG_CHECKPOINT_SIZE "checkpoint_every_size"
/* This parameter is stored in units of sec. */
#define PRM_NAME_LOG_CHECKPOINT_INTERVAL_SECS "checkpoint_interval_in_mins"
#define PRM_NAME_LOG_CHECKPOINT_INTERVAL "checkpoint_interval"
#define PRM_NAME_LOG_CHECKPOINT_SLEEP_MSECS "checkpoint_sleep_msecs"
#define PRM_NAME_LOG_BACKGROUND_ARCHIVING "background_archiving"
#define PRM_NAME_LOG_ISOLATION_LEVEL "isolation_level"
#define PRM_NAME_LOG_MEDIA_FAILURE_SUPPORT "media_failure_support"
#define PRM_NAME_LOG_SWEEP_CLEAN "log_file_sweep_clean"
#define PRM_NAME_COMMIT_ON_SHUTDOWN "commit_on_shutdown"
#define PRM_NAME_SHUTDOWN_WAIT_TIME_IN_SECS "shutdown_wait_time_in_secs"
#define PRM_NAME_CSQL_AUTO_COMMIT "csql_auto_commit"
#define PRM_NAME_WS_HASHTABLE_SIZE "initial_workspace_table_size"
#define PRM_NAME_WS_MEMORY_REPORT "workspace_memory_report"
#define PRM_NAME_GC_ENABLE "garbage_collection"
#define PRM_NAME_TCP_PORT_ID "cubrid_port_id"
#define PRM_NAME_TCP_CONNECTION_TIMEOUT "connection_timeout"
#define PRM_NAME_OPTIMIZATION_LEVEL "optimization_level"
#define PRM_NAME_QO_DUMP "qo_dump"
#define PRM_NAME_CSS_MAX_CLIENTS "max_clients"
#define PRM_NAME_THREAD_STACKSIZE "thread_stacksize"
#define PRM_NAME_CFG_DB_HOSTS "db_hosts"
#define PRM_NAME_RESET_TR_PARSER "reset_tr_parser_interval"
#define PRM_NAME_IO_BACKUP_NBUFFERS "backup_buffer_pages"
#define PRM_NAME_IO_BACKUP_MAX_VOLUME_SIZE "backup_volume_max_size_bytes"
#define PRM_NAME_IO_BACKUP_SLEEP_MSECS "backup_sleep_msecs"
#define PRM_NAME_MAX_PAGES_IN_TEMP_FILE_CACHE "max_pages_in_temp_file_cache"
#define PRM_NAME_MAX_ENTRIES_IN_TEMP_FILE_CACHE "max_entries_in_temp_file_cache"
#define PRM_NAME_PTHREAD_SCOPE_PROCESS "pthread_scope_process"
#define PRM_NAME_TEMP_MEM_BUFFER_PAGES "temp_file_memory_size_in_pages"
#define PRM_NAME_INDEX_SCAN_KEY_BUFFER_PAGES "index_scan_key_buffer_pages"
#define PRM_NAME_INDEX_SCAN_KEY_BUFFER_SIZE "index_scan_key_buffer_size"
#define PRM_NAME_DONT_REUSE_HEAP_FILE "dont_reuse_heap_file"
#define PRM_NAME_INSERT_MODE "insert_execution_mode"
#define PRM_NAME_LK_MAX_SCANID_BIT "max_index_scan_count"
#define PRM_NAME_HOSTVAR_LATE_BINDING "hostvar_late_binding"
#define PRM_NAME_HOSTVAR_PEEKING "hostvar_peeking"
#define PRM_NAME_ENABLE_HISTO "communication_histogram"
#define PRM_NAME_MUTEX_BUSY_WAITING_CNT "mutex_busy_waiting_cnt"
#define PRM_NAME_PB_NUM_LRU_CHAINS "num_LRU_chains"
#define PRM_NAME_PAGE_BG_FLUSH_INTERVAL_MSECS "page_flush_interval_in_msecs"
#define PRM_NAME_PAGE_BG_FLUSH_INTERVAL "page_flush_interval"
#define PRM_NAME_ADAPTIVE_FLUSH_CONTROL "adaptive_flush_control"
#define PRM_NAME_MAX_FLUSH_PAGES_PER_SECOND "max_flush_pages_per_second"
#define PRM_NAME_MAX_FLUSH_SIZE_PER_SECOND "max_flush_size_per_second"
#define PRM_NAME_PB_SYNC_ON_NFLUSH "sync_on_nflush"
#define PRM_NAME_PB_SYNC_ON_FLUSH_SIZE "sync_on_flush_size"
#define PRM_NAME_PB_DEBUG_PAGE_VALIDATION_LEVEL "page_validation_level"
#define PRM_NAME_ORACLE_STYLE_OUTERJOIN "oracle_style_outerjoin"
#define PRM_NAME_COMPAT_MODE "compat_mode"
#define PRM_NAME_ANSI_QUOTES "ansi_quotes"
#define PRM_NAME_DEFAULT_WEEK_FORMAT "default_week_format"
#define PRM_NAME_TEST_MODE "test_mode"
#define PRM_NAME_ONLY_FULL_GROUP_BY "only_full_group_by"
#define PRM_NAME_PIPES_AS_CONCAT "pipes_as_concat"
#define PRM_NAME_MYSQL_TRIGGER_CORRELATION_NAMES "mysql_trigger_correlation_names"
#define PRM_NAME_REQUIRE_LIKE_ESCAPE_CHARACTER "require_like_escape_character"
#define PRM_NAME_NO_BACKSLASH_ESCAPES "no_backslash_escapes"
#define PRM_NAME_GROUP_CONCAT_MAX_LEN "group_concat_max_len"
#define PRM_NAME_STRING_MAX_SIZE_BYTES "string_max_size_bytes"
#define PRM_NAME_ADD_COLUMN_UPDATE_HARD_DEFAULT "add_column_update_hard_default"
#define PRM_NAME_RETURN_NULL_ON_FUNCTION_ERRORS "return_null_on_function_errors"
#define PRM_NAME_PLUS_AS_CONCAT "plus_as_concat"
#define PRM_NAME_ALTER_TABLE_CHANGE_TYPE_STRICT "alter_table_change_type_strict"
#define PRM_NAME_COMPACTDB_PAGE_RECLAIM_ONLY "compactdb_page_reclaim_only"
#define PRM_NAME_LIKE_TERM_SELECTIVITY "like_term_selectivity"
#define PRM_NAME_MAX_OUTER_CARD_OF_IDXJOIN "max_outer_card_of_idxjoin"
#define PRM_NAME_ORACLE_STYLE_EMPTY_STRING "oracle_style_empty_string"
#define PRM_NAME_SUPPRESS_FSYNC "suppress_fsync"
#define PRM_NAME_CALL_STACK_DUMP_ON_ERROR "call_stack_dump_on_error"
#define PRM_NAME_CALL_STACK_DUMP_ACTIVATION "call_stack_dump_activation_list"
#define PRM_NAME_CALL_STACK_DUMP_DEACTIVATION "call_stack_dump_deactivation_list"
#define PRM_NAME_COMPAT_NUMERIC_DIVISION_SCALE "compat_numeric_division_scale"
#define PRM_NAME_DBFILES_PROTECT "dbfiles_protect"
#define PRM_NAME_AUTO_RESTART_SERVER "auto_restart_server"
#define PRM_NAME_XASL_CACHE_MAX_ENTRIES "max_plan_cache_entries"
#define PRM_NAME_XASL_CACHE_MAX_CLONES "max_plan_cache_clones"
#define PRM_NAME_XASL_CACHE_TIMEOUT "plan_cache_timeout"
#define PRM_NAME_XASL_CACHE_LOGGING "plan_cache_logging"
#define PRM_NAME_FILTER_PRED_MAX_CACHE_ENTRIES "max_filter_pred_cache_entries"
#define PRM_NAME_FILTER_PRED_MAX_CACHE_CLONES "max_filter_pred_cache_clones"
#define PRM_NAME_LIST_QUERY_CACHE_MODE "query_cache_mode"
#define PRM_NAME_LIST_MAX_QUERY_CACHE_ENTRIES "max_query_cache_entries"
#define PRM_NAME_LIST_MAX_QUERY_CACHE_PAGES "query_cache_size_in_pages"
#define PRM_NAME_USE_ORDERBY_SORT_LIMIT "use_orderby_sort_limit"
#define PRM_NAME_REPLICATION_MODE "replication"
#define PRM_NAME_HA_MODE "ha_mode"
#define PRM_NAME_HA_MODE_FOR_SA_UTILS_ONLY "ha_mode_for_sa_utils_only"
#define PRM_NAME_HA_SERVER_STATE "ha_server_state"
#define PRM_NAME_HA_LOG_APPLIER_STATE "ha_log_applier_state"
#define PRM_NAME_HA_NODE_LIST "ha_node_list"
#define PRM_NAME_HA_REPLICA_LIST "ha_replica_list"
#define PRM_NAME_HA_DB_LIST "ha_db_list"
#define PRM_NAME_HA_COPY_LOG_BASE "ha_copy_log_base"
#define PRM_NAME_HA_COPY_SYNC_MODE "ha_copy_sync_mode"
#define PRM_NAME_HA_APPLY_MAX_MEM_SIZE "ha_apply_max_mem_size"
#define PRM_NAME_HA_PORT_ID "ha_port_id"
#define PRM_NAME_HA_INIT_TIMER_IN_MSECS "ha_init_timer_in_msec"
#define PRM_NAME_HA_HEARTBEAT_INTERVAL_IN_MSECS "ha_heartbeat_interval_in_msecs"
#define PRM_NAME_HA_CALC_SCORE_INTERVAL_IN_MSECS "ha_calc_score_interval_in_msecs"
#define PRM_NAME_HA_FAILOVER_WAIT_TIME_IN_MSECS "ha_failover_wait_time_in_msecs"
#define PRM_NAME_HA_PROCESS_START_CONFIRM_INTERVAL_IN_MSECS "ha_process_start_confirm_interval_in_msecs"
#define PRM_NAME_HA_PROCESS_DEREG_CONFIRM_INTERVAL_IN_MSECS "ha_process_dereg_confirm_interval_in_msecs"
#define PRM_NAME_HA_MAX_PROCESS_START_CONFIRM "ha_max_process_start_confirm"
#define PRM_NAME_HA_MAX_PROCESS_DEREG_CONFIRM "ha_max_process_dereg_confirm"
#define PRM_NAME_HA_UNACCEPTABLE_PROC_RESTART_TIMEDIFF "ha_unacceptable_proc_restart_timediff"
#define PRM_NAME_HA_CHANGEMODE_INTERVAL_IN_MSEC "ha_changemode_interval_in_msecs"
#define PRM_NAME_HA_MAX_HEARTBEAT_GAP "ha_max_heartbeat_gap"
#define PRM_NAME_HA_PING_HOSTS "ha_ping_hosts"
#define PRM_NAME_HA_TCP_PING_HOSTS "ha_tcp_ping_hosts"
#define PRM_NAME_HA_PING_TIMEOUT "ha_ping_timeout"
#define PRM_NAME_HA_APPLYLOGDB_RETRY_ERROR_LIST "ha_applylogdb_retry_error_list"
#define PRM_NAME_HA_APPLYLOGDB_IGNORE_ERROR_LIST "ha_applylogdb_ignore_error_list"
#define PRM_NAME_HA_APPLYLOGDB_LOG_WAIT_TIME_IN_SECS "ha_applylogdb_log_wait_time_in_secs"
#define PRM_NAME_HA_SQL_LOGGING "ha_enable_sql_logging"
#define PRM_NAME_HA_SQL_LOG_MAX_SIZE_IN_MB "ha_sql_log_max_size_in_mbytes"
#define PRM_NAME_HA_SQL_LOG_PATH "ha_sql_log_path"
#define PRM_NAME_HA_SQL_LOG_MAX_COUNT "ha_sql_log_max_count"
#define PRM_NAME_RECOVERY_REDO_MINIMUM_JOB_COUNT "recovery_redo_minimum_job_count"
#define PRM_NAME_RECOVERY_REDO_JOB_PERIOD_IN_SECS "recovery_redo_job_period_in_secs"
#define PRM_NAME_HA_COPY_LOG_MAX_ARCHIVES "ha_copy_log_max_archives"
#define PRM_NAME_HA_COPY_LOG_TIMEOUT "ha_copy_log_timeout"
#define PRM_NAME_HA_REPLICA_DELAY "ha_replica_delay"
#define PRM_NAME_HA_REPLICA_TIME_BOUND "ha_replica_time_bound"
#define PRM_NAME_HA_DELAY_LIMIT "ha_delay_limit"
#define PRM_NAME_HA_DELAY_LIMIT_DELTA "ha_delay_limit_delta"
#define PRM_NAME_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL_IN_MSECS "ha_applylogdb_max_commit_interval_in_msecs"
#define PRM_NAME_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL "ha_applylogdb_max_commit_interval"
#define PRM_NAME_HA_CHECK_DISK_FAILURE_INTERVAL_IN_SECS "ha_check_disk_failure_interval"
#define PRM_NAME_JAVA_STORED_PROCEDURE "java_stored_procedure"
#define PRM_NAME_STORED_PROCEDURE "stored_procedure"
#define PRM_NAME_JAVA_STORED_PROCEDURE_PORT "java_stored_procedure_port"
#define PRM_NAME_STORED_PROCEDURE_PORT "stored_procedure_port"
#define PRM_NAME_JAVA_STORED_PROCEDURE_JVM_OPTIONS "java_stored_procedure_jvm_options"
#define PRM_NAME_STORED_PROCEDURE_JVM_OPTIONS "stored_procedure_vm_options"
#define PRM_NAME_JAVA_STORED_PROCEDURE_DEBUG "java_stored_procedure_debug"
#define PRM_NAME_STORED_PROCEDURE_DEBUG "stored_procedure_debug"
#define PRM_NAME_JAVA_STORED_PROCEDURE_UDS "java_stored_procedure_uds"
#define PRM_NAME_STORED_PROCEDURE_UDS "stored_procedure_uds"
#define PRM_NAME_ALLOW_TRUNCATED_STRING "allow_truncated_string"
#define PRM_NAME_COMPAT_PRIMARY_KEY "compat_primary_key"
#define PRM_NAME_INTL_MBS_SUPPORT "intl_mbs_support"
#define PRM_NAME_LOG_HEADER_FLUSH_INTERVAL "log_header_flush_interval_in_secs"
#define PRM_NAME_LOG_ASYNC_COMMIT "async_commit"
#define PRM_NAME_LOG_GROUP_COMMIT_INTERVAL_MSECS "group_commit_interval_in_msecs"
#define PRM_NAME_LOG_BG_FLUSH_INTERVAL_MSECS "log_flush_interval_in_msecs"
#define PRM_NAME_LOG_BG_FLUSH_NUM_PAGES "log_flush_every_npages"
#define PRM_NAME_LOG_COMPRESS "log_compress"
#define PRM_NAME_BLOCK_NOWHERE_STATEMENT "block_nowhere_statement"
#define PRM_NAME_BLOCK_DDL_STATEMENT "block_ddl_statement"
#define PRM_NAME_SINGLE_BYTE_COMPARE "single_byte_compare"
#define PRM_NAME_CSQL_HISTORY_NUM "csql_history_num"
#define PRM_NAME_LOG_TRACE_DEBUG "log_trace_debug"
#define PRM_NAME_DL_FORK "dl_fork"
#define PRM_NAME_ER_PRODUCTION_MODE "error_log_production_mode"
#define PRM_NAME_ER_STOP_ON_ERROR "stop_on_error"
#define PRM_NAME_TCP_RCVBUF_SIZE "tcp_rcvbuf_size"
#define PRM_NAME_TCP_SNDBUF_SIZE "tcp_sndbuf_size"
#define PRM_NAME_TCP_NODELAY "tcp_nodelay"
#define PRM_NAME_TCP_KEEPALIVE "tcp_keepalive"
#define PRM_NAME_CSQL_SINGLE_LINE_MODE "csql_single_line_mode"
#define PRM_NAME_XASL_DEBUG_DUMP "xasl_debug_dump"
#define PRM_NAME_LOG_MAX_ARCHIVES "log_max_archives"
#define PRM_NAME_FORCE_REMOVE_LOG_ARCHIVES "force_remove_log_archives"
#define PRM_NAME_REMOVE_LOG_ARCHIVES_INTERVAL "remove_log_archive_interval_in_secs"
#define PRM_NAME_LOG_NO_LOGGING "no_logging"
#define PRM_NAME_UNLOADDB_IGNORE_ERROR "unload_ignore_error"
#define PRM_NAME_UNLOADDB_LOCK_TIMEOUT "unload_lock_timeout"
#define PRM_NAME_LOADDB_FLUSH_INTERVAL "load_flush_interval"
#define PRM_NAME_IO_TEMP_VOLUME_PATH "temp_volume_path"
#define PRM_NAME_TDE_KEYS_FILE_PATH "tde_keys_file_path"
#define PRM_NAME_IO_VOLUME_EXT_PATH "volume_extension_path"
#define PRM_NAME_UNIQUE_ERROR_KEY_VALUE "print_key_value_on_unique_error"
#define PRM_NAME_USE_SYSTEM_MALLOC "use_system_malloc"
#define PRM_NAME_EVENT_HANDLER "event_handler"
#define PRM_NAME_EVENT_ACTIVATION "event_activation_list"
#define PRM_NAME_READ_ONLY_MODE "read_only"
#define PRM_NAME_MNT_WAITING_THREAD "monitor_waiting_thread"
#define PRM_NAME_MNT_STATS_THRESHOLD "monitor_stats_threshold"
#define PRM_NAME_SERVICE_SERVICE_LIST "service::service"
#define PRM_NAME_SERVICE_SERVER_LIST "service::server"
#define PRM_NAME_SESSION_STATE_TIMEOUT "session_state_timeout"
#define PRM_NAME_MULTI_RANGE_OPT_LIMIT "multi_range_optimization_limit"
#define PRM_NAME_ACCESS_IP_CONTROL "access_ip_control"
#define PRM_NAME_ACCESS_IP_CONTROL_FILE "access_ip_control_file"
#define PRM_NAME_DB_VOLUME_SIZE "db_volume_size"
#define PRM_NAME_LOG_VOLUME_SIZE "log_volume_size"
#define PRM_NAME_INTL_NUMBER_LANG "intl_number_lang"
#define PRM_NAME_INTL_DATE_LANG "intl_date_lang"
#define PRM_NAME_UNICODE_INPUT_NORMALIZATION "unicode_input_normalization"
#define PRM_NAME_UNICODE_OUTPUT_NORMALIZATION "unicode_output_normalization"
#define PRM_NAME_INTL_CHECK_INPUT_STRING "intl_check_input_string"
#define PRM_NAME_CHECK_PEER_ALIVE "check_peer_alive"
#define PRM_NAME_SQL_TRACE_EXECUTION_PLAN "sql_trace_execution_plan"
#define PRM_NAME_SQL_TRACE_SLOW_MSECS "sql_trace_slow_msecs"
#define PRM_NAME_SQL_TRACE_SLOW "sql_trace_slow"
#define PRM_NAME_LOG_TRACE_FLUSH_TIME "log_trace_flush_time"
#define PRM_NAME_INTL_COLLATION "intl_collation"
#define PRM_NAME_GENERIC_VOL_PREALLOC_SIZE "generic_vol_prealloc_size"
#define PRM_NAME_SORT_LIMIT_MAX_COUNT "sort_limit_max_count"
#define PRM_NAME_SQL_TRACE_IOREADS "sql_trace_ioread_pages"
/* For query profile. Internal use only. */
#define PRM_NAME_QUERY_TRACE "query_trace"
#define PRM_NAME_QUERY_TRACE_FORMAT "query_trace_format"
#define PRM_NAME_MAX_RECURSION_SQL_DEPTH "max_recursion_sql_depth"
#define PRM_NAME_UPDATE_USE_ATTRIBUTE_REFERENCES "update_use_attribute_references"
#define PRM_NAME_PB_AOUT_RATIO "data_aout_ratio"
#define PRM_NAME_MAX_AGG_HASH_SIZE "max_agg_hash_size"
#define PRM_NAME_AGG_HASH_RESPECT_ORDER "agg_hash_respect_order"
#define PRM_NAME_USE_BTREE_FENCE_KEY "use_btree_fence_key"
#define PRM_NAME_OPTIMIZER_ENABLE_MERGE_JOIN "optimizer_enable_merge_join"
#define PRM_NAME_MAX_HASH_LIST_SCAN_SIZE "max_hash_list_scan_size"
#define PRM_NAME_OPTIMIZER_RESERVE_02 "optimizer_reserve_02"
#define PRM_NAME_OPTIMIZER_RESERVE_03 "optimizer_reserve_03"
#define PRM_NAME_OPTIMIZER_RESERVE_04 "optimizer_reserve_04"
#define PRM_NAME_OPTIMIZER_RESERVE_05 "optimizer_reserve_05"
#define PRM_NAME_OPTIMIZER_RESERVE_06 "optimizer_reserve_06"
#define PRM_NAME_OPTIMIZER_RESERVE_07 "optimizer_reserve_07"
#define PRM_NAME_OPTIMIZER_RESERVE_08 "optimizer_reserve_08"
#define PRM_NAME_OPTIMIZER_RESERVE_09 "optimizer_reserve_09"
#define PRM_NAME_OPTIMIZER_RESERVE_10 "optimizer_reserve_10"
#define PRM_NAME_OPTIMIZER_RESERVE_11 "optimizer_reserve_11"
#define PRM_NAME_OPTIMIZER_RESERVE_12 "optimizer_reserve_12"
#define PRM_NAME_OPTIMIZER_RESERVE_13 "optimizer_reserve_13"
#define PRM_NAME_OPTIMIZER_RESERVE_14 "optimizer_reserve_14"
#define PRM_NAME_OPTIMIZER_RESERVE_15 "optimizer_reserve_15"
#define PRM_NAME_OPTIMIZER_RESERVE_16 "optimizer_reserve_16"
#define PRM_NAME_OPTIMIZER_RESERVE_17 "optimizer_reserve_17"
#define PRM_NAME_OPTIMIZER_RESERVE_18 "optimizer_reserve_18"
#define PRM_NAME_OPTIMIZER_RESERVE_19 "optimizer_reserve_19"
#define PRM_NAME_OPTIMIZER_RESERVE_20 "optimizer_reserve_20"
#define PRM_NAME_HA_REPL_ENABLE_SERVER_SIDE_UPDATE "ha_repl_enable_server_side_update"
#define PRM_NAME_PB_LRU_HOT_RATIO "lru_hot_ratio"
#define PRM_NAME_PB_LRU_BUFFER_RATIO "lru_buffer_ratio"
#define PRM_NAME_VACUUM_MASTER_WAKEUP_INTERVAL "vacuum_master_interval_in_msecs"
#define PRM_NAME_VACUUM_LOG_BLOCK_PAGES "vacuum_log_block_pages"
#define PRM_NAME_VACUUM_WORKER_COUNT "vacuum_worker_count"
#define PRM_NAME_DISABLE_VACUUM "vacuum_disable"
#define PRM_NAME_SA_MODE_AUTO_VACUUM "sa_mode_auto_vacuum"
#define PRM_NAME_ER_LOG_VACUUM "er_log_vacuum"
#define PRM_NAME_LOG_BTREE_OPS "log_btree_operations"
#define PRM_NAME_OBJECT_PRINT_FORMAT_OID "print_object_as_oid"
#define PRM_NAME_TIMEZONE "timezone"
#define PRM_NAME_SERVER_TIMEZONE "server_timezone"
#define PRM_NAME_TZ_LEAP_SECOND_SUPPORT "tz_leap_second_support"
#define PRM_NAME_OPTIMIZER_ENABLE_AGGREGATE_OPTIMIZATION "optimizer_enable_aggregate_optimization"
#define PRM_NAME_VACUUM_PREFETCH_LOG_NBUFFERS "vacuum_prefetch_log_pages"
#define PRM_NAME_VACUUM_PREFETCH_LOG_BUFFER_SIZE "vacuum_prefetch_log_buffer_size"
#define PRM_NAME_VACUUM_PREFETCH_LOG_MODE "vacuum_prefetch_log_mode"
#define PRM_NAME_PB_NEIGHBOR_FLUSH_NONDIRTY "data_buffer_neighbor_flush_nondirty"
#define PRM_NAME_PB_NEIGHBOR_FLUSH_PAGES "data_buffer_neighbor_flush_pages"
#define PRM_NAME_FAULT_INJECTION_IDS "fault_injection_ids"
#define PRM_NAME_FAULT_INJECTION_TEST "fault_injection_test"
#define PRM_NAME_FAULT_INJECTION_ACTION_PREFER_ABORT_TO_EXIT "fault_injection_action_prefer_abort_to_exit"
#define PRM_NAME_HA_REPL_FILTER_TYPE "ha_repl_filter_type"
#define PRM_NAME_HA_REPL_FILTER_FILE "ha_repl_filter_file"
#define PRM_NAME_COMPENSATE_DEBUG "compensate_debug"
#define PRM_NAME_POSTPONE_DEBUG "postpone_debug"
#define PRM_NAME_CLIENT_CLASS_CACHE_DEBUG "client_class_cache_debug"
#define PRM_NAME_EXAMINE_CLIENT_CACHED_LOCKS "examine_client_cached_locks"
#define PRM_NAME_PB_SEQUENTIAL_VICTIM_FLUSH "data_buffer_sequential_victim_flush"
#define PRM_NAME_LOG_UNIQUE_STATS "log_unique_stats"
#define PRM_NAME_LOGPB_LOGGING_DEBUG "logpb_logging_debug"
#define PRM_NAME_FORCE_RESTART_TO_SKIP_RECOVERY "force_restart_to_skip_recovery"
#define PRM_NAME_ENABLE_STRING_COMPRESSION "enable_string_compression"
#define PRM_NAME_XASL_CACHE_TIME_THRESHOLD_IN_MINUTES "xasl_cache_time_threshold_in_minutes"
#define PRM_NAME_EXTENDED_STATISTICS_ACTIVATION "extended_statistics_activation"
#define PRM_NAME_DISK_LOGGING "disk_logging_debug"
#define PRM_NAME_FILE_LOGGING "file_logging_debug"
#define PRM_NAME_PB_NUM_PRIVATE_CHAINS "num_private_chains"
#define PRM_NAME_PB_MONITOR_LOCKS "pgbuf_monitor_locks"
#define PRM_NAME_PB_MAX_DEPTH_OF_SEARCHING_FOR_VICTIMS_IN_LRU_LIST "max_depth_of_searching_for_victims_in_lru_list"
#define PRM_NAME_CTE_MAX_RECURSIONS "cte_max_recursions"
#define PRM_NAME_DWB_SIZE "double_write_buffer_size"
#define PRM_NAME_DWB_BLOCKS "double_write_buffer_blocks"
#define PRM_NAME_ENABLE_DWB_FLUSH_THREAD "double_write_buffer_enable_flush_thread"
#define PRM_NAME_DWB_LOGGING "double_write_buffer_logging"
#define PRM_NAME_JSON_LOG_ALLOCATIONS "json_log_allocations"
#define PRM_NAME_JSON_MAX_ARRAY_IDX "json_max_array_idx"
#define PRM_NAME_CONNECTION_LOGGING "connection_logging"
#define PRM_NAME_THREAD_LOGGING_FLAG "thread_logging_flag"
#define PRM_NAME_LOG_QUERY_LISTS "log_query_lists"
#define PRM_NAME_THREAD_CONNECTION_POOLING "thread_connection_pooling"
#define PRM_NAME_THREAD_CONNECTION_TIMEOUT_SECONDS "thread_connection_timeout_seconds"
#define PRM_NAME_THREAD_WORKER_POOLING "thread_worker_pooling"
#define PRM_NAME_THREAD_WORKER_TIMEOUT_SECONDS "thread_worker_timeout_seconds"
#define PRM_NAME_DATA_FILE_ADVISE "data_file_os_advise"
#define PRM_NAME_DEBUG_LOG_ARCHIVES "debug_log_archives"
#define PRM_NAME_DEBUG_ES "debug_external_storage"
#define PRM_NAME_DEBUG_BESTSPACE "debug_heap_bestspace"
#define PRM_NAME_DEBUG_LOG_WRITER "debug_log_writer"
#define PRM_NAME_DEBUG_AUTOCOMMIT "debug_autocommit"
#define PRM_NAME_DEBUG_REPLICATION_DATA "debug_replication_data"
#define PRM_NAME_TRACK_REQUESTS "track_client_requests"
#define PRM_NAME_LOG_PGBUF_VICTIM_FLUSH "log_pgbuf_victim_flush"
#define PRM_NAME_LOG_CHKPT_DETAILED "detailed_checkpoint_logging"
#define PRM_NAME_IB_TASK_MEMSIZE "index_load_task_memsize"
#define PRM_NAME_STATS_ON "stats_on"
#define PRM_NAME_LOADDB_WORKER_COUNT "loaddb_worker_count"
#define PRM_NAME_PERF_TEST_MODE "perf_test_mode"
#define PRM_NAME_REPR_CACHE_LOG "er_log_repr_cache"
#define PRM_NAME_ENABLE_NEW_LFHASH "new_lfhash"
#define PRM_NAME_HEAP_INFO_CACHE_LOGGING "heap_info_cache_logging"
#define PRM_NAME_TDE_DEFAULT_ALGORITHM "tde_default_algorithm"
#define PRM_NAME_ER_LOG_TDE "er_log_tde"
#define PRM_NAME_GENERAL_RESERVE_01 "general_reserve_01"
#define PRM_NAME_TB_DEFAULT_REUSE_OID "create_table_reuseoid"
#define PRM_NAME_USE_STAT_ESTIMATION "use_stat_estimation"
#define PRM_NAME_IGNORE_TRAILING_SPACE "ignore_trailing_space"
#define PRM_NAME_DDL_AUDIT_LOG "ddl_audit_log"
#define PRM_NAME_DDL_AUDIT_LOG_SIZE "ddl_audit_log_size"
#define PRM_NAME_SUPPLEMENTAL_LOG "supplemental_log"
#define PRM_NAME_CDC_LOGGING_DEBUG "cdc_logging_debug"
#define PRM_NAME_RECOVERY_PROGRESS_LOGGING_INTERVAL "recovery_progress_logging_interval"
#define PRM_NAME_FIRST_LOG_PAGEID "first_log_pageid"
#define PRM_NAME_TASK_GROUP "task_group"
#define PRM_NAME_FLASHBACK_TIMEOUT "flashback_timeout"
#define PRM_NAME_FLASHBACK_MAX_TRANSACTION "flashback_max_transaction"
#define PRM_NAME_FLASHBACK_WIN_SIZE "flashback_win_size"
#define PRM_NAME_USE_USER_HOSTS "use_user_hosts"
#define PRM_NAME_QMGR_MAX_QUERY_PER_TRAN "max_query_per_tran"
#define PRM_NAME_REGEXP_ENGINE "regexp_engine"
#define PRM_NAME_ORACLE_COMPAT_NUMBER_BEHAVIOR "oracle_compat_number_behavior"
#define PRM_NAME_PL_TRANSACTION_CONTROL "pl_transaction_control"
#define PRM_NAME_PAGE_LATCH_TIMEOUT "page_latch_timeout"
#define PRM_VALUE_DEFAULT "DEFAULT"
#define PRM_VALUE_MAX "MAX"
#define PRM_VALUE_MIN "MIN"
#define PRM_NAME_STATDUMP_FORCE_ADD_INT_MAX "statdump_force_add_int_max"
#define PRM_NAME_VACUUM_OVFP_CHECK_DURATION "vacuum_ovfp_check_duration"
#define PRM_NAME_VACUUM_OVFP_CHECK_THRESHOLD "vacuum_ovfp_check_threshold"
#define PRM_NAME_DEDUPLICATE_KEY_LEVEL "deduplicate_key_level"
#define PRM_NAME_PRINT_INDEX_DETAIL "print_index_detail"
#define PRM_NAME_MAX_SUBQUERY_CACHE_SIZE "max_subquery_cache_size"
#define PRM_NAME_ORACLE_STYLE_DIVIDE "oracle_style_divide"
#define PRM_NAME_ENABLE_MEMORY_MONITORING "enable_memory_monitoring"
#define PRM_NAME_STORED_PROCEDURE_DUMP_ICODE "stored_procedure_dump_icode"
#define PRM_NAME_STORED_PROCEDURE_RETURN_NUMERIC_SIZE "stored_procedure_return_numeric_size"
#define PRM_NAME_DBLINK_AUTO_COMMIT "dblink_auto_commit"
#define PRM_NAME_ENABLE_JVM_HEAP_DUMP "enable_jvm_heap_dump"
#define PRM_NAME_PARALLELISM "parallelism"
#define PRM_NAME_MAX_PARALLEL_WORKERS "max_parallel_workers"
#define PRM_NAME_PARALLEL_HEAP_SCAN_PAGE_THRESHOLD "parallel_heap_scan_page_threshold"
#define PRM_NAME_PARALLEL_HASH_JOIN_PAGE_THRESHOLD "parallel_hash_join_page_threshold"
#define PRM_NAME_PARALLEL_SORT_PAGE_THRESHOLD "parallel_sort_page_threshold"
#define PRM_NAME_TCP_KEEPALIVE_IDLE "tcp_keepalive_idle"
#define PRM_NAME_TCP_KEEPALIVE_INTERVAL "tcp_keepalive_interval"
#define PRM_NAME_TCP_KEEPALIVE_COUNT "tcp_keepalive_count"
#define PRM_NAME_TASK_WORKER "task_worker"
#define PRM_NAME_CSS_MAX_CONNECTION_WORKER "max_connection_worker"
#define PRM_NAME_CSS_MIN_CONNECTION_WORKER "min_connection_worker"
#define PRM_NAME_CSS_AUTO_SCALING_WINDOW_SIZE "auto_scaling_window_size"
#define PRM_NAME_CSS_RECV_BUDGET_PER_CONNECTION "recv_budget_per_connection"
#define PRM_NAME_CSS_SEND_BUDGET_PER_CONNECTION "send_budget_per_connection"
#define PRM_NAME_MEMOIZE_MEMORY_LIMIT "memoize_memory_limit"
#define PRM_NAME_LOG_POSTPONE_CACHE_SIZE "postpone_cache_size"
// #endregion
/*
* Note about ERROR_LIST and INTEGER_LIST type
* ERROR_LIST type is an array of bool type with the size of -(ER_LAST_ERROR)
* INTEGER_LIST type is an array of int type where the first element is
* the size of the array. The max size of INTEGER_LIST is 255.
*/
/*
* Bit masks for flag representing status words
*/
/*
* Macros to call functions
*/
#define PRM_ADJUST_FOR_SET_BIGINT_TO_INTEGER(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (int)); \
assert (sizeof (*(in_val)) == sizeof (UINT64)); \
*(err) = (SYSPRM_ERR) (*((prm)->set_dup)) ((void *) (out_val), PRM_INTEGER, (void *) (in_val), PRM_BIGINT); \
} \
while (0)
#define PRM_ADJUST_FOR_SET_BIGINT_TO_FLOAT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (float)); \
assert (sizeof (*(in_val)) == sizeof (UINT64)); \
*(err) = (SYSPRM_ERR) (*((prm)->set_dup)) ((void *) (out_val), PRM_FLOAT, (void *) (in_val), PRM_BIGINT); \
} \
while (0)
#define PRM_ADJUST_FOR_SET_INTEGER_TO_INTEGER(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (int)); \
assert (sizeof (*(in_val)) == sizeof (int)); \
*(err) = (SYSPRM_ERR) (*((prm)->set_dup)) ((void *) (out_val), PRM_INTEGER, (void *) (in_val), PRM_INTEGER);\
} \
while (0)
#define PRM_ADJUST_FOR_SET_FLOAT_TO_FLOAT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (float)); \
assert (sizeof (*(in_val)) == sizeof (float)); \
*(err) = (SYSPRM_ERR) (*((prm)->set_dup)) ((void *) (out_val), PRM_FLOAT, (void *) (in_val), PRM_FLOAT); \
} \
while (0)
#define PRM_ADJUST_FOR_SET_BIGINT_TO_BIGINT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (UINT64)); \
assert (sizeof (*(in_val)) == sizeof (UINT64)); \
*(err) = (*((prm)->set_dup)) ((void *) (out_val), PRM_BIGINT, (void *) (in_val), PRM_BIGINT); \
} \
while (0)
#define PRM_ADJUST_FOR_GET_INTEGER_TO_BIGINT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (UINT64)); \
assert (sizeof (*(in_val)) == sizeof (int)); \
*(err) = (SYSPRM_ERR) (*((prm)->get_dup)) ((void *) (out_val), PRM_BIGINT, (void *) (in_val), PRM_INTEGER); \
} \
while (0)
#define PRM_ADJUST_FOR_GET_FLOAT_TO_BIGINT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (UINT64)); \
assert (sizeof (*(in_val)) == sizeof (float)); \
*(err) = (SYSPRM_ERR) (*((prm)->get_dup)) ((void *) (out_val), PRM_BIGINT, (void *) (in_val), PRM_FLOAT); \
} \
while (0)
#define PRM_ADJUST_FOR_GET_INTEGER_TO_INTEGER(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL);\
assert (sizeof (*(out_val)) == sizeof (int)); \
assert (sizeof (*(in_val)) == sizeof (int)); \
*(err) = (SYSPRM_ERR) (*((prm)->get_dup)) ((void *) (out_val), PRM_INTEGER, (void *) (in_val), PRM_INTEGER); \
} \
while (0)
#define PRM_ADJUST_FOR_GET_FLOAT_TO_FLOAT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (float)); \
assert (sizeof (*(in_val)) == sizeof (float)); \
*(err) = (SYSPRM_ERR) (*((prm)->get_dup)) ((void *) (out_val), PRM_FLOAT, (void *) (in_val), PRM_FLOAT); \
} \
while (0)
#define PRM_ADJUST_FOR_GET_BIGINT_TO_BIGINT(prm,out_val,in_val,err) \
do \
{ \
assert ((prm) != NULL && (out_val) != NULL && (in_val) != NULL); \
assert (sizeof (*(out_val)) == sizeof (UINT64));\
assert (sizeof (*(in_val)) == sizeof (UINT64)); \
*(err) = (SYSPRM_ERR) (*((prm)->get_dup)) ((void *) (out_val), PRM_BIGINT, (void *) (in_val), PRM_BIGINT); \
} \
while (0)
/*
* Macros to access bit fields
*/
#define PRM_USER_CAN_CHANGE(x) ((x)->static_flag & PRM_USER_CHANGE)
#define PRM_IS_FOR_CLIENT(x) ((x)->static_flag & PRM_FOR_CLIENT)
#define PRM_IS_FOR_SERVER(x) ((x)->static_flag & PRM_FOR_SERVER)
#define PRM_IS_HIDDEN(x) ((x)->static_flag & PRM_HIDDEN)
#define PRM_IS_RELOADABLE(x) ((x)->static_flag & PRM_RELOADABLE)
#define PRM_IS_COMPOUND(x) ((x)->static_flag & PRM_COMPOUND)
#define PRM_TEST_CHANGE_ONLY(x) ((x)->static_flag & PRM_TEST_CHANGE)
#define PRM_IS_FOR_HA(x) ((x)->static_flag & PRM_FOR_HA)
#define PRM_IS_FOR_SESSION(x) ((x)->static_flag & PRM_FOR_SESSION)
#define PRM_GET_FROM_SERVER(x) ((x)->static_flag & PRM_FORCE_SERVER)
#define PRM_IS_FOR_QRY_STRING(x) ((x)->static_flag & PRM_FOR_QRY_STRING)
#define PRM_CLIENT_SESSION_ONLY(x) ((x)->static_flag & PRM_CLIENT_SESSION)
#define PRM_HAS_SIZE_UNIT(x) ((x)->static_flag & PRM_SIZE_UNIT)
#define PRM_HAS_TIME_UNIT(x) ((x)->static_flag & PRM_TIME_UNIT)
#define PRM_DIFFERENT_UNIT(x) ((x)->static_flag & PRM_DIFFER_UNIT)
#define PRM_IS_FOR_HA_CONTEXT(x) ((x)->static_flag & PRM_FOR_HA_CONTEXT)
#define PRM_IS_FOR_PL_CONTEXT(x) ((x)->static_flag & PRM_FOR_PL_CONTEXT)
#define PRM_IS_GET_SERVER(x) ((x)->static_flag & PRM_GET_SERVER)
#define PRM_IS_DEPRECATED(x) ((x)->static_flag & PRM_DEPRECATED)
#define PRM_IS_OBSOLETED(x) ((x)->static_flag & PRM_OBSOLETED)
#define PRM_IS_SET(x) (((x)->dynamic_flag) & PRM_SET)
#define PRM_DEFAULT_VAL_USED(x) (((x)->dynamic_flag) & PRM_DEFAULT_USED)
#define PRM_IS_DIFFERENT(x) (((x)->dynamic_flag) & PRM_DIFFERENT)
#define PRM_IS_ALLOCATED(x) (((x)->dynamic_flag) & PRM_ALLOCATED)
/*
* Macros to manipulate bit fields
*/
#define PRM_CLEAR_BIT(this, here) (here &= ~this)
#define PRM_SET_BIT(this, here) (here |= this)
#if defined (CS_MODE)
#define PRM_PRINT_QRY_STRING(id) (PRM_IS_DIFFERENT (GET_PRM (id)) && PRM_IS_FOR_QRY_STRING (GET_PRM (id)))
#else
#define PRM_PRINT_QRY_STRING(id) (PRM_IS_FOR_QRY_STRING (GET_PRM (id)))
#endif
/*
* Other macros
*/
#define PRM_DEFAULT_BUFFER_SIZE 256
/* initial error and integer lists */
static const int int_list_initial[1] = { 0 };
static const int prm_stored_procedure_return_numeric_size_default_arr[] = { 2, 38, 15 };
#if !defined (SERVER_MODE) && !defined (SA_MODE)
#define LOGPB_BUFFER_NPAGES_LOWER 128
#endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
#if !defined (SERVER_MODE) && !defined (SA_MODE)
#define CSS_MAX_CLIENT_COUNT 4000
#endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
#if !defined (SERVER_MODE) && !defined (SA_MODE)
typedef enum
{
PGBUF_DEBUG_NO_PAGE_VALIDATION,
PGBUF_DEBUG_PAGE_VALIDATION_FETCH,
PGBUF_DEBUG_PAGE_VALIDATION_FREE,
PGBUF_DEBUG_PAGE_VALIDATION_ALL
} PGBUF_DEBUG_PAGE_VALIDATION_LEVEL;
#endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
#if !defined (SERVER_MODE) && !defined (SA_MODE)
#define VACUUM_LOG_BLOCK_PAGES_DEFAULT 0
#define VACUUM_MAX_WORKER_COUNT 0
#endif /* !defined (SERVER_MODE) && !defined (SA_MODE) */
typedef int (*DUP_PRM_FUNC) (void *, SYSPRM_DATATYPE, void *, SYSPRM_DATATYPE);
static int prm_size_to_io_pages (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_io_pages_to_size (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_size_to_log_pages (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_log_pages_to_size (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_msec_to_sec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_sec_to_msec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_sec_to_min (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_min_to_sec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
static int prm_equal_to_ori (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type);
#if defined(SERVER_MODE)
static void update_session_state_from_sys_params (THREAD_ENTRY * thread_p, SESSION_PARAM * session_params);
#endif
static const SYSPRM_PARAM_VALUE NULL_SYSPRM_PARAM_VALUE = { true, {.str = NULL} };
SYSPRM_PARAM prm_Def[] = {
{PRM_ID_ER_LOG_DEBUG,
PRM_NAME_ER_LOG_DEBUG,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
#if !defined(NDEBUG)
{false, {.b = true}},
#else
{false, {.b = false}},
#endif
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_BTREE_DEBUG,
PRM_NAME_ER_BTREE_DEBUG,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_LEVEL,
PRM_NAME_ER_LOG_LEVEL,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = ER_NOTIFICATION_SEVERITY}},
{false, {.i = ER_NOTIFICATION_SEVERITY}},
{false, {.i = ER_NOTIFICATION_SEVERITY}}, {false, {.i = ER_FATAL_ERROR_SEVERITY}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_WARNING,
PRM_NAME_ER_LOG_WARNING,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_EXIT_ASK,
PRM_NAME_ER_EXIT_ASK,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = ER_EXIT_DEFAULT}},
{false, {.i = ER_EXIT_DEFAULT}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_SIZE,
PRM_NAME_ER_LOG_SIZE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = (512 * 1024 * 1024) /* 512M */ }},
{false, {.i = (512 * 1024 * 1024)}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = (100 * 80)}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_FILE,
PRM_NAME_ER_LOG_FILE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = (char *) sysprm_error_log_file}},
{false, {.str = (char *) sysprm_error_log_file}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ACCESS_IP_CONTROL,
PRM_NAME_ACCESS_IP_CONTROL,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ACCESS_IP_CONTROL_FILE,
PRM_NAME_ACCESS_IP_CONTROL_FILE,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = (char *) ""}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_LOCKF_ENABLE,
PRM_NAME_IO_LOCKF_ENABLE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SR_NBUFFERS,
PRM_NAME_SR_NBUFFERS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 128}},
{false, {.i = 128}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SORT_BUFFER_SIZE,
PRM_NAME_SORT_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 128}},
{false, {.i = 128}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_PB_BUFFER_FLUSH_RATIO,
PRM_NAME_PB_BUFFER_FLUSH_RATIO,
(PRM_FOR_SERVER | PRM_HIDDEN | PRM_USER_CHANGE), /* todo: why user change? */
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.01f}},
{false, {.f = 0.01f}},
{false, {.f = 0.95f}}, {false, {.f = 0.01f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_NBUFFERS,
PRM_NAME_PB_NBUFFERS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 32768}},
{false, {.i = 32768}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 1024}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PAGE_BUFFER_SIZE,
PRM_NAME_PAGE_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 32768}},
{false, {.i = 32768}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 1024}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_HF_UNFILL_FACTOR,
PRM_NAME_HF_UNFILL_FACTOR,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.10f}},
{false, {.f = 0.10f}},
{false, {.f = 0.3f}}, {false, {.f = 0.0f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HF_MAX_BESTSPACE_ENTRIES,
PRM_NAME_HF_MAX_BESTSPACE_ENTRIES,
(PRM_FOR_SERVER | PRM_HIDDEN | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000000 /* 110 M */ }},
{false, {.i = 1000000}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BT_UNFILL_FACTOR,
PRM_NAME_BT_UNFILL_FACTOR,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.05f}},
{false, {.f = 0.05f}},
{false, {.f = 0.5f}}, {false, {.f = 0.0f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BT_OID_NBUFFERS,
PRM_NAME_BT_OID_NBUFFERS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 4.0f}},
{false, {.f = 4.0f}},
{false, {.f = 16.0f}}, {false, {.f = 0.049999f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BT_OID_BUFFER_SIZE,
PRM_NAME_BT_OID_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 4.0f}},
{false, {.f = 4.0f}},
{false, {.f = 16.0f}}, {false, {.f = 0.049999f}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_BT_INDEX_SCAN_OID_ORDER,
PRM_NAME_BT_INDEX_SCAN_OID_ORDER,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BOSR_MAXTMP_PAGES,
PRM_NAME_BOSR_MAXTMP_PAGES, /* todo: change me */
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1 /* Infinite */ }},
{false, {.i = INT_MIN}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_TIMEOUT_MESSAGE_DUMP_LEVEL,
PRM_NAME_LK_TIMEOUT_MESSAGE_DUMP_LEVEL,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
{true, {.i = 0}},
{true, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_ESCALATION_AT,
PRM_NAME_LK_ESCALATION_AT,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100000}},
{false, {.i = 100000}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 5}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_ROLLBACK_ON_LOCK_ESCALATION,
PRM_NAME_LK_ROLLBACK_ON_LOCK_ESCALATION,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_TIMEOUT_SECS,
PRM_NAME_LK_TIMEOUT_SECS,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_DEPRECATED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1 /* Infinite */ }},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_TIMEOUT,
PRM_NAME_LK_TIMEOUT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1 /* Infinite */ }},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_LK_RUN_DEADLOCK_INTERVAL,
PRM_NAME_LK_RUN_DEADLOCK_INTERVAL,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 1.0f}},
{false, {.f = 1.0f}},
NULL_SYSPRM_PARAM_VALUE, {false, {.f = 0.1f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_NBUFFERS,
PRM_NAME_LOG_NBUFFERS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 16 * ONE_K}}, /* 16k pages => 64M / 128M / 256M based on log page size */
{false, {.i = LOGPB_BUFFER_NPAGES_LOWER}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = LOGPB_BUFFER_NPAGES_LOWER}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_BUFFER_SIZE,
PRM_NAME_LOG_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 16 * ONE_K}}, /* 16k pages => 64M / 128M / 256M based on log page size */
{false, {.i = LOGPB_BUFFER_NPAGES_LOWER}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = LOGPB_BUFFER_NPAGES_LOWER}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_log_pages,
(DUP_PRM_FUNC) prm_log_pages_to_size},
{PRM_ID_LOG_CHECKPOINT_NPAGES,
PRM_NAME_LOG_CHECKPOINT_NPAGES,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100000}},
{false, {.i = 100000}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 10}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_CHECKPOINT_SIZE,
PRM_NAME_LOG_CHECKPOINT_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100000}},
{false, {.i = 100000}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 10}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_log_pages,
(DUP_PRM_FUNC) prm_log_pages_to_size},
{PRM_ID_LOG_CHECKPOINT_INTERVAL_SECS,
PRM_NAME_LOG_CHECKPOINT_INTERVAL_SECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 360}},
{false, {.i = 360}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 60}},
(char *) NULL,
(DUP_PRM_FUNC) prm_min_to_sec,
(DUP_PRM_FUNC) prm_sec_to_min},
{PRM_ID_LOG_CHECKPOINT_INTERVAL,
PRM_NAME_LOG_CHECKPOINT_INTERVAL,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 360}},
{false, {.i = 360}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 60}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_LOG_CHECKPOINT_SLEEP_MSECS,
PRM_NAME_LOG_CHECKPOINT_SLEEP_MSECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1}},
{false, {.i = 1}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_BACKGROUND_ARCHIVING,
PRM_NAME_LOG_BACKGROUND_ARCHIVING,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_ISOLATION_LEVEL,
PRM_NAME_LOG_ISOLATION_LEVEL,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = TRAN_READ_COMMITTED}},
{false, {.i = TRAN_READ_COMMITTED}},
{false, {.i = TRAN_SERIALIZABLE}},
{false, {.i = TRAN_READ_COMMITTED}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_MEDIA_FAILURE_SUPPORT,
PRM_NAME_LOG_MEDIA_FAILURE_SUPPORT,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
{true, {.i = 0}},
{true, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_COMMIT_ON_SHUTDOWN,
PRM_NAME_COMMIT_ON_SHUTDOWN,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SHUTDOWN_WAIT_TIME_IN_SECS,
PRM_NAME_SHUTDOWN_WAIT_TIME_IN_SECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 600}},
{false, {.i = 600}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 60}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSQL_AUTO_COMMIT,
PRM_NAME_CSQL_AUTO_COMMIT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_SWEEP_CLEAN,
PRM_NAME_LOG_SWEEP_CLEAN,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_WS_HASHTABLE_SIZE,
PRM_NAME_WS_HASHTABLE_SIZE,
(PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 4096}},
{false, {.i = 4096}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 1024}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_WS_MEMORY_REPORT,
PRM_NAME_WS_MEMORY_REPORT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_GC_ENABLE,
PRM_NAME_GC_ENABLE,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_DEPRECATED),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_PORT_ID,
PRM_NAME_TCP_PORT_ID,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1523}},
{false, {.i = 1523}},
{false, {.i = USHRT_MAX}}, {false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_CONNECTION_TIMEOUT,
PRM_NAME_TCP_CONNECTION_TIMEOUT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 5}},
{false, {.i = 5}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZATION_LEVEL,
PRM_NAME_OPTIMIZATION_LEVEL,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1}},
{false, {.i = 1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_QO_DUMP,
PRM_NAME_QO_DUMP,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_MAX_CLIENTS,
PRM_NAME_CSS_MAX_CLIENTS,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100}},
{false, {.i = 100}},
{false, {.i = CSS_MAX_CLIENT_COUNT}},
{false, {.i = 10}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_STACKSIZE,
PRM_NAME_THREAD_STACKSIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = (1024 * 1024)}},
{false, {.bi = (1024 * 1024)}},
{false, {.bi = INT_MAX}},
{false, {.bi = 64 * 1024}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CFG_DB_HOSTS,
PRM_NAME_CFG_DB_HOSTS,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_RESET_TR_PARSER,
PRM_NAME_RESET_TR_PARSER,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10}},
{false, {.i = 10}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_BACKUP_NBUFFERS,
PRM_NAME_IO_BACKUP_NBUFFERS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 256}},
{false, {.i = 256}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 256}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_BACKUP_MAX_VOLUME_SIZE,
PRM_NAME_IO_BACKUP_MAX_VOLUME_SIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 0}},
{false, {.bi = 0}},
{false, {.bi = DB_BIGINT_MAX}},
{false, {.bi = 1024 * 32}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_BACKUP_SLEEP_MSECS,
PRM_NAME_IO_BACKUP_SLEEP_MSECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_PAGES_IN_TEMP_FILE_CACHE,
PRM_NAME_MAX_PAGES_IN_TEMP_FILE_CACHE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000 /* pages */ }},
{false, {.i = 1000}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 100}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_ENTRIES_IN_TEMP_FILE_CACHE,
PRM_NAME_MAX_ENTRIES_IN_TEMP_FILE_CACHE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 512}},
{false, {.i = 512}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 10}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PTHREAD_SCOPE_PROCESS,
PRM_NAME_PTHREAD_SCOPE_PROCESS, /* AIX only */
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TEMP_MEM_BUFFER_PAGES,
PRM_NAME_TEMP_MEM_BUFFER_PAGES,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 4}},
{false, {.i = 4}},
{false, {.i = 20}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INDEX_SCAN_KEY_BUFFER_PAGES,
PRM_NAME_INDEX_SCAN_KEY_BUFFER_PAGES,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 20}},
{false, {.i = 20}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INDEX_SCAN_KEY_BUFFER_SIZE,
PRM_NAME_INDEX_SCAN_KEY_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 20}},
{false, {.i = 20}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_DONT_REUSE_HEAP_FILE,
PRM_NAME_DONT_REUSE_HEAP_FILE,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INSERT_MODE,
PRM_NAME_INSERT_MODE,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1 + 2}},
{false, {.i = 1 + 2}},
{false, {.i = 31 /* For backward compatibility */ }},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LK_MAX_SCANID_BIT,
PRM_NAME_LK_MAX_SCANID_BIT,
(PRM_OBSOLETED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 32}},
{false, {.i = 32}},
{false, {.i = 128}},
{false, {.i = 32}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HOSTVAR_LATE_BINDING,
PRM_NAME_HOSTVAR_LATE_BINDING,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_HISTO,
PRM_NAME_ENABLE_HISTO,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MUTEX_BUSY_WAITING_CNT,
PRM_NAME_MUTEX_BUSY_WAITING_CNT,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_NUM_LRU_CHAINS,
PRM_NAME_PB_NUM_LRU_CHAINS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0 /* system define */ }},
{false, {.i = 0}},
{false, {.i = 1000}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PAGE_BG_FLUSH_INTERVAL_MSECS,
PRM_NAME_PAGE_BG_FLUSH_INTERVAL_MSECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PAGE_BG_FLUSH_INTERVAL,
PRM_NAME_PAGE_BG_FLUSH_INTERVAL,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_equal_to_ori,
(DUP_PRM_FUNC) prm_equal_to_ori},
{PRM_ID_ADAPTIVE_FLUSH_CONTROL,
PRM_NAME_ADAPTIVE_FLUSH_CONTROL,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_FLUSH_PAGES_PER_SECOND,
PRM_NAME_MAX_FLUSH_PAGES_PER_SECOND,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10000}},
{false, {.i = 10000}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_FLUSH_SIZE_PER_SECOND,
PRM_NAME_MAX_FLUSH_SIZE_PER_SECOND,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10000}},
{false, {.i = 10000}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_PB_SYNC_ON_NFLUSH,
PRM_NAME_PB_SYNC_ON_NFLUSH,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 200}},
{false, {.i = 200}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_SYNC_ON_FLUSH_SIZE,
PRM_NAME_PB_SYNC_ON_FLUSH_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 200}},
{false, {.i = 200}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_io_pages,
(DUP_PRM_FUNC) prm_io_pages_to_size},
{PRM_ID_PB_DEBUG_PAGE_VALIDATION_LEVEL,
PRM_NAME_PB_DEBUG_PAGE_VALIDATION_LEVEL,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
#if !defined(NDEBUG)
{false, {.i = PGBUF_DEBUG_PAGE_VALIDATION_FETCH}},
#else
{false, {.i = PGBUF_DEBUG_NO_PAGE_VALIDATION}},
#endif
{false, {.i = PGBUF_DEBUG_NO_PAGE_VALIDATION}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ORACLE_STYLE_OUTERJOIN,
PRM_NAME_ORACLE_STYLE_OUTERJOIN,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ANSI_QUOTES,
PRM_NAME_ANSI_QUOTES,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEFAULT_WEEK_FORMAT,
PRM_NAME_DEFAULT_WEEK_FORMAT,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 7}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TEST_MODE,
PRM_NAME_TEST_MODE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ONLY_FULL_GROUP_BY,
PRM_NAME_ONLY_FULL_GROUP_BY,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PIPES_AS_CONCAT,
PRM_NAME_PIPES_AS_CONCAT,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MYSQL_TRIGGER_CORRELATION_NAMES,
PRM_NAME_MYSQL_TRIGGER_CORRELATION_NAMES,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_REQUIRE_LIKE_ESCAPE_CHARACTER,
PRM_NAME_REQUIRE_LIKE_ESCAPE_CHARACTER,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE | PRM_FOR_QRY_STRING),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_NO_BACKSLASH_ESCAPES,
PRM_NAME_NO_BACKSLASH_ESCAPES,
(PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_GROUP_CONCAT_MAX_LEN,
PRM_NAME_GROUP_CONCAT_MAX_LEN,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 1024}},
{false, {.bi = 1024}},
{false, {.bi = INT_MAX}},
{false, {.bi = 4}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STRING_MAX_SIZE_BYTES,
PRM_NAME_STRING_MAX_SIZE_BYTES,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_SIZE_UNIT | PRM_FOR_HA_CONTEXT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 1024 * 1024}},
{false, {.bi = 1024 * 1024}},
{false, {.bi = 32 * 1024 * 1024}},
{false, {.bi = 64}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ADD_COLUMN_UPDATE_HARD_DEFAULT,
PRM_NAME_ADD_COLUMN_UPDATE_HARD_DEFAULT,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_RETURN_NULL_ON_FUNCTION_ERRORS,
PRM_NAME_RETURN_NULL_ON_FUNCTION_ERRORS,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_QRY_STRING | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ALTER_TABLE_CHANGE_TYPE_STRICT,
PRM_NAME_ALTER_TABLE_CHANGE_TYPE_STRICT,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG, /* 1 --> 0 */
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_COMPACTDB_PAGE_RECLAIM_ONLY,
PRM_NAME_COMPACTDB_PAGE_RECLAIM_ONLY,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PLUS_AS_CONCAT,
PRM_NAME_PLUS_AS_CONCAT,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LIKE_TERM_SELECTIVITY,
PRM_NAME_LIKE_TERM_SELECTIVITY,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.1f}},
{false, {.f = 0.1f}},
{false, {.f = 1.0f}},
{false, {.f = 0.0f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_OUTER_CARD_OF_IDXJOIN,
PRM_NAME_MAX_OUTER_CARD_OF_IDXJOIN,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN | PRM_DEPRECATED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ORACLE_STYLE_EMPTY_STRING,
PRM_NAME_ORACLE_STYLE_EMPTY_STRING,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_QRY_STRING | PRM_FORCE_SERVER | PRM_FOR_PL_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SUPPRESS_FSYNC,
PRM_NAME_SUPPRESS_FSYNC,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 100}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CALL_STACK_DUMP_ON_ERROR,
PRM_NAME_CALL_STACK_DUMP_ON_ERROR,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CALL_STACK_DUMP_ACTIVATION,
PRM_NAME_CALL_STACK_DUMP_ACTIVATION,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CALL_STACK_DUMP_DEACTIVATION,
PRM_NAME_CALL_STACK_DUMP_DEACTIVATION,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_COMPAT_NUMERIC_DIVISION_SCALE,
PRM_NAME_COMPAT_NUMERIC_DIVISION_SCALE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT | PRM_FOR_PL_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DBFILES_PROTECT,
PRM_NAME_DBFILES_PROTECT,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_AUTO_RESTART_SERVER,
PRM_NAME_AUTO_RESTART_SERVER,
(PRM_FOR_CLIENT | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_CACHE_MAX_ENTRIES,
PRM_NAME_XASL_CACHE_MAX_ENTRIES,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
{false, {.i = 10000}},
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_CACHE_MAX_CLONES,
PRM_NAME_XASL_CACHE_MAX_CLONES,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
{false, {.i = 2000}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_CACHE_TIMEOUT,
PRM_NAME_XASL_CACHE_TIMEOUT,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1 /* infinity */ }},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_CACHE_LOGGING,
PRM_NAME_XASL_CACHE_LOGGING,
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FILTER_PRED_MAX_CACHE_ENTRIES,
PRM_NAME_FILTER_PRED_MAX_CACHE_ENTRIES,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FILTER_PRED_MAX_CACHE_CLONES,
PRM_NAME_FILTER_PRED_MAX_CACHE_CLONES,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10}},
{false, {.i = 10}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LIST_QUERY_CACHE_MODE,
PRM_NAME_LIST_QUERY_CACHE_MODE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2}},
{false, {.i = 2}},
{false, {.i = 2}}, {false, {.i = 2}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LIST_MAX_QUERY_CACHE_ENTRIES,
PRM_NAME_LIST_MAX_QUERY_CACHE_ENTRIES,
(PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LIST_MAX_QUERY_CACHE_PAGES,
PRM_NAME_LIST_MAX_QUERY_CACHE_PAGES,
(PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_USE_ORDERBY_SORT_LIMIT,
PRM_NAME_USE_ORDERBY_SORT_LIMIT,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_REPLICATION_MODE,
PRM_NAME_REPLICATION_MODE,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_MODE,
PRM_NAME_HA_MODE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FOR_HA | PRM_FORCE_SERVER),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HA_MODE_OFF}},
{false, {.i = HA_MODE_OFF}},
{false, {.i = HA_MODE_REPLICA}}, {false, {.i = HA_MODE_OFF}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_MODE_FOR_SA_UTILS_ONLY,
PRM_NAME_HA_MODE_FOR_SA_UTILS_ONLY,
(PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HA_MODE_OFF}},
{false, {.i = HA_MODE_OFF}},
{false, {.i = HA_MODE_REPLICA}}, {false, {.i = HA_MODE_OFF}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_SERVER_STATE,
PRM_NAME_HA_SERVER_STATE,
(PRM_FOR_SERVER | PRM_HIDDEN | PRM_FOR_HA),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HA_SERVER_STATE_IDLE}},
{false, {.i = HA_SERVER_STATE_IDLE}},
{false, {.i = HA_SERVER_STATE_DEAD}},
{false, {.i = HA_SERVER_STATE_IDLE}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_LOG_APPLIER_STATE,
PRM_NAME_HA_LOG_APPLIER_STATE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN | PRM_FOR_HA),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HA_LOG_APPLIER_STATE_UNREGISTERED}},
{false, {.i = HA_LOG_APPLIER_STATE_UNREGISTERED}},
{false, {.i = HA_LOG_APPLIER_STATE_ERROR}},
{false, {.i = HA_LOG_APPLIER_STATE_UNREGISTERED}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_NODE_LIST,
PRM_NAME_HA_NODE_LIST,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_RELOADABLE | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_REPLICA_LIST,
PRM_NAME_HA_REPLICA_LIST,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_RELOADABLE | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_DB_LIST,
PRM_NAME_HA_DB_LIST,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_COPY_LOG_BASE,
PRM_NAME_HA_COPY_LOG_BASE,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_COPY_SYNC_MODE,
PRM_NAME_HA_COPY_SYNC_MODE,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_APPLY_MAX_MEM_SIZE,
PRM_NAME_HA_APPLY_MAX_MEM_SIZE,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_APPLY_MAX_MEM_SIZE}},
{false, {.i = HB_DEFAULT_APPLY_MAX_MEM_SIZE}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_PORT_ID,
PRM_NAME_HA_PORT_ID,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_HA_PORT_ID}},
{false, {.i = HB_DEFAULT_HA_PORT_ID}},
{false, {.i = USHRT_MAX}}, {false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_INIT_TIMER_IN_MSECS,
PRM_NAME_HA_INIT_TIMER_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_INIT_TIMER_IN_MSECS}},
{false, {.i = HB_DEFAULT_INIT_TIMER_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_HEARTBEAT_INTERVAL_IN_MSECS,
PRM_NAME_HA_HEARTBEAT_INTERVAL_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_HEARTBEAT_INTERVAL_IN_MSECS}},
{false, {.i = HB_DEFAULT_HEARTBEAT_INTERVAL_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_CALC_SCORE_INTERVAL_IN_MSECS,
PRM_NAME_HA_CALC_SCORE_INTERVAL_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_CALC_SCORE_INTERVAL_IN_MSECS}},
{false, {.i = HB_DEFAULT_CALC_SCORE_INTERVAL_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_FAILOVER_WAIT_TIME_IN_MSECS,
PRM_NAME_HA_FAILOVER_WAIT_TIME_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_FAILOVER_WAIT_TIME_IN_MSECS}},
{false, {.i = HB_DEFAULT_FAILOVER_WAIT_TIME_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_PROCESS_START_CONFIRM_INTERVAL_IN_MSECS,
PRM_NAME_HA_PROCESS_START_CONFIRM_INTERVAL_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_START_CONFIRM_INTERVAL_IN_MSECS}},
{false, {.i = HB_DEFAULT_START_CONFIRM_INTERVAL_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_PROCESS_DEREG_CONFIRM_INTERVAL_IN_MSECS,
PRM_NAME_HA_PROCESS_DEREG_CONFIRM_INTERVAL_IN_MSECS,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_DEREG_CONFIRM_INTERVAL_IN_MSECS}},
{false, {.i = HB_DEFAULT_DEREG_CONFIRM_INTERVAL_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_MAX_PROCESS_START_CONFIRM,
PRM_NAME_HA_MAX_PROCESS_START_CONFIRM,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_MAX_PROCESS_START_CONFIRM}},
{false, {.i = HB_DEFAULT_MAX_PROCESS_START_CONFIRM}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_MAX_PROCESS_DEREG_CONFIRM,
PRM_NAME_HA_MAX_PROCESS_DEREG_CONFIRM,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_MAX_PROCESS_DEREG_CONFIRM}},
{false, {.i = HB_DEFAULT_MAX_PROCESS_DEREG_CONFIRM}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_UNACCEPTABLE_PROC_RESTART_TIMEDIFF_IN_MSECS,
PRM_NAME_HA_UNACCEPTABLE_PROC_RESTART_TIMEDIFF,
(PRM_FOR_CLIENT | PRM_FOR_HA | PRM_TIME_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_UNACCEPTABLE_PROC_RESTART_TIMEDIFF_IN_MSECS}},
{false, {.i = HB_DEFAULT_UNACCEPTABLE_PROC_RESTART_TIMEDIFF_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_CHANGEMODE_INTERVAL_IN_MSECS,
PRM_NAME_HA_CHANGEMODE_INTERVAL_IN_MSEC,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_CHANGEMODE_INTERVAL_IN_MSECS}},
{false, {.i = HB_DEFAULT_CHANGEMODE_INTERVAL_IN_MSECS}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_MAX_HEARTBEAT_GAP,
PRM_NAME_HA_MAX_HEARTBEAT_GAP,
(PRM_FOR_CLIENT | PRM_HIDDEN | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = HB_DEFAULT_MAX_HEARTBEAT_GAP}},
{false, {.i = HB_DEFAULT_MAX_HEARTBEAT_GAP}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_PING_HOSTS,
PRM_NAME_HA_PING_HOSTS,
(PRM_FOR_CLIENT | PRM_RELOADABLE | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_APPLYLOGDB_RETRY_ERROR_LIST,
PRM_NAME_HA_APPLYLOGDB_RETRY_ERROR_LIST,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_APPLYLOGDB_IGNORE_ERROR_LIST,
PRM_NAME_HA_APPLYLOGDB_IGNORE_ERROR_LIST,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_APPLYLOGDB_LOG_WAIT_TIME_IN_SECS,
PRM_NAME_HA_APPLYLOGDB_LOG_WAIT_TIME_IN_SECS,
(PRM_FOR_CLIENT | PRM_FOR_HA | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_SQL_LOGGING,
PRM_NAME_HA_SQL_LOGGING,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_SQL_LOG_MAX_SIZE_IN_MB,
PRM_NAME_HA_SQL_LOG_MAX_SIZE_IN_MB,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 50}},
{false, {.i = INT_MIN}},
{false, {.i = 2048}}, {false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_COPY_LOG_MAX_ARCHIVES,
PRM_NAME_HA_COPY_LOG_MAX_ARCHIVES,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1}},
{false, {.i = 1}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_COPY_LOG_TIMEOUT,
PRM_NAME_HA_COPY_LOG_TIMEOUT,
(PRM_FOR_SERVER | PRM_FOR_HA | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 5}},
{false, {.i = 5}},
{false, {.i = INT_MAX}}, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_REPLICA_DELAY_IN_SECS,
PRM_NAME_HA_REPLICA_DELAY,
(PRM_FOR_CLIENT | PRM_FOR_HA | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_HA_REPLICA_TIME_BOUND,
PRM_NAME_HA_REPLICA_TIME_BOUND,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_DELAY_LIMIT_IN_SECS,
PRM_NAME_HA_DELAY_LIMIT,
(PRM_FOR_SERVER | PRM_FOR_HA | PRM_USER_CHANGE | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_HA_DELAY_LIMIT_DELTA_IN_SECS,
PRM_NAME_HA_DELAY_LIMIT_DELTA,
(PRM_FOR_SERVER | PRM_FOR_HA | PRM_USER_CHANGE | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL_IN_MSECS,
PRM_NAME_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL_IN_MSECS,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 500}},
{false, {.i = 500}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL,
PRM_NAME_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL,
(PRM_FOR_CLIENT | PRM_FOR_HA | PRM_TIME_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 500}},
{false, {.i = 500}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_CHECK_DISK_FAILURE_INTERVAL_IN_SECS,
PRM_NAME_HA_CHECK_DISK_FAILURE_INTERVAL_IN_SECS,
(PRM_FOR_CLIENT | PRM_FOR_HA | PRM_TIME_UNIT | PRM_DIFFER_UNIT | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 15}},
{false, {.i = 15}},
{false, {.i = INT_MAX}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_GENERAL_RESERVE_01,
PRM_NAME_GENERAL_RESERVE_01,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_COMPAT_PRIMARY_KEY,
PRM_NAME_COMPAT_PRIMARY_KEY,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_HEADER_FLUSH_INTERVAL,
PRM_NAME_LOG_HEADER_FLUSH_INTERVAL,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_ASYNC_COMMIT,
PRM_NAME_LOG_ASYNC_COMMIT,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_GROUP_COMMIT_INTERVAL_MSECS,
PRM_NAME_LOG_GROUP_COMMIT_INTERVAL_MSECS,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_BG_FLUSH_INTERVAL_MSECS,
PRM_NAME_LOG_BG_FLUSH_INTERVAL_MSECS,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_BG_FLUSH_NUM_PAGES,
PRM_NAME_LOG_BG_FLUSH_NUM_PAGES,
(PRM_OBSOLETED),
PRM_NO_TYPE,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INTL_MBS_SUPPORT,
PRM_NAME_INTL_MBS_SUPPORT,
(PRM_FOR_CLIENT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_COMPRESS,
PRM_NAME_LOG_COMPRESS,
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BLOCK_NOWHERE_STATEMENT,
PRM_NAME_BLOCK_NOWHERE_STATEMENT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_BLOCK_DDL_STATEMENT,
PRM_NAME_BLOCK_DDL_STATEMENT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
#if defined (ENABLE_UNUSED_FUNCTION)
{PRM_ID_SINGLE_BYTE_COMPARE,
PRM_NAME_SINGLE_BYTE_COMPARE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
#endif
{PRM_ID_CSQL_HISTORY_NUM,
PRM_NAME_CSQL_HISTORY_NUM,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 50}},
{false, {.i = 50}},
{false, {.i = 200}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_TRACE_DEBUG,
PRM_NAME_LOG_TRACE_DEBUG,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DL_FORK,
PRM_NAME_DL_FORK,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_PRODUCTION_MODE,
PRM_NAME_ER_PRODUCTION_MODE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_GET_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_STOP_ON_ERROR,
PRM_NAME_ER_STOP_ON_ERROR,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 0}}, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_RCVBUF_SIZE,
PRM_NAME_TCP_RCVBUF_SIZE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_SNDBUF_SIZE,
PRM_NAME_TCP_SNDBUF_SIZE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_NODELAY,
PRM_NAME_TCP_NODELAY,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_KEEPALIVE,
PRM_NAME_TCP_KEEPALIVE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSQL_SINGLE_LINE_MODE,
PRM_NAME_CSQL_SINGLE_LINE_MODE,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_DEBUG_DUMP,
PRM_NAME_XASL_DEBUG_DUMP,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_MAX_ARCHIVES,
PRM_NAME_LOG_MAX_ARCHIVES,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = INT_MAX}},
{false, {.i = INT_MAX}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FORCE_REMOVE_LOG_ARCHIVES,
PRM_NAME_FORCE_REMOVE_LOG_ARCHIVES,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_REMOVE_LOG_ARCHIVES_INTERVAL,
PRM_NAME_REMOVE_LOG_ARCHIVES_INTERVAL,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_NO_LOGGING,
PRM_NAME_LOG_NO_LOGGING,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UNLOADDB_IGNORE_ERROR,
PRM_NAME_UNLOADDB_IGNORE_ERROR,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UNLOADDB_LOCK_TIMEOUT,
PRM_NAME_UNLOADDB_LOCK_TIMEOUT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOADDB_FLUSH_INTERVAL,
PRM_NAME_LOADDB_FLUSH_INTERVAL,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_TEMP_VOLUME_PATH,
PRM_NAME_IO_TEMP_VOLUME_PATH,
(PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IO_VOLUME_EXT_PATH,
PRM_NAME_IO_VOLUME_EXT_PATH,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UNIQUE_ERROR_KEY_VALUE,
PRM_NAME_UNIQUE_ERROR_KEY_VALUE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN | PRM_DEPRECATED),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_USE_SYSTEM_MALLOC,
PRM_NAME_USE_SYSTEM_MALLOC,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_EVENT_HANDLER,
PRM_NAME_EVENT_HANDLER,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_EVENT_ACTIVATION,
PRM_NAME_EVENT_ACTIVATION,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_READ_ONLY_MODE,
PRM_NAME_READ_ONLY_MODE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MNT_WAITING_THREAD,
PRM_NAME_MNT_WAITING_THREAD,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MNT_STATS_THRESHOLD,
PRM_NAME_MNT_STATS_THRESHOLD,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SERVICE_SERVICE_LIST,
PRM_NAME_SERVICE_SERVICE_LIST,
(PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SERVICE_SERVER_LIST,
PRM_NAME_SERVICE_SERVER_LIST,
(PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SESSION_STATE_TIMEOUT,
PRM_NAME_SESSION_STATE_TIMEOUT,
(PRM_FOR_SERVER | PRM_TEST_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 60 * 60 * 6 /* 6 hours */ }},
{false, {.i = 60 * 60 * 6 /* 6 hours */ }},
{false, {.i = 60 * 60 * 24 * 365 /* 1 nonleap year */ }},
{false, {.i = 60 /* 1 minute */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MULTI_RANGE_OPT_LIMIT,
PRM_NAME_MULTI_RANGE_OPT_LIMIT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_QRY_STRING),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100}},
{false, {.i = 100}},
{false, {.i = 10000}}, {false, {.i = 0 /* disabled */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INTL_NUMBER_LANG,
PRM_NAME_INTL_NUMBER_LANG,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_QRY_STRING | PRM_FOR_HA_CONTEXT | PRM_FOR_PL_CONTEXT),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INTL_DATE_LANG,
PRM_NAME_INTL_DATE_LANG,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_QRY_STRING | PRM_FOR_HA_CONTEXT | PRM_FOR_PL_CONTEXT),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
/* All the compound parameters *must* be at the end of the array so that the changes they cause are not overridden by
* other parameters (for example in sysprm_load_and_init the parameters are set to their default in the order they
* are found in this array). */
{PRM_ID_COMPAT_MODE,
PRM_NAME_COMPAT_MODE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_TEST_CHANGE | PRM_COMPOUND),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = COMPAT_CUBRID}},
{false, {.i = COMPAT_CUBRID}},
{false, {.i = COMPAT_ORACLE}}, {false, {.i = COMPAT_CUBRID}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DB_VOLUME_SIZE,
PRM_NAME_DB_VOLUME_SIZE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 536870912ULL /* 512M */ }},
{false, {.bi = 536870912ULL}},
{false, {.bi = 21474836480ULL /* 20G */ }},
{false, {.bi = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_VOLUME_SIZE,
PRM_NAME_LOG_VOLUME_SIZE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 536870912ULL /* 512M */ }},
{false, {.bi = 536870912ULL}},
{false, {.bi = 4294967296ULL /* 4G */ }},
{false, {.bi = 20971520ULL /* 20M */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UNICODE_INPUT_NORMALIZATION,
PRM_NAME_UNICODE_INPUT_NORMALIZATION,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UNICODE_OUTPUT_NORMALIZATION,
PRM_NAME_UNICODE_OUTPUT_NORMALIZATION,
(PRM_FOR_CLIENT | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INTL_CHECK_INPUT_STRING,
PRM_NAME_INTL_CHECK_INPUT_STRING,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CHECK_PEER_ALIVE,
PRM_NAME_CHECK_PEER_ALIVE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_CLIENT_SESSION),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = CSS_CHECK_PEER_ALIVE_BOTH}},
{false, {.i = CSS_CHECK_PEER_ALIVE_BOTH}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SQL_TRACE_SLOW_MSECS,
PRM_NAME_SQL_TRACE_SLOW_MSECS,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_DEPRECATED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
{false, {.i = 1000 * 60 * 60 * 24 /* 24 hours */ }}, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SQL_TRACE_SLOW,
PRM_NAME_SQL_TRACE_SLOW,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_TIME_UNIT | PRM_DIFFER_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
{false, {.i = 1000 * 60 * 60 * 24 /* 24 hours */ }}, {false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) prm_equal_to_ori,
(DUP_PRM_FUNC) prm_equal_to_ori},
{PRM_ID_SQL_TRACE_EXECUTION_PLAN,
PRM_NAME_SQL_TRACE_EXECUTION_PLAN,
(PRM_USER_CHANGE | PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 2}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_TRACE_FLUSH_TIME_MSECS,
PRM_NAME_LOG_TRACE_FLUSH_TIME,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_TIME_UNIT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_INTL_COLLATION,
PRM_NAME_INTL_COLLATION,
(PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_USER_CHANGE | PRM_FOR_HA_CONTEXT | PRM_FOR_PL_CONTEXT),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_GENERIC_VOL_PREALLOC_SIZE,
PRM_NAME_GENERIC_VOL_PREALLOC_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT | PRM_OBSOLETED),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 52428800ULL /* 50M */ }},
{false, {.bi = 0ULL}},
{false, {.bi = 21474836480ULL /* 20G */ }},
{false, {.bi = 0ULL}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SORT_LIMIT_MAX_COUNT,
PRM_NAME_SORT_LIMIT_MAX_COUNT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_QRY_STRING),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
{false, {.i = INT_MAX}},
{false, {.i = 0 /* disabled */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SQL_TRACE_IOREADS,
PRM_NAME_SQL_TRACE_IOREADS,
(PRM_USER_CHANGE | PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_QUERY_TRACE,
PRM_NAME_QUERY_TRACE,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_QUERY_TRACE_FORMAT,
PRM_NAME_QUERY_TRACE_FORMAT,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = QUERY_TRACE_TEXT}},
{false, {.i = QUERY_TRACE_TEXT}},
{false, {.i = QUERY_TRACE_JSON}},
{false, {.i = QUERY_TRACE_TEXT}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_RECURSION_SQL_DEPTH,
PRM_NAME_MAX_RECURSION_SQL_DEPTH,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 400}},
{false, {.i = 400}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_UPDATE_USE_ATTRIBUTE_REFERENCES,
PRM_NAME_UPDATE_USE_ATTRIBUTE_REFERENCES,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_AOUT_RATIO,
PRM_NAME_PB_AOUT_RATIO,
(PRM_FOR_SERVER | PRM_RELOADABLE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.0f}},
{false, {.f = 0.0f}},
{false, {.f = 3.0}},
{false, {.f = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_AGG_HASH_SIZE,
PRM_NAME_MAX_AGG_HASH_SIZE,
(PRM_FOR_SERVER | PRM_TEST_CHANGE | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
{false, {.bi = 128 * 1024 * 1024 /* 128 MB */ }},
{false, {.bi = 32 * 1024 /* 32 KB */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_AGG_HASH_RESPECT_ORDER,
PRM_NAME_AGG_HASH_RESPECT_ORDER,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_USE_BTREE_FENCE_KEY,
PRM_NAME_USE_BTREE_FENCE_KEY,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_ENABLE_MERGE_JOIN,
PRM_NAME_OPTIMIZER_ENABLE_MERGE_JOIN,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_HASH_LIST_SCAN_SIZE,
PRM_NAME_MAX_HASH_LIST_SCAN_SIZE,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_FOR_QRY_STRING | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 8 * 1024 * 1024 /* 8 MB */ }},
{false, {.bi = 8 * 1024 * 1024 /* 8 MB */ }},
{false, {.bi = 128 * 1024 * 1024 /* 128 MB */ }},
{false, {.bi = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_02,
PRM_NAME_OPTIMIZER_RESERVE_02,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_03,
PRM_NAME_OPTIMIZER_RESERVE_03,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_04,
PRM_NAME_OPTIMIZER_RESERVE_04,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_05,
PRM_NAME_OPTIMIZER_RESERVE_05,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_06,
PRM_NAME_OPTIMIZER_RESERVE_06,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_07,
PRM_NAME_OPTIMIZER_RESERVE_07,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_08,
PRM_NAME_OPTIMIZER_RESERVE_08,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_09,
PRM_NAME_OPTIMIZER_RESERVE_09,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_10,
PRM_NAME_OPTIMIZER_RESERVE_10,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_11,
PRM_NAME_OPTIMIZER_RESERVE_11,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_12,
PRM_NAME_OPTIMIZER_RESERVE_12,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_13,
PRM_NAME_OPTIMIZER_RESERVE_13,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_14,
PRM_NAME_OPTIMIZER_RESERVE_14,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_15,
PRM_NAME_OPTIMIZER_RESERVE_15,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_16,
PRM_NAME_OPTIMIZER_RESERVE_16,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_17,
PRM_NAME_OPTIMIZER_RESERVE_17,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_18,
PRM_NAME_OPTIMIZER_RESERVE_18,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_19,
PRM_NAME_OPTIMIZER_RESERVE_19,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_RESERVE_20,
PRM_NAME_OPTIMIZER_RESERVE_20,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_REPL_ENABLE_SERVER_SIDE_UPDATE,
PRM_NAME_HA_REPL_ENABLE_SERVER_SIDE_UPDATE,
(PRM_FOR_HA | PRM_HIDDEN | PRM_DEPRECATED),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_LRU_HOT_RATIO,
PRM_NAME_PB_LRU_HOT_RATIO,
(PRM_FOR_SERVER | PRM_RELOADABLE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.4f}},
{false, {.f = 0.4f}},
{false, {.f = 0.90f}},
{false, {.f = 0.05f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_LRU_BUFFER_RATIO,
PRM_NAME_PB_LRU_BUFFER_RATIO,
(PRM_FOR_SERVER | PRM_RELOADABLE),
PRM_FLOAT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.f = 0.05f}},
{false, {.f = 0.05f}},
{false, {.f = 0.90f}},
{false, {.f = 0.05f}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_MASTER_WAKEUP_INTERVAL,
PRM_NAME_VACUUM_MASTER_WAKEUP_INTERVAL,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10}},
{false, {.i = 10}},
NULL_SYSPRM_PARAM_VALUE,
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_LOG_BLOCK_PAGES,
PRM_NAME_VACUUM_LOG_BLOCK_PAGES,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = VACUUM_LOG_BLOCK_PAGES_DEFAULT}},
{false, {.i = VACUUM_LOG_BLOCK_PAGES_DEFAULT}},
{false, {.i = 1024}},
{false, {.i = 4}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_WORKER_COUNT,
PRM_NAME_VACUUM_WORKER_COUNT,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 10}},
{false, {.i = 10}},
{false, {.i = VACUUM_MAX_WORKER_COUNT}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_VACUUM,
PRM_NAME_ER_LOG_VACUUM,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1}},
{false, {.i = 1}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DISABLE_VACUUM,
PRM_NAME_DISABLE_VACUUM,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_BTREE_OPS,
PRM_NAME_LOG_BTREE_OPS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OBJECT_PRINT_FORMAT_OID,
PRM_NAME_OBJECT_PRINT_FORMAT_OID,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TIMEZONE,
PRM_NAME_TIMEZONE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_USER_CHANGE | PRM_FOR_QRY_STRING | PRM_FOR_HA_CONTEXT |
PRM_FOR_PL_CONTEXT),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SERVER_TIMEZONE,
PRM_NAME_SERVER_TIMEZONE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TZ_LEAP_SECOND_SUPPORT,
PRM_NAME_TZ_LEAP_SECOND_SUPPORT,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_TEST_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_OPTIMIZER_ENABLE_AGGREGATE_OPTIMIZATION,
PRM_NAME_OPTIMIZER_ENABLE_AGGREGATE_OPTIMIZATION,
(PRM_FOR_SERVER | PRM_TEST_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_PREFETCH_LOG_NBUFFERS,
PRM_NAME_VACUUM_PREFETCH_LOG_NBUFFERS,
(PRM_FOR_SERVER | PRM_OBSOLETED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_PREFETCH_LOG_BUFFER_SIZE,
PRM_NAME_VACUUM_PREFETCH_LOG_BUFFER_SIZE,
(PRM_FOR_SERVER | PRM_OBSOLETED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) prm_size_to_log_pages,
(DUP_PRM_FUNC) prm_log_pages_to_size},
{PRM_ID_VACUUM_PREFETCH_LOG_MODE,
PRM_NAME_VACUUM_PREFETCH_LOG_MODE,
(PRM_FOR_SERVER | PRM_OBSOLETED),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_NEIGHBOR_FLUSH_NONDIRTY,
PRM_NAME_PB_NEIGHBOR_FLUSH_NONDIRTY,
(PRM_USER_CHANGE | PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_NEIGHBOR_FLUSH_PAGES,
PRM_NAME_PB_NEIGHBOR_FLUSH_PAGES,
(PRM_USER_CHANGE | PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 8}},
{false, {.i = 8}},
{false, {.i = 32}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FAULT_INJECTION_IDS,
PRM_NAME_FAULT_INJECTION_IDS,
(PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = NULL}},
{false, {.integer_list = (int *) int_list_initial}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FAULT_INJECTION_TEST,
PRM_NAME_FAULT_INJECTION_TEST,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = FI_GROUP_NONE}},
{false, {.i = FI_GROUP_NONE}},
{false, {.i = FI_GROUP_MAX}},
{false, {.i = FI_GROUP_NONE}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FAULT_INJECTION_ACTION_PREFER_ABORT_TO_EXIT,
PRM_NAME_FAULT_INJECTION_ACTION_PREFER_ABORT_TO_EXIT,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_REPL_FILTER_TYPE,
PRM_NAME_HA_REPL_FILTER_TYPE,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = REPL_FILTER_NONE}},
{false, {.i = REPL_FILTER_NONE}},
{false, {.i = REPL_FILTER_EXCLUDE_TBL}},
{false, {.i = REPL_FILTER_NONE}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_REPL_FILTER_FILE,
PRM_NAME_HA_REPL_FILTER_FILE,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = (char *) ""}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_COMPENSATE_DEBUG,
PRM_NAME_COMPENSATE_DEBUG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_POSTPONE_DEBUG,
PRM_NAME_POSTPONE_DEBUG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CLIENT_CLASS_CACHE_DEBUG,
PRM_NAME_CLIENT_CLASS_CACHE_DEBUG,
(PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_EXAMINE_CLIENT_CACHED_LOCKS,
PRM_NAME_EXAMINE_CLIENT_CACHED_LOCKS,
(PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_SEQUENTIAL_VICTIM_FLUSH,
PRM_NAME_PB_SEQUENTIAL_VICTIM_FLUSH,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_UNIQUE_STATS,
PRM_NAME_LOG_UNIQUE_STATS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOGPB_LOGGING_DEBUG,
PRM_NAME_LOGPB_LOGGING_DEBUG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FORCE_RESTART_TO_SKIP_RECOVERY,
PRM_NAME_FORCE_RESTART_TO_SKIP_RECOVERY,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_EXTENDED_STATISTICS_ACTIVATION,
PRM_NAME_EXTENDED_STATISTICS_ACTIVATION,
(PRM_FOR_SERVER | PRM_FOR_CLIENT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = PERFMON_ACTIVATION_FLAG_DETAILED_BTREE_PAGE | PERFMON_ACTIVATION_FLAG_MVCC_SNAPSHOT |
PERFMON_ACTIVATION_FLAG_LOCK_OBJECT | PERFMON_ACTIVATION_FLAG_PB_HASH_ANCHOR}},
{false, {.i = PERFMON_ACTIVATION_FLAG_DETAILED_BTREE_PAGE | PERFMON_ACTIVATION_FLAG_MVCC_SNAPSHOT |
PERFMON_ACTIVATION_FLAG_LOCK_OBJECT | PERFMON_ACTIVATION_FLAG_PB_HASH_ANCHOR}},
{false, {.i = PERFMON_ACTIVATION_FLAG_MAX_VALUE}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_STRING_COMPRESSION,
PRM_NAME_ENABLE_STRING_COMPRESSION,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FORCE_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_XASL_CACHE_TIME_THRESHOLD_IN_MINUTES,
PRM_NAME_XASL_CACHE_TIME_THRESHOLD_IN_MINUTES,
(PRM_FOR_SERVER | PRM_FOR_CLIENT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 360}},
{false, {.i = 360}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DISK_LOGGING,
PRM_NAME_DISK_LOGGING,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FILE_LOGGING,
PRM_NAME_FILE_LOGGING,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_NUM_PRIVATE_CHAINS,
PRM_NAME_PB_NUM_PRIVATE_CHAINS,
(PRM_FOR_SERVER | PRM_RELOADABLE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
{false, {.i = CSS_MAX_CLIENT_COUNT + VACUUM_MAX_WORKER_COUNT}},
{false, {.i = -1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PB_MONITOR_LOCKS,
PRM_NAME_PB_MONITOR_LOCKS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CTE_MAX_RECURSIONS,
PRM_NAME_CTE_MAX_RECURSIONS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION | PRM_FOR_CLIENT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2000}},
{false, {.i = 2000}},
{false, {.i = 1000000}},
{false, {.i = 2}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JSON_LOG_ALLOCATIONS,
PRM_NAME_JSON_LOG_ALLOCATIONS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JSON_MAX_ARRAY_IDX,
PRM_NAME_JSON_MAX_ARRAY_IDX,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 64 * ONE_K}},
{false, {.i = 64 * ONE_K}},
{false, {.i = ONE_M}},
{false, {.i = ONE_K}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CONNECTION_LOGGING,
PRM_NAME_CONNECTION_LOGGING,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_LOGGING_FLAG,
PRM_NAME_THREAD_LOGGING_FLAG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_QUERY_LISTS,
PRM_NAME_LOG_QUERY_LISTS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_CONNECTION_POOLING,
PRM_NAME_THREAD_CONNECTION_POOLING,
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_CONNECTION_TIMEOUT_SECONDS,
PRM_NAME_THREAD_CONNECTION_TIMEOUT_SECONDS,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300}},
{false, {.i = 300}},
{false, {.i = 60 * 60 /* one hour */ }},
{false, {.i = -1 /* infinite */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_WORKER_POOLING,
PRM_NAME_THREAD_WORKER_POOLING,
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_THREAD_WORKER_TIMEOUT_SECONDS,
PRM_NAME_THREAD_WORKER_TIMEOUT_SECONDS,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300}},
{false, {.i = 300}},
{false, {.i = 60 * 60 /* one hour */ }},
{false, {.i = -1 /* infinite */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DWB_SIZE,
PRM_NAME_DWB_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = (2 * 1024 * 1024) /* 2M */ }},
{false, {.i = (2 * 1024 * 1024) /* 2M */ }},
{false, {.i = (32 * 1024 * 1024) /* 32M */ }},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DWB_BLOCKS,
PRM_NAME_DWB_BLOCKS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2}},
{false, {.i = 2}},
{false, {.i = 32}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_DWB_FLUSH_THREAD,
PRM_NAME_ENABLE_DWB_FLUSH_THREAD,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DWB_LOGGING,
PRM_NAME_DWB_LOGGING,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DATA_FILE_ADVISE,
PRM_NAME_DATA_FILE_ADVISE,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 6}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_LOG_ARCHIVES,
PRM_NAME_DEBUG_LOG_ARCHIVES,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_ES,
PRM_NAME_DEBUG_ES,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_BESTSPACE,
PRM_NAME_DEBUG_BESTSPACE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_LOGWR,
PRM_NAME_DEBUG_LOG_WRITER,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_AUTOCOMMIT,
PRM_NAME_DEBUG_AUTOCOMMIT,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEBUG_REPLICATION_DATA,
PRM_NAME_DEBUG_REPLICATION_DATA,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TRACK_REQUESTS,
PRM_NAME_TRACK_REQUESTS,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_PGBUF_VICTIM_FLUSH,
PRM_NAME_LOG_PGBUF_VICTIM_FLUSH,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_CHKPT_DETAILED,
PRM_NAME_LOG_CHKPT_DETAILED,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IB_TASK_MEMSIZE,
PRM_NAME_IB_TASK_MEMSIZE,
(PRM_FOR_SERVER | PRM_SIZE_UNIT | PRM_HIDDEN),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 16 * ONE_M}},
{false, {.bi = 16 * ONE_M}},
{false, {.bi = 128 * ONE_M}}, {false, {.bi = ONE_K}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STATS_ON,
PRM_NAME_STATS_ON,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOADDB_WORKER_COUNT,
PRM_NAME_LOADDB_WORKER_COUNT,
(PRM_FOR_SERVER | PRM_USER_CHANGE),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 8}},
{false, {.i = 8}},
{false, {.i = 64}}, {false, {.i = 2}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PERF_TEST_MODE,
PRM_NAME_PERF_TEST_MODE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_REPR_CACHE_LOG,
PRM_NAME_REPR_CACHE_LOG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_NEW_LFHASH,
PRM_NAME_ENABLE_NEW_LFHASH,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HEAP_INFO_CACHE_LOGGING,
PRM_NAME_HEAP_INFO_CACHE_LOGGING,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TDE_KEYS_FILE_PATH,
PRM_NAME_TDE_KEYS_FILE_PATH,
(PRM_FOR_SERVER | PRM_FOR_CLIENT),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TDE_DEFAULT_ALGORITHM,
PRM_NAME_TDE_DEFAULT_ALGORITHM,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = TDE_ALGORITHM_AES}},
{false, {.i = TDE_ALGORITHM_AES}},
{false, {.i = TDE_ALGORITHM_ARIA}}, {false, {.i = TDE_ALGORITHM_NONE}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ER_LOG_TDE,
PRM_NAME_ER_LOG_TDE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JAVA_STORED_PROCEDURE,
PRM_NAME_JAVA_STORED_PROCEDURE,
(PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_RELOADABLE | PRM_DEPRECATED | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JAVA_STORED_PROCEDURE_PORT,
PRM_NAME_JAVA_STORED_PROCEDURE_PORT,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 65535}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JAVA_STORED_PROCEDURE_JVM_OPTIONS,
PRM_NAME_JAVA_STORED_PROCEDURE_JVM_OPTIONS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_HIDDEN),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = (char *) ""}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JAVA_STORED_PROCEDURE_DEBUG,
PRM_NAME_JAVA_STORED_PROCEDURE_DEBUG,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_DEPRECATED | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_JAVA_STORED_PROCEDURE_UDS,
PRM_NAME_JAVA_STORED_PROCEDURE_UDS,
(PRM_FOR_SERVER | PRM_DEPRECATED | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ALLOW_TRUNCATED_STRING,
PRM_NAME_ALLOW_TRUNCATED_STRING,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TB_DEFAULT_REUSE_OID,
PRM_NAME_TB_DEFAULT_REUSE_OID,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_FOR_HA_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_USE_STAT_ESTIMATION, /* not deleted for compatibility. */
PRM_NAME_USE_STAT_ESTIMATION,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_DEPRECATED),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_IGNORE_TRAILING_SPACE,
PRM_NAME_IGNORE_TRAILING_SPACE,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FORCE_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DDL_AUDIT_LOG,
PRM_NAME_DDL_AUDIT_LOG,
(PRM_FOR_CLIENT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DDL_AUDIT_LOG_SIZE,
PRM_NAME_DDL_AUDIT_LOG_SIZE,
(PRM_FOR_CLIENT | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 10485760ULL /* 10M */ }},
{false, {.bi = 10485760ULL}},
{false, {.bi = 2147483648ULL /* 2G */ }},
{false, {.bi = 10485760ULL}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_SUPPLEMENTAL_LOG,
PRM_NAME_SUPPLEMENTAL_LOG,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FORCE_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 2}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CDC_LOGGING_DEBUG,
PRM_NAME_CDC_LOGGING_DEBUG,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_RECOVERY_PROGRESS_LOGGING_INTERVAL,
PRM_NAME_RECOVERY_PROGRESS_LOGGING_INTERVAL,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 3600}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FIRST_LOG_PAGEID, /* Except for QA or TEST purposes, never use it. */
PRM_NAME_FIRST_LOG_PAGEID,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 0ULL}},
{false, {.bi = 0ULL}},
{false, {.bi = LOGPAGEID_MAX}},
{false, {.bi = 0ULL}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TASK_GROUP,
PRM_NAME_TASK_GROUP,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
#if defined (SERVER_MODE)
{false, {.i = (int) cubthread::system_core_count ()}},
{false, {.i = (int) cubthread::system_core_count ()}},
{false, {.i = (int) cubthread::system_core_count ()}},
#else
{false, {.i = 1}},
{false, {.i = 1}},
NULL_SYSPRM_PARAM_VALUE,
#endif
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FLASHBACK_TIMEOUT,
PRM_NAME_FLASHBACK_TIMEOUT,
(PRM_FOR_CLIENT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300}},
{false, {.i = 0}},
{false, {.i = 3600}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FLASHBACK_MAX_TRANSACTION,
PRM_NAME_FLASHBACK_MAX_TRANSACTION,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = INT_MAX}},
{false, {.i = INT_MAX}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_FLASHBACK_WIN_SIZE,
PRM_NAME_FLASHBACK_WIN_SIZE,
(PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = INT_MAX}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_USE_USER_HOSTS,
PRM_NAME_USE_USER_HOSTS,
(PRM_FOR_SERVER | PRM_FOR_CLIENT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_QMGR_MAX_QUERY_PER_TRAN,
PRM_NAME_QMGR_MAX_QUERY_PER_TRAN,
(PRM_FOR_SERVER | PRM_FORCE_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100}},
{false, {.i = INT_MAX}},
{false, {.i = SHRT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_REGEXP_ENGINE,
PRM_NAME_REGEXP_ENGINE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_USER_CHANGE | PRM_FOR_SESSION),
PRM_KEYWORD,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = cubregex::engine_type::LIB_RE2}},
{false, {.i = cubregex::engine_type::LIB_RE2}},
{false, {.i = cubregex::engine_type::LIB_RE2}},
{false, {.i = cubregex::engine_type::LIB_CPPSTD}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ORACLE_COMPAT_NUMBER_BEHAVIOR,
PRM_NAME_ORACLE_COMPAT_NUMBER_BEHAVIOR,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_FOR_PL_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_TCP_PING_HOSTS,
PRM_NAME_HA_TCP_PING_HOSTS,
(PRM_FOR_CLIENT | PRM_RELOADABLE | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_PING_TIMEOUT,
PRM_NAME_HA_PING_TIMEOUT,
(PRM_FOR_CLIENT | PRM_RELOADABLE | PRM_FOR_HA | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
/* NOTE: It is difficult to determine an accurate default value for TCP connection timeout, so the default value of the connection_time system parameter is followed. */
{false, {.i = 5}},
{false, {.i = 5}},
{false, {.i = INT_MAX / 1000 /* divided by msecs */ }},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STATDUMP_FORCE_ADD_INT_MAX,
PRM_NAME_STATDUMP_FORCE_ADD_INT_MAX,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PL_TRANSACTION_CONTROL,
PRM_NAME_PL_TRANSACTION_CONTROL,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_FOR_SERVER | PRM_FOR_SESSION),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_SQL_LOG_PATH,
PRM_NAME_HA_SQL_LOG_PATH,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = NULL}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_VACUUM_OVFP_CHECK_DURATION,
PRM_NAME_VACUUM_OVFP_CHECK_DURATION,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 45000}},
{false, {.i = 45000}},
{false, {.i = 600000}},
{false, {.i = 1 /* 1 min */ }},
(char *) NULL,
(DUP_PRM_FUNC) prm_msec_to_sec,
(DUP_PRM_FUNC) prm_sec_to_msec},
{PRM_ID_VACUUM_OVFP_CHECK_THRESHOLD,
PRM_NAME_VACUUM_OVFP_CHECK_THRESHOLD,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1000}},
{false, {.i = 1000}},
{false, {.i = INT_MAX}},
{false, {.i = 2}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DEDUPLICATE_KEY_LEVEL,
PRM_NAME_DEDUPLICATE_KEY_LEVEL,
// It is not specified in the manual that it can be changed in the session.
(PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_USER_CHANGE | PRM_FOR_HA_CONTEXT),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = DEDUPLICATE_KEY_LEVEL_SYSPARAM_DFLT}},
{false, {.i = DEDUPLICATE_KEY_LEVEL_SYSPARAM_DFLT}},
{false, {.i = DEDUPLICATE_KEY_LEVEL_SYSPARAM_MAX}},
{false, {.i = DEDUPLICATE_KEY_LEVEL_SYSPARAM_MIN}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PRINT_INDEX_DETAIL,
PRM_NAME_PRINT_INDEX_DETAIL,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_USER_CHANGE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HA_SQL_LOG_MAX_COUNT,
PRM_NAME_HA_SQL_LOG_MAX_COUNT,
(PRM_FOR_CLIENT | PRM_FOR_HA),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2}},
{false, {.i = 2}},
{false, {.i = 5}},
{false, {.i = 2}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_RECOVERY_REDO_MINIMUM_JOB_COUNT,
PRM_NAME_RECOVERY_REDO_MINIMUM_JOB_COUNT,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100}},
{false, {.i = 100}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_RECOVERY_REDO_JOB_PERIOD_IN_SECS,
PRM_NAME_RECOVERY_REDO_JOB_PERIOD_IN_SECS,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 1}},
{false, {.i = 1}},
{false, {.i = INT_MAX}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_MEMORY_MONITORING,
PRM_NAME_ENABLE_MEMORY_MONITORING,
(PRM_FOR_SERVER | PRM_FOR_CLIENT | PRM_FORCE_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_SUBQUERY_CACHE_SIZE,
PRM_NAME_MAX_SUBQUERY_CACHE_SIZE,
(PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
{false, {.bi = 16 * 1024 * 1024 /* 16 MB */ }},
{false, {.bi = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE,
PRM_NAME_STORED_PROCEDURE,
(PRM_FOR_SERVER | PRM_FORCE_SERVER | PRM_RELOADABLE),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_PORT,
PRM_NAME_STORED_PROCEDURE_PORT,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 0}},
{false, {.i = 0}},
{false, {.i = 65535}}, {false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_JVM_OPTIONS,
PRM_NAME_STORED_PROCEDURE_JVM_OPTIONS,
(PRM_FOR_SERVER),
PRM_STRING,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.str = (char *) ""}},
{false, {.str = (char *) ""}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_DEBUG,
PRM_NAME_STORED_PROCEDURE_DEBUG,
(PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_UDS,
PRM_NAME_STORED_PROCEDURE_UDS,
(PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_DUMP_ICODE,
PRM_NAME_STORED_PROCEDURE_DUMP_ICODE,
(PRM_FOR_CLIENT | PRM_FOR_SESSION | PRM_FOR_SERVER | PRM_USER_CHANGE | PRM_FOR_PL_CONTEXT),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_STORED_PROCEDURE_RETURN_NUMERIC_SIZE,
PRM_NAME_STORED_PROCEDURE_RETURN_NUMERIC_SIZE,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_INTEGER_LIST,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.integer_list = (int *) prm_stored_procedure_return_numeric_size_default_arr}},
{false, {.integer_list = NULL}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_DBLINK_AUTO_COMMIT,
PRM_NAME_DBLINK_AUTO_COMMIT,
(PRM_FOR_CLIENT | PRM_FOR_SERVER),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = true}},
{false, {.b = true}},
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_ENABLE_JVM_HEAP_DUMP,
PRM_NAME_ENABLE_JVM_HEAP_DUMP,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
#if defined(NDEBUG)
{false, {.b = false}},
{false, {.b = false}},
#else
{false, {.b = true}},
{false, {.b = true}},
#endif
NULL_SYSPRM_PARAM_VALUE, NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PARALLELISM,
PRM_NAME_PARALLELISM,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 4}},
{false, {.i = 4}},
{false, {.i = PRM_MAX_PARALLELISM}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MAX_PARALLEL_WORKERS,
PRM_NAME_MAX_PARALLEL_WORKERS,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 100}},
{false, {.i = 100}},
{false, {.i = 1000}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PARALLEL_HEAP_SCAN_PAGE_THRESHOLD,
PRM_NAME_PARALLEL_HEAP_SCAN_PAGE_THRESHOLD,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2048}},
{false, {.i = 2048}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PARALLEL_HASH_JOIN_PAGE_THRESHOLD,
PRM_NAME_PARALLEL_HASH_JOIN_PAGE_THRESHOLD,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2048}},
{false, {.i = 2048}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PARALLEL_SORT_PAGE_THRESHOLD,
PRM_NAME_PARALLEL_SORT_PAGE_THRESHOLD,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 2048}},
{false, {.i = 2048}},
{false, {.i = INT_MAX}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_KEEPALIVE_IDLE,
PRM_NAME_TCP_KEEPALIVE_IDLE,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300 /* 5 min */ }},
{false, {.i = 300 /* 5 min */ }},
{false, {.i = 60 * 60 * 24 * 365 /* 1 year */ }},
{false, {.i = 60 /* 1 min */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_KEEPALIVE_INTERVAL, /* probe interval */
PRM_NAME_TCP_KEEPALIVE_INTERVAL,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300 /* 5 min */ }},
{false, {.i = 300 /* 5 min */ }},
{false, {.i = 60 * 60 * 24 * 365 /* 1 year */ }},
{false, {.i = 60 /* 1 min */ }},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TCP_KEEPALIVE_COUNT, /* retry count */
PRM_NAME_TCP_KEEPALIVE_COUNT,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 3}},
{false, {.i = 3}},
{false, {.i = 32}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_TASK_WORKER,
PRM_NAME_TASK_WORKER,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = -1}},
{false, {.i = -1}},
{false, {.i = 1048576}},
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_MAX_CONNECTION_WORKER,
PRM_NAME_CSS_MAX_CONNECTION_WORKER,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
#if defined (SERVER_MODE)
{false, {.i = (int) cubthread::system_core_count () / 2}},
{false, {.i = (int) cubthread::system_core_count () / 2}},
{false, {.i = (int) cubthread::system_core_count ()}},
#else
{false, {.i = 2}},
{false, {.i = 2}},
NULL_SYSPRM_PARAM_VALUE,
#endif
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_MIN_CONNECTION_WORKER,
PRM_NAME_CSS_MIN_CONNECTION_WORKER,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 4}},
{false, {.i = 4}},
#if defined (SERVER_MODE)
{false, {.i = (int) cubthread::system_core_count ()}},
#else
NULL_SYSPRM_PARAM_VALUE,
#endif
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_AUTO_SCALING_WINDOW_SIZE,
PRM_NAME_CSS_AUTO_SCALING_WINDOW_SIZE,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 4}},
{false, {.i = 4}},
#if defined (SERVER_MODE)
{false, {.i = (int) cubthread::system_core_count ()}},
#else
NULL_SYSPRM_PARAM_VALUE,
#endif
{false, {.i = 1}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_RECV_BUDGET_PER_CONNECTION,
PRM_NAME_CSS_RECV_BUDGET_PER_CONNECTION,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 16 * 1024}}, /* 16KB */
{false, {.i = 16 * 1024}}, /* 16KB */
{false, {.i = 1 * 1024 * 1024 * 1024}}, /* 1GB */
{false, {.i = 0}}, /* no limit */
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_CSS_SEND_BUDGET_PER_CONNECTION,
PRM_NAME_CSS_SEND_BUDGET_PER_CONNECTION,
(PRM_FOR_SERVER),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 32 * 1024}}, /* 32KB */
{false, {.i = 32 * 1024}}, /* 32KB */
{false, {.i = 1 * 1024 * 1024 * 1024}}, /* 1GB */
{false, {.i = 0}}, /* no limit */
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_PAGE_LATCH_TIMEOUT,
PRM_NAME_PAGE_LATCH_TIMEOUT,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 300}},
{false, {.i = 300}},
{false, {.i = 3000}},
{false, {.i = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_MEMOIZE_MEMORY_LIMIT,
PRM_NAME_MEMOIZE_MEMORY_LIMIT,
(PRM_USER_CHANGE | PRM_FOR_CLIENT | PRM_FOR_SERVER | PRM_FOR_SESSION | PRM_FOR_QRY_STRING | PRM_SIZE_UNIT),
PRM_BIGINT,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
{false, {.bi = 2 * 1024 * 1024 /* 2 MB */ }},
NULL_SYSPRM_PARAM_VALUE,
{false, {.bi = 0}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_HOSTVAR_PEEKING,
PRM_NAME_HOSTVAR_PEEKING,
(PRM_FOR_CLIENT | PRM_USER_CHANGE | PRM_HIDDEN),
PRM_BOOLEAN,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.b = false}},
{false, {.b = false}},
NULL_SYSPRM_PARAM_VALUE,
NULL_SYSPRM_PARAM_VALUE,
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
{PRM_ID_LOG_POSTPONE_CACHE_SIZE,
PRM_NAME_LOG_POSTPONE_CACHE_SIZE,
(PRM_FOR_SERVER | PRM_HIDDEN),
PRM_INTEGER,
PRM_CLEAR_DYNAMIC_FLAG,
{false, {.i = 512}},
{false, {.i = 512}},
{false, {.i = 4096}},
{false, {.i = 4}},
(char *) NULL,
(DUP_PRM_FUNC) NULL,
(DUP_PRM_FUNC) NULL},
};
SYSPRM_INDIRECT_POS prm_Def_session_idx[DIM (prm_Def)];
static const int prm_Def_size = (int) (DIM (prm_Def));
#define MAX_SYSTEM_PARAMS prm_Def_size
static int num_session_parameters = 0;
#define NUM_SESSION_PRM num_session_parameters
static const int *PARAM_VALUE_SHARE[] = {
/* This mapping table is intended to list other system parameters that need to share the same value
* when a specific system parameter is modified.
* Rules:
* 1) The first column of each row represents the number of columns in that row, excluding itself.
* 2) Except for the last row, each row must contain at least 3 columns (i.e., the count and at least two PARAM_IDs).
* 3) All columns in a row, except the first one, must be sorted in ascending order.
* 4) The columns from the second onward in each row contain PARAM_ID values.
* 5) The PARAM_IDs in each row must be consecutive. If they are not, adjust the PARAM_ID enum order and the definition order in prm_Def.
* 6) The last row must be NULL.
*
* For the logic behind these rules, refer to the sysprm_check_id_order() function.
*/
// (int[]){n, V1, V2, ..., Vn},
(int[]) {2, PRM_ID_SR_NBUFFERS, PRM_ID_SORT_BUFFER_SIZE},
(int[]) {2, PRM_ID_PB_NBUFFERS, PRM_ID_PAGE_BUFFER_SIZE},
(int[]) {2, PRM_ID_BT_OID_NBUFFERS, PRM_ID_BT_OID_BUFFER_SIZE},
(int[]) {2, PRM_ID_LK_TIMEOUT_SECS, PRM_ID_LK_TIMEOUT},
(int[]) {2, PRM_ID_LOG_NBUFFERS, PRM_ID_LOG_BUFFER_SIZE},
(int[]) {2, PRM_ID_LOG_CHECKPOINT_NPAGES, PRM_ID_LOG_CHECKPOINT_SIZE},
(int[]) {2, PRM_ID_LOG_CHECKPOINT_INTERVAL_SECS, PRM_ID_LOG_CHECKPOINT_INTERVAL},
(int[]) {2, PRM_ID_INDEX_SCAN_KEY_BUFFER_PAGES, PRM_ID_INDEX_SCAN_KEY_BUFFER_SIZE},
(int[]) {2, PRM_ID_PAGE_BG_FLUSH_INTERVAL_MSECS, PRM_ID_PAGE_BG_FLUSH_INTERVAL},
(int[]) {2, PRM_ID_MAX_FLUSH_PAGES_PER_SECOND, PRM_ID_MAX_FLUSH_SIZE_PER_SECOND},
(int[]) {2, PRM_ID_PB_SYNC_ON_NFLUSH, PRM_ID_PB_SYNC_ON_FLUSH_SIZE},
(int[]) {2, PRM_ID_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL_IN_MSECS, PRM_ID_HA_APPLYLOGDB_MAX_COMMIT_INTERVAL},
(int[]) {2, PRM_ID_SQL_TRACE_SLOW_MSECS, PRM_ID_SQL_TRACE_SLOW},
(int[]) {2, PRM_ID_JAVA_STORED_PROCEDURE, PRM_ID_STORED_PROCEDURE},
(int[]) {2, PRM_ID_JAVA_STORED_PROCEDURE_PORT, PRM_ID_STORED_PROCEDURE_PORT},
(int[]) {2, PRM_ID_JAVA_STORED_PROCEDURE_JVM_OPTIONS, PRM_ID_STORED_PROCEDURE_JVM_OPTIONS},
(int[]) {2, PRM_ID_JAVA_STORED_PROCEDURE_DEBUG, PRM_ID_STORED_PROCEDURE_DEBUG},
(int[]) {2, PRM_ID_JAVA_STORED_PROCEDURE_UDS, PRM_ID_STORED_PROCEDURE_UDS},
NULL, /* end of array */
};
#if defined (CS_MODE)
/*
* Session parameters should be cached with the default values or the values
* loaded from cubrid.conf file. When a new client connects to CAS, it should
* reload these parameters (because some may be changed by previous clients)
*/
SESSION_PARAM *cached_session_parameters = NULL;
#endif /* CS_MODE */
/*
* Keyword searches do a intl_mbs_ncasecmp(), using the LENGTH OF THE TABLE KEY
* as the limit, so make sure that overlapping keywords are ordered
* correctly. For example, make sure that "yes" precedes "y".
*/
typedef struct keyval KEYVAL;
struct keyval
{
const char *key;
int val;
};
static const KEYVAL boolean_words[] = {
{"yes", 1},
{"y", 1},
{"1", 1},
{"true", 1},
{"on", 1},
{"no", 0},
{"n", 0},
{"0", 0},
{"false", 0},
{"off", 0}
};
static const KEYVAL er_log_level_words[] = {
{"fatal", ER_FATAL_ERROR_SEVERITY},
{"error", ER_ERROR_SEVERITY},
{"syntax", ER_SYNTAX_ERROR_SEVERITY},
{"warning", ER_WARNING_SEVERITY},
{"notification", ER_NOTIFICATION_SEVERITY}
};
static const KEYVAL isolation_level_words[] = {
{"tran_serializable", TRAN_SERIALIZABLE},
{"tran_no_phantom_read", TRAN_SERIALIZABLE},
{"tran_rep_class_rep_instance", TRAN_REPEATABLE_READ},
{"tran_rep_read", TRAN_REPEATABLE_READ},
{"tran_rep_class_commit_instance", TRAN_READ_COMMITTED},
{"tran_read_committed", TRAN_READ_COMMITTED},
{"tran_cursor_stability", TRAN_READ_COMMITTED},
{"serializable", TRAN_SERIALIZABLE},
{"no_phantom_read", TRAN_SERIALIZABLE},
{"rep_class_rep_instance", TRAN_REPEATABLE_READ},
{"rep_read", TRAN_REPEATABLE_READ},
{"rep_class_commit_instance", TRAN_READ_COMMITTED},
{"read_committed", TRAN_READ_COMMITTED},
{"cursor_stability", TRAN_READ_COMMITTED},
};
static const KEYVAL pgbuf_debug_page_validation_level_words[] = {
{"fetch", PGBUF_DEBUG_PAGE_VALIDATION_FETCH},
{"free", PGBUF_DEBUG_PAGE_VALIDATION_FREE},
{"all", PGBUF_DEBUG_PAGE_VALIDATION_ALL}
};
static const KEYVAL null_words[] = {
{"null", 0},
{"0", 0}
};
static const KEYVAL ha_mode_words[] = {
{HA_MODE_OFF_STR, HA_MODE_OFF},
{"no", HA_MODE_OFF},
{"n", HA_MODE_OFF},
{"0", HA_MODE_OFF},
{"false", HA_MODE_OFF},
{"off", HA_MODE_OFF},
{"yes", HA_MODE_FAIL_BACK},
{"y", HA_MODE_FAIL_BACK},
{"1", HA_MODE_FAIL_BACK},
{"true", HA_MODE_FAIL_BACK},
{"on", HA_MODE_FAIL_BACK},
/* {HA_MODE_FAIL_OVER_STR, HA_MODE_FAIL_OVER}, *//* unused */
{HA_MODE_FAIL_BACK_STR, HA_MODE_FAIL_BACK},
/* {HA_MODE_LAZY_BACK_STR, HA_MODE_LAZY_BACK}, *//* not implemented yet */
{HA_MODE_ROLE_CHANGE_STR, HA_MODE_ROLE_CHANGE},
{"r", HA_MODE_REPLICA},
{"repl", HA_MODE_REPLICA},
{"replica", HA_MODE_REPLICA},
{"2", HA_MODE_REPLICA}
};
static const KEYVAL ha_server_state_words[] = {
{HA_SERVER_STATE_IDLE_STR, HA_SERVER_STATE_IDLE},
{HA_SERVER_STATE_ACTIVE_STR, HA_SERVER_STATE_ACTIVE},
{HA_SERVER_STATE_TO_BE_ACTIVE_STR, HA_SERVER_STATE_TO_BE_ACTIVE},
{HA_SERVER_STATE_STANDBY_STR, HA_SERVER_STATE_STANDBY},
{HA_SERVER_STATE_TO_BE_STANDBY_STR, HA_SERVER_STATE_TO_BE_STANDBY},
{HA_SERVER_STATE_MAINTENANCE_STR, HA_SERVER_STATE_MAINTENANCE},
{HA_SERVER_STATE_DEAD_STR, HA_SERVER_STATE_DEAD}
};
static const KEYVAL ha_log_applier_state_words[] = {
{HA_LOG_APPLIER_STATE_UNREGISTERED_STR, HA_LOG_APPLIER_STATE_UNREGISTERED},
{HA_LOG_APPLIER_STATE_RECOVERING_STR, HA_LOG_APPLIER_STATE_RECOVERING},
{HA_LOG_APPLIER_STATE_WORKING_STR, HA_LOG_APPLIER_STATE_WORKING},
{HA_LOG_APPLIER_STATE_DONE_STR, HA_LOG_APPLIER_STATE_DONE},
{HA_LOG_APPLIER_STATE_ERROR_STR, HA_LOG_APPLIER_STATE_ERROR}
};
static const KEYVAL compat_words[] = {
{"cubrid", COMPAT_CUBRID},
{"default", COMPAT_CUBRID},
{"mysql", COMPAT_MYSQL},
{"oracle", COMPAT_ORACLE}
};
static const KEYVAL check_peer_alive_words[] = {
{"none", CSS_CHECK_PEER_ALIVE_NONE},
{"server_only", CSS_CHECK_PEER_ALIVE_SERVER_ONLY},
{"client_only", CSS_CHECK_PEER_ALIVE_CLIENT_ONLY},
{"both", CSS_CHECK_PEER_ALIVE_BOTH},
};
static const KEYVAL query_trace_format_words[] = {
{"text", QUERY_TRACE_TEXT},
{"json", QUERY_TRACE_JSON},
};
static const KEYVAL fi_test_words[] = {
{"recovery", FI_GROUP_RECOVERY},
};
static const KEYVAL ha_repl_filter_type_words[] = {
{"none", REPL_FILTER_NONE},
{"include_table", REPL_FILTER_INCLUDE_TBL},
{"exclude_table", REPL_FILTER_EXCLUDE_TBL}
};
static const KEYVAL tde_algorithm_words[] = {
/* {"none", TDE_ALGORITHM_NONE}, */
{"aes", TDE_ALGORITHM_AES},
{"aria", TDE_ALGORITHM_ARIA}
};
/* *INDENT-OFF* */
using namespace cubregex;
static const KEYVAL regexp_engine_words[] = {
{get_engine_name(engine_type::LIB_CPPSTD), engine_type::LIB_CPPSTD},
{get_engine_name(engine_type::LIB_RE2), engine_type::LIB_RE2}
};
/* *INDENT-ON* */
static const char *compat_mode_values_PRM_ANSI_QUOTES[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"no", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_ANSI_QUOTES
};
static const char *compat_mode_values_PRM_ORACLE_STYLE_EMPTY_STRING[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
NULL, /* COMPAT_MYSQL */
"yes", /* COMPAT_ORACLE */
PRM_NAME_ORACLE_STYLE_EMPTY_STRING
};
static const char *compat_mode_values_PRM_ORACLE_STYLE_OUTERJOIN[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
NULL, /* COMPAT_MYSQL */
"yes", /* COMPAT_ORACLE */
PRM_NAME_ORACLE_STYLE_OUTERJOIN
};
static const char *compat_mode_values_PRM_PIPES_AS_CONCAT[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"no", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_PIPES_AS_CONCAT
};
/* Oracle's trigger correlation names are not yet supported. */
static const char *compat_mode_values_PRM_MYSQL_TRIGGER_CORRELATION_NAMES[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"yes", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_MYSQL_TRIGGER_CORRELATION_NAMES
};
static const char *compat_mode_values_PRM_REQUIRE_LIKE_ESCAPE_CHARACTER[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"yes", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_REQUIRE_LIKE_ESCAPE_CHARACTER
};
static const char *compat_mode_values_PRM_NO_BACKSLASH_ESCAPES[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"no", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_NO_BACKSLASH_ESCAPES
};
static const char *compat_mode_values_PRM_ADD_COLUMN_UPDATE_HARD_DEFAULT[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"yes", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE: leave it in cubrid mode for now */
PRM_NAME_ADD_COLUMN_UPDATE_HARD_DEFAULT
};
static const char *compat_mode_values_PRM_RETURN_NULL_ON_FUNCTION_ERRORS[COMPAT_ORACLE + 2] = {
NULL, /* COMPAT_CUBRID */
"yes", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_RETURN_NULL_ON_FUNCTION_ERRORS
};
static const char *compat_mode_values_PRM_PLUS_AS_CONCAT[COMPAT_ORACLE + 2] = {
"yes", /* COMPAT_CUBRID */
"no", /* COMPAT_MYSQL */
NULL, /* COMPAT_ORACLE */
PRM_NAME_PLUS_AS_CONCAT
};
static const char **compat_mode_values[] = {
compat_mode_values_PRM_ANSI_QUOTES,
compat_mode_values_PRM_ORACLE_STYLE_EMPTY_STRING,
compat_mode_values_PRM_ORACLE_STYLE_OUTERJOIN,
compat_mode_values_PRM_PIPES_AS_CONCAT,
compat_mode_values_PRM_MYSQL_TRIGGER_CORRELATION_NAMES,
compat_mode_values_PRM_REQUIRE_LIKE_ESCAPE_CHARACTER,
compat_mode_values_PRM_NO_BACKSLASH_ESCAPES,
compat_mode_values_PRM_ADD_COLUMN_UPDATE_HARD_DEFAULT,
compat_mode_values_PRM_RETURN_NULL_ON_FUNCTION_ERRORS,
compat_mode_values_PRM_PLUS_AS_CONCAT
};
static const int call_stack_dump_error_codes[] = {
ER_GENERIC_ERROR,
ER_IO_FORMAT_BAD_NPAGES,
ER_IO_READ,
ER_IO_WRITE,
ER_PB_BAD_PAGEID,
ER_PB_UNFIXED_PAGEPTR,
ER_DISK_UNKNOWN_SECTOR,
ER_DISK_UNKNOWN_PAGE,
ER_SP_BAD_INSERTION_SLOT,
ER_SP_UNKNOWN_SLOTID,
ER_HEAP_UNKNOWN_OBJECT,
ER_HEAP_BAD_RELOCATION_RECORD,
ER_HEAP_BAD_OBJECT_TYPE,
ER_HEAP_OVFADDRESS_CORRUPTED,
ER_LK_PAGE_TIMEOUT,
ER_LOG_READ,
ER_LOG_WRITE,
ER_LOG_PAGE_CORRUPTED,
ER_LOG_REDO_INTERFACE,
ER_LOG_MAYNEED_MEDIA_RECOVERY,
ER_LOG_NOTIN_ARCHIVE,
ER_TF_BUFFER_UNDERFLOW,
ER_TF_BUFFER_OVERFLOW,
ER_BTREE_UNKNOWN_KEY,
ER_CT_INVALID_CLASSID,
ER_CT_UNKNOWN_REPRID,
ER_CT_INVALID_REPRID,
ER_FILE_ALLOC_NOPAGES,
ER_FILE_TABLE_CORRUPTED,
ER_PAGE_LATCH_TIMEDOUT,
ER_PAGE_LATCH_ABORTED,
ER_PARTITION_WORK_FAILED,
ER_PARTITION_NOT_EXIST,
ER_FILE_TABLE_OVERFLOW,
ER_HA_GENERIC_ERROR,
ER_DESC_ISCAN_ABORTED,
ER_SP_INVALID_HEADER,
ER_LOG_CHECKPOINT_SKIP_INVALID_PAGE
};
typedef enum
{
PRM_PRINT_NONE = 0,
PRM_PRINT_NAME,
PRM_PRINT_ID
} PRM_PRINT_MODE;
typedef enum
{
PRM_PRINT_CURR_VAL = 0,
PRM_PRINT_DEFAULT_VAL
} PRM_PRINT_VALUE_MODE;
static int prm_print (const SYSPRM_PARAM * prm, char *buf, size_t len, PRM_PRINT_MODE print_mode,
PRM_PRINT_VALUE_MODE print_value_mode);
static int sysprm_load_and_init_internal (const char *db_name, const char *conf_file, bool reload,
const int load_flags);
static void prm_check_environment (void);
#if defined(_ENABLE_SYSTEM_PARAMS_CHECK_)
static int prm_check_parameters (void);
#endif
#if !defined (SERVER_MODE)
static SYSPRM_ERR sysprm_validate_escape_char_parameters (const SYSPRM_ASSIGN_VALUE * assignment_list);
#endif
static int prm_load_by_section (INI_TABLE * ini, const char *section, bool ignore_section, bool reload,
const char *file, const int load_flags, bool ignore_case, bool is_common_section);
static int prm_read_and_parse_ini_file (const char *prm_file_name, const char *db_name, const bool reload,
const int load_flags);
static void prm_report_bad_entry (const char *key, int line, int err, const char *where);
static SYSPRM_ERR sysprm_get_param_range (SYSPRM_PARAM * prm, void *min, void *max);
static int prm_check_range (SYSPRM_PARAM * prm, void *value);
static int prm_set (SYSPRM_PARAM * prm, const char *value, bool set_flag);
static int prm_set_force (SYSPRM_PARAM * prm, const char *value);
static int prm_set_default (SYSPRM_PARAM * prm);
static SYSPRM_PARAM *prm_find (const char *pname, const char *section);
static const KEYVAL *prm_keyword (int val, const char *name, const KEYVAL * tbl, int dim);
static void prm_tune_parameters (void);
static int prm_compound_has_changed (SYSPRM_PARAM * prm, bool set_flag);
static void prm_set_compound (SYSPRM_PARAM * param, const char **compound_param_values[], const int values_count,
bool set_flag);
static int prm_get_next_param_value (char **data, char **prm, char **value);
static int sysprm_compare_values (SYSPRM_PARAM * prm);
static void sysprm_set_sysprm_value_from_parameter (SYSPRM_VALUE * prm_value, SYSPRM_PARAM * prm);
static SESSION_PARAM *sysprm_alloc_session_parameters (void);
static SYSPRM_ERR sysprm_generate_new_value (SYSPRM_PARAM * prm, const char *value, bool check,
SYSPRM_VALUE * new_value);
static int sysprm_set_value (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag, bool duplicate);
static void sysprm_set_system_parameter_value (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag);
static int sysprm_print_sysprm_value (PARAM_ID prm_id, SYSPRM_VALUE value, char *buf, size_t len,
PRM_PRINT_MODE print_mode);
static void sysprm_update_flag_different (SYSPRM_PARAM * prm);
#if defined(UNUSED_FUNCTIONS)
static void sysprm_update_flag_allocated (SYSPRM_PARAM * prm);
#endif
static void sysprm_update_session_prm_flag_allocated (SESSION_PARAM * prm);
static void sysprm_clear_sysprm_value (SYSPRM_VALUE * value, SYSPRM_DATATYPE datatype);
static char *sysprm_pack_sysprm_value (char *ptr, SYSPRM_VALUE value, SYSPRM_DATATYPE datatype);
static int sysprm_packed_sysprm_value_length (SYSPRM_VALUE value, SYSPRM_DATATYPE datatype, int offset);
static char *sysprm_unpack_sysprm_value (char *ptr, SYSPRM_VALUE * value, SYSPRM_DATATYPE datatype);
static bool prm_set_default_internal (SYSPRM_PARAM * prm);
static int sysprm_set_value_internal (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag, bool duplicate);
static const int *sysprm_find_shared_system_parameter (SYSPRM_PARAM * prm);
#if defined (SERVER_MODE)
static SYSPRM_ERR sysprm_set_session_parameter_value (SESSION_PARAM * session_parameter, SYSPRM_VALUE value);
static SYSPRM_ERR sysprm_set_session_parameter_default (SESSION_PARAM * session_parameter, PARAM_ID prm_id);
#endif /* SERVER_MODE */
#if defined (CS_MODE)
static void sysprm_update_cached_session_param_val (const PARAM_ID prm_id);
#endif
#if defined (SA_MODE) || defined (SERVER_MODE)
static void init_server_timezone_parameter (void);
#endif
/* conf files that have been loaded */
#define MAX_NUM_OF_PRM_FILES_LOADED (10)
typedef struct
{
char *conf_path;
char *db_name;
} conf_file_n_db_name_map;
struct prm_config_files_loaded
{
private:
conf_file_n_db_name_map m_loaded[MAX_NUM_OF_PRM_FILES_LOADED];
int m_used;
public:
prm_config_files_loaded ()
{
m_used = 0;
}
~prm_config_files_loaded ()
{
clear ();
}
void clear ()
{
assert (m_used >= 0 && m_used <= MAX_NUM_OF_PRM_FILES_LOADED);
while (m_used > 0)
{
m_used--;
if (m_loaded[m_used].conf_path)
{
free_and_init (m_loaded[m_used].conf_path);
}
if (m_loaded[m_used].db_name)
{
free_and_init (m_loaded[m_used].db_name);
}
}
}
void add (const char *conf_path, const char *db_name)
{
assert (conf_path != NULL);
assert (m_used >= 0);
for (int i = 0; i < m_used; i++)
{
if (m_loaded[i].conf_path != NULL && strcmp (conf_path, m_loaded[i].conf_path) == 0)
{
if (db_name)
{
if (m_loaded[i].db_name != NULL && strcmp (db_name, m_loaded[i].db_name) == 0)
{
return;
}
}
else if (m_loaded[i].db_name == NULL)
{
return;
}
}
}
if (m_used < MAX_NUM_OF_PRM_FILES_LOADED)
{
assert (m_loaded[m_used].conf_path == NULL);
m_loaded[m_used].conf_path = strdup (conf_path);
m_loaded[m_used].db_name = db_name ? strdup (db_name) : NULL;
m_used++;
}
}
void dump (FILE * fp)
{
assert (m_used >= 0 && m_used <= MAX_NUM_OF_PRM_FILES_LOADED);
for (int i = 0; i < m_used; i++)
{
assert (m_loaded[i].conf_path != NULL);
fprintf (fp, "# %s", m_loaded[i].conf_path);
if (m_loaded[i].db_name)
{
fprintf (fp, " [@%s]\n", m_loaded[i].db_name);
}
else
{
fprintf (fp, "\n");
}
}
}
}; // struct prm_config_files_loaded
static struct prm_config_files_loaded prm_file_has_been_loaded;
/*
* sysprm_dump_parameters - Print out current system parameters
* return: none
* fp(in): file descriptor to save results
* pmarker(in): prefix marker
* in_flags(in): combination of bit flags you want to dump
* if_cond(in): dumping condition of including flags (OR, AND)
* out_flags(in): combination of bit flags that you want to exclude from the dump
* of_cond(in): dumping condition of excluding flags (OR, AND)
* old_style(in): print in the old sytle
*/
void
sysprm_dump_parameters (FILE * fp, char pmarker, unsigned int in_flags, SYSPRM_DUMP_CONDITION if_cond,
unsigned int out_flags, SYSPRM_DUMP_CONDITION of_cond, bool old_style)
{
char buf[LINE_MAX], tmpbuf[LINE_MAX];
int i;
const SYSPRM_PARAM *prm;
char dmarker;
char *ptr;
fprintf (fp, "#\n# cubrid.conf\n#\n\n");
fprintf (fp, "# system parameters were loaded from the files ([@section])\n");
prm_file_has_been_loaded.dump (fp);
fprintf (fp, "\n# system parameters\n");
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
prm = GET_PRM (i);
if (PRM_IS_OBSOLETED (prm))
{
continue;
}
/* skip matched excluding flags */
if (of_cond == PRM_OR_CONDITION && (prm->static_flag & out_flags))
{
continue;
}
else if (of_cond == PRM_AND_CONDITION && ((prm->static_flag & out_flags) == out_flags))
{
continue;
}
/* skip unmatched including flags */
if (if_cond == PRM_OR_CONDITION && !(prm->static_flag | in_flags))
{
continue;
}
else if (if_cond == PRM_AND_CONDITION && ((prm->static_flag & in_flags) != in_flags))
{
continue;
}
prm_print (prm, buf, LINE_MAX, PRM_PRINT_NAME, PRM_PRINT_CURR_VAL);
prm_print (prm, tmpbuf, LINE_MAX, PRM_PRINT_NONE, PRM_PRINT_DEFAULT_VAL);
/* check if it is different from the default value */
dmarker = ' ';
ptr = strchr (buf, '=');
if (ptr != NULL && strcmp (ptr + 1, tmpbuf) != 0)
{
dmarker = '*';
}
if (old_style)
{
fprintf (fp, "%s\n", buf);
}
else
{
fprintf (fp, "[%c%c] %s (%s)\n", pmarker, dmarker, buf, tmpbuf);
}
}
}
/*
* sysprm_set_er_log_file -
* return: void
* base_db_name(in): database name
*
*/
void
sysprm_set_er_log_file (const char *db_name)
{
char *s, *base_db_name;
char local_db_name[DB_MAX_IDENTIFIER_LENGTH];
time_t log_time;
struct tm log_tm, *log_tm_p = &log_tm;
char error_log_name[PATH_MAX];
if (db_name == NULL)
{
return;
}
if (PRM_IS_SET (GET_PRM (PRM_ID_ER_LOG_FILE)))
{
return;
}
strncpy_bufsize (local_db_name, db_name);
s = strchr (local_db_name, '@');
if (s)
{
*s = '\0';
}
base_db_name = basename ((char *) local_db_name);
if (base_db_name == NULL)
{
return;
}
log_time = time (NULL);
log_tm_p = localtime_r (&log_time, &log_tm);
if (log_tm_p != NULL)
{
snprintf (error_log_name, PATH_MAX - 1, "%s%c%s_%04d%02d%02d_%02d%02d.err", ER_LOG_FILE_DIR, PATH_SEPARATOR,
base_db_name, log_tm_p->tm_year + 1900, log_tm_p->tm_mon + 1, log_tm_p->tm_mday, log_tm_p->tm_hour,
log_tm_p->tm_min);
prm_set (GET_PRM (PRM_ID_ER_LOG_FILE), error_log_name, true);
}
}
#ifndef NDEBUG
static void
sysprm_check_id_order ()
{
static bool is_initialized =[](){
int i, k;
const int *ptr;
assert (GET_PRM (0)->id == PRM_FIRST_ID);
for (i = 1; i < MAX_SYSTEM_PARAMS; i++)
{
assert (GET_PRM (i - 1)->id == ((GET_PRM (i)->id) - 1));
assert (GET_PRM (i)->id == (PARAM_ID) i);
}
for (i = 0; PARAM_VALUE_SHARE[i] != NULL; i++)
{
ptr = PARAM_VALUE_SHARE[i];
assert (ptr[0] >= 2);
for (k = 1; k < ptr[0]; k++)
{
assert (ptr[k] < ptr[k + 1]);
}
if (i > 0)
{
assert (ptr[1] > PARAM_VALUE_SHARE[i - 1][1]);
}
}
return true;
}
();
assert (is_initialized == true);
/* Notice:
* This ensures the variable is not optimized away, even though it does not change the functional logic of the code
* Please do not delete the following two lines.
*/
(void) is_initialized; // Dummy Reference
*(volatile bool *) &is_initialized;
}
#endif
/*
* sysprm_load_and_init_internal - Read system parameters from the init files
* return: NO_ERROR or ER_FAILED
* db_name(in): database name
* conf_file(in): config file
* reload(in):
* load_flags(in):
*
* Note: Parameters would be tuned and forced according to the internal rules.
*/
static int
sysprm_load_and_init_internal (const char *db_name, const char *conf_file, bool reload, const int load_flags)
{
char *base_db_name = NULL;
const char *file_path_ptr = NULL;
char file_being_dealt_with[PATH_MAX];
char local_db_name[DB_MAX_IDENTIFIER_LENGTH];
int i;
struct stat stat_buf;
int r = NO_ERROR;
char *s;
#if defined (CS_MODE)
SESSION_PARAM *sprm = NULL;
int num_session_prms;
#endif
#ifndef NDEBUG
sysprm_check_id_order ();
#endif
if (reload)
{
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (PRM_IS_RELOADABLE (GET_PRM (i)))
{
if (prm_set_default (GET_PRM (i)) != PRM_ERR_NO_ERROR)
{
GET_PRM (i)->value = NULL_SYSPRM_PARAM_VALUE;
}
}
}
}
if (db_name == NULL)
{
/* initialize message catalog at here because there could be a code path that did not call msgcat_init() before */
if (msgcat_init () != NO_ERROR)
{
return ER_FAILED;
}
base_db_name = NULL;
}
else
{
strncpy_bufsize (local_db_name, db_name);
s = strchr (local_db_name, '@');
if (s)
{
*s = '\0';
}
base_db_name = basename ((char *) local_db_name);
}
#if !defined (CS_MODE)
if (base_db_name != NULL && reload == false)
{
sysprm_set_er_log_file (base_db_name);
}
#endif /* !CS_MODE */
/*
* Read installation configuration file - $CUBRID/conf/cubrid.conf
* or use conf_file if exist
*/
if (conf_file == NULL)
{
/* use environment variable's value if exist */
conf_file = envvar_get ("CONF_FILE");
if (conf_file != NULL && *conf_file == '\0')
{
conf_file = NULL;
}
}
if (conf_file != NULL)
{
/* use user specified config path and file */
file_path_ptr = conf_file;
}
else
{
envvar_confdir_file (file_being_dealt_with, PATH_MAX, sysprm_conf_file_name);
file_path_ptr = file_being_dealt_with;
}
if (stat (file_path_ptr, &stat_buf) != 0)
{
fprintf (stderr, msgcat_message (MSGCAT_CATALOG_CUBRID, MSGCAT_SET_PARAMETERS, PRM_ERR_CANT_ACCESS),
file_path_ptr, strerror (errno));
}
else
{
r = prm_read_and_parse_ini_file (file_path_ptr, base_db_name, reload, load_flags | SYSPRM_IGNORE_HA);
if (r != NO_ERROR)
{
return r;
}
}
if (prm_get_integer_value (PRM_ID_HA_MODE) != HA_MODE_OFF)
{
/* use environment variable's value if exist */
conf_file = envvar_get ("HA_CONF_FILE");
if (conf_file != NULL && conf_file[0] != '\0')
{
file_path_ptr = conf_file;
}
else
{
envvar_confdir_file (file_being_dealt_with, PATH_MAX, sysprm_ha_conf_file_name);
file_path_ptr = file_being_dealt_with;
}
if (stat (file_path_ptr, &stat_buf) == 0)
{
r = prm_read_and_parse_ini_file (file_path_ptr, NULL, reload, load_flags);
if (r != NO_ERROR)
{
return r;
}
}
}
/*
* If a parameter is not given, set it by default
*/
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (!PRM_IS_SET (GET_PRM (i)) && !PRM_IS_OBSOLETED (GET_PRM (i)))
{
if (prm_set_default (GET_PRM (i)) != PRM_ERR_NO_ERROR)
{
fprintf (stderr, msgcat_message (MSGCAT_CATALOG_CUBRID, MSGCAT_SET_PARAMETERS, PRM_ERR_NO_VALUE),
GET_PRM (i)->name);
assert (0);
return ER_FAILED;
}
}
}
#if defined (SA_MODE) || defined (SERVER_MODE)
init_server_timezone_parameter ();
#endif
/*
* Perform system parameter check and tuning.
*/
prm_check_environment ();
prm_tune_parameters ();
#if defined(_ENABLE_SYSTEM_PARAMS_CHECK_)
if (prm_check_parameters () != NO_ERROR)
{
return ER_FAILED;
}
#endif
/*
* Perform forced system parameter setting.
*/
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (GET_PRM (i)->force_value)
{
prm_set (GET_PRM (i), GET_PRM (i)->force_value, false);
}
}
#if 0
if (envvar_get ("PARAM_DUMP"))
{
sysprm_dump_parameters (stdout, ' ', PRM_ALL_FLAGS, SYSPRM_OR_CONDITION, PRM_EMPTY_FLAG, SYSPRM_OR_CONDITION,
false);
}
#endif
intl_Mbs_support = prm_get_bool_value (PRM_ID_INTL_MBS_SUPPORT);
intl_String_validation = prm_get_bool_value (PRM_ID_INTL_CHECK_INPUT_STRING);
/* count the number of session parameters */
if (num_session_parameters == 0)
{
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
prm_Def_session_idx[i] = (PRM_IS_FOR_SESSION (GET_PRM (i))) ? num_session_parameters++ : -1;
}
}
#if defined (CS_MODE)
/* cache session parameters */
if (cached_session_parameters != NULL)
{
/* free previous cache */
sysprm_free_session_parameters (&cached_session_parameters);
}
cached_session_parameters = sysprm_alloc_session_parameters ();
num_session_prms = 0;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (PRM_IS_FOR_SESSION (GET_PRM (i)))
{
assert (prm_Def_session_idx[i] == num_session_prms);
sprm = &cached_session_parameters[num_session_prms++];
sprm->prm_id = (PARAM_ID) i;
sprm->flag = (GET_PRM (i)->dynamic_flag);
sprm->datatype = GET_PRM (i)->datatype;
sysprm_set_sysprm_value_from_parameter (&sprm->value, GET_PRM (i));
sysprm_update_session_prm_flag_allocated (sprm);
}
else
{
assert (prm_Def_session_idx[i] == -1);
}
}
#endif /* CS_MODE */
#if !defined(NDEBUG)
/* verify flags are not incorrect or confusing */
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
SYSPRM_PARAM *prm = GET_PRM (i);
if (PRM_IS_FOR_SESSION (prm) && (!PRM_IS_FOR_CLIENT (prm) || !PRM_USER_CAN_CHANGE (prm)))
{
/* session parameters can only be parameters for client that are changeable on-line */
assert (0);
}
if (PRM_IS_FOR_SESSION (prm) && PRM_IS_HIDDEN (prm))
{
/* hidden parameters are not allowed to use PRM_FOR_SESSION flag */
assert (0);
}
if (PRM_CLIENT_SESSION_ONLY (prm) && (!PRM_IS_FOR_SERVER (prm) || !PRM_IS_FOR_SESSION (prm)))
{
/* client session only makes sense if the parameter is for session and for server */
assert (0);
}
if (PRM_USER_CAN_CHANGE (prm) && PRM_TEST_CHANGE_ONLY (prm))
{
/* do not set both parameters: USER_CHANGE: the user can change parameter value on-line TEST_CHANGE: for QA
* only */
assert (0);
}
if (PRM_IS_GET_SERVER (prm) && (PRM_IS_FOR_SESSION (prm) || PRM_IS_HIDDEN (prm)))
{
/* session and hidden parameters are not allowed to use PRM_GET_SERVER flag */
assert (0);
}
if (PRM_IS_GET_SERVER (prm)
&& (!PRM_IS_FOR_CLIENT (prm) || !PRM_IS_FOR_SERVER (prm) || !PRM_USER_CAN_CHANGE (prm)))
{
/* Note that PRM_GET_SERVER flag only can be set if the parameter has PRM_FOR_CLIENT, PRM_FOR_SERVER, and
* PRM_USER_CHANGE flags. */
assert (0);
}
}
#endif
return NO_ERROR;
}
/*
* sysprm_load_and_init - Read system parameters from the init files
* return: NO_ERROR or ER_FAILED
* db_name(in): database name
* conf_file(in): config file
*
*/
int
sysprm_load_and_init (const char *db_name, const char *conf_file, const int load_flags)
{
return sysprm_load_and_init_internal (db_name, conf_file, false, load_flags);
}
/*
* sysprm_load_and_init_client - Read system parameters from the init files
* (client version)
* return: NO_ERROR or ER_FAILED
* db_name(in): database name
* conf_file(in): config file
*
*/
int
sysprm_load_and_init_client (const char *db_name, const char *conf_file)
{
return sysprm_load_and_init_internal (db_name, conf_file, false, SYSPRM_LOAD_ALL);
}
/*
* sysprm_reload_and_init - Read system parameters from the init files
* return: NO_ERROR or ER_FAILED
* db_name(in): database name
* conf_file(in): config file
*
*/
int
sysprm_reload_and_init (const char *db_name, const char *conf_file)
{
return sysprm_load_and_init_internal (db_name, conf_file, true, SYSPRM_LOAD_ALL);
}
static bool
prm_section_cmp (const char *key1, const char *key2, int key_len, bool ignore_case)
{
const char *s1 = strchr (key1, ':');
int len = (s1) ? CAST_STRLEN (s1 - key1) : strlen (key1);
if (len != key_len)
{
return false;
}
if (ignore_case)
{
return (strncasecmp (key1, key2, key_len) == 0);
}
return (memcmp (key1, key2, key_len) == 0);
}
/*
* prm_load_by_section - Set system parameters from a file
* return: void
* ini(in):
* section(in):
* ignore_section(in):
* reload(in):
* file(in):
* load_flags(in):
* ignore_case(in):
*/
static int
prm_load_by_section (INI_TABLE * ini, const char *section, bool ignore_section, bool reload, const char *file,
const int load_flags, bool ignore_case, bool is_common_section)
{
int i, error;
int sec_len;
const char *sec_p;
const char *key, *value;
SYSPRM_PARAM *prm;
int sec_key_len;
sec_p = strchr (section, ':');
sec_key_len = (sec_p) ? CAST_STRLEN (sec_p - section) : strlen (section);
sec_p = (ignore_section) ? NULL : section;
for (i = 0; i < ini->size; i++)
{
if (ini->key[i] == NULL || ini->val[i] == NULL)
{
continue;
}
key = ini->key[i];
value = ini->val[i];
if (key[0] != ':')
{
if (!prm_section_cmp (key, section, sec_key_len, ignore_case))
{
continue;
}
sec_len = sec_key_len + 1;
}
else if (ignore_section)
{
sec_len = 1;
}
else
{
continue;
}
prm = prm_find (key + sec_len, sec_p);
if (prm == NULL)
{
error = PRM_ERR_UNKNOWN_PARAM;
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
#if defined (CS_MODE)
if (PRM_IS_FOR_SERVER (prm) && !PRM_IS_FOR_CLIENT (prm))
{
/* prm for only server */
continue;
}
#endif /* CS_MODE */
#if defined (SERVER_MODE)
if (PRM_IS_FOR_CLIENT (prm) && !PRM_IS_FOR_SERVER (prm))
{
/* prm for only client */
continue;
}
#endif /* SERVER_MODE */
if (reload && !PRM_IS_RELOADABLE (prm))
{
continue;
}
if (!SYSPRM_LOAD_IS_IGNORE_HA (load_flags) && !PRM_IS_FOR_HA (prm))
{
continue;
}
if (PRM_IS_OBSOLETED (prm))
{
continue;
}
if (PRM_IS_DEPRECATED (prm))
{
prm_report_bad_entry (key + sec_len, ini->lineno[i], PRM_ERR_DEPRICATED, file);
}
#if defined(SERVER_MODE)
if (prm->id == PRM_ID_TIMEZONE)
{
continue;
}
#endif
if (SYSPRM_LOAD_IS_IGNORE_INTL (load_flags)
&& (prm->id == PRM_ID_INTL_CHECK_INPUT_STRING
|| prm->id == PRM_ID_INTL_NUMBER_LANG || prm->id == PRM_ID_INTL_DATE_LANG
|| prm->id == PRM_ID_INTL_COLLATION || prm->id == PRM_ID_INTL_MBS_SUPPORT
|| prm->id == PRM_ID_SERVER_TIMEZONE || prm->id == PRM_ID_TIMEZONE))
{
continue;
}
#if !defined(SERVER_MODE)
if (prm->id == PRM_ID_OPTIMIZATION_LEVEL)
{
if (value != NULL)
{
int level;
if (parse_int (&level, value, 10) < 0 || CHECK_INVALID_OPTIMIZATION_LEVEL (level))
{
error = PRM_ERR_BAD_VALUE;
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
}
}
#endif
/* The contents of the cubrid_hosts.conf file associated with use_user_hosts are also considered system parameters. */
if (prm->id == PRM_ID_USE_USER_HOSTS)
{
if (value != NULL)
{
const KEYVAL *keyvalp = NULL;
keyvalp = prm_keyword (-1, value, boolean_words, DIM (boolean_words));
if (keyvalp != NULL && keyvalp->val == 1)
{
if (validate_uhost_conf () == false)
{
return PRM_ERR_BAD_VALUE;
}
}
}
}
if (prm->id == PRM_ID_SERVER_TIMEZONE)
{
TZ_REGION tz_region_system;
int er_status = NO_ERROR;
if (value != NULL)
{
/* offset timezone can work without timezone lib */
er_status = tz_str_to_region (value, strlen (value), &tz_region_system);
if (er_status != NO_ERROR)
{
/* we may have geographic region name, make sure timezone lib is loaded */
if (tz_load () != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
er_status = tz_str_to_region (value, strlen (value), &tz_region_system);
}
if (er_status != NO_ERROR)
{
error = PRM_ERR_BAD_VALUE;
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
tz_set_tz_region_system (&tz_region_system);
}
}
#if defined(SERVER_MODE) || defined(CS_MODE)
if (prm->id == PRM_ID_SERVER_TIMEZONE || prm->id == PRM_ID_TIMEZONE)
{
int er_status = NO_ERROR;
if (value != NULL)
{
/* offset timezone can work without timezone lib */
#if !defined(SERVER_MODE)
er_status = tz_str_to_region (value, strlen (value), tz_get_client_tz_region_session ());
#else
er_status = tz_str_to_region (value, strlen (value), NULL);
#endif
if (er_status != NO_ERROR)
{
/* we may have geographic region name, make sure timezone lib is loaded */
if (tz_load () != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
#if !defined(SERVER_MODE)
er_status = tz_str_to_region (value, strlen (value), tz_get_client_tz_region_session ());
#else
er_status = tz_str_to_region (value, strlen (value), NULL);
#endif
}
if (er_status != NO_ERROR)
{
error = PRM_ERR_BAD_VALUE;
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
}
}
#endif
if (is_common_section && (prm->id == PRM_ID_STORED_PROCEDURE_PORT))
{
error = PRM_ERR_CANNOT_CHANGE;
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
error = prm_set (prm, value, true);
if (error != NO_ERROR)
{
prm_report_bad_entry (key + sec_len, ini->lineno[i], error, file);
return error;
}
}
return NO_ERROR;
}
/*
* prm_read_and_parse_ini_file - Set system parameters from a file
* return: NO_ERROR or error code defined in enum SYSPRM_ERR
* prm_file_name(in):
* db_name(in):
* reload(in):
* load_flags(in):
*/
static int
prm_read_and_parse_ini_file (const char *prm_file_name, const char *db_name, const bool reload, const int load_flags)
{
INI_TABLE *ini;
char sec_name[LINE_MAX];
char host_name[CUB_MAXHOSTNAMELEN];
char user_name[CUB_MAXHOSTNAMELEN];
int error;
ini = ini_parser_load (prm_file_name);
if (ini == NULL)
{
fprintf (stderr, msgcat_message (MSGCAT_CATALOG_CUBRID, MSGCAT_SET_PARAMETERS, PRM_ERR_CANT_OPEN_INIT),
prm_file_name, strerror (errno));
return PRM_ERR_FILE_ERR;
}
error = prm_load_by_section (ini, "common", true, reload, prm_file_name, load_flags, true, true);
if (error == NO_ERROR && SYSPRM_LOAD_IS_IGNORE_HA (load_flags) && db_name != NULL && *db_name != '\0')
{
snprintf (sec_name, LINE_MAX, "@%s", db_name);
error = prm_load_by_section (ini, sec_name, true, reload, prm_file_name, load_flags, false, false);
}
#if defined (SA_MODE)
if (error == NO_ERROR)
{
error = prm_load_by_section (ini, "standalone", true, reload, prm_file_name, load_flags, true, false);
}
#endif /* SA_MODE */
if (error == NO_ERROR && SYSPRM_LOAD_IS_IGNORE_HA (load_flags))
{
error = prm_load_by_section (ini, "service", false, reload, prm_file_name, load_flags, true, false);
}
if (error == NO_ERROR && !SYSPRM_LOAD_IS_IGNORE_HA (load_flags)
&& prm_get_integer_value (PRM_ID_HA_MODE) != HA_MODE_OFF && GETHOSTNAME (host_name, CUB_MAXHOSTNAMELEN) == 0)
{
snprintf (sec_name, LINE_MAX, "%%%s|*", host_name);
error = prm_load_by_section (ini, sec_name, true, reload, prm_file_name, load_flags, true, false);
if (error == NO_ERROR && getlogin_r (user_name, CUB_MAXHOSTNAMELEN) == 0)
{
snprintf (sec_name, LINE_MAX, "%%%s|%s", host_name, user_name);
error = prm_load_by_section (ini, sec_name, true, reload, prm_file_name, load_flags, true, false);
}
}
ini_parser_free (ini);
prm_file_has_been_loaded.add (prm_file_name, db_name);
return error;
}
/*
* prm_size_to_io_pages -
* return: value
*/
static int
prm_size_to_io_pages (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_BIGINT)
{
int *page_value = (int *) out_val;
UINT64 *size_value = (UINT64 *) in_val;
UINT64 tmp_value;
tmp_value = *size_value / IO_PAGESIZE;
if (*size_value % IO_PAGESIZE > 0)
{
tmp_value++;
}
if (tmp_value > INT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*page_value = (int) tmp_value;
}
}
else if (out_type == PRM_FLOAT && in_type == PRM_BIGINT)
{
float *page_value = (float *) out_val;
UINT64 *size_value = (UINT64 *) in_val;
double tmp_value;
tmp_value = (double) *size_value / IO_PAGESIZE;
if (tmp_value > FLT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*page_value = ceilf ((float) tmp_value * 100) / 100;
}
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_io_pages_to_size -
* return: value
*/
static int
prm_io_pages_to_size (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_BIGINT && in_type == PRM_INTEGER)
{
UINT64 *size_value = (UINT64 *) out_val;
UINT64 page_value = *(int *) in_val;
*size_value = (UINT64) (page_value * IO_PAGESIZE);
}
else if (out_type == PRM_BIGINT && in_type == PRM_FLOAT)
{
UINT64 *size_value = (UINT64 *) out_val;
float page_value = *(float *) in_val;
*size_value = (UINT64) (page_value * IO_PAGESIZE);
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_size_to_log_pages -
* return: value
*/
static int
prm_size_to_log_pages (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_BIGINT)
{
int *page_value = (int *) out_val;
UINT64 *size_value = (UINT64 *) in_val;
UINT64 tmp_value;
tmp_value = *size_value / LOG_PAGESIZE;
if (*size_value % LOG_PAGESIZE)
{
tmp_value++;
}
if (tmp_value > INT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*page_value = (int) tmp_value;
}
}
else if (out_type == PRM_FLOAT && in_type == PRM_BIGINT)
{
float *page_value = (float *) out_val;
UINT64 *size_value = (UINT64 *) in_val;
double tmp_value;
tmp_value = (double) *size_value / LOG_PAGESIZE;
if (tmp_value > FLT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*page_value = ceilf ((float) tmp_value * 100) / 100;
}
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_log_pages_to_size -
* return: value
*/
static int
prm_log_pages_to_size (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_BIGINT && in_type == PRM_INTEGER)
{
UINT64 *size_value = (UINT64 *) out_val;
UINT64 page_value = *(int *) in_val;
*size_value = (UINT64) (page_value * LOG_PAGESIZE);
}
else if (out_type == PRM_BIGINT && in_type == PRM_FLOAT)
{
UINT64 *size_value = (UINT64 *) out_val;
float page_value = *(float *) in_val;
*size_value = (UINT64) (page_value * LOG_PAGESIZE);
}
else if (out_type == PRM_INTEGER && in_type == PRM_INTEGER)
{
int *size_value = (int *) out_val;
int page_value = *(int *) in_val;
UINT64 t;
t = ((UINT64) page_value) * LOG_PAGESIZE;
if (t > INT_MAX)
{
return PRM_ERR_BAD_VALUE;
}
*size_value = (int) t;
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_msec_to_sec -
* return: value
*/
static int
prm_msec_to_sec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_BIGINT)
{
int *sec_value = (int *) out_val;
UINT64 *msec_value = (UINT64 *) in_val;
UINT64 tmp_value;
tmp_value = *msec_value / ONE_SEC;
if (tmp_value > INT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*sec_value = (int) tmp_value;
if (*msec_value % ONE_SEC > 0)
{
*sec_value = *sec_value + 1;
}
}
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_sec_to_msec -
* return: value
*/
static int
prm_sec_to_msec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_BIGINT && in_type == PRM_INTEGER)
{
UINT64 *msec_value = (UINT64 *) out_val;
int sec_value = *(int *) in_val;
*msec_value = ((UINT64) sec_value) * ONE_SEC;
}
else if (out_type == PRM_INTEGER && in_type == PRM_INTEGER)
{
int *msec_value = (int *) out_val;
int sec_value = *(int *) in_val;
UINT64 t;
t = ((UINT64) sec_value) * ONE_SEC;
if (t > INT_MAX)
{
return PRM_ERR_BAD_VALUE;
}
*msec_value = (int) t;
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_sec_to_min -
* return: value
*/
static int
prm_sec_to_min (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_INTEGER)
{
int *min_value = (int *) out_val;
int sec_value = *((int *) in_val);
if (sec_value < 0)
{
*min_value = sec_value;
}
else
{
*min_value = sec_value / 60;
if (sec_value % 60 > 0)
{
*min_value = *min_value + 1;
}
}
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_min_to_sec -
* return: value
*/
static int
prm_min_to_sec (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_INTEGER)
{
int *sec_value = (int *) out_val;
int *min_value = (int *) in_val;
UINT64 tmp_value;
if (*min_value < 0)
{
*sec_value = *min_value;
}
else
{
tmp_value = *min_value * 60;
if (tmp_value > INT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
else
{
*sec_value = (int) tmp_value;
}
}
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
/*
* prm_equal_to_ori -
* return: value
*/
static int
prm_equal_to_ori (void *out_val, SYSPRM_DATATYPE out_type, void *in_val, SYSPRM_DATATYPE in_type)
{
if (out_val == NULL || in_val == NULL)
{
return PRM_ERR_BAD_VALUE;
}
if (out_type == PRM_INTEGER && in_type == PRM_INTEGER)
{
int *in_value = (int *) in_val;
int *out_value = (int *) out_val;
*out_value = *in_value;
}
else if (out_type == PRM_FLOAT && in_type == PRM_FLOAT)
{
float *in_value = (float *) in_val;
float *out_value = (float *) out_val;
*out_value = *in_value;
}
else if (out_type == PRM_BIGINT && in_type == PRM_BIGINT)
{
UINT64 *in_value = (UINT64 *) in_val;
UINT64 *out_value = (UINT64 *) out_val;
*out_value = *in_value;
}
else if (out_type == PRM_INTEGER && in_type == PRM_BIGINT)
{
UINT64 *in_value = (UINT64 *) in_val;
int *out_value = (int *) out_val;
if (*in_value > INT_MAX)
{
return PRM_ERR_BAD_RANGE;
}
*out_value = (int) *in_value;
}
else if (out_type == PRM_BIGINT && in_type == PRM_INTEGER)
{
int *in_value = (int *) in_val;
UINT64 *out_value = (UINT64 *) out_val;
*out_value = (UINT64) (*in_value);
}
else
{
assert_release (false);
return PRM_ERR_BAD_VALUE;
}
return NO_ERROR;
}
#if defined(_ENABLE_SYSTEM_PARAMS_CHECK_)
/*
* prm_check_parameters -
* return: int
*/
static int
prm_check_parameters (void)
{
/*
* ha_node_list and ha_db_list should be not null for ha_mode=yes|replica
*/
if (prm_get_integer_value (PRM_ID_HA_MODE) != HA_MODE_OFF)
{
char *node_list = prm_get_string_value (PRM_ID_HA_NODE_LIST);
char *db_list = prm_get_string_value (PRM_ID_HA_DB_LIST);
if (node_list == NULL || node_list[0] == 0 || db_list == NULL || db_list[0] == 0)
{
fprintf (stderr, msgcat_message (MSGCAT_CATALOG_CUBRID, MSGCAT_SET_PARAMETERS, PRM_ERR_NO_VALUE),
PRM_NAME_HA_NODE_LIST);
return ER_FAILED;
}
}
return NO_ERROR;
}
#endif
/*
* prm_check_environment -
* return: none
*/
static void
prm_check_environment (void)
{
int i;
char buf[PRM_DEFAULT_BUFFER_SIZE];
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
SYSPRM_PARAM *prm;
const char *str;
prm = GET_PRM (i);
strncpy (buf, prm->name, sizeof (buf) - 1);
buf[sizeof (buf) - 1] = '\0';
ustr_upper (buf);
str = envvar_get (buf);
if (str && str[0])
{
int error;
error = prm_set (prm, str, true);
if (error != 0)
{
prm_report_bad_entry (prm->name, -1, error, buf);
}
}
}
}
#if !defined (SERVER_MODE)
/*
* sysprm_validate_escape_char_parameters () - validate escape char setting
*
* return : SYSPRM_ERR
* assignments_list (in) : list of assignments to validate.
*
* NOTE: To validate whether there will be conflictive settings between
* PRM_ID_REQUIRE_LIKE_ESCAPE_CHARACTER and PRM_ID_NO_BACKSLASH_ESCAPES.
* Since both must not simultaneously be true.
*/
static SYSPRM_ERR
sysprm_validate_escape_char_parameters (const SYSPRM_ASSIGN_VALUE * assignment_list)
{
SYSPRM_PARAM *prm = NULL;
const SYSPRM_ASSIGN_VALUE *assignment = NULL;
bool set_require_like_escape, set_no_backslash_escape;
bool is_require_like_escape = false, is_no_backslash_escape = false;
set_require_like_escape = set_no_backslash_escape = false;
for (assignment = assignment_list; assignment != NULL; assignment = assignment->next)
{
if (assignment->prm_id == PRM_ID_REQUIRE_LIKE_ESCAPE_CHARACTER)
{
set_require_like_escape = true;
is_require_like_escape = assignment->value.b;
}
else if (assignment->prm_id == PRM_ID_NO_BACKSLASH_ESCAPES)
{
set_no_backslash_escape = true;
is_no_backslash_escape = assignment->value.b;
}
}
if (!set_require_like_escape && !set_no_backslash_escape)
{
return PRM_ERR_NO_ERROR;
}
if (!set_no_backslash_escape)
{
prm = GET_PRM (PRM_ID_NO_BACKSLASH_ESCAPES);
is_no_backslash_escape = PRM_GET_BOOL (prm->value);
}
if (!set_require_like_escape)
{
prm = GET_PRM (PRM_ID_REQUIRE_LIKE_ESCAPE_CHARACTER);
is_require_like_escape = PRM_GET_BOOL (prm->value);
}
if (is_require_like_escape == true && is_no_backslash_escape == true)
{
return PRM_ERR_CANNOT_CHANGE;
}
return PRM_ERR_NO_ERROR;
}
/*
* sysprm_validate_change_parameters () - validate the parameter value changes
*
* return : SYSPRM_ERR
* data (in) : string containing "parameter = value" assignments
* check (in) : check if user can change parameter and if
* parameter should also change on server. set to
* false if assignments are supposed to be forced and
* not checked.
* assignments_ptr (out) : list of assignments.
*
* NOTE: Data string is parsed entirely and if all changes are valid a list
* of SYSPRM_ASSIGN_VALUEs is generated. If any change is invalid an
* error is returned and no list is generated.
* If changes need to be done on server too PRM_ERR_NOT_FOR_CLIENT or
* PRM_ERR_NOT_FOR_CLIENT_NO_AUTH is returned.
*/
SYSPRM_ERR
sysprm_validate_change_parameters (const char *data, bool check, SYSPRM_ASSIGN_VALUE ** assignments_ptr)
{
char buf[LINE_MAX], *p = NULL, *name = NULL, *value = NULL;
SYSPRM_PARAM *prm = NULL;
SYSPRM_ERR err = PRM_ERR_NO_ERROR;
SYSPRM_ASSIGN_VALUE *assignments = NULL, *last_assign = NULL;
SYSPRM_ERR change_error = PRM_ERR_NO_ERROR;
assert (assignments_ptr != NULL);
*assignments_ptr = NULL;
if (!data || *data == '\0')
{
return PRM_ERR_BAD_VALUE;
}
if (intl_mbs_ncpy (buf, data, sizeof (buf)) == NULL)
{
return PRM_ERR_BAD_VALUE;
}
p = buf;
do
{
/* parse data */
SYSPRM_ASSIGN_VALUE *assign = NULL;
/* get parameter name and value */
err = (SYSPRM_ERR) prm_get_next_param_value (&p, &name, &value);
if (err != PRM_ERR_NO_ERROR || name == NULL || value == NULL)
{
break;
}
prm = prm_find (name, NULL);
if (prm == NULL)
{
err = PRM_ERR_UNKNOWN_PARAM;
break;
}
if (!check || PRM_USER_CAN_CHANGE (prm) || (PRM_TEST_CHANGE_ONLY (prm) && prm_get_bool_value (PRM_ID_TEST_MODE)))
{
/* We allow changing the parameter value. */
}
else
{
err = PRM_ERR_CANNOT_CHANGE;
break;
}
/* create a SYSPRM_CHANGE_VAL object */
assign = (SYSPRM_ASSIGN_VALUE *) malloc (sizeof (SYSPRM_ASSIGN_VALUE));
if (assign == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SYSPRM_ASSIGN_VALUE));
err = PRM_ERR_NO_MEM_FOR_PRM;
break;
}
err = sysprm_generate_new_value (prm, value, check, &assign->value);
if (err != PRM_ERR_NO_ERROR)
{
if (err == PRM_ERR_NOT_FOR_CLIENT || err == PRM_ERR_NOT_FOR_CLIENT_NO_AUTH)
{
/* update change_error */
if (change_error != PRM_ERR_NOT_FOR_CLIENT || err != PRM_ERR_NOT_FOR_CLIENT_NO_AUTH)
{
/* do not replace change_error PRM_ERR_NOT_FOR_CLIENT with PRM_ERR_NOT_FOR_CLIENT_NO_AUTH */
change_error = err;
}
/* do not invalidate assignments */
err = PRM_ERR_NO_ERROR;
}
else
{
/* bad value */
free_and_init (assign);
break;
}
}
assign->prm_id = prm->id;
assign->next = NULL;
/* append to assignments list */
if (assignments != NULL)
{
last_assign->next = assign;
last_assign = assign;
}
else
{
assignments = last_assign = assign;
}
}
while (p);
if (err == PRM_ERR_NO_ERROR)
{
err = sysprm_validate_escape_char_parameters (assignments);
}
if (err == PRM_ERR_NO_ERROR)
{
/* changes are valid, save assignments list */
*assignments_ptr = assignments;
/* return change_error in order to update values on server too */
return change_error;
}
/* changes are not valid, clean up */
sysprm_free_assign_values (&assignments);
return err;
}
/*
* sysprm_make_default_values () -
*
* return : SYSPRM_ERR
* data (in) : string containing "parameter = value" assignments
* default_val_buf(out) : string containing "parameter = def_value"
* assignments created from data argument
* buf_size(in) : size available in default_val_buf
*
*/
SYSPRM_ERR
sysprm_make_default_values (const char *data, char *default_val_buf, const int buf_size)
{
char buf[LINE_MAX], *p = NULL, *out_p = NULL;
char *name = NULL, *value = NULL;
int remaining_size, n;
SYSPRM_ERR err = PRM_ERR_NO_ERROR;
SYSPRM_PARAM *prm = NULL;
if (intl_mbs_ncpy (buf, data, sizeof (buf)) == NULL)
{
return PRM_ERR_BAD_VALUE;
}
p = buf;
out_p = default_val_buf;
remaining_size = buf_size - 1;
do
{
/* get parameter name and value */
err = (SYSPRM_ERR) prm_get_next_param_value (&p, &name, &value);
if (err != PRM_ERR_NO_ERROR || name == NULL || value == NULL)
{
break;
}
prm = prm_find (name, NULL);
if (prm == NULL)
{
err = PRM_ERR_UNKNOWN_PARAM;
break;
}
if (PRM_ID_INTL_COLLATION == prm->id)
{
n = snprintf (out_p, remaining_size, "%s=%s", PRM_NAME_INTL_COLLATION,
lang_get_collation_name (LANG_GET_BINARY_COLLATION (LANG_SYS_CODESET)));
}
else if (PRM_ID_INTL_DATE_LANG == prm->id)
{
n = snprintf (out_p, remaining_size, "%s=%s", PRM_NAME_INTL_DATE_LANG, lang_get_Lang_name ());
}
else if (PRM_ID_INTL_NUMBER_LANG == prm->id)
{
n = snprintf (out_p, remaining_size, "%s=%s", PRM_NAME_INTL_NUMBER_LANG, lang_get_Lang_name ());
}
else if (PRM_ID_TIMEZONE == prm->id)
{
n = snprintf (out_p, remaining_size, "%s=%s", PRM_NAME_TIMEZONE, tz_get_system_timezone ());
}
else
{
n = prm_print (prm, out_p, remaining_size, PRM_PRINT_NAME, PRM_PRINT_DEFAULT_VAL);
}
out_p += n;
remaining_size -= n;
n = snprintf (out_p, remaining_size, ";");
out_p += n;
remaining_size -= n;
}
while (p && remaining_size > 0);
return err;
}
#endif /* !SERVER_MODE */
/*
* sysprm_change_parameter_values () - update system parameter values
*
* return : void
* assignments (in) : list of assignments
* check (in) : check if the parameter belongs to current scope
* set_flag (in) : update PRM_SET flag if true
*
* NOTE: This function does not check if the new values are valid (e.g. in
* the restricted range). First validate new values before calling this
* function.
*/
void
sysprm_change_parameter_values (const SYSPRM_ASSIGN_VALUE * assignments, bool check, bool set_flag)
{
SYSPRM_PARAM *prm = NULL;
for (; assignments != NULL; assignments = assignments->next)
{
prm = GET_PRM (assignments->prm_id);
#if defined (CS_MODE)
if (check)
{
if (!PRM_IS_FOR_CLIENT (prm))
{
/* skip this assignment */
continue;
}
}
#endif
#if defined (SERVER_MODE)
if (check)
{
if (!PRM_IS_FOR_SERVER (prm) && !PRM_IS_FOR_SESSION (prm))
{
/* skip this assignment */
continue;
}
}
#endif
sysprm_set_value (prm, assignments->value, set_flag, true);
#if defined (SERVER_MODE)
if (prm->id == PRM_ID_ACCESS_IP_CONTROL)
{
css_set_accessible_ip_info ();
}
#endif
}
}
static int
prm_rewrite_int_list (int *int_list, char *left_side, char *buf, int len)
{
int list_size, i;
char *s;
int n;
if (int_list == NULL)
{
return snprintf (buf, len, "%s", left_side);
}
list_size = int_list[0];
s = buf;
n = snprintf (s, len, "%s", left_side);
s += n;
len -= n;
for (i = 1; i <= list_size; i++)
{
n = snprintf (s, len, "%d,", int_list[i]);
s += n;
len -= n;
}
if (list_size > 0)
{
/* remove last "," */
s -= 1;
len += 1;
}
if (len > 0)
{
*s = '\0';
}
return strlen (buf);
}
static const KEYVAL *
prm_get_keyval (const SYSPRM_PARAM * prm, int value, const char *name)
{
switch (prm->id)
{
case PRM_ID_ER_LOG_LEVEL:
return prm_keyword (value, name, er_log_level_words, DIM (er_log_level_words));
case PRM_ID_LOG_ISOLATION_LEVEL:
return prm_keyword (value, name, isolation_level_words, DIM (isolation_level_words));
case PRM_ID_PB_DEBUG_PAGE_VALIDATION_LEVEL:
return prm_keyword (value, name, pgbuf_debug_page_validation_level_words,
DIM (pgbuf_debug_page_validation_level_words));
case PRM_ID_HA_MODE:
case PRM_ID_HA_MODE_FOR_SA_UTILS_ONLY:
return prm_keyword (value, name, ha_mode_words, DIM (ha_mode_words));
case PRM_ID_HA_SERVER_STATE:
return prm_keyword (value, name, ha_server_state_words, DIM (ha_server_state_words));
case PRM_ID_HA_LOG_APPLIER_STATE:
return prm_keyword (value, name, ha_log_applier_state_words, DIM (ha_log_applier_state_words));
case PRM_ID_COMPAT_MODE:
return prm_keyword (value, name, compat_words, DIM (compat_words));
case PRM_ID_CHECK_PEER_ALIVE:
return prm_keyword (value, name, check_peer_alive_words, DIM (check_peer_alive_words));
case PRM_ID_QUERY_TRACE_FORMAT:
return prm_keyword (value, name, query_trace_format_words, DIM (query_trace_format_words));
case PRM_ID_FAULT_INJECTION_TEST:
return prm_keyword (value, name, fi_test_words, DIM (fi_test_words));
case PRM_ID_HA_REPL_FILTER_TYPE:
return prm_keyword (value, name, ha_repl_filter_type_words, DIM (ha_repl_filter_type_words));
case PRM_ID_TDE_DEFAULT_ALGORITHM:
return prm_keyword (value, name, tde_algorithm_words, DIM (tde_algorithm_words));
case PRM_ID_REGEXP_ENGINE:
return prm_keyword (value, name, regexp_engine_words, DIM (regexp_engine_words));
default:
assert (false);
break;
}
return NULL;
}
/*
* prm_print - Print a parameter to the buffer
* return: number of chars printed
* prm(in): parameter
* buf(out): print buffer
* len(in): length of the buffer
* print_mode(in): print name/id or just value of the parameter
*/
static int
prm_print (const SYSPRM_PARAM * prm, char *buf, size_t len, PRM_PRINT_MODE print_mode,
PRM_PRINT_VALUE_MODE print_value_mode)
{
int n = 0;
int error = NO_ERROR;
char left_side[PRM_DEFAULT_BUFFER_SIZE];
const SYSPRM_PARAM_VALUE *prm_value;
if (len == 0)
{
/* don't print anything */
return 0;
}
memset (left_side, 0, PRM_DEFAULT_BUFFER_SIZE);
assert (prm != NULL && buf != NULL && len > 0);
if (PRM_DIFFERENT_UNIT (prm))
{
assert (prm->get_dup != NULL);
}
if (print_mode == PRM_PRINT_ID)
{
snprintf (left_side, PRM_DEFAULT_BUFFER_SIZE, "%d=", prm->id);
}
else if (print_mode == PRM_PRINT_NAME)
{
snprintf (left_side, PRM_DEFAULT_BUFFER_SIZE, "%s=", prm->name);
}
if (print_value_mode == PRM_PRINT_DEFAULT_VAL)
{
prm_value = &prm->default_value;
}
else
{
prm_value = &prm->value;
}
if (PRM_IS_INTEGER (prm))
{
int val = PRM_GET_INT (*prm_value);
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm) && !PRM_HAS_SIZE_UNIT (prm) && !PRM_HAS_TIME_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_INTEGER (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
val = PRM_GET_INT (*prm_value);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_BIGINT (prm, &dup_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
else
{
assert_release (false);
}
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else if (PRM_HAS_TIME_UNIT (prm))
{
INT64 dup_val;
val = PRM_GET_INT (*prm_value);
if (PRM_DIFFERENT_UNIT (prm) && val >= 0)
{
UINT64 tmp_val;
PRM_ADJUST_FOR_GET_INTEGER_TO_BIGINT (prm, &tmp_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
dup_val = (INT64) tmp_val;
}
else
{
dup_val = (INT64) val;
}
(void) util_msec_to_time_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%d", left_side, val);
}
}
else if (PRM_IS_BIGINT (prm))
{
UINT64 val = PRM_GET_BIGINT (*prm_value);
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_BIGINT_TO_BIGINT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%lld", left_side, (unsigned long long) val);
}
}
else if (PRM_IS_BOOLEAN (prm))
{
n = snprintf (buf, len, "%s%c", left_side, (PRM_GET_BOOL (*prm_value) ? 'y' : 'n'));
}
else if (PRM_IS_FLOAT (prm))
{
float val = PRM_GET_FLOAT (*prm_value);
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm) && !PRM_HAS_SIZE_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_FLOAT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
val = PRM_GET_FLOAT (*prm_value);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_BIGINT (prm, &dup_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
else
{
assert_release (false);
}
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%f", left_side, val);
}
}
else if (PRM_IS_STRING (prm))
{
n = snprintf (buf, len, "%s\"%s\"", left_side, (PRM_GET_STRING (*prm_value) ? PRM_GET_STRING (*prm_value) : ""));
}
else if (PRM_IS_KEYWORD (prm))
{
const KEYVAL *keyvalp = NULL;
switch (prm->id)
{
case PRM_ID_HA_REPL_FILTER_TYPE:
case PRM_ID_TDE_DEFAULT_ALGORITHM:
case PRM_ID_REGEXP_ENGINE:
keyvalp = prm_get_keyval (prm, PRM_GET_INT (prm->value), NULL);
break;
default:
keyvalp = prm_get_keyval (prm, PRM_GET_INT (*prm_value), NULL);
break;
}
if (keyvalp)
{
n = snprintf (buf, len, "%s\"%s\"", left_side, keyvalp->key);
}
else
{
n = snprintf (buf, len, "%s%d", left_side, PRM_GET_INT (*prm_value));
}
}
else if (PRM_IS_INTEGER_LIST (prm))
{
n = prm_rewrite_int_list (PRM_GET_INTEGER_LIST (*prm_value), left_side, buf, len);
}
else
{
n = snprintf (buf, len, "%s?", left_side);
}
return n;
}
/*
* sysprm_print_sysprm_value () - print sysprm_value
*
* return : length of printed string
* prm_id (in) : parameter ID (to which sysprm_value belongs).
* value (in) : printed sysprm_value
* buf (in/out) : printing destination
* len (in) : maximum size of printed string
* print_mode (in) : PRM_PRINT_MODE
*/
static int
sysprm_print_sysprm_value (PARAM_ID prm_id, SYSPRM_VALUE value, char *buf, size_t len, PRM_PRINT_MODE print_mode)
{
int n = 0;
int error = NO_ERROR;
char left_side[PRM_DEFAULT_BUFFER_SIZE];
SYSPRM_PARAM *prm = NULL;
if (len == 0)
{
/* don't print anything */
return 0;
}
memset (left_side, 0, PRM_DEFAULT_BUFFER_SIZE);
assert (buf != NULL && len > 0);
prm = GET_PRM (prm_id);
if (PRM_DIFFERENT_UNIT (prm))
{
assert (prm->get_dup != NULL);
}
if (print_mode == PRM_PRINT_ID)
{
snprintf (left_side, PRM_DEFAULT_BUFFER_SIZE, "%d=", prm_id);
}
else if (print_mode == PRM_PRINT_NAME)
{
snprintf (left_side, PRM_DEFAULT_BUFFER_SIZE, "%s=", prm->name);
}
if (PRM_IS_INTEGER (prm))
{
int val = value.i;
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm) && !PRM_HAS_SIZE_UNIT (prm) && !PRM_HAS_TIME_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_INTEGER (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
val = value.i;
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_BIGINT (prm, &dup_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
else
{
assert_release (false);
}
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else if (PRM_HAS_TIME_UNIT (prm))
{
INT64 dup_val;
val = value.i;
if (PRM_DIFFERENT_UNIT (prm) && val >= 0)
{
UINT64 tmp_val;
PRM_ADJUST_FOR_GET_INTEGER_TO_BIGINT (prm, &tmp_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
dup_val = (INT64) tmp_val;
}
else
{
dup_val = (INT64) val;
}
(void) util_msec_to_time_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%d", left_side, val);
}
}
else if (PRM_IS_BIGINT (prm))
{
UINT64 val = value.bi;
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_BIGINT_TO_BIGINT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%lld", left_side, (unsigned long long) val);
}
}
else if (PRM_IS_BOOLEAN (prm))
{
n = snprintf (buf, len, "%s%c", left_side, (value.b ? 'y' : 'n'));
}
else if (PRM_IS_FLOAT (prm))
{
float val = value.f;
int left_side_len = strlen (left_side);
if (PRM_DIFFERENT_UNIT (prm) && !PRM_HAS_SIZE_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_FLOAT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
val = value.f;
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_BIGINT (prm, &dup_val, &val, &error);
if (error != NO_ERROR)
{
assert_release (false);
return n;
}
}
else
{
assert_release (false);
}
(void) util_byte_to_size_string (left_side + left_side_len, PRM_DEFAULT_BUFFER_SIZE - left_side_len, dup_val);
n = snprintf (buf, len, "%s", left_side);
}
else
{
n = snprintf (buf, len, "%s%f", left_side, val);
}
}
else if (PRM_IS_STRING (prm))
{
n = snprintf (buf, len, "%s\"%s\"", left_side, (value.str != NULL ? value.str : ""));
}
else if (PRM_IS_KEYWORD (prm))
{
const KEYVAL *keyvalp = NULL;
keyvalp = prm_get_keyval (prm, value.i, NULL);
if (keyvalp)
{
n = snprintf (buf, len, "%s\"%s\"", left_side, keyvalp->key);
}
else
{
n = snprintf (buf, len, "%s%d", left_side, value.i);
}
}
else if (PRM_IS_INTEGER_LIST (prm))
{
n = prm_rewrite_int_list (value.integer_list, left_side, buf, len);
}
else
{
n = snprintf (buf, len, "%s?", left_side);
}
return n;
}
/*
* sysprm_obtain_parameters () - Get parameter values
*
* return : SYSPRM_ERR code.
* data (in) : string containing the names of parameters.
* prm_values_ptr (out) : list of ids and values for the parameters read from
* data.
*
* NOTE: Multiple parameters can be obtained by providing a string like:
* "param_name1; param_name2; ..."
* If some values must be read from server, PRM_ERR_NOT_FOR_CLIENT is
* returned.
*/
SYSPRM_ERR
sysprm_obtain_parameters (char *data, SYSPRM_ASSIGN_VALUE ** prm_values_ptr)
{
char buf[LINE_MAX], *p = NULL, *name = NULL;
SYSPRM_PARAM *prm = NULL;
SYSPRM_ASSIGN_VALUE *prm_value_list = NULL, *last_prm_value = NULL;
SYSPRM_ASSIGN_VALUE *prm_value = NULL;
SYSPRM_ERR error = PRM_ERR_NO_ERROR, scope_error = PRM_ERR_NO_ERROR;
if (!data || *data == '\0')
{
return PRM_ERR_BAD_VALUE;
}
if (intl_mbs_ncpy (buf, data, LINE_MAX) == NULL)
{
return PRM_ERR_BAD_VALUE;
}
assert (prm_values_ptr != NULL);
*prm_values_ptr = NULL;
p = buf;
do
{
/* read name */
while (char_isspace (*p))
{
p++;
}
if (*p == '\0')
{
break;
}
name = p;
while (*p && !char_isspace (*p) && *p != ';')
{
p++;
}
if (*p)
{
*p++ = '\0';
while (char_isspace (*p))
{
p++;
}
if (*p == ';')
{
p++;
}
}
prm = prm_find (name, NULL);
if (prm == NULL)
{
error = PRM_ERR_UNKNOWN_PARAM;
break;
}
else if (prm->value.is_null == true)
{
error = PRM_ERR_NO_VALUE;
break;
}
#if defined (CS_MODE)
if (!PRM_IS_FOR_CLIENT (prm) && !PRM_IS_FOR_SERVER (prm))
{
error = PRM_ERR_CANNOT_CHANGE;
break;
}
if ((PRM_IS_FOR_SERVER (prm) && !PRM_IS_FOR_CLIENT (prm)) || PRM_IS_GET_SERVER (prm))
{
/* have to read the value on server */
scope_error = PRM_ERR_NOT_FOR_CLIENT;
}
#endif /* CS_MODE */
/* create a SYSPRM_ASSING_VALUE object to store parameter value */
prm_value = (SYSPRM_ASSIGN_VALUE *) malloc (sizeof (SYSPRM_ASSIGN_VALUE));
if (prm_value == NULL)
{
error = PRM_ERR_NO_MEM_FOR_PRM;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SYSPRM_ASSIGN_VALUE));
break;
}
memset (prm_value, 0x00, sizeof (SYSPRM_ASSIGN_VALUE));
prm_value->prm_id = prm->id;
#if defined (CS_MODE)
if (PRM_IS_FOR_CLIENT (prm))
{
/* set the value here */
sysprm_set_sysprm_value_from_parameter (&prm_value->value, prm);
}
else
{
memset (&prm_value->value, 0, sizeof (SYSPRM_VALUE));
}
#else /* CS_MODE */
sysprm_set_sysprm_value_from_parameter (&prm_value->value, prm);
#endif /* !CS_MODE */
/* append prm_value to prm_value_list */
if (prm_value_list != NULL)
{
last_prm_value->next = prm_value;
last_prm_value = prm_value;
}
else
{
prm_value_list = last_prm_value = prm_value;
}
}
while (*p);
if (error == PRM_ERR_NO_ERROR)
{
/* all parameter names are valid and values can be obtained */
*prm_values_ptr = prm_value_list;
/* update error in order to get values from server too if needed */
error = scope_error;
}
else
{
/* error obtaining values, clean up */
sysprm_free_assign_values (&prm_value_list);
}
return error;
}
#if !defined(CS_MODE)
/*
* xsysprm_change_server_parameters () - changes parameter values on server
*
* return : void
* assignments (in) : list of changes
*/
void
xsysprm_change_server_parameters (const SYSPRM_ASSIGN_VALUE * assignments)
{
sysprm_change_parameter_values (assignments, true, true);
}
/*
* xsysprm_obtain_server_parameters () - get parameter values from server
*
* return : void
* prm_values (in) : list of parameters
*
* NOTE: Obtains value for parameters that are for server only. For parameters
* that are client/server, values should be obtained from client UNLESS
* it has PRM_GET_SERVER flag.
*/
void
xsysprm_obtain_server_parameters (SYSPRM_ASSIGN_VALUE * prm_values)
{
SYSPRM_PARAM *prm = NULL;
for (; prm_values != NULL; prm_values = prm_values->next)
{
prm = GET_PRM (prm_values->prm_id);
if ((PRM_IS_FOR_SERVER (prm) && !PRM_IS_FOR_CLIENT (prm)) || PRM_IS_GET_SERVER (prm))
{
/* set value */
sysprm_set_sysprm_value_from_parameter (&prm_values->value, prm);
}
}
}
/*
* xsysprm_get_force_server_parameters () - obtain values for parameters
* marked as PRM_FORCE_SERVER
*
* return : list of values
*
* NOTE: This is called after client registers to server.
*/
SYSPRM_ASSIGN_VALUE *
xsysprm_get_force_server_parameters (void)
{
SYSPRM_ASSIGN_VALUE *force_values = NULL, *last_assign = NULL;
SYSPRM_PARAM *prm = NULL;
int i;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
prm = GET_PRM (i);
if (PRM_GET_FROM_SERVER (prm))
{
SYSPRM_ASSIGN_VALUE *change_val = (SYSPRM_ASSIGN_VALUE *) malloc (sizeof (SYSPRM_ASSIGN_VALUE));
if (change_val == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SYSPRM_ASSIGN_VALUE));
goto cleanup;
}
memset (change_val, 0x00, sizeof (SYSPRM_ASSIGN_VALUE));
change_val->prm_id = (PARAM_ID) i;
sysprm_set_sysprm_value_from_parameter (&change_val->value, prm);
if (force_values != NULL)
{
last_assign->next = change_val;
last_assign = change_val;
}
else
{
force_values = last_assign = change_val;
}
}
}
return force_values;
cleanup:
sysprm_free_assign_values (&force_values);
return NULL;
}
/*
* xsysprm_dump_server_parameters -
* return: none
*/
void
xsysprm_dump_server_parameters (FILE * outfp, unsigned int in_flags, SYSPRM_DUMP_CONDITION if_cond,
unsigned int out_flags, SYSPRM_DUMP_CONDITION of_cond, bool old_style)
{
sysprm_dump_parameters (outfp, 'S', in_flags, if_cond, out_flags, of_cond, old_style);
}
/*
* xsysprm_get_pl_context_parameters () - obtain values for parameters
* marked as PRM_FOR_PL_CONTEXT
*
* return : list of values
*
*/
SYSPRM_ASSIGN_VALUE *
xsysprm_get_pl_context_parameters (int flag)
{
SYSPRM_ASSIGN_VALUE *pl_ctx_values = NULL, *last_assign = NULL;
SYSPRM_PARAM *prm = NULL;
int i;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
prm = GET_PRM (i);
if (PRM_IS_FOR_PL_CONTEXT (prm) && (prm->static_flag & flag))
{
SYSPRM_ASSIGN_VALUE *change_val = (SYSPRM_ASSIGN_VALUE *) malloc (sizeof (SYSPRM_ASSIGN_VALUE));
if (change_val == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SYSPRM_ASSIGN_VALUE));
goto cleanup;
}
memset (change_val, 0x00, sizeof (SYSPRM_ASSIGN_VALUE));
change_val->prm_id = (PARAM_ID) i;
sysprm_set_sysprm_value_from_parameter (&change_val->value, prm);
if (pl_ctx_values != NULL)
{
last_assign->next = change_val;
last_assign = change_val;
}
else
{
pl_ctx_values = last_assign = change_val;
}
}
}
return pl_ctx_values;
cleanup:
sysprm_free_assign_values (&pl_ctx_values);
return NULL;
}
#endif /* !CS_MODE */
/*
* sysprm_get_param_range - returns the minimum and maximum value for a SYSPRM_PARAM
* return: error code
* prm (in): the parameter for which we want the limits
* min (out): the minimum possible value for the parameter
* max (out): the maximum possible value for the parameter
*/
static SYSPRM_ERR
sysprm_get_param_range (SYSPRM_PARAM * prm, void *min, void *max)
{
SYSPRM_ERR error = PRM_ERR_NO_ERROR;
if (PRM_IS_INTEGER (prm))
{
if (prm->lower_limit.is_null == false)
{
*((int *) min) = PRM_GET_INT (prm->lower_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_INTEGER (prm, (int *) min, (int *) min, &error);
}
}
else
{
*((int *) min) = INT_MIN;
}
if (prm->upper_limit.is_null == false)
{
*((int *) max) = PRM_GET_INT (prm->upper_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_INTEGER_TO_INTEGER (prm, (int *) max, (int *) max, &error);
}
}
else
{
*((int *) max) = INT_MAX;
}
}
else if (PRM_IS_FLOAT (prm))
{
if (prm->lower_limit.is_null == false)
{
*((float *) min) = PRM_GET_FLOAT (prm->lower_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_FLOAT (prm, (float *) min, (float *) min, &error);
}
}
else
{
*((float *) min) = FLT_MIN;
}
if (prm->upper_limit.is_null == false)
{
*((float *) max) = PRM_GET_FLOAT (prm->upper_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_FLOAT_TO_FLOAT (prm, (float *) max, (float *) max, &error);
}
}
else
{
*((float *) max) = FLT_MAX;
}
}
else if (PRM_IS_BIGINT (prm))
{
if (prm->lower_limit.is_null == false)
{
*((UINT64 *) min) = PRM_GET_BIGINT (prm->lower_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_BIGINT_TO_BIGINT (prm, (UINT64 *) min, (UINT64 *) min, &error);
}
}
else
{
*((UINT64 *) min) = 0ULL;
}
if (prm->upper_limit.is_null == false)
{
*((UINT64 *) max) = PRM_GET_BIGINT (prm->upper_limit);
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_GET_BIGINT_TO_BIGINT (prm, (UINT64 *) max, (UINT64 *) max, &error);
}
}
else
{
*((UINT64 *) max) = ULLONG_MAX;
}
}
else
{
return PRM_ERR_BAD_VALUE;
}
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
return PRM_ERR_NO_ERROR;
}
/*
* sysprm_get_range - returns the minimum and maximum value
* for a paramter, given by its name
* return: error code
* param_id (in): parameter id
* min (out): the minimum possible value for the parameter
* max (out): the maximum possible value for the parameter
*/
int
sysprm_get_range (PARAM_ID param_id, void *min, void *max)
{
if (param_id < PRM_FIRST_ID || param_id > PRM_LAST_ID)
{
return PRM_ERR_UNKNOWN_PARAM;
}
if (PRM_DIFFERENT_UNIT (GET_PRM (param_id)))
{
assert (GET_PRM (param_id)->get_dup != NULL);
}
return sysprm_get_param_range (GET_PRM (param_id), min, max);
}
/*
* sysprm_check_range -
* return:
* param_id (in): parameter id
* value (in): parameter value
*/
int
sysprm_check_range (PARAM_ID param_id, void *value)
{
if (param_id < PRM_FIRST_ID || param_id > PRM_LAST_ID)
{
return PRM_ERR_UNKNOWN_PARAM;
}
return prm_check_range (GET_PRM (param_id), value);
}
/*
* prm_check_range -
* return:
* prm(in):
* value (in):
*/
static int
prm_check_range (SYSPRM_PARAM * prm, void *value)
{
int error = NO_ERROR;
if (PRM_DIFFERENT_UNIT (prm))
{
assert (prm->set_dup != NULL);
}
if (PRM_IS_INTEGER (prm) || PRM_IS_KEYWORD (prm))
{
int val;
if (PRM_DIFFERENT_UNIT (prm))
{
if (PRM_HAS_SIZE_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_INTEGER (prm, &val, (UINT64 *) value, &error);
}
else if (PRM_HAS_TIME_UNIT (prm))
{
INT64 *dup_val = (INT64 *) value;
if (*dup_val >= 0)
{
UINT64 tmp_val = (UINT64) * dup_val;
PRM_ADJUST_FOR_SET_BIGINT_TO_INTEGER (prm, &val, &tmp_val, &error);
}
else
{
val = (int) *dup_val;
}
}
else
{
PRM_ADJUST_FOR_SET_INTEGER_TO_INTEGER (prm, &val, (int *) value, &error);
}
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
val = *((int *) value);
}
if ((prm->upper_limit.is_null == false && PRM_GET_INT (prm->upper_limit) < val)
|| (prm->lower_limit.is_null == false && PRM_GET_INT (prm->lower_limit) > val))
{
return PRM_ERR_BAD_RANGE;
}
}
else if (PRM_IS_FLOAT (prm))
{
float val;
float lower, upper;
lower = upper = 0; /* to make compilers be silent */
if (PRM_DIFFERENT_UNIT (prm))
{
if (PRM_HAS_SIZE_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_FLOAT (prm, &val, (UINT64 *) value, &error);
}
else
{
PRM_ADJUST_FOR_SET_FLOAT_TO_FLOAT (prm, &val, (float *) value, &error);
}
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
if (prm->upper_limit.is_null == false)
{
upper = ceilf (PRM_GET_FLOAT (prm->upper_limit) * 100) / 100;
}
if (prm->lower_limit.is_null == false)
{
lower = ceilf (PRM_GET_FLOAT (prm->lower_limit) * 100) / 100;
}
}
else
{
val = *((float *) value);
if (prm->upper_limit.is_null == false)
{
upper = PRM_GET_FLOAT (prm->upper_limit);
}
if (prm->lower_limit.is_null == false)
{
lower = PRM_GET_FLOAT (prm->lower_limit);
}
}
if ((prm->upper_limit.is_null == false && upper < val) || (prm->lower_limit.is_null == false && lower > val))
{
return PRM_ERR_BAD_RANGE;
}
}
else if (PRM_IS_BIGINT (prm))
{
UINT64 val;
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_BIGINT (prm, &val, (UINT64 *) value, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
val = *((UINT64 *) value);
}
if ((prm->upper_limit.is_null == false && PRM_GET_BIGINT (prm->upper_limit) < val)
|| (prm->lower_limit.is_null == false && PRM_GET_BIGINT (prm->lower_limit) > val))
{
return PRM_ERR_BAD_RANGE;
}
}
else
{
return PRM_ERR_BAD_VALUE;
}
return PRM_ERR_NO_ERROR;
}
/*
* sysprm_generate_new_value () - converts string into a system parameter value
*
* return : SYSPRM_ERR
* prm (in) : target system parameter
* value (in) : parameter value in char * format
* check (in) : check if value can be changed. set to false if value
* should be forced
* new_value (out) : SYSPRM_VALUE converted from string
*/
static SYSPRM_ERR
sysprm_generate_new_value (SYSPRM_PARAM * prm, const char *value, bool check, SYSPRM_VALUE * new_value)
{
char *end = NULL;
int error = NO_ERROR;
int set_min = 0, set_max = 0, set_default = 0;
SYSPRM_ERR ret = PRM_ERR_NO_ERROR;
SYSPRM_VALUE min, max;
if (prm == NULL)
{
return PRM_ERR_UNKNOWN_PARAM;
}
if (value == NULL)
{
return PRM_ERR_BAD_VALUE;
}
assert (new_value != NULL);
if (PRM_DIFFERENT_UNIT (prm))
{
assert (prm->set_dup != NULL);
}
#if defined (CS_MODE)
if (check)
{
/* check the scope of parameter */
if (PRM_IS_FOR_CLIENT (prm))
{
if (PRM_IS_FOR_SESSION (prm))
{
/* the value in session state must also be updated. user doesn't have to be part of DBA group. */
ret = PRM_ERR_NOT_FOR_CLIENT_NO_AUTH;
}
else if (PRM_IS_FOR_SERVER (prm))
{
/* the value has to be changed on server too. user has to be part of DBA group. */
ret = PRM_ERR_NOT_FOR_CLIENT;
}
}
else
{
if (PRM_IS_FOR_SERVER (prm))
{
/* this value is only for server. user has to be DBA. */
ret = PRM_ERR_NOT_FOR_CLIENT;
}
else
{
/* not for client or server, cannot be changed on-line */
return PRM_ERR_CANNOT_CHANGE;
}
}
}
#endif /* CS_MODE */
#if defined (SERVER_MODE)
if (check)
{
if (!PRM_IS_FOR_SERVER (prm) && !PRM_IS_FOR_SESSION (prm))
{
return PRM_ERR_NOT_FOR_SERVER;
}
}
#endif /* SERVER_MODE */
if (strcasecmp (value, PRM_VALUE_DEFAULT) == 0)
{
set_default = true;
}
else if (strcasecmp (value, PRM_VALUE_MAX) == 0)
{
set_max = true;
}
else if (strcasecmp (value, PRM_VALUE_MIN) == 0)
{
set_min = true;
}
#if defined(CS_MODE)
if (!set_default)
{
if (prm->id == PRM_ID_INTL_NUMBER_LANG || prm->id == PRM_ID_INTL_DATE_LANG)
{
INTL_LANG dummy;
if (lang_get_lang_id_from_name (value, &dummy) != 0)
{
return PRM_ERR_BAD_VALUE;
}
}
if (prm->id == PRM_ID_INTL_COLLATION)
{
LANG_COLLATION *lc = NULL;
if (value != NULL)
{
lc = lang_get_collation_by_name (value);
}
if (lc == NULL)
{
return PRM_ERR_BAD_VALUE;
}
}
if (prm->id == PRM_ID_TIMEZONE)
{
int er_status = NO_ERROR;
if (value != NULL)
{
er_status = tz_str_to_region (value, strlen (value), NULL);
if (er_status != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
}
}
#endif
if (set_max || set_min)
{
ret = sysprm_get_param_range (prm, &min, &max);
if (ret != PRM_ERR_NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
if (set_min)
{
*new_value = min;
}
else
{
*new_value = max;
}
return PRM_ERR_NO_ERROR;
}
switch (prm->datatype)
{
case PRM_INTEGER:
{
/* convert string to int */
int val = 0;
if (set_default)
{
new_value->i = PRM_GET_INT (prm->default_value);
break;
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
if (util_size_string_to_byte (&dup_val, value) != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
if (prm_check_range (prm, (void *) &dup_val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_INTEGER (prm, &val, &dup_val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
return PRM_ERR_BAD_VALUE;
}
}
else if (PRM_HAS_TIME_UNIT (prm))
{
INT64 dup_val;
if (util_time_string_to_msec (&dup_val, (char *) value) != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
if (prm_check_range (prm, (void *) &dup_val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm) && dup_val >= 0)
{
UINT64 tmp_val = (UINT64) dup_val;
PRM_ADJUST_FOR_SET_BIGINT_TO_INTEGER (prm, &val, &tmp_val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
val = (int) dup_val;
}
}
else
{
int result;
result = parse_int (&val, value, 10);
if (result != 0)
{
return PRM_ERR_BAD_VALUE;
}
if (prm_check_range (prm, (void *) &val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_INTEGER_TO_INTEGER (prm, &val, &val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
}
new_value->i = val;
break;
}
case PRM_BIGINT:
{
/* convert string to UINT64 */
int result;
UINT64 val;
char *end_p;
if (set_default)
{
new_value->bi = PRM_GET_BIGINT (prm->default_value);
break;
}
if (PRM_HAS_SIZE_UNIT (prm))
{
if (util_size_string_to_byte (&val, value) != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
result = str_to_uint64 (&val, &end_p, value, 10);
if (result != 0)
{
return PRM_ERR_BAD_VALUE;
}
}
if (prm_check_range (prm, (void *) &val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_BIGINT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
new_value->bi = val;
break;
}
case PRM_FLOAT:
{
/* convert string to float */
float val = 0.f;
if (set_default)
{
new_value->f = PRM_GET_FLOAT (prm->default_value);
break;
}
if (PRM_HAS_SIZE_UNIT (prm))
{
UINT64 dup_val;
if (util_size_string_to_byte (&dup_val, value) != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
if (prm_check_range (prm, (void *) &dup_val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_BIGINT_TO_FLOAT (prm, &val, &dup_val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
return PRM_ERR_BAD_VALUE;
}
}
else
{
val = (float) strtod (value, &end);
if (end == value)
{
return PRM_ERR_BAD_VALUE;
}
else if (*end != '\0')
{
return PRM_ERR_BAD_VALUE;
}
if (prm_check_range (prm, (void *) &val) != NO_ERROR)
{
return PRM_ERR_BAD_RANGE;
}
if (PRM_DIFFERENT_UNIT (prm))
{
PRM_ADJUST_FOR_SET_FLOAT_TO_FLOAT (prm, &val, &val, &error);
if (error != NO_ERROR)
{
return PRM_ERR_BAD_VALUE;
}
}
}
new_value->f = val;
break;
}
case PRM_BOOLEAN:
{
const KEYVAL *keyvalp = NULL;
if (set_default)
{
new_value->b = PRM_GET_BOOL (prm->default_value);
break;
}
/* convert string to boolean */
keyvalp = prm_keyword (-1, value, boolean_words, DIM (boolean_words));
if (keyvalp == NULL)
{
return PRM_ERR_BAD_VALUE;
}
new_value->b = (bool) keyvalp->val;
break;
}
case PRM_STRING:
{
/* duplicate string */
const char *val = NULL;
if (set_default)
{
val = PRM_GET_STRING (prm->default_value);
if (val == NULL)
{
switch (prm->id)
{
case PRM_ID_INTL_COLLATION:
val = lang_get_collation_name (LANG_GET_BINARY_COLLATION (LANG_SYS_CODESET));
break;
case PRM_ID_INTL_DATE_LANG:
case PRM_ID_INTL_NUMBER_LANG:
val = lang_get_Lang_name ();
break;
case PRM_ID_TIMEZONE:
val = prm_get_string_value (PRM_ID_SERVER_TIMEZONE);
break;
default:
/* do nothing */
break;
}
}
if (val == NULL)
{
new_value->str = NULL;
}
else
{
new_value->str = strdup (val);
if (new_value->str == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (size_t) (strlen (val)));
return PRM_ERR_NO_MEM_FOR_PRM;
}
}
break;
}
/* check if the value is represented as a null keyword */
if (prm_keyword (-1, value, null_words, DIM (null_words)) != NULL)
{
new_value->str = NULL;
}
else
{
new_value->str = strdup (value);
if (new_value->str == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (size_t) (strlen (value)));
return PRM_ERR_NO_MEM_FOR_PRM;
}
}
break;
}
case PRM_INTEGER_LIST:
{
/* convert string into an array of integers */
int *val = NULL;
if (set_default && prm->id != PRM_ID_CALL_STACK_DUMP_ACTIVATION)
{
val = PRM_GET_INTEGER_LIST (prm->default_value);
if (val == NULL)
{
new_value->integer_list = NULL;
}
else
{
size_t size = (size_t) ((val[0] + 1) * sizeof (int));
new_value->integer_list = (int *) malloc (size);
if (new_value->integer_list == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size);
return PRM_ERR_NO_MEM_FOR_PRM;
}
memcpy (new_value->integer_list, val, size);
}
break;
}
/* check if the value is represented as a null keyword */
if (prm_keyword (-1, value, null_words, DIM (null_words)) != NULL)
{
val = NULL;
}
else
{
char *s, *p;
char save;
int list_size, tmp;
val = (int *) calloc (1024, sizeof (int)); /* max size is 1023 */
if (val == NULL)
{
size_t size = 1024 * sizeof (int);
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size);
return PRM_ERR_NO_MEM_FOR_PRM;
}
list_size = 0;
s = (char *) value;
p = s;
while (true)
{
if (*s == ',' || *s == '\0')
{
save = *s;
*s = '\0';
if (intl_mbs_casecmp ("default", p) == 0) // TODO: strcasecmp
{
if (prm->id == PRM_ID_CALL_STACK_DUMP_ACTIVATION)
{
memcpy (&val[list_size + 1], call_stack_dump_error_codes,
sizeof (call_stack_dump_error_codes));
list_size += DIM (call_stack_dump_error_codes);
}
else
{
free_and_init (val);
return PRM_ERR_BAD_VALUE;
}
}
else
{
int result;
result = parse_int (&tmp, p, 10);
if (result != 0)
{
free_and_init (val);
return PRM_ERR_BAD_VALUE;
}
val[++list_size] = tmp;
}
*s = save;
if (*s == '\0')
{
break;
}
p = s + 1;
}
s++;
}
/* save size in the first position */
val[0] = list_size;
}
if (prm->id == PRM_ID_STORED_PROCEDURE_RETURN_NUMERIC_SIZE)
{
/*
* The length of the parameter must be 2
* Check the valid range
* precision ( 1 ~ 38 ) and scale (0 ~ 38)
* precision >= scale
*/
if (val[0] != 2 || val[PRM_PRECISION] < 1 || val[PRM_PRECISION] > DB_MAX_NUMERIC_PRECISION
|| val[PRM_SCALE] < 0 || val[PRM_SCALE] > val[PRM_PRECISION])
{
free_and_init (val);
return PRM_ERR_BAD_VALUE;
}
}
new_value->integer_list = val;
break;
}
case PRM_KEYWORD:
{
/* check if string can be identified as a keyword */
int val;
const KEYVAL *keyvalp = NULL;
if (set_default)
{
new_value->i = PRM_GET_INT (prm->default_value);
break;
}
keyvalp = prm_get_keyval (prm, -1, value);
if (keyvalp)
{
val = (int) keyvalp->val;
}
else
{
int result;
/* check if string can be converted to an integer */
result = parse_int (&val, value, 10);
if (result != 0)
{
return PRM_ERR_BAD_VALUE;
}
}
if ((prm->upper_limit.is_null == false && PRM_GET_INT (prm->upper_limit) < val)
|| (prm->lower_limit.is_null == false && PRM_GET_INT (prm->lower_limit) > val))
{
return PRM_ERR_BAD_RANGE;
}
new_value->i = val;
}
break;
case PRM_NO_TYPE:
break;
default:
assert (false);
}
return ret;
}
/*
* prm_set () - Set a new value for parameter.
*
* return : SYSPRM_ERR code.
* prm (in) : system parameter that will have its value changed.
* value (in) : new value as string.
* set_flag (in) : updates PRM_SET flag is true.
*/
static int
prm_set (SYSPRM_PARAM * prm, const char *value, bool set_flag)
{
SYSPRM_ERR error = PRM_ERR_NO_ERROR;
SYSPRM_VALUE new_value;
error = sysprm_generate_new_value (prm, value, false, &new_value);
if (error != PRM_ERR_NO_ERROR)
{
return error;
}
return sysprm_set_value (prm, new_value, set_flag, false);
}
static int
sysprm_set_value_internal (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag, bool duplicate)
{
#if defined (SERVER_MODE)
THREAD_ENTRY *thread_p;
#endif
void *tmp_ptr = NULL;
if (prm == NULL)
{
return PRM_ERR_UNKNOWN_PARAM;
}
if (duplicate)
{
/* duplicate values for data types that need memory allocation */
switch (prm->datatype)
{
case PRM_STRING:
if (value.str != NULL)
{
tmp_ptr = strdup (value.str);
if (tmp_ptr == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1,
(size_t) (strlen (value.str) + 1));
return PRM_ERR_NO_MEM_FOR_PRM;
}
value.str = (char *) tmp_ptr;
}
break;
case PRM_INTEGER_LIST:
if (value.integer_list != NULL)
{
int *integer_list = value.integer_list;
tmp_ptr = (int *) malloc ((integer_list[0] + 1) * sizeof (int));
if (tmp_ptr == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1,
(integer_list[0] + 1) * sizeof (int));
return PRM_ERR_NO_MEM_FOR_PRM;
}
value.integer_list = (int *) tmp_ptr;
memcpy (value.integer_list, integer_list, (integer_list[0] + 1) * sizeof (int));
}
default:
break;
}
}
#if defined (SERVER_MODE)
if (PRM_IS_FOR_SESSION (prm) && BO_IS_SERVER_RESTARTED ())
{
SESSION_PARAM *param;
TZ_REGION *session_tz_region;
/* update session parameter */
thread_p = thread_get_thread_entry_info ();
param = session_get_session_parameter (thread_p, prm->id);
if (param == NULL)
{
if (tmp_ptr != NULL)
{
free (tmp_ptr);
}
return PRM_ERR_UNKNOWN_PARAM;
}
if (prm->id == PRM_ID_TIMEZONE)
{
session_tz_region = session_get_session_tz_region (thread_p);
if (session_tz_region != NULL)
{
tz_str_to_region (value.str, strlen (value.str), session_tz_region);
}
}
SYSPRM_ERR err = sysprm_set_session_parameter_value (param, value);
// err always returns PRM_ERR_NO_ERROR
if (PRM_IS_FOR_PL_CONTEXT (prm))
{
(void) session_set_pl_session_parameter (thread_p, prm->id);
}
return err;
}
/* if prm is not for session or if session_parameters have not been initialized just set the system parameter stored
* on server */
#endif /* SERVER_MODE */
sysprm_set_system_parameter_value (prm, value, set_flag);
/* Set the cached parsed system timezone region on the server */
if (prm->id == PRM_ID_SERVER_TIMEZONE)
{
TZ_REGION tz_region_system;
int err_status = 0;
err_status = tz_str_to_region (value.str, strlen (value.str), &tz_region_system);
if (err_status != NO_ERROR)
{
return PRM_ERR_BAD_PARAM;
}
tz_set_tz_region_system (&tz_region_system);
}
/* Set the cached parsed session timezone region on the client */
#if !defined(SERVER_MODE)
if (prm->id == PRM_ID_TIMEZONE)
{
int err_status = 0;
err_status = tz_str_to_region (value.str, strlen (value.str), tz_get_client_tz_region_session ());
if (err_status != NO_ERROR)
{
return PRM_ERR_BAD_PARAM;
}
}
#endif
if (PRM_IS_COMPOUND (prm))
{
prm_compound_has_changed (prm, set_flag);
}
if (set_flag)
{
PRM_SET_BIT (PRM_SET, prm->dynamic_flag);
/* Indicate that the default value was not used */
PRM_CLEAR_BIT (PRM_DEFAULT_USED, prm->dynamic_flag);
}
return PRM_ERR_NO_ERROR;
}
/*
* sysprm_set_value () - Set a new value for parameter.
*
* return : SYSPRM_ERR code
* prm (in) : system parameter that will have its value changed.
* value (in) : new values as sysprm_value
* set_flag (in) : updates PRM_SET flag.
* duplicate (in) : duplicate values for data types that need memory
* allocation.
*/
static int
sysprm_set_value (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag, bool duplicate)
{
int ret = PRM_ERR_NO_ERROR;
ret = sysprm_set_value_internal (prm, value, set_flag, duplicate);
if (ret == PRM_ERR_NO_ERROR)
{
const PARAM_ID *ptr = (PARAM_ID *) sysprm_find_shared_system_parameter (prm);
if (ptr)
{
SYSPRM_VALUE tmp_value = value;
int max = *(int *) ptr;
for (int k = 1; k <= max; k++)
{
if (prm->id != ptr[k])
{
ret = sysprm_set_value_internal (GET_PRM (ptr[k]), tmp_value, set_flag, true);
if (ret != PRM_ERR_NO_ERROR)
{
return ret;
}
}
}
}
}
return PRM_ERR_NO_ERROR;
}
static const int *
sysprm_find_shared_system_parameter (SYSPRM_PARAM * prm)
{
const PARAM_ID *ptr = NULL;
int i, k, max = 0;
for (i = 0; PARAM_VALUE_SHARE[i] != NULL; i++)
{
max = PARAM_VALUE_SHARE[i][0];
ptr = (PARAM_ID *) PARAM_VALUE_SHARE[i];
if (prm->id < ptr[1])
{
break;
}
else if (prm->id <= ptr[max])
{
for (k = 1; k <= max; k++)
{
if (prm->id == ptr[k])
{
return PARAM_VALUE_SHARE[i];
}
}
}
}
return NULL;
}
/*
* sysprm_set_system_parameter_value () - change a parameter value in prm_Def
* array.
*
* return : void.
* prm (in) : parameter that needs changed.
* value (in) : new value.
*/
static void
sysprm_set_system_parameter_value (SYSPRM_PARAM * prm, SYSPRM_VALUE value, bool set_flag)
{
switch (prm->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
prm_set_integer_value (prm->id, value.i);
break;
case PRM_FLOAT:
prm_set_float_value (prm->id, value.f);
break;
case PRM_BOOLEAN:
prm_set_bool_value (prm->id, value.b);
break;
case PRM_STRING:
prm_set_string_value (prm->id, value.str);
break;
case PRM_INTEGER_LIST:
prm_set_integer_list_value (prm->id, value.integer_list);
break;
case PRM_BIGINT:
prm_set_bigint_value (prm->id, value.bi);
break;
default:
assert_release (0);
break;
}
}
/*
* prm_compound_has_changed () - update all affected system parameters if prm
* is a compound.
*
* return : error code
* prm (in) : system parameter that has changed
* set_flag (in) : updates PRM_SET flag.
*/
static int
prm_compound_has_changed (SYSPRM_PARAM * prm, bool set_flag)
{
assert (PRM_IS_COMPOUND (prm));
if (prm->id == PRM_ID_COMPAT_MODE)
{
prm_set_compound (prm, compat_mode_values, DIM (compat_mode_values), set_flag);
}
else
{
assert (false);
}
return NO_ERROR;
}
/*
* prm_set_force -
* return: NO_ERROR or error code defined in enum SYSPRM_ERR
* prm(in):
* value(in):
*/
static int
prm_set_force (SYSPRM_PARAM * prm, const char *value)
{
if (prm->force_value)
{
free_and_init (prm->force_value);
}
prm->force_value = strdup (value);
if (prm->force_value == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (size_t) (strlen (value) + 1));
return PRM_ERR_NO_MEM_FOR_PRM;
}
return NO_ERROR;
}
static bool
prm_set_default_internal (SYSPRM_PARAM * prm)
{
switch (prm->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
case PRM_BIGINT:
case PRM_BOOLEAN:
case PRM_FLOAT:
prm->value = prm->default_value;
break;
case PRM_STRING:
if (PRM_IS_ALLOCATED (prm))
{
char *str = PRM_GET_STRING (prm->value);
free_and_init (str);
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->dynamic_flag);
}
prm->value = prm->default_value;
break;
case PRM_INTEGER_LIST:
if (PRM_IS_ALLOCATED (prm))
{
int *int_list = PRM_GET_INTEGER_LIST (prm->value);
free_and_init (int_list);
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->dynamic_flag);
}
prm->value = prm->default_value;
break;
default:
return false;
}
/* Indicate that the default value was used */
PRM_SET_BIT (PRM_DEFAULT_USED, prm->dynamic_flag);
if (PRM_IS_FOR_QRY_STRING (prm))
{
PRM_CLEAR_BIT (PRM_DIFFERENT, prm->dynamic_flag);
}
return true;
}
/*
* prm_set_default -
* return: NO_ERROR or error code defined in enum SYSPRM_ERR
* prm(in):
*/
static int
prm_set_default (SYSPRM_PARAM * prm)
{
#if defined (SERVER_MODE)
if (PRM_IS_FOR_SESSION (prm) && BO_IS_SERVER_RESTARTED ())
{
SESSION_PARAM *sprm = NULL;
THREAD_ENTRY *thread_p = thread_get_thread_entry_info ();
sprm = session_get_session_parameter (thread_p, prm->id);
if (sprm == NULL)
{
return PRM_ERR_UNKNOWN_PARAM;
}
return sysprm_set_session_parameter_default (sprm, prm->id);
}
#endif /* SERVER_MODE */
if (prm == NULL)
{
return ER_FAILED;
}
if (!prm_set_default_internal (prm))
{
return ER_FAILED;
}
const PARAM_ID *ptr = (PARAM_ID *) sysprm_find_shared_system_parameter (prm);
if (ptr)
{
int max = *(int *) ptr;
for (int k = 1; k <= max; k++)
{
if (prm->id != ptr[k])
{
if (!prm_set_default_internal (GET_PRM (ptr[k])))
{
return ER_FAILED;
}
}
}
}
return NO_ERROR;
}
/*
* prm_find -
* return: NULL or found parameter
* pname(in): parameter name to find
*/
static SYSPRM_PARAM *
prm_find (const char *pname, const char *section)
{
int i;
char *key;
char buf[4096];
if (pname == NULL)
{
return NULL;
}
if (section != NULL)
{
snprintf (buf, sizeof (buf) - 1, "%s::%s", section, pname);
key = buf;
}
else
{
key = (char *) pname;
}
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (intl_mbs_casecmp (GET_PRM (i)->name, key) == 0) // TODO: strcasecmp
{
assert ((PARAM_ID) i == GET_PRM (i)->id);
return GET_PRM (i);
}
}
return NULL;
}
/*
* sysprm_set_force -
* return: NO_ERROR or error code
* param_id(in): parameter id to set
* pvalue(in): value to be set to the parameter
*/
int
sysprm_set_force (PARAM_ID param_id, const char *pvalue)
{
if ((param_id < PRM_FIRST_ID || param_id > PRM_LAST_ID) || pvalue == NULL)
{
return ER_PRM_BAD_VALUE;
}
if (prm_set_force (GET_PRM (param_id), pvalue) != NO_ERROR)
{
return ER_PRM_CANNOT_CHANGE;
}
return NO_ERROR;
}
/*
* sysprm_set_to_default -
* return: NO_ERROR or error code
* pname(in): parameter name to set to default value
*/
int
sysprm_set_to_default (PARAM_ID param_id, bool set_to_force)
{
SYSPRM_PARAM *prm;
if (param_id < PRM_FIRST_ID || param_id > PRM_LAST_ID)
{
return ER_PRM_BAD_VALUE;
}
prm = GET_PRM (param_id);
if (prm_set_default (prm) != NO_ERROR)
{
return ER_PRM_CANNOT_CHANGE;
}
if (set_to_force)
{
char val[LINE_MAX];
prm_print (prm, val, LINE_MAX, PRM_PRINT_NONE, PRM_PRINT_CURR_VAL);
prm_set_force (prm, val);
}
return NO_ERROR;
}
/*
* prm_keyword - Search a keyword within the keyword table
* return: NULL or found keyword
* val(in): keyword value
* name(in): keyword name
* tbl(in): keyword table
* dim(in): size of the table
*/
static const KEYVAL *
prm_keyword (int val, const char *name, const KEYVAL * tbl, int dim)
{
int i;
if (name != NULL)
{
for (i = 0; i < dim; i++)
{
if (intl_mbs_casecmp (name, tbl[i].key) == 0)
{
return &tbl[i];
}
}
}
else
{
for (i = 0; i < dim; i++)
{
if (tbl[i].val == val)
{
return &tbl[i];
}
}
}
return NULL;
}
/*
* prm_report_bad_entry -
* return:
* line(in):
* err(in):
* where(in):
*/
static void
prm_report_bad_entry (const char *key, int line, int err, const char *where)
{
if (line > 0)
{
fprintf (stderr, PARAM_MSG_FMT (PRM_ERR_BAD_LINE), key, line, where);
}
else if (line == 0)
{
fprintf (stderr, PARAM_MSG_FMT (PRM_ERR_BAD_PARAM), key, line, where);
}
else
{
fprintf (stderr, PARAM_MSG_FMT (PRM_ERR_BAD_ENV_VAR), where);
}
if (err > 0)
{
switch (err)
{
case PRM_ERR_DEPRICATED:
case PRM_ERR_NO_MEM_FOR_PRM:
fprintf (stderr, "%s\n", PARAM_MSG_FMT (err));
break;
case PRM_ERR_UNKNOWN_PARAM:
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_PRM_UNKNOWN_SYSPRM, 3, key, line, where);
fprintf (stderr, "%s\n", PARAM_MSG_FMT (err));
break;
case PRM_ERR_BAD_VALUE:
case PRM_ERR_BAD_STRING:
case PRM_ERR_BAD_RANGE:
case PRM_ERR_RESET_BAD_RANGE:
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_PRM_BAD_VALUE, 1, key);
fprintf (stderr, "%s\n", PARAM_MSG_FMT (err));
break;
default:
break;
}
}
else
{
fprintf (stderr, PARAM_MSG_FMT (PRM_ERR_UNIX_ERROR), strerror (err));
}
fflush (stderr);
}
/*
* sysprm_final - Clean up the storage allocated during parameter parsing
* return: none
*/
void
sysprm_final (void)
{
SYSPRM_PARAM *prm;
int i;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
prm = GET_PRM (i);
if (PRM_IS_ALLOCATED (prm))
{
switch (prm->datatype)
{
case PRM_STRING:
free_and_init (PRM_GET_STRING (prm->value));
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->dynamic_flag);
break;
case PRM_INTEGER_LIST:
free_and_init (PRM_GET_INTEGER_LIST (prm->value));
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->dynamic_flag);
break;
default:
/* do nothing */
break;
}
}
/* reset all dynamic flags */
prm->dynamic_flag = 0;
}
prm_file_has_been_loaded.clear ();
}
#if defined (SA_MODE) || defined (SERVER_MODE)
static void
init_server_timezone_parameter (void)
{
SYSPRM_PARAM *prm_server_timezone = GET_PRM (PRM_ID_SERVER_TIMEZONE);
if (!PRM_IS_SET (prm_server_timezone))
{
char timezone_name[TZ_GENERIC_NAME_SIZE + 1];
int ret;
if (PRM_GET_STRING (prm_server_timezone->value))
{
free_and_init (PRM_GET_STRING (prm_server_timezone->value));
}
PRM_CLEAR_BIT (PRM_ALLOCATED, prm_server_timezone->dynamic_flag);
ret = tz_resolve_os_timezone (timezone_name, TZ_GENERIC_NAME_SIZE);
if (ret < 0)
{
if (tz_get_data () != NULL)
{
strcpy (timezone_name, "Asia/Seoul");
}
else
{
/* IANA timezone data not available, just use offset timezone */
strcpy (timezone_name, "+09:00");
}
}
prm_set (prm_server_timezone, timezone_name, true);
}
}
#endif
/*
* prm_tune_parameters - Sets the values of various system parameters
* depending on the value of other parameters
* return: none
*
* Note: Used for providing a mechanism for tuning various system parameters.
* The parameters are only tuned if the user has not set them
* explictly, this can be ascertained by checking if the default
* value has been used.
*/
#if defined (SA_MODE) || defined (SERVER_MODE)
static void
prm_tune_parameters (void)
{
SYSPRM_PARAM *pb_aout_ratio_prm;
SYSPRM_PARAM *max_clients_prm;
SYSPRM_PARAM *max_plan_cache_entries_prm;
SYSPRM_PARAM *query_cache_mode_prm;
SYSPRM_PARAM *max_query_cache_entries_prm;
SYSPRM_PARAM *query_cache_size_in_pages_prm;
SYSPRM_PARAM *ha_mode_prm;
SYSPRM_PARAM *ha_server_state_prm;
SYSPRM_PARAM *auto_restart_server_prm;
SYSPRM_PARAM *log_background_archiving_prm;
SYSPRM_PARAM *ha_node_list_prm;
SYSPRM_PARAM *max_log_archives_prm;
SYSPRM_PARAM *force_remove_log_archives_prm;
SYSPRM_PARAM *call_stack_dump_activation_prm;
SYSPRM_PARAM *test_mode_prm;
SYSPRM_PARAM *tz_leap_second_support_prm;
SYSPRM_PARAM *task_worker_prm;
SYSPRM_PARAM *task_group_prm;
#if defined (SERVER_MODE)
SYSPRM_PARAM *max_parallel_workers_prm;
SYSPRM_PARAM *parallelism_prm;
SYSPRM_PARAM *max_connection_workers_prm;
SYSPRM_PARAM *min_connection_workers_prm;
#endif
char newval[LINE_MAX];
char host_name[CUB_MAXHOSTNAMELEN];
int system_cpu_count;
int task_worker;
int max_clients;
/* Find the parameters that require tuning */
pb_aout_ratio_prm = GET_PRM (PRM_ID_PB_AOUT_RATIO);
max_clients_prm = GET_PRM (PRM_ID_CSS_MAX_CLIENTS);
max_plan_cache_entries_prm = GET_PRM (PRM_ID_XASL_CACHE_MAX_ENTRIES);
query_cache_mode_prm = GET_PRM (PRM_ID_LIST_QUERY_CACHE_MODE);
max_query_cache_entries_prm = GET_PRM (PRM_ID_LIST_MAX_QUERY_CACHE_ENTRIES);
query_cache_size_in_pages_prm = GET_PRM (PRM_ID_LIST_MAX_QUERY_CACHE_PAGES);
test_mode_prm = GET_PRM (PRM_ID_TEST_MODE);
tz_leap_second_support_prm = GET_PRM (PRM_ID_TZ_LEAP_SECOND_SUPPORT);
/* disable AOUT list until we fix CBRD-20741 */
prm_set (pb_aout_ratio_prm, "0", false);
ha_mode_prm = GET_PRM (PRM_ID_HA_MODE);
ha_server_state_prm = GET_PRM (PRM_ID_HA_SERVER_STATE);
auto_restart_server_prm = GET_PRM (PRM_ID_AUTO_RESTART_SERVER);
log_background_archiving_prm = GET_PRM (PRM_ID_LOG_BACKGROUND_ARCHIVING);
ha_node_list_prm = GET_PRM (PRM_ID_HA_NODE_LIST);
max_log_archives_prm = GET_PRM (PRM_ID_LOG_MAX_ARCHIVES);
force_remove_log_archives_prm = GET_PRM (PRM_ID_FORCE_REMOVE_LOG_ARCHIVES);
/* Check that max clients has been set */
#if 0
if (!(PRM_IS_SET (max_clients_prm)))
{
if (prm_set_default (max_clients_prm) != PRM_ERR_NO_ERROR)
{
fprintf (stderr, msgcat_message (MSGCAT_CATALOG_CUBRID, MSGCAT_SET_PARAMETERS, PRM_ERR_NO_VALUE),
max_clients_prm->name);
assert (0);
return;
}
}
else
#endif
{
max_clients = MIN (CSS_MAX_CLIENT_COUNT, css_get_max_socket_fds ());
if (PRM_GET_INT (max_clients_prm->value) > max_clients)
{
sprintf (newval, "%d", max_clients);
(void) prm_set (max_clients_prm, newval, false);
}
#if defined (SERVER_MODE)
system_cpu_count = cubthread::system_core_count ();
task_worker = css_get_max_connections ();
#else
system_cpu_count = 1;
task_worker = system_cpu_count * 6;
#endif
task_worker_prm = GET_PRM (PRM_ID_TASK_WORKER);
if (PRM_GET_INT (task_worker_prm->value) < 0)
{
/* the value of task worker is default. */
sprintf (newval, "%d", task_worker);
(void) prm_set (task_worker_prm, newval, false);
}
task_group_prm = GET_PRM (PRM_ID_TASK_GROUP);
if (PRM_GET_INT (task_group_prm->value) > system_cpu_count)
{
sprintf (newval, "%d", system_cpu_count);
(void) prm_set (task_group_prm, newval, false);
}
if (PRM_GET_INT (task_group_prm->value) > PRM_GET_INT (task_worker_prm->value))
{
sprintf (newval, "%d", PRM_GET_INT (task_worker_prm->value));
(void) prm_set (task_group_prm, newval, false);
}
#if defined (SERVER_MODE)
max_connection_workers_prm = GET_PRM (PRM_ID_CSS_MAX_CONNECTION_WORKER);
min_connection_workers_prm = GET_PRM (PRM_ID_CSS_MIN_CONNECTION_WORKER);
if (PRM_GET_INT (max_connection_workers_prm->value) > system_cpu_count)
{
sprintf (newval, "%d", system_cpu_count);
(void) prm_set (max_connection_workers_prm, newval, false);
}
if (PRM_GET_INT (min_connection_workers_prm->value) > PRM_GET_INT (max_connection_workers_prm->value))
{
sprintf (newval, "%d", PRM_GET_INT (max_connection_workers_prm->value));
(void) prm_set (min_connection_workers_prm, newval, false);
}
/* set parallelism to system_cpu_count if it is greater than cubthread::system_core_count () */
parallelism_prm = GET_PRM (PRM_ID_PARALLELISM);
if (PRM_GET_INT (parallelism_prm->value) > system_cpu_count)
{
sprintf (newval, "%d", system_cpu_count);
(void) prm_set (parallelism_prm, newval, false);
}
/* set parallelism to max_parallel_workers if it is greater than max_parallel_workers */
max_parallel_workers_prm = GET_PRM (PRM_ID_MAX_PARALLEL_WORKERS);
if (PRM_GET_INT (parallelism_prm->value) > PRM_GET_INT (max_parallel_workers_prm->value))
{
sprintf (newval, "%d", PRM_GET_INT (max_parallel_workers_prm->value));
(void) prm_set (parallelism_prm, newval, false);
}
if (PRM_GET_BOOL (test_mode_prm->value) == true)
{
SYSPRM_PARAM *heap_scan_page_threshold_prm = GET_PRM (PRM_ID_PARALLEL_HEAP_SCAN_PAGE_THRESHOLD);
SYSPRM_PARAM *hash_join_page_threshold_prm = GET_PRM (PRM_ID_PARALLEL_HASH_JOIN_PAGE_THRESHOLD);
SYSPRM_PARAM *sort_page_threshold_prm = GET_PRM (PRM_ID_PARALLEL_SORT_PAGE_THRESHOLD);
if (PRM_GET_INT (heap_scan_page_threshold_prm->value) ==
PRM_GET_INT (heap_scan_page_threshold_prm->default_value))
{
sprintf (newval, "%d", 32); /* TODO: 0 ? */
(void) prm_set (heap_scan_page_threshold_prm, newval, false);
}
if (PRM_GET_INT (hash_join_page_threshold_prm->value) ==
PRM_GET_INT (hash_join_page_threshold_prm->default_value))
{
sprintf (newval, "%d", 0);
(void) prm_set (hash_join_page_threshold_prm, newval, false);
}
if (PRM_GET_INT (sort_page_threshold_prm->value) == PRM_GET_INT (sort_page_threshold_prm->default_value))
{
sprintf (newval, "%d", 0);
(void) prm_set (sort_page_threshold_prm, newval, false);
}
}
#endif
}
/* check Plan Cache and Query Cache parameters */
if (max_plan_cache_entries_prm == NULL || query_cache_mode_prm == NULL || max_query_cache_entries_prm == NULL)
{
return;
}
if (PRM_GET_INT (max_plan_cache_entries_prm->value) == 0)
{
/* 0 means disable plan cache */
(void) prm_set (max_plan_cache_entries_prm, "-1", false);
}
if (PRM_GET_INT (max_plan_cache_entries_prm->value) <= 0)
{
/* disable query cache mode by default */
(void) prm_set (max_query_cache_entries_prm, 0, false);
(void) prm_set (query_cache_size_in_pages_prm, 0, false);
}
/* check HA related parameters */
#if defined (SA_MODE) || defined (WINDOWS)
/* we should save original PRM_HA_MODE value before tuning */
prm_set_integer_value (PRM_ID_HA_MODE_FOR_SA_UTILS_ONLY, prm_get_integer_value (PRM_ID_HA_MODE));
/* reset to default 'active mode' */
(void) prm_set_default (ha_mode_prm);
(void) prm_set (ha_server_state_prm, HA_SERVER_STATE_ACTIVE_STR, false);
if (force_remove_log_archives_prm != NULL && !PRM_GET_BOOL (force_remove_log_archives_prm->value))
{
(void) prm_set_default (max_log_archives_prm);
}
#else /* SA_MODE || WINDOWS */
if (PRM_GET_INT (ha_mode_prm->value) != HA_MODE_OFF)
{
if (PRM_DEFAULT_VAL_USED (ha_server_state_prm))
{
sprintf (newval, "%s", HA_SERVER_STATE_STANDBY_STR);
prm_set (ha_server_state_prm, newval, false);
}
prm_set (auto_restart_server_prm, "no", false);
if (PRM_GET_INT (ha_mode_prm->value) == HA_MODE_REPLICA)
{
prm_set (force_remove_log_archives_prm, "yes", false);
}
}
else
{
sprintf (newval, "%s", HA_SERVER_STATE_ACTIVE_STR);
prm_set (ha_server_state_prm, newval, false);
if (force_remove_log_archives_prm != NULL && !PRM_GET_BOOL (force_remove_log_archives_prm->value))
{
(void) prm_set_default (max_log_archives_prm);
}
}
#endif /* !SA_MODE && !WINDOWS */
/* disable them temporarily */
if (ha_node_list_prm == NULL || PRM_DEFAULT_VAL_USED (ha_node_list_prm))
{
if (GETHOSTNAME (host_name, sizeof (host_name)))
{
strncpy (host_name, "localhost", sizeof (host_name) - 1);
er_clear ();
}
snprintf (newval, sizeof (newval) - 1, "%s@%s", host_name, host_name);
prm_set (ha_node_list_prm, newval, false);
}
call_stack_dump_activation_prm = GET_PRM (PRM_ID_CALL_STACK_DUMP_ACTIVATION);
if (!PRM_IS_SET (call_stack_dump_activation_prm))
{
int dim;
int *integer_list = NULL;
if (PRM_IS_ALLOCATED (call_stack_dump_activation_prm))
{
free_and_init (PRM_GET_INTEGER_LIST (call_stack_dump_activation_prm->value));
}
dim = DIM (call_stack_dump_error_codes);
integer_list = (int *) malloc ((dim + 1) * sizeof (int));
if (integer_list == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (dim + 1) * sizeof (int));
return;
}
integer_list[0] = dim;
memcpy (&integer_list[1], call_stack_dump_error_codes, dim * sizeof (int));
prm_set_integer_list_value (PRM_ID_CALL_STACK_DUMP_ACTIVATION, integer_list);
PRM_SET_BIT (PRM_SET, call_stack_dump_activation_prm->dynamic_flag);
PRM_CLEAR_BIT (PRM_DEFAULT_USED, call_stack_dump_activation_prm->dynamic_flag);
}
#if !defined(NDEBUG)
SYSPRM_PARAM *fault_injection_ids_prm = GET_PRM (PRM_ID_FAULT_INJECTION_IDS);
SYSPRM_PARAM *fault_injection_test_prm = GET_PRM (PRM_ID_FAULT_INJECTION_TEST);
if (PRM_IS_SET (fault_injection_test_prm))
{
int group_code;
int dim;
int *integer_list = NULL;
group_code = PRM_GET_INT (fault_injection_test_prm->value);
if (PRM_IS_ALLOCATED (fault_injection_ids_prm))
{
free_and_init (PRM_GET_INTEGER_LIST (fault_injection_ids_prm->value));
}
for (dim = 0; fi_Groups[group_code][dim] != FI_TEST_NONE; dim++)
{
;
}
integer_list = (int *) malloc ((dim + 1) * sizeof (int));
if (integer_list == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (dim + 1) * sizeof (int));
return;
}
integer_list[0] = dim;
memcpy (&integer_list[1], fi_Groups[group_code], dim * sizeof (int));
prm_set_integer_list_value (PRM_ID_FAULT_INJECTION_IDS, integer_list);
PRM_SET_BIT (PRM_SET, fault_injection_ids_prm->dynamic_flag);
PRM_CLEAR_BIT (PRM_DEFAULT_USED, fault_injection_ids_prm->dynamic_flag);
}
#endif
if (PRM_GET_BOOL (test_mode_prm->value) == true)
{
tz_leap_second_support_prm->static_flag |= PRM_FOR_QRY_STRING;
}
return;
}
#else /* SA_MODE || SERVER_MODE */
static void
prm_tune_parameters (void)
{
SYSPRM_PARAM *max_plan_cache_entries_prm;
SYSPRM_PARAM *ha_node_list_prm;
SYSPRM_PARAM *ha_mode_prm;
SYSPRM_PARAM *ha_process_dereg_confirm_interval_in_msecs_prm;
SYSPRM_PARAM *ha_max_process_dereg_confirm_prm;
SYSPRM_PARAM *shutdown_wait_time_in_secs_prm;
SYSPRM_PARAM *ha_copy_log_timeout_prm;
SYSPRM_PARAM *ha_check_disk_failure_interval_prm;
SYSPRM_PARAM *test_mode_prm;
SYSPRM_PARAM *tz_leap_second_support_prm;
char newval[LINE_MAX];
char host_name[CUB_MAXHOSTNAMELEN];
/* Find the parameters that require tuning */
max_plan_cache_entries_prm = GET_PRM (PRM_ID_XASL_CACHE_MAX_ENTRIES);
ha_node_list_prm = GET_PRM (PRM_ID_HA_NODE_LIST);
ha_mode_prm = GET_PRM (PRM_ID_HA_MODE);
ha_process_dereg_confirm_interval_in_msecs_prm = GET_PRM (PRM_ID_HA_PROCESS_DEREG_CONFIRM_INTERVAL_IN_MSECS);
ha_max_process_dereg_confirm_prm = GET_PRM (PRM_ID_HA_MAX_PROCESS_DEREG_CONFIRM);
shutdown_wait_time_in_secs_prm = GET_PRM (PRM_ID_SHUTDOWN_WAIT_TIME_IN_SECS);
ha_copy_log_timeout_prm = GET_PRM (PRM_ID_HA_COPY_LOG_TIMEOUT);
ha_check_disk_failure_interval_prm = GET_PRM (PRM_ID_HA_CHECK_DISK_FAILURE_INTERVAL_IN_SECS);
test_mode_prm = GET_PRM (PRM_ID_TEST_MODE);
tz_leap_second_support_prm = GET_PRM (PRM_ID_TZ_LEAP_SECOND_SUPPORT);
/* check Plan Cache and Query Cache parameters */
if (PRM_GET_INT (max_plan_cache_entries_prm->value) == 0)
{
/* 0 means disable plan cache */
(void) prm_set (max_plan_cache_entries_prm, "-1", false);
}
#if defined (WINDOWS)
/* reset to default 'active mode' */
(void) prm_set_default (ha_mode_prm);
#endif
if (PRM_GET_INT (ha_mode_prm->value) != HA_MODE_OFF)
{
int ha_check_disk_failure_interval_value;
int ha_copy_log_timeout_value;
ha_check_disk_failure_interval_value = PRM_GET_INT (ha_check_disk_failure_interval_prm->value);
ha_copy_log_timeout_value = PRM_GET_INT (ha_copy_log_timeout_prm->value);
if (ha_copy_log_timeout_value == -1)
{
prm_set (ha_check_disk_failure_interval_prm, "0", false);
}
else if (ha_check_disk_failure_interval_value - ha_copy_log_timeout_value <
HB_MIN_DIFF_CHECK_DISK_FAILURE_INTERVAL_IN_SECS)
{
ha_check_disk_failure_interval_value =
ha_copy_log_timeout_value + HB_MIN_DIFF_CHECK_DISK_FAILURE_INTERVAL_IN_SECS;
sprintf (newval, "%ds", ha_check_disk_failure_interval_value);
prm_set (ha_check_disk_failure_interval_prm, newval, false);
}
}
/* disable them temporarily */
if (PRM_DEFAULT_VAL_USED (ha_node_list_prm))
{
if (GETHOSTNAME (host_name, sizeof (host_name)))
{
strncpy (host_name, "localhost", sizeof (host_name) - 1);
er_clear ();
}
snprintf (newval, sizeof (newval) - 1, "%s@%s", host_name, host_name);
prm_set (ha_node_list_prm, newval, false);
}
assert (ha_mode_prm != NULL);
if (PRM_GET_BOOL (test_mode_prm->value) == true)
{
tz_leap_second_support_prm->static_flag |= PRM_FOR_QRY_STRING;
}
return;
}
#endif /* CS_MODE */
#if defined (CS_MODE)
/*
* sysprm_tune_client_parameters () - Synchronize system parameters marked
* with PRM_FORCE_SERVER flag with server.
*
* return : void.
*/
void
sysprm_tune_client_parameters (void)
{
SYSPRM_ASSIGN_VALUE *force_server_values = NULL;
/* get values from server */
if (sysprm_get_force_server_parameters (&force_server_values) == NO_ERROR && force_server_values != NULL)
{
/* update system parameters on client */
sysprm_change_parameter_values (force_server_values, false, true);
}
/* free list of assign_values */
sysprm_free_assign_values (&force_server_values);
}
#endif /* CS_MODE */
int
prm_get_master_port_id (void)
{
return prm_get_integer_value (PRM_ID_TCP_PORT_ID);
}
bool
prm_get_commit_on_shutdown (void)
{
return prm_get_bool_value (PRM_ID_COMMIT_ON_SHUTDOWN);
//return PRM_COMMIT_ON_SHUTDOWN;
}
/*
* prm_set_compound - Sets the values of various system parameters based on
* the value of a "compound" parameter.
* return: none
* param(in): the compound parameter whose value has changed
* compound_param_values(in): an array of arrays that indicate the name of
* the parameter to change and its new value.
* NULL indicates resetting the parameter to its
* default. The name of the parameter is the last
* element of the array, 1 past the upper limit
* of the compound parameter.
* values_count(in): the number of elements in the compound_param_values
* array
*/
static void
prm_set_compound (SYSPRM_PARAM * param, const char **compound_param_values[], const int values_count, bool set_flag)
{
int i = 0;
const int param_value = PRM_GET_INT (param->value);
const int param_upper_limit = PRM_GET_INT (param->upper_limit);
assert (PRM_IS_INTEGER (param) || PRM_IS_KEYWORD (param));
assert (0 == PRM_GET_INT (param->lower_limit));
assert (param_value <= param_upper_limit);
for (i = 0; i < values_count; ++i)
{
const char *compound_param_name = compound_param_values[i][param_upper_limit + 1];
const char *compound_param_value = compound_param_values[i][param_value];
assert (compound_param_name != NULL);
if (compound_param_value == NULL)
{
prm_set_default (prm_find (compound_param_name, NULL));
}
else
{
prm_set (prm_find (compound_param_name, NULL), compound_param_value, set_flag);
}
}
}
/*
* prm_get_next_param_value - get next param=value token from a string
* containing a "param1=val1;param2=val2..." list
* return: NO_ERROR or error code if data format is incorrect
* data (in): the string containing the list
* prm (out): parameter name
* val (out): parameter value
*/
static int
prm_get_next_param_value (char **data, char **prm, char **val)
{
char *p = *data;
char *name = NULL;
char *value = NULL;
int err = PRM_ERR_NO_ERROR;
while (char_isspace (*p))
{
p++;
}
if (*p == '\0')
{
/* reached the end of the list */
err = PRM_ERR_NO_ERROR;
goto cleanup;
}
name = p;
while (*p && !char_isspace (*p) && *p != '=')
{
p++;
}
if (*p == '\0')
{
err = PRM_ERR_BAD_VALUE;
goto cleanup;
}
else if (*p == '=')
{
*p++ = '\0';
}
else
{
*p++ = '\0';
while (char_isspace (*p))
{
p++;
}
if (*p == '=')
{
p++;
}
}
while (char_isspace (*p))
{
p++;
}
if (*p == '\0')
{
err = PRM_ERR_BAD_VALUE;
goto cleanup;
}
value = p;
if (*p == '"' || *p == '\'')
{
char *t, delim;
delim = *p++;
value = t = p;
while (*t && *t != delim)
{
if (*t == '\\')
{
t++;
}
*p++ = *t++;
}
if (*t != delim)
{
err = PRM_ERR_BAD_STRING;
goto cleanup;
}
}
else
{
while (*p && !char_isspace (*p) && *p != ';')
{
p++;
}
}
if (*p)
{
*p++ = '\0';
while (char_isspace (*p))
{
p++;
}
if (*p == ';')
{
p++;
}
}
*data = p;
*val = value;
*prm = name;
return err;
cleanup:
*prm = NULL;
*val = NULL;
*data = NULL;
return err;
}
/*
* prm_get_name () - returns the name of a parameter
*
* return : parameter name
* prm_id (in) : parameter id
*/
const char *
prm_get_name (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
return GET_PRM (prm_id)->name;
}
/*
* prm_get_value () - returns a pointer to the value of a system parameter
*
* return : pointer to value
* prm_id (in) : parameter id
*
* NOTE: for session parameters, in server mode, the value stored in
* conn_entry->session_parameters is returned instead of the value
* from prm_Def array.
*/
SYSPRM_VALUE *
prm_get_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
#if defined (SERVER_MODE)
THREAD_ENTRY *thread_p;
if (PRM_SERVER_SESSION (prm_id) && BO_IS_SERVER_RESTARTED ())
{
SESSION_PARAM *sprm;
thread_p = thread_get_thread_entry_info ();
sprm = session_get_session_parameter (thread_p, prm_id);
if (sprm)
{
return &(sprm->value);
}
}
#endif
switch (GET_PRM (prm_id)->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
case PRM_FLOAT:
case PRM_BOOLEAN:
case PRM_BIGINT:
case PRM_STRING:
case PRM_INTEGER_LIST:
assert (GET_PRM (prm_id)->value.is_null == false);
return &(GET_PRM (prm_id)->value.v);
default:
break;
}
assert (false);
return NULL;
}
/*
* prm_set_integer_value () - set a new value to a parameter of type integer
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*
* NOTE: keywords are stored as integers
*/
void
prm_set_integer_value (PARAM_ID prm_id, int value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_INTEGER (GET_PRM (prm_id)) || PRM_IS_KEYWORD (GET_PRM (prm_id)));
PRM_GET_INT (GET_PRM (prm_id)->value) = value;
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* prm_set_bool_value () - set a new value to a parameter of type bool
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*/
void
prm_set_bool_value (PARAM_ID prm_id, bool value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_BOOLEAN (GET_PRM (prm_id)));
PRM_GET_BOOL (GET_PRM (prm_id)->value) = value;
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* prm_set_float_value () - set a new value to a parameter of type float
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*/
void
prm_set_float_value (PARAM_ID prm_id, float value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_FLOAT (GET_PRM (prm_id)));
PRM_GET_FLOAT (GET_PRM (prm_id)->value) = value;
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* prm_set_string_value () - set a new value to a parameter of type string
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*/
void
prm_set_string_value (PARAM_ID prm_id, char *value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_STRING (GET_PRM (prm_id)));
if (PRM_IS_ALLOCATED (GET_PRM (prm_id)))
{
free_and_init (PRM_GET_STRING (GET_PRM (prm_id)->value));
PRM_CLEAR_BIT (PRM_ALLOCATED, (GET_PRM (prm_id)->dynamic_flag));
}
PRM_GET_STRING (GET_PRM (prm_id)->value) = value;
if (PRM_GET_STRING (GET_PRM (prm_id)->value) != NULL)
{
PRM_SET_BIT (PRM_ALLOCATED, (GET_PRM (prm_id)->dynamic_flag));
}
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* prm_set_integer_list_value () - set a new value to a parameter of type
* integer list
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*/
void
prm_set_integer_list_value (PARAM_ID prm_id, int *value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_INTEGER_LIST (GET_PRM (prm_id)));
if (PRM_IS_ALLOCATED (GET_PRM (prm_id)))
{
free_and_init (PRM_GET_INTEGER_LIST (GET_PRM (prm_id)->value));
PRM_CLEAR_BIT (PRM_ALLOCATED, (GET_PRM (prm_id)->dynamic_flag));
}
PRM_GET_INTEGER_LIST (GET_PRM (prm_id)->value) = value;
if (PRM_GET_INTEGER_LIST (GET_PRM (prm_id)->value) != NULL)
{
PRM_SET_BIT (PRM_ALLOCATED, (GET_PRM (prm_id)->dynamic_flag));
}
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* prm_set_bigint_value () - set a new value to a parameter of type size
*
* return : void
* prm_id (in) : parameter id
* value (in) : new value
*/
void
prm_set_bigint_value (PARAM_ID prm_id, UINT64 value)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_BIGINT (GET_PRM (prm_id)));
PRM_GET_BIGINT (GET_PRM (prm_id)->value) = value;
sysprm_update_flag_different (GET_PRM (prm_id));
}
/*
* sysprm_find_err_in_integer_list () - function that searches a error_code in an
* integer list
*
* return : true if error_code is found, false otherwise
* prm_id (in) : id of the system parameter that contains an integer list
* error_code (in) : error_code to look for
*/
bool
sysprm_find_err_in_integer_list (PARAM_ID prm_id, int error_code)
{
int i;
int *integer_list = prm_get_integer_list_value (prm_id);
if (integer_list == NULL)
{
return false;
}
for (i = 1; i <= integer_list[0]; i++)
{
// TODO: Is "integer_list[i] == -error_code" necessary? Why is it necessary?
if (integer_list[i] == error_code || integer_list[i] == -error_code)
{
return true;
}
}
return false;
}
/*
* sysprm_find_fi_code_in_integer_list () - function that searches a FI_TEST_CODE in an
* integer list
*
* return : true if FI_TEST_CODE is found, false otherwise
* prm_id (in) : id of the system parameter that contains an integer list
* fi_code (in) : FI_TEST_CODE to look for
*/
bool
sysprm_find_fi_code_in_integer_list (PARAM_ID prm_id, int fi_code)
{
int i;
int *integer_list = prm_get_integer_list_value (prm_id);
if (integer_list == NULL)
{
return false;
}
for (i = 1; i <= integer_list[0]; i++)
{
if (integer_list[i] == fi_code)
{
return true;
}
}
return false;
}
/*
* sysprm_update_flag_different () - updates the PRM_DIFFERENT bit in flag.
*
* return : void
* prm (in) : system parameter to update
*
* NOTE: Should be called whenever a system parameter changes value.
* This only affects parameters on client (there is no use for this flag
* on server side) that are also flagged with PRM_FOR_QRY_STRING.
*/
static void
sysprm_update_flag_different (SYSPRM_PARAM * prm)
{
#if defined (CS_MODE)
if (!PRM_IS_FOR_QRY_STRING (prm) && !PRM_IS_FOR_HA_CONTEXT (prm))
{
/* nothing to do */
return;
}
/* compare current value with default value and update PRM_DIFFERENT bit */
if (sysprm_compare_values (prm) != 0)
{
PRM_SET_BIT (PRM_DIFFERENT, prm->dynamic_flag);
}
else
{
PRM_CLEAR_BIT (PRM_DIFFERENT, prm->dynamic_flag);
}
#endif /* CS_MODE */
}
#if defined(UNUSED_FUNCTIONS)
/*
* sysprm_update_flag_allocated () - update PRM_ALLOCATED flag. If value is
* NULL, the bit is cleared, if not, the bit
* is set.
*
* return : void.
* prm (in) : system parameter.
*/
static void
sysprm_update_flag_allocated (SYSPRM_PARAM * prm)
{
bool allocated;
switch (prm->datatype)
{
case PRM_STRING:
allocated = PRM_GET_STRING (prm->value) != NULL;
break;
case PRM_INTEGER_LIST:
allocated = PRM_GET_INTEGER_LIST (prm->value) != NULL;
break;
default:
allocated = false;
break;
}
if (allocated)
{
PRM_SET_BIT (PRM_ALLOCATED, prm->dynamic_flag);
}
else
{
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->dynamic_flag);
}
}
#endif
/*
* sysprm_update_session_prm_flag_allocated () - update PRM_ALLOCATED flag for
* session parameters. If the
* value is null, the bit is
* cleared, if not, the bit is
* set.
*
* return : void
* prm (in) : session parameter
*/
static void
sysprm_update_session_prm_flag_allocated (SESSION_PARAM * prm)
{
bool allocated;
switch (prm->datatype)
{
case PRM_STRING:
allocated = prm->value.str != NULL;
break;
case PRM_INTEGER_LIST:
allocated = prm->value.integer_list != NULL;
break;
default:
allocated = false;
break;
}
if (allocated)
{
PRM_SET_BIT (PRM_ALLOCATED, prm->flag);
}
else
{
PRM_CLEAR_BIT (PRM_ALLOCATED, prm->flag);
}
}
/*
* sysprm_clear_sysprm_value () - Clears a SYSPRM_VALUE.
*
* return : void.
* value (in) : value that needs cleared.
* datatype (in) : data type for value.
*/
static void
sysprm_clear_sysprm_value (SYSPRM_VALUE * value, SYSPRM_DATATYPE datatype)
{
switch (datatype)
{
case PRM_STRING:
free_and_init (value->str);
break;
case PRM_INTEGER_LIST:
free_and_init (value->integer_list);
break;
default:
/* do nothing */
break;
}
}
/*
* sysprm_alloc_session_parameters () - allocates memory for session
* parameters array
*
* return : NULL or pointer to array of session parameters
*/
static SESSION_PARAM *
sysprm_alloc_session_parameters (void)
{
SESSION_PARAM *result = NULL;
size_t size;
assert (NUM_SESSION_PRM > 0);
size = NUM_SESSION_PRM * sizeof (SESSION_PARAM);
result = (SESSION_PARAM *) malloc (size);
if (result == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size);
return NULL;
}
memset (result, 0, size);
return result;
}
/*
* sysprm_free_session_parameters () - free session parameter array
*
* return : void
* session_parameters_ptr (in) : pointer to session parameter array
*/
void
sysprm_free_session_parameters (SESSION_PARAM ** session_parameters_ptr)
{
int i = 0;
SESSION_PARAM *sprm = NULL;
assert (session_parameters_ptr != NULL);
if (*session_parameters_ptr == NULL)
{
return;
}
for (i = 0; i < NUM_SESSION_PRM; i++)
{
sprm = &((*session_parameters_ptr)[i]);
sysprm_clear_sysprm_value (&sprm->value, (SYSPRM_DATATYPE) sprm->datatype);
}
free_and_init (*session_parameters_ptr);
}
/*
* sysprm_pack_sysprm_value () - Packs a sysprm_value.
*
* return : pointer after the packed value.
* ptr (in) : pointer to position where the value should be packed.
* value (in) : sysprm_value to be packed.
* datatype (in) : value data type.
*/
static char *
sysprm_pack_sysprm_value (char *ptr, SYSPRM_VALUE value, SYSPRM_DATATYPE datatype)
{
if (ptr == NULL)
{
return NULL;
}
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
switch (datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
ptr = or_pack_int (ptr, value.i);
break;
case PRM_BOOLEAN:
ptr = or_pack_int (ptr, value.b);
break;
case PRM_FLOAT:
ptr = or_pack_float (ptr, value.f);
break;
case PRM_STRING:
ptr = or_pack_string (ptr, value.str);
break;
case PRM_INTEGER_LIST:
if (value.integer_list != NULL)
{
int i;
ptr = or_pack_int (ptr, value.integer_list[0]);
for (i = 1; i <= value.integer_list[0]; i++)
{
ptr = or_pack_int (ptr, value.integer_list[i]);
}
}
else
{
ptr = or_pack_int (ptr, -1);
}
break;
case PRM_BIGINT:
ptr = or_pack_int64 (ptr, value.bi);
break;
default:
assert_release (0);
break;
}
return ptr;
}
/*
* sysprm_packed_sysprm_value_length () - size of packed sysprm_value.
*
* return : size of packed sysprm_value.
* value (in) : sysprm_value.
* datatype (in) : value data type.
* offset (in) : offset to pointer where sysprm_value will be packed
* (required for PRM_BIGINT data type)
*/
static int
sysprm_packed_sysprm_value_length (SYSPRM_VALUE value, SYSPRM_DATATYPE datatype, int offset)
{
switch (datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
case PRM_BOOLEAN:
return OR_INT_SIZE;
case PRM_FLOAT:
return OR_FLOAT_SIZE;
case PRM_STRING:
return or_packed_string_length (value.str, NULL);
case PRM_INTEGER_LIST:
if (value.integer_list != NULL)
{
return OR_INT_SIZE * (value.integer_list[0] + 1);
}
else
{
return OR_INT_SIZE;
}
case PRM_BIGINT:
/* pointer will be aligned to MAX_ALIGNMENT */
return DB_ALIGN (offset, MAX_ALIGNMENT) - offset + OR_INT64_SIZE;
default:
return 0;
}
}
/*
* sysprm_unpack_sysprm_value () - unpacks a sysprm_value.
*
* return : pointer after the unpacked sysprm_value.
* ptr (in) : pointer to the position where sysprm_value is packed.
* value (out) : pointer to unpacked sysprm_value.
* datatype (in) : value data type.
*/
static char *
sysprm_unpack_sysprm_value (char *ptr, SYSPRM_VALUE * value, SYSPRM_DATATYPE datatype)
{
assert (value != NULL);
if (ptr == NULL)
{
return NULL;
}
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
switch (datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
ptr = or_unpack_int (ptr, &value->i);
break;
case PRM_BOOLEAN:
{
int temp;
ptr = or_unpack_int (ptr, &temp);
value->b = temp;
}
break;
case PRM_FLOAT:
ptr = or_unpack_float (ptr, &value->f);
break;
case PRM_STRING:
{
char *str = NULL;
ptr = or_unpack_string_nocopy (ptr, &str);
if (str != NULL)
{
value->str = strdup (str);
if (value->str == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, (size_t) (strlen (str) + 1));
return NULL;
}
}
else
{
value->str = NULL;
}
}
break;
case PRM_INTEGER_LIST:
{
int temp, i;
ptr = or_unpack_int (ptr, &temp);
if (temp == -1)
{
value->integer_list = NULL;
}
else
{
value->integer_list = (int *) malloc ((temp + 1) * OR_INT_SIZE);
if (value->integer_list == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1,
(size_t) ((temp + 1) * OR_INT_SIZE));
return NULL;
}
else
{
value->integer_list[0] = temp;
for (i = 1; i <= temp; i++)
{
ptr = or_unpack_int (ptr, &value->integer_list[i]);
}
}
}
}
break;
case PRM_BIGINT:
{
INT64 size;
ptr = or_unpack_int64 (ptr, &size);
value->bi = (UINT64) size;
}
break;
default:
break;
}
return ptr;
}
/*
* sysprm_pack_session_parameters () - packs the array of session parameters
*
* return : new position pointer after packing
* ptr (in) : pointer to the position where the packing starts
* session_parameters (in) : array of session parameters
*/
char *
sysprm_pack_session_parameters (char *ptr, SESSION_PARAM * session_parameters)
{
SESSION_PARAM *prm = NULL;
int i = 0;
if (ptr == NULL)
{
return NULL;
}
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
for (i = 0; i < NUM_SESSION_PRM; i++)
{
prm = &session_parameters[i];
ptr = or_pack_int (ptr, prm->prm_id);
ptr = or_pack_int (ptr, prm->flag);
ptr = or_pack_int (ptr, prm->datatype);
ptr = sysprm_pack_sysprm_value (ptr, prm->value, (SYSPRM_DATATYPE) prm->datatype);
}
return ptr;
}
/*
* sysprm_packed_session_parameters_length () - returns the length needed to
* pack an array of session
* parameters
*
* return : size of packed data
* session_parameters (in) : array of session parameters
* offset (in) : the offset to packed session parameters
*/
int
sysprm_packed_session_parameters_length (SESSION_PARAM * session_parameters, int offset)
{
SESSION_PARAM *prm = NULL;
int size = 0, i = 0;
for (i = 0; i < NUM_SESSION_PRM; i++)
{
prm = &session_parameters[i];
size += OR_INT_SIZE; /* prm_id */
size += OR_INT_SIZE; /* flag */
size += OR_INT_SIZE; /* datatype */
size += /* value */
sysprm_packed_sysprm_value_length (session_parameters[i].value, (SYSPRM_DATATYPE) prm->datatype, size + offset);
}
return size;
}
/*
* sysprm_unpack_session_parameters () - unpacks an array of session parameters
* from buffer
*
* return : new pointer position after unpacking
* ptr (in) : pointer to position where unpacking starts
* session_parameters_ptr (out) : pointer to the unpacked list of session
* parameters
*/
char *
sysprm_unpack_session_parameters (char *ptr, SESSION_PARAM ** session_parameters_ptr)
{
SESSION_PARAM *prm, *session_params = NULL;
int prm_index, tmp;
assert (session_parameters_ptr != NULL);
*session_parameters_ptr = NULL;
if (ptr == NULL)
{
return NULL;
}
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
session_params = sysprm_alloc_session_parameters ();
if (session_params == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SESSION_PARAM));
goto error;
}
for (prm_index = 0; prm_index < NUM_SESSION_PRM; prm_index++)
{
int flag;
prm = &session_params[prm_index];
ptr = or_unpack_int (ptr, &tmp);
prm->prm_id = (PARAM_ID) tmp;
ptr = or_unpack_int (ptr, &flag);
prm->flag = (unsigned int) flag;
ptr = or_unpack_int (ptr, &prm->datatype);
ptr = sysprm_unpack_sysprm_value (ptr, &prm->value, (SYSPRM_DATATYPE) prm->datatype);
if (ptr == NULL)
{
/* error unpacking value */
goto error;
}
sysprm_update_session_prm_flag_allocated (prm);
}
*session_parameters_ptr = session_params;
return ptr;
error:
/* clean up */
sysprm_free_session_parameters (&session_params);
return NULL;
}
/*
* sysprm_pack_assign_values () - packs a list of SYSPRM_ASSIGN_VALUEs.
*
* return : pointer after the packed list.
* ptr (in) : pointer to position where the list should be packed.
* assign_values (in) : list of sysprm_assign_values.
*/
char *
sysprm_pack_assign_values (char *ptr, const SYSPRM_ASSIGN_VALUE * assign_values)
{
char *old_ptr = ptr;
int count;
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
/* skip one int -> size of assign_values */
ptr += OR_INT_SIZE;
for (count = 0; assign_values != NULL; assign_values = assign_values->next, count++)
{
ptr = or_pack_int (ptr, assign_values->prm_id);
ptr = sysprm_pack_sysprm_value (ptr, assign_values->value, GET_PRM (assign_values->prm_id)->datatype);
}
OR_PUT_INT (old_ptr, count);
return ptr;
}
/*
* sysprm_packed_assign_values_length () - size of packed list of
* sysprm_assing_values.
*
* return : size of packed list of sysprm_assing_values.
* assign_values (in) : list of sysprm_assing_values.
* offset (in) : offset to pointer where assign values will be packed.
*/
int
sysprm_packed_assign_values_length (const SYSPRM_ASSIGN_VALUE * assign_values, int offset)
{
int size = 0;
size += OR_INT_SIZE; /* size of assign_values list */
for (; assign_values != NULL; assign_values = assign_values->next)
{
size += OR_INT_SIZE; /* prm_id */
size +=
sysprm_packed_sysprm_value_length (assign_values->value, GET_PRM (assign_values->prm_id)->datatype,
size + offset);
}
return size;
}
/*
* sysprm_unpack_assign_values () - Unpacks a list of sysprm_assign_values.
*
* return : pointer after unpacking sysprm_assing_values.
* ptr (in) : pointer to the position where
* sysprm_assing_values are packed.
* assign_values_ptr (out) : pointer to the unpacked list of
* sysprm_assing_values.
*/
char *
sysprm_unpack_assign_values (char *ptr, SYSPRM_ASSIGN_VALUE ** assign_values_ptr)
{
SYSPRM_ASSIGN_VALUE *assign_values = NULL, *last_assign_val = NULL;
SYSPRM_ASSIGN_VALUE *assign_val = NULL;
int i = 0, count = 0, tmp;
assert (assign_values_ptr != NULL);
*assign_values_ptr = NULL;
if (ptr == NULL)
{
return NULL;
}
ASSERT_ALIGN (ptr, INT_ALIGNMENT);
ptr = or_unpack_int (ptr, &count);
if (count <= 0)
{
return ptr;
}
for (i = 0; i < count; i++)
{
assign_val = (SYSPRM_ASSIGN_VALUE *) malloc (sizeof (SYSPRM_ASSIGN_VALUE));
if (assign_val == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, sizeof (SYSPRM_ASSIGN_VALUE));
goto error;
}
ptr = or_unpack_int (ptr, &tmp);
assign_val->prm_id = (PARAM_ID) tmp;
ptr = sysprm_unpack_sysprm_value (ptr, &assign_val->value, GET_PRM (assign_val->prm_id)->datatype);
if (ptr == NULL)
{
free_and_init (assign_val);
goto error;
}
assign_val->next = NULL;
if (assign_values != NULL)
{
last_assign_val->next = assign_val;
last_assign_val = assign_val;
}
else
{
assign_values = last_assign_val = assign_val;
}
}
*assign_values_ptr = assign_values;
return ptr;
error:
sysprm_free_assign_values (&assign_values);
return NULL;
}
/*
* sysprm_free_assign_values () - free a list of sysprm_assign_values.
*
* return : void
* assign_values_ptr (in/out) : pointer to list to free.
*/
void
sysprm_free_assign_values (SYSPRM_ASSIGN_VALUE ** assign_values_ptr)
{
SYSPRM_ASSIGN_VALUE *assignment = NULL, *save_next = NULL;
if (assign_values_ptr == NULL || *assign_values_ptr == NULL)
{
return;
}
assignment = *assign_values_ptr;
while (assignment != NULL)
{
save_next = assignment->next;
sysprm_clear_sysprm_value (&assignment->value, GET_PRM (assignment->prm_id)->datatype);
free_and_init (assignment);
assignment = save_next;
}
*assign_values_ptr = NULL;
}
#if defined (SERVER_MODE)
/*
* update_session_state_from_sys_params () - Updates the session state members
* from session system parameters
*
* return : void
* thread_p (in) : thread entry
* session_params (in) : pointer to session parameters vector
*
*/
static void
update_session_state_from_sys_params (THREAD_ENTRY * thread_p, SESSION_PARAM * session_params)
{
TZ_REGION *session_tz_region;
session_tz_region = session_get_session_tz_region (thread_p);
if (session_tz_region != NULL)
{
#ifndef NDEBUG
int i;
for (i = 0; i < NUM_SESSION_PRM; i++)
{
if (session_params[i].prm_id == PRM_ID_TIMEZONE)
{
assert (prm_Def_session_idx[PRM_ID_TIMEZONE] == i);
break;
}
}
if (i >= NUM_SESSION_PRM)
{
assert (prm_Def_session_idx[PRM_ID_TIMEZONE] == -1);
}
#endif
if (prm_Def_session_idx[PRM_ID_TIMEZONE] >= 0)
{
SESSION_PARAM *ssession_prm = &(session_params[prm_Def_session_idx[PRM_ID_TIMEZONE]]);
assert (ssession_prm->prm_id == PRM_ID_TIMEZONE);
tz_str_to_region (ssession_prm->value.str, strlen (ssession_prm->value.str), session_tz_region);
}
}
}
/*
* sysprm_session_init_session_parameters () - adds array of session
* parameters to session state and
* connection entry.
*
* return : NO_ERROR or error_code
* session_parameters_ptr (in/out) : array of session parameters sent by
* client while registering to server
* found_session_parameters (out) : true if session parameters were found in
* session state, false otherwise
*
* NOTE: If the session state already has session parameters, the client must
* have reconnected. The values stored in session state will be used
* instead of the values sent by client (this way the client recovers
* the session parameters changed before disconnecting).
*/
int
sysprm_session_init_session_parameters (SESSION_PARAM ** session_parameters_ptr, int *found_session_parameters)
{
THREAD_ENTRY *thread_p = thread_get_thread_entry_info ();
int error_code = NO_ERROR;
SESSION_PARAM *session_params = NULL;
assert (found_session_parameters != NULL);
*found_session_parameters = 0;
/* first check if there is a list in session state */
error_code = session_get_session_parameters (thread_p, &session_params);
if (error_code != NO_ERROR)
{
return error_code;
}
if (session_params == NULL)
{
/* set the parameter values sent by client to session state */
session_params = *session_parameters_ptr;
error_code = session_set_session_parameters (thread_p, session_params);
if (error_code != NO_ERROR)
{
return error_code;
}
update_session_state_from_sys_params (thread_p, session_params);
}
else
{
/* use the values stored in session state and free the session parameters received from client */
sysprm_free_session_parameters (session_parameters_ptr);
*session_parameters_ptr = session_params;
*found_session_parameters = 1;
}
return NO_ERROR;
}
/*
* sysprm_set_session_parameter_value - set a new value for the session
* parameter identified by id.
* return : PRM_ERR_NO_ERROR or error_code
* session_parameter (in) : session parameter to set the value of
* value (in) : new value
*/
static SYSPRM_ERR
sysprm_set_session_parameter_value (SESSION_PARAM * session_parameter, SYSPRM_VALUE value)
{
switch (session_parameter->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
session_parameter->value.i = value.i;
break;
case PRM_FLOAT:
session_parameter->value.f = value.f;
break;
case PRM_BOOLEAN:
session_parameter->value.b = value.b;
break;
case PRM_STRING:
if (session_parameter->flag & PRM_ALLOCATED)
{
free_and_init (session_parameter->value.str);
PRM_CLEAR_BIT (PRM_ALLOCATED, session_parameter->flag);
}
session_parameter->value.str = value.str;
if (session_parameter->value.str != NULL)
{
PRM_SET_BIT (PRM_ALLOCATED, session_parameter->flag);
}
break;
case PRM_INTEGER_LIST:
if (session_parameter->flag & PRM_ALLOCATED)
{
free_and_init (session_parameter->value.integer_list);
PRM_CLEAR_BIT (PRM_ALLOCATED, session_parameter->flag);
}
session_parameter->value.integer_list = value.integer_list;
if (session_parameter->value.integer_list != NULL)
{
PRM_SET_BIT (PRM_ALLOCATED, session_parameter->flag);
}
break;
case PRM_BIGINT:
session_parameter->value.bi = value.bi;
break;
}
return PRM_ERR_NO_ERROR;
}
/*
* sysprm_set_session_parameter_default - set session parameter value to default
*
* return : PRM_ERR_NO_ERROR or SYSPRM_ERR error code
* session_parameter(in) : session parameter
* prm_id(in) : parameter id
*/
static SYSPRM_ERR
sysprm_set_session_parameter_default (SESSION_PARAM * session_parameter, PARAM_ID prm_id)
{
SYSPRM_PARAM *prm = GET_PRM (prm_id);
switch (session_parameter->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
session_parameter->value.i = PRM_GET_INT (prm->default_value);
break;
case PRM_FLOAT:
session_parameter->value.f = PRM_GET_FLOAT (prm->default_value);
break;
case PRM_BOOLEAN:
session_parameter->value.b = PRM_GET_BOOL (prm->default_value);
break;
case PRM_BIGINT:
session_parameter->value.bi = PRM_GET_BIGINT (prm->default_value);
break;
case PRM_STRING:
{
if (session_parameter->flag & PRM_ALLOCATED)
{
free_and_init (session_parameter->value.str);
PRM_CLEAR_BIT (PRM_ALLOCATED, session_parameter->flag);
}
session_parameter->value.str = PRM_GET_STRING (prm->default_value);
break;
}
case PRM_INTEGER_LIST:
{
if (session_parameter->flag & PRM_ALLOCATED)
{
free_and_init (session_parameter->value.integer_list);
PRM_CLEAR_BIT (PRM_ALLOCATED, session_parameter->flag);
}
session_parameter->value.integer_list = PRM_GET_INTEGER_LIST (prm->default_value);
break;
}
}
return PRM_ERR_NO_ERROR;
}
#endif /* SERVER_MODE */
/*
* sysprm_compare_values () - compare two system parameter values
*
* return : comparison result (0 - equal, otherwise - different).
* first_value (in) : pointer to first value
* second_value (in) : pointer to second value
* val_type (in) : datatype for values (make sure the values that are
* compared have the same datatype)
*/
static int
sysprm_compare_values (SYSPRM_PARAM * prm)
{
switch (prm->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
return (PRM_GET_INT (prm->value) != PRM_GET_INT (prm->default_value));
case PRM_BOOLEAN:
return (PRM_GET_BOOL (prm->value) != PRM_GET_BOOL (prm->default_value));
case PRM_FLOAT:
return (PRM_GET_FLOAT (prm->value) != PRM_GET_FLOAT (prm->default_value));
case PRM_STRING:
{
char *first_str = PRM_GET_STRING (prm->value);
char *second_str = PRM_GET_STRING (prm->default_value);
if (first_str == NULL && second_str == NULL)
{
/* both values are null, return equal */
return 0;
}
if (first_str == NULL || second_str == NULL)
{
/* only one is null, return different */
return 1;
}
return intl_mbs_casecmp (first_str, second_str);
}
case PRM_BIGINT:
return (PRM_GET_BIGINT (prm->value) != PRM_GET_BIGINT (prm->default_value));
case PRM_INTEGER_LIST:
{
int i;
int *first_int_list = PRM_GET_INTEGER_LIST (prm->value);
int *second_int_list = PRM_GET_INTEGER_LIST (prm->default_value);
if (first_int_list == NULL && second_int_list == NULL)
{
/* both values are null, return equal */
return 0;
}
if (second_int_list == NULL || second_int_list == NULL)
{
/* only one value is null, return different */
return 1;
}
if (first_int_list[0] != second_int_list[0])
{
/* different size for integer lists, return different */
return 1;
}
for (i = 1; i <= second_int_list[0]; i++)
{
if (first_int_list[i] != second_int_list[i])
{
/* found a different integer, return different */
return 0;
}
}
/* all integers are equal, return equal */
return 1;
}
default:
assert (0);
break;
}
return 0;
}
/*
* sysprm_set_sysprm_value_from_parameter () - set the value of sysprm_value
* from a system parameter.
*
* return : void.
* prm_value (in) : sysprm_value.
* prm (in) : system parameter.
*/
static void
sysprm_set_sysprm_value_from_parameter (SYSPRM_VALUE * prm_value, SYSPRM_PARAM * prm)
{
size_t size;
assert (&prm->value.v != prm_value);
switch (prm->datatype)
{
case PRM_INTEGER:
case PRM_KEYWORD:
prm_value->i = PRM_GET_INT (prm->value);
break;
case PRM_FLOAT:
prm_value->f = PRM_GET_FLOAT (prm->value);
break;
case PRM_BOOLEAN:
prm_value->b = PRM_GET_BOOL (prm->value);
break;
case PRM_BIGINT:
prm_value->bi = PRM_GET_BIGINT (prm->value);
break;
case PRM_STRING:
{
char *str = PRM_GET_STRING (prm->value);
char *old_str;
if (str != NULL)
{
old_str = prm_value->str;
prm_value->str = strdup (str);
if (prm_value->str == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1,
(size_t) (strlen (PRM_GET_STRING (prm->value)) + 1));
prm_value->str = old_str;
}
else
{
free (old_str);
}
}
else
{
prm_value->str = NULL;
}
}
break;
case PRM_INTEGER_LIST:
{
int *integer_list = PRM_GET_INTEGER_LIST (prm->value);
int *old_list;
if (integer_list != NULL)
{
old_list = prm_value->integer_list;
size = (integer_list[0] + 1) * sizeof (int);
prm_value->integer_list = (int *) malloc (size);
if (prm_value->integer_list == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size);
prm_value->integer_list = old_list;
}
else
{
memcpy (prm_value->integer_list, integer_list, size);
free (old_list);
}
}
else
{
prm_value->integer_list = NULL;
}
break;
}
case PRM_NO_TYPE:
break;
default:
assert_release (0);
break;
}
}
#if defined (CS_MODE)
/*
* sysprm_update_client_session_parameters () - update the session parameters
* stored on client from array of
* session parameters
*
* return : void
* session_parameters (in) : array of session parameters
*/
void
sysprm_update_client_session_parameters (SESSION_PARAM * session_parameters)
{
int i;
if (session_parameters == NULL)
{
/* nothing to do */
return;
}
for (i = 0; i < NUM_SESSION_PRM; i++)
{
/* update value */
sysprm_set_value (GET_PRM (session_parameters[i].prm_id), session_parameters[i].value, true, true);
}
}
#endif /* CS_MODE */
/*
* sysprm_print_assign_values () - print list of sysprm_assign_values.
*
* return : size of printed string.
* prm_values (in) : list of values that need printing.
* buffer (in) : print destination.
* length (in) : maximum allowed size for printed string.
*/
int
sysprm_print_assign_values (SYSPRM_ASSIGN_VALUE * prm_values, char *buffer, int length)
{
int n = 0;
char *ptr = buffer;
if (length == 0)
{
/* don't print anything */
return 0;
}
for (; prm_values != NULL; prm_values = prm_values->next)
{
n = sysprm_print_sysprm_value (prm_values->prm_id, prm_values->value, ptr, length, PRM_PRINT_NAME);
ptr += n;
length -= n;
if (prm_values->next)
{
*ptr++ = ';';
*ptr++ = ' ';
length -= 2;
}
assert (length > 0);
}
*ptr = '\0';
return (int) (ptr - buffer);
}
#if !defined (SERVER_MODE)
/*
* sysprm_print_parameters_for_qry_string () - print parameters for query
* string
*
* return : Printed string of system parameters. Only parameters marked with
* both PRM_FOR_QRY_STRING and PRM_DIFFERENT flags are printed.
*/
char *
sysprm_print_parameters_for_qry_string (void)
{
int i, n, len = LINE_MAX;
char buf[LINE_MAX];
char *ptr = NULL, *q = NULL;
int size;
memset (buf, 0, LINE_MAX);
ptr = buf;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (PRM_PRINT_QRY_STRING (i))
{
n = prm_print (GET_PRM (i), ptr, len, PRM_PRINT_ID, PRM_PRINT_CURR_VAL);
ptr += n;
len -= n;
*ptr++ = ';';
len--;
assert (len > 0);
}
}
*ptr = '\0';
/* TODO:
* If we pass the buffer and its size as arguments,
* we can reduce the cost of allocating new memory and copying it here.
*/
/* verify the length of the printed parameters does not exceed LINE_MAX */
assert (len > 0);
size = (LINE_MAX - len) * sizeof (char);
if (size == 0)
{
return NULL;
}
q = (char *) malloc (size + 1);
if (q == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size + 1);
return NULL;
}
memcpy (q, buf, size + 1);
return q;
}
/*
* sysprm_print_parameters_for_ha_repl () - print parameters for HA
* replication
*
* return : Printed string of system parameters which should be reproduced
* in HA log applier context before HA replication
*/
char *
sysprm_print_parameters_for_ha_repl (void)
{
int i, n, len = LINE_MAX;
char buf[LINE_MAX];
char *ptr = NULL, *q = NULL;
size_t size;
memset (buf, 0, LINE_MAX);
ptr = buf;
for (i = 0; i < MAX_SYSTEM_PARAMS; i++)
{
if (!PRM_IS_FOR_HA_CONTEXT (GET_PRM (i)))
{
continue;
}
if (i == PRM_ID_INTL_COLLATION || i == PRM_ID_INTL_DATE_LANG || i == PRM_ID_INTL_NUMBER_LANG)
{
char *val = prm_get_string_value ((PARAM_ID) i);
if (val == NULL)
{
continue;
}
if (i == PRM_ID_INTL_COLLATION)
{
if (strcasecmp (val, lang_get_collation_name (LANG_GET_BINARY_COLLATION (LANG_SYS_CODESET))) == 0)
{
continue;
}
}
else
{
if (strcasecmp (val, lang_get_Lang_name ()) == 0)
{
continue;
}
}
}
else if (!PRM_IS_DIFFERENT (GET_PRM (i)))
{
continue;
}
n = prm_print (GET_PRM (i), ptr, len, PRM_PRINT_NAME, PRM_PRINT_CURR_VAL);
ptr += n;
len -= n;
*ptr++ = ';';
len--;
assert (len > 0);
}
*ptr = '\0';
/* verify the length of the printed parameters does not exceed LINE_MAX */
assert (len > 0);
size = (LINE_MAX - len) * sizeof (char);
if (size == 0)
{
return NULL;
}
q = (char *) malloc (size + 1);
if (q == NULL)
{
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_OUT_OF_VIRTUAL_MEMORY, 1, size + 1);
return NULL;
}
memcpy (q, buf, size + 1);
return q;
}
/*
* sysprm_init_intl_param () -
*
* return:
*/
int
sysprm_init_intl_param (void)
{
SYSPRM_PARAM *prm_date_lang = GET_PRM (PRM_ID_INTL_DATE_LANG);
SYSPRM_PARAM *prm_number_lang = GET_PRM (PRM_ID_INTL_NUMBER_LANG);
SYSPRM_PARAM *prm_intl_collation = GET_PRM (PRM_ID_INTL_COLLATION);
SYSPRM_PARAM *prm_timezone = GET_PRM (PRM_ID_TIMEZONE);
int error = NO_ERROR;
/* intl system parameters are session based and depend on system language; The language is read from DB (and client
* from server), after the system parameters module was initialized and default values read from configuration file.
* This function avoids to override any value already read from config. If no values are set from config, then this
* function sets the values according to the default language. On client (CAS), we set the client copy of the value,
* and also the cached session parameter value (which is the default starting value, when the existing CAS serves
* another session) is intialized. */
if (!PRM_IS_SET (prm_date_lang))
{
prm_set (prm_date_lang, lang_get_Lang_name (), true);
#if defined (CS_MODE)
sysprm_update_cached_session_param_val (PRM_ID_INTL_DATE_LANG);
#endif
}
if (!PRM_IS_SET (prm_number_lang))
{
prm_set (prm_number_lang, lang_get_Lang_name (), true);
#if defined (CS_MODE)
sysprm_update_cached_session_param_val (PRM_ID_INTL_NUMBER_LANG);
#endif
}
if (!PRM_IS_SET (prm_intl_collation))
{
prm_set (prm_intl_collation, lang_get_collation_name (LANG_GET_BINARY_COLLATION (LANG_SYS_CODESET)), true);
#if defined (CS_MODE)
sysprm_update_cached_session_param_val (PRM_ID_INTL_COLLATION);
#endif
}
if (!PRM_IS_SET (prm_timezone))
{
prm_set (prm_timezone, prm_get_string_value (PRM_ID_SERVER_TIMEZONE), true);
#if defined (CS_MODE)
sysprm_update_cached_session_param_val (PRM_ID_TIMEZONE);
#endif
}
return error;
}
#endif /* !SERVER_MODE */
/*
* sysprm_set_error () - sets an error for system parameter errors
*
* return : error code
* rc (in) : SYSPRM_ERR error
* data (in) : data to be printed with error
*/
int
sysprm_set_error (SYSPRM_ERR rc, const char *data)
{
int error;
/* first check if error was already set */
error = er_errid ();
if (error != NO_ERROR)
{
/* already set */
return error;
}
if (rc != PRM_ERR_NO_ERROR)
{
switch (rc)
{
case PRM_ERR_UNKNOWN_PARAM:
case PRM_ERR_BAD_VALUE:
case PRM_ERR_BAD_STRING:
case PRM_ERR_BAD_RANGE:
if (data)
{
error = ER_PRM_BAD_VALUE;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 1, data);
}
else
{
error = ER_PRM_BAD_VALUE_NO_DATA;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0);
}
break;
case PRM_ERR_CANNOT_CHANGE:
case PRM_ERR_NOT_FOR_CLIENT:
case PRM_ERR_NOT_FOR_SERVER:
if (data)
{
error = ER_PRM_CANNOT_CHANGE;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 1, data);
}
else
{
error = ER_PRM_CANNOT_CHANGE_NO_DATA;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0);
}
break;
case PRM_ERR_NOT_SOLE_TRAN:
error = ER_NOT_SOLE_TRAN;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0);
break;
case PRM_ERR_COMM_ERR:
error = ER_NET_SERVER_COMM_ERROR;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 1, "db_set_system_parameters");
break;
case PRM_ERR_NO_MEM_FOR_PRM:
default:
error = ER_GENERIC_ERROR;
er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0);
break;
}
}
return error;
}
/*
* sysprm_get_session_parameters_count () - get the count of session
* parameters
* return : count
*/
int
sysprm_get_session_parameters_count (void)
{
return NUM_SESSION_PRM;
}
#if defined (CS_MODE)
/*
* sysprm_update_cached_session_param_val () - updates value of a cached
* session parameter
* prm_id (in) : cached session system paramater id to update
*
* Note : cached session parameters (global cached_session_parameters) are
* default value copies of the system parameters which can be changed
* in a session context; this should be used only during init process
* to alter the default initial value of system parameter for session.
*/
static void
sysprm_update_cached_session_param_val (const PARAM_ID prm_id)
{
SESSION_PARAM *cached_session_prm;
SYSPRM_PARAM *sys_prm = GET_PRM (prm_id);
assert (NUM_SESSION_PRM > 0);
#ifndef NDEBUG
int i;
for (i = 0; i < NUM_SESSION_PRM; i++)
{
if (cached_session_parameters[i].prm_id == prm_id)
{
assert (prm_Def_session_idx[prm_id] == i);
break;
}
}
if (i >= NUM_SESSION_PRM)
{
assert (prm_Def_session_idx[prm_id] == -1);
}
#endif
if (prm_Def_session_idx[prm_id] >= 0)
{
cached_session_prm = &cached_session_parameters[prm_Def_session_idx[prm_id]];
assert (cached_session_prm->prm_id == prm_id);
cached_session_prm->flag = sys_prm->dynamic_flag;
sysprm_set_sysprm_value_from_parameter (&cached_session_prm->value, sys_prm);
sysprm_update_session_prm_flag_allocated (cached_session_prm);
}
}
#endif /* CS_MODE */
#if defined (WINDOWS)
/*
* prm_get_integer_value () - get the value of a parameter of type integer
*
* return : value
* prm_id (in) : parameter id
*
* NOTE: keywords are stored as integers
*/
int
prm_get_integer_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_INTEGER (GET_PRM (prm_id)) || PRM_IS_KEYWORD (GET_PRM (prm_id)));
return PRM_GET_INT_P (prm_get_value (prm_id));
}
/*
* prm_get_bool_value () - get the value of a parameter of type bool
*
* return : value
* prm_id (in) : parameter id
*/
bool
prm_get_bool_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_BOOLEAN (GET_PRM (prm_id)));
return PRM_GET_BOOL_P (prm_get_value (prm_id));
}
/*
* prm_get_float_value () - get the value of a parameter of type float
*
* return : value
* prm_id (in) : parameter id
*/
float
prm_get_float_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_FLOAT (GET_PRM (prm_id)));
return PRM_GET_FLOAT_P (prm_get_value (prm_id));
}
/*
* prm_get_string_value () - get the value of a parameter of type string
*
* return : value
* prm_id (in) : parameter id
*/
char *
prm_get_string_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_STRING (GET_PRM (prm_id)));
return PRM_GET_STRING_P (prm_get_value (prm_id));
}
/*
* prm_get_integer_list_value () - get the value of a parameter of type
* integer list
*
* return : value
* prm_id (in) : parameter id
*/
int *
prm_get_integer_list_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_INTEGER_LIST (GET_PRM (prm_id)));
return PRM_GET_INTEGER_LIST_P (prm_get_value (prm_id));
}
/*
* prm_get_bigint_value () - get the value of a parameter of type size
*
* return : value
* prm_id (in) : parameter id
*/
UINT64
prm_get_bigint_value (PARAM_ID prm_id)
{
assert (prm_id <= PRM_LAST_ID);
assert (PRM_IS_BIGINT (GET_PRM (prm_id)));
return PRM_GET_BIGINT_P (prm_get_value (prm_id));
}
#endif /* window */