diff --git a/src/adql/translator/JDBCTranslator.java b/src/adql/translator/JDBCTranslator.java index 0ba1b0df224e81ff6aefb7370f4a1f59026b00bb..348cffed7978e29f0d8f600791e98ab2707dd25d 100644 --- a/src/adql/translator/JDBCTranslator.java +++ b/src/adql/translator/JDBCTranslator.java @@ -167,8 +167,8 @@ import adql.query.operand.function.geometry.RegionFunction; * </p> * * @author Grégory Mantelet (ARI) - * @version 1.3 (05/2015) - * @since 1.3 + * @version 1.4 (09/2015) + * @since 1.4 * * @see PostgreSQLTranslator * @see PgSphereTranslator @@ -677,7 +677,7 @@ public abstract class JDBCTranslator implements ADQLTranslator { @Override public String translate(StringConstant strConst) throws TranslationException{ - return "'" + strConst.getValue() + "'"; + return "'" + strConst.getValue().replaceAll("'", "''") + "'"; } @Override diff --git a/test/adql/translator/TestJDBCTranslator.java b/test/adql/translator/TestJDBCTranslator.java new file mode 100644 index 0000000000000000000000000000000000000000..577b11f896270097d6b3820a0a952d8732bcb2c6 --- /dev/null +++ b/test/adql/translator/TestJDBCTranslator.java @@ -0,0 +1,136 @@ +package adql.translator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import org.junit.Before; +import org.junit.Test; + +import adql.db.DBType; +import adql.db.STCS.Region; +import adql.parser.ParseException; +import adql.query.IdentifierField; +import adql.query.operand.StringConstant; +import adql.query.operand.function.geometry.AreaFunction; +import adql.query.operand.function.geometry.BoxFunction; +import adql.query.operand.function.geometry.CentroidFunction; +import adql.query.operand.function.geometry.CircleFunction; +import adql.query.operand.function.geometry.ContainsFunction; +import adql.query.operand.function.geometry.DistanceFunction; +import adql.query.operand.function.geometry.ExtractCoord; +import adql.query.operand.function.geometry.ExtractCoordSys; +import adql.query.operand.function.geometry.IntersectsFunction; +import adql.query.operand.function.geometry.PointFunction; +import adql.query.operand.function.geometry.PolygonFunction; +import adql.query.operand.function.geometry.RegionFunction; + +public class TestJDBCTranslator { + + @Before + public void setUp() throws Exception{} + + @Test + public void testTranslateStringConstant(){ + JDBCTranslator tr = new AJDBCTranslator(); + + /* Ensure the translation from ADQL to SQL of strings is correct ; + * particularly, ' should be escaped otherwise it would mean the end of a string in SQL + *(the way to escape a such character is by doubling the character '): */ + try{ + assertEquals("'SQL''s translation'", tr.translate(new StringConstant("SQL's translation"))); + }catch(TranslationException e){ + e.printStackTrace(System.err); + fail("There should have been no problem to translate a StringConstant object into SQL."); + } + } + + public final static class AJDBCTranslator extends JDBCTranslator { + + @Override + public String translate(ExtractCoord extractCoord) throws TranslationException{ + return null; + } + + @Override + public String translate(ExtractCoordSys extractCoordSys) throws TranslationException{ + return null; + } + + @Override + public String translate(AreaFunction areaFunction) throws TranslationException{ + return null; + } + + @Override + public String translate(CentroidFunction centroidFunction) throws TranslationException{ + return null; + } + + @Override + public String translate(DistanceFunction fct) throws TranslationException{ + return null; + } + + @Override + public String translate(ContainsFunction fct) throws TranslationException{ + return null; + } + + @Override + public String translate(IntersectsFunction fct) throws TranslationException{ + return null; + } + + @Override + public String translate(PointFunction point) throws TranslationException{ + return null; + } + + @Override + public String translate(CircleFunction circle) throws TranslationException{ + return null; + } + + @Override + public String translate(BoxFunction box) throws TranslationException{ + return null; + } + + @Override + public String translate(PolygonFunction polygon) throws TranslationException{ + return null; + } + + @Override + public String translate(RegionFunction region) throws TranslationException{ + return null; + } + + @Override + public boolean isCaseSensitive(IdentifierField field){ + return false; + } + + @Override + public DBType convertTypeFromDB(int dbmsType, String rawDbmsTypeName, String dbmsTypeName, String[] typeParams){ + return null; + } + + @Override + public String convertTypeToDB(DBType type){ + return null; + } + + @Override + public Region translateGeometryFromDB(Object jdbcColValue) throws ParseException{ + return null; + } + + @Override + public Object translateGeometryToDB(Region region) throws ParseException{ + return null; + } + + } + +}