Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Column-level collation gives different results depending on whether pushdown is applied or not in oracle connector #23567

Open
krvikash opened this issue Sep 25, 2024 · 1 comment
Assignees

Comments

@krvikash
Copy link
Contributor

When case-insensitivity search is enable for a column (https://oracle-base.com/articles/12c/column-level-collation-and-case-insensitive-database-12cr2#column-level) then with pushdown and without pushdown gives different result in oracle connector.

Here is an example:

-- Table created using Oracle
create table table_1 (id int, c_varchar_50 varchar(50) COLLATE BINARY_CI);
Insert into table_1 values(1, 'INDIA');
Insert into table_1 values(2, 'India');

When Pushdown happens then trino return results by comparing as case-insensitivity.

trino:admin> select * from table_1 where CAST(c_varchar_50 AS VARCHAR(50)) = 'INDIA';
 id | c_varchar_50
----+--------------
  1 | INDIA
  2 | India
(2 rows)

trino:admin> explain select * from table_1 where CAST(c_varchar_50 AS VARCHAR(50)) = 'INDIA';
                                        Query Plan
-------------------------------------------------------------------------------------------
 Trino version: dev
 Fragment 0 [SOURCE]
     Output layout: [id, c_varchar]
     Output partitioning: SINGLE []
     Output[columnNames = [id, c_varchar_50]]
     │   Layout: [id:decimal(38,0), c_varchar:varchar(50)]
     │   Estimates: {rows: ? (?), cpu: 0, memory: 0B, network: 0B}
     │   c_varchar_50 := c_varchar
     └─ TableScan[table = oracle:admin.table_1 ADMIN.TABLE_1 constraint on [C_VARCHAR_50]]
            Layout: [id:decimal(38,0), c_varchar:varchar(50)]
            Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}
            c_varchar := C_VARCHAR_50:varchar(50):VARCHAR2
            id := ID:decimal(38,0):NUMBER

Whereas, When Pushdown does not happen then trino return results by comparing as case-sensitivity.

trino:admin> select * from table_1 where CAST(c_varchar_50 AS VARCHAR(20)) = 'INDIA';
 id | c_varchar_50
----+--------------
  1 | INDIA
(1 row)

trino:admin> explain select * from table_1 where CAST(c_varchar_50 AS VARCHAR(20)) = 'INDIA';
                                                               Query Plan
-----------------------------------------------------------------------------------------------------------------------------------------
 Trino version: dev
 Fragment 0 [SOURCE]
     Output layout: [id, c_varchar]
     Output partitioning: SINGLE []
     Output[columnNames = [id, c_varchar_50]]
     │   Layout: [id:decimal(38,0), c_varchar:varchar(50)]
     │   Estimates: {rows: ? (?), cpu: 0, memory: 0B, network: 0B}
     │   c_varchar_50 := c_varchar
     └─ ScanFilter[table = oracle:admin.table_1 ADMIN.TABLE_1, filterPredicate = (CAST(c_varchar AS varchar(20)) = varchar(20) 'INDIA')]
            Layout: [id:decimal(38,0), c_varchar:varchar(50)]
            Estimates: {rows: ? (?), cpu: ?, memory: 0B, network: 0B}/{rows: ? (?), cpu: ?, memory: 0B, network: 0B}
            c_varchar := C_VARCHAR_50:varchar(50):VARCHAR2
            id := ID:decimal(38,0):NUMBER
@krvikash
Copy link
Contributor Author

@Praveen2112 Praveen2112 self-assigned this Sep 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants