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/05 08:51:21 UTC
svn commit: r1874825 - in /jackrabbit/oak/branches/1.22: ./
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/
Author: reschke
Date: Thu Mar 5 08:51:20 2020
New Revision: 1874825
URL: http://svn.apache.org/viewvc?rev=1874825&view=rev
Log:
OAK-8915: RDBDocumentStore: use setNString() for columns known to be of type N*CHAR (merged r1874249 into 1.22)
Modified:
jackrabbit/oak/branches/1.22/ (props changed)
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
Propchange: jackrabbit/oak/branches/1.22/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1874249
Modified: jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1874825&r1=1874824&r2=1874825&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Thu Mar 5 08:51:20 2020
@@ -695,6 +695,7 @@ public class RDBDocumentStore implements
private final String catalog;
private final String name;
private boolean idIsBinary = false;
+ private boolean dataIsNChar = false;
private boolean hasVersion = false;
private boolean hasSplitDocs = false;
private int dataLimitInOctets = 16384;
@@ -736,6 +737,10 @@ public class RDBDocumentStore implements
return this.schemaInfo;
}
+ public boolean isDataNChar() {
+ return this.dataIsNChar;
+ }
+
public boolean isIdBinary() {
return this.idIsBinary;
}
@@ -748,6 +753,10 @@ public class RDBDocumentStore implements
return this.hasVersion;
}
+ public void setDataIsNChar(boolean dataIsNChar) {
+ this.dataIsNChar = dataIsNChar;
+ }
+
public void setIdIsBinary(boolean idIsBinary) {
this.idIsBinary = idIsBinary;
}
@@ -1102,6 +1111,10 @@ 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 static void obtainFlagsFromResultSetMeta(ResultSetMetaData met, RDBTableMetaData tmd) throws SQLException {
for (int i = 1; i <= met.getColumnCount(); i++) {
@@ -1111,6 +1124,7 @@ public class RDBDocumentStore implements
}
if ("data".equals(lcName)) {
tmd.setDataLimitInOctets(met.getPrecision(i));
+ tmd.setDataIsNChar(isNChar(met.getColumnType(i)));
}
if ("version".equals(lcName)) {
tmd.setHasVersion(true);
Modified: jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java?rev=1874825&r1=1874824&r2=1874825&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java (original)
+++ jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreJDBC.java Thu Mar 5 08:51:20 2020
@@ -283,10 +283,10 @@ public class RDBDocumentStoreJDBC {
stmt.setObject(si++, document.get(NodeDocument.SD_MAX_REV_TIME_IN_SECS));
}
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);
}
@@ -364,10 +364,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);
}
@@ -933,10 +933,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);
}
@@ -1079,6 +1079,14 @@ public class RDBDocumentStoreJDBC {
}
}
+ 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 {
long v = res.getLong(index);
return res.wasNull() ? RDBRow.LONG_UNSET : v;