Github user traflm commented on a diff in the pull request: https://github.com/apache/trafodion/pull/1444#discussion_r168649121 --- Diff: core/sql/exp/exp_function.cpp --- @@ -2501,6 +2518,100 @@ ex_expr::exp_return_type ExFunctionReverseStr::eval(char *op_data[], return ex_expr::EXPR_OK; }; +ex_expr::exp_return_type ex_function_sleep::eval(char *op_data[], + CollHeap* heap, + ComDiagsArea** diagsArea) +{ + Int32 sec = 0; + switch (getOperand(1)->getDatatype()) + { + case REC_BIN8_SIGNED: + sec = *(Int8 *)op_data[1] ; + if(sec < 0 ) + { + ExRaiseSqlError(heap, diagsArea, EXE_BAD_ARG_TO_MATH_FUNC); + *(*diagsArea) << DgString0("SLEEP"); + return ex_expr::EXPR_ERROR; + } + sleep(sec); + *(Int64 *)op_data[0] = 1; + break; + + case REC_BIN16_SIGNED: + sec = *(short *)op_data[1] ; + if(sec < 0 ) + { + ExRaiseSqlError(heap, diagsArea, EXE_BAD_ARG_TO_MATH_FUNC); + *(*diagsArea) << DgString0("SLEEP"); + return ex_expr::EXPR_ERROR; + } + sleep(sec); + *(Int64 *)op_data[0] = 1; + break; + + case REC_BIN32_SIGNED: + *(Lng32 *)sec = labs(*(Lng32 *)op_data[1]); + if(sec < 0 ) + { + ExRaiseSqlError(heap, diagsArea, EXE_BAD_ARG_TO_MATH_FUNC); + *(*diagsArea) << DgString0("SLEEP"); + return ex_expr::EXPR_ERROR; + } + sleep(sec); + *(Int64 *)op_data[0] = 1; + break; + + case REC_BIN64_SIGNED: + sec = *(Int64 *)op_data[1]; + if(sec < 0 ) + { + ExRaiseSqlError(heap, diagsArea, EXE_BAD_ARG_TO_MATH_FUNC); + *(*diagsArea) << DgString0("SLEEP"); + return ex_expr::EXPR_ERROR; + } + sleep(sec); + *(Int64 *)op_data[0] = 1; + break; + + default: + ExRaiseSqlError(heap, diagsArea, EXE_BAD_ARG_TO_MATH_FUNC); + *(*diagsArea) << DgString0("SLEEP"); + return ex_expr::EXPR_ERROR; + break; + } + //get the seconds to sleep + return ex_expr::EXPR_OK; +} + +ex_expr::exp_return_type ex_function_unixtime::eval(char *op_data[], + CollHeap* heap, + ComDiagsArea** diagsArea) +{ + char *opData = op_data[1]; + //if there is input value + if(opData[0] != 0 && getNumOperands() == 2) + { + struct tm* ptr; + char* r = strptime(opData, "%Y-%m-%d %H:%M:%S", ptr); + if( r == NULL) --- End diff -- Thanks Dave, you are correct. We want to be very strict here. I will add this checking.
---