You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2020/03/19 13:23:53 UTC
svn commit: r1875423 - in /jackrabbit/oak/branches/1.6/oak-core: ./
src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
Author: reschke
Date: Thu Mar 19 13:23:52 2020
New Revision: 1875423
URL: http://svn.apache.org/viewvc?rev=1875423&view=rev
Log:
OAK-8915: RDBDocumentStore: use setNString() for columns known to be of type N*CHAR (merged r1874249 into 1.6)
Modified:
jackrabbit/oak/branches/1.6/oak-core/ (props changed)
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
Propchange: jackrabbit/oak/branches/1.6/oak-core/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk/oak-store-document:r1874249
Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1875423&r1=1875422&r2=1875423&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Thu Mar 19 13:23:52 2020
@@ -628,6 +628,7 @@ public class RDBDocumentStore implements
private final String name;
private boolean idIsBinary = false;
+ private boolean dataIsNChar = false;
private int dataLimitInOctets = 16384;
public RDBTableMetaData(String name) {
@@ -642,10 +643,18 @@ public class RDBDocumentStore implements
return this.name;
}
+ public boolean isDataNChar() {
+ return this.dataIsNChar;
+ }
+
public boolean isIdBinary() {
return this.idIsBinary;
}
+ public void setDataIsNChar(boolean dataIsNChar) {
+ this.dataIsNChar = dataIsNChar;
+ }
+
public void setIdIsBinary(boolean idIsBinary) {
this.idIsBinary = idIsBinary;
}
@@ -896,7 +905,12 @@ public class RDBDocumentStore implements
return sqlType == Types.VARBINARY || sqlType == Types.BINARY || sqlType == Types.LONGVARBINARY;
}
+ private static boolean isNChar(int sqlType) {
+ return sqlType == Types.NCHAR || sqlType == Types.NVARCHAR || sqlType == Types.LONGNVARCHAR;
+ }
+
private void obtainFlagsFromResultSetMeta(ResultSetMetaData met, RDBTableMetaData tmd) throws SQLException {
+
for (int i = 1; i <= met.getColumnCount(); i++) {
String lcName = met.getColumnName(i).toLowerCase(Locale.ENGLISH);
if ("id".equals(lcName)) {
@@ -904,6 +918,7 @@ public class RDBDocumentStore implements
}
if ("data".equals(lcName)) {
tmd.setDataLimitInOctets(met.getPrecision(i));
+ tmd.setDataIsNChar(isNChar(met.getColumnType(i)));
}
}
}
Modified: jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java?rev=1875423&r1=1875422&r2=1875423&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java (original)
+++ jackrabbit/oak/branches/1.6/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java Thu Mar 19 13:23:52 2020
@@ -275,10 +275,10 @@ public class RDBDocumentStoreJDBC {
stmt.setObject(si++, cmodcount == null ? Long.valueOf(0) : cmodcount, Types.BIGINT);
stmt.setObject(si++, data.length(), Types.BIGINT);
if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) {
- stmt.setString(si++, data);
+ setDataInStatement(tmd, stmt, si++, data);
stmt.setBinaryStream(si++, null, 0);
} else {
- stmt.setString(si++, "\"blob\"");
+ setDataInStatement(tmd, stmt, si++, "\"blob\"");
byte[] bytes = asBytes(data);
stmt.setBytes(si++, bytes);
}
@@ -354,10 +354,10 @@ public class RDBDocumentStoreJDBC {
stmt.setObject(si++, data.length(), Types.BIGINT);
if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) {
- stmt.setString(si++, data);
+ setDataInStatement(tmd, stmt, si++, data);
stmt.setBinaryStream(si++, null, 0);
} else {
- stmt.setString(si++, "\"blob\"");
+ setDataInStatement(tmd, stmt, si++, "\"blob\"");
byte[] bytes = asBytes(data);
stmt.setBytes(si++, bytes);
}
@@ -822,10 +822,10 @@ public class RDBDocumentStoreJDBC {
stmt.setObject(si++, data.length(), Types.BIGINT);
if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) {
- stmt.setString(si++, data);
+ setDataInStatement(tmd, stmt, si++, data);
stmt.setBinaryStream(si++, null, 0);
} else {
- stmt.setString(si++, "\"blob\"");
+ setDataInStatement(tmd, stmt, si++, "\"blob\"");
byte[] bytes = asBytes(data);
stmt.setBytes(si++, bytes);
}
@@ -929,6 +929,14 @@ public class RDBDocumentStoreJDBC {
} else {
stmt.setString(idx, id);
}
+ }
+
+ private static void setDataInStatement(RDBTableMetaData tmd, PreparedStatement stmt, int idx, String id) throws SQLException {
+ if (tmd.isDataNChar()) {
+ stmt.setNString(idx, id);
+ } else {
+ stmt.setString(idx, id);
+ }
}
private static long readLongFromResultSet(ResultSet res, int index) throws SQLException {