Files
oceanbase/src/sql/optimizer/ob_join_property.map
wangzelin.wzl 93a1074b0c patch 4.0
2022-10-24 17:57:12 +08:00

431 lines
10 KiB
Plaintext

/**
* 注意点!!!
* 为了可以直接使用join_type枚举类型,这里的表格列举了所有类型
* 的join,但是实际只使用了left style join去生成冲突检测器
* 所有的right style join默认不符合所有的规则
*/
/**
* 定义join类型的交换律
*/
static bool COMM_PROPERTY[MAX_JOIN_TYPE] =
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
true, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
};
/**
* 定义join类型的结合律
*/
static bool ASSOC_PROPERTY[MAX_JOIN_TYPE][MAX_JOIN_TYPE] = {
//UNKNOWN_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//INNER_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
true, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
true, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//FULL_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
true, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//CONNECT_BY_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
}
};
/**
* 定义join类型的l-asscom规律
*/
static bool L_ASSCOM_PROPERTY[MAX_JOIN_TYPE][MAX_JOIN_TYPE] = {
//UNKNOWN_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//INNER_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
true, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
true, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
true, // FULL_OUTER_JOIN
true, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
true, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//FULL_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
true, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
true, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
true, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
true, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
true, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
true, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//CONNECT_BY_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
}
};
/**
* 定义join类型的r-asscom规律
*/
static bool R_ASSCOM_PROPERTY[MAX_JOIN_TYPE][MAX_JOIN_TYPE] = {
//UNKNOWN_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//INNER_JOIN
{
false, // UNKNOWN_JOIN
true, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//FULL_OUTER_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
true, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_SEMI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//LEFT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//RIGHT_ANTI_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
},
//CONNECT_BY_JOIN
{
false, // UNKNOWN_JOIN
false, // INNER_JOIN
false, // LEFT_OUTER_JOIN
false, // RIGHT_OUTER_JOIN
false, // FULL_OUTER_JOIN
false, // LEFT_SEMI_JOIN
false, // RIGHT_SEMI_JOIN
false, // LEFT_ANTI_JOIN
false, // RIGHT_ANTI_JOIN
false // CONNECT_BY_JOIN
}
};