mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-21 14:31:55 +03:00
5cfac6ea87
https://github.com/hasura/graphql-engine-mono/pull/1793 GitOrigin-RevId: e0396c0d4d96fc8f9bdbd7567193933db5b295a6
258 lines
5.3 KiB
YAML
258 lines
5.3 KiB
YAML
type: bulk
|
|
args:
|
|
|
|
#Contact table
|
|
|
|
- type: run_sql
|
|
args:
|
|
sql: |
|
|
CREATE TABLE contact (
|
|
id SERIAL PRIMARY KEY,
|
|
phone INTEGER,
|
|
address TEXT
|
|
);
|
|
|
|
create table author(
|
|
id serial primary key,
|
|
name text unique,
|
|
contact_id INTEGER REFERENCES contact(id)
|
|
);
|
|
|
|
CREATE TABLE article (
|
|
id SERIAL PRIMARY KEY,
|
|
title TEXT,
|
|
content TEXT,
|
|
author_id INTEGER REFERENCES author(id),
|
|
is_published BOOLEAN,
|
|
published_on TIMESTAMP
|
|
);
|
|
|
|
CREATE FUNCTION get_articles(hasura_session json, author_row author)
|
|
RETURNS SETOF article AS $$
|
|
SELECT *
|
|
FROM article
|
|
WHERE author_id = author_row.id AND
|
|
( title ilike ('%' || (hasura_session ->> 'x-hasura-search') || '%')
|
|
OR content ilike ('%' || (hasura_session ->> 'x-hasura-search') || '%')
|
|
)
|
|
$$ LANGUAGE SQL STABLE;
|
|
|
|
insert into contact (phone)
|
|
values
|
|
(1234567890),
|
|
(1234567891);
|
|
|
|
insert into author (name, contact_id)
|
|
values
|
|
('Author 1', 2),
|
|
('Author 2', 1);
|
|
|
|
insert into article (title,content,author_id,is_published)
|
|
values
|
|
(
|
|
'Article 1',
|
|
'Sample article content 1',
|
|
1,
|
|
false
|
|
),
|
|
(
|
|
'Article 2',
|
|
'Sample article content 2',
|
|
1,
|
|
true
|
|
),
|
|
(
|
|
'Article 3',
|
|
'Sample article content 3',
|
|
2,
|
|
true
|
|
);
|
|
create table "Album" (
|
|
album_id INTEGER NOT NULL PRIMARY KEY,
|
|
title TEXT NOT NULL
|
|
);
|
|
|
|
create table "Track" (
|
|
track_id INTEGER NOT NULL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
album_id INTEGER REFERENCES "Album"(album_id),
|
|
milliseconds INTEGER NOT NULL,
|
|
bytes INTEGER NOT NULL
|
|
);
|
|
|
|
insert into "Album" (album_id, title)
|
|
values ( 1, 'Big Ones' ), (2, 'Face Lift');
|
|
|
|
insert into "Track"
|
|
(track_id, name, album_id, milliseconds, bytes)
|
|
values
|
|
( 1, 'Restless', 1, 123654, 9836284),
|
|
( 2, 'Keepup', 1, 637483, 6382913) ,
|
|
( 3, 'Havana', 1, 234512, 986384) ,
|
|
( 4, 'Evil Walks', 2, 437294, 6284302) ,
|
|
( 5, 'Random', 2, 1094732, 6032547) ,
|
|
( 6, 'Good One', 2, 346208, 6732987) ,
|
|
( 7, 'Mistress', 2, 420985, 7521946);
|
|
|
|
CREATE FUNCTION track_size_mb(track_row "Track")
|
|
RETURNS INTEGER AS $$
|
|
SELECT (track_row.bytes / 1048576)
|
|
$$ LANGUAGE SQL STABLE;
|
|
|
|
CREATE table "Tag" (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
album_id INTEGER NOT NULL REFERENCES "Album"(album_id)
|
|
);
|
|
|
|
INSERT INTO "Tag" (name, album_id)
|
|
VALUES
|
|
( 'Rock', 1),
|
|
( 'Folk', 1),
|
|
( 'Hip Hop', 2);
|
|
|
|
CREATE TABLE employee (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
department TEXT,
|
|
salary INTEGER
|
|
);
|
|
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: contact
|
|
|
|
#Author table
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: author
|
|
|
|
#Article table
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: article
|
|
|
|
# Computed field to author table
|
|
- type: add_computed_field
|
|
args:
|
|
table: author
|
|
name: get_articles
|
|
definition:
|
|
function: get_articles
|
|
table_argument: author_row
|
|
session_argument: hasura_session
|
|
|
|
#Object relationship
|
|
- type: create_object_relationship
|
|
args:
|
|
table: author
|
|
name: contact
|
|
using:
|
|
foreign_key_constraint_on: contact_id
|
|
|
|
- type: create_object_relationship
|
|
args:
|
|
table: article
|
|
name: author
|
|
using:
|
|
foreign_key_constraint_on: author_id
|
|
|
|
#Array relationship
|
|
- type: create_array_relationship
|
|
args:
|
|
table: author
|
|
name: articles
|
|
using:
|
|
foreign_key_constraint_on:
|
|
table: article
|
|
column: author_id
|
|
|
|
#Insert values
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: Album
|
|
|
|
- type: track_table
|
|
args:
|
|
schema: public
|
|
name: Track
|
|
|
|
- type: create_object_relationship
|
|
args:
|
|
table: Track
|
|
name: Album
|
|
using:
|
|
foreign_key_constraint_on: album_id
|
|
|
|
- type: create_array_relationship
|
|
args:
|
|
table: Album
|
|
name: Tracks
|
|
using:
|
|
foreign_key_constraint_on:
|
|
table: Track
|
|
column: album_id
|
|
|
|
# Create computed field for Track table
|
|
- type: add_computed_field
|
|
args:
|
|
table: Track
|
|
name: size
|
|
definition:
|
|
function: track_size_mb
|
|
|
|
# Insert values in Album and Track
|
|
- type: track_table
|
|
args:
|
|
name: Tag
|
|
schema: public
|
|
|
|
- type: create_array_relationship
|
|
args:
|
|
table: Album
|
|
name: Tags
|
|
using:
|
|
foreign_key_constraint_on:
|
|
table: Tag
|
|
column: album_id
|
|
|
|
# Create employee table
|
|
- type: track_table
|
|
args:
|
|
name: employee
|
|
schema: public
|
|
|
|
# Insert data into employee table
|
|
- type: insert
|
|
args:
|
|
table: employee
|
|
objects:
|
|
- name: Kai
|
|
department: Engineering
|
|
salary: 2345
|
|
- name: Zara
|
|
department: Services
|
|
salary: 1234
|
|
- name: Kelsy
|
|
department: Services
|
|
salary: 2134
|
|
- name: Damien
|
|
department: Product
|
|
salary: 3124
|
|
- name: Kamila
|
|
department: Engineering
|
|
salary: 4325
|
|
- name: Dara
|
|
department: Product
|
|
salary: 1209
|
|
- name: Rickard
|
|
department: Services
|
|
salary: 2223
|
|
- name: Bent
|
|
department: Engineering
|
|
salary: 4122
|