Skip to content

Commit 85a753d

Browse files
committed
convert if eval result to correct type
1 parent c62c7e3 commit 85a753d

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

enginetest/queries/order_by_group_by_queries.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,4 +305,17 @@ var OrderByGroupByScriptTests = []ScriptTest{
305305
},
306306
},
307307
},
308+
{
309+
Name: "Group by true and 1",
310+
SetUpScript: []string{
311+
"create table t0(c0 int)",
312+
"insert into t0(c0) values(1),(123)",
313+
},
314+
Assertions: []ScriptTestAssertion{
315+
{
316+
Query: "select if(t0.c0 = 123, TRUE, t0.c0) AS ref0, min(t0.c0) as ref1 from t0 group by ref0",
317+
Expected: []sql.Row{{1, 1}},
318+
},
319+
},
320+
},
308321
}

enginetest/queries/queries.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6123,7 +6123,7 @@ SELECT * FROM cte WHERE d = 2;`,
61236123
{
61246124
Query: `SELECT if(0, "abc", 456)`,
61256125
Expected: []sql.Row{
6126-
{456},
6126+
{"456"},
61276127
},
61286128
},
61296129
{
@@ -9696,7 +9696,7 @@ from typestable`,
96969696
{
96979697
Query: "select if('', 1, char(''));",
96989698
Expected: []sql.Row{
9699-
{[]byte{0}},
9699+
{"\x00"},
97009700
},
97019701
},
97029702
{

sql/expression/function/if.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,20 @@ func (f *If) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
7777
}
7878
}
7979

80+
var eval interface{}
8081
if asBool {
81-
return f.ifTrue.Eval(ctx, row)
82+
eval, err = f.ifTrue.Eval(ctx, row)
83+
if err != nil {
84+
return nil, err
85+
}
8286
} else {
83-
return f.ifFalse.Eval(ctx, row)
87+
eval, err = f.ifFalse.Eval(ctx, row)
88+
if err != nil {
89+
return nil, err
90+
}
8491
}
92+
eval, _, err = f.Type().Convert(ctx, eval)
93+
return eval, err
8594
}
8695

8796
// Type implements the Expression interface.

0 commit comments

Comments
 (0)