kysely-singlestore
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