Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion enginetest/engine_only_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -717,7 +717,8 @@

func TestRegex(t *testing.T) {
harness := enginetest.NewDefaultMemoryHarness()
harness.Setup(setup.SimpleSetup...)
setupsScripts := append(setup.SimpleSetup, queries.RegexSetup)

Check failure on line 720 in enginetest/engine_only_test.go

View workflow job for this annotation

GitHub Actions / test

undefined: queries.RegexSetup

Check failure on line 720 in enginetest/engine_only_test.go

View workflow job for this annotation

GitHub Actions / test (ubuntu-latest)

undefined: queries.RegexSetup
harness.Setup(setupsScripts...)
engine, err := harness.NewEngine(t)
require.NoError(t, err)
defer engine.Close()
Expand Down
2 changes: 1 addition & 1 deletion enginetest/enginetests.go
Original file line number Diff line number Diff line change
Expand Up @@ -3046,7 +3046,7 @@ func TestRenameColumn(t *testing.T, harness Harness) {
TestQueryWithContext(t, ctx, e, harness, "ALTER TABLE mydb.tabletest RENAME COLUMN s TO i1", []sql.Row{{types.NewOkResult(0)}}, nil, nil, nil)
TestQueryWithContext(t, ctx, e, harness, "SHOW FULL COLUMNS FROM mydb.tabletest", []sql.Row{
{"i", "int", nil, "NO", "PRI", nil, "", "", ""},
{"i1", "varchar(20)", "utf8mb4_0900_bin", "NO", "", nil, "", "", ""},
{"i1", "text", "utf8mb4_0900_bin", "NO", "", nil, "", "", ""},
}, nil, nil, nil)
})
}
Expand Down
8 changes: 8 additions & 0 deletions enginetest/queries/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -6772,6 +6772,10 @@ SELECT * FROM cte WHERE d = 2;`,
Query: "select replace(s, 'row', '') from mytable order by i",
Expected: []sql.Row{{"first "}, {"second "}, {"third "}},
},
{
Query: "select replace(s, 'row', '') from tabletest order by i",
Expected: []sql.Row{{"first "}, {"second "}, {"third "}},
},
{
Query: "select rpad(s, 13, ' ') from mytable order by i",
Expected: []sql.Row{{"first row "}, {"second row "}, {"third row "}},
Expand All @@ -6780,6 +6784,10 @@ SELECT * FROM cte WHERE d = 2;`,
Query: "select lpad(s, 13, ' ') from mytable order by i",
Expected: []sql.Row{{" first row"}, {" second row"}, {" third row"}},
},
{
Query: "select lpad(s, 13, ' ') from tabletest order by i",
Expected: []sql.Row{{" first row"}, {" second row"}, {" third row"}},
},
{
Query: "select sqrt(i) from mytable order by i",
Expected: []sql.Row{{1.0}, {1.4142135623730951}, {1.7320508075688772}},
Expand Down
15 changes: 13 additions & 2 deletions enginetest/queries/regex_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
package queries

import (
"gopkg.in/src-d/go-errors.v1"

regex "github.com/dolthub/go-icu-regex"
"gopkg.in/src-d/go-errors.v1"

"github.com/dolthub/go-mysql-server/enginetest/scriptgen/setup"
"github.com/dolthub/go-mysql-server/sql"
)

Expand All @@ -34,6 +34,13 @@ type RegexTest struct {
ExpectedErr *errors.Kind
}

var RegexSetup = []setup.SetupScript{
{
"CREATE TABLE tests(pk int primary key, str text, pattern text, flags text);",
"INSERT INTO tests VALUES (1, 'testing', 'TESTING', 'ci');",
},
}

var RegexTests = []RegexTest{
{
Query: "SELECT REGEXP_LIKE('testing', 'TESTING');",
Expand All @@ -55,6 +62,10 @@ var RegexTests = []RegexTest{
Query: "SELECT REGEXP_LIKE('testing', 'TESTING', 'ic');",
Expected: []sql.Row{{0}},
},
{
Query: "SELECT REGEXP_LIKE(str, pattern, flags) from tests;",
Expected: []sql.Row{{1}},
},
{
Query: "SELECT REGEXP_LIKE('testing', 'TESTING' COLLATE utf8mb4_0900_ai_ci);",
Expected: []sql.Row{{1}},
Expand Down
2 changes: 1 addition & 1 deletion enginetest/scriptgen/setup/scripts/tabletest
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
exec
create table tabletest (
i int primary key,
s varchar(20) not null
s text not null
)
----

Expand Down
2 changes: 1 addition & 1 deletion enginetest/scriptgen/setup/setup_data.sg.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 15 additions & 4 deletions sql/expression/function/regexp_like.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,12 @@ func (r *RegexpLike) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
if err != nil {
return nil, err
}
textStr, _, err := sql.Unwrap[string](ctx, text)
if err != nil {
return nil, err
}

err = r.re.SetMatchString(ctx, text.(string))
err = r.re.SetMatchString(ctx, textStr)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -220,9 +224,13 @@ func compileRegex(ctx *sql.Context, pattern, text, flags sql.Expression, funcNam
if err != nil {
return nil, err
}
patternValStr, _, err := sql.Unwrap[string](ctx, patternVal)
if err != nil {
return nil, err
}

// Empty regex, throw illegal argument
if len(patternVal.(string)) == 0 {
if len(patternValStr) == 0 {
return nil, errors.NewKind("Illegal argument to regular expression.").New()
}

Expand Down Expand Up @@ -250,7 +258,10 @@ func compileRegex(ctx *sql.Context, pattern, text, flags sql.Expression, funcNam
return nil, err
}

flagsStr = f.(string)
flagsStr, _, err = sql.Unwrap[string](ctx, f)
if err != nil {
return nil, err
}
flagsStr, err = consolidateRegexpFlags(flagsStr, funcName)
if err != nil {
return nil, err
Expand Down Expand Up @@ -279,7 +290,7 @@ func compileRegex(ctx *sql.Context, pattern, text, flags sql.Expression, funcNam
ctx.Warn(1193, `System variable for regular expressions "regexp_buffer_size" is missing`)
}
re := regex.CreateRegex(bufferSize)
if err = re.SetRegexString(ctx, patternVal.(string), regexFlags); err != nil {
if err = re.SetRegexString(ctx, patternValStr, regexFlags); err != nil {
_ = re.Close()
return nil, err
}
Expand Down
25 changes: 21 additions & 4 deletions sql/expression/function/reverse_repeat_replace.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,9 +280,26 @@ func (r *Replace) Eval(
return nil, err
}

if fromStr.(string) == "" {
return str, nil
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the additional block?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The blocks are there so that I can redeclare fromStr et al as strings instead of interface{}. Without the block I'd need to pick new names for the unwrapped versions, which would be noisy.

str, _, err := sql.Unwrap[string](ctx, str)
if err != nil {
return nil, err
}

fromStr, _, err := sql.Unwrap[string](ctx, fromStr)
if err != nil {
return nil, err
}

toStr, _, err := sql.Unwrap[string](ctx, toStr)
if err != nil {
return nil, err
}

if fromStr == "" {
return str, nil
}

return strings.Replace(str, fromStr, toStr, -1), nil
}

return strings.Replace(str.(string), fromStr.(string), toStr.(string), -1), nil
}
14 changes: 13 additions & 1 deletion sql/expression/function/rpad_lpad.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,19 @@ func (p *Pad) Eval(
return nil, err
}

return padString(str.(string), length.(int64), padStr.(string), p.padType)
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again on the block?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above.

str, _, err := sql.Unwrap[string](ctx, str)
if err != nil {
return nil, err
}

padStr, _, err := sql.Unwrap[string](ctx, padStr)
if err != nil {
return nil, err
}

return padString(str, length.(int64), padStr, p.padType)
}
}

func padString(str string, length int64, padStr string, padType padType) (string, error) {
Expand Down
Loading