Order by multi-column indexes on PostGraphile connections
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
__tests__
scripts
.eslintrc.js
.gitattributes
.gitignore
.prettierrc.json
LICENSE
README.md
index.js
package.json
yarn.lock

README.md

@graphile-contrib/pg-order-by-multi-column-index

Package on npm CircleCI

This Graphile Engine plugin adds enum values to the orderBy argument on connections, allowing you to order by multi-column indexes.

Requires postgraphile@^4.1.0 or graphile-build-pg@^4.1.0

NOTE: If you're not using ignoreIndexes: false, then you probably don't need this plugin.

PostGraphile's ignoreIndexes: false option only exposes the first column of each multi-column index on orderBy. This prevents clients from sending queries with an array of column names/directions that can't make use of the multi-column index. This plugin adds enum values to orderBy that match forward and backward scans of the index.

Example:

create index on p.person (last_name ASC, first_name ASC);
{
  allPeople(orderBy: LAST_NAME_ASC__FIRST_NAME_ASC) {
    nodes {
      id
      firstName
      lastName
    }
  }
}

Usage

Append this plugin and the additional orderBy enum values will be added to your schema.

CLI

yarn add postgraphile
yarn add @graphile-contrib/pg-order-by-multi-column-index
npx postgraphile --append-plugins @graphile-contrib/pg-order-by-multi-column-index

Library

const express = require("express");
const { postgraphile } = require("postgraphile");
const PgOrderByMultiColumnIndexPlugin = require("@graphile-contrib/pg-order-by-multi-column-index");

const app = express();

app.use(
  postgraphile(process.env.DATABASE_URL, "app_public", {
    appendPlugins: [PgOrderByMultiColumnIndexPlugin],
    graphiql: true,
  })
);

app.listen(5000);