Skip to content

Commit

Permalink
sql: unwrap in CastToCollatedString
Browse files Browse the repository at this point in the history
Unwarp once in CastToCollatedString.
In the assert message, type the output as is.

Fixes #38865

Release note: None
  • Loading branch information
vazrupe committed Aug 15, 2019
1 parent 02f239d commit 1bf3f99
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
15 changes: 15 additions & 0 deletions pkg/sql/logictest/testdata/logic_test/collatedstring
Expand Up @@ -19,6 +19,21 @@ SELECT 'A' COLLATE en
----
A

query T
SELECT ('A' COLLATE de) COLLATE en
----
A

query T
SELECT NAME 'A' COLLATE en
----
A

query T
SELECT (NAME 'A' COLLATE de) COLLATE en
----
A

query T
SELECT NULL COLLATE en
----
Expand Down
9 changes: 7 additions & 2 deletions pkg/sql/opt/norm/custom_funcs.go
Expand Up @@ -1600,14 +1600,19 @@ func (c *CustomFuncs) ConvertConstArrayToTuple(scalar opt.ScalarExpr) opt.Scalar
// CastToCollatedString returns the given string or collated string as a
// collated string constant with the given locale.
func (c *CustomFuncs) CastToCollatedString(str opt.ScalarExpr, locale string) opt.ScalarExpr {
datum := str.(*memo.ConstExpr).Value
if wrap, ok := datum.(*tree.DOidWrapper); ok {
datum = wrap.Wrapped
}

var value string
switch t := str.(*memo.ConstExpr).Value.(type) {
switch t := datum.(type) {
case *tree.DString:
value = string(*t)
case *tree.DCollatedString:
value = t.Contents
default:
panic(errors.AssertionFailedf("unexpected type for COLLATE: %T", log.Safe(str.(*memo.ConstExpr).Value)))
panic(errors.AssertionFailedf("unexpected type for COLLATE: %T", t))
}

return c.f.ConstructConst(tree.NewDCollatedString(value, locale, &c.f.evalCtx.CollationEnv))
Expand Down

0 comments on commit 1bf3f99

Please sign in to comment.