chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
// Copyright 2026 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 (
|
||||
"testing"
|
||||
|
||||
"github.com/dolthub/go-mysql-server/sql"
|
||||
)
|
||||
|
||||
func TestCreateProcedureLanguageSql(t *testing.T) {
|
||||
RunScripts(t, []ScriptTest{
|
||||
{
|
||||
Name: "procedure with insert returning",
|
||||
SetUpScript: []string{
|
||||
`CREATE TABLE public.games (
|
||||
id bigint NOT NULL,
|
||||
game_id character varying(4) NOT NULL,
|
||||
host_connection_id character varying(50) NOT NULL
|
||||
);`,
|
||||
`CREATE SEQUENCE public.games_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;`,
|
||||
`ALTER SEQUENCE public.games_id_seq OWNED BY public.games.id;`,
|
||||
`ALTER TABLE ONLY public.games ALTER COLUMN id SET DEFAULT nextval('public.games_id_seq'::regclass);`,
|
||||
},
|
||||
Assertions: []ScriptTestAssertion{
|
||||
{
|
||||
Query: `CREATE PROCEDURE public.add(INOUT new_host_connection_id character varying)
|
||||
LANGUAGE sql
|
||||
AS $$
|
||||
INSERT INTO public.games (
|
||||
game_id,
|
||||
host_connection_id
|
||||
)
|
||||
VALUES (2222, new_host_connection_id)
|
||||
RETURNING game_id;
|
||||
$$;`,
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
SkipResultsCheck: true, // TODO: need fix for returning results
|
||||
Query: `CALL add('f')`,
|
||||
Expected: []sql.Row{{"2222"}},
|
||||
},
|
||||
{
|
||||
Query: `SELECT id, game_id, host_connection_id FROM games`,
|
||||
Expected: []sql.Row{{1, "2222", "f"}},
|
||||
},
|
||||
{
|
||||
Query: `CREATE PROCEDURE public.create_game(INOUT new_host_connection_id character varying)
|
||||
LANGUAGE sql
|
||||
AS $$
|
||||
WITH new_game_id_holder (new_game_id) AS (
|
||||
SELECT n.random_number
|
||||
FROM (
|
||||
SELECT LPAD(FLOOR(random() * 10000)::varchar, 4, '0') AS random_number
|
||||
FROM generate_series(1, (SELECT COUNT(*) FROM public.games) + 10)
|
||||
) AS n
|
||||
LEFT OUTER JOIN
|
||||
public.games AS g on g.game_id = n.random_number
|
||||
WHERE g.id IS NULL
|
||||
LIMIT 1
|
||||
)
|
||||
INSERT INTO public.games (
|
||||
game_id,
|
||||
host_connection_id
|
||||
)
|
||||
VALUES (
|
||||
(SELECT new_game_id FROM new_game_id_holder),
|
||||
new_host_connection_id
|
||||
)
|
||||
RETURNING game_id;
|
||||
$$;`,
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: `CALL create_game('d')`,
|
||||
},
|
||||
{
|
||||
Query: `SELECT id, host_connection_id FROM games`,
|
||||
Expected: []sql.Row{{1, "f"}, {2, "d"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "procedure with default expression in parameter",
|
||||
SetUpScript: []string{
|
||||
`CREATE TABLE cp_test (a int, b text);`,
|
||||
},
|
||||
Assertions: []ScriptTestAssertion{
|
||||
{
|
||||
Query: `CREATE OR REPLACE PROCEDURE ptest5(a int, b text, c int default 100)
|
||||
LANGUAGE SQL
|
||||
AS $$
|
||||
INSERT INTO cp_test VALUES(a, b);
|
||||
INSERT INTO cp_test VALUES(c, b);
|
||||
$$;`,
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: `CALL ptest5(10, 'Hello', 20);`,
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: `SELECT * FROM cp_test`,
|
||||
Expected: []sql.Row{{10, "Hello"}, {20, "Hello"}},
|
||||
},
|
||||
{
|
||||
Query: `CALL ptest5(50, 'Bye');`,
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: `SELECT * FROM cp_test`,
|
||||
Expected: []sql.Row{{10, "Hello"}, {20, "Hello"}, {50, "Bye"}, {100, "Bye"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user