diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index 8a3b24082..43d36a0a6 100755 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -1606,7 +1606,7 @@ SimpleColumn* buildSimpleColFromDerivedTable(gp_walk_info& gwi, Item_field* ifp) // outer join inner table filter can not be moved in // MariaDB 10.1: cached_table is never available for derived tables. // Find the uncached object in table_list - TABLE_LIST* tblList = ifp->context->table_list; + TABLE_LIST* tblList = ifp->context ? ifp->context->table_list : NULL; while (tblList) { if (strcasecmp(tblList->alias, ifp->table_name) == 0) diff --git a/utils/funcexp/func_nullif.cpp b/utils/funcexp/func_nullif.cpp index 3ab91b95d..4123faee7 100644 --- a/utils/funcexp/func_nullif.cpp +++ b/utils/funcexp/func_nullif.cpp @@ -95,11 +95,14 @@ int64_t Func_nullif::getIntVal(rowgroup::Row& row, if (parm[0]->data()->resultType().colDataType == execplan::CalpontSystemCatalog::DATETIME) { - // If we're comparing to a datetime field, promote. - exp2 = parm[0]->data()->getDatetimeIntVal(row, isNull); + // NULLIF arg0 is DATETIME, arg1 is DATE, + // Upgrade arg1 to datetime + exp2 = parm[1]->data()->getDatetimeIntVal(row, isNull); } else { + // NULLIF arg0 is not DATETIME (might be date), arg1 is not DATE + // Use arg1 as DATE exp2 = parm[1]->data()->getDateIntVal(row, isNull); } @@ -117,6 +120,8 @@ int64_t Func_nullif::getIntVal(rowgroup::Row& row, if (parm[0]->data()->resultType().colDataType == execplan::CalpontSystemCatalog::DATE) { + // NULLIF arg0 is DATE, arg1 is DATETIME, + // Upgrade arg1 to datetime // When comparing exp1 as a Date, we can't simply promote. We have // to be careful of the return value in case of not null return. int64_t exp1 = parm[0]->data()->getDatetimeIntVal(row, isNull);