You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Vladimir Ozerov (JIRA)" <ji...@apache.org> on 2017/10/26 13:16:00 UTC
[jira] [Commented] (IGNITE-6190) SQL query fails silently if Set is
passed as a parameter
[ https://issues.apache.org/jira/browse/IGNITE-6190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16220407#comment-16220407 ]
Vladimir Ozerov commented on IGNITE-6190:
-----------------------------------------
[~roman_s], I do not think it is valid change, because now it is very hard to reason whether we want to set collection as a single argument, or whether we set collection of arguments. May be we cannot process Set correctly for now, but this is a bug, not expected behavior.
I propose to close the ticket as "Won't Fix".
> SQL query fails silently if Set is passed as a parameter
> --------------------------------------------------------
>
> Key: IGNITE-6190
> URL: https://issues.apache.org/jira/browse/IGNITE-6190
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Reporter: Denis Magda
> Assignee: Roman Shtykh
> Labels: usability
> Fix For: 2.4
>
> Attachments: TestIgniteQuery.zip
>
>
> Seems like the SqlQuery API does not like {{Set<?>}} as the input parameter. While this query doesn't work (the Set is used as an input):
> {code}
> public Map<String, Account> getAccountsForLe(Set<String> leId) {
> SqlQuery<String, Account> query =
> new SqlQuery<String, Account>(Account.class, "from Account join table(id varchar = ?) i on Account.clientLegalEntityId = i.id")
> .setArgs(leId);
> Map<String, Account> results = new HashMap<>();
> _cache.query(query).getAll().stream().forEach(e -> results.put(e.getKey(), e.getValue()));
> return results;
> }
> {code}
> This one works well (the Set is converted to Array explicitly):
> {code}
> public Map<String, Account> getAccountsForLe(Set<String> leId) {
> SqlQuery<String, Account> query =
> new SqlQuery<String, Account>(Account.class, "from Account join table(id varchar = ?) i on Account.clientLegalEntityId = i.id")
> .setArgs(leId.toArray());
> Map<String, Account> results = new HashMap<>();
> _cache.query(query).getAll().stream().forEach(e -> results.put(e.getKey(), e.getValue()));
> return results;
> }
> {code}
> The fact that it fails silently is an issue. IMHO there should be some validation to alert the calling code that the type specified is not valid or the set has to be transformed to the array on the fly.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)