You are viewing a plain text version of this content. The canonical link for it is here.
Posted to codereview@trafodion.apache.org by selvaganesang <gi...@git.apache.org> on 2017/12/08 23:55:43 UTC
[GitHub] incubator-trafodion pull request #1311: [TRAFODION-2818] For Server 2008, fu...
Github user selvaganesang commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/1311#discussion_r155901708
--- Diff: win-odbc64/odbcclient/drvr35/sqltocconv.cpp ---
@@ -36,6 +36,34 @@
#define MAXCHARLEN 32768 //32K
+// for server2008 when using function pow() then throws STATUS_ILLEGAL_INSTRUCTION
+__int64 pow(int base, short scale)
+{
+ DWORD dwVersion = 0;
+ DWORD dwBuild = 0;
+
+ dwVersion = GetVersion();
+
+ // Get the build number.
+
+ if (dwVersion < 0x80000000)
+ dwBuild = (DWORD)(HIWORD(dwVersion));
+
+ __int64 retValue = 1;
+ if (dwBuild == 7600)
+ {
+ scale = scale > 18 ? 18 : scale;
+ for (int i = 0; i < scale; i++)
+ retValue = retValue * 10;
+ }
+ else
+ {
+ retValue = pow((double)base, scale);
--- End diff --
I would suggest to retain double data type for return type to enable a large result to be accommodated without raising numeric overflow. Hence, I would suggest Trafodion function can have an extra parameter like to pass the errno as in
double pow (double base, double exponent, int *error)
Pass the errno to be returned to the caller for it handle it. This would also take care of any ambiguity in resolution of the method
---