Files
2026-07-13 12:32:25 +08:00

123 lines
4.0 KiB
Go

// Copyright 2025 Dolthub, Inc.
//
// 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 _go
import (
"os"
"runtime"
"testing"
"github.com/dolthub/go-mysql-server/sql"
)
func TestCreateExtension(t *testing.T) {
if runtime.GOOS == "windows" && os.Getenv("CI") != "" {
t.Skip("CI Postgres installation seems to behave weirdly, skipping for now") // TODO: look into this a bit more
}
RunScripts(t, []ScriptTest{
{
Name: "Extension Test: uuid-ossp",
SetUpScript: []string{
`CREATE EXTENSION "uuid-ossp";`,
},
Assertions: []ScriptTestAssertion{
{
Query: "SELECT uuid_ns_url();",
Expected: []sql.Row{{"6ba7b811-9dad-11d1-80b4-00c04fd430c8"}},
},
{
Skip: true, // This is returning different results on different platforms for some reason
Query: "SELECT uuid_generate_v3('00000000-0000-0000-0000-000000000000'::uuid, 'example text');",
Expected: []sql.Row{{"a55b875a-1bd9-31af-ac66-7d8323785c6e"}},
},
{
Skip: true, // For some reason, this returns the same result as above
Query: "SELECT uuid_generate_v3('00000000-0000-0000-0000-000000000001'::uuid, 'example text');",
Expected: []sql.Row{{"a319ab51-8e26-37c6-942f-7dd5fda5c3ef"}},
},
{
Skip: true, // Need to figure out why the result is wrong
Query: "SELECT uuid_generate_v3(uuid_ns_url(), 'example text');",
Expected: []sql.Row{{"6541262f-d622-3e35-8873-2b227591bf69"}},
},
{
Query: "SELECT uuid_nil();",
Expected: []sql.Row{{"00000000-0000-0000-0000-000000000000"}},
},
{
Query: "SELECT length(uuid_nil()::text);",
Expected: []sql.Row{{36}},
},
{
Query: "SELECT length(uuid_generate_v4()::text);",
Expected: []sql.Row{{36}},
},
{
Query: "SELECT uuid_generate_v4() = uuid_nil();",
Expected: []sql.Row{{"f"}},
},
{
Query: `WITH u1 AS (SELECT uuid_nil() AS id), u2 AS (SELECT uuid_nil() AS id) SELECT (SELECT id FROM u1) = (SELECT id FROM u2);`,
Expected: []sql.Row{{"t"}},
},
{
Query: `WITH u1 AS (SELECT uuid_generate_v4() AS id), u2 AS (SELECT uuid_generate_v4() AS id) SELECT (SELECT id FROM u1) = (SELECT id FROM u2);`,
Expected: []sql.Row{{"f"}},
},
},
},
{
Name: "create extension uuid-ossp after setting search_path to empty",
SetUpScript: []string{
`SELECT pg_catalog.set_config('search_path', '', false);`,
},
Assertions: []ScriptTestAssertion{
{
Query: `CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;`,
Expected: []sql.Row{},
},
{
Query: "SELECT uuid_nil();",
// TODO: error message should be "function uuid_nil() does not exist"
ExpectedErr: `function: 'uuid_nil' not found`,
},
{
Query: "SELECT public.uuid_nil();",
Expected: []sql.Row{{"00000000-0000-0000-0000-000000000000"}},
},
},
},
{
Name: "alter table with default expr using extension function when search_path is empty",
SetUpScript: []string{
`SELECT pg_catalog.set_config('search_path', '', false);`,
`CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;`,
`CREATE TABLE public.goals (
id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
note_id uuid,
completion_timestamp timestamp without time zone,
due_date timestamp without time zone
);`,
},
Assertions: []ScriptTestAssertion{
{
Query: `ALTER TABLE ONLY public.goals ADD CONSTRAINT goals_pkey PRIMARY KEY (id);`,
Expected: []sql.Row{},
},
},
},
})
}