[
https://issues.apache.org/jira/browse/DERBY-1620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12501730
]
A B commented on DERBY-1620:
----------------------------
Hi John,
Thank you for following through with my previous review comments, and for
rewriting your test cases to run in JUnit. That was very helpful.
Just a few minor comments on the latest patch:
1 - The Java class name at the top of the license header in the new JUnit test
says "NullIfTest", when it should say "CaseExpressionTest".
2 - There are a few unnecessary imports in CaseExpressionTest:
java.sql.Date
java.sql.PreparedStatement
java.sql.Time
java.sql.Timestamp
org.apache.derbyTesting.junit.JDBC
3 - In the "suite()" method I think it might be good to use existing
convenience methods on TestConfiguration, instead of calling "baseSuite"
directly. Ex:
// For embedded:
suite.addTest(
TestConfiguration.embeddedSuite(CaseExpressionTest.class));
// For client/server:
suite.addTest(
TestConfiguration.clientServerSuite(CaseExpressionTest.class));
// For both embedded *and* client/server:
suite.addTest(
TestConfiguration.defaultSuite(CaseExpressionTest.class));
That said, since the changes for Jira only effect SQL processing within the
engine, it's probably good enough to just run the new JUnit test in embedded
mode.
4 - There are several System.out.printlns in the test. I think that the
preferred approach to JUnit testing is to avoid printing anything to System.out
or System.err. If the output is an important part of the test then is should
be replaced with some kind of JUnit assertion. But in the new
CaseExpressionTest, it looks like the System.out.println statements are purely
informational, in which case I think it's best to remove them altogether. Or,
if you think the output might be useful for debugging, you could move all of
the System.outs into a "debug" method and add a flag that allows debugging
information to be turned on/off (with default to "off"). See, for example,
lang/MathTrigFunctionsTest.java.
5 - I think the new test has to be added to lang/_Suite.java in order to run as
part of Derby's JUnit regression suite. This should just be a one-line
addition to the "suite()" method of lang/_Suite.java, something like:
suite.addTest(CaseExpressionTest.suite());
6 - It might be nice if you can name your next patch something other than
"ConditionalNode.diff", in order to avoid confusion with the changes that have
already been committed. For example, something like "derby1620_test.patch"
would, I think, be a tad more clear.
Thanks again for your continued work (and patience) with this Jira! I think
that if the above comments can be addressed, the patch will be ready for commit
and we can finally close this issue...
> SQL CASE statement returns ERROR 42X89 when including NULL as a return value
> ----------------------------------------------------------------------------
>
> Key: DERBY-1620
> URL: https://issues.apache.org/jira/browse/DERBY-1620
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.2.1.6
> Environment: Windows XP
> Reporter: John Peterson
> Assignee: John Peterson
> Priority: Minor
> Fix For: 10.3.0.0
>
> Attachments: ConditionalNode.diff, ConditionalNode.diff,
> ConditionalNode.diff, ConditionalNode.diff, Derby_Community_Discussion.doc,
> derbyall_report.txt, resultset.tmp, resultset.tmp, sysinfo_and_example.txt
>
>
> This bug appears to be related to the DERBY-7 bug (NULLIF() function). When
> NULL is used during a CASE statement, Derby requires the NULL to be CAST to
> the appropriate type. This does not appear to meet the SQL 2003 Standard for
> the Case Expression (see attached Word document). See the attached Word
> document to view the Derby Community Discussion about this issue. See the
> attached .TXT to view the SYSINFO and to see an example of the steps to
> reproduce using IJ.
> Steps to Reproduce:
> ij>values case when 1=2 then 3 else NULL end;
> ERROR 42X89: Types 'INTEGER' and 'CHAR' are not type compatible. Neither
> type is assignable to the other type.
> Current Workaround:
> ij>values case when 1=2 then 3 else cast(NULL as INT) end;
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.