[jira] [Commented] (CALCITE-5867) Add BLOB data type in SqlTypeName

2023-07-24 Thread Julian Hyde (Jira)


[ 
https://issues.apache.org/jira/browse/CALCITE-5867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17746737#comment-17746737
 ] 

Julian Hyde commented on CALCITE-5867:
--

Suppose the summary was 'Support BLOB data type'. What would a minimally useful 
implementation look like? It seems that adding {{BLOB}} to {{SqlTypeName}} may 
not be useful on its own.

> Add BLOB data type in SqlTypeName 
> --
>
> Key: CALCITE-5867
> URL: https://issues.apache.org/jira/browse/CALCITE-5867
> Project: Calcite
>  Issue Type: New Feature
>  Components: core
>Reporter: hujianhong
>Assignee: hujianhong
>Priority: Major
>
> In java.sql.JDBCType, there are binary, varbinary, and blob types for binary 
> objects. However, there are only two types of binary and varbinary in 
> SqlTypeName  of Apache Calcite.
> In addition, for binary and varbinary types, we usually use the following 
> code to read and write in JDBC:
>  
> {code:java}
> //write
> PreparedStatement ps = conn. preparedStatment();
> ps.setBytes(1, new byte[]{xxx});
> //read
> ResultSet rs = xxx;
> rs. next();
> byte[] b1 = rs. getBytes(1); {code}
>  
>  
> For the Blob type, we usually use the following code in JDBC for streaming 
> read and write:
> {code:java}
> //write
> PreparedStatement ps = conn. preparedStatment();
> ps.setBlob(1, inputstream);
> //read
> ResultSet rs = xxx;
> rs. next();
> Blob b1 = rs.getBlob(1); // or InputStream in = rs.getBinaryStream(2); {code}
>  
> Because the BLOB is large, it cannot be read in one row like binary and 
> varbinary objects, but needs to be read in a stream.
> In our scenario, our storage layer both supports binary, varbinary, and blob 
> types, but because there is no native support BLOB data type in Apache 
> Calcite, our approach is to map the BLOB type of the storage layer to the 
> binary/varbinary type of Apache calcite, so as to read and write BLOB types 
> through calcite.
> However, BLOB objects are read and written as binary/varbinay types, which 
> will put a lot of pressure on the memory of the server, easily cause OOM on 
> the server, and bring great challenges to the stability of the system. 
> Therefore, we expect to add BLOB type support in Apache Calcite, and use 
> streams to support BLOB type reading and writing with less memory, so as to 
> avoid OOM pressure caused by one-time reading and writing of BLOB objects to 
> the system.
>  
> --
> MySQL support BLOB data type: 
> [https://dev.mysql.com/doc/refman/8.0/en/blob.html]
> In addition, Avatica currently does not support streaming reading and writing 
> for BLOB data type. Therefore, in order to solve this problem, in our 
> scenario, we support the MySQL protocol on the server side, and can directly 
> use the MySQL client to read and write BLOB objects in streaming mode.



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


[jira] [Commented] (CALCITE-5867) Add BLOB data type in SqlTypeName

2023-07-21 Thread hujianhong (Jira)


[ 
https://issues.apache.org/jira/browse/CALCITE-5867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17745474#comment-17745474
 ] 

hujianhong commented on CALCITE-5867:
-

[~julianhyde] Can you help to review whether there is a problem with this 
issue? 

> Add BLOB data type in SqlTypeName 
> --
>
> Key: CALCITE-5867
> URL: https://issues.apache.org/jira/browse/CALCITE-5867
> Project: Calcite
>  Issue Type: New Feature
>  Components: core
>Reporter: hujianhong
>Assignee: hujianhong
>Priority: Major
> Fix For: 1.35.0
>
>
> In java.sql.JDBCType, there are binary, varbinary, and blob types for binary 
> objects. However, there are only two types of binary and varbinary in 
> SqlTypeName  of Apache Calcite.
> In addition, for binary and varbinary types, we usually use the following 
> code to read and write in JDBC:
>  
> {code:java}
> //write
> PreparedStatement ps = conn. preparedStatment();
> ps.setBytes(1, new byte[]{xxx});
> //read
> ResultSet rs = xxx;
> rs. next();
> byte[] b1 = rs. getBytes(1); {code}
>  
>  
> For the Blob type, we usually use the following code in JDBC for streaming 
> read and write:
> {code:java}
> //write
> PreparedStatement ps = conn. preparedStatment();
> ps.setBlob(1, inputstream);
> //read
> ResultSet rs = xxx;
> rs. next();
> Blob b1 = rs.getBlob(1); // or InputStream in = rs.getBinaryStream(2); {code}
>  
> Because the BLOB is large, it cannot be read in one row like binary and 
> varbinary objects, but needs to be read in a stream.
> In our scenario, our storage layer both supports binary, varbinary, and blob 
> types, but because there is no native support BLOB data type in Apache 
> Calcite, our approach is to map the BLOB type of the storage layer to the 
> binary/varbinary type of Apache calcite, so as to read and write BLOB types 
> through calcite.
> However, BLOB objects are read and written as binary/varbinay types, which 
> will put a lot of pressure on the memory of the server, easily cause OOM on 
> the server, and bring great challenges to the stability of the system. 
> Therefore, we expect to add BLOB type support in Apache Calcite, and use 
> streams to support BLOB type reading and writing with less memory, so as to 
> avoid OOM pressure caused by one-time reading and writing of BLOB objects to 
> the system.
>  
> --
> MySQL support BLOB data type: 
> [https://dev.mysql.com/doc/refman/8.0/en/blob.html]
> In addition, Avatica currently does not support streaming reading and writing 
> for BLOB data type. Therefore, in order to solve this problem, in our 
> scenario, we support the MySQL protocol on the server side, and can directly 
> use the MySQL client to read and write BLOB objects in streaming mode.



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