[GitHub] trafodion pull request #1444: [TRAFODION-2157] add MySQL function unix_times...

2018-02-15 Thread traflm
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.


---


[GitHub] trafodion pull request #1444: [TRAFODION-2157] add MySQL function unix_times...

2018-02-15 Thread DaveBirdsall
Github user DaveBirdsall commented on a diff in the pull request:

https://github.com/apache/trafodion/pull/1444#discussion_r168606746
  
--- 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 --

Should we also test for *r pointing to a null character? See the man page 
for strptime. If there is garbage data after the seconds field, r will point to 
the first byte of the garbage. I'm guessing we want to raise an error in that 
case.  Consider a test of the form "if ((r == NULL) || (*r != '\0'))" 


---


[GitHub] trafodion pull request #1444: [TRAFODION-2157] add MySQL function unix_times...

2018-02-14 Thread traflm
GitHub user traflm opened a pull request:

https://github.com/apache/trafodion/pull/1444

[TRAFODION-2157] add MySQL function unix_timestamp,uuid,sleep

This is to add three MySQL compatible functions into Trafodion. 
It is required for another JIRA to add unix_timestamp, uuid as default 
value of a column definition.
sleep is simple to add, so add with this change as well.
The document will be updated for a separate JIRA asap.

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/traflm/trafodion TRAFODION-2157

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/trafodion/pull/1444.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #1444


commit dbe4cac9c8e58c8dc9c6b86b5c473320df5c44c3
Author: Liu Ming 
Date:   2018-02-14T08:57:58Z

[TRAFODION-2157] add MySQL function unix_timestamp,uuid,sleep

commit 3555983cdeb03059277913babd646400f5f319ff
Author: Liu Ming 
Date:   2018-02-14T08:58:30Z

Merge branch 'master' of git://git.apache.org/trafodion into TRAFODION-2157

commit 3c6bce6e10e8f319bcdeffa272ffc4ac31a74f48
Author: Liu Ming 
Date:   2018-02-14T21:51:10Z

[TRAFODION-2157] fix various issues




---