[teiid-commits] teiid SVN: r4659 - in branches/7.7.x: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc and 2 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Thu Oct 16 16:32:06 EDT 2014
Author: jolee
Date: 2014-10-16 16:32:05 -0400 (Thu, 16 Oct 2014)
New Revision: 4659
Modified:
branches/7.7.x/build/kits/jboss-container/teiid-releasenotes.html
branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sqlserver/TestSqlServerConversionVisitor.java
Log:
TEIID-3168: SQL Server requires N prefix for unicode literals
Modified: branches/7.7.x/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- branches/7.7.x/build/kits/jboss-container/teiid-releasenotes.html 2014-09-16 20:27:59 UTC (rev 4658)
+++ branches/7.7.x/build/kits/jboss-container/teiid-releasenotes.html 2014-10-16 20:32:05 UTC (rev 4659)
@@ -242,6 +242,11 @@
</h2>
<h4>From ${project.version}</h4>
<ul>
+<li>[<a href='https://issues.jboss.org/browse/TEIID-3168'>TEIID-3168</a>] - SQL Server requires N prefix for unicode literals
+</li>
+</ul>
+<h4>From 7.7.11</h4>
+<ul>
<li>[<a href='https://issues.jboss.org/browse/TEIID-2448'>TEIID-2448</a>] - Oracle driver translation error
</li>
<li>[<a href='https://issues.jboss.org/browse/TEIID-2930'>TEIID-2930</a>] - SCROLL keyword for DECLARE CURSOR not being parsed correctly
Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2014-09-16 20:27:59 UTC (rev 4658)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2014-10-16 20:32:05 UTC (rev 4659)
@@ -1171,4 +1171,11 @@
return SQLConstants.Reserved.LIKE_REGEX;
}
+ /**
+ * @return true if the N prefix should be used for strings containing non-ascii characters
+ */
+ public boolean useUnicodePrefix() {
+ return false;
+ }
+
}
Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java 2014-09-16 20:27:59 UTC (rev 4658)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/SQLConversionVisitor.java 2014-10-16 20:32:05 UTC (rev 4659)
@@ -166,13 +166,26 @@
valuesbuffer.append(executionFactory.translateLiteralDate((java.sql.Date)obj));
} else {
// If obj is string, toSting() will not create a new String
- // object, it returns it self, so new object creation.
+ // object, it returns it self, so new object creation.
+ String val = obj.toString();
+ if (useUnicodePrefix()) {
+ for (int i = 0; i < val.length(); i++) {
+ if (val.charAt(i) > 127) {
+ buffer.append("N"); //$NON-NLS-1$
+ break;
+ }
+ }
+ }
valuesbuffer.append(Tokens.QUOTE)
- .append(escapeString(obj.toString(), Tokens.QUOTE))
+ .append(escapeString(val, Tokens.QUOTE))
.append(Tokens.QUOTE);
}
}
}
+
+ protected boolean useUnicodePrefix() {
+ return this.executionFactory.useUnicodePrefix();
+ }
/**
* @see org.teiid.language.visitor.SQLStringVisitor#visit(org.teiid.language.Call)
Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2014-09-16 20:27:59 UTC (rev 4658)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2014-10-16 20:32:05 UTC (rev 4659)
@@ -358,14 +358,19 @@
return "CAST('" + formatDateValue(dateValue) +"' AS DATE)"; //$NON-NLS-1$ //$NON-NLS-2$
}
- private boolean isFracSeconds(Function function) {
- Expression e = function.getParameters().get(0);
- return (e instanceof Literal && SQLConstants.NonReserved.SQL_TSI_FRAC_SECOND.equalsIgnoreCase((String)((Literal)e).getValue()));
- }
+ private boolean isFracSeconds(Function function) {
+ Expression e = function.getParameters().get(0);
+ return (e instanceof Literal && SQLConstants.NonReserved.SQL_TSI_FRAC_SECOND.equalsIgnoreCase((String)((Literal)e).getValue()));
+ }
- @Override
- public boolean supportsRowLimit() {
- return (getVersion().getMajorVersion() == 12 && getVersion().compareTo(TWELVE_5_3) >= 0) || getVersion().compareTo(FIFTEEN_0_2) >=0; //$NON-NLS-1$
- }
+ @Override
+ public boolean supportsRowLimit() {
+ return (getVersion().getMajorVersion() == 12 && getVersion().compareTo(TWELVE_5_3) >= 0) || getVersion().compareTo(FIFTEEN_0_2) >=0; //$NON-NLS-1$
+ }
+
+ @Override
+ public boolean useUnicodePrefix() {
+ return true;
+ }
}
Modified: branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sqlserver/TestSqlServerConversionVisitor.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sqlserver/TestSqlServerConversionVisitor.java 2014-09-16 20:27:59 UTC (rev 4658)
+++ branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/sqlserver/TestSqlServerConversionVisitor.java 2014-10-16 20:32:05 UTC (rev 4659)
@@ -218,5 +218,14 @@
Command obj = commandBuilder.getCommand(input, true, true);
TranslationHelper.helpTestVisitor(output, trans, obj);
}
+
+ @Test public void testUnicodeLiteral() throws Exception {
+ String input = "select N'\u0FFF'"; //$NON-NLS-1$
+ String output = "SELECT N'\u0FFF'"; //$NON-NLS-1$
+
+ CommandBuilder commandBuilder = new CommandBuilder(RealMetadataFactory.exampleBQTCached());
+ Command obj = commandBuilder.getCommand(input, true, true);
+ TranslationHelper.helpTestVisitor(output, trans, obj);
+ }
}
More information about the teiid-commits
mailing list