Query Optimization State

During the Optimization state, the server is in the initial process of constructing a query plan. The server collects schema information and some preliminary statistical information.

The [_enter_state], _describe_extfn, and [_leave_state] methods are called. The _enter_state and _leave_state methods are optional, and called if provided by the UDF.

The query optimization state is represented in the v4 API by EXTFNAPIV4_STATE_OPTIMIZATION from the a_v4_extfn_state enumeration:
typedef enum a_v4_extfn_state {
    … EXTFNAPIV4_STATE_OPTIMIZATION, …
} a_v4_extfn_state;
Negotiations during the query optimization state include:
In the Optimization state, UDFs have access to describe attributes:

Related reference
DEFAULT_TABLE_UDF_ROW_COUNT Option
EXTFNAPIV4_DESCRIBE_PARM_NAME Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_NAME Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TYPE Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TYPE Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_WIDTH Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_WIDTH Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_SCALE Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_SCALE Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_IS_CONSTANT Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_IS_CONSTANT Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_CONSTANT_VALUE Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_CONSTANT_VALUE Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_COLUMNS Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_COLUMNS Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_ROWS Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_ROWS Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_ORDERBY Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_ORDERBY Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_PARTITIONBY (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_PARTITIONBY (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_REQUEST_REWIND Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_REQUEST_REWIND Attribute (Set)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_HAS_REWIND Attribute (Get)
EXTFNAPIV4_DESCRIBE_PARM_TABLE_HAS_REWIND Attribute (Set)
EXTFNAPIV4_DESCRIBE_COL_NAME (Get)
EXTFNAPIV4_DESCRIBE_COL_NAME (Set)
EXTFNAPIV4_DESCRIBE_COL_TYPE (Get)
EXTFNAPIV4_DESCRIBE_COL_TYPE (Set)
EXTFNAPIV4_DESCRIBE_COL_WIDTH (Get)
EXTFNAPIV4_DESCRIBE_COL_WIDTH (Set)
EXTFNAPIV4_DESCRIBE_COL_SCALE (Get)
EXTFNAPIV4_DESCRIBE_COL_SCALE (Set)
EXTFNAPIV4_DESCRIBE_COL_CAN_BE_NULL (Get)
EXTFNAPIV4_DESCRIBE_COL_CAN_BE_NULL (Set)
EXTFNAPIV4_DESCRIBE_COL_IS_CONSTANT (Get)
EXTFNAPIV4_DESCRIBE_COL_IS_CONSTANT (Set)
EXTFNAPIV4_DESCRIBE_COL_CONSTANT_VALUE (Get)
EXTFNAPIV4_DESCRIBE_COL_CONSTANT_VALUE (Set)
EXTFNAPIV4_DESCRIBE_COL_IS_USED_BY_CONSUMER (Get)
EXTFNAPIV4_DESCRIBE_COL_IS_USED_BY_CONSUMER (Set)
EXTFNAPIV4_DESCRIBE_COL_VALUES_SUBSET_OF_INPUT (Get)
EXTFNAPIV4_DESCRIBE_COL_VALUES_SUBSET_OF_INPUT (Set)