blob: 7bc555235bb25580a41c15bf6dfbef446ee3a809 [file] [log] [blame]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package query
import "testing"
func TestDetectOrderedResults(t *testing.T) {
testCases := []struct {
query string
isOrdered bool
}{
{query: "SELECT 1 AS num FROM a ORDER BY num", isOrdered: true},
{query: "SELECT 1 AS num FROM a", isOrdered: false},
{query: "SELECT 1 AS num FROM (SELECT x FROM b ORDER BY x)", isOrdered: false},
{query: "SELECT x AS num FROM (SELECT x FROM b ORDER BY x) a inner join b on b.x = a.x ORDER BY x", isOrdered: true},
{query: "SELECT SUM(1) FROM a", isOrdered: false},
{query: "SELECT COUNT(a.x) FROM a ORDER BY b", isOrdered: true},
{query: "SELECT FOO(a.x, a.y) FROM a ORDER BY a", isOrdered: true},
// Invalid queries
{query: "SELECT 1 AS num FROM a (", isOrdered: false},
{query: "SELECT 1 AS num FROM a )", isOrdered: false},
// Script statements
{query: "CALL foo()", isOrdered: false},
{query: "DECLARE x INT64", isOrdered: false},
{query: "SET x = 4;", isOrdered: false},
}
for _, tc := range testCases {
got := HasOrderedResults(tc.query)
if got != tc.isOrdered {
if tc.isOrdered {
t.Fatalf("expected query `%s` to be ordered", tc.query)
} else {
t.Fatalf("expected query `%s` to not be ordered", tc.query)
}
}
}
}