From: <asf...@us...> - 2011-02-03 14:51:56
|
Revision: 52285 http://firebird.svn.sourceforge.net/firebird/?rev=52285&view=rev Author: asfernandes Date: 2011-02-03 14:51:50 +0000 (Thu, 03 Feb 2011) Log Message: ----------- Fixed CORE-3201 - ATAN2 returns incorrect value for (0, 0). Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/msgs.h firebird/trunk/src/include/gen/sql_code.h firebird/trunk/src/include/gen/sql_state.h firebird/trunk/src/jrd/SysFunction.cpp firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-02-03 14:51:50 UTC (rev 52285) @@ -1458,6 +1458,8 @@ PARAMETER (GDS__cannot_copy_stmt = 335545022) INTEGER*4 GDS__invalid_boolean_usage PARAMETER (GDS__invalid_boolean_usage = 335545023) + INTEGER*4 GDS__sysf_argscant_both_be_zero + PARAMETER (GDS__sysf_argscant_both_be_zero = 335545024) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/lang_helpers/gds_codes.pas 2011-02-03 14:51:50 UTC (rev 52285) @@ -736,6 +736,7 @@ gds_bad_events_handle = 335545021; gds_cannot_copy_stmt = 335545022; gds_invalid_boolean_usage = 335545023; + gds_sysf_argscant_both_be_zero = 335545024; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/include/gen/codetext.h 2011-02-03 14:51:50 UTC (rev 52285) @@ -725,6 +725,7 @@ {"bad_events_handle", 335545021}, {"cannot_copy_stmt", 335545022}, {"invalid_boolean_usage", 335545023}, + {"sysf_argscant_both_be_zero", 335545024}, {"gfix_db_name", 335740929}, {"gfix_invalid_sw", 335740930}, {"gfix_incmp_sw", 335740932}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/include/gen/iberror.h 2011-02-03 14:51:50 UTC (rev 52285) @@ -759,6 +759,7 @@ const ISC_STATUS isc_bad_events_handle = 335545021L; const ISC_STATUS isc_cannot_copy_stmt = 335545022L; const ISC_STATUS isc_invalid_boolean_usage = 335545023L; +const ISC_STATUS isc_sysf_argscant_both_be_zero = 335545024L; const ISC_STATUS isc_gfix_db_name = 335740929L; const ISC_STATUS isc_gfix_invalid_sw = 335740930L; const ISC_STATUS isc_gfix_incmp_sw = 335740932L; @@ -1177,7 +1178,7 @@ const ISC_STATUS isc_trace_switch_param_miss = 337182758L; const ISC_STATUS isc_trace_param_act_notcompat = 337182759L; const ISC_STATUS isc_trace_mandatory_switch_miss = 337182760L; -const ISC_STATUS isc_err_max = 1121; +const ISC_STATUS isc_err_max = 1122; #else /* c definitions */ @@ -1906,6 +1907,7 @@ #define isc_bad_events_handle 335545021L #define isc_cannot_copy_stmt 335545022L #define isc_invalid_boolean_usage 335545023L +#define isc_sysf_argscant_both_be_zero 335545024L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -2324,7 +2326,7 @@ #define isc_trace_switch_param_miss 337182758L #define isc_trace_param_act_notcompat 337182759L #define isc_trace_mandatory_switch_miss 337182760L -#define isc_err_max 1121 +#define isc_err_max 1122 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/include/gen/msgs.h 2011-02-03 14:51:50 UTC (rev 52285) @@ -728,6 +728,7 @@ {335545021, "invalid events id (handle)"}, /* bad_events_handle */ {335545022, "Cannot copy statement @1"}, /* cannot_copy_stmt */ {335545023, "Invalid usage of boolean expression"}, /* invalid_boolean_usage */ + {335545024, "Arguments for @1 cannot both be zero"}, /* sysf_argscant_both_be_zero */ {335740929, "data base file name (@1) already given"}, /* gfix_db_name */ {335740930, "invalid switch @1"}, /* gfix_invalid_sw */ {335740932, "incompatible switch combination"}, /* gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/include/gen/sql_code.h 2011-02-03 14:51:50 UTC (rev 52285) @@ -724,6 +724,7 @@ {335545021, -901}, /* 701 bad_events_handle */ {335545022, -104}, /* 702 cannot_copy_stmt */ {335545023, -104}, /* 703 invalid_boolean_usage */ + {335545024, -833}, /* 704 sysf_argscant_both_be_zero */ {335740929, -901}, /* 1 gfix_db_name */ {335740930, -901}, /* 2 gfix_invalid_sw */ {335740932, -901}, /* 4 gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/include/gen/sql_state.h 2011-02-03 14:51:50 UTC (rev 52285) @@ -724,6 +724,7 @@ {335545021, "08003"}, // 701 bad_events_handle {335545022, "XX000"}, // 702 cannot_copy_stmt {335545023, "22000"}, // 703 invalid_boolean_usage + {335545024, "42000"}, // 704 sysf_argscant_both_be_zero {335740929, "00000"}, // 1 gfix_db_name {335740930, "00000"}, // 2 gfix_invalid_sw {335740932, "00000"}, // 4 gfix_incmp_sw Modified: firebird/trunk/src/jrd/SysFunction.cpp =================================================================== --- firebird/trunk/src/jrd/SysFunction.cpp 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/jrd/SysFunction.cpp 2011-02-03 14:51:50 UTC (rev 52285) @@ -1072,7 +1072,7 @@ if (!v) { status_exception::raise(Arg::Gds(isc_expression_eval_err) << - Arg::Gds(isc_sysf_argmustbe_nonzero) << Arg::Str(function->name));; + Arg::Gds(isc_sysf_argmustbe_nonzero) << Arg::Str(function->name)); } rc = fbcot(v); break; @@ -1235,22 +1235,31 @@ } -dsc* evlAtan2(thread_db* tdbb, const SysFunction*, const NestValueArray& args, +dsc* evlAtan2(thread_db* tdbb, const SysFunction* function, const NestValueArray& args, impure_value* impure) { fb_assert(args.getCount() == 2); jrd_req* request = tdbb->getRequest(); - const dsc* value1 = EVL_expr(tdbb, request, args[0]); - if (request->req_flags & req_null) // return NULL if value1 is NULL + const dsc* desc1 = EVL_expr(tdbb, request, args[0]); + if (request->req_flags & req_null) // return NULL if desc1 is NULL return NULL; - const dsc* value2 = EVL_expr(tdbb, request, args[1]); - if (request->req_flags & req_null) // return NULL if value2 is NULL + const dsc* desc2 = EVL_expr(tdbb, request, args[1]); + if (request->req_flags & req_null) // return NULL if desc2 is NULL return NULL; - impure->vlu_misc.vlu_double = atan2(MOV_get_double(value1), MOV_get_double(value2)); + double value1 = MOV_get_double(desc1); + double value2 = MOV_get_double(desc2); + + if (value1 == 0 && value2 == 0) + { + status_exception::raise(Arg::Gds(isc_expression_eval_err) << + Arg::Gds(isc_sysf_argscant_both_be_zero) << Arg::Str(function->name)); + } + + impure->vlu_misc.vlu_double = atan2(value1, value2); impure->vlu_desc.makeDouble(&impure->vlu_misc.vlu_double); return &impure->vlu_desc; Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/msgs/facilities2.sql 2011-02-03 14:51:50 UTC (rev 52285) @@ -1,7 +1,7 @@ /* MAX_NUMBER is the next number to be used, always one more than the highest message number. */ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES (?, ?, ?, ?); -- -('2010-12-17 23:46:00', 'JRD', 0, 704) +('2011-02-02 12:45:00', 'JRD', 0, 705) ('2010-03-15 06:59:09', 'QLI', 1, 531) -- --('2008-11-28 20:27:04', 'GDEF', 2, 346) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/msgs/messages2.sql 2011-02-03 14:51:50 UTC (rev 52285) @@ -811,6 +811,7 @@ ('bad_events_handle', NULL, NULL, NULL, 0, 701, NULL, 'invalid events id (handle)', NULL, NULL); ('cannot_copy_stmt', NULL, NULL, NULL, 0, 702, NULL, 'Cannot copy statement @1', NULL, NULL); ('invalid_boolean_usage', NULL, NULL, NULL, 0, 703, NULL, 'Invalid usage of boolean expression', NULL, NULL); +('sysf_argscant_both_be_zero', 'evlAtan2', 'SysFunction.cpp', NULL, 0, 704, NULL, 'Arguments for @1 cannot both be zero', NULL, NULL) -- QLI (NULL, NULL, NULL, NULL, 1, 0, NULL, 'expected type', NULL, NULL); (NULL, NULL, NULL, NULL, 1, 1, NULL, 'bad block type', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2011-02-03 13:05:45 UTC (rev 52284) +++ firebird/trunk/src/msgs/system_errors2.sql 2011-02-03 14:51:50 UTC (rev 52285) @@ -709,6 +709,7 @@ (-901, '08', '003', 0, 701, 'bad_events_handle', NULL, 'ERROR') (-104, 'XX', '000', 0, 702, 'cannot_copy_stmt', NULL, NULL) (-104, '22', '000', 0, 703, 'invalid_boolean_usage', NULL, NULL) +(-833, '42', '000', 0, 704, 'sysf_argscant_both_be_zero', NULL, NULL) -- GFIX (-901, '00', '000', 3, 1, 'gfix_db_name', NULL, NULL) (-901, '00', '000', 3, 2, 'gfix_invalid_sw', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |