diff --git a/internal/function_window.go b/internal/function_window.go index 3240831..00889f7 100644 --- a/internal/function_window.go +++ b/internal/function_window.go @@ -449,7 +449,7 @@ func (f *WINDOW_LOGICAL_OR) Done(agg *WindowFuncAggregatedStatus) (Value, error) } } - return BoolValue(true), nil + return BoolValue(false), nil } type WINDOW_PERCENTILE_CONT struct { diff --git a/query_test.go b/query_test.go index cca5ed0..47b80f6 100644 --- a/query_test.go +++ b/query_test.go @@ -832,17 +832,58 @@ SELECT LOGICAL_AND(x) AS logical_or FROM toks`, SELECT LOGICAL_OR(x) AS logical_or FROM toks`, expectedRows: [][]interface{}{{false}}, }, + {name: "logical_and default", + query: `SELECT LOGICAL_AND(a) OVER (ORDER BY b), a, b +FROM ( + SELECT CAST(a AS BOOL) AS a, b FROM UNNEST([ + STRUCT(False AS a, 1 AS b), + STRUCT(False AS a, 2 AS b), + STRUCT(false AS a, 3 AS b), + STRUCT(False AS a, 4 AS b) + ]) +);`, + expectedRows: [][]interface{}{ + {false, false, int64(1)}, + {false, false, int64(2)}, + {false, false, int64(3)}, + {false, false, int64(4)}, + }}, + {name: "logical_and no rows", + query: `SELECT LOGICAL_AND(a) OVER (ORDER BY a) FROM ( SELECT CAST(a AS BOOL) AS a FROM UNNEST([]) a );`, + expectedRows: make([][]interface{}, 0), + }, { name: "logical_and with window", query: `WITH toks AS ( SELECT true AS x UNION ALL SELECT false UNION ALL SELECT true) SELECT LOGICAL_AND(x) OVER (ORDER BY x) FROM toks`, expectedRows: [][]interface{}{{false}, {false}, {false}}, }, + + {name: "logical_or window default", + query: `SELECT LOGICAL_OR(a) OVER (ORDER BY b), a, b +FROM ( + SELECT CAST(a AS BOOL) AS a, b FROM UNNEST([ + STRUCT(False AS a, 1 AS b), + STRUCT(False AS a, 2 AS b), + STRUCT(True AS a, 3 AS b), + STRUCT(False AS a, 4 AS b) + ]) +);`, + expectedRows: [][]interface{}{ + {false, false, int64(1)}, + {false, false, int64(2)}, + {true, true, int64(3)}, + {true, false, int64(4)}, + }}, + {name: "logical_or window no rows", + query: `SELECT LOGICAL_OR(a) OVER (ORDER BY a) FROM ( SELECT CAST(a AS BOOL) AS a FROM UNNEST([]) a );`, + expectedRows: make([][]interface{}, 0), + }, { name: "logical_or with window", query: `WITH toks AS ( SELECT true AS x UNION ALL SELECT false UNION ALL SELECT true) SELECT LOGICAL_OR(x) OVER (ORDER BY x) FROM toks`, - expectedRows: [][]interface{}{{true}, {true}, {true}}, + expectedRows: [][]interface{}{{false}, {true}, {true}}, }, { name: "max from int group",