[ 
https://issues.apache.org/jira/browse/IGNITE-15100?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mark Egloff updated IGNITE-15100:
---------------------------------
    Description: 
When I add a method with annotated @Query to my IgniteRepository interface 
calss which is using a LIKE operator of a QuerySqlField or QueryTextField I get 
a SQL synatx error, although the query syntax itself is according JPA standards 
correct
{code:java}
// Example
import org.springframework.data.repository.query.Param;

@RepositoryConfig(cacheName = Item.cacheName)
public interface ItemIgniteRepository extends IgniteRepository<Item, Long>, 
CustomItemIngniteRepository {
    @Query("SELECT i.* from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value")
    public List<Item> findByTextAttribute(@Param("value") String value)
...
{code}
This returns the following error
{code:java}
log.info("search by parameter text value...");
items = itemRepoIgnite.findByTextAttribute("Road Rider");
{code}
{{org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT I._KEY, 
I._VAL FROM ITEM AS I JOIN ITEMATTRIBUTE AS IA ON I.ID = IA.ITEMID WHERE 
IA.TYPE = 'TEXT' AND IA.TEXTVALUE LIKE :[*]VALUE "; expected "SELECT, FROM, 
WITH"; SQL statement:}}
 {{SELECT i._KEY, i._VAL from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value [42001-197]}}

When I use the same query without a named parameter "?" it works i.e.
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE ?")
public List<Item> findByTextAttribute(String value);{code}
or this is also working
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE %?1%")
public List<Item> findByTextAttribute(String value);
{code}
The named parameter is working with equals "=" operator
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue = :value")
public List<Item> findByTextAttribute(@Param("value") String value)
{code}
 

  was:
When I add a method with annotated @Query to my IgniteRepository interface 
calss which is using a LIKE operator of a QuerySqlField or QueryTextField I get 
a SQL synatx error, although the query syntax itself is according JPA standards 
correct
{code:java}
// Example
import org.springframework.data.repository.query.Param;

@RepositoryConfig(cacheName = Item.cacheName)
public interface ItemIgniteRepository extends IgniteRepository<Item, Long>, 
CustomItemIngniteRepository {
    @Query("SELECT i.* from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value")
    public List<Item> findByTextAttribute(@Param("value") String value)
...
{code}
This returns the following error
{code:java}
log.info("search by parameter text value...");
items = itemRepoIgnite.findByTextAttribute("Road Rider");
{code}
{{org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT I._KEY, 
I._VAL FROM ITEM AS I JOIN ITEMATTRIBUTE AS IA ON I.ID = IA.ITEMID WHERE 
IA.TYPE = 'TEXT' AND IA.TEXTVALUE LIKE :[*]VALUE "; expected "SELECT, FROM, 
WITH"; SQL statement:}}
{{SELECT i._KEY, i._VAL from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value [42001-197]}}

When I sue the same query without a named parameter "?" it works i.e.
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE ?")
public List<Item> findByTextAttribute(String value);{code}
or this is also working
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE %?1%")
public List<Item> findByTextAttribute(String value);
{code}
The named parameter is working with equals "=" operator
{code:java}
@Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue = :value")
public List<Item> findByTextAttribute(@Param("value") String value)
{code}
 

 

 


> Ignite spring data - IgniteRepository Annotated Queries with LIKE  and named 
> parameter
> --------------------------------------------------------------------------------------
>
>                 Key: IGNITE-15100
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15100
>             Project: Ignite
>          Issue Type: Bug
>          Components: springdata
>    Affects Versions: 2.9.1
>            Reporter: Mark Egloff
>            Priority: Major
>
> When I add a method with annotated @Query to my IgniteRepository interface 
> calss which is using a LIKE operator of a QuerySqlField or QueryTextField I 
> get a SQL synatx error, although the query syntax itself is according JPA 
> standards correct
> {code:java}
> // Example
> import org.springframework.data.repository.query.Param;
> @RepositoryConfig(cacheName = Item.cacheName)
> public interface ItemIgniteRepository extends IgniteRepository<Item, Long>, 
> CustomItemIngniteRepository {
>     @Query("SELECT i.* from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
> ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value")
>     public List<Item> findByTextAttribute(@Param("value") String value)
> ...
> {code}
> This returns the following error
> {code:java}
> log.info("search by parameter text value...");
> items = itemRepoIgnite.findByTextAttribute("Road Rider");
> {code}
> {{org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT I._KEY, 
> I._VAL FROM ITEM AS I JOIN ITEMATTRIBUTE AS IA ON I.ID = IA.ITEMID WHERE 
> IA.TYPE = 'TEXT' AND IA.TEXTVALUE LIKE :[*]VALUE "; expected "SELECT, FROM, 
> WITH"; SQL statement:}}
>  {{SELECT i._KEY, i._VAL from ITEM as i JOIN ITEMATTRIBUTE AS ia ON i.id = 
> ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE :value [42001-197]}}
> When I use the same query without a named parameter "?" it works i.e.
> {code:java}
> @Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
> ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE ?")
> public List<Item> findByTextAttribute(String value);{code}
> or this is also working
> {code:java}
> @Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
> ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue LIKE %?1%")
> public List<Item> findByTextAttribute(String value);
> {code}
> The named parameter is working with equals "=" operator
> {code:java}
> @Query("SELECT i.* from  ITEM as i JOIN ITEMATTRIBUTE AS ia ON  i.id = 
> ia.itemid WHERE ia.type = 'TEXT' AND ia.textValue = :value")
> public List<Item> findByTextAttribute(@Param("value") String value)
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to