mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 02:44:59 +00:00
fix sum aggregate (fb-1874) (#2404)
* handle sum aggregates with ints; handle escaped quotes in blob literals
* added test ceoverage
* skip subquery test for dax
(cherry picked from commit af475a27f2)
This commit is contained in:
parent
1cdcaf472f
commit
0ddf69a322
5 changed files with 82 additions and 0 deletions
|
|
@ -112,6 +112,7 @@ func TestDAXIntegration(t *testing.T) {
|
|||
"alterTable/alterTableBadTable", // looks like table does not exist is a different error in DAX
|
||||
"top-tests/test-1", // don't know why this is failing at all
|
||||
"delete_tests",
|
||||
"subquerytable", // subqueries seem to be a problem
|
||||
}
|
||||
|
||||
doSkip := func(name string) bool {
|
||||
|
|
|
|||
|
|
@ -216,6 +216,11 @@ func (s *Scanner) scanBlob() (Pos, Token, string) {
|
|||
for i := 0; ; i++ {
|
||||
ch, _ := s.read()
|
||||
if ch == '\'' {
|
||||
if s.peek() == '\'' { // escaped quote
|
||||
s.read()
|
||||
s.buf.WriteRune('\'')
|
||||
continue
|
||||
}
|
||||
return pos, BLOB, s.buf.String()
|
||||
} else if ch == -1 {
|
||||
return pos, ILLEGAL, string(start) + `'` + s.buf.String()
|
||||
|
|
|
|||
|
|
@ -259,6 +259,24 @@ func (m *aggregateSum) Update(ctx context.Context, row types.Row) error {
|
|||
}
|
||||
dsum = pql.AddDecimal(dsum, val)
|
||||
m.sum = dsum
|
||||
|
||||
case *parser.DataTypeInt:
|
||||
val, ok := v.(int64)
|
||||
if !ok {
|
||||
return sql3.NewErrInternalf("unexpected type conversion '%T'", v)
|
||||
}
|
||||
var dsum int64
|
||||
if m.sum != nil {
|
||||
dsum, ok = m.sum.(int64)
|
||||
if !ok {
|
||||
return sql3.NewErrInternalf("unexpected type conversion '%T'", m.sum)
|
||||
}
|
||||
} else {
|
||||
dsum = 0
|
||||
}
|
||||
dsum = dsum + val
|
||||
m.sum = dsum
|
||||
|
||||
default:
|
||||
return sql3.NewErrInternalf("unhandled aggregate expression datatype '%T'", dataType)
|
||||
}
|
||||
|
|
@ -273,6 +291,13 @@ func (m *aggregateSum) Eval(ctx context.Context) (interface{}, error) {
|
|||
return nil, sql3.NewErrInternalf("unexpected type conversion '%T'", m.sum)
|
||||
}
|
||||
return dsum, nil
|
||||
|
||||
case *parser.DataTypeInt:
|
||||
dsum, ok := m.sum.(int64)
|
||||
if !ok {
|
||||
return nil, sql3.NewErrInternalf("unexpected type conversion '%T'", m.sum)
|
||||
}
|
||||
return dsum, nil
|
||||
default:
|
||||
return nil, sql3.NewErrInternalf("unhandled aggregate expression datatype '%T'", m.expr.Type())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ var TableTests []TableTest = []TableTest{
|
|||
orderByTests,
|
||||
distinctTests,
|
||||
|
||||
subqueryTests,
|
||||
|
||||
topTests,
|
||||
|
||||
deleteTests,
|
||||
|
|
|
|||
49
sql3/test/defs/defs_subquery.go
Normal file
49
sql3/test/defs/defs_subquery.go
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package defs
|
||||
|
||||
var subqueryTests = TableTest{
|
||||
name: "subquerytable",
|
||||
Table: tbl(
|
||||
"subquerytable",
|
||||
srcHdrs(
|
||||
srcHdr("_id", fldTypeID),
|
||||
srcHdr("a_string", fldTypeString),
|
||||
),
|
||||
srcRows(
|
||||
srcRow(int64(1), "str1"),
|
||||
srcRow(int64(2), "str1"),
|
||||
srcRow(int64(3), "str2"),
|
||||
srcRow(int64(4), "str2"),
|
||||
srcRow(int64(5), "str3"),
|
||||
),
|
||||
),
|
||||
SQLTests: []SQLTest{
|
||||
{
|
||||
name: "select-count",
|
||||
SQLs: sqls(
|
||||
"select sum(mycount) as thecount from (select count(a_string) as mycount, a_string from subquerytable group BY a_string);",
|
||||
),
|
||||
ExpHdrs: hdrs(
|
||||
hdr("thecount", fldTypeInt),
|
||||
),
|
||||
ExpRows: rows(
|
||||
row(int64(5)),
|
||||
),
|
||||
Compare: CompareExactUnordered,
|
||||
SortStringKeys: true,
|
||||
},
|
||||
{
|
||||
name: "select-count-distinct",
|
||||
SQLs: sqls(
|
||||
"select sum(mycount) as thecount from (select count(distinct a_string) as mycount, a_string from subquerytable group BY a_string);",
|
||||
),
|
||||
ExpHdrs: hdrs(
|
||||
hdr("thecount", fldTypeInt),
|
||||
),
|
||||
ExpRows: rows(
|
||||
row(int64(3)),
|
||||
),
|
||||
Compare: CompareExactUnordered,
|
||||
SortStringKeys: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue