
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
62 lines
2.1 KiB
Plaintext
62 lines
2.1 KiB
Plaintext
== Why is this an issue?
|
|
|
|
It is not uncommon, for instance when dealing with SQL requests, to have repeated calls to ``++StringBuilder.append()++`` to create a long (sometimes really long) String that will be then passed to the appropriate subsystem (e.g. jdbc.Statement()). This is very undesirable because it makes it more difficult to read, and maintain, the statement in the String due to overlapping syntaxes.
|
|
|
|
It is highly recommended to address such a case with an external text file loaded as a resource.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,java]
|
|
----
|
|
sb = new StringBuilder()
|
|
.append("SELECT CASE ")
|
|
.append("WHEN year = 'FR' THEN 'FR'")
|
|
.append("WHEN year = 'SO' THEN 'SO'")
|
|
.append("WHEN year = 'JR' THEN 'JR'")
|
|
.append("WHEN year = 'SR' THEN 'SR'")
|
|
.append("ELSE 'No Year Data' END AS year_group,")
|
|
.append("COUNT(1) AS count")
|
|
.append("FROM benn.college_football_players")
|
|
.append("GROUP BY CASE WHEN year = 'FR' THEN 'FR'")
|
|
.append("WHEN year = 'SO' THEN 'SO'")
|
|
.append("WHEN year = 'JR' THEN 'JR'")
|
|
.append("WHEN year = 'SR' THEN 'SR'")
|
|
.append("ELSE 'No Year Data' END");
|
|
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,java]
|
|
----
|
|
InputStream inputStream = this.getClass().getResourceAsStream("MySQLRequest.txt");
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Refactor this code to load this text as an external resource.
|
|
|
|
|
|
=== Highlighting
|
|
|
|
The StringBuilder instance.
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 14 Nov 2016, 15:02:25 Tibor Blenessy wrote:
|
|
I think compliant example should show full way to the ``++String++`` , so it is really clear how to replace the code. Also I believe that this case will be quite rare, because usually there will be some embedded variables in the append calls, and then it's not so easy to fix (probably it would be necessary to introduce some kind of template engine). Maybe we should just flag this and do not try to offer compliant solution?
|
|
|
|
endif::env-github,rspecator-view[]
|