Bugs item #2861084, was opened at 2009-09-17 18:26 Message generated for change (Tracker Item Submitted) made by kkheller You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=462816&aid=2861084&group_id=51305
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: Subversion TRUNK Status: Open Resolution: None Priority: 5 Private: No Submitted By: Kelly Heller (kkheller) Assigned to: Nobody/Anonymous (nobody) Summary: [DatabaseLayer] type-related errors are ignored in mysql Initial Comment: I just submitted a diff/patch that helps clarify what I am talking about in this bug report. Please view the patch before reading this. The patch is here: https://sourceforge.net/tracker/?func=detail&aid=2861075&group_id=51305&atid=462818 I have some fairly involved SQL queries that I use in my application. They go beyond a simple "select x from y where z = w". I am using many functions and features of SQL, but I believe the reason that I came across what I call "silent failures" inside the code for MysqlPreparedStatementResultSet is that I am using the "IF" function and the "MAX" aggregate function. One of my queries looks like this: SELECT IF ( kp.client_date > some_boundary_date1, IF ( kp.client_date < some_boundary_date2, kp.client_date , some_special_date ), some_special_date) as result_field1, XXXXX as result_field2, YYYYY as result_field3 FROM ....... I had thought that "result_field1" would be returned as a date. I thought it would be a date because all of the columns and values involved within the nested "if" clauses are all of type DATETIME. So, it turns out that I thought wrong about that. But when I called the function DatabaseResultSet::GetResultDate I would have expected to have at least received a warning, an assert, something. What the code actually did inside MysqlPreparedStatementResultSet::GetResultDate was to just go ahead and cast the result buffer to a (MYSQL_TIME*). It does not seem safe to just perform this C-style cast to (MYSQL_TIME*) unequivocally, especially since it is easy to quickly verify the type of the buffer. (Refer to the patch I submitted at https://sourceforge.net/tracker/?func=detail&aid=2861075&group_id=51305&atid=462818 ) Something similar happened to a query I am using that calls the Aggregate Function MAX. I am applying MAX to a column that is of type integer, and the column is also non-nullable, so I know that the MAX function is operating purely on integer values. Therefore, I thought the returned value would be an integer, and so I called DatabaseResultSet::GetResultInt. However, inside MysqlPreparedStatementResultSet::GetResultInt , the buffer type returned from mysql was **not** MYSQL_TYPE_LONG (or anything else that is listed in the switch statement). The buffer type is MYSQL_TYPE_NEWDECIMAL. Because MYSQL_TYPE_NEWDECIMAL is not handled in the switch statement inside MysqlPreparedStatementResultSet::GetResultInt, the function returned 0 to me as the result of GetResultInt. I think that it should at least throw an assert when the buffer is type MYSQL_TYPE_NEWDECIMAL. The fact that it returns 0 without indicating any error or any anomaly is very misleading. It would seem that the query simply returned 0. I have been a heavy user of "wxWidgets Proper" for a couple years. (what I mean by "wxWidgets Proper" is to clarify that I am talking about what is on wxwidgets.org and not anything on wxcode.sourceforge.net.) A couple patches of mine have even been accepted into wxWidgets Proper. However, I am completely new to wxCode. So far, DatabaseLayer is the first of any of the wxCode components that I have interacted with. Perhaps wxCode developers have a different practice in regards to using wxFAIL and wxASSERT ? Maybe there is a reason why I do not see any usage of wxFAIL or wxASSERT inside DatabaseLayer? Is anything preventing your developers from enabling debug-only assertion code? The wxWidgets book recommends using wxASSERT in Chapter 15: Memory Management, Debugging, and Error Checking. wxWidgets Proper uses assert messages quite heavily, and I have found their assert messages to be VERY helpful ! I would love to see more assertions inside of DatabaseLayer. Is this possible? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=462816&aid=2861084&group_id=51305 ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ wxCode-users mailing list wxCode-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wxcode-users