From 843a23d4ff74676183fc5d632e22eab32260f57a Mon Sep 17 00:00:00 2001 From: Michael Fridman Date: Wed, 5 Jul 2023 08:58:42 -0400 Subject: [PATCH] test: add C-style comments test case to sqlparser test (#555) --- Makefile | 38 ++++++++++++++++--- internal/sqlparser/parser_test.go | 5 ++- .../testdata/valid-up/test01/01.golden.sql | 2 +- .../testdata/valid-up/test01/02.golden.sql | 2 +- .../testdata/valid-up/test01/03.golden.sql | 2 +- .../testdata/valid-up/test02/01.golden.sql | 2 +- .../testdata/valid-up/test03/01.golden.sql | 2 +- .../testdata/valid-up/test04/01.golden.sql | 2 +- .../testdata/valid-up/test04/02.golden.sql | 2 +- .../testdata/valid-up/test04/03.golden.sql | 2 +- .../testdata/valid-up/test05/01.golden.sql | 2 +- .../testdata/valid-up/test05/02.golden.sql | 2 +- .../testdata/valid-up/test06/01.golden.sql | 2 +- .../testdata/valid-up/test06/02.golden.sql | 2 +- .../testdata/valid-up/test06/03.golden.sql | 2 +- .../testdata/valid-up/test06/04.golden.sql | 2 +- .../testdata/valid-up/test06/05.golden.sql | 2 +- .../testdata/valid-up/test07/01.golden.sql | 2 +- .../testdata/valid-up/test08/01.golden.sql | 5 +++ .../testdata/valid-up/test08/02.golden.sql | 5 +++ .../testdata/valid-up/test08/03.golden.sql | 5 +++ .../testdata/valid-up/test08/04.golden.sql | 1 + .../testdata/valid-up/test08/05.golden.sql | 1 + .../testdata/valid-up/test08/06.golden.sql | 1 + .../testdata/valid-up/test08/input.sql | 23 +++++++++++ 25 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 internal/sqlparser/testdata/valid-up/test08/01.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/02.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/03.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/04.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/05.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/06.golden.sql create mode 100644 internal/sqlparser/testdata/valid-up/test08/input.sql diff --git a/Makefile b/Makefile index eda49a8c4..46b444fbc 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,13 @@ GO_TEST_FLAGS ?= -race -count=1 -v -timeout=10m +# These are the default values for the test database. They can be overridden +DB_USER ?= dbuser +DB_PASSWORD ?= password1 +DB_NAME ?= testdb +DB_POSTGRES_PORT ?= 5433 +DB_MYSQL_PORT ?= 3307 +DB_CLICKHOUSE_PORT ?= 9001 + .PHONY: dist dist: @mkdir -p ./bin @@ -42,11 +50,31 @@ test-e2e-vertica: docker-cleanup: docker stop -t=0 $$(docker ps --filter="label=goose_test" -aq) -docker-start-postgres: +docker-postgres: docker run --rm -d \ - -e POSTGRES_USER=${POSTGRES_DB_USER} \ - -e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \ - -e POSTGRES_DB=${POSTGRES_DBNAME} \ - -p ${POSTGRES_PORT}:5432 \ + -e POSTGRES_USER=$(DB_USER) \ + -e POSTGRES_PASSWORD=$(DB_PASSWORD) \ + -e POSTGRES_DB=$(DB_NAME) \ + -p $(DB_POSTGRES_PORT):5432 \ -l goose_test \ postgres:14-alpine -c log_statement=all + +docker-mysql: + docker run --rm -d \ + -e MYSQL_ROOT_PASSWORD=rootpassword1 \ + -e MYSQL_DATABASE=$(DB_NAME) \ + -e MYSQL_USER=$(DB_USER) \ + -e MYSQL_PASSWORD=$(DB_PASSWORD) \ + -p $(DB_MYSQL_PORT):3306 \ + -l goose_test \ + mysql:8.0.31 + +docker-clickhouse: + docker run --rm -d \ + -e CLICKHOUSE_DB=$(DB_NAME) \ + -e CLICKHOUSE_USER=$(DB_USER) \ + -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 \ + -e CLICKHOUSE_PASSWORD=$(DB_PASSWORD) \ + -p $(DB_CLICKHOUSE_PORT):9000/tcp \ + -l goose_test \ + clickhouse/clickhouse-server:23-alpine diff --git a/internal/sqlparser/parser_test.go b/internal/sqlparser/parser_test.go index d95eecd05..6b08115ab 100644 --- a/internal/sqlparser/parser_test.go +++ b/internal/sqlparser/parser_test.go @@ -379,6 +379,7 @@ func TestValidUp(t *testing.T) { {Name: "test05", StatementsCount: 2}, {Name: "test06", StatementsCount: 5}, {Name: "test07", StatementsCount: 1}, + {Name: "test08", StatementsCount: 6}, } for _, tc := range tests { path := filepath.Join("testdata", "valid-up", tc.Name) @@ -422,7 +423,7 @@ func compareStatements(t *testing.T, dir string, statements []string) { by, err := os.ReadFile(goldenFilePath) check.NoError(t, err) - got, want := strings.TrimSpace(statements[index]), strings.TrimSpace(string(by)) + got, want := statements[index], string(by) if got != want { if isCIEnvironment() { @@ -433,7 +434,7 @@ func compareStatements(t *testing.T, dir string, statements []string) { filepath.Join("internal", "sqlparser", goldenFilePath+".FAIL"), filepath.Join("internal", "sqlparser", goldenFilePath), ) - err := os.WriteFile(goldenFilePath+".FAIL", []byte(got+"\n"), 0644) + err := os.WriteFile(goldenFilePath+".FAIL", []byte(got), 0644) check.NoError(t, err) } } diff --git a/internal/sqlparser/testdata/valid-up/test01/01.golden.sql b/internal/sqlparser/testdata/valid-up/test01/01.golden.sql index c0ef78273..52de704a6 100644 --- a/internal/sqlparser/testdata/valid-up/test01/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test01/01.golden.sql @@ -3,4 +3,4 @@ CREATE TABLE emp ( salary integer, last_date timestamp, last_user text -); +); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test01/02.golden.sql b/internal/sqlparser/testdata/valid-up/test01/02.golden.sql index e3ebfa838..2307a56bf 100644 --- a/internal/sqlparser/testdata/valid-up/test01/02.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test01/02.golden.sql @@ -18,4 +18,4 @@ CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ NEW.last_user := current_user; RETURN NEW; END; -$emp_stamp$ LANGUAGE plpgsql; +$emp_stamp$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test01/03.golden.sql b/internal/sqlparser/testdata/valid-up/test01/03.golden.sql index 53347ff22..253770588 100644 --- a/internal/sqlparser/testdata/valid-up/test01/03.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test01/03.golden.sql @@ -1,2 +1,2 @@ CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp - FOR EACH ROW EXECUTE FUNCTION emp_stamp(); + FOR EACH ROW EXECUTE FUNCTION emp_stamp(); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test02/01.golden.sql b/internal/sqlparser/testdata/valid-up/test02/01.golden.sql index 54541fb35..fabdc06f9 100644 --- a/internal/sqlparser/testdata/valid-up/test02/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test02/01.golden.sql @@ -30,4 +30,4 @@ $emp_audit$ LANGUAGE plpgsql; CREATE TRIGGER emp_audit AFTER INSERT OR UPDATE OR DELETE ON emp - FOR EACH ROW EXECUTE FUNCTION process_emp_audit(); + FOR EACH ROW EXECUTE FUNCTION process_emp_audit(); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test03/01.golden.sql b/internal/sqlparser/testdata/valid-up/test03/01.golden.sql index 092357147..ca8f5afa9 100644 --- a/internal/sqlparser/testdata/valid-up/test03/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test03/01.golden.sql @@ -29,4 +29,4 @@ BEGIN EXECUTE a_output; END; -' LANGUAGE 'plpgsql'; +' LANGUAGE 'plpgsql'; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test04/01.golden.sql b/internal/sqlparser/testdata/valid-up/test04/01.golden.sql index d6a1dc25f..436f0ff50 100644 --- a/internal/sqlparser/testdata/valid-up/test04/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test04/01.golden.sql @@ -1,4 +1,4 @@ CREATE TABLE ssh_keys ( id integer NOT NULL, "publicKey" text -); +); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test04/02.golden.sql b/internal/sqlparser/testdata/valid-up/test04/02.golden.sql index e5cec5b66..8860334c6 100644 --- a/internal/sqlparser/testdata/valid-up/test04/02.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test04/02.golden.sql @@ -5,4 +5,4 @@ fkuWRZjkUvy7nfPLjzM+t6SEvY4lbn3ihLPumZjwgvuCY3vDZY8V1/NMoP8MKATGR+S7D7gv I6KD9jkiSsTJMiotb/dRkXE3bG0nmjchhhLzMG551G8IZEpWBHDqEisCIl8yCd9YZV69BZTu L48zPl/CFvA+KJJ6LklxfwWeVDQ+ve2OIW0B1uLhR/MsoYbDQztbgIayg6ieMO/KlQIDAQAB -----END RSA PUBLIC KEY----- -'); +'); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test04/03.golden.sql b/internal/sqlparser/testdata/valid-up/test04/03.golden.sql index 7e7d19be9..dc4e5116b 100644 --- a/internal/sqlparser/testdata/valid-up/test04/03.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test04/03.golden.sql @@ -19,4 +19,4 @@ aY9/quG9l1+eM1w8LyS7og/Vkpgu4709PhFJheeTx1uIp5aBvaTFM3kJ8d5PFg3ESW3ADG paaAgrG9IxDyIsgRgbULtIDqCy/jfhtgpVPvxRAAAAFQCPXzpVtY5yJTN1zBo9pTGeg+f3 EgAAAAZub25hbWUBAgME -----END OPENSSH PRIVATE KEY----- -'); +'); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test05/01.golden.sql b/internal/sqlparser/testdata/valid-up/test05/01.golden.sql index d39a4c2fa..655e9df93 100644 --- a/internal/sqlparser/testdata/valid-up/test05/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test05/01.golden.sql @@ -2,4 +2,4 @@ CREATE TABLE ssh_keys ( id integer NOT NULL, "publicKey" text -- insert comment there -); +); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test05/02.golden.sql b/internal/sqlparser/testdata/valid-up/test05/02.golden.sql index cdfd70821..953d2a17b 100644 --- a/internal/sqlparser/testdata/valid-up/test05/02.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test05/02.golden.sql @@ -3,4 +3,4 @@ CREATE TABLE ssh_keys_backup ( -- insert comment here "publicKey" text -- insert comment there -); +); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test06/01.golden.sql b/internal/sqlparser/testdata/valid-up/test06/01.golden.sql index fc4626e55..6bc4d22dc 100644 --- a/internal/sqlparser/testdata/valid-up/test06/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test06/01.golden.sql @@ -1,3 +1,3 @@ CREATE TABLE article ( id text, - content text); + content text); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test06/02.golden.sql b/internal/sqlparser/testdata/valid-up/test06/02.golden.sql index 5e9f194d0..4fbca2542 100644 --- a/internal/sqlparser/testdata/valid-up/test06/02.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test06/02.golden.sql @@ -2,4 +2,4 @@ INSERT INTO article (id, content) VALUES ('id_0001', E'# My markdown doc first paragraph -second paragraph'); +second paragraph'); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test06/03.golden.sql b/internal/sqlparser/testdata/valid-up/test06/03.golden.sql index 0dff78d93..4350288d7 100644 --- a/internal/sqlparser/testdata/valid-up/test06/03.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test06/03.golden.sql @@ -7,4 +7,4 @@ first paragraph -- with a comment -- with an indent comment -second paragraph'); +second paragraph'); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test06/04.golden.sql b/internal/sqlparser/testdata/valid-up/test06/04.golden.sql index 520524479..b72ddb06f 100644 --- a/internal/sqlparser/testdata/valid-up/test06/04.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test06/04.golden.sql @@ -9,4 +9,4 @@ BEGIN -- technology was successful RETURN 1; END; -$$ LANGUAGE plpgsql; +$$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test06/05.golden.sql b/internal/sqlparser/testdata/valid-up/test06/05.golden.sql index 8ee644ea2..fb12cf2a4 100644 --- a/internal/sqlparser/testdata/valid-up/test06/05.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test06/05.golden.sql @@ -5,4 +5,4 @@ this is an insert statement including empty lines. empty (blank) lines can be meaningful. leave the lines to keep the text syntax. -'); +'); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test07/01.golden.sql b/internal/sqlparser/testdata/valid-up/test07/01.golden.sql index f4dea28f6..a99b2e345 100644 --- a/internal/sqlparser/testdata/valid-up/test07/01.golden.sql +++ b/internal/sqlparser/testdata/valid-up/test07/01.golden.sql @@ -1 +1 @@ -CREATE INDEX ON public.users (user_id); +CREATE INDEX ON public.users (user_id); \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/01.golden.sql b/internal/sqlparser/testdata/valid-up/test08/01.golden.sql new file mode 100644 index 000000000..4e2928b02 --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/01.golden.sql @@ -0,0 +1,5 @@ +CREATE TABLE `table_a` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/02.golden.sql b/internal/sqlparser/testdata/valid-up/test08/02.golden.sql new file mode 100644 index 000000000..14d147f60 --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/02.golden.sql @@ -0,0 +1,5 @@ +CREATE TABLE `table_b` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/03.golden.sql b/internal/sqlparser/testdata/valid-up/test08/03.golden.sql new file mode 100644 index 000000000..2d7d7549f --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/03.golden.sql @@ -0,0 +1,5 @@ +CREATE TABLE `table_c` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/04.golden.sql b/internal/sqlparser/testdata/valid-up/test08/04.golden.sql new file mode 100644 index 000000000..037a5c6b5 --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/04.golden.sql @@ -0,0 +1 @@ +/*!80031 ALTER TABLE `table_a` MODIFY `column_1` TEXT NOT NULL */; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/05.golden.sql b/internal/sqlparser/testdata/valid-up/test08/05.golden.sql new file mode 100644 index 000000000..663e028dd --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/05.golden.sql @@ -0,0 +1 @@ +/*!80031 ALTER TABLE `table_b` MODIFY `column_2` TEXT NOT NULL */; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/06.golden.sql b/internal/sqlparser/testdata/valid-up/test08/06.golden.sql new file mode 100644 index 000000000..4fe07e43a --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/06.golden.sql @@ -0,0 +1 @@ +/*!80033 ALTER TABLE `table_c` MODIFY `column_3` TEXT NOT NULL */; \ No newline at end of file diff --git a/internal/sqlparser/testdata/valid-up/test08/input.sql b/internal/sqlparser/testdata/valid-up/test08/input.sql new file mode 100644 index 000000000..91a55d09f --- /dev/null +++ b/internal/sqlparser/testdata/valid-up/test08/input.sql @@ -0,0 +1,23 @@ +-- +goose Up + +CREATE TABLE `table_a` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; + +CREATE TABLE `table_b` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; + +CREATE TABLE `table_c` ( + `column_1` DATETIME DEFAULT NOW(), + `column_2` DATETIME DEFAULT NOW(), + `column_3` DATETIME DEFAULT NOW() +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; + +/*!80031 ALTER TABLE `table_a` MODIFY `column_1` TEXT NOT NULL */; +/*!80031 ALTER TABLE `table_b` MODIFY `column_2` TEXT NOT NULL */; +/*!80033 ALTER TABLE `table_c` MODIFY `column_3` TEXT NOT NULL */;