Skip to content

Commit

Permalink
TEIID-3692 updating string literal translation
Browse files Browse the repository at this point in the history
Conflicts:
	connectors/translator-hive/src/test/java/org/teiid/translator/hive/TestImpalaExecutionFactory.java
  • Loading branch information
shawkins committed Sep 9, 2015
1 parent 794d8c5 commit 0d89c35
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
Expand Up @@ -25,8 +25,10 @@

import java.util.List;

import org.teiid.core.util.StringUtil;
import org.teiid.language.*;
import org.teiid.language.SQLConstants.Tokens;
import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.SQLConversionVisitor;

public class HiveSQLConversionVisitor extends SQLConversionVisitor {
Expand Down Expand Up @@ -181,4 +183,17 @@ public void visit(Select obj) {
}
super.visit(obj);
}

@Override
protected void translateSQLType(Class<?> type, Object obj,
StringBuilder valuesbuffer) {
if (obj != null && type == TypeFacility.RUNTIME_TYPES.STRING) {
String val = obj.toString();
valuesbuffer.append(Tokens.QUOTE)
.append(StringUtil.replaceAll(StringUtil.replaceAll(val, "\\", "\\\\"), "'", "\\'")) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
.append(Tokens.QUOTE);
} else {
super.translateSQLType(type, obj, valuesbuffer);
}
}
}
Expand Up @@ -21,7 +21,7 @@
*/
package org.teiid.translator.hive;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.*;

import java.math.BigInteger;
import java.sql.Connection;
Expand All @@ -39,7 +39,11 @@
import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.LanguageFactory;
import org.teiid.metadata.*;
import org.teiid.metadata.Column;
import org.teiid.metadata.MetadataFactory;
import org.teiid.metadata.MetadataStore;
import org.teiid.metadata.Schema;
import org.teiid.metadata.Table;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TransformationMetadata;
Expand Down Expand Up @@ -221,4 +225,12 @@ public static TransformationMetadata exampleBQT() {
hmp.process(mf, c);
Mockito.verify(mf, Mockito.times(0)).addTable("x");
}

@Test public void testStringLiteral() {
CommandBuilder commandBuilder = new CommandBuilder(RealMetadataFactory.example1Cached());
Command obj = commandBuilder.getCommand("select pm1.g1.e2 from pm1.g1 where pm1.g1.e1 = 'a''b\\c'");
SQLConversionVisitor sqlVisitor = hiveTranslator.getSQLConversionVisitor();
sqlVisitor.append(obj);
assertEquals("SELECT g1.e2 FROM g1 WHERE g1.e1 = 'a\\'b\\\\c'", sqlVisitor.toString());
}
}
Expand Up @@ -27,10 +27,13 @@

import org.junit.BeforeClass;
import org.junit.Test;
import org.teiid.cdk.CommandBuilder;
import org.teiid.language.Command;
import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.LanguageFactory;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.translator.TranslatorException;
import org.teiid.translator.TypeFacility;
import org.teiid.translator.jdbc.FunctionModifier;
Expand Down Expand Up @@ -67,4 +70,12 @@ private void helpTest(Expression srcExpression, String tgtType, String expectedE
assertFalse(impalaTranslator.supportsConvert(FunctionModifier.TIMESTAMP, FunctionModifier.TIME));
assertTrue(impalaTranslator.supportsConvert(FunctionModifier.STRING, FunctionModifier.TIMESTAMP));
}

@Test public void testStringLiteral() {
CommandBuilder commandBuilder = new CommandBuilder(RealMetadataFactory.example1Cached());
Command obj = commandBuilder.getCommand("select pm1.g1.e2 from pm1.g1 where pm1.g1.e1 = 'a''b\\c'");
SQLConversionVisitor sqlVisitor = impalaTranslator.getSQLConversionVisitor();
sqlVisitor.append(obj);
assertEquals("SELECT g1.e2 FROM g1 WHERE g1.e1 = 'a\\'b\\\\c'", sqlVisitor.toString());
}
}

0 comments on commit 0d89c35

Please sign in to comment.