GraphQLinq icon indicating copy to clipboard operation
GraphQLinq copied to clipboard

Optional Parameters on GraphQL Query

Open jmarbutt opened this issue 1 year ago • 0 comments

When a GraphQL Schema allows optional parameters, create them as optional parameters in the generated function.

For example with the GraphQL Schema that is at the bottom of this issue, you can do queries like this:

{
  contacts {
    id
    first_name
    last_name
  }
}

Which would be nice to translate to the generated functions like this:

var allContacts = context.Contacts();

And allowing for the optional parameters like:

var allContacts = context.Contacts(limit:100, offset: 0);

I am using hasura as a graphql server and this is the generated schema having 1 table called contacts, its a lot but thought I would share it

schema {
  query: query_root
  mutation: mutation_root
  subscription: subscription_root
}

"""whether this query should be cached (Hasura Cloud only)"""
directive @cached(
  """measured in seconds"""
  ttl: Int! = 60

  """refresh the cache entry"""
  refresh: Boolean! = false
) on QUERY

"""
Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'.
"""
input String_comparison_exp {
  _eq: String
  _gt: String
  _gte: String

  """does the column match the given case-insensitive pattern"""
  _ilike: String
  _in: [String!]

  """
  does the column match the given POSIX regular expression, case insensitive
  """
  _iregex: String
  _is_null: Boolean

  """does the column match the given pattern"""
  _like: String
  _lt: String
  _lte: String
  _neq: String

  """does the column NOT match the given case-insensitive pattern"""
  _nilike: String
  _nin: [String!]

  """
  does the column NOT match the given POSIX regular expression, case insensitive
  """
  _niregex: String

  """does the column NOT match the given pattern"""
  _nlike: String

  """
  does the column NOT match the given POSIX regular expression, case sensitive
  """
  _nregex: String

  """does the column NOT match the given SQL regular expression"""
  _nsimilar: String

  """
  does the column match the given POSIX regular expression, case sensitive
  """
  _regex: String

  """does the column match the given SQL regular expression"""
  _similar: String
}

"""
columns and relationships of "contacts"
"""
type contacts {
  created_at: timestamptz!
  first_name: String!
  id: uuid!
  last_name: String!
  updated_at: timestamptz!
}

"""
aggregated selection of "contacts"
"""
type contacts_aggregate {
  aggregate: contacts_aggregate_fields
  nodes: [contacts!]!
}

"""
aggregate fields of "contacts"
"""
type contacts_aggregate_fields {
  count(columns: [contacts_select_column!], distinct: Boolean): Int!
  max: contacts_max_fields
  min: contacts_min_fields
}

"""
Boolean expression to filter rows from the table "contacts". All fields are combined with a logical 'AND'.
"""
input contacts_bool_exp {
  _and: [contacts_bool_exp!]
  _not: contacts_bool_exp
  _or: [contacts_bool_exp!]
  created_at: timestamptz_comparison_exp
  first_name: String_comparison_exp
  id: uuid_comparison_exp
  last_name: String_comparison_exp
  updated_at: timestamptz_comparison_exp
}

"""
unique or primary key constraints on table "contacts"
"""
enum contacts_constraint {
  """
  unique or primary key constraint on columns "id"
  """
  contacts_pkey
}

"""
input type for inserting data into table "contacts"
"""
input contacts_insert_input {
  created_at: timestamptz
  first_name: String
  id: uuid
  last_name: String
  updated_at: timestamptz
}

"""aggregate max on columns"""
type contacts_max_fields {
  created_at: timestamptz
  first_name: String
  id: uuid
  last_name: String
  updated_at: timestamptz
}

"""aggregate min on columns"""
type contacts_min_fields {
  created_at: timestamptz
  first_name: String
  id: uuid
  last_name: String
  updated_at: timestamptz
}

"""
response of any mutation on the table "contacts"
"""
type contacts_mutation_response {
  """number of rows affected by the mutation"""
  affected_rows: Int!

  """data from the rows affected by the mutation"""
  returning: [contacts!]!
}

"""
on_conflict condition type for table "contacts"
"""
input contacts_on_conflict {
  constraint: contacts_constraint!
  update_columns: [contacts_update_column!]! = []
  where: contacts_bool_exp
}

"""Ordering options when selecting data from "contacts"."""
input contacts_order_by {
  created_at: order_by
  first_name: order_by
  id: order_by
  last_name: order_by
  updated_at: order_by
}

"""primary key columns input for table: contacts"""
input contacts_pk_columns_input {
  id: uuid!
}

"""
select columns of table "contacts"
"""
enum contacts_select_column {
  """column name"""
  created_at

  """column name"""
  first_name

  """column name"""
  id

  """column name"""
  last_name

  """column name"""
  updated_at
}

"""
input type for updating data in table "contacts"
"""
input contacts_set_input {
  created_at: timestamptz
  first_name: String
  id: uuid
  last_name: String
  updated_at: timestamptz
}

"""
Streaming cursor of the table "contacts"
"""
input contacts_stream_cursor_input {
  """Stream column input with initial value"""
  initial_value: contacts_stream_cursor_value_input!

  """cursor ordering"""
  ordering: cursor_ordering
}

"""Initial value of the column from where the streaming should start"""
input contacts_stream_cursor_value_input {
  created_at: timestamptz
  first_name: String
  id: uuid
  last_name: String
  updated_at: timestamptz
}

"""
update columns of table "contacts"
"""
enum contacts_update_column {
  """column name"""
  created_at

  """column name"""
  first_name

  """column name"""
  id

  """column name"""
  last_name

  """column name"""
  updated_at
}

input contacts_updates {
  """sets the columns of the filtered rows to the given values"""
  _set: contacts_set_input
  where: contacts_bool_exp!
}

"""ordering argument of a cursor"""
enum cursor_ordering {
  """ascending ordering of the cursor"""
  ASC

  """descending ordering of the cursor"""
  DESC
}

"""mutation root"""
type mutation_root {
  """
  delete data from the table: "contacts"
  """
  delete_contacts(
    """filter the rows which have to be deleted"""
    where: contacts_bool_exp!
  ): contacts_mutation_response

  """
  delete single row from the table: "contacts"
  """
  delete_contacts_by_pk(id: uuid!): contacts

  """
  insert data into the table: "contacts"
  """
  insert_contacts(
    """the rows to be inserted"""
    objects: [contacts_insert_input!]!

    """upsert condition"""
    on_conflict: contacts_on_conflict
  ): contacts_mutation_response

  """
  insert a single row into the table: "contacts"
  """
  insert_contacts_one(
    """the row to be inserted"""
    object: contacts_insert_input!

    """upsert condition"""
    on_conflict: contacts_on_conflict
  ): contacts

  """
  update data of the table: "contacts"
  """
  update_contacts(
    """sets the columns of the filtered rows to the given values"""
    _set: contacts_set_input

    """filter the rows which have to be updated"""
    where: contacts_bool_exp!
  ): contacts_mutation_response

  """
  update single row of the table: "contacts"
  """
  update_contacts_by_pk(
    """sets the columns of the filtered rows to the given values"""
    _set: contacts_set_input
    pk_columns: contacts_pk_columns_input!
  ): contacts

  """
  update multiples rows of table: "contacts"
  """
  update_contacts_many(
    """updates to execute, in order"""
    updates: [contacts_updates!]!
  ): [contacts_mutation_response]
}

"""column ordering options"""
enum order_by {
  """in ascending order, nulls last"""
  asc

  """in ascending order, nulls first"""
  asc_nulls_first

  """in ascending order, nulls last"""
  asc_nulls_last

  """in descending order, nulls first"""
  desc

  """in descending order, nulls first"""
  desc_nulls_first

  """in descending order, nulls last"""
  desc_nulls_last
}

type query_root {
  """
  fetch data from the table: "contacts"
  """
  contacts(
    """distinct select on columns"""
    distinct_on: [contacts_select_column!]

    """limit the number of rows returned"""
    limit: Int

    """skip the first n rows. Use only with order_by"""
    offset: Int

    """sort the rows by one or more columns"""
    order_by: [contacts_order_by!]

    """filter the rows returned"""
    where: contacts_bool_exp
  ): [contacts!]!

  """
  fetch aggregated fields from the table: "contacts"
  """
  contacts_aggregate(
    """distinct select on columns"""
    distinct_on: [contacts_select_column!]

    """limit the number of rows returned"""
    limit: Int

    """skip the first n rows. Use only with order_by"""
    offset: Int

    """sort the rows by one or more columns"""
    order_by: [contacts_order_by!]

    """filter the rows returned"""
    where: contacts_bool_exp
  ): contacts_aggregate!

  """fetch data from the table: "contacts" using primary key columns"""
  contacts_by_pk(id: uuid!): contacts
}

type subscription_root {
  """
  fetch data from the table: "contacts"
  """
  contacts(
    """distinct select on columns"""
    distinct_on: [contacts_select_column!]

    """limit the number of rows returned"""
    limit: Int

    """skip the first n rows. Use only with order_by"""
    offset: Int

    """sort the rows by one or more columns"""
    order_by: [contacts_order_by!]

    """filter the rows returned"""
    where: contacts_bool_exp
  ): [contacts!]!

  """
  fetch aggregated fields from the table: "contacts"
  """
  contacts_aggregate(
    """distinct select on columns"""
    distinct_on: [contacts_select_column!]

    """limit the number of rows returned"""
    limit: Int

    """skip the first n rows. Use only with order_by"""
    offset: Int

    """sort the rows by one or more columns"""
    order_by: [contacts_order_by!]

    """filter the rows returned"""
    where: contacts_bool_exp
  ): contacts_aggregate!

  """fetch data from the table: "contacts" using primary key columns"""
  contacts_by_pk(id: uuid!): contacts

  """
  fetch data from the table in a streaming manner : "contacts"
  """
  contacts_stream(
    """maximum number of rows returned in a single batch"""
    batch_size: Int!

    """cursor to stream the results returned by the query"""
    cursor: [contacts_stream_cursor_input]!

    """filter the rows returned"""
    where: contacts_bool_exp
  ): [contacts!]!
}

scalar timestamptz

"""
Boolean expression to compare columns of type "timestamptz". All fields are combined with logical 'AND'.
"""
input timestamptz_comparison_exp {
  _eq: timestamptz
  _gt: timestamptz
  _gte: timestamptz
  _in: [timestamptz!]
  _is_null: Boolean
  _lt: timestamptz
  _lte: timestamptz
  _neq: timestamptz
  _nin: [timestamptz!]
}

scalar uuid

"""
Boolean expression to compare columns of type "uuid". All fields are combined with logical 'AND'.
"""
input uuid_comparison_exp {
  _eq: uuid
  _gt: uuid
  _gte: uuid
  _in: [uuid!]
  _is_null: Boolean
  _lt: uuid
  _lte: uuid
  _neq: uuid
  _nin: [uuid!]
}


jmarbutt avatar Sep 14 '22 16:09 jmarbutt