diff --git a/main/src/com/google/refine/exporters/sql/SqlInsertBuilder.java b/main/src/com/google/refine/exporters/sql/SqlInsertBuilder.java index bfeaa1412..1c7efe69f 100755 --- a/main/src/com/google/refine/exporters/sql/SqlInsertBuilder.java +++ b/main/src/com/google/refine/exporters/sql/SqlInsertBuilder.java @@ -121,7 +121,7 @@ public class SqlInsertBuilder { handleNullField(allowNullChkBox, defaultValue, nullValueNull, val.getColumnName(), rowValue, true); }else { - rowValue.append("'" + val.getText() + "'"); + rowValue.append("'" + val.getText().replace("'","''") + "'"); } diff --git a/main/tests/server/src/com/google/refine/tests/exporters/sql/SqlExporterTests.java b/main/tests/server/src/com/google/refine/tests/exporters/sql/SqlExporterTests.java index 8c662258c..c6f8dcbfa 100644 --- a/main/tests/server/src/com/google/refine/tests/exporters/sql/SqlExporterTests.java +++ b/main/tests/server/src/com/google/refine/tests/exporters/sql/SqlExporterTests.java @@ -359,6 +359,32 @@ public class SqlExporterTests extends RefineTest { Assert.assertEquals(countNull, noOfCols); } + + @Test + public void testExportSqlWithSingleQuote(){ + int noOfCols = 4; + int noOfRows = 1; + createGridWithSingleQuote(noOfRows, noOfCols); + String tableName = "sql_table_test"; + JSONObject optionsJson = createOptionsFromProject(tableName, null, null, null, false); + optionsJson.put("includeStructure", true); + optionsJson.put("includeDropStatement", true); + optionsJson.put("convertNulltoEmptyString", true); + + when(options.getProperty("options")).thenReturn(optionsJson.toString()); + try { + SUT.export(project, options, engine, writer); + } catch (IOException e) { + Assert.fail(); + } + + String result = writer.toString(); + logger.info("\nresult:={} ", result); + + Assert.assertTrue(result.contains("INSERT INTO sql_table_test (column0,column1,column2,column3) VALUES \n" + + "( 'It''s row0cell0','It''s row0cell1','It''s row0cell2','It''s row0cell3' )")); + + } //helper methods @@ -399,6 +425,18 @@ public class SqlExporterTests extends RefineTest { } } + protected void createGridWithSingleQuote(int noOfRows, int noOfColumns){ + createColumns(noOfColumns); + + for(int i = 0; i < noOfRows; i++){ + Row row = new Row(noOfColumns); + for(int j = 0; j < noOfColumns; j++){ + row.cells.add(new Cell("It's row" + i + "cell" + j, null)); + } + project.rows.add(row); + } + } + protected void createGridWithNullFields(int noOfRows, int noOfColumns, int noOfNullFields){ createColumns(noOfColumns); if(noOfNullFields > (noOfColumns * noOfRows)) {