Skip to content

Latest commit

 

History

History
145 lines (97 loc) · 3.86 KB

README.md

File metadata and controls

145 lines (97 loc) · 3.86 KB

PowerSync Kysely Driver

PowerSync is a service and set of SDKs that keeps Postgres databases in sync with on-device SQLite databases.

This package (packages/kysely-driver) brings the benefits of an ORM through our maintained Kysely driver to PowerSync.

Beta Release

The kysely-driver package is currently in a beta release.

Getting started

Setup the PowerSync Database and wrap it with Kysely.

import { wrapPowerSyncWithKysely } from '@powersync/kysely-driver';
import { WASQLitePowerSyncDatabaseOpenFactory } from "@journeyapps/powersync-sdk-web";
import { appSchema } from "./schema";
import { Database } from "./types";

const factory = new WASQLitePowerSyncDatabaseOpenFactory({
  schema: appSchema,
  dbFilename: "test.sqlite",
});

export const powerSyncDb = factory.getInstance();

export const db = wrapPowerSyncWithKysely<Database>(powerSyncDb)

For more information on Kysely typing here.

Now you are able to use Kysely queries:

Select

  • In Kysely
  const result = await db.selectFrom('users').selectAll().execute();

  // {id: '1', name: 'user1', id: '2', name: 'user2'}
  • In PowerSync
  const result = await powerSyncDb.getAll('SELECT * from users')

  // {id: '1', name: 'user1', id: '2', name: 'user2'}

Insert

  • In Kysely
  await db.insertInto('users').values({ id: '1', name: 'John' }).execute();
  const result = await db.selectFrom('users').selectAll().execute();

  // {id: '1', name: 'John'}
  • In PowerSync
  await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(1, ?)', ['John']);
  const result = await powerSyncDb.getAll('SELECT * from users')

  // {id: '1', name: 'John'}

Delete

  • In Kysely
  await db.insertInto('users').values({ id: '2', name: 'Ben' }).execute();
  await db.deleteFrom('users').where('name', '=', 'Ben').execute();
  const result = await db.selectFrom('users').selectAll().execute();

  // { }
  • In PowerSync
  await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(2, ?)', ['Ben']);
  await powerSyncDb.execute(`DELETE FROM users WHERE name = ?`, ['Ben']);
  const result = await powerSyncDb.getAll('SELECT * from users')

  // { }

Update

  • In Kysely
  await db.insertInto('users').values({ id: '3', name: 'Lucy' }).execute();
  await db.updateTable('users').where('name', '=', 'Lucy').set('name', 'Lucy Smith').execute();
  const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow();

  // { id: '3', name: 'Lucy Smith' }
  • In PowerSync
  await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(3, ?)', ['Lucy']);
  await powerSyncDb.execute("UPDATE users SET name = ? WHERE name = ?", ['Lucy Smith', 'Lucy']);
  const result = await powerSyncDb.getAll('SELECT * from users')

  // { id: '3', name: 'Lucy Smith' }

Transaction

  • In Kysely
  await db.transaction().execute(async (transaction) => {
    await transaction.insertInto('users').values({ id: '4', name: 'James' }).execute();
    await transaction.updateTable('users').where('name', '=', 'James').set('name', 'James Smith').execute();
  });
  const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow();

    // { id: '4', name: 'James Smith' }
  • In PowerSync
  await powerSyncDb.writeTransaction((transaction) => {
    await transaction.execute('INSERT INTO users (id, name) VALUES(4, ?)', ['James']);
    await transaction.execute("UPDATE users SET name = ? WHERE name = ?", ['James Smith', 'James']);
  })
  const result = await powerSyncDb.getAll('SELECT * from users')

  // { id: '4', name: 'James Smith' }