123 lines
4.0 KiB
Go
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{},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|