[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