<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://reviewboard.asterisk.org/r/3335/">https://reviewboard.asterisk.org/r/3335/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On March 17th, 2014, 9:28 a.m. UTC, <b>wdoekes</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">So, the changes look good. But that regression thing is .. not so nice.
For trunk and up, we could change the behaviour. But we can't for 1.8..12.
The options are:
- leave the bug in place, only fix in trunk
- change the behaviour mid-release
- check which database we're using during connect-time
For that last option, we could use this:
mysql> select cast('' as decimal) as num;
+-----+
| num |
+-----+
| 0 |
+-----+
postgres=> select cast('' as decimal) as num;
ERROR: invalid input syntax for type numeric: ""
LINE 1: select cast('' as decimal) as num;
And hope that this extra query doesn't cause any regressions anywhere.
And then we'd have to choose between keeping this behaviour in trunk or "fixing" it to write NULLs when dealing with numeric types.
My vote:
- add the above check or any other which consistently declares how the database reacts
- apply this patch to trunk (removing the check again)
But a second opinion would be nice.</pre>
</blockquote>
<p>On March 17th, 2014, 11:19 a.m. UTC, <b>zvision</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I have uploaded a patch for trunk version. Please see my comments attached to the patch.
Another option for non-trunk versions would be to introduce some config variable to avoid the check
on every connnect. But I guess it is not an elegant solution anyway.</pre>
</blockquote>
<p>On March 18th, 2014, 2:46 p.m. UTC, <b>zvision</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Actually, having a config option in res_odbc (something like backslash_is_escape) may be not so bad:
- by default it would be disabled, not changing the current behavior,
- enabling it would give a chance to PostgreSQL (and maybe other RDBMSes) users to run realtime SIP peers with no problems
(I know they could have defined columns as text, but sample configurations provided use integers),
- a SELECT CAST check is not neccessary - it will generate errors in database logs which may be confusing
and may have other side effect we are not aware of.</pre>
</blockquote>
<p>On March 18th, 2014, 3:39 p.m. UTC, <b>wdoekes</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I'm down with a patch that adds an option for that.</pre>
</blockquote>
<p>On March 18th, 2014, 3:55 p.m. UTC, <b>zvision</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Great, I will prepare a patch and submit it with another review request.
Any votes for the option name? Maybe:
nullable_columns,
null_support,
enable_null,
enable_null_values?</pre>
</blockquote>
<p>On March 18th, 2014, 4:14 p.m. UTC, <b>wdoekes</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I do have an opinion about that.
Since MySQL is usually the odd one here, the option should reflect that.
Something like this:
allow_empty_string_in_nontext = yes ; mysql compatability default, set to no for more strict databases
That should hopefully not give someone ideas that full NULL-support is now an option.</pre>
</blockquote>
</blockquote>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">*compatibility</pre>
<br />
<p>- wdoekes</p>
<br />
<p>On March 17th, 2014, 11:12 a.m. UTC, zvision wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for Asterisk Developers.</div>
<div>By zvision.</div>
<p style="color: grey;"><i>Updated March 17, 2014, 11:12 a.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23459">ASTERISK-23459</a>
</div>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
Asterisk
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This patch fixes setting nullable integer columns to NULL instead of an empty string, which fails for PostgreSQL, for example.
The current code is supposed to do so, but the check is broken. The patch also allows the first column in the list to be a nullable integer.
Also, the check for existence of a mandatory column checked for the first column in the list instead of the key field lookup column.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Tested by me. Use case scenario: Asterisk + res_odbc + PostgreSQL backend, SIP realtime peers + regs.
When a 'port' column in SIP regs (I assume this also applies when using sippeers only) is a nullable integer,
Asterisk tries to write an empty string here during SIP endpoint deregistration.</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>http://svn.asterisk.org/svn/asterisk/trunk/res/res_config_odbc.c <span style="color: grey">(410663)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/3335/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>