diff --git a/.gitignore b/.gitignore index d884bf35..d49953b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea src *.iml -coverage.* \ No newline at end of file +coverage.* +.env diff --git a/dialect/mysql/mysql.go b/dialect/mysql/mysql.go index d5566e49..a716e50d 100644 --- a/dialect/mysql/mysql.go +++ b/dialect/mysql/mysql.go @@ -81,7 +81,14 @@ func DialectOptionsV8() *goqu.SQLDialectOptions { return opts } +func DialectOptionsVSinglestore() *goqu.SQLDialectOptions { + opts := DialectOptionsV8() + opts.SupportsWithCTE = true + return opts +} + func init() { goqu.RegisterDialect("mysql", DialectOptions()) goqu.RegisterDialect("mysql8", DialectOptionsV8()) + goqu.RegisterDialect("mysqlSinglestore", DialectOptionsVSinglestore()) } diff --git a/dialect/mysql/mysql_test.go b/dialect/mysql/mysql_test.go index c9299f47..3f21d264 100644 --- a/dialect/mysql/mysql_test.go +++ b/dialect/mysql/mysql_test.go @@ -129,6 +129,11 @@ func (mt *mysqlTest) TestToSQL() { ds: ds.Prepared(true).Where(goqu.L("? = ?", goqu.C("int"), 10)), sql: "SELECT * FROM `entry` WHERE `int` = ?", args: []interface{}{int64(10)}, }, + sqlTestCase{ + ds: ds.With("entrySubselect", goqu.From("entry").Select("id").Where(goqu.C("int").Gt(8))). + Select(goqu.Star()).Where(goqu.Ex{ "id": goqu.Op{ "in": goqu.From("entrySubselect").Select(goqu.Star()) } }), + sql: "WITH `entrySubselect` as (SELECT id from `entry` where int > 5) select * from `entry`", + }, ) }