hunk.code_window: import qualified Hasura.GraphQL.Transport.HTTP.Protocol as GH
   import qualified Hasura.GraphQL.Validate                as GV
   import qualified Hasura.RQL.DML.Select                  as RS
   import qualified Hasura.Server.Query                    as RQ
   data GQLExplain
     = GQLExplain
     { _gqeQuery :: !GH.GraphQLRequest
  
hunk.labels: keep keep keep add keep keep keep keep
hunk.after_edit: import qualified Hasura.SQL.DML                         as S
  
hunk.file_path: server/src-lib/Hasura/GraphQL/Explain.hs
hunk.type: add
file: type: bulk
  args:
  
  #Author table
  - type: run_sql
    args:
      sql: |
        create table author(
            id serial primary key, 
            name text unique
        );
  - type: track_table
    args:
      schema: public
      name: author
  
  #Article table
  - type: run_sql
    args:
      sql: |
        CREATE TABLE article (
          id SERIAL PRIMARY KEY,
          title TEXT,
          content TEXT,
          author_id INTEGER REFERENCES author(id),
          is_published BOOLEAN,
          published_on TIMESTAMP
        )
  - type: track_table
    args:
      schema: public
      name: article
  
  #Person table
  - type: run_sql
    args:
      sql: |
        CREATE TABLE person (
          id SERIAL PRIMARY KEY,
          details JSONB NOT NULL
        )
  - type: track_table
    args:
      schema: public
      name: person
  
  #Order table
  - type: run_sql
    args:
      sql: |
        CREATE TABLE orders (
          id SERIAL PRIMARY KEY,
          placed TIMESTAMPTZ NOT NULL,
          shipped TIMESTAMPTZ
        )
  - type: track_table
    args:
      schema: public
      name: orders
  
  
  #Object relationship
  - 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 Author table data
  - type: insert
    args:
      table: author
      objects:
        - name: Author 1
        - name: Author 2
  
  #Insert aticle table data
  - type: insert
    args:
      table: article
      objects:
      - content: Sample article content
        title: Article 1
      - content: Sample article content
        title: Article 2
      - content: Sample article content
        title: Article 3
      
  