From 93acc0c9320b1c98ee1612de86d7369505d8b787 Mon Sep 17 00:00:00 2001 From: Scott Lepper Date: Wed, 15 May 2024 10:55:58 -0400 Subject: [PATCH] sqlexpressions - fix escape quote (#87921) --- pkg/expr/sql/parser.go | 1 + pkg/expr/sql/parser_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/pkg/expr/sql/parser.go b/pkg/expr/sql/parser.go index 0ebee1b7d99..8b049cd57b7 100644 --- a/pkg/expr/sql/parser.go +++ b/pkg/expr/sql/parser.go @@ -19,6 +19,7 @@ const ( // TablesList returns a list of tables for the sql statement func TablesList(rawSQL string) ([]string, error) { duckDB := duck.NewInMemoryDB() + rawSQL = strings.Replace(rawSQL, "'", "''", -1) cmd := fmt.Sprintf("SELECT json_serialize_sql('%s')", rawSQL) ret, err := duckDB.RunCommands([]string{cmd}) if err != nil { diff --git a/pkg/expr/sql/parser_test.go b/pkg/expr/sql/parser_test.go index 26f16212ed9..24303ce0178 100644 --- a/pkg/expr/sql/parser_test.go +++ b/pkg/expr/sql/parser_test.go @@ -196,3 +196,21 @@ func TestWith(t *testing.T) { assert.Equal(t, "B", tables[1]) assert.Equal(t, "BEE", tables[2]) } + +func TestWithQuote(t *testing.T) { + t.Skip() + sql := "select *,'junk' from foo" + tables, err := TablesList((sql)) + assert.Nil(t, err) + + assert.Equal(t, "foo", tables[0]) +} + +func TestWithQuote2(t *testing.T) { + t.Skip() + sql := "SELECT json_serialize_sql('SELECT 1')" + tables, err := TablesList((sql)) + assert.Nil(t, err) + + assert.Equal(t, 0, len(tables)) +}