graphql-engine/server/tests-py/queries/graphql_query/mysql/schema_setup_mysql.yaml
Chris Done 459a7adbfb Add Types/FromIr changes for MySQL to work with the DataLoader
While it looks like a lot of work in FromIr.hs, you can rather review the type changes in `Hasura.Backends.MySQL.Types.Internal` and the changes to FromIr are only to reflect that. Essentially we're simplifying the FromIr code to not think about SQL-based joins: instead, FromIr produces fields necessary for the dataloader Plan/Execute to do their job properly.

I've done my best to ensure that all the hunks in the diff in this PR are minimal for slightly easier perusing.

I think future PRs will be more intentionally well structured, rather than created retroactively.

**Preceding PR:** #2549

**Next PR**: #2367

The tests have been run like this on my machine. I don't know more beyond that.

```
docker run -i -e "PYTEST_ADDOPTS=--color=yes" -e "TERM=xterm-256color" --net=host -v`pwd`:`pwd` -w`pwd`/server/tests-py chrisdone/hasura-pytest:b0f26f615 pytest  --hge-urls="http://localhost:8080"  --pg-urls="postgres://chinook:chinook@localhost:5432/chinook"  --backend mysql -k MySQL
```

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2608
Co-authored-by: Abby Sassel <3883855+sassela@users.noreply.github.com>
GitOrigin-RevId: a6483335c3036963360dde7d7d7eaf10859351cb
2021-10-21 23:51:17 +00:00

95 lines
2.7 KiB
YAML

# For MySQL, every statement ends with a `;\n` (that's a semicolon followed by
# a newline), and it cannot parse the next if a new statement follows after an
# indentation, like we normally write for other backends. So breaking apart the
# requests into individual statements turned out to be the ergonomic way to make
# this work.
#
# Also tried typical YAML multi-line (block) syntax in all combinations `|`,
# `>` with `+` and `-`, including specification of the indentation levels with
# numbers, without success.
#
# NOTE: For local development, if manual data seeding is ever necessary, we
# maintain a `mysql-ddl-dml.sql` that should always remain in sync with this
# file.
type: bulk
args:
- type: mysql_run_sql
args:
source: mysql
sql: |
DROP TABLE IF EXISTS article;
- type: mysql_run_sql
args:
source: mysql
sql: |
DROP TABLE IF EXISTS author;
- type: mysql_run_sql
args:
source: mysql
sql: |
CREATE TABLE author
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(45) UNIQUE KEY,
createdAt DATETIME
);
- type: mysql_run_sql
args:
source: mysql
sql: |
INSERT INTO author
(name, createdAt)
VALUES
( 'Author 1', '2017-09-21 09:39:44' ),
( 'Author 2', '2017-09-21 09:50:44' );
- type: mysql_run_sql
args:
source: mysql
sql: |
CREATE TABLE article (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title TEXT,
content TEXT,
is_published BIT,
published_on TIMESTAMP,
author_id INT UNSIGNED,
co_author_id INT UNSIGNED,
FOREIGN KEY (author_id) REFERENCES author(id),
FOREIGN KEY (co_author_id) REFERENCES author(id)
);
- type: mysql_run_sql
args:
source: mysql
sql: |
INSERT INTO article
(title, content, author_id, is_published)
VALUES
( 'Article 1', 'Sample article content 1', 1, 0 ),
( 'Article 2', 'Sample article content 2', 1, 1 ),
( 'Article 3', 'Sample article content 3', 2, 1 );
# NOTE on dropping tables that have dependent views:
# ref: https://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html
#
# You can use DROP TABLE or ALTER TABLE to drop or alter a table that is used
# in a view definition. No warning results from the DROP or ALTER operation,
# even though this invalidates the view. Instead, an error occurs later, when
# the view is used. CHECK TABLE can be used to check for views that have been
# invalidated by DROP or ALTER operations.
- type: mysql_run_sql
args:
source: mysql
sql: |
CREATE OR REPLACE VIEW search_author_view AS
SELECT * FROM author;