//******************************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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.
//
// @@@ END COPYRIGHT @@@
//**********************************************************************/
#ifndef DEFAULTCONSTANTS_H
#define DEFAULTCONSTANTS_H

#undef DEFAULT_CHARSET
/* -*-C++-*-
 *****************************************************************************
 *
 * File:         DefaultConstants.h
 * Description:  Default attribute enum and keyword enum.
 *
 * Created:      7/11/1996
 * Language:     C++
 *
 *
 *
 ***************************************************************************** */

// This enum contains defaults used in Trafodion.
// To add a default, include it in this enum and in DefaultDefaults of
// sqlcomp/NADefaults.cpp.
//
// To change the value at run-time, do either:
// a) Insert the ATTRIBUTE name of the default along with its ATTR_VALUE
//    into the SQL DEFAULTS table.
//    This change take effect the next time you start a compiler session.
// b) Issue a CONTROL QUERY DEFAULT statement.
//    This change takes effect immediately.
//    (Note that some SET statements, e.g. SET CATALOG/SCHEMA,
//    also take effect immediately *if* you are in dynamic compilation mode,
//    e.g., if you are in SQLCI.)

// ***************************************************************************
// ***************************************************************************
// NOTE: DO NOT make this enum non-contiguous.
// Valid attributes must begin at zero and there must be no holes.
// The algorithm to read defaults from the defaults table requires this.
// You must always add a default default in NADefaults.cpp, otherwise
// the code will fail in an assertion.
// ***************************************************************************
// ***************************************************************************


enum DefaultConstants
{
  __INVALID_DEFAULT_ATTRIBUTE = -1,	// negative; not in DefaultDefaults
  ALLOW_INCOMPATIBLE_ASSIGNMENT = 0,
  ALLOW_INCOMPATIBLE_COMPARISON,
  ARKCMP_FAKE_HW,
  AUTOMATIC_RECOMPILATION,

  // -------------------------------------------------------------------------
  // defaults for big memory operators (HJ, HGB, SORT)
  // -------------------------------------------------------------------------
  BMO_MEMORY_USAGE_PERCENT,
  PHY_MEM_CONTINGENCY_MB,
  BMO_CITIZENSHIP_FACTOR,
  // -------------------------------------------------------------------------
  // Costs for common fundamental primitive operations.
  // -------------------------------------------------------------------------

  // Set this to TRUE to enable display cost_detail in explain
  // to support the calibration reports. Default is FALSE.

  EXPLAIN_DETAIL_COST_FOR_CALIBRATION,

  // Used in CostPrimitives::cpuCostForCompare().
  CPUCOST_COMPARE_COMPLEX_DATA_TYPE_OVERHEAD,
  CPUCOST_COMPARE_COMPLEX_DATA_TYPE_PER_BYTE,
  CPUCOST_COMPARE_SIMPLE_DATA_TYPE,

  // Used in both CostPrimitives::cpuCostForCopyRow() and cpuCostForCopySet().
  CPUCOST_COPY_ROW_OVERHEAD,
  CPUCOST_COPY_ROW_PER_BYTE,

  // Used in Exchange Costing
  CPUCOST_EXCHANGE_COST_PER_BYTE,
  CPUCOST_EXCHANGE_INTERNODE_COST_PER_BYTE,
  CPUCOST_EXCHANGE_REMOTENODE_COST_PER_BYTE,

  // Used in CostPrimitives::cpuCostForCopySet().
  CPUCOST_COPY_SIMPLE_DATA_TYPE,

  // Used in CostPrimitives::cpuCostForEvalArithExpr().
  CPUCOST_EVAL_ARITH_OP,

  // Used in CostPrimitives::cpuCostForEvalFunc().
  CPUCOST_EVAL_FUNC_DEFAULT,

  // Used in CostPrimitives::cpuCostForEvalPred().
  CPUCOST_EVAL_SIMPLE_PREDICATE,

  // Used in CostPrimitives::cpuCostForLikeCompare().
  CPUCOST_LIKE_COMPARE_OVERHEAD,
  CPUCOST_LIKE_COMPARE_PER_BYTE,

  // -------------------------------------------------------------------------
  // Used in CostPrimitives::cpuCostForHash().
  //
  // Hash(k1,k2) is done by Hash(k1) + Hash(k2) where the + may be overloaded.
  // Here, CPUCOST_HASH_PER_KEY records the cost for the +. If we have 5 keys
  // to hash, this cost (CPUCOST_HASH_PER_KEY * 5), include the file modulus
  // operation to give the final hash value. The cost of the Hash function
  // itself is assumed to be dependent on the byte count of each key. The per
  // byte cost for that is given as CPUCOST_HASH_PER_BYTE.
  //
  // Assume the overloaded + is half way between simple and complex arithmetic
  // operation. Hash() operates a simple arithmetic on each byte of the key.
  // -------------------------------------------------------------------------
  CPUCOST_HASH_PER_KEY,
  CPUCOST_HASH_PER_BYTE,

  // Used in CostPrimitives::cpuCostForEncode()
  CPUCOST_ENCODE_PER_BYTE,

  // -----------------------------------------------------------------------
  // The following 11 were (semi-blindly) converted from #define's so
  // that calibration would (hopefully) go easier --> i.e., change a
  // value in the Defaults table instead of recompiling.
  //
  // If any of these need additional commenting, the original author
  // (or just someone who understands their use) should do so.
  //
  // The file alongside each reference tells where the original #define
  // existed; although it's currently commented out, many have associated
  // comments (which I (Martin) can't decide if they're vital or not).
  // -----------------------------------------------------------------------
  CPUCOST_ESP_INITIALIZATION,           // Cost.h
  CPUCOST_LOCK_ROW,                     // Cost.h
  CPUCOST_PREDICATE_COMPARISON,         // Cost.h
  CPUCOST_SUBSET_OPEN,                  // Cost.h
  CPUCOST_SUBSET_OPEN_AFTER_FIRST,      // Cost.h
  DP2_MESSAGE_BUFFER_SIZE,              // Cost.h
  LOCAL_MESSAGE_BUFFER_SIZE,			// Cost.h
  OS_MESSAGE_BUFFER_SIZE,               // Cost.h

  // The CPU overhead paid by a data request to DP2:
  CPUCOST_DATARQST_OVHD,

  // There are four types of cache in DP2:
  DP2_CACHE_512_BLOCKS,
  DP2_CACHE_1024_BLOCKS,
  DP2_CACHE_2048_BLOCKS,
  DP2_CACHE_4096_BLOCKS,



  // Constants needed to estimate the cost of communication
  // between DP2 and exeInDp2:
  CPUCOST_SCAN_KEY_LENGTH,  // key encoding/decoding
  CPUCOST_SCAN_OVH_PER_KB, // catch all overhead per KB
  CPUCOST_SCAN_OVH_PER_ROW, // catch all overhead per row
  // Catch all for cost  of transferring data from disk to dp2:
  CPUCOST_SCAN_DSK_TO_DP2_PER_KB,
  CPUCOST_SCAN_DSK_TO_DP2_PER_SEEK,


  // Used in estimating blocks to read per scan access:
  COST_PROBE_DENSITY_THRESHOLD,

  // Cost factors used in IO:
  // The read ahead penalty is a fraction of the KB reads.
  // As the scan selectivity increases, reading the same
  // ammount of data costs more because the scan is busier
  // putting together buffers to send which makes it miss
  // prefetch cycles. Thus it reads more data. The best case
  // (i.e. the case when the scan reads less data) happens when
  // the scan is not selecting any rows. The worst case is when
  // the scan selects all the rows. the prefetch penalty determines
  // how much more data the scan needs to read (as a fraction of the
  // absolute data) because of prefetch misses. The absolute data
  // is the blocks that need to be read in a key sequenced table
  // in a particular single subset access.
  // This number must be between 0 and 1.
  IO_TRANSFER_COST_PREFETCH_MISSES_FRACTION,

  DEF_CHUNK_SIZE,
  DEF_CPU_ARCHITECTURE,
  DEF_DISCS_ON_CLUSTER,
  DEF_INSTRUCTIONS_SECOND,
  DEF_LOCAL_CLUSTER_NUMBER,
  DEF_LOCAL_SMP_NODE_NUMBER,
  DEF_MAX_HISTORY_ROWS,//will be obeseleted
  DEF_NUM_BM_CHUNKS,
  DEF_NUM_NODES_IN_ACTIVE_CLUSTERS,
  DEF_NUM_SMP_CPUS,
  DEF_PAGE_SIZE,
  DEF_PHYSICAL_MEMORY_AVAILABLE,
  DEF_TOTAL_MEMORY_AVAILABLE,
  DEF_VIRTUAL_MEMORY_AVAILABLE,

  // to generate detailed executor statitics
  DETAILED_STATISTICS,


  // Used in Exchange costing.
  DP2_END_OF_BUFFER_HEADER_SIZE,
  DP2_EXCHANGE_REQUEST_SIZE,
  DP2_MAX_READ_PER_ACCESS_IN_KB,
  DP2_MESSAGE_HEADER_SIZE,
  DP2_MESSAGE_HEADER_SIZE_BYTES,
  DP2_MINIMUM_FILE_SIZE_FOR_SEEK_IN_BLOCKS,

  MAX_DEPTH_TO_CHECK_FOR_CYCLIC_PLAN,

  MAX_LONG_VARCHAR_DEFAULT_SIZE,
  MIN_LONG_VARCHAR_DEFAULT_SIZE,
  MAX_LONG_WVARCHAR_DEFAULT_SIZE,
  MIN_LONG_WVARCHAR_DEFAULT_SIZE,

  // --------------------------------------------------------------------------
  // Basic Executor Operations.
  // --------------------------------------------------------------------------
  EX_OP_ALLOCATE_BUFFER_POOL,
  EX_OP_ALLOCATE_BUFFER,
  EX_OP_ALLOCATE_TUPLE,
  EX_OP_COPY_ATP,


  FIND_COMMON_SUBEXPRS_IN_OR,

  FLOAT_ESP_RANDOM_NUM_SEED,

  // Special handling for forcing Bushy CQS, for shapes generated by the wizard
  FORCE_BUSHY_CQS,

  // CQD to enable or disable explain
  GENERATE_EXPLAIN,

  // --------------------------------------------------------------------------
  // Operator defaults used by the Generator:
  // buffer size, number of buffers, and queue sizes (down, up).
  // --------------------------------------------------------------------------
  // DDL.
  GEN_DDL_BUFFER_SIZE,
  GEN_DDL_NUM_BUFFERS,
  GEN_DDL_SIZE_DOWN,
  GEN_DDL_SIZE_UP,
  // Describe.
  GEN_DESC_BUFFER_SIZE,
  GEN_DESC_NUM_BUFFERS,
  GEN_DESC_SIZE_DOWN,
  GEN_DESC_SIZE_UP,
  // DP2 Insert.
  GEN_DP2I_BUFFER_SIZE,
  GEN_DP2I_NUM_BUFFERS,
  GEN_DP2I_SIZE_DOWN,
  GEN_DP2I_SIZE_UP,
  // DP2 Subset Operator.
  GEN_DPSO_BUFFER_SIZE,
  GEN_DPSO_SIZE_DOWN,
  GEN_DPSO_SIZE_UP,
  // DP2 Unique Operator.
  GEN_DPUO_NUM_BUFFERS,
  // Hash GroupBy.
  GEN_HGBY_BUFFER_SIZE,
  GEN_HGBY_NUM_BUFFERS,
  GEN_HGBY_SIZE_DOWN,
  GEN_HGBY_SIZE_UP,
  // Hash Join.
  GEN_HSHJ_BUFFER_SIZE,
  GEN_HSHJ_NUM_BUFFERS,
  GEN_HSHJ_SIZE_DOWN,
  GEN_HSHJ_SIZE_UP,
  // Memory pressure Threshold
  GEN_MEM_PRESSURE_THRESHOLD,
  // Merge Join.
  GEN_MJ_BUFFER_SIZE,
  GEN_MJ_NUM_BUFFERS,
  GEN_MJ_SIZE_DOWN,
  GEN_MJ_SIZE_UP,
  // Ordered NLJ.
  GEN_ONLJ_BUFFER_SIZE,
  GEN_ONLJ_NUM_BUFFERS,
  GEN_ONLJ_SIZE_DOWN,
  GEN_ONLJ_SIZE_UP,
  // Partition Access.
  GEN_PA_BUFFER_SIZE,
  GEN_PA_NUM_BUFFERS,
   // Sample node
  GEN_SAMPLE_SIZE_DOWN,
  GEN_SAMPLE_SIZE_UP,
  // Scan.
  // Sequence Functions
  GEN_SEQFUNC_BUFFER_SIZE,
  GEN_SEQFUNC_NUM_BUFFERS,
  GEN_SEQFUNC_SIZE_DOWN,
  GEN_SEQFUNC_SIZE_UP,
  // Sort GroupBy.
  GEN_SGBY_BUFFER_SIZE,
  GEN_SGBY_NUM_BUFFERS,
  GEN_SGBY_SIZE_DOWN,
  GEN_SGBY_SIZE_UP,
  // Send Bottom.
  GEN_SNDB_NUM_BUFFERS,
  GEN_SNDB_SIZE_DOWN,
  GEN_SNDB_SIZE_UP,
  // Send Top.
  GEN_SNDT_BUFFER_SIZE_DOWN,
  GEN_SNDT_BUFFER_SIZE_UP,
  GEN_SNDT_NUM_BUFFERS,
  GEN_SNDT_RESTRICT_SEND_BUFFERS,
  GEN_SNDT_SIZE_DOWN,
  GEN_SNDT_SIZE_UP,
  // Sort.
  GEN_SORT_MAX_BUFFER_SIZE,
  GEN_SORT_NUM_BUFFERS,
  GEN_SORT_SIZE_DOWN,
  GEN_SORT_SIZE_UP,
  // Split Bottom.
  // Split Top.
  GEN_SPLT_SIZE_UP,
  // Tuple Flow.
  GEN_TFLO_BUFFER_SIZE,
  GEN_TFLO_NUM_BUFFERS,
  GEN_TFLO_SIZE_DOWN,
  GEN_TFLO_SIZE_UP,

   // Set Table Timeout.
  GEN_TIMEOUT_BUFFER_SIZE,
  GEN_TIMEOUT_NUM_BUFFERS,
  GEN_TIMEOUT_SIZE_DOWN,
  GEN_TIMEOUT_SIZE_UP,


  // Transaction.
  GEN_TRAN_BUFFER_SIZE,
  GEN_TRAN_NUM_BUFFERS,
  GEN_TRAN_SIZE_DOWN,
  GEN_TRAN_SIZE_UP,
  // Transpose.
  GEN_TRSP_BUFFER_SIZE,
  GEN_TRSP_NUM_BUFFERS,
  GEN_TRSP_SIZE_DOWN,
  GEN_TRSP_SIZE_UP,
  // Tuple.
  GEN_TUPL_BUFFER_SIZE,
  GEN_TUPL_NUM_BUFFERS,
  GEN_TUPL_SIZE_DOWN,
  GEN_TUPL_SIZE_UP,
  // Union.
  GEN_UN_BUFFER_SIZE,
  GEN_UN_NUM_BUFFERS,
  GEN_UN_SIZE_DOWN,
  GEN_UN_SIZE_UP,
  // Compound Stmt.
  GEN_CS_BUFFER_SIZE,
  GEN_CS_NUM_BUFFERS,
  GEN_CS_SIZE_DOWN,
  GEN_CS_SIZE_UP,
  // User-Defined Routines
  GEN_UDR_BUFFER_SIZE,
  GEN_UDR_NUM_BUFFERS,
  GEN_UDR_SIZE_DOWN,
  GEN_UDR_SIZE_UP,

  // -------------------------------------------------------------------------
  // Parameters used by the executor when dynamically resizing queues
  // (are stored in each TDB that is generated)
  // -------------------------------------------------------------------------
  DYN_QUEUE_RESIZE_FACTOR,
  DYN_QUEUE_RESIZE_INIT_DOWN,
  DYN_QUEUE_RESIZE_INIT_UP,
  DYN_QUEUE_RESIZE_LIMIT,
  DYN_QUEUE_RESIZE_OVERRIDE,
  // -------------------------------------------------------------------------
  // Enable 'ON' or disable 'OFF' considering hash joins of any form
  // -------------------------------------------------------------------------
  HASH_JOINS,

  // -------------------------------------------------------------------------
  // For HashGroupBy.
  // -------------------------------------------------------------------------
  HGB_BITMUX,
  HGB_CPUCOST_INITIALIZE,
  HGB_DP2_MEMORY_LIMIT,        // Memory limit if operator executes in DP2.
  HGB_GROUPING_FACTOR_FOR_SPILLED_CLUSTERS,

  // -------------------------------------------------------------------------
  // Histogram fudge factors
  //
  // Since these values are all pretty arbitrary (having to do with
  // default statistics -- i.e., the case when no statistics exist, or the
  // predicate, for whatever reason, cannot be reasonably evaluated by
  // histograms), we might as well let the user fiddle with them.
  //
  // The default selectivity values are used in
  //
  //   /optimizer/ColStatDesc.cpp
  //   /optimizer/ItemExpr.cpp
  //   /optimizer/OptItemExpr.cpp
  //
  // The "no stats" rowcount & uec values are used in
  //
  //   /ustat/hs_read.cpp
  //
  // These are the values we use if no stats information exists for a
  // particular table.
  //
  // NO_STATS_ROWCOUNT_MINIMUM is the absolutely fewest number of rows
  // we'll put into a "fake histogram" -- i.e., in the case where our file
  // label says the histogram has only 5 rows, we say fooey, for the
  // purposes of generating a reasonable plan, there are at least
  // ROWCOUNT_MINIMUM rows.
  //
  // ROWCOUNT_REQUIRING_STATS determines whether we fire off WARNING
  // 6008 or not -- so if the user really doesn't want to update stats, he
  // can set this to an extremely large value in order to never get a
  // "6008".  (6008 is a friendly reminder to the user that better plans
  // come from tables whose statistics have been updated.)
  //
  // HIST_SAME_TABLE_PRED_REDUCTION is a kludge to account for cases where
  // we apply multiple predicates to the same table, and multiplying the
  // resulting reductions together results in too large of an overall
  // reduction.  This reduction is applied to every reduction after the
  // first for a table that has 2+ predicates applied to it.  This value
  // should be between 1 and 2 in general; initial value is 1.4 .
  //
  // HIST_MAX_NUMBER_OF_INTERVALS is a way to limit the number of
  // histogram intervals that are synthesized & maintained in the
  // histogram code.  This upper bound is used to reduce compile-time for
  // queries involving large numbers of joins, where the user has updated
  // statistics to have more intervals than s/he actually needs.  In
  // general, this number should be set high (100 or so); in practice, we may
  // want to play with this value to see the trade-offs between compile time &
  // estimation accuracy.
  // -------------------------------------------------------------------------
  HIST_DEFAULT_SEL_FOR_BOOLEAN,          // col_a is true | false
  HIST_DEFAULT_SEL_FOR_IS_NULL,          // col_a is null | unknown
  HIST_DEFAULT_SEL_FOR_JOIN_EQUAL,       // col_a = col_b
  HIST_DEFAULT_SEL_FOR_JOIN_RANGE,       // col_a < col_b
  HIST_DEFAULT_SEL_FOR_LIKE_NO_WILDCARD, // col_a like "blah"
  HIST_DEFAULT_SEL_FOR_LIKE_WILDCARD,    // col_a like "%blah"
  HIST_DEFAULT_SEL_FOR_PRED_EQUAL,       // col_a = 5
  HIST_DEFAULT_SEL_FOR_PRED_RANGE,       // col_a < 5

  HIST_MAX_NUMBER_OF_INTERVALS,          // 1 ... 1000 (1000 by default: i.e., no limit)
  HIST_MC_STATS_NEEDED,                  //T: use MC histograms and issue 6007 message

  HIST_NO_STATS_ROWCOUNT,
  HIST_NO_STATS_UEC,
  HIST_NO_STATS_UEC_CHAR1,
  // This default is used to define the sample size for the quick stats
  HIST_ON_DEMAND_STATS_SIZE,
  HIST_REMOVE_TRAILING_BLANKS,

  HIST_ROWCOUNT_REQUIRING_STATS,


  //jbbsubset that specifies the root of the tree
  //for which we want to check the histograms
  HIST_ROOT_NODE,

  // -------------------------------------------------------------------------
  // For Histogram Intervals reduction and histogram prefetching
  // -------------------------------------------------------------------------
  // HIST_BASE_REDUCTION controls if reduction of the number of hist ints is
  // ON / OFF for histograms read from disk using ustat method FetchStatistics.
  // Valid values are 'ON' / 'OFF'.
  // HIST_INTERMEDIATE_REDUCTION controls if reduction of the number of hist ints
  // is ON / OFF for histograms generated after relational operations like join etc.
  // Valid values are 'ON' / 'OFF'.
  // HIST_BASE_REDUCTION_FUDGE_FACTOR controls the fudge factor used in the comparison
  // when deciding to merge two adjacent hist ints for reducing the number of hist ints
  // in histograms read from disk using ustat method FetchStatistics.
  // Valid values are positive ratios like 0.12 representing 12%
  // HIST_INTERMEDIATE_REDUCTION_FUDGE_FACTOR controls the fudge factor used in the comparison
  // when deciding to merge two adjacent hist ints for reducing the number of hist ints
  // in histograms generated after relational operations like join etc.
  // Valid values are positive ratios like 0.12 representing 12%
  // HIST_CONSTANT_ALPHA is used in the comparison of two adjacent intervals.
  // Valid values are numbers between 0 - 1.
  // HIST_PREFETCH controls if histograms are prefetched by ustat method FetchStatistics.
  // Valid values are 'ON' / 'OFF'
  DYNAMIC_HISTOGRAM_COMPRESSION,
  HIST_INTERMEDIATE_REDUCTION,
  HIST_BASE_REDUCTION_FUDGE_FACTOR,
  HIST_INTERMEDIATE_REDUCTION_FUDGE_FACTOR,
  HIST_CONSTANT_ALPHA,
  HIST_PREFETCH,


  // --------------------------------------------------------------------------
  // For Update Statistics.
  // --------------------------------------------------------------------------
  USTAT_ADD_SALTED_KEY_PREFIXES_FOR_MC,  // Generate MCs for primary key prefixes as well as full key of
                                         //   salted table when ON EVERY KEY or ON EVERY COLUMN is specified.
  USTAT_ATTEMPT_ESP_PARALLELISM,  // use parallel plans for reading columns to form histograms
  USTAT_AUTOMATIC_LOGGING,     // If ON, gives same semantics as UPDATE STATISTICS LOG SYSTEM
  USTAT_COMPACT_VARCHARS,      // For internal sort, store only the actual # chars used in each value
  USTAT_DELETE_NO_ROLLBACK,    // If ON, use DELETE WITH NO ROLLBACK in incremental stats when updating sample table
  USTAT_ESTIMATE_HBASE_ROW_COUNT,  // If ON, estimate row count of HBase table instead of count(*), subject
                                   //     to USTAT_MIN_ESTIMATE_FOR_ROWCOUNT setting)
  USTAT_FORCE_TEMP,            // Force temporary table to be used
  USTAT_HBASE_SAMPLE_RETURN_INTERVAL, // When sampling in HBase, adjust sampling rate to return once
                                      //   on average once per this many rows
  USTAT_JIT_LOGGING,           // Use just-in-time logging when error occurs
                               //   avoid deadlock for concurrent Update Stats on same table
  USTAT_LOG,                   // Generate USTAT log and write to file specified
  USTAT_MIN_ESTIMATE_FOR_ROWCOUNT, // Minimum estimated rowcount to be accepted
                                   // as actual rowcount
  USTAT_MIN_ROWCOUNT_FOR_SAMPLE,     // Smallest table for which sampling used
  USTAT_MIN_ROWCOUNT_FOR_LOW_SAMPLE, // Smallest table for which lowest sampling rate used
  USTAT_MODIFY_DEFAULT_UEC,    // Modify the default UEC
  USTAT_MULTI_COLUMN_LIMIT,    // Limit on number of columns in a multi-column histogram
  USTAT_UEC_HI_RATIO,          // When the estimated UEC/ROWCOUNT ratio is
  USTAT_UEC_LOW_RATIO,         // between HI_RATIO and LOW_RATIO, we will avoid
                               // calling xValue() to find the root value.
  USTAT_USE_BACKING_SAMPLE,    // Use Hive persistent sample table instead of reading from full table. @ZXtemp
  USTAT_USE_SLIDING_SAMPLE_RATIO,  // Vary sampling rate according to table size
  USTAT_AUTOMATION_INTERVAL,   // set the ustat automation interval
  USTAT_MAX_READ_AGE_IN_MIN,   // criterion for 'recently read histogram'
  USTAT_COLLECT_FILE_STATS,       // do we collect file stats
  USTAT_USE_IS_WHEN_NO_STATS,  // use IS when no histograms exist for the column
  USTAT_CQDS_ALLOWED_FOR_SPAWNED_COMPILERS, // list of CQDs that can be pushed to seconday compilers
                                            // CQDs are delimited by ","
  USTAT_MIN_CHAR_UEC_FOR_IS,     // minimum UEC for char type to use internal sort
  USTAT_MIN_DEC_BIN_UEC_FOR_IS,  // minimum UEC for binary types to use internal sort
  USTAT_YOULL_LIKELY_BE_SORRY, // minimum row count where explicit NO SAMPLE clause is required


  // -------------------------------------------------------------------------
  // For Hybrid Hash Operators (shared by HashJoin and HashGroupBy).
  // -------------------------------------------------------------------------
  HH_OP_ALLOCATE_HASH_TABLE,
  HH_OP_PROBE_HASH_TABLE,      // ref head of hash chain given a hash value
  HH_OP_INSERT_ROW_TO_CHAIN,   // insert a row in a hash chain
  HH_OP_HASHED_ROW_OVERHEAD,   // no of bytes to store hash value and pointer

  // -------------------------------------------------------------------------
  // For HashJoin.
  // -------------------------------------------------------------------------
  HJ_CPUCOST_INITIALIZE,
  HJ_INITIAL_BUCKETS_PER_CLUSTER,
  HJ_SCAN_TO_NJ_PROBE_SPEED_RATIO,
  HJ_TYPE,

  // -------------------------------------------------------------------------
  // If on, indicates that conversion from/to sql/application-hostvars are to
  // be done using the CAST rules, even if the datatypes are incompatible.
  // For example, conversion from DATE column to CHAR user hostvar is not
  // allowed according to ANSI as these are incompatible datatypes even
  // though this conversion could be done using cast function.
  // This default will enable all conversions that are allowed if a CAST
  // function is used.
  // -------------------------------------------------------------------------
  IMPLICIT_HOSTVAR_CONVERSION,

  //--------------------------------------------------------------------------
  // Index elimination level allows us to control the heuristics that will be
  // applied to reduce improbable indexes early. Default can take three values:
  // MINIMUM - No or little heuristic is applied
  // MEDIUM - Probably useless indexes are eliminated and no histogram statistics
  //									required
  // MAXIMUM - Histogram statistics required and aggressive approach to reducing
  // indexes. Indexes tagged for single subset access will not be used with MDAM
  //--------------------------------------------------------------------------
  INDEX_ELIMINATION_LEVEL,

  // -------------------------------------------------------------------------
  // Enable 'ON' or disable 'OFF' the heuristic to limit # of merge joins
  // -------------------------------------------------------------------------
  MERGE_JOIN_CONTROL,
  // -------------------------------------------------------------------------
  // Enable 'ON' or disable 'OFF' considering merge joins of any form
  // -------------------------------------------------------------------------
  MERGE_JOINS,

  //--------------------------------------------------------------------------
  // Enable 'ON' or disable 'OFF' for min-max optimization
  //--------------------------------------------------------------------------
  MIN_MAX_OPTIMIZATION,

  //--------------------------------------------------------------------------
  // Minimum ESP parallelism. If the user does not specifies this value then
  // the number of segments will be used as CQD value. If user sets this value
  // it should be integer >=1 AND <= totalNumberOfCPUs
  //--------------------------------------------------------------------------
  MINIMUM_ESP_PARALLELISM,

  // -------------------------------------------------------------------------
  // For MergeJoin.
  // -------------------------------------------------------------------------
  MJ_CPUCOST_INITIALIZE,
  MJ_CPUCOST_INSERT_ROW_TO_LIST,
  MJ_CPUCOST_REWIND_LIST,
  MJ_CPUCOST_GET_NEXT_ROW_FROM_LIST,
  MJ_CPUCOST_CLEAR_LIST,
  MJ_LIST_NODE_SIZE,

  // -------------------------------------------------------------------------
  // Factors used in converting resource usage to Elapsed Time (ET)
  // (Resource-to-time multipliers are environment dependant)
  // -------------------------------------------------------------------------
  MSCF_ET_CPU,
  MSCF_ET_NUM_IO_SEEKS,        // count of Random I/Os
  MSCF_ET_IO_TRANSFER,         // KB transfer
  MSCF_ET_NUM_LOCAL_MSGS,
  MSCF_ET_LOCAL_MSG_TRANSFER,  // KB transfer
  MSCF_ET_NUM_REMOTE_MSGS,
  MSCF_ET_REMOTE_MSG_TRANSFER, // KB transfer

  // turn on and off olt query optimizations. Default is ON.
  OLT_QUERY_OPT,

  // -----------------------------------------------------------------------
  // Factors used for recalibrating the resource-to-time multipliers
  // -----------------------------------------------------------------------
  // Reference calibration machine environment defaults
  REFERENCE_CPU_FREQUENCY, // In MHZ
  REFERENCE_IO_SEQ_READ_RATE, // In KB/Second
  REFERENCE_IO_SEEK_TIME, // In milliseconds
  REFERENCE_MSG_LOCAL_RATE, // In Mb/Second
  REFERENCE_MSG_LOCAL_TIME, // In seconds
  REFERENCE_MSG_REMOTE_RATE, // In Mb/Second
  REFERENCE_MSG_REMOTE_TIME, // In seconds
  REFERENCE_CODE, // ['DEBUG' | 'RELEASE']

  // End user machine environment defaults
  TARGET_CPU_FREQUENCY, // In MHZ
  TARGET_IO_SEQ_READ_RATE, // In KB/Second
  TARGET_IO_SEEK_TIME, // In milliseconds
  TARGET_MSG_LOCAL_RATE, // In Mb/Second
  TARGET_MSG_LOCAL_TIME, // In seconds
  TARGET_MSG_REMOTE_RATE, // In Mb/Second
  TARGET_MSG_REMOTE_TIME, // In seconds
  TARGET_CODE, // ['DEBUG' | 'RELEASE']

  // Default to account for speed up (or slowdown) of runnin in release
  // or default
  MSCF_DEBUG_TO_RELEASE_MULTIPLIER,

  // -------------------------------------------------------------------------
  // Factors used for estimating overlappability of I/O and messaging used
  // in the calculation for overlapped addition
  // -------------------------------------------------------------------------
  MSCF_OV_IO,
  MSCF_OV_MSG,


  // -----------------------------------------------------------------------
  // Big memory usage
  // -----------------------------------------------------------------------
  MEMORY_UNITS_SIZE,
  NUMBER_OF_USERS,

  // -------------------------------------------------------------------------
  // For MergeUnion.
  // -------------------------------------------------------------------------
  MU_CPUCOST_INITIALIZE,          // Per probe initialization cost.
  MU_INITIAL_BUFFER_COUNT,        // Initial no of buffers allocated.
  MU_INITIAL_BUFFER_SIZE,         // Size of executor buffer it is using.

  // -------------------------------------------------------------------------
  //++ MV OZ
  // For Materialized Views:
  MV_AGE,			  // timestamp default is 0
  MV_ALLOW_SELECT_SYSTEM_ADDED_COLUMNS, // ON/OFF default is OFF
  MV_AS_ROW_TRIGGER,		  // YES/NO default is NO
  MV_ENABLE_INTERNAL_REFRESH_SHOWPLAN, // internal only - enable showplan for IR
  MV_LOG_PUSH_DOWN_DP2_INSERT, // push down mv logging tp dp2 for insert
  MV_LOG_PUSH_DOWN_DP2_DELETE, // push down mv logging tp dp2 for delete
  MV_LOG_PUSH_DOWN_DP2_UPDATE, // push down mv logging tp dp2 for update


  MV_REFRESH_MAX_PARALLELISM,	  // unsigned integer - initially set to 1.
  MV_REFRESH_MAX_PIPELINING,	  // unsigned integer - initially set to 1.
  MV_TRACE_INCONSISTENCY,	  // YES/NO default is NO

  // For MV Query Rewrite:
  // -------------------------------------------------------------------------
  MVQR_ALL_JBBS_IN_QD,            // add JBBs to query descriptor even if criteria
                                  //   not met. Used for testing descriptors.
  MVQR_ENABLE_LOGGING,            // Use log files. Temporary until Log4CXX.
  MVQR_LOG_QUERY_DESCRIPTORS,     // whether or not to log query descriptors
  MVQR_PARAMETERIZE_EQ_PRED,      // whether or not to parameterize equality 
  MVQR_PRIVATE_QMS_INIT,          // how to init private qms: SMD, XML, NONE (default)
  MVQR_PUBLISH_TO,                // PRIVATE(default) qms, PUBLIC qms, BOTH
  MVQR_REWRITE_CANDIDATES,        // list of MVs by MV qualified names
  MVQR_REWRITE_ENABLED_OPTION,    // establishes default for MVs that don't state
                                  //   whether or not they are enabled for rewrite
  MVQR_REWRITE_LEVEL,             // 0 to 4, default 0 (disabled)
  MVQR_REWRITE_SINGLE_TABLE_QUERIES, // whether or not to rewrite queries on single tables
  MVQR_USE_EXTRA_HUB_TABLES,      // Use extra-hub tables in descriptors.
  MVQR_USE_RI_FOR_EXTRA_HUB_TABLES, // Use RI constraints for extra-hub tables in descriptors.
  MVQR_MAX_EXPR_SIZE,             // maximum size of an expr for which mvqr can produce a descriptor
  MVQR_MAX_EXPR_DEPTH,            // maximum depth of an expr for which mvqr can produce a descriptor
  MVQR_WORKLOAD_ANALYSIS_MV_NAME, // Name of MV descriptor to be generated from next query.

  // -------------------------------------------------------------------------
  // Enable 'ON' or disable 'OFF' considering nested joins
  // except when they are the only choice.
  // -------------------------------------------------------------------------
  NESTED_JOINS,
  KEYLESS_NESTED_JOINS,
  NESTED_JOINS_PLAN0, // turn off PLAN0 of nested joins


  // -------------------------------------------------------------------------
  // For NestedJoin.
  // -------------------------------------------------------------------------
  NJ_CPUCOST_INITIALIZE,          // Per probe initialization cost.
  NJ_CPUCOST_PASS_ROW,          // Cost for passing a row to right child
  NJ_INITIAL_BUFFER_COUNT,        // Initial no of buffers allocated.
  NJ_INITIAL_BUFFER_SIZE,         // Size of executor buffer it is using.


  // Calibration Constants for NESTEDJOIN INORDER created 11/21/00

  NJ_INC_UPTOLIMIT,	  // cost for seeks upto the blocks in innertable
  NJ_INC_AFTERLIMIT,	  // cost for seeks once the probes > innerblocks
  NJ_INC_MOVEROWS,	  // cost for moving the final result rows
  NJ_MAX_SEEK_DISTANCE,	  // Average distance for a seek

  // ----------------------------------------------------------------------
  // If enabled (ON), indicates that query processing is to be done
  // following ODBC rules. This affects (currently) type synthesis of
  // params and some unicode support.
  // ----------------------------------------------------------------------
  ODBC_PROCESS,

  // -------------------------------------------------------------------------
  // Tells what the optimization goal is (for instance, first row, last row).
  // -------------------------------------------------------------------------
  OPTIMIZATION_GOAL,

  // -----------------------------------------------------------------------
  // monitor the compile time using time.h system calls and print the result
  // summary
  // -----------------------------------------------------------------------
  COMPILE_TIME_MONITOR,
  COMPILE_TIME_MONITOR_OUTPUT_FILE,

  //------------------------------------------------------------------------
  // If CACHE_HISTOGRAMS is 'ON', we cache histograms that have been read by a
  // previous statement compilation and use the histogram for a compilation
  // on the same table
  //------------------------------------------------------------------------
  CACHE_HISTOGRAMS,
  CACHE_HISTOGRAMS_CHECK_FOR_LEAKS,
  CACHE_HISTOGRAMS_IN_KB,
  CACHE_HISTOGRAMS_MONITOR_HIST_DETAIL,
  CACHE_HISTOGRAMS_MONITOR_MEM_DETAIL,
  CACHE_HISTOGRAMS_MONITOR_OUTPUT_FILE,
  CACHE_HISTOGRAMS_TRACE_OUTPUT_FILE,

  //------------------------------------------------------------------------
  //NATable Cache Size in MBs
  //------------------------------------------------------------------------
  METADATA_CACHE_SIZE,

  //NARoutine and NARoutineDesc cache size in MBs
  ROUTINE_CACHE_SIZE,

  // -----------------------------------------------------------------------
  // Specifies if simple vector cost has to be reused to compute cost objects
  // -----------------------------------------------------------------------
  REUSE_BASIC_COST,

  // -----------------------------------------------------------------------
  // These are switches and variables to use for compiler debugging
  // -----------------------------------------------------------------------
  COMP_BOOL_1,
  COMP_BOOL_2,
  COMP_BOOL_3,
  COMP_BOOL_4,
  COMP_BOOL_5,
  COMP_BOOL_7,
  COMP_BOOL_8,
  COMP_BOOL_9,

  COMP_INT_2,
  COMP_INT_3,
  COMP_INT_4,
  COMP_INT_5,

  COMP_FLOAT_1,
  COMP_FLOAT_2,
  COMP_FLOAT_3,

  COMP_STRING_1,
  COMP_STRING_2,
  //------------------------------------------------------------------------
  // Do the query analysis phase, building JBBs, TCG, QGs, and ASM.
  //------------------------------------------------------------------------
  QUERY_ANALYSIS,

  //------------------------------------------------------------------------
  // Dump the data flow graph into a file and invokes DOTTY to view graph.
  //------------------------------------------------------------------------
  DISPLAY_DATA_FLOW_GRAPH,

  //------------------------------------------------------------------------
  // Specifies the threshold at MultiJoin Rewrite step occur.
  //------------------------------------------------------------------------
  MULTI_JOIN_THRESHOLD,

  //------------------------------------------------------------------------
  // Force the user specified join order to enumerate among orders enumrated
  //------------------------------------------------------------------------
  MULTI_JOIN_CONSIDER_INITIAL_JOIN_ORDER,

  MULTI_JOIN_PROBE_HASH_TABLE,

  //------------------------------------------------------------------------
  // Specifies if ASM cache should be available.
  //------------------------------------------------------------------------
  ASM_ALLOWED,

  //------------------------------------------------------------------------
  // Specifies if pre-computation of statistics should be done in ASM
  //------------------------------------------------------------------------
  ASM_PRECOMPUTE,

  // -------------------------------------------------------------------------
  // Specifies the level of optimization desired.
  // 0 = minimum level, 1 = intermediate level, 2 = maximum level (default)
  // constant1 and constant2 are used by optimization level 1.
  // -------------------------------------------------------------------------
  OPTIMIZATION_LEVEL,
  OPTIMIZATION_LEVEL_1_CONSTANT_1,
  OPTIMIZATION_LEVEL_1_CONSTANT_2,
  OPTIMIZATION_LEVEL_1_THRESHOLD,
  OPTIMIZATION_LEVEL_1_SAFETY_NET,
  OPTIMIZATION_LEVEL_1_SAFETY_NET_MULTIPLE,

  // Specifies the type of graceful termination to use
  OPTIMIZER_GRACEFUL_TERMINATION,
  
  // -------------------------------------------------------------------------
  // Temp. optimizer heuristics. Used for testing only, The heuristic is
  // renamed after proven worthy
  // -------------------------------------------------------------------------
  OPTIMIZER_HEURISTIC_1,
  OPTIMIZER_HEURISTIC_2,
  OPTIMIZER_HEURISTIC_3,
  // #4 & #5 are heuristics for elimination of plans with relatively
  // high data flow wrt other logical plans in the group
  OPTIMIZER_HEURISTIC_4,
  OPTIMIZER_HEURISTIC_5,

  // Optimizer heuristics to prevent unnecessary parallelism
  // for "small" non-partitioned groups
  PARALLEL_HEURISTIC_1,
  PARALLEL_HEURISTIC_2,
  PARALLEL_HEURISTIC_3,
  PARALLEL_HEURISTIC_4,

  // if this one is "ON" it overwrites optimizer heuristics 4 & 5 as "ON"
  // if its "OFF" then the defaults of the two heuristics will be used
  DATA_FLOW_OPTIMIZATION,

  PARTITIONING_SCHEME_SHARING,

  // -------------------------------------------------------------------------
  // Optimization heuristic to control # of cross-products in the plan
  // -------------------------------------------------------------------------
  CROSS_PRODUCT_CONTROL,

  // -------------------------------------------------------------------------
  // Force the join order given by the user
  // -------------------------------------------------------------------------
  JOIN_ORDER_BY_USER,

  // -------------------------------------------------------------------------
  // Optimization heuristic to control # of nested joins considered in a plan
  // -------------------------------------------------------------------------
  NESTED_JOIN_CONTROL,

  // -------------------------------------------------------------------------
  // Allow nested join for cross products
  // -------------------------------------------------------------------------
  NESTED_JOIN_FOR_CROSS_PRODUCTS,

  // -------------------------------------------------------------------------
  // Threshold above which OCR is enabled for nested joins
  // -------------------------------------------------------------------------
  NESTED_JOINS_OCR_MAXOPEN_THRESHOLD,

  // -------------------------------------------------------------------------
  // Controls the number of blocks read per DP2 access
  // -------------------------------------------------------------------------
  NUM_OF_BLOCKS_PER_ACCESS,

  // -------------------------------------------------------------------------
  // Controls the complexity threshold to skip pass1 optimization
  // -------------------------------------------------------------------------
  SHORT_OPTIMIZATION_PASS_THRESHOLD,

  // -------------------------------------------------------------------------
  // Controls whether plan stealing is allowed or not
  // -------------------------------------------------------------------------
  PLAN_STEALING,

  // -------------------------------------------------------------------------
  // Use info from right child to require order on left child of NJ
  // -------------------------------------------------------------------------
  PREFERRED_PROBING_ORDER_FOR_NESTED_JOIN,

  // -------------------------------------------------------------------------
  // Heuristic to reduce the number of double exchanges (OFF enables it)
  // -------------------------------------------------------------------------
  TRY_DP2_REPARTITION_ALWAYS,

  // -------------------------------------------------------------------------
  // Specifies the max. number of tasks the optimizer is allowed to do.
  // If exceeded and beyond the first pass, aggressive pruning will
  // finalize the optimization process.
  // -------------------------------------------------------------------------
  OPTIMIZATION_TASKS_LIMIT,

  // -----------------------------------------------------------------------
  // Disables/enables pruning.
  // -----------------------------------------------------------------------
  OPTIMIZER_PRUNING,
  OPTIMIZER_PRUNING_FIX_1,

  // -----------------------------------------------------------------------
  // Optimizer pruning heuristics.
  // -----------------------------------------------------------------------
  OPH_EXITHJCRCONTCHILOOP,
  OPH_EXITMJCRCONTCHILOOP,
  OPH_EXITNJCRCONTCHILOOP,
  OPH_PRUNING_COMPLEXITY_THRESHOLD,
  OPH_PRUNING_PASS2_COST_LIMIT,
  OPH_PRUNE_WHEN_COST_LIMIT_EXCEEDED,
  OPH_USE_NICE_CONTEXT,
  OPH_REDUCE_COST_LIMIT_FROM_CANDIDATES,
  OPH_REDUCE_COST_LIMIT_FROM_PASS1_SOLUTION,
  OPH_REUSE_FAILED_PLAN,
  OPH_REUSE_OPERATOR_COST,
  OPH_SKIP_OGT_FOR_SHARED_GC_FAILED_CL,
  OPH_USE_CACHED_ELAPSED_TIME,
  OPH_USE_CANDIDATE_PLANS,
  OPH_USE_COMPARE_COST_THRESHOLD,
  OPH_USE_CONSERVATIVE_COST_LIMIT,
  OPH_USE_ENFORCER_PLAN_PROMOTION,
  OPH_USE_FAILED_PLAN_COST,
  OPH_USE_ORDERED_MJ_PRED,
  OPH_USE_PWS_FLAG_FOR_CONTEXT,


  // -----------------------------------------------------------------------
  // PCODE
  // -----------------------------------------------------------------------
  PCODE_OPT_LEVEL,

  //--------------------------------------------------------------------------
  // The group by reduction for pushing a partial group by past the
  //  right side of the TSJ must be at least this much.  If 0.0, then
  //  pushing it will always be tried.
  //--------------------------------------------------------------------------
  REDUCTION_TO_PUSH_GB_PAST_TSJ,

  // ------------------------------------------------------------------------
  // Ordered Hash Join
  // ------------------------------------------------------------------------
  ORDERED_HASH_JOIN_CONTROL,
  OHJ_BMO_REUSE_SORTED_BMOFACTOR_LIMIT,
  OHJ_BMO_REUSE_SORTED_UECRATIO_UPPERLIMIT,
  OHJ_BMO_REUSE_UNSORTED_UECRATIO_UPPERLIMIT,
  OHJ_VBMOLIMIT,

  //--------------------------------------------------------------------------
  // OR-optimization (using multiple indexes for OR predicates)
  //--------------------------------------------------------------------------
  OR_OPTIMIZATION,

  // -------------------------------------------------------------------------
  // Makes the optimizer issue a warning message with its internal
  // counters
  // -------------------------------------------------------------------------
  OPTIMIZER_PRINT_INTERNAL_COUNTERS,

  // -------------------------------------------------------------------------
  // Makes the optimizer prints costing information.
  // -------------------------------------------------------------------------
  OPTIMIZER_PRINT_COST,

  //--------------------------------------------------------------------------
  // Push down certain operators down dp2 for TPC-C performance.
  // 0 = do not push (default), 1= do push (any nonzero pushes operator)
  //--------------------------------------------------------------------------
  OPTS_PUSH_DOWN_DAM,

  //--------------------------------------------------------------------------
  // Partition Overlay Support (POS) options
  //--------------------------------------------------------------------------
  POS_NUM_OF_PARTNS,

  //--------------------------------------------------------------------------
  // Query Caching options
  //--------------------------------------------------------------------------
  QUERY_CACHE,
  QUERY_CACHE_AVERAGE_PLAN_SIZE,
  QUERY_CACHE_SELECTIVITY_TOLERANCE,
  QUERY_CACHE_MAX_CHAR_LEN,
  QUERY_CACHE_MAX_EXPRS,
  QUERY_CACHE_MAX_VICTIMS,
  QUERY_CACHE_REQUIRED_PREFIX_KEYS,
  QUERY_CACHE_STATEMENT_PINNING,
  QUERY_CACHE_STATISTICS,
  QUERY_CACHE_STATISTICS_FILE,
  QUERY_CACHE_USE_CONVDOIT_FOR_BACKPATCH,


  // -------------------------------------------------------------------------
  // If set to TRUE, this indicates that a select query will not be updated
  // or deleted using an 'upd/del where current of cursor' statement.
  // According to ANSI, all SELECTs could be upd/del by default.
  // The default is FALSE.
  // ------------------------------------------------------------------------
  READONLY_CURSOR,

  // multiplicative factor used to inflate cost of risky operators.
  RISK_PREMIUM_MJ,
  RISK_PREMIUM_NJ,
  RISK_PREMIUM_SERIAL,

  ROBUST_HJ_TO_NJ_FUDGE_FACTOR,
  ROBUST_QUERY_OPTIMIZATION,
  ROBUST_SORTGROUPBY,

  // -------------------------------------------------------------------------
  // For Scratch files
  // -------------------------------------------------------------------------

  SCRATCH_DIRS,
  

  // -------------------------------------------------------------------------
  // For SortGroupBy.
  // -------------------------------------------------------------------------
  SGB_CPUCOST_INITIALIZE,
  SGB_INITIAL_BUFFER_COUNT,
  SGB_INITIAL_BUFFER_SIZE,

  // -------------------------------------------------------------------------
  // For Sort.
  // -------------------------------------------------------------------------
  SORT_CPUCOST_INITIALIZE,        // Per probe initialization cost.
  SORT_QS_FACTOR,                 // Constant factor for Quick Sort.
  SORT_RS_FACTOR,                 // Constant factor for Replacement Sel.
  SORT_IO_BUFFER_SIZE,            // I/O buffer size.
  SORT_EX_BUFFER_SIZE,            // Executor buffer size.
  SORT_TREE_NODE_SIZE,            // Internal node size of Tournament Tree.
  // -------------------------------------------------------------------------
  // For Node Maps
  // -------------------------------------------------------------------------
  FAKE_VOLUME_ASSIGNMENTS, // Force num of DP2 vols = num of partitions? ON/OFF
  FAKE_VOLUME_NUM_VOLUMES,  // Number of partitions per volume

  // -------------------------------------------------------------------------
  // For Exchange and parallel execution
  // -------------------------------------------------------------------------
  ATTEMPT_ASYNCHRONOUS_ACCESS, // Nowait I/O allowed? ON/OFF
  ATTEMPT_ESP_PARALLELISM, // Generate and cost ESP parallelism plans?
                           // ON or OFF or SYSTEM
                           // SYSTEM = optimizer decides, based on whether
                           // operator is a BMO, uses lots of CPU, etc.
  BASE_NUM_PAS_ON_ACTIVE_PARTS, // limit # of PAs to # of active parts?
  MAX_ESPS_PER_CPU_PER_OP, // max number of ESPs per cpu for a given operator
  MAX_ACCESS_NODES_PER_ESP, // max number of access nodes per ESP
  NUMBER_OF_PARTITIONS_DEVIATION, // % deviation allowed for # of parts/ESPs
  NUMBER_OF_ROWS_PARALLEL_THRESHOLD, // # of rows where parallelism is a good idea
  NUM_OF_PARTS_DEVIATION_TYPE2_JOINS, // % deviation allowed for type2 joins
  PARALLEL_ESP_NODEMASK, // nodes to be used for ESPs
  PARALLEL_NUM_ESPS, // max # of ESPs an operator can use
  PARTITION_ACCESS_NODES_PER_ESP, // optimal number of PAs per ESP
  UPDATED_BYTES_PER_ESP,          // ratio of updated bytes/ESPs in updates

  // ------------------------------------------------------------------------
  // For allowing / hiding indexes
  // ------------------------------------------------------------------------
  HIDE_INDEXES,

  // -------------------------------------------------------------------------
  // For Insert/update/delete
  // -------------------------------------------------------------------------
  UPD_ORDERED,                    // require ins/upd/del rows to be ordered
  IUD_NONAUDITED_INDEX_MAINT,     // is index maint. allowed on nonaud. tables?
  INSERT_VSBB,                    // insert VSBB options
  VSBB_TEST_MODE,                 // Bypass heuristics for VSBB selection.
  DISABLE_BUFFERED_INSERTS,       // Use only single row inserts.

  // for IUD operations, this default indicates whether a transaction needs
  // to be rolled back on error(ON), not rolled back(OFF), or let the
  // system decide. See BindRelExpr.cpp and GenPreCode.cpp and look for
  // setRollbackOnError() methods for how this is set.
  //  ROLLBACK_ON_ERROR,   : obsolete

  // -------------------------------------------------------------------------
  // For constraint droppable default option.
  // -------------------------------------------------------------------------
  NOT_NULL_CONSTRAINT_DROPPABLE_OPTION,
  PRIMARY_KEY_CONSTRAINT_DROPPABLE_OPTION,

  CATALOG,
  SCHEMA,

  // --------------------------------------------------------------------------
  // These values are taken from Ganesh Hariharan's document,
  // Mapping the SQL/MP defines and control in SQL/ARK.
  // --------------------------------------------------------------------------
  ISOLATION_LEVEL,
  IF_LOCKED,
  MDAM_CPUCOST_NET_OVH,
  MDAM_CPUCOST_NET_PER_PRED,
  MDAM_SCAN_METHOD,
  //---------------------------------------------------------------------------
  //Used to control agressiveness of executor predicate replication minimization
  ALLOW_INPUT_PRED_REPLICATION_REDUCTION,

  //---------------------------------------------------------------------------
  //Following three defaults were added in conjunction to index elimination project.

  //We calculate the promise of index join using the initial inputEstLogProp.
  //In FileScanRule::nextSubstitute() we need to ensure that context inputEstLogProp
  //cardinality is not less than acceptable error * cardinality of initial
  // estlogprop
  //----------------------------------------------------------------------------
  ACCEPTABLE_INPUTESTLOGPROP_ERROR,

  // if mdamSkips exceeds indexBlocks * selection default then index probably
  // not good for mdam. Look at IndexDesc.cpp for more detail.
  MDAM_SELECTION_DEFAULT,

  //How many blocks do we read ahead for a sequential scan of a file.
  READ_AHEAD_MAX_BLOCKS,

  TABLELOCK,
  TIMEOUT,
  STREAM_TIMEOUT,		// BertBert VV
  UNAVAILABLE_PARTITION,
  //	ACCESS_OPTION,
  //	ACCESS_PATH,
  //	AGGREGATE_METHOD,
  //	GROUP_METHOD,
  //	JOIN_METHOD_HASH,
  //	JOIN_METHOD_MERGE,
  //	JOIN_METHOD_NESTED,
  //	OPEN_PARTITION,
  //	PARALLEL_PLAN,
  //	SEQUENTIAL,
  //	SEQUENTIAL_BLOCKSPLIT,
  //	TRANSACTION_MODE,

  ZIG_ZAG_TREES, // Enable 'ON' or disable 'OFF' considering zig-zag trees
  ZIG_ZAG_TREES_CONTROL, // A heuristic to reduce # of non-promising z-zag nodes

  RECOMPILATION_WARNINGS,

  SHOWCONTROL_SHOW_ALL,
  NAMETYPE,


  NATIONAL_CHARSET,
  TERMINAL_CHARSET,


  //--------------------------------------------------------------------------
  // Enable character set inference for ODBC 2.X.
  // OFF = do not infer (default), ON = do infer
  //--------------------------------------------------------------------------
  INFER_CHARSET,

  // --------------------------------------------------------------------------
  // NSK DEBUG defaults.
  // --------------------------------------------------------------------------
  NSK_DBG,
  NSK_DBG_LOG_FILE,
  //
  NSK_DBG_SHOW_TREE_AFTER_PARSING,
  NSK_DBG_SHOW_TREE_AFTER_BINDING,
  NSK_DBG_SHOW_TREE_AFTER_TRANSFORMATION,
  NSK_DBG_SHOW_TREE_AFTER_NORMALIZATION,
  NSK_DBG_SHOW_TREE_AFTER_ANALYSIS,
  NSK_DBG_SHOW_PASS1_PLAN,
  NSK_DBG_SHOW_PASS2_PLAN,
  NSK_DBG_SHOW_PLAN_LOG,
  NSK_DBG_SHOW_TREE_AFTER_PRE_CODEGEN,
  NSK_DBG_SHOW_TREE_AFTER_CODEGEN,

  //
  NSK_DBG_PRINT_COST,
  NSK_DBG_PRINT_LOG_PROP,
  NSK_DBG_PRINT_PHYS_PROP,
  NSK_DBG_PRINT_CHAR_INPUT,
  NSK_DBG_PRINT_CHAR_OUTPUT,
  NSK_DBG_PRINT_CONSTRAINT,
  NSK_DBG_PRINT_CONTEXT,
  NSK_DBG_PRINT_CONTEXT_POINTER,
  NSK_DBG_PRINT_ITEM_EXPR,
  NSK_DBG_PRINT_TASK,
  NSK_DBG_PRINT_TASK_STACK,

  // -----------------------------------------------------------------------
  // for IUD operations, this default, if set, indicates that the Xn needs
  // to be rolled back on error.
  // -----------------------------------------------------------------------
  UPD_ABORT_ON_ERROR,

  // -------------------------------------------------------------------
  // For certain IUD operations, this default, if set, returns an error
  // and not aborts the transaction. This simulates sql/mp error.
  // -------------------------------------------------------------------
  UPD_PARTIAL_ON_ERROR,

  // -------------------------------------------------------------------
  // this default, if set, indicates that dp2 savepoint will be used
  // and stmt will be rolled back to the start of that savepoint.
  // -------------------------------------------------------------------
  UPD_SAVEPOINT_ON_ERROR,


  // ----------------------------------------------------------------------
  // User-defined routines
  //
  // UDF_METADATA_SCHEMA: Schema containing user metadata tables for
  // UDFs. This setting will not be needed once we support UDF
  // metadata in the SQL catalog.
  //
  // UDR_JAVA_OPTIONS: JVM startup options in the UDR server. Can be
  // OFF, ANYTHING, or a series of JVM options separated by the
  // UDR_JAVA_OPTION_DELIMITER string. The default is OFF.
  //
  // UDR_JAVA_OPTION_DELIMITERS: Characters in this string delimit JVM
  // options. The default is a single space character.
  //
  // ----------------------------------------------------------------------
  UDF_METADATA_SCHEMA,
  UDR_JAVA_OPTIONS,
  UDR_JAVA_OPTION_DELIMITERS,

  FSO_RUN_TESTS,
  FSO_TO_USE,

  OPTIMIZER_SYNTH_FUNC_DEPENDENCIES,

  COMP_BOOL_11,
  COMP_BOOL_12,
  COMP_BOOL_13,
  COMP_BOOL_14,
  COMP_BOOL_15,
  COMP_BOOL_18,
  COMP_BOOL_19,
  COMP_BOOL_20,
  COMP_BOOL_21, // used by generator
  COMP_BOOL_22,
  COMP_BOOL_23,
  COMP_BOOL_24, // used by generator
  COMP_BOOL_25, // used by generator
  COMP_BOOL_27,
  COMP_BOOL_28,
  COMP_BOOL_29,
  COMP_BOOL_30,
  COMP_BOOL_31,
  COMP_BOOL_32,
  COMP_BOOL_33,
  COMP_BOOL_34,
  COMP_BOOL_35,
  COMP_BOOL_36,
  COMP_BOOL_37,
  COMP_BOOL_38,
  COMP_BOOL_39,
  COMP_BOOL_40,
  COMP_BOOL_41,
  COMP_BOOL_42,
  COMP_BOOL_44,
  COMP_BOOL_45,
  COMP_BOOL_46,
  COMP_BOOL_47,
  COMP_BOOL_48,
  COMP_BOOL_49,
  COMP_BOOL_51,
  COMP_BOOL_52,
  COMP_BOOL_53,
  COMP_BOOL_54,
  COMP_BOOL_55,
  COMP_BOOL_56,
  COMP_BOOL_57,
  COMP_BOOL_59,
  COMP_BOOL_60,
  COMP_BOOL_61,
  COMP_BOOL_62,
  COMP_BOOL_63,
  COMP_BOOL_64,
  COMP_BOOL_65,
  COMP_BOOL_66,
  COMP_BOOL_67,
  COMP_BOOL_68,
  COMP_BOOL_69,
  COMP_BOOL_70,
  COMP_BOOL_71,
  COMP_BOOL_72,
  COMP_BOOL_73,
  COMP_BOOL_74,
  COMP_BOOL_75,
  COMP_BOOL_76,
  COMP_BOOL_77,
  COMP_BOOL_78,
  COMP_BOOL_79,
  COMP_BOOL_80,
  COMP_BOOL_81,
  COMP_BOOL_82,
  COMP_BOOL_83,
  COMP_BOOL_84,
  COMP_BOOL_85,
  COMP_BOOL_86,
  COMP_BOOL_87,
  COMP_BOOL_88,
  COMP_BOOL_90,
  COMP_BOOL_91, // used by generator
  COMP_BOOL_92,
  COMP_BOOL_93,
  COMP_BOOL_94,
  COMP_BOOL_95,
  COMP_BOOL_96,
  COMP_BOOL_97,
  COMP_BOOL_98,
  COMP_BOOL_99,

  COMP_INT_0,
  COMP_INT_7,
  COMP_INT_8,
  COMP_INT_9,

  COMP_FLOAT_0,
  COMP_FLOAT_4,
  COMP_FLOAT_5,
  COMP_FLOAT_6,
  COMP_FLOAT_7,
  COMP_FLOAT_8,
  COMP_FLOAT_9,
  COMP_STRING_5,

  COSTING_SHORTCUT_GROUPBY_FIX,

  VARCHAR_PARAM_DEFAULT_SIZE,

  // ----------------------------------------------------------------------
  // If enabled (ON), indicates that query processing is to be done
  // following JDBC rules. This covers all of stuff done for ODBC_PROCESS
  // plus more.
  // ----------------------------------------------------------------------
  JDBC_PROCESS,

  OPTIMIZATION_LEVEL_1_IMMUNITY_LIMIT,
  OPTIMIZATION_LEVEL_1_MJENUM_LIMIT,

  NSK_DBG_MJRULES_TRACKING,

  NEW_MDAM,

  MDAM_COSTING_REWRITE,

  MDAM_SUBSET_FACTOR,

  MDAM_FSO_SIMPLE_RULE,

  // -------------------------------------------------------------------------
  // Makes NO ACTION referential action behave like RESTRICT.
  // -------------------------------------------------------------------------
  REF_CONSTRAINT_NO_ACTION_LIKE_RESTRICT,


  GEN_SORT_MAX_NUM_BUFFERS,
  GEN_SORT_TOPN,

  SORT_ALGO,            // Sort algorithm choice


  // -------------------------------------------------------------------------
  // Specifies what percentage of smaller table in join, should be used as
  // a lower bound for join cardinality
  // -------------------------------------------------------------------------
  HIST_JOIN_CARD_LOWBOUND,

  // allow any/first N in subqueries.
  ALLOW_FIRSTN_IN_SUBQUERIES,

  // ------------------------------------------------------------------------
  // This default will use a new type of an ASSERT, CCMPASSERT as a CMPASSERT
  // when ON, else use that as a DCMPASSERT.
  // -------------------------------------------------------------------------
  USE_CCMPASSERT_AS_CMPASSERT,


  NEW_OPT_DRIVER,
  FORCE_PASS_ONE,
  FORCE_PASS_TWO,
  TRY_PASS_ONE_IF_PASS_TWO_FAILS,
  TEST_PASS_ONE_ASSERT_TASK_NUMBER,
  TEST_PASS_TWO_ASSERT_TASK_NUMBER,
  SHOWWARN_OPT,

  // ------------------------------------------------------------------------
  // This default will dictate which $volume the temporary sample table will
  // be located.
  // ------------------------------------------------------------------------
  HIST_SCRATCH_VOL,

  PRESERVE_MIN_SCALE,

  // -------------------------------------------------------------------------
  // If on, indicates that conversion from sql to application-hostvars are to
  // be done using the CAST rules, even if the datatypes are incompatible.
  // For example, conversion from CHAR column to DATE user hostvar is not
  // allowed according to ANSI as these are incompatible datatypes even
  // though this conversion could be done using cast function.
  // This default will enable all conversions that are allowed as if a CAST
  // function is used.
  // -------------------------------------------------------------------------
  IMPLICIT_DATETIME_INTERVAL_HOSTVAR_CONVERSION,

  //------------------------------------------------------------------------
  // If on, compiler considers generation of a plan that does synchronous
  //  access in reverse order
  //------------------------------------------------------------------------
  ATTEMPT_REVERSE_SYNCHRONOUS_ORDER,

  //--------------------------------------------------------------------------
  // The foll indicates the percentage of the free space on a particular disk
  // after which the scratch overflow code will not use that disk any more.
  // By default this is set at 20%. If the user wants to change this to 0%
  //  then the scratch logic will use all the space on the disk
  //----------------------------------------------------------------------------
  SCRATCH_FREESPACE_THRESHOLD_PERCENT,

  //--------------------------------------------------------------------------
  // rand() function in sql is disabled unless this CQD is turned on
  //--------------------------------------------------------------------------
  ALLOW_RAND_FUNCTION,

  // This defaults control whether we should use MC UEC while computing cardinalities
  // for Join on non-key columns. By default we shall not use those
  //
  HIST_SKIP_MC_FOR_NONKEY_JOIN_COLUMNS,

  //--------------------------------------------------------------------------
  // If set, then view validation(view existence, security checks) at runtime
  // is only done at fixup(open) time instead of on each execution.
  // This is non-ANSI behavior.
  //--------------------------------------------------------------------------
  VALIDATE_VIEWS_AT_OPEN_TIME,

  //10-040621-7139-begin
  INTERACTIVE_ACCESS,
  //10-040621-7139-end

  
  //Support transactions for DDL operations.
  DDL_TRANSACTIONS,
  
  // controls various optimizations, see enum QueryOptimizationOptions.
  QUERY_OPTIMIZATION_OPTIONS,


  // force use of Method-of-Moments UEC estimator in update stats
  USTAT_FORCE_MOM_ESTIMATOR,

  // set the maximum weight for the Shlosser UEC estimator
  USTAT_DSHMAX,

  // turn on and off olt query optimizations. Default is ON.
  EID_SPACE_USAGE_OPT,


  // partition threshold to control partition size when update statistics
  // temporary sample table is created
  HIST_SCRATCH_VOL_THRESHOLD,


  // Allows users to specify SYSKEY value. In other words
  // the system does not generate one.
  OVERRIDE_SYSKEY ,

  //--------------------------------------------------------------------------
  //External sort involves both READ and WRITE operation, where as the DISK
  // IO rate is only for READ. We need to multiply the elapsed time by this
  // factor.
  //--------------------------------------------------------------------------
  SORT_RW_FACTOR,

  HIST_MISSING_STATS_WARNING_LEVEL,

  HIST_DEFAULT_BASE_SEL_FOR_LIKE_WILDCARD,

  DP2_SEQ_READS_WITHOUT_SEEKS,

  DIMENSIONAL_QUERY_OPTIMIZATION,
  // turn post-parser & post-binder query caching ON or OFF
  QUERY_TEMPLATE_CACHE,
  // turn pre-parser query caching ON or OFF
  QUERY_TEXT_CACHE,

  // allows users to specify a limit on the number of nonfatal errors that will be
  // tolerated for a non-atomic statement.
  NOT_ATOMIC_FAILURE_LIMIT,

  // allows user to turn ON/OFF the ROWSET_ROW_COUNT feature.
  ROWSET_ROW_COUNT,


  // POS
  POS,

  // how many maximum groups dp2 hash group-by operator can handle?
  MAX_DP2_HASHBY_GROUPS,

  // HASH_header entries per hash table used in group-by costing
  MAX_HEADER_ENTREIS_PER_HASH_TABLE,

  HGB_MAX_TABLE_SIZE_FOR_CLUSTERS,
  HGB_MEMORY_AVAILABLE_FOR_CLUSTERS,


  //Allows user to specify default SAMPLE limits that should be used during fetchcount
  HIST_DEFAULT_SAMPLE_MIN,
  HIST_DEFAULT_SAMPLE_MAX,
  HIST_DEFAULT_SAMPLE_RATIO,


  // EMS events
  USER_EXPERIENCE_LEVEL,


  // Starting size of Partition Access's parent queues.
  DYN_PA_QUEUE_RESIZE_INIT_DOWN,
  DYN_PA_QUEUE_RESIZE_INIT_UP,

  // if this default is set to ON, then the max precision of a numeric
  // expression(arithmetic, aggregate) is limited to MAX_NUMERIC_PRECISION
  // (= 18). If this is set to OFF, the default value, then the max precision
  // is computed based on the operands and the operation which could make the
  // result a software datatype(BIGNUM). Software datatypes give better
  // precision but degraded performance.
  LIMIT_MAX_NUMERIC_PRECISION,

  CONSTANT_FOLDING,

  QUERY_CACHE_TABLENAME,

  QUERY_CACHE_RUNTIME,

  SKIP_UNAVAILABLE_PARTITION,

  ISOLATION_LEVEL_FOR_UPDATES,

  //HISTOGRAMS: If the UEC for a column is <= HIST_LOW_UEC_THRESHOLD, then
  //the histogram generated will have 1 interval per unique value.
  HIST_LOW_UEC_THRESHOLD,

  DESTROY_ORDER_AFTER_REPARTITIONING,

  MERGE_JOIN_WITH_POSSIBLE_DEADLOCK,

  ALLOW_RANGE_PARTITIONING,


  SORT_MAX_HEAP_SIZE_MB,   //Heap memory for SORT operator in megabytes.


// Optimization to expand any "short" rows found in tables with added columns
  EXPAND_DP2_SHORT_ROWS,

  MVGROUP_AUTOMATIC_CREATION,


  // Allow RequireApproximatelyNPartitions::realize() to use one of three
  // hash partitioning schemes: 0 - HashPartitioningFunction,
  // 1 - HashDistPartitioningFunction, 2 - Hash2PartitioningFunction.
  SOFT_REQ_HASH_TYPE,

  // Use conservative hash2 grouping
  OLD_HASH2_GROUPING,


  COMP_INT_10,
  COMP_INT_11,
  COMP_INT_14,
  COMP_INT_15,
  COMP_INT_16,
  COMP_INT_17,
  COMP_INT_18,
  COMP_INT_19,
  COMP_INT_20,
  COMP_INT_21,
  COMP_INT_22,
  COMP_INT_23,
  COMP_INT_24,
  COMP_INT_26,
  COMP_INT_30,
  COMP_INT_31,
  COMP_INT_32,
  COMP_INT_34,
  COMP_INT_35,
  COMP_INT_36,
  COMP_INT_38,
  COMP_INT_39,
  COMP_INT_40,
  COMP_INT_43,
  COMP_INT_44,
  COMP_INT_45,
  COMP_INT_46,
  COMP_INT_47,
  COMP_INT_48,
  COMP_INT_50,
  COMP_INT_51,
  COMP_INT_54,
  COMP_INT_60,
  COMP_INT_61,
  COMP_INT_62,
  COMP_INT_63,
  COMP_INT_66,
  COMP_INT_67,
  COMP_INT_70,
  COMP_INT_71,
  COMP_INT_73,
  COMP_INT_74,
  COMP_INT_77,
  COMP_INT_79,
  COMP_INT_80,
  COMP_INT_89,
  COMP_INT_90,
  COMP_INT_95,
  COMP_INT_98,
  COMP_INT_99,

  COMP_BOOL_100,
  COMP_BOOL_101,
  COMP_BOOL_102,
  COMP_BOOL_103,
  COMP_BOOL_104,
  COMP_BOOL_106,
  COMP_BOOL_107,
  COMP_BOOL_108,
  COMP_BOOL_110,
  COMP_BOOL_111,
  COMP_BOOL_112,
  COMP_BOOL_113,
  COMP_BOOL_114,
  COMP_BOOL_115,
  COMP_BOOL_116,
  COMP_BOOL_117,
  COMP_BOOL_118,
  COMP_BOOL_119,
  COMP_BOOL_120,
  COMP_BOOL_122,
  COMP_BOOL_123,
  COMP_BOOL_124,
  COMP_BOOL_125,
  COMP_BOOL_126,
  COMP_BOOL_127,
  COMP_BOOL_128,
  COMP_BOOL_129,
  COMP_BOOL_130,
  COMP_BOOL_131,
  COMP_BOOL_132,
  COMP_BOOL_133,
  COMP_BOOL_134,
  COMP_BOOL_135,
  COMP_BOOL_136,
  COMP_BOOL_137,
  COMP_BOOL_138,
  COMP_BOOL_139,
  COMP_BOOL_140,
  COMP_BOOL_141,
  COMP_BOOL_144,
  COMP_BOOL_145,
  COMP_BOOL_147,
  COMP_BOOL_148,
  COMP_BOOL_149,
  COMP_BOOL_150,
  COMP_BOOL_151,
  COMP_BOOL_152,
  COMP_BOOL_153,
  COMP_BOOL_154,
  COMP_BOOL_155,
  COMP_BOOL_156,
  COMP_BOOL_158,
  COMP_BOOL_159,
  COMP_BOOL_160,
  COMP_BOOL_161,
  COMP_BOOL_162,
  COMP_BOOL_163,
  COMP_BOOL_164,
  COMP_BOOL_165,
  COMP_BOOL_166,
  COMP_BOOL_167,
  COMP_BOOL_168,
  COMP_BOOL_169,
  COMP_BOOL_171,
  COMP_BOOL_172,
  COMP_BOOL_173,
  COMP_BOOL_174,
  COMP_BOOL_175,
  COMP_BOOL_176,
  COMP_BOOL_177,
  COMP_BOOL_178,
  COMP_BOOL_183,
  COMP_BOOL_184,
  COMP_BOOL_185,
  COMP_BOOL_186,
  COMP_BOOL_187,
  COMP_BOOL_188,
  COMP_BOOL_189,
  COMP_BOOL_190,
  COMP_BOOL_191,
  COMP_BOOL_192,
  COMP_BOOL_193,
  COMP_BOOL_194,  // Can be used to turn off fix to JIRA Trafodion 3325
  COMP_BOOL_196,
  COMP_BOOL_197,
  COMP_BOOL_198,
  COMP_BOOL_199,
  COMP_BOOL_200,
  COMP_BOOL_201,
  COMP_BOOL_202,
  COMP_BOOL_203,

  COMP_BOOL_206,
  COMP_BOOL_207,
  COMP_BOOL_210,
  COMP_BOOL_211,
  COMP_BOOL_217,
  COMP_BOOL_219,

  HIST_OPTIMISTIC_CARD_OPTIMIZATION,


  // System IDentity buffer specification
  GEN_SID_BUFFER_SIZE,
  GEN_SID_NUM_BUFFERS,

  // Partial Hash GroupBy.
  GEN_HGBY_PARTIAL_GROUP_FLUSH_THRESHOLD,
  GEN_HGBY_PARTIAL_GROUP_ROWS_PER_CLUSTER,


  ALLOW_DP2_ROW_SAMPLING,

  INCORPORATE_SKEW_IN_COSTING,
  TOTAL_RESOURCE_COSTING,



  USE_PARALLEL_FOR_NUM_PARTITIONS,

  EXE_DIAGNOSTIC_EVENTS,    // Sends various executor diagnostics to EMS

  SHARE_TEMPLATE_CACHED_PLANS,


  // to enable special mode 1. Currently enabled for  release.
  MODE_SPECIAL_1,

  SESSION_ID,

  SESSION_IN_USE,

  VOLATILE_SCHEMA_IN_USE,

  VOLATILE_CATALOG,

  LAST0_MODE,

  OUTPUT_DATE_FORMAT,

  // implicit upd stats on volatile table is only done if the number
  // of inserted rows exceed this threshold.
  IMPLICIT_UPD_STATS_THRESHOLD,

  // POS attributes for temporary/volatile tables
  POS_NUM_OF_TEMP_TABLE_PARTNS,
  POS_TEMP_TABLE_SIZE,

  HIST_DEFAULT_NUMBER_OF_INTERVALS,


 SESSION_USERNAME,

  // For DBLimits project
  DP2_CACHE_8K_BLOCKS ,
  DP2_CACHE_16K_BLOCKS,
  DP2_CACHE_32K_BLOCKS,

  // Enable DBLimits functionality
  CAT_LARGE_BLOCKS_LARGE_KEYS,

  GEN_DBLIMITS_LARGER_BUFSIZE,



  FORCE_PARALLEL_INSERT_SELECT,

    // For stored procedure result sets
  GEN_UDRRS_BUFFER_SIZE,
  GEN_UDRRS_NUM_BUFFERS,
  GEN_UDRRS_SIZE_DOWN  ,
  GEN_UDRRS_SIZE_UP    ,

  ALLOW_UNEXTERNALIZED_MAINTAIN_OPTIONS,

  EXE_MEMORY_AVAILABLE_IN_MB, // Mem size (MB) in ESP available for BMOs

  EXE_MEMORY_FOR_PARTIALHGB_IN_MB, // Mem size (MB) in ESP available
                                   // for partial hash groupby.
  SSD_BMO_MAX_MEM_THRESHOLD_IN_MB,

  NAR_DEPOBJ_ENABLE ,

  // For Adaptive Segmentation (aka Virtual Segmentation, Adaptive
  // parallelism control)

  AFFINITY_VALUE,
  CYCLIC_ESP_PLACEMENT,
  DEFAULT_DEGREE_OF_PARALLELISM,
  USE_OPERATOR_MAX_FOR_DOP,
  NSK_DBG_GENERIC,
  MEMORY_UNIT_ESP,
  WORK_UNIT_ESP,
  WORK_UNIT_ESP_DATA_COPY_COST,




  MV_REFRESH_MDELTA_MAX_DELTAS_THRESHOLD,
  MV_REFRESH_MDELTA_MAX_JOIN_SIZE_FOR_SINGLE_PHASE,
  MV_REFRESH_MDELTA_MIN_JOIN_SIZE_FOR_SINGLE_PRODUCT_PHASE,
  MV_REFRESH_MDELTA_PHASE_SIZE_FOR_MID_RANGE,

  // Enable 'ON' or disable 'OFF' merge join overflow
  MJ_OVERFLOW,

  SKEW_EXPLAIN,            // embed skew-buster plan details in EXPLAIN output
  SKEW_ROWCOUNT_THRESHOLD, // minimal row count for skew-buster to be active

  // Percentage of BMO memory quota "equal share" used by merge join.
  MJ_BMO_QUOTA_PERCENT,

  SKEW_SENSITIVITY_THRESHOLD, // skew threshold value

  // Enable use of internal sorting/grouping for Update Stats instead of doing
  // it in a query.
  USTAT_INTERNAL_SORT,

  // Control percentage of available physical memory to be used by Update
  // Statistics for internal sort.
  USTAT_IS_MEMORY_FRACTION,
  // For Simple Cost Model
  SIMPLE_COST_MODEL,

  // Enable creation of intervals by Update Stats representing significant
  // gaps between values.
  USTAT_PROCESS_GAPS,

  // Multiply this value by the average gap area to get the gap areas size threshold
  // for creating a gap interval.
  USTAT_GAP_SIZE_MULTIPLIER,

  // Percentage of intervals to be used for representing gaps.
  USTAT_GAP_PERCENT,

  // Create a separate interval in a column's histogram for any distinct value
  // that has a frequency exceeding this percentage of the total row count for
  // the table.
  USTAT_FREQ_SIZE_PERCENT,

  MAX_SKEW_VALUES_DETECTED,

  CREATE_OBJECTS_IN_METADATA_ONLY,


  // ON/OFF flag to invoke ghost objects
  ALLOW_GHOST_OBJECTS,

 //Sort to use memory quota system.
  SORT_MEMORY_QUOTA_SYSTEM,

  // New charsets
  INPUT_CHARSET,
  ISO_MAPPING,
  DEFAULT_CHARSET,

  // controls rounding of how arith and cast results.
  // 0: truncate(no rounding)
  // 1: round half up (values .5 and up are rounded to nearest high digit).
  // 2: round half even (values > .5 rounded up, .5 rounded to nearest even
  //                     digit)
  ROUNDING_MODE,

  // if set, tables are not closed at the end of a query. This allows
  // the same open to be reused for the next query which accesses that
  // table.
  // If the table is shared opened by multiple openers from the same
  // process, then the share count is decremented until it reaches 1.
  // At that time, the last open is preserved so it could be reused.
  // Tables are closed if user id changes.
  REUSE_OPENS,


  // Self-referencing updates.
  BLOCK_TO_PREVENT_HALLOWEEN,
  R2_HALLOWEEN_SUPPORT,
  // Adding for RangeSpec transformation of selection predicates.
  RANGESPEC_TRANSFORMATION,
  HIST_ASSUME_INDEPENDENT_REDUCTION,
  HIST_USE_SAMPLE_FOR_CARDINALITY_ESTIMATION ,

  EXE_PARALLEL_DDL,

  ALLOW_MULTIDEGREE_SUBQ_IN_SELECTLIST,
  ALLOW_SUBQ_IN_SET,
  ALLOW_RENAME_OF_MVF_OR_SUBQ,


  NSK_DBG_SHOW_TREE_AFTER_SEMANTIC_QUERY_OPTIMIZATION,
  SUBQUERY_UNNESTING,
  SUBQUERY_UNNESTING_P2,

  // Defaults for UDF routine costing
  // The CPU cost values will be taken as milliseconds
  // The IO cost values are used as the count of IOs per row
  // The MSG cost values are used as the count of msgs per row
  // The FANOUT cost value is 1 for a Scalar Routine and higher for
  //   a TableValued UDF. It should be thought of reflecting how many
  //   rows the routine can return for each row passed in (maximum).
  // The UEC value is an average UEC for a routine. For scalarUDFs it
  //   is usually 1.
 
  INITIAL_UDF_CPU_COST,
  INITIAL_UDF_IO_COST,
  INITIAL_UDF_MSG_COST,
  NORMAL_UDF_CPU_COST,
  NORMAL_UDF_IO_COST,
  NORMAL_UDF_MSG_COST,
  UDF_FANOUT,
  ROUTINE_DEFAULT_UEC,

  // TableMappingUDF Defaults
  TMUDF_CARDINALITY_FACTOR,
  TMUDF_LEAF_CARDINALITY,

  UDF_SUBQ_IN_AGGS_AND_GBYS,
  USTAT_FETCHCOUNT_ACTIVE,

  SEMIJOIN_TO_INNERJOIN_INNER_ALLOWANCE,
  SEMIJOIN_TO_INNERJOIN_REDUCTION_RATIO,
  SEMIJOIN_TO_INNERJOIN_TRANSFORMATION,

  POS_NUM_DISK_POOLS,
  POS_DISKS_IN_SEGMENT,

  // query complexity threshold for query caching to match constants
  // in parameterization of equality predicates
  MATCH_CONSTANTS_OF_EQUALITY_PREDICATES,
  // Memory limit per Esp for BMOs
  BMO_MEMORY_SIZE,


  // Compress plan fragments downloaded to ESPs (ESP and DP2 frags)
  FRAG_COMPRESSION_THRESHOLD,


  // Display only externalized information in SHOWDDL if set to EXTERNAL
  SHOWDDL_DISPLAY_FORMAT,

  // Generate leaner expressions in all fragments
  GEN_LEANER_EXPRESSIONS,



  POS_DISK_POOL,

  //
  //   Internal options for BMOs
  //
  EXE_BMO_SET_BUFFERED_WRITES,
  // Disallow overflow (in HJ, SORT) -- thus Virtual Memory is used up to its
  // limits (may involve costly swapping)
  EXE_BMO_DISABLE_OVERFLOW,

  // Disable the mechanism for triggering overflow early based on hints
  // given by the compiler (currently used only by SORT and (non unique) HJ).
  EXE_BMO_DISABLE_CMP_HINTS_OVERFLOW_HASH,   // for the Hash Operators
  EXE_BMO_DISABLE_CMP_HINTS_OVERFLOW_SORT,   // for Sort

  // Minimal memory size of a BMO before checking for system memory pressure
  // and compiler hints for early overflow (to avoid "thrashing" at low mem)
  EXE_BMO_MIN_SIZE_BEFORE_PRESSURE_CHECK_IN_MB,

  // The following 3 are only for testing overflow
  EXE_TEST_FORCE_CLUSTER_SPLIT_AFTER_MB,
  EXE_TEST_FORCE_HASH_LOOP_AFTER_NUM_BUFFERS,
  EXE_TEST_HASH_FORCE_OVERFLOW_EVERY, 

  // Force HJ to use at least that many clusters
  EXE_HJ_MIN_NUM_CLUSTERS,
  // Override the memory quota system; set a memory limit per each BMO
  // (including cases of a single BMO in a fragment, and BMOs in the master).
  // Units are in MegaBytes; zero (default) means that this CQD is OFF !!
  EXE_MEM_LIMIT_PER_BMO_IN_MB,

  // Disables use of ProbeCache
  NESTED_JOIN_CACHE,

  // Buffer, cache, and queue sizing for the ProbeCache operator.
  GEN_PROBE_CACHE_NUM_INNER,
  GEN_PROBE_CACHE_NUM_ENTRIES,
  GEN_PROBE_CACHE_SIZE_DOWN,
  GEN_PROBE_CACHE_SIZE_UP,

  // SQL/MX Compiler/Optimizer Memory Monitor.
  MEMORY_MONITOR,
  MEMORY_MONITOR_IN_DETAIL,
  MEMORY_MONITOR_LOGFILE,
  MEMORY_MONITOR_LOG_INSTANTLY,
  MEMORY_MONITOR_AFTER_TASKS,
  MEMORY_MONITOR_TASK_INTERVAL,
  MEMORY_USAGE_SAFETY_NET,
  MEMORY_USAGE_OPT_PASS_FACTOR,
  MEMORY_USAGE_NICE_CONTEXT_FACTOR,

  NAR_DEPOBJ_ENABLE2,

  // Allows update of clustering key or unique index column.
  UPDATE_CLUSTERING_OR_UNIQUE_INDEX_KEY,

  // Cost Adjustment factors for obtain a robust parallel groupby
  // plan i.e. a partial grouping plan
  ROBUST_PAR_GRPBY_EXCHANGE_FCTR,
  ROBUST_PAR_GRPBY_LEAF_FCTR,

  // Histogram boundary value maximum length.
  USTAT_MAX_CHAR_BOUNDARY_LEN,

  // When update statistics computes UECs on character columns or
  // creates a sample table, it limits them to this size in bytes.
  USTAT_MAX_CHAR_COL_LENGTH_IN_BYTES,

  // Maximum number of MC histograms to create for any one MC key.
  USTAT_NUM_MC_GROUPS_FOR_KEYS,

  // maximum precision that can be specified in a NUMERIC datatype.
  // Syntax: NUMERIC(p,s), 'p' is the precision, max value defined
  // by this default. Enforced in parser.
  // Same thing for max precision of a number literal.
  MAX_NUMERIC_PRECISION_ALLOWED,

  // If set to ON, input and output of data from/to user applications
  // will be done in bignum format.
  // If set to OFF, input/output will be done with max precision of 18 (same as
  // from pre-bignum days).
  // An overflow error will be returned if data would not fit within the
  // max precision of 18.
  // If set of SYSTEM (the default), then bignum IO will be done if the input
  // or output value is a bignum and was derived from a real bignum value
  // entered by user(bignum literal, bignum column, param...).
  BIGNUM_IO,

  IS_DB_TRANSPORTER,

  // Allow for the setting of the row count in a long running operation
  MULTI_COMMIT_SIZE,

  // caller is sqlci
  IS_SQLCI,

  // caller is nvci (scripts) process
  NVCI_PROCESS,

  // if this is set, then find a suitable key among all the columns of
  // a volatile table.
  // If this is not set, and there is no user specified primary key or
  // store by clause, then make the first column of the volatile table
  // to be the clustering key.
  VOLATILE_TABLE_FIND_SUITABLE_KEY,


// Allows pcodes for varchars
  VARCHAR_PCODE,


  // if set to ON, then isolation level (read committed, etc) could be
  // specified in a regular CREATE VIEW (not a create MV) statement.
  ALLOW_ISOLATION_LEVEL_IN_CREATE_VIEW,

  // For ESP exchanges introduced in the generator.
  UNOPTIMIZED_ESP_BUFFER_SIZE_DOWN,
  UNOPTIMIZED_ESP_BUFFER_SIZE_UP,

  // For special initial queue sizings for ONLJ
  GEN_ONLJ_LEFT_CHILD_QUEUE_UP,
  GEN_ONLJ_LEFT_CHILD_QUEUE_DOWN,
  GEN_ONLJ_RIGHT_SIDE_QUEUE_UP,
  GEN_ONLJ_RIGHT_SIDE_QUEUE_DOWN,
  GEN_ONLJ_SET_QUEUE_RIGHT,
  GEN_ONLJ_SET_QUEUE_LEFT,

  
  SORT_REC_THRESHOLD,
  SORT_MERGE_BUFFER_UNIT_56KB,


 PARTIAL_SORT_ADJST_FCTR,
  SCRATCH_MAX_OPENS_HASH,
  SCRATCH_MAX_OPENS_SORT,
  SCRATCH_DISK_LOGGING,
  SCRATCH_MGMT_OPTION,
  SCRATCH_PREALLOCATE_EXTENTS,
  SCRATCH_IO_BLOCKSIZE_SORT_MAX,
  SCRATCH_IO_VECTOR_SIZE_HASH,
  SCRATCH_IO_VECTOR_SIZE_SORT,

  OVERRIDE_GENERATED_IDENTITY_VALUES,

  ELIMINATE_REDUNDANT_JOINS,
  MULTI_PASS_JOIN_ELIM_LIMIT,
// Used to modify the timeout for the internal maintain control
  // information table

  MAINTAIN_CONTROL_TABLE_TIMEOUT,

  //OCB Cost adjustment factor
  OCB_COST_ADJSTFCTR,


  // Flags for enabling/disabling optimizations within advanced PCODE
  // optimization framework
  PCODE_OPT_FLAGS,

  USTAT_SAMPLE_PERCENT_DIFF,   // percentage diff allowed to use old sample in FetchCount().
  USTAT_DEBUG_TEST,            // settings for testing ustat, normally empty.
 
  // Disallow/Allow left joins in MultiJoin framework
  LEFT_JOINS_SPOIL_JBB,

  // Disallow/Allow semi and anti-semi joins in MultiJoin framework
  SEMI_JOINS_SPOIL_JBB,

  // Disallow/Allow full outer joins in MultiJoin framework
  FULL_OUTER_JOINS_SPOIL_JBB,

  // Disallow/Allow TSJs in MultiJoin framework
  TSJS_SPOIL_JBB,

  // Disallow/Allow routine joins in MultiJoin framework
  ROUTINE_JOINS_SPOIL_JBB,
  




  // Specify the node
  UNIQUE_HASH_JOINS,
  UNIQUE_HASH_JOIN_MAX_INNER_SIZE,
  UNIQUE_HASH_JOIN_MAX_INNER_SIZE_PER_INSTANCE,
  UNIQUE_HASH_JOIN_MAX_INNER_TABLES,

  // catalog where maintain database is maintained
  MAINTAIN_CATALOG,



  // turn on and off lean olt query optimizations. Default is OFF.
  OLT_QUERY_OPT_LEAN,

 // Specify the file that logs certain MXCMP errors.
  CMP_ERR_LOG_FILE,


  // override the source schema with the target schema
  // SOURCE_SCHEMA:TARGET_SCHEMA
  OVERRIDE_SCHEMA,

  // To handle dynamic resizable hash-table
  EXE_HGB_INITIAL_HT_SIZE,

  EXE_NUM_CONCURRENT_SCRATCH_IOS,

  // in case of an error during query processing, retry the query if
  // that error is set as a retryable error.
  // A retry (AQR) would prepare, execute and fetch, depending on which
  // state the query was in.
  AUTO_QUERY_RETRY,

  // return warnings about aqr.
  // If OFF, no warning is returned.
  // If ON, warnings are returned for retries due to external events.
  // If ALL, warnings are returned due to both external and
  // internal (query cache recompile) events.
  AUTO_QUERY_RETRY_WARNINGS,


  DISABLE_READ_ONLY,

  // perform substring transformation (ICBC PoC)
  SUBSTRING_TRANSFORMATION,


  // by default, a primary key or unique constraint must be non-nullable.
  // This default, if set, allows them to be nullable.
  // The default value is OFF.
  ALLOW_NULLABLE_UNIQUE_KEY_CONSTRAINT,

  // if set to ON, then ORDER BY could be 
  // specified in a regular CREATE VIEW (not a create MV) statement.
  ALLOW_ORDER_BY_IN_CREATE_VIEW,


  EXE_LOG_RETRY_IPC,

  ALLOW_IMPLICIT_CHAR_CASTING,
  
  IN_MEMORY_OBJECT_DEFN,

  // Update statistics command updates the histogram tables of the schema
  // where the table is created. 
  // 
  // This default points to the schema whose histogram tables, instead of
  // the original table's histogram tables, are to be updated during an 
  // 'update statistics' command. 
  HISTOGRAMS_SCHEMA,

  // specifying a pre-existing file with sampled rows for update stats
  USTAT_SAMPLE_TABLE_NAME,

  // Can be used to specify the name of the persistent sample table created
  // by ustat. Used for testing only, to provide a known name that allows the
  // sample table to be accessed by name after creation in a test script.
  // Must take care to change this value (or restore default), before issuing
  // a statement that creates a sample for another table, or the name will be
  // duplicated. The value used must be an UNQUALIFIED table name.
  USTAT_SAMPLE_TABLE_NAME_CREATE,

  // By default (ON), distribute the metadata tables across all
  // segments.  If set to LOCAL_NODE, distribute metadata tables
  // across volumes in the local segment when the first schema is
  // created.
  // If set to OFF, place all metadata tables on the same volume.
  CAT_DISTRIBUTE_METADATA,



  // Pubsub holdable cursor is not closed on rollback by default
  // But, ANSI standard expects the holdable cursor to be closed on rollback 
  PSHOLD_CLOSE_ON_ROLLBACK,
  // To ensure the Pubsub holdable cursor is fetched after commit in case of 
  // positioned update/deletes. Pubsub holdable cursor is not checked for this
  // condition by default
  PSHOLD_UPDATE_BEFORE_FETCH,



  // Update statistics automation CQDs to allow for automation settings.
  USTAT_AUTO_READTIME_UPDATE_INTERVAL,
  USTAT_AUTO_FOR_VOLATILE_TABLES,

  // Use a compressed data format internally rather than current
  // SQLARK_EXPLODED_FORMAT
  COMPRESSED_INTERNAL_FORMAT,


  // Enables possibility of performing a bulk move of nullable column values
  // and variable length column values.
  BULK_MOVE_NULL_VARCHAR,


  // display detailed MV information. Default is OFF
  MV_DUMP_DEBUG_INFO,

  // tracking compilers specific defaults
  COMPILER_TRACKING_INTERVAL,
  COMPILER_TRACKING_LOGFILE,
  COMPILER_TRACKING_LOGTABLE,

  // allow the frequency of the 1st and the 2nd mostly occurred values to 
  // be used in max cardinality and local predicate evaluation.
  HIST_USE_HIGH_FREQUENCY_INFO,
  USTAT_SHOW_MFV_INFO,

  // These CQDs are reserved for NCM. These are mostly used for 
  // internal testing, turning on/off features for debugging, and for tuning. 
  // In normal situations, these will not be externalized in keeping 
  // with the very few CQDs philosophy of NCM. 
  // These are applicable only in conjunction with SIMPLE_COST_MODEL 'on'.
  NCM_CACHE_SIZE_IN_BLOCKS,
  NCM_COSTLIMIT_FACTOR,
  NCM_ESP_FIXUP_WEIGHT,
  NCM_ESP_STARTUP_FIX,
  NCM_EXCH_MERGE_FACTOR,
  NCM_EXCH_NDCS_FIX,
  NCM_HGB_OVERFLOW_COSTING,
  NCM_HJ_OVERFLOW_COSTING,
  NCM_MAP_CPU_FACTOR,
  NCM_MAP_MSG_FACTOR,
  NCM_MAP_RANDIO_FACTOR,
  NCM_MAP_SEQIO_FACTOR,
  NCM_MJ_TO_HJ_FACTOR,
  NCM_NJ_PC_THRESHOLD,
  // -------------------------------------------------------------------------
  // Threshold above which NJ partial order probe is treated as random order
  // -------------------------------------------------------------------------
  NCM_NJ_PROBES_MAXCARD_FACTOR,
  NCM_NJ_SEQIO_FIX,
  NCM_NUM_SORT_RUNS,
  NCM_PAR_GRPBY_ADJ,
  NCM_PRINT_ROWSIZE,
  NCM_RAND_IO_ROWSIZE_FACTOR,
  NCM_RAND_IO_WEIGHT,
  NCM_SEQ_IO_ROWSIZE_FACTOR,
  NCM_SEQ_IO_WEIGHT,
  NCM_SERIAL_NJ_FACTOR,
  NCM_SGB_TO_HGB_FACTOR,
  NCM_SORT_OVERFLOW_COSTING,
  NCM_TUPLES_ROWSIZE_FACTOR,

  // These CQDs are for Multi-Fragment ESPs
  ESP_MULTI_FRAGMENTS,
  ESP_NUM_FRAGMENTS,
  ESP_MULTI_FRAGMENT_QUOTA_VM,
  EXE_SINGLE_BMO_QUOTA, // Quota system applys to fragments with single BMO

  // Fudge factor for tupleList under NJ cost estimation
  CPUCOST_NJ_TUPLST_FF,

  ////////////////////////////////////////////////////////////////////////
  // this cqd returns showddl output for validate or create phase of 
  // a replicate command.
  // For validate, output is returned without any generated or other names
  // that can vary from one system to another (like constraint name, or
  // location clause, or partition name). 
  // For create, output is returned for 'some' generated names, like that
  // of system created implicit indices or constraints.
  // Used by bulk replicator to validate that the ddl on source 
  // system is exactly the same as that on the target system. This
  // validation is done by matching showddl output of the table on the source 
  // and target systems.
  // Also used by bulk replicator to create the source ddl on the target 
  // system.
  // 
  // Value of 0: this cqd not specified
  // Value of 1: return object showddl(base table, internal system indices)
  //             in 'validate' format.
  // Value of 2: return object showddl(base table, internal system indices)
  //             in 'create' format.
  // Value of 3: return object showddl(base table, all dependent indices)
  //             in 'validate' format.
  // Value of 4: return object showddl(base table, all dependent indices)
  //             in 'create' format.
  // Value of 5: return all dependent objects in 'original' format.
  SHOWDDL_FOR_REPLICATE,



  REPLICATE_ALLOW_ROLES,


  COMP_BOOL_226, // enable UNLOAD feature

  OR_PRED_TO_JUMPTABLE,
  OR_PRED_TO_SEMIJOIN,
  OR_PRED_TO_SEMIJOIN_TABLE_MIN_SIZE,
  OR_PRED_TO_SEMIJOIN_PROBES_MAX_RATIO,


  // Total mem size (MB) for a query
  BMO_MEMORY_LIMIT_PER_NODE_IN_MB, 

  // lower-bound memory limit for BMOs 
  BMO_MEMORY_LIMIT_LOWER_BOUND_HASHJOIN,
  EXE_MEMORY_LIMIT_LOWER_BOUND_MERGEJOIN,
  BMO_MEMORY_LIMIT_LOWER_BOUND_HASHGROUPBY ,
  BMO_MEMORY_LIMIT_LOWER_BOUND_SORT ,

  // lower-bound memory limit for nBMOs 
  EXE_MEMORY_LIMIT_LOWER_BOUND_SEQUENCE ,
  EXE_MEMORY_LIMIT_LOWER_BOUND_EXCHANGE ,

  // Limit CPU time a query can use in master, ESP, or DP2.  Unit is seconds.
  QUERY_LIMIT_SQL_PROCESS_CPU, 
  QUERY_LIMIT_SQL_PROCESS_CPU_DEBUG,
  QUERY_LIMIT_SQL_PROCESS_CPU_XPROD,

  MV_LOG_CLEANUP_SAFETY_FACTOR,
  MV_LOG_CLEANUP_USE_MULTI_COMMIT,
  COMP_BOOL_221,
  OVERFLOW_MODE,


  POS_TEST_NUM_NODES,

  // for default/public schema settings
  PUBLIC_SCHEMA_NAME,
  DEFAULT_SCHEMA_NAMETYPE,
  LDAP_USERNAME,

  // for schema access control
  DEFAULT_SCHEMA_ACCESS_ONLY,



  // To control ESP exchange memory usage
  GEN_EXCHANGE_MAX_MEM_IN_KB,
  GEN_EXCHANGE_MSG_COUNT,

  // Enable PA-DP2 affinity

  // enable explain for ddl and ctas
  DDL_EXPLAIN,


  // the number of ESPs that will be dealing with skew in OCR nested joins
  NESTED_JOINS_ANTISKEW_ESPS,

  //ANSI NULL SEMANTICS CQD
  // hash anti semi join optimization project
  NOT_IN_ANSI_NULL_SEMANTICS,
  NOT_IN_OPTIMIZATION,
  NOT_IN_OUTER_OPTIMIZATION,
  NOT_IN_SKEW_BUSTER_OPTIMIZATION,

  // QUERY STRATEGIZER RELATED
  QUERY_STRATEGIZER,
  EXPLAIN_STRATEGIZER_PARAMETERS,

  CASCADED_GROUPBY_TRANSFORMATION,

  // Use large queues on RHS of Flow/Nested Join when appropriate.
  USE_LARGE_QUEUES ,

  //OLAP CQDs
  //GEN_SEQFUNC_OLAP_BUFFER_SIZE,
  OLAP_BUFFER_SIZE,
  OLAP_MAX_NUMBER_OF_BUFFERS,
  OLAP_CAN_INVERSE_ORDER,
  OLAP_MAX_FIXED_WINDOW_FRAME,
  //used mainly for testing, ignored when set to 0
  //specifies the maximum number of rows per olap buffer
  OLAP_MAX_ROWS_IN_OLAP_BUFFER,
  //aplies for fixed window-- number of additional oplap buffers
  //to allocate on top of the minumum numbers 
  OLAP_MAX_FIXED_WINDOW_EXTRA_BUFFERS,

  // create frequent value list for tuple list if the elements in the list are
  // below this threshold
  HIST_TUPLE_FREQVAL_LIST_THRESHOLD,

// Gen Sol:10-100408-9393
  ALLOW_RISKY_UPDATE_WITH_NO_ROLLBACK,

  // used for controlling multi-join transformation level.
  ASYMMETRIC_JOIN_TRANSFORMATION,

  // CLI caller to redrive CTAS(create table as) for child query monitoring
  REDRIVE_CTAS,

  // type a CASE expression or ValueIdUnion as varchar if its leaves 
  // are of type CHAR of unequal length
  TYPE_UNIONED_CHAR_AS_VARCHAR,

  // enable special features to be used for compatability with certain vendors.
  MODE_SPECIAL_4,

  // toggle display system grants for SHOWDDL
  SHOWDDL_DISPLAY_PRIVILEGE_GRANTS,

  // ***** END REGULAR DEFAULTS *********************************
  
  // Add regular default values (CQDs) before this line.
  // Add session defaults below this line.

  // these defaults are set using SET SESSION DEFAULT statement.
  // They cannot be set using a CQD and are not looked at by mxcmp.
  // But they can be inserted into
  // the defaults table which is read by executor at runtime.
  // ****** BEGIN SET SESSION DEFAULTs ***********************************
  AQR_ENTRIES,
  ESP_ASSIGN_DEPTH,
  ESP_IDLE_TIMEOUT,
  // ****** END SET SESSION DEFAULTs ***********************************

  USTAT_AUTO_EMPTYHIST_TWO_TRANS,
  USTAT_AUTO_MISSING_STATS_LEVEL,
  MAX_EXPRS_USED_FOR_CONST_FOLDING,
  HIST_FETCHCOUNT_SCRATCH_VOL_THRESHOLD,

  EXPLAIN_DISPLAY_FORMAT,
  HIST_NUM_ADDITIONAL_DAYS_TO_EXTRAPOLATE,
  NCM_PAR_ADJ_FACTOR,


  SAP_KEY_NJ_TABLE_SIZE_THRESHOLD,
  SAP_PREFER_KEY_NESTED_JOIN,
  SAP_TUPLELIST_SIZE_THRESHOLD,

  SHOWCONTROL_SHOW_SUPPORT,
  HIST_FREQ_VALS_NULL_FIX,
  HIST_MERGE_FREQ_VALS_FIX,
  HIST_SKEW_COST_ADJUSTMENT,
  USTAT_AUTO_MC_MAX_WIDTH, 
  USTAT_USE_INTERNAL_SORT_FOR_MC,
  USTAT_IS_IGNORE_UEC_FOR_MC,


  NSK_DBG_QUERY_LOGGING_ONLY,
  RISK_PREMIUM_SERIAL_SCALEBACK_MAXCARD_THRESHOLD,

  CAT_DEFAULT_COMPRESSION,
  COMPRESSION_TYPE,

  OCR_FOR_SIDETREE_INSERT,
  UNC_PROCESS,
  USTAT_RETRY_DELAY,
  USTAT_RETRY_LIMIT,
  USTAT_RETRY_NEC_COLS_LIMIT,
  REPLICATE_IO_VERSION,
  COMPRESSED_INTERNAL_FORMAT_ROOT_DOES_CONVERSION,
  COMPRESSED_INTERNAL_FORMAT_BULK_MOVE,

  OR_PRED_ADD_BLOCK_TO_IN_LIST,
  OR_PRED_KEEP_CAST_VC_UCS2,

  // SeaMonster messaging
  SEAMONSTER,
  
  CAT_LIBRARY_PATH_RELATIVE,
  
  MDAM_UNDER_NJ_PROBES_THRESHOLD,

  MDOP_CPUS_PENALTY,
  MDOP_CPUS_SOFT_LIMIT,
  MDOP_MEMORY_PENALTY,
  SORT_INTERMEDIATE_SCRATCH_CLEANUP,

  //CQDs to control CIF for HJ,HGB,Sort and Exchange operators
  COMPRESSED_INTERNAL_FORMAT_BMO,
  DISPLAY_DIVISION_BY_COLUMNS,
  MTD_GENERATE_CC_PREDS,
  GEN_HSHJ_MIN_MAX_OPT,

  COMPRESSED_INTERNAL_FORMAT_MIN_ROW_SIZE,
  COMPRESSED_INTERNAL_FORMAT_ROW_SIZE_ADJ,
  COMPRESSED_INTERNAL_FORMAT_BMO_AFFINITY,
  COMPRESSED_INTERNAL_FORMAT_EXPLAIN,
  COMPRESSED_INTERNAL_FORMAT_DEFRAG_RATIO,


  // Enable the query invalidation processing in catman
  CAT_ENABLE_QUERY_INVALIDATION,
  
  
  MC_SKEW_SENSITIVITY_THRESHOLD, // multi-column skew threshold value

  MTD_MDAM_NJ_UEC_THRESHOLD, // the threshold of the UEC of predicate-less 
                             // leading key columns of a MTD table, above
                             // which the MTD table can be the inner table of 
                             // NJ.
  // this should be used for testing only. DML should not be executed on
  // non-audited tables
  ALLOW_DML_ON_NONAUDITED_TABLE,

  CAT_ALLOW_NEW_FEATUREX,  // to turn on and off features

  DOP_REDUCTION_ROWCOUNT_THRESHOLD, // the threshold below which dop can 
                                    // be reduced

  MC_SKEW_INNER_BROADCAST_THRESHOLD, // MC-SB inner side broadcast threshold
                                     // in bytes

  NESTED_JOIN_CACHE_PREDS,
  //Temporary fix to bypass volatile schema name checking for non-table objects - ALM Case#4764
  BYPASS_CHECK_FOR_VOLATILE_SCHEMA_NAME, 

  //--------------------------------------------------------------------------
  // Query Invalidation - Debug/Regression test CQDs
  //--------------------------------------------------------------------------
  QI_PATH,
  QI_PRIV,

  // The switch to control whether N2J (O(n^2) open) nested joins should
  // be generated. 
  NESTED_JOINS_NO_NSQUARE_OPENS,

  NESTED_JOINS_OCR_GROUPING,   // Hans' fix to check mapped left and right part func. 

  NESTED_JOINS_KEYLESS_INNERJOINS,  // When ON, optimistically allow potential keyless joins 
                                    // when the inner contains joins

  MERGE_JOIN_ACCEPT_MULTIPLE_NJ_PROBES, // merge join accepts multiple NJ probes


  // queries coming in from mariaDB interface
  MARIAQUEST_PROCESS,

  //fast extract related
  FAST_EXTRACT_DIAGS,
  FAST_EXTRACT_IO_BUFFERS,
  FAST_EXTRACT_IO_TIMEOUT_SEC,

  
  REPLICATE_COMPRESSION_TYPE, // Compression type to be used when replicating the DDL
  // only reorg if ReorgCheck indicates that a reorg is needed.
  // explore fully covered NJ plan
  NESTED_JOINS_FULL_INNER_KEY,
  NESTED_JOINS_CHECK_LEADING_KEY_SKEW,
  NESTED_JOINS_LEADING_KEY_SKEW_THRESHOLD,

  // This CQD controls the display of detailed interval information for MC histograms 
  // using showstats output
  USTAT_SHOW_MC_INTERVAL_INFO,

  // query must be this old to be canceled if only PID is specified
  CANCEL_MINIMUM_BLOCKING_INTERVAL,

  // propagate child available Btree indexes from child for arity 1 ops
  GA_PROP_INDEXES_ARITY_1, 
  // FAst extract Routines
  GEN_FE_BUFFER_SIZE,
  GEN_FE_NUM_BUFFERS,
  GEN_FE_SIZE_DOWN,
  GEN_FE_SIZE_UP,
  // WMS query monitoring
  WMS_QUERY_MONITORING,
 //WMS child query monitoring,
  WMS_CHILD_QUERY_MONITORING,

  // size in Mb of the file containing a blob/clob column.
  // size is for all rows for a particular column.
  // Size is expressed in Mbs
  LOB_MAX_SIZE,
  //Max memory used to tranfer data/perform I/O to lob data file. 
  LOB_MAX_CHUNK_MEM_SIZE,
  LOB_STORAGE_TYPE,
  LOB_STORAGE_FILE_DIR,

  LOB_HDFS_SERVER,
  LOB_HDFS_PORT,
  LOB_GC_LIMIT_SIZE,

  LOB_INPUT_LIMIT_FOR_BATCH,
  LOB_LOCKING,
  // Should the DISK POOL be turned on when replicating the DDL using COPY DDL
  REPLICATE_DISK_POOL,

  NESTED_JOINS_PLAN3_TRY_SORT, // try sort when plan2 produces a non-sort plan

  HJ_NEW_MCSB_PLAN, // control the new MCSB feature
  
  USTAT_INCREMENTAL_UPDATE_STATISTICS, // main control switch for 
                                      // incremental update stats (IUS): on / off

  USTAT_INCREMENTAL_FALSE_PROBABILITY,

  USTAT_IUS_INTERVAL_ROWCOUNT_CHANGE_THRESHOLD,
  USTAT_IUS_TOTAL_ROWCOUNT_CHANGE_THRESHOLD,

  USTAT_IUS_INTERVAL_UEC_CHANGE_THRESHOLD,
  USTAT_IUS_TOTAL_UEC_CHANGE_THRESHOLD,

  USTAT_IUS_MAX_NUM_HASH_FUNCS,

  USTAT_IUS_PERSISTENT_CBF_PATH,

  USTAT_IUS_USE_PERIODIC_SAMPLING,

  USTAT_IUS_MAX_TRANSACTION_DURATION,

  USTAT_IUS_MAX_PERSISTENT_DATA_IN_MB,

  USTAT_IUS_MAX_PERSISTENT_DATA_IN_PERCENTAGE,
 
  USTAT_COLLECT_MC_SKEW_VALUES,   // controls MC skew values

  HIST_MIN_MAX_OPTIMIZATION,

  // Maximum number of PCODE Branch Instructions in an Expr
  // for which we will attempt PCODE optimizations.
  PCODE_MAX_OPT_BRANCH_CNT,

  // Maximum number of PCODE Instructions in an Expr
  // for which we will attempt PCODE optimizations.
  PCODE_MAX_OPT_INST_CNT,

  USTAT_USE_GROUPING_FOR_SAMPLING,

  USTAT_IUS_NO_BLOCK,
  
  HIVE_MAX_STRING_LENGTH_IN_BYTES,
  HIVE_USE_FAKE_TABLE_DESC,
  HIVE_LIB_HDFS_PORT_OVERRIDE,
  HIVE_HDFS_STATS_LOG_FILE,
  HIVE_MIN_BYTES_PER_ESP_PARTITION,
  HIVE_NUM_ESPS_PER_DATANODE,
  HIVE_MAX_ESPS,

  // buffer size to do hdfs io. In K bytes. 64M = 65536.
  HDFS_IO_BUFFERSIZE,
  HDFS_USE_CURSOR_MULTI,
  HDFS_PREFETCH,

  HIVE_NUM_ESPS_ROUND_DEVIATION,

  HDFS_REPLICATION,
  HIVE_USE_FAKE_SQ_NODE_NAMES,
  HIVE_LOCALITY_BALANCE_LEVEL,
  HDFS_IO_BUFFERSIZE_BYTES,  // test boundaries.
  HDFS_IO_RANGE_TAIL,
  HIVE_METADATA_REFRESH_INTERVAL,

  HIVE_USE_HASH2_AS_PARTFUNCION,

  MODE_SEAHIVE,
  HIVE_CATALOG,
  HIVE_DEFAULT_SCHEMA,
  HIVE_DEFAULT_CHARSET,

  // size of the DESCRIPTION field of explain output. Default is 3000.
  EXPLAIN_DESCRIPTION_COLUMN_SIZE,
  // size of each row in full explain output. Default is 80.
  EXPLAIN_OUTPUT_ROW_SIZE,

  // to avoid stackoverflow when statement is an insert with a large 
  // tuple list
  EXPLAIN_ROOT_INPUT_VARS_MAX,

  // enable exeutil(explain, reorg, maintain...) output in rwrs mode.
  EXE_UTIL_RWRS,

  SEABASE_CATALOG,
  HBASE_CATALOG,
  //  HBASE_DEFAULT_CHARSET,

  HBASE_SERVER,

  HBASE_MAX_COLUMN_NAME_LENGTH,
  HBASE_MAX_COLUMN_VAL_LENGTH,
  HBASE_MAX_COLUMN_INFO_LENGTH,

  // Hbase silently inserts a duplicate row. 
  // Hbase doesn't tell whether a row got deleted.
  // if set to ON, follow SQL semantics.
  // Return an error when a duplicate row is inserted.
  // Also, return indication whether a row got deleted or not.
  // This requires a check to be made before doing the IUD operation.
  HBASE_SQL_IUD_SEMANTICS,

  HBASE_ROWSET_VSBB_OPT,
  HBASE_UPDEL_CURSOR_OPT,
  HBASE_CHECK_AND_UPDEL_OPT,

  HIVE_SORT_HDFS_HOSTS,
  HBASE_MAX_NUM_SEARCH_KEYS,
  CALL_EMBEDDED_ARKCMP,

  // ON, if blocks should be cached for this scan. This includes subset scans used by Update and Delete 
  HBASE_CACHE_BLOCKS,

  // minimum number of rows to cache for a scan. Default is 100. 
  // This includes subset scans used by Update and Delete
  HBASE_NUM_CACHE_ROWS_MIN,
  // maximum number of rows to cache for a scan. Default is 10000.
  // The actual number of cache rows will be in the range [min, max] and
  // is determined by the cardinality estimate available to the generator.
  // Without stats the size of the cache will be typically min.
  HBASE_NUM_CACHE_ROWS_MAX,
  // if ON, create volatile tables in seabase. Otherwise create them in Seaquest.
  // OFF by default, in closed source. ON by default, in open source.
  SEABASE_VOLATILE_TABLES,

  // During a drop of seabase table or index, the object is first removed from 
  // seabase metadata. If that succeeds, the corresponding hbase object is dropped.
  // if set, this drop of hbase table is done in another worker thread. That speeds up the
  // over drop. If a create of the same table comes in later and an error is returned
  // during create, we delay and retry for a fixed number of times since that table
  // may still be dropped by the worked thread.
  HBASE_ASYNC_DROP_TABLE,

  // if ON, hbase coprocessors could be used, if the query allows it.
  HBASE_COPROCESSORS,

  // if ON, use an HBase coprocessor when estimating row counts; if OFF use
  // client-side code (the latter does not work if HBase encryption is in use)
  HBASE_ESTIMATE_ROW_COUNT_VIA_COPROCESSOR,

  // if OFF or '0' is disabled, ON or '1' is simple pushdown, '2' is for advance pushdown
  // It will depends on the query on which predicates or sub-predicates could be pushed.
  HBASE_FILTER_PREDS,

  // If ON, mark all columns that could be serialized as being declared with
  // SERIALIZED option.
  // This option is currently internal and used for testing without having to change
  // all DDL statements.
  HBASE_SERIALIZATION,


  SQLMX_REGRESS,

  // For PCODE - Native Expressions work
  PCODE_NE_DBG_LEVEL,
   

  HBASE_ZOOKEEPER_PORT,

  // Set to a posotive value to allow mdam scan on table with no stats.
  // Set to 0 to disable the feature.
  //
  // The total number of positions has to be <= the thresold, where
  // The number of positions is computed as
  //
  // #UECs for the first n-1 MDAM columns *
  //    # of ranges for the last MDAM column
  MDAM_NO_STATS_POSITIONS_THRESHOLD,

  HBASE_USE_FAKED_REGIONS,

  // use MC stats to decide on the partitioning function range splits
  HBASE_RANGE_PARTITIONING_MC_SPLIT,

  HBASE_NATIVE_IUD,

  AQR_WNR,
  AQR_WNR_DELETE_NO_ROWCOUNT,
  AQR_WNR_INSERT_CLEANUP,
  AQR_WNR_LOCK_INSERT_TARGET,
  AQR_WNR_EXPLAIN_INSERT,

  MDAM_TRACING,
  NCM_MDAM_COST_ADJ_FACTOR,

  // Include skew info for non-inner join card estimation
  HIST_INCLUDE_SKEW_FOR_NON_INNER_JOIN,

  // By default, the control info table for Maintain operations is not used,
  // but can be enabled via this CQD.
  USE_MAINTAIN_CONTROL_TABLE,


  // if set, then constr validation is skipped during unique, ri or check constr
  // creation. Done if constraints are being created during CREATE TABLE time.
  TRAF_NO_CONSTR_VALIDATION,


  HBASE_MIN_BYTES_PER_ESP_PARTITION,
  HBASE_MAX_ESPS,
  

  // for testing setjmp/longjmp compiler logic
  MEMORY_LIMIT_CMPCTXT_UPPER_KB,
  MEMORY_LIMIT_CMPSTMT_UPPER_KB,
  MEMORY_LIMIT_HISTCACHE_UPPER_KB,
  MEMORY_LIMIT_NATABLECACHE_UPPER_KB,
  MEMORY_LIMIT_QCACHE_UPPER_KB,

  // if set, change blob/clob datatype to varchar. This is needed until blob/clob
  // support is externalized.
  TRAF_BLOB_AS_VARCHAR,
  TRAF_CLOB_AS_VARCHAR,

  // for internal use only.
  // execute a create table statement and create the table with this UID.
  TRAF_CREATE_TABLE_WITH_UID,

  // if set, do not use natable cache. Reload it.
  // Used internally until full Xn support for DDL is in.
  TRAF_RELOAD_NATABLE_CACHE,
  
  TRAF_UPSERT_ADJUST_PARAMS,
  TRAF_UPSERT_WB_SIZE,
  TRAF_UPSERT_WRITE_TO_WAL,
  TRAF_LOAD_PREP_ADJUST_PART_FUNC,
  TRAF_LOAD_PREP_TMP_LOCATION,
  TRAF_LOAD_USE_FOR_INDEXES,
  //log only the overall time of a compilation.
  COMPILE_TIME_MONITOR_LOG_ALLTIME_ONLY,

  TRAF_LOAD_PREP_KEEP_HFILES,

  // if an explicit salt option is not specified in create stmt and this cqd is
  // specified with a value > 0, then that value is used to create the number
  // of salted partitions on primary key columns.
  TRAF_NUM_OF_SALT_PARTNS,
  TRAF_LOAD_PREP_CLEANUP,

  // HDFS root location of backing sample tables.
  TRAF_SAMPLE_TABLE_LOCATION,

  HBASE_SALTED_TABLE_MAX_FILE_SIZE,
  HBASE_SALTED_TABLE_SET_SPLIT_POLICY,

  HBASE_DATA_BLOCK_ENCODING_OPTION,
  HBASE_COMPRESSION_OPTION,
  HBASE_MEMSTORE_FLUSH_SIZE_OPTION,
  HQC_LOG,
  HQC_LOG_FILE, // specify the HQC log file name
  HYBRID_QUERY_CACHE,
  HQC_MAX_VALUES_PER_KEY,
  HQC_CONVDOIT_DISABLE_NUMERIC_CHECK, // TEMPORARY CQD - SHOULD REMOVE

  // if ON limits DoP of Hbase scan to number of partitions
  LIMIT_HBASE_SCAN_DOP,
  TRAF_LOAD_TAKE_SNAPSHOT,
  TRAF_LOAD_PREP_SKIP_DUPLICATES,

  // if not set to UNKNOWN, then this is the charset of a column that is not
  // being declared with an explicit charset.
  TRAF_DEFAULT_COL_CHARSET,

  // if set to ON, then the length specified for a char/varchar datatype is 
  // in characters unless it is explicitly qualified as BYTES or CHARACTERS.
  TRAF_COL_LENGTH_IS_CHAR,

  // if set to on, table will be created in aligned row format.
  // SQ row will be created in aligned format and stored as a single col in hbase.
  TRAF_ALIGNED_ROW_FORMAT,

  // this is used to change cache size of sequence numbers for a session.
  // It overwrites the cache size that was specified during sequence creation.
  TRAF_SEQUENCE_CACHE_SIZE,
 
  // this is used to set the retry time if two concurrent update of sequence
  // conflict, and how many times will retry
  // by default it is 100, when you saw error 1583, you can try to increase
  // this settings
  TRAF_SEQUENCE_RETRY_TIMES,

  TRAF_LOAD_MAX_HFILE_SIZE,


  USTAT_USE_BULK_LOAD,

  // if not null, then add this suffix to the original name and select from that hive table.
  USE_HIVE_SOURCE,

  // if set to ON, then query is not run as part of an enclosing DTM transaction 
  // nor is a transaction started to execute it.
  // It is run using underlying hbase single row transaction consistency.
  TRAF_NO_DTM_XN,

  // if set to ON, then query is run as part of localized region transaction.
  // No external transaction is started to run it.
  TRAF_USE_REGION_XN,

  // HBASE_HASH2_PARTITIONING (ON - OFF for now):
  // - OFF: Treat salted table like a non-salted table
  // - ON: Always use HASH2 for salted table

  // HBASE_RANGE_PARTITIONING (ON):
  // - OFF: Never use HBase ranges for partitioning
  // - ON: Use HBase ranges (stats may override)

  // HBASE_STATS_PARTITIONING (ON):
  // - OFF: Don't use stats split
  // - ON: Use stats split if possible, except for HASH2
  HBASE_HASH2_PARTITIONING,
  HBASE_RANGE_PARTITIONING,
  HBASE_STATS_PARTITIONING,

  // ignore conversion errors when rows are read from hdfs.
  HDFS_READ_CONTINUE_ON_ERROR,

  TRAF_LOAD_USE_FOR_STATS,

  ASG_FEATURE,

  TRAF_UNLOAD_HDFS_COMPRESS,

  NCM_IND_JOIN_COST_ADJ_FACTOR,
  NCM_IND_SCAN_COST_ADJ_FACTOR,
  GROUP_BY_PARTIAL_ROOT_THRESHOLD,
  TRAF_UNLOAD_DEF_DELIMITER,
  TRAF_UNLOAD_DEF_RECORD_SEPARATOR,
  TRAF_LOAD_FORCE_CIF,
  TRAF_ENABLE_ORC_FORMAT,
  TRAF_LOAD_LOG_ERROR_ROWS,
  TRAF_LOAD_MAX_ERROR_ROWS,
  TRAF_LOAD_CONTINUE_ON_ERROR,
  TRAF_LOAD_ERROR_COUNT_ID,
  TRAF_LOAD_ERROR_COUNT_TABLE,
  TRAF_LOAD_ERROR_LOGGING_LOCATION,

  TRAF_TRANS_TYPE, 

  // max size in bytes of a char or varchar column in a trafodion table.
  // Valid values are 0 through MAX_CHAR_COL_LENGTH_IN_BYTES.
  //     (defined in common/ComSmallDefs.h)
  TRAF_MAX_CHARACTER_COL_LENGTH,

  // In special cases, previous default value could be overridden. 
  // Internal use only or use only under trafodion supervision.
  TRAF_MAX_CHARACTER_COL_LENGTH_OVERRIDE,
  // set when metadata definition is to be read from hardcoded structs
  // and not from metadata. 

  // set to limit the number of rows in scanner cache when we have very
  // wide rows. If the rows are too large we may run into an OOM error
  // since weuse HBASE_NUM_CACHE_ROWS_MIN(MAX) CQDs to calculate
  // the number of rows
  TRAF_MAX_ROWSIZE_IN_CACHE,

  TRAF_BOOTSTRAP_MD_MODE,

  UDR_DEBUG_FLAGS,

  // The threshold on the number of rows scanned in an index join scan. 
  // If the estimated value is below the threshold, the index will be 
  // subjected to the elimination heuristics.
  INDEX_ELIMINATION_THRESHOLD,

  NSK_DBG_PRINT_INDEX_ELIMINATION,

  NSK_DBG_COMPILE_INSTANCE,

  NSK_DBG_QUERY_PREFIX,

  EXPLAIN_IN_RMS,
  NCM_HBASE_COSTING,
  NCM_IND_JOIN_SELECTIVITY,
  NCM_IND_SCAN_SELECTIVITY,
  NCM_SKEW_COST_ADJ_FOR_PROBES, 
  PCODE_NE_IN_SHOWPLAN,
  TRAF_TABLE_SNAPSHOT_SCAN,
  TRAF_TABLE_SNAPSHOT_SCAN_TMP_LOCATION,
  TRAF_TABLE_SNAPSHOT_SCAN_SNAP_SUFFIX,
  TRAF_TABLE_SNAPSHOT_SCAN_TIMEOUT,
  HBASE_REGION_SERVER_MAX_HEAP_SIZE,

  TRAF_TABLE_SNAPSHOT_SCAN_TABLE_SIZE_THRESHOLD,

  TRAF_USE_RWRS_FOR_MD_INSERT,


  PCODE_DEBUG_LOGDIR,
  PCODE_EXPR_CACHE_CMP_ONLY,
  PCODE_EXPR_CACHE_DEBUG,
  PCODE_EXPR_CACHE_ENABLED,
  PCODE_NE_ENABLED,
  PCODE_EXPR_CACHE_SIZE,

  // if on, store only the needed explain data. See ExplainTuple::genExplainTupleData.
  EXPLAIN_SPACE_OPT,
  HBASE_ROWSET_VSBB_SIZE,
  // hbase table block size, default is 64KB
  HBASE_BLOCK_SIZE,
  // hbase table index level, when zero, index level will be read from Hfile 
  HBASE_INDEX_LEVEL,

  // enable self referencing foreign key constraints
  TRAF_ALLOW_SELF_REF_CONSTR,
  // enable ESP-RegionServer colocation logic
  TRAF_ALLOW_ESP_COLOCATION,

  // number of hbase versions of rows to be retrieved.
  // -1, get max number of versions.
  // -2, get all versions including those marked for deletion.
  //  N, get N versions. N > 0
  TRAF_NUM_HBASE_VERSIONS,

  // if set, index population step is skipped for external and internal index creates.
  // Should be set as an opt when objects are being
  // created in one session (create table, create index, add constraints, etc).
  // Does a fast check to see if source table is empty to validate.
  TRAF_INDEX_CREATE_OPT, 

  // truncate strings on insert and updates without returning an error.
  TRAF_STRING_AUTO_TRUNCATE,
  // return a warning on truncation.
  TRAF_STRING_AUTO_TRUNCATE_WARNING,
  NCM_UDR_NANOSEC_FACTOR,
  HBASE_ASYNC_OPERATIONS,

  //control lob output size when converting to string/memory 
  LOB_OUTPUT_SIZE,

  TRAF_MULTI_COL_FAM,

  // estimated max naheap memory, used as a limit for update stats utility
  USTAT_NAHEAP_ESTIMATED_MAX,

  EXE_MEMORY_FOR_PROBE_CACHE_IN_MB,
  
  TRAF_INDEX_ALIGNED_ROW_FORMAT,

  UDR_JVM_DEBUG_PORT,
  UDR_JVM_DEBUG_TIMEOUT,
  //enable HBASE Small Scanner, optimizing scans of size below HFile block size
  HBASE_SMALL_SCANNER,

  TRAF_LOAD_ALLOW_RISKY_INDEX_MAINTENANCE,
  HBASE_RANGE_PARTITIONING_PARTIAL_COLS,
  MERGE_WITH_UNIQUE_INDEX,

  USTAT_MAX_CHAR_DATASIZE_FOR_IS,

  // If the next two are 'ON' we use the HBase costing code; if they
  // are 'OFF' we use a stub cost of 1 for Updates and Deletes to
  // Trafodion or HBase tables instead. We'll remove these once the
  // costing code has broader exposure.
  HBASE_DELETE_COSTING,
  HBASE_UPDATE_COSTING,
  TRAF_LOAD_FLUSH_SIZE_IN_KB,

  // if ON, then trafodion views on hive objects are supported.
  HIVE_VIEWS,

  // Specify whic additional restriction check to apply
  //  0: no check
  //  1: apply majority of keys with predicates check
  //  2: apply total UECs on keyless key columns check
  //  3: apply both 1) and 2)
  MDAM_APPLY_RESTRICTION_CHECK,

  // A threshold of total UECs on keyless key columns above which MDAM will not be considered.
  // The threshold is expressed as a percentage of the total RC.
  MDAM_TOTAL_UEC_CHECK_UEC_THRESHOLD,

  // A threshold of minitmal RC above which the above total UEC check will be applied.
  MDAM_TOTAL_UEC_CHECK_MIN_RC_THRESHOLD,

  // A multiplier of cumulative probe cost for MDAM
  MDAM_PROBE_TAX,

  // set to ON to aggressively allocate ESP per core
  AGGRESSIVE_ESP_ALLOCATION_PER_CORE,

  // if ON, use older datetime value constructor in DatetimeValue::DatetimeValue
  // Default is OFF. This cqd is used in case there are problems.
  // It will be removed after testing is complete.
  USE_OLD_DT_CONSTRUCTOR,

  // real charset in the HIVE table
  HIVE_FILE_CHARSET,

  // By default only alter of varchar col length is supported.
  // If this cqd is on, then other alters (name, datatype) are also supported.
  TRAF_ALTER_COL_ATTRS,

  // Controls the behavior of upsert - MERGE, REPLACE, OPTIMAL
  TRAF_UPSERT_MODE,
  // if set, let users create system reserved names. Default is OFF.
  // This cqd should only be used to debug or if system column names are
  // REALLY needed by users.
  // Currently syskey, _salt_, _division_.
  TRAF_ALLOW_RESERVED_COLNAMES,

  // enable support for hbase tables mapped to relational traf tables
  TRAF_HBASE_MAPPED_TABLES,
  TRAF_HBASE_MAPPED_TABLES_IUD,

  //if 0, regular scanner is used. From 0.x to 1.0, percentage of regions that need to be scanned that will be done in parallel.
  //if >= 2, set a fixed number of thread, real DOP. 2.0 2 thread, 3.0 3 thread etc.
  HBASE_DOP_PARALLEL_SCANNER,

  // bitmap to control various special behavior of HIVE_SCAN
  //   // 1 : DOS FORMAT conversion on
  //     // 2 : todo
  HIVE_SCAN_SPECIAL_MODE,

  // if set, data modification check is done at runtime before running
  // a query.
  HIVE_DATA_MOD_CHECK,

  COMPILER_IDLE_TIMEOUT,

  // TINYINT cqds are added until all components can handle this datatype
  // for various actions (listed below).

  // if OFF, tinyint is not supported. It is treated as smallint.
  // if ON,  tinyint is supported as table cols and in cast stmts.
  TRAF_TINYINT_SUPPORT,

  // If ON, tinyint is supported as returned datatype from a select stmt.
  // otherwise returned as smallint.
  TRAF_TINYINT_RETURN_VALUES,

  // if ON, input params are typed as tinyint.
  // Otherwise typed as smallint.
  TRAF_TINYINT_INPUT_PARAMS,

  // if ON, spj input/output params are typed as tinyint.
  // Otherwise typed as smallint.
  TRAF_TINYINT_SPJ_SUPPORT,

  // use info from external table created on this hive table
  HIVE_USE_EXT_TABLE_ATTRS,

  // if 0, datatype error check is not done during inserts into hive tables.
  //       Invalid values may get inserted.
  // if 1, error check done, row is not inserted if conversion error,
  //       and further processing stops.
  // if 2, error check done, row is not inserted if conversion error,
  //       and further processing continues.
  // if 3, null inserted if conversion error, and processing continues.
  HIVE_INSERT_ERROR_MODE,
  
  // If ON, largeint unsigned is supported as returned datatype for a select
  // stmt, and for input params.
  // Otherwise typed as bignum
  TRAF_LARGEINT_UNSIGNED_IO,

  // If ON, boolean is supported as returned datatype for a select
  // stmt, and for input params.
  // Otherwise typed as char
  TRAF_BOOLEAN_IO,

  // if TRUE, create signed numeric literal for both +ve and -ve numbers.
  // if FALSE, create unsigned literal for +ve and signed literal for -ve nums.
  TRAF_CREATE_SIGNED_NUMERIC_LITERAL,


  TRAF_UPSERT_TO_EFF_TREE,

  // if TRUE, create tinyint literal insteadl of smallint.
  TRAF_CREATE_TINYINT_LITERAL,

  // if ON, generate object descriptor during DDL and store it in metadata.
  TRAF_STORE_OBJECT_DESC,

  // if ON, read object descriptor from metadata, if it was stored.
  TRAF_READ_OBJECT_DESC,

  ALLOW_INCOMPATIBLE_OPERATIONS, 

  // if ON: expr and renamed cols allowed in groupby/orderby expr.
  GROUP_OR_ORDER_BY_EXPR,

  // allow ORDER BY in subqueries.
  ALLOW_ORDER_BY_IN_SUBQUERIES,

  // if the schema specified in a create stmt doesn't exist, automatically
  // create it.
  TRAF_AUTO_CREATE_SCHEMA,

  // controls if sim check is to be done and where (root or leaf)
  TRAF_SIMILARITY_CHECK,

  // Common subexpressions in RelExpr trees
  CSE_DEBUG_WARNINGS,
  CSE_FOR_WITH,
  CSE_USE_TEMP,
  CSE_HIVE_TEMP_TABLE,
  CSE_PRINT_DEBUG_INFO,
  CSE_CLEANUP_HIVE_TABLES,
  CSE_CACHE_TEMP_QUERIES,


  // mode for AES_ENCRYPT/AED_DECRYPT
  BLOCK_ENCRYPTION_MODE,

  GROUP_BY_PUSH_TO_BOTH_SIDES_OF_JOIN,

  CSE_TEMP_TABLE_MAX_SIZE,
  CSE_TEMP_TABLE_MAX_MAX_SIZE,
  CSE_COMMON_KEY_PRED_CONTROL,
  CSE_PCT_KEY_COL_PRED_CONTROL,

  TRANSLATE_ERROR,
  TRANSLATE_ERROR_UNICODE_TO_UNICODE,
  INDEX_HINT_WARNINGS,

  // Operations on hive objects also register it in traf OBJECTS metadata table,
  // if not already registered. create external table, grant, upd stats, create
  // views are the current operations that also register hive objects.
  // 
  // This default is used to simulate the 
  // scenario prior to 'hive registration' change. At that time, hive objects
  // were represented by an external table. With this default set, operations
  // on hive could be created without registering them.
  // This default is for internal testing usage only and not externalized.
  HIVE_NO_REGISTER_OBJECTS,
 
  BMO_MEMORY_LIMIT_UPPER_BOUND,
  BMO_MEMORY_ESTIMATE_RATIO_CAP,

  // if OFF, binary/varbinary is not supported. It is treated as char/varchar.
  // if ON,  binary is supported as table cols and in cast stmts.
  // This is needed until binary/varbinary support is fully
  // supported and externalized.
  TRAF_BINARY_SUPPORT,

  // If ON, binary is supported as returned datatype from a select stmt,
  // otherwise returned as char/varchar.
  TRAF_BINARY_OUTPUT,

  // If ON, input params are typed as binary,
  // otherwise typed as char/varchar.
  TRAF_BINARY_INPUT,

  // if ON, spj input/output params are typed as binary.
  // Otherwise typed as char/varchar.
  TRAF_BINARY_SPJ_SUPPORT,

  // if set, cleanse output of explain text by filtering values that
  // may not be deterministic on different systems.
  // Same as explain format: options 'c'
  // Used during dev regressions to cleanse explain output.
  EXPLAIN_OPTION_C,

  // max length of hive binary datatype
  HIVE_MAX_BINARY_LENGTH,

  // Threshold when TOPN sort becomes a regular sort
  GEN_SORT_TOPN_THRESHOLD,

  // Ratio of BMO_MEMORY_LIMIT_PER_NODE_IN_MB that will be divided
  // equally across all BMO operators 
  BMO_MEMORY_EQUAL_QUOTA_SHARE_RATIO,

  EXE_MEMORY_FOR_UNPACK_ROWS_IN_MB,
  MEMORY_LIMIT_ROWSET_IN_MB,

  SUPPRESS_CHAR_LIMIT_CHECK,
 
  // Allow users to grant privileges to roles using the With Grant Option
  ALLOW_WGO_FOR_ROLES,

  BMO_MEMORY_ESTIMATE_OUTLIER_FACTOR,

  // Use the earlier implementation of Hdfs access including LOB via libhdfs
  USE_LIBHDFS,

  // if set, make primary key columns non-nullable. ANSI specification.
  // Default is ON.
  TRAF_MAKE_PKEY_COLUMNS_NOT_NULL,

  // if ON and there are dependent objects on the table, then
  // create unique constraint instead of clustered primary key.
  //
  // Otherwise return error. Users will need to drop dependent objects and
  // then recreate them after adding the primary key.
  // Default is OFF.
  TRAF_ALTER_ADD_PKEY_AS_UNIQUE_CONSTRAINT,

  // if set, do not drop or create hbase objects.
  // Internal cqd. Used during pkey alter/add
  TRAF_NO_HBASE_DROP_CREATE,

  // if set, ddl from Traf interface on Hive objects is supported.
  TRAF_DDL_ON_HIVE_OBJECTS,

  // If set to TRUE, CTAS on Hive object(Create and Insert...select) is processed in Hive.
  // If set to FALSE, Create is done in Hive, and Insert...select is done in Traf.
  // Default is OFF.
  HIVE_CTAS_IN_NATIVE_MODE,

  // Size of byte[] in java when direct byteBuffer can't be used
  // Used to read compressed hdfs text files and to write
  // both compressed and uncompressed hdfs files
  HDFS_IO_INTERIM_BYTEARRAY_SIZE_IN_KB,
  // Use BLOB column in LIBRARIES tables to store libraries.
  USE_LIB_BLOB_STORE,

  // When creating a Trafodion table like a partitioned Hive table
  // use NO NULL attribute for partitin columns
  HIVE_CREATE_TABLE_LIKE_PARTITION_NO_NULL,

  CANCEL_QUERY_ALLOWED,

  // Determines if a transaction needs to be started for select
  // 0 - No transactions for SELECT
  // 1 - Transaction started for SELECT .. FOR UPDATE
  // 2 - Transaction started for SELECT with isolaton level other than skip conflict access 
  BEGIN_TRANSACTION_FOR_SELECT, 

  // This enum constant must be the LAST one in the list; it's a count,
  // not an Attribute (it's not IN DefaultDefaults; it's the SIZE of it)!
  __NUM_DEFAULT_ATTRIBUTES
};


//////////////////////////////////////////////////////////////////////
// options to be used with QUERY_OPTIMIZATION_OPTIONS CQD
//
//////////////////////////////////////////////////////////////////////
enum QueryOptimizationOptions
{
  QO_NO_OPT = 0x0000,
  QO_EXPR_OPT = 0x0001,
  QO_PARAM_NULLABILITY_OPT = 0x0002,
  QO_LEAN_EXEINDP2_FROM_JDBC_OPT = 0x0004,
  QO_LEAN_EXEINDP2_FROM_EMB_OPT = 0x0008,
  QO_LEAN_EXEINMASTER_OPT = 0x0010,
  QO_OLT_WAITED_OPT = 0x0020,
  QO_DO_NT_OLT_OPT = 0x0040
};


// ***************************************************************************
// ***************************************************************************
//
// HAVE YOU READ THE NOTE ABOVE THIS ENUM DECLARATION????
//
// ***************************************************************************
// ***************************************************************************


// Defaults Tokens
// There is a set of keywords which can appear as values of Defaults entries
// in the Defaults Table.  We declare, for each such token, a string (the
// keyword), and an enumeration value.  The string values belong in an
// array, DFkeywords, in sorted order.  The idea is we can use binary
// search in order to obtain the index of a string to the matching
// entry in this sorted array.
//
// If we define the enumerations carefully (pay attention here!), then
// that index we just found (see previous paragraph) is the enum value
// of the token.

// These enums and the strings, below, had *BETTER* be declared in the
// SAME order, and that order *BETTER BE* alphabetical!

// In simple words: this has to be in identical order with enum
// NADefaults::keywords_ in nadefaults.cpp


enum DefaultToken {
 DF_noSuchToken = -1,	// Negative; not in DFkeywords array
 DF_ACCUMULATED,
 DF_ADVANCED,
 DF_AGGRESSIVE,
 DF_ALL,
 DF_ANSI,
 DF_BEGINNER,
 DF_BOTH,
 DF_CLEAR,
 DF_DEBUG,
 DF_DISK,
 DF_DISK_POOL,
 DF_DUMP,
 DF_DUMP_MV,
 DF_EXTERNAL,
 DF_EXTERNAL_DETAILED,
 DF_FIRSTROW,
 DF_HARDWARE,
 DF_HEAP,
 DF_HIGH,
 DF_HYBRID,
 DF_IEEE,
 DF_INDEXES,
 DF_INTERNAL,
 DF_IQS,
 DF_JNI,
 DF_JNI_TRX,
 DF_KEYINDEXES,
 DF_LASTROW,
 DF_LATEST,
 DF_LEAF,
 DF_LOADNODUP,
 DF_LOCAL,
 DF_LOCAL_NODE,
 DF_LOG,
 DF_MAXIMUM,
 DF_MEDIUM,
 DF_MEDIUM_LOW,
 DF_MERGE,
 DF_MINIMUM,
 DF_MMAP,
 DF_MULTI_NODE,
 DF_MVCC,
 DF_NONE,
 DF_OFF,
 DF_ON,
 DF_OPENS_FOR_WRITE,
 DF_OPERATOR,
 DF_OPTIMAL,
 DF_ORDERED,
 DF_PERTABLE,
 DF_PRINT,
 DF_PRIVATE,
 DF_PUBLIC,
 DF_QS,
 DF_READ_COMMITTED,
 DF_READ_UNCOMMITTED,
 DF_RELEASE,
 DF_REMOTE,
 DF_REPEATABLE_READ,
 DF_REPLACE,
 DF_REPSEL,
 DF_RESOURCES,
 DF_RETURN,
 DF_ROOT,
 DF_SAMPLE,
 DF_SERIALIZABLE,
 DF_SHORTANSI,
 DF_SIMPLE,
 DF_SKIP,
 DF_SMD,
 DF_SOFTWARE,
 DF_SOURCE,
 DF_SQLMP,
 DF_SSCC,
 DF_SSD,
 DF_STOP,
 DF_SUFFIX,
 DF_SYSTEM,
 DF_TANDEM,
 DF_THRIFT,
 DF_USER,
 DF_VERTICAL,
 DF_WAIT,
 DF_WARN,
 DF_XML,
 DF_lastToken,
    // Synonyms must NOT be (and are not) present
    // in the DFkeywords array in the .cpp file!
    DF_COMPAQ	= DF_TANDEM,
    DF_DISABLE	= DF_OFF,	// Notice that DISABLE = OFF, but
    DF_ENABLE 	= DF_SYSTEM,	// ENABLE means let the SYSTEM provide the value
    DF_FALSE  	= DF_OFF,
    DF_FULL	= DF_MAXIMUM,
    DF_TRUE   	= DF_ON
};

#endif // DEFAULTCONSTANTS_H
