kysely-singlestore
TypeScript icon, indicating that this package has built-in type declarations

0.4.4 • Public • Published

Logo

kysely-singlestore

tests Codacy Badge Powered by TypeScript

Kysely dialects, plugins and other goodies for SingleStore (formerly MemSQL).

Installation

Node.js

NPM 7+

npm i kysely-singlestore

NPM <7

npm i kysely-singlestore kysely

Yarn

yarn add kysely-singlestore kysely

PNPM

pnpm add kysely-singlestore kysely

Deno

This package uses/extends some Kysely types and classes, which are imported using it's NPM package name -- not a relative file path or CDN url.

To fix that, add an import_map.json file.

{
  "imports": {
    "kysely": "https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js"
  }
}

Usage

Data API Dialect

SingleStore Data API allows executing SQL queries in the browser and is a great fit for serverless functions and other auto-scaling compute services. It does not support transactions at this point in time.

Node.js 16.8+

Older versions of node are also supported, just swap undici with node-fetch.

import {Kysely} from 'kysely'
import {SingleStoreDataApiDialect, SingleStoreDataType} from 'kysely-singlestore'
import {fetch} from 'undici'

interface Database {
  person: {
    id: string
    first_name: string | null
    last_name: string | null
  }
  pet: {
    id: string
    name: string
    owner_id: string
  }
}

const db = new Kysely<Database>({
  dialect: new SingleStoreDataApiDialect({
    database: '<database>',
    deserialization: {
      castDatesAsNativeDates: true,
      castTinyIntAsBoolean: true,
      deserialize: (value, dataType, columnName) =>
        dataType === SingleStoreDataType.Json && columnName === 'pet' ? new Pet(value) : undefined,
      unwrapDecimals: true,
    },
    fetch,
    hostname: '<hostname>',
    password: '<password>',
    username: '<username>',
  }),
})

Browser

import {Kysely} from 'kysely'
import {SingleStoreDataApiDialect, SingleStoreDataType} from 'kysely-singlestore'

interface Database {
  person: {
    id: string
    first_name: string | null
    last_name: string | null
  }
  pet: {
    id: string
    name: string
    owner_id: string
  }
}

const db = new Kysely<Database>({
  dialect: new SingleStoreDataApiDialect({
    database: '<database>',
    deserialization: {
      castDatesAsNativeDates: true,
      castTinyIntAsBoolean: true,
      deserialize: (value, dataType, columnName) =>
        dataType === SingleStoreDataType.Json && columnName === 'pet' ? new Pet(value) : undefined,
      unwrapDecimals: true,
    },
    fetch: window.fetch.bind(window),
    hostname: '<hostname>',
    password: '<password>',
    username: '<username>',
  }),
})

Deno

import {Kysely} from 'https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js'
import {
  SingleStoreDataApiDialect,
  SingleStoreDataType,
} from 'https://cdn.jsdelivr.net/npm/kysely-singlestore@latest/dist/esm/index.js'

interface Database {
  person: {
    id: string
    first_name: string | null
    last_name: string | null
  }
  pet: {
    id: string
    name: string
    owner_id: string
  }
}

const db = new Kysely<Database>({
  dialect: new SingleStoreDataApiDialect({
    database: '<database>',
    deserialization: {
      castDatesAsNativeDates: true,
      castTinyIntAsBoolean: true,
      deserialize: (value, dataType, columnName) =>
        dataType === SingleStoreDataType.Json && columnName === 'pet' ? new Pet(value) : undefined,
      unwrapDecimals: true,
    },
    fetch: fetch,
    hostname: '<hostname>',
    password: '<password>',
    username: '<username>',
  }),
})

"Classic" Dialect - SoonTM

SingleStore is wire-compatible with MySQL so you can connect to it using mysql2 in node environments, and take advantage of connection pools and transactions.

License

MIT License, see LICENSE

Dependencies (0)

    Dev Dependencies (27)

    Package Sidebar

    Install

    npm i kysely-singlestore

    Weekly Downloads

    36

    Version

    0.4.4

    License

    MIT

    Unpacked Size

    104 kB

    Total Files

    11

    Last publish

    Collaborators

    • igalklebanov