[jira] [Updated] (CAY-2814) Select query iterator() and batchIterator() methods return incorrect results

2023-08-24 Thread Nikita Timofeev (Jira)


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

Nikita Timofeev updated CAY-2814:
-
Fix Version/s: 4.1.2

> Select query iterator() and batchIterator() methods return incorrect results
> 
>
> Key: CAY-2814
> URL: https://issues.apache.org/jira/browse/CAY-2814
> Project: Cayenne
>  Issue Type: Bug
>  Components: Core Library
>Affects Versions: 4.1.1, 4.2.RC1, 4.2
>Reporter: Nikita Timofeev
>Assignee: Nikita Timofeev
>Priority: Major
> Fix For: 4.1.2, 4.2.1, 5.0.M1
>
>
> Iterated queries can handle only basic results like single entity, 
> {{Object[]}} and {{DataRow}}
> everything else is missing in the processing.
> This affects ColumnQuery most as it can return many more variants.
> What variants are broken:
> * all selects: joint prefetches
> * column query: several entities or entity + some other fields
> * column query: embeddables
> * column query: map function (see CAY-2812)
> * maybe something else (?)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Closed] (CAY-2812) ColumnQuery mapper function is not applied in ResultBatchIterator

2023-08-24 Thread Nikita Timofeev (Jira)


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

Nikita Timofeev closed CAY-2812.

Resolution: Fixed

This is just a special case of CAY-2814

> ColumnQuery mapper function is not applied in ResultBatchIterator
> -
>
> Key: CAY-2812
> URL: https://issues.apache.org/jira/browse/CAY-2812
> Project: Cayenne
>  Issue Type: Bug
>  Components: Core Library
>Affects Versions: 4.2
>Reporter: Nikita Timofeev
>Assignee: Nikita Timofeev
>Priority: Major
> Fix For: 4.2.1, 5.0.M1
>
>
> {{query.batchIterator()}} call always returns {{Object[]}} disregarding 
> mapper set for the {{ColumnQuery}} causing {{ClassCastException}}
> Query example:
> {code:java}
> void select() {
>   // actual type of the iterator will be Object[] instead of DTO
>   ResultBatchIterator it = ObjectSelect.columnQuery(Entity.class, 
> Entity.ATTRIBUTE1, Entity.ATTRIBUTE2)
>  .map(this::toDto)
>  .batchIterator(context, 100);
> }
> DTO toDto(Object[] data) {
>   // ...
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Created] (CAY-2814) Select query iterator() and batchIterator() methods return incorrect results

2023-08-24 Thread Nikita Timofeev (Jira)
Nikita Timofeev created CAY-2814:


 Summary: Select query iterator() and batchIterator() methods 
return incorrect results
 Key: CAY-2814
 URL: https://issues.apache.org/jira/browse/CAY-2814
 Project: Cayenne
  Issue Type: Bug
  Components: Core Library
Affects Versions: 4.2, 4.2.RC1, 4.1.1
Reporter: Nikita Timofeev
Assignee: Nikita Timofeev
 Fix For: 4.2.1, 5.0.M1


Iterated queries can handle only basic results like single entity, {{Object[]}} 
and {{DataRow}}
everything else is missing in the processing.

This affects ColumnQuery most as it can return many more variants.

What variants are broken:
* all selects: joint prefetches
* column query: several entities or entity + some other fields
* column query: embeddables
* column query: map function (see CAY-2812)
* maybe something else (?)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[jira] [Closed] (CAY-2813) Regression: Constants.CI_PROPERTY flag is no longer working for MySQL

2023-08-24 Thread Nikita Timofeev (Jira)


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

Nikita Timofeev closed CAY-2813.

Resolution: Fixed

*4.2*: 
https://github.com/apache/cayenne/commit/2a9debc1c84d4f82bc688114f7f993f1d0193e6f
*5.0*: 
https://github.com/apache/cayenne/commit/983c51cd1f322ccbaa0468afe693adf938c3c1fe

> Regression: Constants.CI_PROPERTY flag is no longer working for MySQL
> -
>
> Key: CAY-2813
> URL: https://issues.apache.org/jira/browse/CAY-2813
> Project: Cayenne
>  Issue Type: Bug
>  Components: Database integration
>Affects Versions: 4.2.RC1, 4.2
>Reporter: Nikita Timofeev
>Assignee: Nikita Timofeev
>Priority: Major
> Fix For: 4.2.1, 5.0.M1
>
>
> While migrating on a new SQL translator the logic of 
> {{Constants.CI_PROPERTY}} flag was lost and MySQL translator began to use 
> stricter {{LIKE BINARY}} operator always.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)


[cayenne] branch STABLE-4.2 updated: CAY-2813 Regression: Constants.CI_PROPERTY flag is no longer working for MySQL

2023-08-24 Thread ntimofeev
This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch STABLE-4.2
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.2 by this push:
 new 2a9debc1c CAY-2813 Regression: Constants.CI_PROPERTY flag is no longer 
working for MySQL
2a9debc1c is described below

commit 2a9debc1c84d4f82bc688114f7f993f1d0193e6f
Author: Nikita Timofeev 
AuthorDate: Wed Aug 23 22:32:01 2023 +0300

CAY-2813 Regression: Constants.CI_PROPERTY flag is no longer working for 
MySQL

(cherry picked from commit 983c51cd1f322ccbaa0468afe693adf938c3c1fe)
---
 RELEASE-NOTES.txt  |  1 +
 .../select/TypeAwareSQLTreeProcessor.java  |  3 +-
 .../org/apache/cayenne/dba/mysql/MySQLAdapter.java |  2 +-
 .../cayenne/dba/mysql/MySQLTreeProcessor.java  | 14 +---
 .../cayenne/dba/mysql/sqltree/MysqlLikeNode.java   |  2 +-
 .../access/sqlbuilder/BaseSqlBuilderTest.java  | 10 +++---
 .../cayenne/dba/mysql/MySQLTreeProcessorTest.java  | 42 ++
 7 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 1954a0dc8..10b3227e4 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -18,6 +18,7 @@ Bug Fixes:
 CAY-2806 Incorrect processing of unicode escape syntax in JSON
 CAY-2809 Cayenne Expression grammar doesn't allow custom function as an 
argument for string functions
 CAY-2810 Can't use custom operator expression with aggregate functions
+CAY-2813 Regression: Constants.CI_PROPERTY flag is no longer working for MySQL
 
 --
 Release: 4.2
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/TypeAwareSQLTreeProcessor.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/TypeAwareSQLTreeProcessor.java
index 7e48aed3f..b1f36b312 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/TypeAwareSQLTreeProcessor.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/TypeAwareSQLTreeProcessor.java
@@ -92,7 +92,8 @@ public class TypeAwareSQLTreeProcessor extends 
SimpleNodeTreeVisitor implements
 
 protected DbAttribute getColumnAttribute(ColumnNode node) {
 DbAttribute attribute = node.getAttribute();
-if(attribute.getType() == Types.OTHER
+if(attribute != null
+&& attribute.getType() == Types.OTHER
 && node.getParent() != null
 && node.getParent().getType() == NodeType.RESULT) {
 return attribute;
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 1573379ff..9a2acfef5 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -112,7 +112,7 @@ public class MySQLAdapter extends JdbcAdapter {
  */
@Override
public SQLTreeProcessor getSqlTreeProcessor() {
-   return MySQLTreeProcessor.getInstance();
+   return 
MySQLTreeProcessor.getInstance(caseInsensitiveCollations);
}
 
/**
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLTreeProcessor.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLTreeProcessor.java
index f8243f5e8..e5ab32556 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLTreeProcessor.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLTreeProcessor.java
@@ -38,14 +38,18 @@ import org.apache.cayenne.value.Wkt;
  */
 public class MySQLTreeProcessor extends TypeAwareSQLTreeProcessor {
 
-private static final MySQLTreeProcessor INSTANCE = new 
MySQLTreeProcessor();
+private static final MySQLTreeProcessor INSTANCE_CI = new 
MySQLTreeProcessor(true);
+private static final MySQLTreeProcessor INSTANCE_CS = new 
MySQLTreeProcessor(false);
 
-public static MySQLTreeProcessor getInstance() {
-return INSTANCE;
+public static MySQLTreeProcessor getInstance(boolean 
caseInsensitiveCollations) {
+return caseInsensitiveCollations ? INSTANCE_CI : INSTANCE_CS;
 }
 
-protected MySQLTreeProcessor() {
-registerProcessor(NodeType.LIKE, (ChildProcessor) 
this::onLikeNode);
+protected MySQLTreeProcessor(boolean ciCollations) {
+if(ciCollations) {
+// For case insensitive collations we need to use `LIKE BINARY` 
operator to keep strict `LIKE` semantics
+registerProcessor(NodeType.LIKE, (ChildProcessor) 
this::onLikeNode);
+}
 registerProcessor(NodeType.LIMIT_OFFSET, 
(ChildProcessor) this::onLimitOffsetNode);
 registerProcessor(NodeType.FUNCTION, (ChildProcessor)