diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryType.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryType.java index 6eeaf801ddee..2cd6a6df6774 100644 --- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryType.java +++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryType.java @@ -179,7 +179,8 @@ private static ZonedDateTime toZonedDateTime(long millisUtc, ZoneId zoneId) static String stringToStringConverter(Object value) { Slice slice = (Slice) value; - return quote(slice.toStringUtf8()); + // TODO (https://github.com/trinodb/trino/issues/7900) Add support for all String and Bytes literals + return quote(slice.toStringUtf8().replace("'", "\\'")); } static String numericToStringConverter(Object value) diff --git a/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryIntegrationSmokeTest.java b/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryIntegrationSmokeTest.java index 35f380b10096..60537e6e1eeb 100644 --- a/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryIntegrationSmokeTest.java +++ b/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryIntegrationSmokeTest.java @@ -244,6 +244,21 @@ public void testSelectFromYearlyPartitionedTable() assertEquals((long) actualValues.getOnlyValue(), 1L); } + @Test(description = "regression test for https://github.com/trinodb/trino/issues/7784") + public void testSelectWithSingleQuoteInWhereClause() + { + String tableName = "test.select_with_single_quote"; + + onBigQuery("DROP TABLE IF EXISTS " + tableName); + onBigQuery("CREATE TABLE " + tableName + "(col INT64, val STRING)"); + onBigQuery("INSERT INTO " + tableName + " VALUES (1,'escape\\'single quote')"); + + MaterializedResult actualValues = computeActual("SELECT val FROM " + tableName + " WHERE val = 'escape''single quote'"); + + assertEquals(actualValues.getRowCount(), 1); + assertEquals(actualValues.getOnlyValue(), "escape'single quote"); + } + @Test(description = "regression test for https://github.com/trinodb/trino/issues/5618") public void testPredicatePushdownPrunnedColumns() { diff --git a/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryType.java b/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryType.java index fe4eac0eb00b..0224a96e7727 100644 --- a/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryType.java +++ b/plugin/trino-bigquery/src/test/java/io/trino/plugin/bigquery/TestBigQueryType.java @@ -54,6 +54,10 @@ public void testStringToStringConverter() assertThat(BigQueryType.stringToStringConverter( utf8Slice("test"))) .isEqualTo("'test'"); + + assertThat(BigQueryType.stringToStringConverter( + utf8Slice("test's test"))) + .isEqualTo("'test\\'s test'"); } @Test